捕獲.PNG (12.58 KB, 下載次數: 79)
下載附件
2019-5-16 20:24 上傳
學生成績管理系統,可以輸入學生成績,并且可以查看統計平均分總分等,并可以實現成績的實時存儲。代碼有注釋哦~
C語言源程序如下:
- #include<stdio.h>
- #include<string.h>
- #include<conio.h>
- #include<stdlib.h>
- #define N 10/*定義學生人數*/
- #define M 4 /*定義學科人數*/
- typedef struct student/*定義結構體數組*/
- {
- int number; /*學號*/
- char name[10];/*姓名*/
- char zhuanye[10];/*專業*/
- int cla;/*班級*/
- float score[M];/*分數*/
- float sum;/*總分*/
- float average;/*平均分*/
- }STU;
- STU stu[N];
- void menu(void);
- void input(void);
- void savescore(void);
- void loadf(void);
- void inoutput(void);
- void sumaverage(STU stu[N]);
- void paixu(STU stu[N]);
- void tongji1(STU stu[N]);
- void tongji2(STU stu[N]);
- void shuchuone(int i);
- void output2(STU stu[N]);
- void xiugai(int n);
- void xianshi(STU stu[N]);
- void chazhao(STU stu[N]);
- void chazhao1(int n);
- void main()
- {
- char choice;
- system("color F0");
- do
- { menu();
- printf("\n\tPress a key for your choice: ");
- switch(choice=getchar())
- { case '1': inoutput();break;/*輸入學生成績并保存加載顯示*/
- case '2': chazhao(stu);break;/*查找學生信息及各個統計結果*/
- case '3': xiugai(N);break;/*修改學生信息*/
- case '4': xianshi(stu);break;/*顯示統計結果*/
- case '5': goto QUIT;/*安全退出*/
- case '\n': break;
- default: printf("\t輸入錯誤,請重新輸入!");/*輸入錯誤時的處理*/
-
- }
- getch();
- }while(1);
- QUIT:
- printf("\n\t謝謝使用,再見!\n\n\t");
- getch();
- exit(0);
- }
- void menu(void)/*定義菜單函數*/
- {
- system("cls");/*清屏*/
- printf("\n\n\t*********歡迎使用學生信息管理系統************\n");
- printf("\n\t 1、添加學生信息并顯示:\n");
- printf("\t 2、查找學生信息:\n");
- printf("\t 3、修改學生信息:\n");
- printf("\t 4、顯示所有學生信息及統計結果:\n");
- printf("\t 5、退出。\n");
- printf("\n\n\t*********************************************");
- }
- void input(void)/*定義輸入函數*/
- {
- int i,j;
- system("CLS");
- printf("輸入學生各科成績:\n");
- puts("學號\t姓名\t專業\t班級\t英語\t高數\t物理\t體育");
- for(i=0;i<N;i++)
- {
- printf("輸入%d的學生信息:\n",i+1);
- scanf("%d%s%s%d",&stu[i].number,stu[i].name,stu[i].zhuanye,&stu[i].cla);
- printf("輸入%d的學生各科成績:\n",i+1);
- for(j=0;j<M;j++)
- scanf("%f",&stu[i].score[j]);
- }
- printf("\n已輸入%d個學生數據.\n",N);
- }
- void savescore(void)/*定義保存成績到文件函數*/
- {
- FILE * fp;
- int i,flag=1;
- char m;
- puts("是否現在保存成績(Y/N)");
- scanf("%s",&m);
- if(m=='Y')
- {
- if((fp=fopen("c:\\student.dat","wb"))==NULL)
- {
- printf("無法打開文件\n");
- return;
- }
- for(i=0;i<N;i++)
- {
- if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
- {
- printf("文件寫入錯誤\n");
- flag=0;
- }
- }
- if(flag==1)
- puts("文件成功保存!");
- fclose(fp);/*及時關閉文件*/
- }
- else
- return;
- }
- void loadf(void)/*定義加載文件函數*/
- {
- FILE *fp;
- int i,flag=1;
- char m;
- puts("是否現在打開文件!(Y/N)");
- scanf("%s",&m);
- if(m=='Y')
- {
- if((fp=fopen("c:\\student.dat","rb"))==NULL)
- {
- printf("無法打開文件\n");
- flag=0;
- return;
- }
- for(i=0;!feof(fp);i++)
- fread(&stu[i],sizeof(STU),1,fp);
- if(flag==1)
- puts("文件加載成功!");
- fclose(fp);
- }
- else
- return;
- }
- void sumaverage(STU stu[N])/*定義求和與求平均值函數*/
- {
- FILE *fp;
- int i,j;
- if((fp=fopen("c:\\student.dat","rb"))==NULL)/*以讀方式打開文件并查詢文件是否存在*/
- {
- printf("error!");
- exit(0);
- }
- for(i=0;!feof(fp);i++)
- fread(&stu[i],sizeof(STU),1,fp);/*一次讀出所有數據*/
- fclose(fp);
- for(i=0;i<N;i++)
- {
- stu[i].sum=0.0;
- for(j=0;j<M;j++)
- stu[i].sum+=stu[i].score[j];
- stu[i].average=stu[i].sum/M;
- }
- }
- void paixu(STU stu[N])/*定義排序函數*/
- {
- int i,j,k;
- STU temp;
- for(i=0;i<N-1;i++)
- {
- k=i;
- for(j=i+1;j<N;j++)
- if(stu[i].sum<stu[j].sum)
- k=j;
- if(i!=k)
- {
- temp=stu[i];
- stu[i]=stu[k];
- stu[k]=temp;
- }
- }
- }
- void tongji1(STU stu[N])/*定義統計成績率函數*/
- {
- int m,i;
- float a=0.0,b=0.0,c=0.0;
- FILE *fp;
- if((fp=fopen("c:\\student.dat","rb"))==NULL)/*以讀方式打開文件并查詢文件是否存在*/
- {
- printf("error!");
- exit(0);
- }
- for(i=0;!feof(fp);i++)
- fread(&stu[i],sizeof(STU),1,fp);/*一次讀出所有數據*/
- fclose(fp);
- printf("********************選擇統計學科**********************\n"); /*選擇功能菜單*/
- printf("統計英語成績不及格率、通過率及優秀率請按:1\n");
- printf("統計高數成績不及格率、通過率及優秀率請按:2\n");
- printf("統計物理成績不及格率、通過率及優秀率請按:3\n");
- printf("統計體育成績不及格率、通過率及優秀率請按:4\n");
- printf("******************************************************\n");
- scanf("%d",&m);
- for(i=0;i<N;i++)
- {
- if(stu[i].score[m-1]<60)
- a++;
- else
- b++;
- if(stu[i].score[m-1]>=90)
- c++;
- }
- printf("不及格率為%.1f,通過率為%.1f,優秀率為%.1f\n",a/N,b/N,c/N);
- printf(" ******************************************************");
- }
- void tongji2(STU stu[N])/*定義查找最高分函數*/
- {
- int i,m,k=0;
- FILE *fp;
- if((fp=fopen("c:\\student.dat","rb"))==NULL)/*以讀方式打開文件并查詢文件是否存在*/
- {
- printf("error!");
- exit(0);
- }
- for(i=0;!feof(fp);i++)
- fread(&stu[i],sizeof(STU),1,fp);/*一次讀出所有數據*/
- fclose(fp);
- printf("********************輸入查找選項**********************\n");
- printf("1、查找英語成績最高學生請按:1\n");
- printf("2、查找高數成績最高學生請按:2\n");
- printf("3、查找物理成績最高學生請按:3\n");
- printf("4、查找體育成績最高學生請按:4\n");
- printf("*****************************************************\n");
- scanf("%d",&m);
- for(i=0;i<N;i++)
- {
- if(stu[i].score[m-1]>stu[k].score[m-1])
- k=i;
- }
- sumaverage(stu);
- printf("最高分學生信息如下:\n");
- shuchuone(k);
- printf(" 輸出結束\n");
- printf(" **********************************************************");
- }
- void shuchuone(int i)/*定義輸出一個學生函數*/
- {
- printf("學號:%d 姓名:%s 專業:%s 班級:%d\n",stu[i].number,stu[i].name,stu[i].zhuanye,stu[i].cla);
- printf("英語:%.1f 高數:%.1f 物理:%.1f 體育:%.1f 總分:%.1f 平均分:%.1f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].sum,stu[i].average);
- }
- void inoutput(void)/*定義輸入成績與保存加載顯示函數*/
- {
- int i,j;
- input();/*調用輸入成績函數*/
- savescore();/*調用保存函數*/
- loadf();/*定定義加載函數*/
- puts("學號\t姓名\t專業\t班級\t英語\t高數\t物理\t體育");
- for(i=0;i<N;i++)
- {
- printf("%d\t%s\t%s\t%d\t",stu[i].number,stu[i].name,stu[i].zhuanye,stu[i].cla);
- for(j=0;j<M;j++)
- printf("%.1f\t",stu[i].score[j]);
- printf("\n");
- }
- }
- void output2(STU stu[N])/*定義輸出成績函數*/
- {
- int i,j;
- FILE *fp;
- if((fp=fopen("c:\\student.dat","rb"))==NULL)/*以讀方式打開文件并查詢文件是否存在*/
- {
- printf("error!");
- exit(0);
- }
- for(i=0;!feof(fp);i++)
- fread(&stu[i],sizeof(STU),1,fp);/*一次讀出所有數據*/
- fclose(fp);
- puts("學號\t姓名\t專業\t班級\t英語\t高數\t物理\t體育\t總分\t平均分");
- for(i=0;i<N;i++)
- {
- printf("%d\t%s\t%s\t%d\t",stu[i].number,stu[i].name,stu[i].zhuanye,stu[i].cla);
- for(j=0;j<M;j++)
- {
- printf("%.1f\t",stu[i].score[j]);
- }
- sumaverage(stu);
- printf("%.1f\t",stu[i].sum);
- printf("%.1f\t",stu[i].average);
- }
- }
- void xiugai(int n)/*定義修改信息函數*/
- {
- STU some;
- int k=-1,m,i;
- FILE *fp;
- if((fp=fopen("c:\\student.dat","rb"))==NULL)/*以讀方式打開文件并查詢文件是否存在*/
- {
- printf("error!");
- exit(0);
- }
- for(i=0;!feof(fp);i++)
- fread(&stu[i],sizeof(STU),1,fp);/*一次讀出所有數據*/
- fclose(fp);
- printf("\n請輸入要修改的同學的學號:");
- scanf("%d",&m);
- for(i=0;i<n;i++)
- {
- if(m==stu[i].number)
- {
- k=i;
- break;
- }
- }
- if(k<0)
- printf("\n輸入學號有誤,請重新輸入!");
- else
- {
- printf("請輸入要修改學生修改后的的信息\n");
- printf("學號\t專業\t班級\t英語\t高數\t物理\t體育\n");
- scanf("%d\t%s\t%d\t%f\t%f\t%f\t%f",&some.number,some.zhuanye,&some.cla,&some.score[0],&some.score[1],&some.score[2],&some.score[3]);
- strcpy(some.name,stu[i].name);
- some.sum=(some.score[0]+some.score[1]+some.score[2]+some.score[3]);
- some.average=some.sum/M;
- stu[k]=some;
- shuchuone(k);
- printf("\n修改成功!恭喜!\n");
- }
- }
- void xianshi(STU stu[N])/*定義顯示成績函數*/
- {
- sumaverage(stu);
- paixu(stu);
- output2(stu);
- }
- void chazhao(STU stu[N])/*定義查找函數*/
- {
- int m,i;
- FILE *fp;
- if((fp=fopen("c:\\student.dat","rb"))==NULL)/*以讀方式打開文件并查詢文件是否存在*/
- {
- printf("error!");
- exit(0);
- }
- for(i=0;!feof(fp);i++)
- fread(&stu[i],sizeof(STU),1,fp);/*一次讀出所有數據*/
- fclose(fp);
- sumaverage(stu);/*求平均值和總分*/
- printf("********************輸入查找選項**********************\n");
- printf("1、查找成績最高學生請按:1\n");
- printf("2、查看學生的各項成績率請按:2\n");
- printf("3、查找單個學生信息請按:3\n");
- printf("******************************************************\n");
- scanf("%d",&m);
- if(m==1)
- tongji2(stu);
- if(m==2)
- tongji1(stu);
- if(m==3)
- chazhao1(N);
- }
- void chazhao1(int n)/*定義查找單個學生成績函數*/
- {
- int k=-1,a,i;
- FILE *fp;
- if((fp=fopen("c:\\student.dat","rb"))==NULL)/*以讀方式打開文件并查詢文件是否存在*/
- {
- printf("error!");
- exit(0);
- }
- for(i=0;!feof(fp);i++)
- fread(&stu[i],sizeof(STU),1,fp);/*一次讀出所有數據*/
- fclose(fp);
- printf("請輸入要查找的同學的學號:\n");
- scanf("%d",&a);
- for(i=0;i<n;i++)
- {
- if(a==stu[i].number)
- {
- k=i;
- break;
- }
- }
- if(k<0)
- printf("\n輸入學號有誤,請重新輸入!");
- else
- sumaverage(stu);
- shuchuone(k);
- }
復制代碼
所有資料51hei提供下載:
學生成績管理系統.rar
(222 KB, 下載次數: 19)
2019-5-16 20:25 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|