C語言學生成績信息管理系統【結構體+文本】

功能描述:

1、錄入成績

2、顯示不及格學生信息

3、統計每檔學生數量

4、總成績統計

代碼:

#include<stdio.h>#define N 30//結構體:typedef struct STUDENT{char ?id[10];//學號char ?name[20];//姓名float score[3];//三門成績,分別代表:數學 英語 計算機float sum;//用于計算總分} Stu;Stu stu[N];//創建一個30個數量的結構體//打印學生信息函數void printStuInfo(Stu st)//打印學生信息數據{printf("學號:%s\t姓名:%s\t數學:%3.2f\t英語:%3.2f\t計算機:%3.2f\t總分:%3.2f\n",//學號 ?//姓名 ?//數學成績st.id, st.name, st.score[0],//英語成績 ?//計算機成績 ?//總分st.score[1], st.score[2], st.sum);}//讀取文本信息函數void readStuList(){int i = 0;int k;float sum;FILE *fp = fopen("score.txt", "r");//以讀的方式打開文件if(fp == NULL){return; /*若打不開則返回*/}while(!feof(fp))//逐條讀取文件信息{fscanf(fp, "%s\t%s\t%f\t%f\t%f\n",//學號 ?//姓名 ?//數學成績&stu[i].id, &stu[i].name, &stu[i].score[0],//英語成績 ?//計算機成績&stu[i].score[1], &stu[i].score[2]);//計算總分sum = 0;for(k=0; k<3; k++){sum += stu[i].score[k];}//存入總分stu[i].sum = sum;i++;}fclose(fp);//關閉文件}//寫入數據到文件的函數void writeStuInfo(Stu st) //存入一條學生信息{FILE *fp = fopen("score.txt", "a+");//添加一條信息到score.txt末尾if(fp == NULL){printf("打不開文件Cannot open the file\n");return; /*若打不開則返回*/}//存入信息fprintf(fp, "%s\t%s\t%3.2f\t%3.2f\t%3.2f\n",//學號 ?//姓名 ?//數學成績st.id, st.name, st.score[0],//英語成績 ?//計算機成績st.score[1], st.score[2]);fclose(fp);//關閉文件}//菜單函數void menu() //菜單{printf("\n\t\t--------------1、錄入成績--------------\n");printf("\t\t--------------2、顯示不及格學生信息--------------\n");printf("\t\t--------------3、統計每檔學生數量--------------\n");printf("\t\t--------------4、總成績統計--------------\n");printf("\t\t--------------0、退出程序--------------\n");}//統計每科的五檔水平的人數的函數void showLevel(char* score[3]){int i, k;int level[3][5] = {0};//每科5檔水平for(k=0; k<3; k++){printf("%s學科每檔人數如下:\n", score[k]);for(i=0; i<N; i++){switch((int)(stu[i].score[k]) / 10){//除以10取整case 9://>=90level[k][0]++;break;case 8://80-89level[k][1]++;break;case 7://70-79level[k][2]++;break;case 6://60-69level[k][3]++;break;default://<60level[k][4]++;break;}}printf("A檔學生人數有【%d】人\n", level[k][0]);printf("B檔學生人數有【%d】人\n", level[k][1]);printf("C檔學生人數有【%d】人\n", level[k][2]);printf("D檔學生人數有【%d】人\n", level[k][3]);printf("E檔學生人數有【%d】人\n\n", level[k][4]);}}//主函數int main(){int i, j, k, l;Stu tempStu;// int sort[N];float sumAvg;//總成績平均分char* score[3] = {"數學", "英語", "計算機"};while(1){menu();//菜單readStuList();//讀取學生信息printf("請輸入你的選擇:");scanf("%d", &l);if(l == 0){printf("謝謝使用!程序已退出!\n");return 0;//退出程序}else if(l == 1){for(i=0; i<N; i++){printf("輸入第[%d]個學生信息:\n",i+1);printf("學號:");scanf("%s",stu[i].id);printf("姓名:");scanf("%s",stu[i].name);for(k=0; k<3; k++){printf("%s成績:", score[k]);scanf("%f",&stu[i].score[k]);}writeStuInfo(stu[i]);//保存輸入的信息到score.txt文本中// ???????printf("數學成績:");// ???????scanf("%f", &stu[i].score[0]);// ???????printf("英語成績:");// ???????scanf("%f", &stu[i].score[0]);// ???????printf("計算機成績:");// ???????scanf("%f", &stu[i].score[0]);// ???????stu[i].sum = stu[i].score[0] + stu[i].score[1] + stu[i].score[2];// sort[i] = i;}}else if(l == 2){/* 2. 統計各課及格和不及格的人數,輸出對應學生的數據信息。 */for(k=0; k<3; k++){printf("%s不及格學生如下:\n", score[k]);j = 0;for(i=0; i<N; i++){if(stu[i].score[k] < 60){//學號 姓名 對應單科成績printf("%s\t%s\t%3.2f\n",stu[i].id, stu[i].name, stu[i].score[k]);j++;//計算不及格人數}}printf("%s不及格學生人數有【%d】個。\n\n", score[k], j);}}else if(l == 3){showLevel(score);//顯示每檔學生人數}else if(l == 4){//總成績統計/* 1.按總分排序 *///冒泡排序for(i=0; i<N-1; i++){for(j=0; j<N-i-1; j++){if (stu[j].sum < stu[j+1].sum)//如果前一個比后一個分數小,就交換{tempStu = stu[j];//tempStu為交換媒介stu[j] = stu[j+1];stu[j+1] = tempStu;}}}printf("按總分排名的學生信息如下:\n");for(i=0; i<N; i++){sumAvg += stu[i].sum;//逐個累加總成績printStuInfo(stu[i]);//逐個輸出學生信息}printf("總成績平均分為【%3.2f】\n", sumAvg / N);//累加的總成績除以人數printf("總成績最高分為【%3.2f】\n", stu[0].sum);//第一位即為最高分printf("總成績最低分為【%3.2f】\n", stu[N-1].sum);//最后一位即為最低分}else{printf("輸入有誤!請重新輸入!\n");}}return 0;}

