<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了C語言實現學生成績管理系統的具體程式碼,供大家參考,具體內容如下
1)系統執行,開啟如下介面。列出系統幫助選單(即命令選單),提示輸入命令。
2)開始時還沒有錄入成績,所以輸入命令 L 也無法列出成績。應提示“成績表為空!請先使用命令 T 錄入學生成績。”
同理,當輸入其他的成績處理命令時也作相應的處理。
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" struct student { int id; float yw; float sx; float wy; float pj; }; void help(void); int type(struct student *p); void list(struct student *p,int n); void average(struct student *p,int n); void search (struct student *p); void sort(struct student *p,int n); int main(int argc, const char *argv[]) { char ch; struct student stu[32]; int n=0; while(1) { printf("請輸入命令 = "); //getchar(); scanf("%c",&ch); putchar(10); if(ch=='T') { n=type(stu); } else if(ch=='L') { if(n==0) { printf("成績表為空!請先使用T錄入成績!n"); putchar(10); } else list(stu,n); } else if(ch=='A') { if(n==0) { printf("成績表為空!請先使用T錄入成績!n"); putchar(10); } else { average(stu,n); printf("平均分已計算,請使用命令L檢視!n"); putchar(10); } } else if(ch=='H') help(); else if(ch=='C') system("clear"); else if(ch=='S') { if(n==0) { printf("成績表為空!請先使用T錄入成績!n"); putchar(10); } else { search(stu); putchar(10); } } else if(ch=='P') { if(n==0) { printf("成績表為空!請先使用T錄入成績!n"); putchar(10); } else { sort(stu,n); putchar(10); } } else if(ch=='Q') { printf("Press any key to continue!n"); return -1; } getchar(); } return 0; } int type(struct student *p) { int n=0; printf("請輸入學生人數:"); scanf("%d",&n); printf("請輸入學生三門課的成績:n"); printf("學號 語文 數學 外語n"); for(int i=0;i<n;i++) { printf("%d ",i+1); struct student stu[i]; scanf("%f %f %f",&(p+i)->yw,&(p+i)->sx,&(p+i)->wy); } return n; } void list(struct student *p,int n) { printf("學生成績如下:n"); printf("學號 語文 數學 外語 平均分n"); for(int i=0;i<n;i++) { printf("%d ",i+1); printf("%.1f %.1f %.1f %.1f",p->yw,p->sx,p->wy,p->pj); p++; putchar(10); } } void average(struct student *p,int n) { for(int i=0;i<n;i++) { (p->pj)=((p->yw)+(p->sx)+(p->wy))/3; p++; } } void help(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.15 By liq* n"); printf("**********************************n"); } void search(struct student *p) { int s=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); } void sort(struct student *p,int n) { struct student temp; int i,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> struct student { int id; float yw; float sx; float wy; float pj; }; int type(struct student *p) { int n=0; printf("請輸入學生人數:"); scanf("%d",&n); putchar(10); printf("請輸入學生三門課的成績:n"); putchar(10); printf("學號 語文 數學 外語n"); for(int i=0;i<n;i++) { printf("%d ",i+1); struct student stu[i]; scanf("%f %f %f",&(p+i)->yw,&(p+i)->sx,&(p+i)->wy); } putchar(10); return n; } void list(struct student *p,int n) { printf("學生成績如下:n"); printf("學號 語文 數學 外語 平均分n"); for(int i=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); } void average(struct student *p,int n) { for(int i=0;i<n;i++) { (p->pj)=((p->yw)+(p->sx)+(p->wy))/3; p++; } } void help(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.15 By liq* n"); printf("**********************************n"); } void search(struct student *p) { int s=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); } void sort(struct student *p,int n) { struct student temp; int i,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> struct student { int id; float yw; float sx; float wy; float pj; }; int type(struct student *p); void list(struct student *p,int n); void average(struct student *p,int n); void help(void); void search(struct student *p); void sort(struct student *p,int n);
4.main函數
#include <stdio.h> #include <stdlib.h> #include "hs.h" int main(int argc, const char *argv[]) { char ch; struct student stu[32]; int n=0; while(1) { printf("請輸入命令 = "); scanf("%c",&ch); putchar(10); if(ch=='T') { n=type(stu); } else if(ch=='L') { if(n==0) { printf("成績表為空!請先使用T錄入成績!n"); putchar(10); } else list(stu,n); } else if(ch=='A') { if(n==0) { printf("成績表為空!請先使用T錄入成績!n"); putchar(10); } else { average(stu,n); printf("平均分已計算,請使用命令L檢視!n"); putchar(10); } } else if(ch=='H') help(); else if(ch=='C') system("clear"); else if(ch=='S') { if(n==0) { printf("成績表為空!請先使用T錄入成績!n"); putchar(10); } else { search(stu); putchar(10); } } else if(ch=='P') { if(n==0) { printf("成績表為空!請先使用T錄入成績!n"); putchar(10); } else { sort(stu,n); putchar(10); } } else if(ch=='Q') { printf("Press any key to continue!n"); return -1; } getchar(); } return 0; }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45