Ps:后加了個鏈表排序,用冒泡寫的。
/* Title : Student's score management system Author: nyist_xiaod Date : 2012.5.8 */ #include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> #define Print_Head_Num puts("班級 姓名 語文 數學 英語 總成績") #define Print_Head_Cla puts("學號 姓名 語文 數學 英語 總成績") #define Print_Head_All puts("班級 學號 姓名 語文 數學 英語 總成績") typedef struct Node Node; struct Score { int chinese,math,english,sum; }; struct Node { char name[20],classs[20],number[20]; struct Score score; struct Node* next; }*head,*u,*p,*q; int n,C,M,E,Cj,Cy,Mj,My,Ej,Ey; char num[20]; void Welcome() { printf("\t\t %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c\n",4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4); printf("\t\t %c 歡迎您使用學生成績管理系統 %c\n",4,4); printf("\t\t %c %c\n",4,4); printf("\t\t %c 1.讀取文件 %c\n",4,4); printf("\t\t %c %c\n",4,4); printf("\t\t %c 2.保存文件 %c\n",4,4); printf("\t\t %c %c\n",4,4); printf("\t\t %c 3.添加學生成績 %c\n",4,4); printf("\t\t %c %c\n",4,4); printf("\t\t %c 4.修改學生成績 %c\n",4,4); printf("\t\t %c %c\n",4,4); printf("\t\t %c 5.刪除學生成績 %c\n",4,4); printf("\t\t %c %c\n",4,4); printf("\t\t %c 6.查詢本人成績 %c\n",4,4); printf("\t\t %c %c\n",4,4); printf("\t\t %c 7.查詢本班成績 %c\n",4,4); printf("\t\t %c %c\n",4,4); printf("\t\t %c 8.查詢全校成績 %c\n",4,4); printf("\t\t %c %c\n",4,4); printf("\t\t %c 9.退出管理系統 %c\n",4,4); printf("\t\t %c %c\n",4,4); printf("\t\t %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c\n\n",4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4); printf("\t\t 請輸入指令:(1-9) "); } Node* new_node(Node* uu) { uu = (Node*)malloc(sizeof(Node)); uu->next = NULL; return uu; } void Add() { u = new_node(u); printf("\n請輸入您要加入的學生的信息:\n"); printf("\n姓名: "); scanf("%s",u->name); printf("\n班級: "); scanf("%s",u->classs); printf("\n學號: "); scanf("%s",u->number); printf("\n語文、數學、英語成績: "); scanf("%d%d%d",&u->score.chinese,&u->score.math,&u->score.english); u->score.sum = u->score.chinese + u->score.math + u->score.english; u->next = head->next; head->next = u; printf("\n--->添加成功!\n"); } void Mod() { n = 0; printf("\n請輸入您要修改的學號: "); scanf("%s",num); for(u = head; u != NULL;u = u->next) { if(strcmp(u->number,num) == 0) { n = 1; printf("\n請輸入新的語文、數學、英語成績: "); scanf("%d%d%d",&u->score.chinese,&u->score.math,&u->score.english); u->score.sum = u->score.chinese + u->score.math + u->score.english; printf("\n--->修改成功!\n"); break; } } if(!n) printf("\n--->沒有這個學生的信息!\n"); } void Del() { n = 0; printf("\n請輸入您要刪除的學生的學號: "); scanf("%s",num); for(u = head; u != NULL;u = u->next) { if(strcmp(u->number,num) == 0) { n = 1; p->next = u->next; free(u); printf("\n--->刪除成功!\n"); break; } p = u; } if(!n) printf("\n--->沒有這個學生的信息!\n"); } void Sort() { int i,j; n = 0; for(u = head->next; u != NULL;u = u->next) n++; for(i=1;i<=n;i++) { u = head; for(j=0;j<n-i;j++) { p = u->next; q = p->next; if(strcmp(p->classs,q->classs) > 0 || strcmp(p->classs,q->classs) == 0 && p->score.sum < q->score.sum) { u->next = q; p->next = q->next; q->next = p; } u = u->next; } } } void Que_One() { n = 0; printf("\n請輸入您要查詢的學生的學號: "); scanf("%s",num); for(u = head->next; u != NULL;u = u->next) { if(strcmp(u->number,num) == 0) { n = 1; printf("\n"); Print_Head_Num; printf("%-11s%-15s",u->classs,u->name); printf("%-6d%-6d%-6d%-6d\n",u->score.chinese,u->score.math,u->score.english,u->score.sum); break; } } if(!n) printf("\n--->沒有這個學生的信息!\n"); } void Analyze_Sco(Node *uu) { C += uu->score.chinese; M += uu->score.math; E += uu->score.english; if(uu->score.chinese >= 60) Cj++; if(uu->score.chinese >= 90) Cy++; if(uu->score.math >= 60) Mj++; if(uu->score.math >= 90) My++; if(uu->score.english >= 60) Ej++; if(uu->score.english >= 90) Ey++; } void Print_Sco() { printf("語文平均成績: %-6.2f, 及格率: %%%-6.2f , 優秀率: %%%-6.2f.\n\n",(float)C/n,(float)100*Cj/n,(float)100*Cy/n); printf("數學平均成績: %-6.2f, 及格率: %%%-6.2f , 優秀率: %%%-6.2f.\n\n",(float)M/n,(float)100*Mj/n,(float)100*My/n); printf("英語平均成績: %-6.2f, 及格率: %%%-6.2f , 優秀率: %%%-6.2f.\n\n",(float)E/n,(float)100*Ej/n,(float)100*Ey/n); } void Que_Cla() { Sort(); n = C = M = E = Cj = Cy = Mj = My = Ej = Ey = 0; printf("\n請輸入您要查詢的班級: "); scanf("%s",num); printf("\n"); for(u = head->next; u != NULL;u = u->next) { if(strcmp(u->classs,num)) continue; if(!n) Print_Head_Cla; n++; printf("%-11s%-15s",u->number,u->name); printf("%-6d%-6d%-6d%-d\n",u->score.chinese,u->score.math,u->score.english,u->score.sum); Analyze_Sco(u); } if(!n) { printf("沒有這個班級的學生信息!\n"); return ; } printf("\n該班共有學生 %d 人.\n\n",n); Print_Sco(); } void Que_All() { Sort(); n = C = M = E = Cj = Cy = Mj = My = Ej = Ey = 0; printf("\n"); if(head->next == NULL) { printf("--->沒有學生信息!\n"); return ; } Print_Head_All; for(u = head->next; u != NULL;u = u->next) { n++; printf("%-12s%-12s%-15s",u->classs,u->number,u->name); printf("%-6d%-6d%-6d%-d\n",u->score.chinese,u->score.math,u->score.english,u->score.sum); Analyze_Sco(u); } printf("\n全校共有學生 %d 人.\n\n",n); Print_Sco(); } void Save() { char c; printf("\n確認保存?(Y/N): "); scanf("%*c%c",&c); if(c == 'N') return ; FILE *fp; if((fp=fopen("C:\\data.txt","w"))==NULL) { printf("\n--->無法打開文件\n"); return ; } fputs("班級 學號 姓名 語文 數學 英語 總成績",fp); if(head->next != NULL) fputs("\n",fp); for(u = head->next; u != NULL;u = u->next) { fprintf(fp,"%-11s%-11s%-15s",u->classs,u->number,u->name); fprintf(fp,"%-6d%-6d%-6d%-d",u->score.chinese,u->score.math,u->score.english,u->score.sum); if(u->next != NULL) fprintf(fp,"\n"); } fclose(fp); printf("\n--->成績成功存入C:\\\\data.txt中\n"); } void Open() { printf("\n請把數據放到目錄C:\\\\data.txt中,按任意鍵確認.\n"); getch(); FILE *fp; if((fp=fopen("C:\\data.txt","r"))==NULL) { printf("\n--->沒有找到文件!\n"); return ; } char tmp[100]; fgets(tmp,66,fp); while(!feof(fp)) { u = new_node(u); fscanf(fp,"%s%s%s",u->classs,u->number,u->name); fscanf(fp,"%d%d%d%d",&u->score.chinese,&u->score.math,&u->score.english,&u->score.sum); u->next = head->next; head->next = u; } printf("\n--->成績讀入成功!\n"); fclose(fp); } void Exi() { char c; printf("\n確定退出?(Y/N): "); scanf("%*c%c",&c); if(c == 'N') return ; system("cls"); printf("\n\n"); printf("\t\t\t %c %c %c %c %c %c %c %c %c\n",4,4,4,4,4,4,4,4,4); printf("\t\t\t %c Made by Xiaod %c\n",4,4); printf("\t\t\t %c %c %c %c %c %c %c %c %c\n",4,4,4,4,4,4,4,4,4); printf("\t\t\t Thank you!\n\n\n"); exit(0); } int main() { int orz; system("color 0B"); head = new_node(head); while(1) { Welcome(); scanf("%d",&orz); system("cls"); switch(orz) { case 1:Open();break; case 2:Save();break; case 3:Add();break; case 4:Mod();break; case 5:Del();break; case 6:Que_One();break; case 7:Que_Cla();break; case 8:Que_All();break; case 9:Exi();break; default :printf("\n--->無效的指令!\n"); } printf("\n"); system("pause"); system("cls"); } return 0; }
感謝你能夠認真閱讀完這篇文章,希望小編分享C語言實現學生成績管理系統的源代碼內容對大家有幫助,同時也希望大家多多支持本站,關注本站行業資訊頻道,遇到問題就找本站,詳細的解決方法等著你來學習!
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
開放式基金是一種與封閉式基金相對應的定義,是按照基金申購贖回等運作方式的不同來劃分的,還有那些關于基金的知識呢?以下是由學習啦小編整理關于基金入門基礎知識的內容,希望大家喜歡!基金入門知識——基金與其他投資方式的區別1、 基金與銀行儲蓄有什么不同?(資料圖)銀行儲蓄的目標一般是滿足短期需要,例如即時的消費或意外支出。它的特點是很安全,很容易變現,您可以隨時取回資金,而且有一定的利息收入;但是銀行存...
重疾險用買兩份嗎?重疾險是否有必要買兩份是需要結合多方面的因素來分析的,畢竟重疾險因為保障時間長、保額的問題,往往保費也是比較高的?!?】如果一份重疾險的保額足夠的話,那么就沒有必要投保兩份重疾險了。投保兩份重疾險最主要的目的也無法就是為了增加保額,保額足夠的是沒有必要再投保一份了,閑置的資金是可以用來進行其他投資的?!?】投保兩份重疾險的情況下意味著至少需要繳納兩份保額,如果經濟條件不允許的話,...
CHF即Confederation Helvetica Franc,指的是瑞士法郎這-貨幣。瑞士法郎的英文名是Swiss Franc, CHF中的"CH” 是瑞士這一國家的拉丁文縮寫字母, "F”是法郎的縮寫字母,組合起來即為CHF,是一 種加密型數字貨幣。瑞士法郎主要是瑞士還有列支敦士登這兩個國家使用,由瑞士中央銀行發行,分為硬幣和紙幣兩個幣種,其中共...