結果截圖:

  1. 菜單截圖:

? ? ? ?

2、選擇1錄入學生信息截圖:

3、選擇2顯示不及格學生信息截圖:

4、選擇3統計每檔學生數量截圖:

5、選擇4總成績統計截圖:

6、選擇0退出。

7、選擇其他數字提示錯誤的截圖:

  • Score.txt文件內容【自己創建在代碼同級目錄下,內容也可以自己編寫,格式是一行一條記錄,每條記錄里每個字段之間是一個tab鍵(也就是\t)】。

文檔排版我是直接復制粘貼的,所以有點問題,可以自行調整,或者下載我開頭掛載的文檔也行。

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

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

相關文章

Socket網絡編程(四)——點對點傳輸場景方案

目錄 場景如何去獲取到TCP的IP和Port&#xff1f;UDP的搜索IP地址、端口號方案UDP搜索取消實現相關的流程&#xff1a;代碼實現邏輯服務端實現客戶端實現UDP搜索代碼執行結果 TCP點對點傳輸實現代碼實現步驟點對點傳輸測試結果 源碼下載 場景 在一個局域網當中&#xff0c;不知…

生成式人工智能治理:入門的基本技巧

GenAI 以前所未有的速度調解并擾亂了“一切照舊”&#xff0c;同時帶來了令人難以置信的力量&#xff0c;但也帶來了不可否認的責任。當然&#xff0c;現代企業非常熟悉技術進步。然而&#xff0c;人工智能的到來&#xff08;和實施&#xff09;無疑引起了相當大的沖擊&#xf…

C# 12 中的新增功能

本文內容 主構造函數集合表達式ref readonly 參數默認 Lambda 參數 顯示另外 5 個 C# 12 包括以下新增功能。 可以使用最新的 Visual Studio 2022 版本或 .NET 8 SDK 嘗試這些功能。 主構造函數 - 在 Visual Studio 2022 版本 17.6 預覽版 2 中引入。 集合表達式 - 在 Visu…

ThreeJs同一個場景多個相機的顯示

在threeJs開發數字孿生中&#xff0c;我們正常是需要使用一個相機&#xff0c;畫面顯示的內容也就是這個相機拍攝到的內容&#xff0c;但是是否可以添加多個相機&#xff0c;可以同時從不同角度觀察模型呢&#xff0c;實際上是可以的&#xff0c;不過多個相機的拍攝到的畫面肯定…

Linux uname命令教程:了解系統信息和配置(附實例詳解和注意事項)

Linux uname命令介紹 uname&#xff08;Unix Name&#xff09;命令用于顯示系統信息&#xff0c;包括內核名稱、網絡節點名稱、操作系統名稱、版本號、硬件名稱和處理器類型。它是一個基本的系統管理工具&#xff0c;通常用于識別系統配置。 Linux uname命令適用的Linux版本 …

Linux服務:Nginx反向代理與負載均衡

一、Nginx反向代理 1、什么是反向代理&#xff1f; 代理分為兩類&#xff0c;正向代理和反向代理。 ①正向代理&#xff1a;幫助用戶訪問服務器&#xff0c;緩存服務器內容。 ②反向代理&#xff1a;代理服務器處理用戶的請求&#xff0c;決定轉發請求給誰處理負載均衡的作…

Go 與 Rust:導航編程語言景觀

在當今構建軟件時&#xff0c;開發者在編程語言上有著豐富的選擇。兩種脫穎而出的語言是 Go 和 Rust - 都很強大但卻截然不同。本文將從各種因素比較這兩種語言&#xff0c;以幫助您確定哪種更適合您的需求。 我們將權衡它們在并發、安全性、速度、互操作性等方面的方法。我們將…

Ubuntu篇——crontab修改編輯器

輸入命令: crontab -e 如果你的系統是第一次使用crontab服務&#xff0c;會首先讓你選擇一個編輯器 如果已經選擇過編輯器&#xff0c;后續想要修改默認編輯器&#xff0c;可以輸入sudo select-editor進行修改。

