您好,登錄后才能下訂單哦!
這篇“C語言實現簡單學生成績管理系統的方法”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“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; }
以上就是關于“C語言實現簡單學生成績管理系統的方法”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。