1)系統運行,打開如下界面。列出系統幫助菜單(即命令菜單),提示輸入命令。
2)開始時還沒有錄入成績,所以輸入命令 L 也無法列出成績。應提示“成績表為空!請先使用命令 T 錄入學生成績?!?/p>
同理,當輸入其他的成績處理命令時也作相應的處理。
3)輸入命令 T,調用Type子函數錄入成績。
界面提示輸入學生人數
輸入3 提示輸入3名學生的3門課成績,列出成績單的表頭“學號 語文 數學 英語”,提示學號:1
輸入1號學生的3門課成績,用空格間隔,回車結束。提示學號:2
輸入2號學生的3門課成績,用空格間隔,回車結束。提示學號:3
輸入3號學生的3門課成績,用空格間隔,回車結束。Type子函數調用結束,返回。提示輸入命令。
4)輸入命令 L ,調用List子函數輸出成績表。List子函數調用結束,返回。提示輸入命令。
5)輸入命令 A ,調用Average子函數計算平均分,提示“平均分已計算。請使用命令L查看?!?Average子函數調用結束,返回。提示輸入命令。
輸入命令 L ,調用List子函數輸出成績表。List子函數調用結束,返回。提示輸入命令。
6)輸入命令 P ,調用Sort子函數將各學生記錄按平均分由高到低排序,提示“完成排序。請使用命令L查看?!?Sort子函數調用結束,返回。提示輸入命令。
輸入命令 L ,調用List子函數輸出成績表。List子函數調用結束,返回。提示輸入命令。
7)輸入命令 S ,調用Search子函數查詢學生成績,提示“輸入要查詢的學生學號”。
輸入2 找到2號學生的成績并輸出。Search子函數調用結束,返回。提示輸入命令。
8)輸入命令C 執行清屏函數語句system(“clear”);
清除屏幕的所有內容。提示輸入命令。
9)輸入命令H 調用Help子函數顯示幫助菜單。Help子函數調用結束,返回。提示輸入命令。
10)輸入命令Q ,則退出系統。
注意:
1)輸出數組元素時,要將學號單獨處理,輸出為整數(即保留0位小數)。同理,在計算成績時也要將第1列的學號撇開,只計算第2列之后的。成績保留1位小數。
2)學生人數n貫穿始終,通過n的值判斷當前命令的子函數是否能夠調用執行。例如:當n=0時,說明還沒有錄入成績。而一旦輸入命令T,也即調用Type子函數錄入了成績,則n的值就不再是0。當n!=0時,就可以進行其他的成績操作,但不能再執行錄用成績的操作。所以當用戶輸入的命令無法執行時,應當給出提示。
#include<stdio.h>#include<stdlib.h>//#include"hs.h"structstudent{intid;floatyw;floatsx;floatwy;floatpj;};voidhelp(void);inttype(structstudent*p);voidlist(structstudent*p,intn);voidaverage(structstudent*p,intn);voidsearch(structstudent*p);voidsort(structstudent*p,intn);intmain(intargc,constchar*argv[]){charch;structstudentstu[32];intn=0;while(1){printf("請輸入命令=");//getchar();scanf("%c",&ch);putchar(10);if(ch=='T'){n=type(stu);}elseif(ch=='L'){if(n==0){printf("成績表為空!請先使用T錄入成績!\n");putchar(10);}elselist(stu,n);}elseif(ch=='A'){if(n==0){printf("成績表為空!請先使用T錄入成績!\n");putchar(10);}else{average(stu,n);printf("平均分已計算,請使用命令L查看!\n");putchar(10);}}elseif(ch=='H')help();elseif(ch=='C')system("clear");elseif(ch=='S'){if(n==0){printf("成績表為空!請先使用T錄入成績!\n");putchar(10);}else{search(stu);putchar(10);}}elseif(ch=='P'){if(n==0){printf("成績表為空!請先使用T錄入成績!\n");putchar(10);}else{sort(stu,n);putchar(10);}}elseif(ch=='Q'){printf("Pressanykeytocontinue!\n");return-1;}getchar();}return0;}inttype(structstudent*p){intn=0;printf("請輸入學生人數:");scanf("%d",&n);printf("請輸入學生三門課的成績:\n");printf("學號語文數學外語\n");for(inti=0;i<n;i++){printf("%d",i+1);structstudentstu[i];scanf("%f%f%f",&(p+i)->yw,&(p+i)->sx,&(p+i)->wy);}returnn;}voidlist(structstudent*p,intn){printf("學生成績如下:\n");printf("學號語文數學外語平均分\n");for(inti=0;i<n;i++){printf("%d",i+1);printf("%.1f%.1f%.1f%.1f",p->yw,p->sx,p->wy,p->pj);p++;putchar(10);}}voidaverage(structstudent*p,intn){for(inti=0;i<n;i++){(p->pj)=((p->yw)+(p->sx)+(p->wy))/3;p++;}}voidhelp(void){printf("**********************************\n");printf("*學生成績管理系統——幫助菜單*\n");printf("**********************************\n");printf("*H=顯示幫助菜單*\n");printf("*T=成績錄入*\n");printf("*A=計算學生平均分*\n");printf("*L=列出成績單*\n");printf("*P=按平均成績由高到低排序*\n");printf("*S=按學號查詢學生成績*\n");printf("*C=清屏*\n");printf("*Q=退出系統*\n");printf("**********************************\n");printf("*Copyright(c)2022.3.15Byliq*\n");printf("**********************************\n");}voidsearch(structstudent*p){ints=0;printf("請輸入要查詢的學生號:");scanf("%d",&s);printf("學號語文數學外語平均分\n");printf("%d%.1f%.1f%.1f%.1f",s,(p+s-1)->yw,(p+s-1)->sx,(p+s-1)->wy,(p+s-1)->pj);putchar(10);}voidsort(structstudent*p,intn){structstudenttemp;inti,j;for(i=0;i<n;i++){for(j=0;j<n-i-1;j++){if(p[j].pj<p[j+1].pj){temp=p[j];p[j]=p[j+1];p[j+1]=temp;}}}printf("排序完成,請使用命令L查看!\n");}
注意
如需要分文件編寫。
只需要將上述代碼的函數部分拿出來,新建兩個個文件:fun.c、fun.h。其中fun.c文件用來存放上述代碼的結構體聲明以及函數部分(加上相應的頭文件)。fun.h用來存放結構體聲明以及函數聲明(加上相應的頭文件)。
在主函數中要加上對應的頭文件:#include “fun.h”(雙引號,不是<>)。
編譯的時候需要將主函數以及新建的fun.c文件一起編譯,運行還是同之前一樣,用./a.out運行即可。
具體如下圖所示:
1.新建兩個文件(同名,不同后綴),編譯并運行(需要多文件同時編譯)。
2.hs.c存放結構體聲明及對應的函數(這里面的函數還可以拆分成其他的文件,這里我就不拆分了)。
#include<stdio.h>#include<stdlib.h>structstudent{intid;floatyw;floatsx;floatwy;floatpj;};inttype(structstudent*p){intn=0;printf("請輸入學生人數:");scanf("%d",&n);putchar(10);printf("請輸入學生三門課的成績:\n");putchar(10);printf("學號語文數學外語\n");for(inti=0;i<n;i++){printf("%d",i+1);structstudentstu[i];scanf("%f%f%f",&(p+i)->yw,&(p+i)->sx,&(p+i)->wy);}putchar(10);returnn;}voidlist(structstudent*p,intn){printf("學生成績如下:\n");printf("學號語文數學外語平均分\n");for(inti=0;i<n;i++){printf("%d",i+1);printf("%.1f%.1f%.1f%.1f",p->yw,p->sx,p->wy,p->pj);p++;putchar(10);}putchar(10);}voidaverage(structstudent*p,intn){for(inti=0;i<n;i++){(p->pj)=((p->yw)+(p->sx)+(p->wy))/3;p++;}}voidhelp(void){printf("**********************************\n");printf("*學生成績管理系統——幫助菜單*\n");printf("**********************************\n");printf("*H=顯示幫助菜單*\n");printf("*T=成績錄入*\n");printf("*A=計算學生平均分*\n");printf("*L=列出成績單*\n");printf("*P=按平均成績由高到低排序*\n");printf("*S=按學號查詢學生成績*\n");printf("*C=清屏*\n");printf("*Q=退出系統*\n");printf("**********************************\n");printf("*Copyright(c)2022.3.15Byliq*\n");printf("**********************************\n");}voidsearch(structstudent*p){ints=0;printf("請輸入要查詢的學生號:");scanf("%d",&s);putchar(10);printf("學號語文數學外語平均分\n");printf("%d%.1f%.1f%.1f%.1f",s,(p+s-1)->yw,(p+s-1)->sx,(p+s-1)->wy,(p+s-1)->pj);putchar(10);}voidsort(structstudent*p,intn){structstudenttemp;inti,j;for(i=0;i<n;i++){for(j=0;j<n-i-1;j++){if(p[j].pj<p[j+1].pj){temp=p[j];p[j]=p[j+1];p[j+1]=temp;}}}printf("排序完成,請使用命令L查看!\n");}
3.hs.h存放結構體聲明以及hs.c里面函數對應的函數聲明。
#include<stdio.h>#include<stdlib.h>structstudent{intid;floatyw;floatsx;floatwy;floatpj;};inttype(structstudent*p);voidlist(structstudent*p,intn);voidaverage(structstudent*p,intn);voidhelp(void);voidsearch(structstudent*p);voidsort(structstudent*p,intn);
4.main函數
#include<stdio.h>#include<stdlib.h>#include"hs.h"intmain(intargc,constchar*argv[]){charch;structstudentstu[32];intn=0;while(1){printf("請輸入命令=");scanf("%c",&ch);putchar(10);if(ch=='T'){n=type(stu);}elseif(ch=='L'){if(n==0){printf("成績表為空!請先使用T錄入成績!\n");putchar(10);}elselist(stu,n);}elseif(ch=='A'){if(n==0){printf("成績表為空!請先使用T錄入成績!\n");putchar(10);}else{average(stu,n);printf("平均分已計算,請使用命令L查看!\n");putchar(10);}}elseif(ch=='H')help();elseif(ch=='C')system("clear");elseif(ch=='S'){if(n==0){printf("成績表為空!請先使用T錄入成績!\n");putchar(10);}else{search(stu);putchar(10);}}elseif(ch=='P'){if(n==0){printf("成績表為空!請先使用T錄入成績!\n");putchar(10);}else{sort(stu,n);putchar(10);}}elseif(ch=='Q'){printf("Pressanykeytocontinue!\n");return-1;}getchar();}return0;}
以上就是關于“C語言實現簡單學生成績管理系統的方法”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注本站行業資訊頻道。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
(資料圖)哈嘍小伙伴們 ,今天給大家科普一個小知識。在日常生活中我們或多或少的都會接觸到現代戲劇作品都有哪些方面的一些說法,有的小伙伴還不是很了解,今天就給大家詳細的介紹一下關于現代戲劇作品都有哪些的相關內容。郭沫若的《棠棣之花》、《屈原》、《虎符》、《高漸離》、《孔雀膽》、《南冠草》; 歐陽笙(華漢)的《李秀成之死》、《天國春秋》、《草莽英雄》、《塞上風云》、《兩面人》; 歐陽予倩的《忠王李秀成...
怎樣申購新股,新股申購的方式有以下兩種方式:1.線上申購:投資者在可以購買股票的相關網站或者是股票APP中直接選擇新上市的股票進行申購。2.在線下辦理:投資者也可攜帶個人身份證件到證券公司營業網點請工作人員辦理。以上是新股申購的方式。一般來說新股申購也叫打新股,是指投資者利用資金申請購買即將上市的新股。如果他們中簽就說明認購就成功了。需要注意的是申購新股需要注意以下幾種條件:1投資者申購新股時申購...
據機構預估,在本輪調價后,95號汽油或將重返“9元時代”。本次油價調整時間為2022年4月28日24時起。在最近6個工作日,油價統計數據實現了“6連降”的走勢,讓漲幅下降了265元/噸,不過由于本輪油價調整前2天漲的太多,最高漲幅超過410元/噸,加上受到昨日早收盤的國際油價重新上漲影響,4月27日油價統計漲幅又重新增加5元,目前預計油價上漲150元...