C語言綜合案例:學生成績管理系統

C語言綜合案例:學生成績管理系統

需求

1.存儲最多50名學生的信息(不使用結構體)

2.每個學生包含:

  • 學號(字符數組)
  • 姓名(字符數組)
  • 3門課程成績(一維數組)

3.實現功能菜單:

  • 添加學生信息
  • 顯示所有學生信息
  • 計算學生平均分
  • 查找最高分科目
  • 退出系統

代碼

/*************************************************************************> File Name:    demo.c> Author:       張扣> Description:C語言綜合案例:學生成績管理系統> Created Time: 2025年02月27日 星期四 21時10分38秒************************************************************************/#include <stdio.h>
#include <string.h>//常量定義
#define MAX_STU 50      //定義學生數量
#define NAME_LEN 20     //名字的最大長度
#define ID_LEN 8        //學號的最大長度
#define COURSE_NUM 3    //課程數量//全局數組實現數據存儲
char stu_id[MAX_STU][ID_LEN];       //學號二維數組
char stu_name[MAX_STU][NAME_LEN];   //姓名二維數組
int scores[MAX_STU][COURSE_NUM];    //成績二維數組
int stu_count = 0;                  //當前實際學生數/***輸入校驗成績*course 課程名稱*/
int get_valid_score(const char* course)//const修飾的變量,值不能改變
{int score;while(1){printf("請輸入%s成績(0~100):",course);//校驗:1.校驗輸入的數據格式 2.校驗成績的范圍是否正確if(scanf("%d",&score == 1 && score >= 0 && score <= 100)){return score;}//輸入有誤while(getchar() != '\n');   //清空輸入緩沖區printf("成績輸入有誤!\n");}
}/***添加學生信息*/
void add_student()
{//判斷數組是否已經存滿if(stu_count >= MAX_STU){printf("存儲已滿!\n");return;//函數返回,后續代碼不再執行}printf("\n---添加第%d個學生---\n",stu_count + 1);//輸入學號printf("請輸入學號:");scanf("%s",stu_id[stu_count]);//輸入姓名printf("請輸入姓名:");getchar();scanf("%[^\n]",stu_name[stu_count]);//%[^\n]匹配除了\n以外的輸入//輸入各科成績scores[stu_count][0] = get_valid_score("語文");scores[stu_count][1] = get_valid_score("數學");scores[stu_count][2] = get_valid_score("英語");stu_count++;
}/***顯示所有學生信息*/
void show_all()
{if(stu_count == 0){printf("暫無學生信息!\n");return;//跳出函數,后續代碼不執行}//格式化輸出信息printf("\n%-12s%-20s%-12s%-12s%-12s\n","學號","姓名","語文","數學","英語");for(int i = 0; i < stu_count; i++){//獲取學號和姓名printf("%-12s%-20s",stu_id[i],stu_name[i]);for(int j = 0; j <  COURSE_NUM; j++){printf("%-12d",scores[i][j]);}printf("\n");}printf("\n");
}/***計算平均分*/
void calc_average()
{if(stu_count == 0){printf("暫無數據!\n");return;}char target_id[ID_LEN];printf("請輸入要查詢的學號:");scanf("%s",target_id);for(int i = 0; i < stu_count; i++){if(strcmp(stu_id[i],target_id) == 0){float sum = 0;for(int j = 0; j < COURSE_NUM; j++){sum += scores[i][j];}printf("平均分:%.2f\n",sum/COURSE_NUM);return;}}printf("未找到該學生!\n");
}/***查找最高分科目*/
void find_max()
{int max_score = -1;char max_course[20];char max_stu[NAME_LEN];for(int i = 0; i < stu_count; i++){for(int j = 0; j < COURSE_NUM; j++){if(scores[i][j] > max_score){max_score = scores[i][j];//最高成績對應的姓名strcpy(max_stu,stu_name[i]);switch(j){case 0:strcpy(max_course,"語文");break;case 1:strcpy(max_course,"數學");break;case 2:strcpy(max_course,"英語");break;}}}}if(max_score != -1){printf("最高分記錄:%s的%s獲得%d分\n",max_stu,max_course,max_score);}else{printf("暫無數據!\n");}
}int main(int argc,char *argv[])
{//定義一個變量,用來接收用戶的輸入int choice;while(1){//設計頭printf("\n=== 學生成績管理系統 v1.0 ===\n");printf("1.添加學生信息\n");printf("2.顯示所有學生信息\n");printf("3.查看平均分\n");printf("4.查看最高分\n");printf("5.退出系統\n");printf("請選擇操作:");//過濾非數字int result = scanf("%d",&choice);//該判斷的作用,檢測是否輸入的是整數,輸入的數據匹配scanf() == 1,不匹配scanf() != 1if(result != 1){//如果輸入的不是數字,就執行這個判斷//清空輸入緩沖區while(getchar() != '\n');printf("輸入有誤!\n");continue;}//過濾掉1~5以外的數字//校驗switch(choice){case 1://添加學生信息add_student();break;case 2://顯示所有學生信息show_all();break;case 3://查看平均分calc_average();break;case 4://查找最高分find_max();break;case 5://退出系統printf("系統已退出!\n");return 0;default:printf("無效選項!\n");}}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/70818.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70818.shtml
英文地址,請注明出處:http://en.pswp.cn/web/70818.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Day 51 卡瑪筆記

這是基于代碼隨想錄的每日打卡 647. 回文子串 給你一個字符串 s &#xff0c;請你統計并返回這個字符串中 回文子串 的數目。 回文字符串 是正著讀和倒過來讀一樣的字符串。 子字符串 是字符串中的由連續字符組成的一個序列。 示例 1&#xff1a; 輸入&#xff1a;s &q…

結構型模式---外觀模式

概念 外觀模式是一種結構型設計模式&#xff0c;它的核心思想是為復雜的子系統提供一個統一的接口&#xff0c;簡化客戶端與子系統的交互。外觀模式通過引入一個高層接口&#xff0c;隱藏子系統的復雜性&#xff0c;使客戶端更容易使用。 適用場景 用于客戶端無需具體操作子…

DeepSeek開源周第二彈:DeepEP如何用RDMA+FP8讓MoE模型飛起來?

一、引言&#xff1a;MoE模型的通信瓶頸與DeepEP的誕生 在混合專家&#xff08;MoE&#xff09;模型訓練中&#xff0c;專家間的全對全&#xff08;All-to-All&#xff09;通信成為性能瓶頸。傳統方案在跨節點傳輸時帶寬利用率不足50%&#xff0c;延遲高達300μs以上。DeepSee…

多通道數據采集和信號生成的模塊化儀器如何重構飛機電子可靠性測試體系?

飛機的核心電子系統包括發電與配電系統&#xff0c;飛機內部所有設備和系統之間的內部數據通信系統&#xff0c;以及用于外部通信的射頻設備。其他所有航空電子元件都依賴這些關鍵總線進行電力傳輸或數據通信。在本文中&#xff0c;我們將了解模塊化儀器&#xff08;無論是PCIe…

【Godot4.3】基于繪圖函數的矢量蒙版效果與UV換算

概述 在設計圓角容器時突發奇想&#xff1a; 將圓角矩形的每個頂點坐標除以對應圓角矩形所在Rect2的size&#xff0c;就得到了頂點對應的UV坐標。然后使用draw_colored_polygon&#xff0c;便可以做到用圖片填充圓角矩形的效果。而且這種計算的效果就是圖片隨著其填充的圖像縮…

數據存儲:一文掌握存儲數據到MongoDB詳解

文章目錄 一、環境準備1.1 安裝MongoDB1.2 安裝Python MongoDB驅動 二、連接到MongoDB2.1 基本連接2.2 連接到MongoDB Atlas&#xff08;云服務&#xff09; 三、基本CRUD操作3.1 創建&#xff08;Create&#xff09;&#xff1a;插入數據3.2 讀取&#xff08;Read&#xff09;…

算法教程:島的最大面積

算法教程:島的最大面積 我們將首先討論問題和解決方案,然后使用可視化工具(上一篇博客中進行了介紹)來更好地理解搜索過程。 問題描述 我們將要演練的具體問題是問題 Leetcode:島嶼的最大面積。在 Leetcode 上找到的直接問題描述是: 給你一個 m x n 二進制矩陣網格。島…

Scrapy:隧道代理中移除 Proxy-Authorization 的原理解析

隧道代理中移除 Proxy-Authorization 的原理解析 背景 在 Scrapy 的 HTTP 下載處理中&#xff0c;當使用隧道代理&#xff08;TunnelingAgent&#xff09;時&#xff0c;會移除請求頭中的 Proxy-Authorization。這個操作看似簡單&#xff0c;但背后有著重要的安全考慮和技術原…

大中型虛擬化園區網絡設計

《大中型虛擬化園區網絡設計》屬于博主的“園區網”專欄&#xff0c;若想成為HCIE&#xff0c;對于園區網相關的知識需要非常了解&#xff0c;更多關于園區網的內容博主會更新在“園區網”專欄里&#xff0c;請持續關注&#xff01; 一.前言 華為云園區網絡解決方案(簡稱Cloud…

sklearn中的決策樹-分類樹:剪枝參數

剪枝參數 在不加限制的情況下&#xff0c;一棵決策樹會生長到衡量不純度的指標最優&#xff0c;或者沒有更多的特征可用為止。這樣的決策樹 往往會過擬合。為了讓決策樹有更好的泛化性&#xff0c;我們要對決策樹進行剪枝。剪枝策略對決策樹的影響巨大&#xff0c;正確的剪枝策…

幾個api

幾個api 原型鏈 可以閱讀此文 Function instanceof Object // true Object instanceof Function // true Object.prototype.isPrototypeOf(Function) // true Function.prototype.isPrototypeOf(Object) // true Object.__proto__ Function.prototype // true Function.pro…

【Azure 架構師學習筆記】- Azure Databricks (12) -- Medallion Architecture簡介

本文屬于【Azure 架構師學習筆記】系列。 本文屬于【Azure Databricks】系列。 接上文 【Azure 架構師學習筆記】- Azure Databricks (11) – UC搭建 前言 使用ADB 或者數據湖&#xff0c;基本上繞不開一個架構“Medallion”&#xff0c; 它使得數據管理更為簡單有效。ADB 通過…

Android手機部署DeepSeek

1.概述 android手機端部署deepseek一般需要安裝termux,ollama,deepseek三個大的步驟 原因分析&#xff1a;deepseek等大模型需要類似ollama的工具去運行。ollama有mac window和linux版本&#xff0c;無Android版本&#xff1b;termux是一個模擬linux環境的Android app&#x…

計算機科學技術領域的內卷現狀與應對措施分析

計算機科學技術領域的內卷現狀與應對措施分析 李升偉 整理 ### 計算機科學技術領域的內卷現狀與應對措施分析 #### 一、內卷現狀分析 1. **教育與升學內卷** 計算機科學與技術相關專業&#xff08;如計算機科學與技術、人工智能、大數據等&#xff09;已成為考研競爭最…

python-leetcode 45.二叉樹轉換為鏈表

題目&#xff1a; 給定二叉樹的根節點root,請將它展開為一個單鏈表&#xff1a; 展開后的單鏈表應該使用同樣的TreeNode,其中right子指針指向鏈表中的下一個節點&#xff0c;而左子指針始終為空 展開后的單鏈表應該與二叉樹先序遍歷順序相同 方法一&#xff1a;二叉樹的前序…

【leetcode hot 100 15】三數之和

一、兩數之和的擴展 class Solution {public List<List<Integer>> threeSum(int[] nums) {// 將得到的結果存入Set中&#xff0c;保證不重復Set<List<Integer>> set new HashSet<>();// 模擬兩數之和&#xff0c;作為第一個循環中的內容for(in…

設備健康管理系統在制造業的深度應用探索

引言 在制造業的數字化轉型浪潮中&#xff0c;設備健康管理系統正逐漸成為企業提升競爭力的關鍵利器。隨著工業 4.0 和智能制造概念的不斷深入&#xff0c;制造業對設備的高效、穩定運行提出了更高要求。設備健康管理系統借助先進的傳感器技術、物聯網&#xff08;IoT&#xf…

HTTPS 與 HTTP 的區別在哪?

HTTP與HTTPS作為互聯網數據傳輸的核心協議&#xff0c;其通信機制與安全特性深刻影響著現代網絡應用的可靠性與用戶體驗。本文將解析兩者的通信流程、安全機制及核心差異。 一、HTTP的通信機制 先來看看HTTP是什么吧。 HTTP基于TCP/IP協議棧&#xff0c;采用經典客戶端-服務…

為什么要將PDF轉換為CSV?CSV是Excel嗎?

在企業和數據管理的日常工作中&#xff0c;PDF文件和CSV文件承擔著各自的任務。PDF通常用于傳輸和展示靜態的文檔&#xff0c;而CSV因其簡潔、易操作的特性&#xff0c;廣泛應用于數據存儲和交換。如果需要從PDF中提取、分析或處理數據&#xff0c;轉換為CSV格式可能是一個高效…

【JAVAEE】多線程

【JAVAEE】多線程 一、進程1.1 進程的定義1.2 進程和線程的聯系 二、線程2.1 JConsole工具2.2 創建線程2.2.1 Thread類&#xff0c;start&#xff08;&#xff09;&#xff0c;run&#xff08;&#xff09;2.2.2 繼承Thread類2.2.3 實現Runnable接口2.2.4 匿名內部類2.2.5 使用…