【GPU驅動開發】-GPU架構簡介

前言 不必害怕未知&#xff0c;無需恐懼犯錯&#xff0c;做一個Creator&#xff01; GPU&#xff08;Graphics Processing Unit&#xff0c;圖形處理單元&#xff09;是一種專門用于處理圖形和并行計算的處理器。GPU系統架構通常包括硬件和軟件層面的組件。 一、總體流程 應…

Node.js基礎---Express中間件

1. 概念 1.什么是中間件 中間件(Middleware)&#xff0c;特指業務流程的中間處理環節 2. Express 中間件的調用流程 當一個請求到達 Express 的服務器后&#xff0c;可以連續調用多個中間件&#xff0c;從而對這次請求進行預處理 3. Express 中間件格式 Express 的中間件&…

每周一算法:雙端隊列廣搜

題目鏈接 電路維修 題目描述 達達是來自異世界的魔女&#xff0c;她在漫無目的地四處漂流的時候&#xff0c;遇到了善良的少女翰翰&#xff0c;從而被收留在地球上。翰翰的家里有一輛飛行車。有一天飛行車的電路板突然出現了故障&#xff0c;導致無法啟動。 電路板的整體結…

Java實戰:SpringBoot集成ZXing實現二維碼生成與解析

一、引言 在信息化社會&#xff0c;二維碼已經深入到生活的各個角落&#xff0c;無論是支付、營銷、信息傳遞&#xff0c;甚至防偽溯源&#xff0c;二維碼都發揮了至關重要的作用。作為Java開發者&#xff0c;我們如何在SpringBoot項目中便捷地實現二維碼的生成與解析呢&#…

4、Redis-Set【常用】

目錄 一、Redis-Set特點 二、常用命令與交并差 三、Redis中Set類型應用場景 一、Redis-Set特點 1、無序&#xff1a;添加的是A,B,C&#xff1b;取出的可能是B,A,C 2、唯一&#xff1a;不允許元素重復 二、常用命令與交并差 常用命令 格式含義例子sadd key members[...]往k…

吳恩達機器學習筆記十四 多輸出的分類 多類和多標簽的區別 梯度下降優化 卷積層

這里老師想講的是multiclass classification和multilable classification的區別&#xff0c;下面是我從其他地方找到的說法: Multiclass classification 多類分類 意味著一個分類任務需要對多于兩個類的數據進行分類。比如&#xff0c;對一系列的橘子&#xff0c;蘋果或者梨的…

Stable Diffusion生成式擴散模型代碼實現原理

Stable Diffusion可以使用PyTorch或TensorFlow等深度學習框架來實現。這些框架提供了一系列的工具和函數&#xff0c;使得開發者可以更方便地構建、訓練和部署深度學習模型。因此可以使用PyTorch或TensorFlow來實現Stable Diffusion模型。 安裝PyTorch&#xff1a;確保您已經安…

Linux命令行與shell腳本編程大全-2.2

第二部分 shell腳本編程基礎 第11章構建基礎腳本 第12章結構化命令 第13章更多的結構化命令 第14章處理用戶輸入 第15章呈現數據 第16章腳本控制 第15章 呈現數據 15.1 理解輸入和輸出 15.1.1 標準文件描述符 Linux 系統會將每個對象當作文件來處理&#xff0c;這包括輸入和…

T3SF:一款功能全面的桌面端技術練習模擬框架

關于T3SF T3SF是一款功能全面的桌面端技術練習模擬框架&#xff0c;該工具針對基于主場景事件列表的各種事件提供了模塊化的架構&#xff0c;并包含了針對每一個練習定義的規則集&#xff0c;以及允許為對應平臺參數定義參數的配置文件。 該工具的主模塊能夠執行與其他特定模…

CDN原理探究

來源于百度&#xff1a; https://baike.baidu.com/item/%E5%86%85%E5%AE%B9%E5%88%86%E5%8F%91%E7%BD%91%E7%BB%9C/4034265?frge_ala 通過上圖&#xff0c;我們可以了解到&#xff0c;使用了CDN緩存后的網站的訪問過程變為&#xff1a; 用戶向瀏覽器提供要訪問的域名&#xff…

幻獸帕魯/Palworld服務器的最佳網絡設置、內存和CPU配置是什么?

幻獸帕魯/Palworld服務器的最佳網絡設置、內存和CPU配置是什么&#xff1f; 對于4到8人的玩家&#xff0c;推薦的配置是4核16G的CPU和16G的內存。10到20人的玩家選擇8核32G的CPU和32G或以上的內存。2到4人的玩家則建議選擇4核8G的CPU和8G的內存。對于32人的玩家&#xff0c;推…

YOLOV8介紹

原文鏈接&#xff1a; 1、 詳解YOLOv8網絡結構/環境搭建/數據集獲取/訓練/推理/驗證/導出 2、Yolov8的詳解與實戰 3、YOLOV8模型訓練部署&#xff08;實戰&#xff09;&#xff08;&#xff09;有具體部署和訓練實現代碼YOLOV8模型訓練部署&#xff08;實戰&#xff09;&…