您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么使用C語(yǔ)言代碼實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)”,在日常操作中,相信很多人在怎么使用C語(yǔ)言代碼實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”怎么使用C語(yǔ)言代碼實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
某班有最多不超過(guò) 30 人(具體人數(shù)由鍵盤輸人)參加期未考試,考試科目 最多不超過(guò) 6 門(具體門數(shù)由鍵盤輸入,但不少于 3 門),學(xué)生成績(jī)管理系統(tǒng)是一 個(gè)非常實(shí)用的程序,如果能夠把用戶輸入數(shù)據(jù)存盤,下次運(yùn)行時(shí)讀出,就更有用 了。增加文件讀寫的功能,即編程實(shí)現(xiàn)如下菜單驅(qū)動(dòng)的學(xué)生成績(jī)管理系統(tǒng):
(1) 錄入每個(gè)學(xué)生的學(xué)號(hào)、姓名和各科考試成績(jī)。
(2) 計(jì)算每門課程的總分和平均分。
(3) 計(jì)算每個(gè)學(xué)生的總分和平均分。
(4) 按每個(gè)學(xué)生的總分由高到低排出名次表。
(5) 按學(xué)號(hào)由小到大排出成績(jī)表。
(6) 按姓名的字典順序排出成績(jī)表。
(7) 按學(xué)號(hào)查詢學(xué)生排名及其考試成績(jī)。
(8) 按姓名查詢學(xué)生排名及其考試成績(jī)。
(9) 按優(yōu)秀(90-100 分)、良好(80-89 分)、中等(70-79 分)、及格(60-69 分)、 不及格(0-59 分)5 個(gè)類別,對(duì)每門課程分別統(tǒng)計(jì)每個(gè)類別的人數(shù)以及所占的百 分比。
(10)輸出每個(gè)學(xué)生的學(xué)號(hào)、姓名、各科考試成績(jī)、總分、平均分以及每門課 程的總分和平均分。
代碼如下:
#include<stdio.h> #include<string.h> #include<stdlib.h> const int N = 40; int i,j; typedef struct control { int no; char name[20]; char name1[20]; int cj[7]; int all; int lave; } AVA; // ------------------------函數(shù) void menu(); void menu1(); void menu2(); void menu4(AVA stu[],int n,int n3); //------------------------- //-------------------------鏈接菜單與功能的函數(shù) void basic(AVA stu[]); //------------------------ //-------------------------信息錄入函數(shù) void keyboard(AVA stu[],int n,int n2); //------------------------功能函數(shù)調(diào)用總函數(shù) void case1(AVA stu[],int n,int a); //======================== //------------------------功能函數(shù) void function4(AVA stu[],AVA t,int n);//總分排序 void function5(AVA stu[],AVA t,int n);//學(xué)號(hào)排序 void function6(AVA stu[],AVA t,int n);//姓名排序 void function7(AVA stu[],AVA t,int n,int w);//學(xué)號(hào)查找 void function8(AVA stu[],AVA t,int n,char s[]);//姓名查找 void function9(AVA stu[],int n,int a);//數(shù)據(jù)分析 void function10(AVA stu[],int n,int a,int b1[],int b2[]);//輸出學(xué)生信息 void function11(AVA stu[],int n,int a);//存進(jìn)文件里面 void exchange(AVA stu[],int a,int b);//讀檔函數(shù) //------------------------- int main() { AVA stu[N]; for(i = 0; i < 30; i ++) { stu[i].all = 0; stu[i].lave = 0; } basic(stu); return 0; } void menu() { printf("_ _\n"); printf("| |\n"); printf(" \n"); printf(" \n"); printf(" 學(xué)生信息管理系統(tǒng) \n"); printf(" \n"); printf(" \n"); printf(" \n"); printf("| |\n"); printf("- -\n"); } void menu1() { printf("-> 信息輸入 <-\n"); printf("-> 學(xué)課成績(jī) <-\n"); printf("-> 學(xué)生成績(jī) <-\n"); printf("-> 總分排序 <-\n"); printf("-> 學(xué)號(hào)排序 <-\n"); printf("-> 姓名排序 <-\n"); printf("-> 學(xué)號(hào)查詢 <-\n"); printf("-> 姓名查詢 <-\n"); printf("-> 數(shù)據(jù)分析 <-\n"); printf("-> 信息輸出 <-\n"); printf("-> 數(shù)據(jù)存檔 <-\n"); } void menu2() { printf("_ _\n"); printf("| |\n"); printf("-> 功能代號(hào) <-\n"); printf("-> <1><2><3><4><5><6><7><8><9><10><11> <-\n"); printf("| |\n"); printf("- -\n"); } void menu4(AVA stu[],int n,int n3)//讀檔函數(shù)總調(diào)用 { printf("如果檔案中沒(méi)有存有足夠的學(xué)科數(shù),則可能提取亂碼\n"); printf("如果文件中沒(méi)有數(shù)據(jù)則會(huì)顯示無(wú)法打開\n"); exchange( stu,n,n3); case1( stu,n,n3); } //中轉(zhuǎn)函數(shù),菜單與功能的橋梁 void basic(AVA stu[]) { menu(); printf("若無(wú)學(xué)生信息檔案需要先錄入\n"); printf("<1-錄入><2-讀檔><3-退出>\n"); int n,n1,n3; do { scanf("%d",&n1); if(3<n1||n1<1) { printf("數(shù)據(jù)輸入錯(cuò)誤,請(qǐng)重新輸入\n"); } }while(3<n1||n1<1); printf("輸入學(xué)生數(shù)量\n"); do { scanf("%d",&n); if(30<n||n<1) { printf("數(shù)據(jù)輸入錯(cuò)誤,請(qǐng)重新輸入<1-30>\n"); } }while(30<n||n<1); printf("輸入學(xué)科數(shù)量\n"); do { scanf("%d",&n3); if(6<n3||n3<3) { printf("數(shù)據(jù)輸入錯(cuò)誤,請(qǐng)重新輸入<3-6>\n"); } }while(6<n3||n3<3); if(n1==1) { keyboard( stu,n,n3); case1( stu, n,n3); } else if(n1==2) menu4(stu,n,n3); else { printf("歡迎再次使用\n"); exit(0); } } //=========================功能函數(shù)調(diào)用的函數(shù) void case1(AVA stu[],int n,int a) { AVA t; for(i = 0; i < n; i ++) { for(j = 0; j < a; j ++) { stu[i].all+=stu[i].cj[j]; } stu[i].lave = stu[i].all/a; } int x[10]={0},y[10]={0}; for(j = 0; j < a;j ++) { for(i = 0; i < n; i ++) { y[j]+=stu[i].cj[j]; } } for(i = 0; i < a; i ++) { x[i] = y[i]/n; } menu1(); menu2(); printf("數(shù)據(jù)錄入成功\n"); printf("請(qǐng)輸入你想選擇的功能\n"); int n2; while(scanf("%d",&n2)&&n2!=0) { if(n2==2) { for(i = 0; i < a; i ++) { printf("第%d門總分為:%d,平均分為:%d\n",i+1,y[i],x[i]); } menu1(); menu2(); printf("完成\n"); } else if(n2==3) { int f; printf("計(jì)算完成,是否打???<1 or 0>\n"); scanf("%d",&f); if(f==1) { for(i = 0; i < n; i ++) { printf("第%d個(gè)同學(xué)的總分為:%d,平均分為:%d\n",i+1,stu[i].all,stu[i].lave); } printf("打印完成\n"); menu2(); } else { menu1(); menu2(); } printf("完成\n"); } else if(n2==4) { function4( stu, t, n); menu1(); menu2(); printf("完成\n"); } else if(n2==5) { function5( stu, t, n); menu1(); menu2(); printf("完成\n"); } else if(n2==6) { function6( stu, t, n); menu1(); menu2(); printf("完成\n"); } else if(n2==7) { int w; printf("輸入你想查詢的學(xué)號(hào)\n"); scanf("%d",&w); function7( stu, t, n, w); menu1(); menu2(); printf("完成\n"); } else if(n2==8) { char s[30]; printf("輸入你想查詢的名字\n"); scanf("%s",s); function8(stu,t, n,s); menu1(); menu2(); printf("完成\n"); } else if(n2==9) { function9( stu, n, a); menu1(); menu2(); printf("完成\n"); } else if(n2==10) { function10( stu, n, a, x, y); menu1(); menu2(); printf("完成\n"); } else if(n2==11) { function11( stu, n, a); menu1(); menu2(); printf("完成\n"); } else menu2(); } } //=========================信息錄入函數(shù) void keyboard(AVA stu[],int n,int n2) { for(i = 0; i < n; i ++) { printf("正在輸入%d個(gè)學(xué)生信息\n",i+1); // printf("學(xué)號(hào):\n"); scanf("%d",&stu[i].no); printf("姓名:\n"); scanf("%s",stu[i].name); printf("姓名拼音簡(jiǎn)寫\n"); scanf("%s",stu[i].name1); printf("分別輸入%d門學(xué)課成績(jī)\n",n2); for(j = 0; j < n2; j ++) { scanf("%d",&stu[i].cj[j]); } } } void function4(AVA stu[],AVA t,int n)//總分排序 { printf("總分排序\n"); FILE *fp; for(i = 0; i < n-1;i ++) for(j = 0; j < n-1-i;j++) { if(stu[j].all<stu[j+1].all) { t = stu[j]; stu[j] = stu[j+1]; stu[j+1] = t; } } printf("正在生成文件\n"); printf("請(qǐng)及時(shí)拷貝文件,否則會(huì)造成數(shù)據(jù)丟失\n"); fp = fopen("總分排序.txt","w"); if(fp==NULL) { printf("打開失敗\n"); exit(0); } for(i = 0; i < n;i ++) { fprintf(fp,"%s %d\n",stu[i].name,stu[i].all); } fclose(fp); } void function5(AVA stu[],AVA t,int n)//學(xué)號(hào)排序 { printf("學(xué)號(hào)排序\n"); FILE *fp; for(i = 0; i < n-1;i ++) for(j = 0; j < n-1-i;j++) { if(stu[j].no<stu[j+1].no) { t = stu[j]; stu[j] = stu[j+1]; stu[j+1] = t; } } char name[N]; strcpy(name,"學(xué)號(hào)為:"); printf("正在生成文件\n"); printf("請(qǐng)及時(shí)拷貝文件,否則會(huì)造成數(shù)據(jù)丟失\n"); fp = fopen("學(xué)號(hào)排序.txt","w"); if(fp==NULL) { printf("打開失敗\n"); exit(0); } for(i = 0; i < n;i ++) { fprintf(fp,"%s%d\n",name,stu[i].no); fprintf(fp,"%s%d\n",stu[i].name,stu[i].all); } fclose(fp); } void function6(AVA stu[],AVA t,int n)//姓氏排序 { printf("姓名排序\n"); FILE *fp; for(i = 0; i < n-1;i ++) for(j = 0; j < n-1-i;j++) { if(stu[j].name1[0]>stu[j+1].name1[0]) { t = stu[j]; stu[j] = stu[j+1]; stu[j+1] = t; } } printf("正在生成文件\n"); printf("請(qǐng)及時(shí)拷貝文件,否則會(huì)造成數(shù)據(jù)丟失\n"); fp = fopen("姓名排序.txt","w"); if(fp==NULL) { printf("打開失敗\n"); exit(0); } for(i = 0; i < n;i ++) { fprintf(fp,"%s%d\n",stu[i].name,stu[i].all); } fclose(fp); } void function7(AVA stu[],AVA t,int n,int w)//學(xué)號(hào)查找 { int m = 0; for(i = 0; i < n-1;i ++) for(j = 0; j < n-1-i;j++) { if(stu[j].all<stu[j+1].all) { t = stu[j]; stu[j] = stu[j+1]; stu[j+1] = t; } } for(i = 0; i <n; i ++) { m++; if(stu[i].no==w) { printf("學(xué)號(hào)為:%d\n",stu[i].no); printf("姓名為:%s\n",stu[i].name); printf("成績(jī)?yōu)?%d\n",stu[i].all); printf("排名為:%d\n",m); break; } } } void function8(AVA stu[],AVA t,int n,char s[])//姓名查找 { int m = 0; for(i = 0; i < n-1;i ++) for(j = 0; j < n-1-i;j++) { if(stu[j].all<stu[j+1].all) { t = stu[j]; stu[j] = stu[j+1]; stu[j+1] = t; } } for(i = 0; i <n; i ++) { m++; if(strcmp(stu[i].name,s)==0) { printf("學(xué)號(hào)為:%d\n",stu[i].no); printf("姓名為:%s\n",stu[i].name); printf("成績(jī)?yōu)?%d\n",stu[i].all); printf("排名為:%d\n",m); break; } } } void function9(AVA stu[],int n,int a)//數(shù)據(jù)分析 { printf("請(qǐng)?jiān)谖募A中查看\n"); for(i = 0; i < a; i++) { double k1=0,k2=0,k3=0,k4=0,k5=0; for( j = 0; j < n; j ++) { if(stu[j].cj[i]>=90) k1++; else if(stu[j].cj[i]>=80&&stu[j].cj[i]<=89) k2++; else if(stu[j].cj[i]>=70&&stu[j].cj[i]<=79) k3++; else if(stu[j].cj[i]>=60&&stu[j].cj[i]<=69) k4++; else if(stu[j].cj[i]<=59) k5++; } FILE *fp; fp = fopen("數(shù)據(jù)分析.txt","a"); if(fp==NULL) { printf("打開失敗\n"); exit(0); } char s[20]; strcpy(s,"subject"); s[7] = '0'+i; s[8] = '\0'; char name1[20]; char name2[20]; char name3[20]; char name4[20]; char name5[20]; strcpy(name1,"優(yōu):%"); strcpy(name2,"良好:%"); strcpy(name3,"中等:%"); strcpy(name4,"及格:%"); strcpy(name5,"不及格:%"); fprintf(fp,"\n%s\n",s); fprintf(fp,"%s%.2f\n",name1,(k1*100)/n); fprintf(fp,"%s%.2f\n",name2,(k2*100)/n); fprintf(fp,"%s%.2f\n",name3,(k3*100)/n); fprintf(fp,"%s%.2f\n",name4,(k4*100)/n); fprintf(fp,"%s%.2f\n",name5,(k5*100)/n); k1=0,k2=0,k3=0,k4=0,k5=0; fclose(fp); } } void function10(AVA stu[],int n,int a,int b1[],int b2[])//輸出學(xué)生信息 { for(i = 0; i < n; i ++) { printf("學(xué)號(hào):%d\n",stu[i].no); printf("姓名:%s\n",stu[i].name); printf("總分:%d\n",stu[i].all); printf("平均分:%d\n",stu[i].lave); printf("每科分?jǐn)?shù)為:"); for(j = 0; j < a; j ++) { printf("%d ",stu[i].cj[j]); } printf("\n"); printf("\n"); printf("\n"); printf("\n"); } printf("學(xué)科平均分為:\n"); for(j = 0; j < a; j ++) { printf("第%d學(xué)科平均分為:%d\n",j+1,b1[j]); } printf("學(xué)科總分:\n"); for(j = 0; j < a; j ++) { printf("第%d學(xué)科總分為:%d\n",j+1,b2[j]); } } void function11(AVA stu[],int n,int a)//存進(jìn)文件中 { FILE *fp; fp = fopen("學(xué)生信息存檔.txt","a"); if(fp==NULL) { printf("無(wú)法打開\n"); exit(0); } char name[30]; char name1[30]; char name2[30]; strcpy(name,"每科成績(jī):"); strcpy(name1,"總平均成績(jī):"); strcpy(name2,"總成績(jī):"); for(i = 0; i < n; i ++) { fprintf(fp,"\n%d %s\n",stu[i].no,stu[i].name); fprintf(fp,"%s %d\n",name2,stu[i].all); fprintf(fp,"%s %d\n",name1,stu[i].lave); fprintf(fp,"%s\n",name); for(j = 0; j < a;j ++) { fprintf(fp,"%d ",stu[i].cj[j]); } } fclose(fp); FILE *fpk1,*fpk2,*fpk3,*fpk4,*fpk5,*fpk6,*fpk7,*fpk8,*fpk9; fpk1 = fopen("學(xué)號(hào).txt","a"); fpk2 = fopen("姓名.txt","a"); fpk3 = fopen("姓名簡(jiǎn)稱.txt","a"); fpk4 = fopen("學(xué)科1.txt","a"); fpk5 = fopen("學(xué)科2.txt","a"); fpk6 = fopen("學(xué)科3.txt","a"); fpk7 = fopen("學(xué)科4.txt","a"); fpk8 = fopen("學(xué)科5.txt","a"); fpk9 = fopen("學(xué)科6.txt","a"); if(fpk1==NULL||fpk2==NULL||fpk3==NULL||fpk4==NULL||fpk5==NULL||fpk6==NULL||fpk7==NULL||fpk8==NULL||fpk9==NULL) { printf("無(wú)法打開\n"); exit(0); } for(i = 0; i < n; i ++) { fprintf(fpk1,"%d\n",stu[i].no); fprintf(fpk2,"%s\n",stu[i].name); fprintf(fpk3,"%s\n",stu[i].name1); fprintf(fpk4,"%d\n",stu[i].cj[0]); fprintf(fpk5,"%d\n",stu[i].cj[1]); fprintf(fpk6,"%d\n",stu[i].cj[2]); if(a==4||a==5||a==6) { fprintf(fpk7,"%d\n",stu[i].cj[3]); } if(a==5||a==6) { fprintf(fpk8,"%d\n",stu[i].cj[4]); } if(a==6) { fprintf(fpk9,"%d\n",stu[i].cj[5]); } } fclose(fpk1); fclose(fpk2); fclose(fpk3); fclose(fpk4); fclose(fpk5); fclose(fpk6); fclose(fpk7); fclose(fpk8); fclose(fpk9); } void exchange(AVA stu[],int a,int b)//讀檔函數(shù) a學(xué)生b學(xué)科 { FILE *fpk1,*fpk2,*fpk3,*fpk4,*fpk5,*fpk6,*fpk7,*fpk8,*fpk9; fpk1 = fopen("學(xué)號(hào).txt","r"); fpk2 = fopen("姓名.txt","r"); fpk3 = fopen("姓名簡(jiǎn)稱.txt","r"); fpk4 = fopen("學(xué)科1.txt","r"); fpk5 = fopen("學(xué)科2.txt","r"); fpk6 = fopen("學(xué)科3.txt","r"); fpk7 = fopen("學(xué)科4.txt","r"); fpk8 = fopen("學(xué)科5.txt","r"); fpk9 = fopen("學(xué)科6.txt","r"); if(fpk1==NULL||fpk2==NULL||fpk3==NULL||fpk4==NULL||fpk5==NULL||fpk6==NULL||fpk7==NULL||fpk8==NULL||fpk9==NULL) { printf("無(wú)法打開\n"); exit(0); } i = 0; char s1[N],s2[N],s3[N],s4[N],s5[N],s6[N],s7[N],s8[N],s9[N]; while(fgets(s1,40,fpk1)!=NULL) { int w; w = strlen(s1); if(w==2) { stu[i].no = s1[0]-'0'; } else if(w==3) { stu[i].no=(s1[0]-'0')*10+s1[1]-'0'; } i++; if(i==a) break; } i=0; while(fgets(s2,40,fpk2)!=NULL) { strcpy(stu[i].name,s2); i++; if(i==a)break; } i=0; while(fgets(s3,40,fpk3)!=NULL) { strcpy(stu[i].name1,s3); i++; if(i==a)break; } i = 0; while(fgets(s4,40,fpk4)!=NULL) { int w; w = strlen(s4); if(w==2) { stu[i].cj[0] = s4[0]-'0'; } else if(w==3) { stu[i].cj[0]=(s4[0]-'0')*10+s4[1]-'0'; } i++; if(i==a) break; } i = 0; while(fgets(s5,40,fpk5)!=NULL) { int w; w = strlen(s5); if(w==2) { stu[i].cj[1] = s5[0]-'0'; } else if(w==3) { stu[i].cj[1]=(s5[0]-'0')*10+s5[1]-'0'; } i++; if(i==a) break; } i = 0; while(fgets(s6,40,fpk6)!=NULL) { int w; w = strlen(s6); if(w==2) { stu[i].cj[2] = s6[0]-'0'; } else if(w==3) { stu[i].cj[2]=(s6[0]-'0')*10+s6[1]-'0'; } i++; if(i==a) break; } if(b==4||b==5||b==6) { i = 0; while(fgets(s7,40,fpk7)!=NULL) { int w; w = strlen(s7); if(w==2) { stu[i].cj[3] = s7[0]-'0'; } else if(w==3) { stu[i].cj[3]=(s7[0]-'0')*10+s7[1]-'0'; } i++; if(i==a) break; } } if(b==5||b==6) { i = 0; while(fgets(s8,40,fpk8)!=NULL) { int w; w = strlen(s8); if(w==2) { stu[i].cj[4] = s8[0]-'0'; } else if(w==3) { stu[i].cj[4]=(s8[0]-'0')*10+s8[1]-'0'; } i++; if(i==a) break; } } if(b==6) { i = 0; while(fgets(s9,40,fpk9)!=NULL) { int w; w = strlen(s9); if(w==2) { stu[i].cj[5] = s9[0]-'0'; } else if(w==3) { stu[i].cj[5]=(s9[0]-'0')*10+s9[1]-'0'; } i++; if(i==a) break; } } fclose(fpk1); fclose(fpk2); fclose(fpk3); fclose(fpk4); fclose(fpk5); fclose(fpk6); fclose(fpk7); fclose(fpk8); fclose(fpk9); printf("讀檔完成\n"); }
到此,關(guān)于“怎么使用C語(yǔ)言代碼實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。