学生成绩管理系统完整版C程序设计源代码不用链表有添加删除查找修改等功能
学生成绩管理系统C源代码

学生成绩管理系统C源代码搜集者:海水发布时间:06-01-27 浏览次数:23242 [大中小]#include<malloc.h>#include<stdio.h>#include<stdlib.h>#define LEN sizeof(struct scorenode)#define DEBUG#include<string.h>struct scorenode{int number;/*学号*/char name[10];/*姓名*/float yuwen;/*语文成绩*/float yingyu;/*英语成绩*/float shuxue;/*数学成绩*/struct scorenode*next;};typedef struct scorenode score;int n,k;/*n,k为全局变量,本程序中的函数均可以使用它*//*==============================================================================================*/score*creat2311(void)/*函数creat2311,功能:创建链表,此函数带回一个指向链表头的指针*/{score*head;score*p1,*p2,*p3,*max;int i,j;float fen;char t[10];n=0;p1=p2=p3=(score*)malloc(LEN);head=p3;/*开辟一个新单元*/printf("请输入学生资料,输0退出!\n");repeat1:printf("请输入学生学号(学号应大于0):");/*输入学号,学号应大于0*/scanf("%d",&p1->number);while(p1->number<0){getchar();printf("输入错误,请重新输入学生学号:");scanf("%d",&p1->number);}/*输入学号为字符或小于0时,程序报错,提示重新输入学号*/if(p1->number==0)goto end;/*当输入的学号为0时,转到末尾,结束创建链表*/else{p3=head;if(n>0){for(i=0;i<n;i++){if(p1->number!=p3->number)p3=p3->next;else{printf("学号重复,请重输!\n");goto repeat1;/*当输入的学号已经存在,程序报错,返回前面重新输入*/}}}}printf("请输入学生姓名:");scanf("%s",&p1->name);/*输入学生姓名*/printf("请输入语文成绩(0~100):");/*输入语文成绩,成绩应在0-100*/scanf("%f",&p1->yuwen);while(p1->yuwen<0||p1->yuwen>100){getchar();printf("输入错误,请重新输入语文成绩");/*输入错误,重新输入语文成绩直到正确为止*/scanf("%f",&p1->yuwen);}printf("请输入英语成绩(0~100):");/*输入英语成绩,成绩应在0-100*/scanf("%f",&p1->yingyu);while(p1->yingyu<0||p1->yingyu>100){getchar();printf("输入错误,请重新输入英语成绩");/*输入错误,重新输入英语成绩直到正确为止*/scanf("%f",&p1->yingyu);}printf("请输入数学成绩(0~100):");/*输入数学成绩,成绩应在0-100*/scanf("%f",&p1->shuxue);while(p1->shuxue<0||p1->shuxue>100){getchar();printf("输入错误,请重新输入数学成绩");scanf("%f",&p1->shuxue);}/*输入错误,重新输入数学成绩直到正确为止*/head=NULL;while(p1->number!=0){n=n+1;if(n==1)head=p1;elsep2->next=p1;p2=p1;p1=(score*)malloc(LEN);printf("请输入学生资料,输0退出!\n");repeat2:printf("请输入学生学号(学号应大于0):");scanf("%d",&p1->number);/*输入学号,学号应大于0*/while(p1->number<0){getchar();printf("输入错误,请重新输入学生学号:");scanf("%d",&p1->number);}/*输入学号为字符或小于0时,程序报错,提示重新输入学号*/if(p1->number==0)goto end;/*当输入的学号为0时,转到末尾,结束创建链表*/else{p3=head;if(n>0){for(i=0;i<n;i++){if(p1->number!=p3->number)p3=p3->next;else{printf("学号重复,请重输!\n");goto repeat2;/*当输入的学号已经存在,程序报错,返回前面重新输入*/}}}}printf("请输入学生姓名:");scanf("%s",&p1->name);/*输入学生姓名*/printf("请输入语文成绩(0~100):");scanf("%f",&p1->yuwen);/*输入语文成绩,成绩应在0-100*/while(p1->yuwen<0||p1->yuwen>100){getchar();printf("输入错误,请重新输入语文成绩");scanf("%f",&p1->yuwen);}/*输入错误,重新输入语文成绩直到正确为止*/ printf("请输入英语成绩(0~100):");scanf("%f",&p1->yingyu);/*输入英语成绩,成绩应在0-100*/while(p1->yingyu<0||p1->yingyu>100){getchar();printf("输入错误,请重新输入英语成绩");scanf("%f",&p1->yingyu);}/*输入错误,重新输入英语成绩直到正确为止*/ printf("请输入数学成绩(0~100):");scanf("%f",&p1->shuxue);/*输入数学成绩,成绩应在0-100*/while(p1->shuxue<0||p1->shuxue>100){getchar();printf("输入错误,请重新输入数学成绩");scanf("%f",&p1->shuxue);}/*输入错误,重新输入数学成绩直到正确为止*/}end:p1=head;p3=p1;for(i=1;i<n;i++){for(j=i+1;j<=n;j++){max=p1;p1=p1->next;if(max->number>p1->number){k=max->number;max->number=p1->number;p1->number=k;/*交换前后结点中的学号值,使得学号大者移到后面的结点中*/strcpy(t,max->name);strcpy(max->name,p1->name);strcpy(p1->name,t);/*交换前后结点中的姓名,使之与学号相匹配*/fen=max->yuwen;max->yuwen=p1->yuwen;p1->yuwen=fen;/*交换前后结点中的语文成绩,使之与学号相匹配*/fen=max->yingyu;max->yingyu=p1->yingyu;p1->yingyu=fen;/*交换前后结点中的英语成绩,使之与学号相匹配*/fen=max->shuxue;max->shuxue=p1->shuxue;p1->shuxue=fen;/*交换前后结点中的数学成绩,使之与学号相匹配*/}}max=head;p1=head;/*重新使max,p指向链表头*/}p2->next=NULL;/*链表结尾*/printf("输入的学生数为:%d个!\n",n);return(head);}/*==============================================================================================*//*==============================================================================================*/score*load2311(score*head)/*函数load2311,功能:从文件读入学生记录*/{score*p1,*p2;int m=0;char filepn[10];FILE*fp;printf("请输入文件路径及文件名:");scanf("%s",filepn);/*输入文件路径及名称*/if((fp=fopen(filepn,"r+"))==NULL){printf("不能打开文件!\n");return0;}fscanf(fp,"考试成绩管理系统\n");fscanf(fp,"作者:周纯钢班级:信息023学号:11\n");fscanf(fp,"-----------------------------------------\n");fscanf(fp,"|学号\t|姓名\t|语文\t|英语\t|数学\t|\n");fscanf(fp,"-----------------------------------------\n");/*读入表格域*/printf("考试成绩管理系统\n");printf("作者:周纯钢班级:信息023学号:11\n");printf("-----------------------------------------\n");printf("|学号\t|姓名\t|语文\t|英语\t|数学\t|\n");printf("-----------------------------------------\n");/*打印表格域*/m=m+1;if(m==1){p1=(score*)malloc(LEN);/*开辟一个新单元*/fscanf(fp,"%d%s%f%f%f",&p1->number,p1->name,&p1->yuwen,&p1->yingyu,&p1->shuxue);printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p1->number,p1->name,p1->yuwen,p1->yingyu,p1->shuxue);/*文件读入与显示*/head=NULL;do{n=n+1;if(n==1)head=p1;else p2->next=p1;p2=p1;p1=(score*)malloc(LEN);/*开辟一个新单元*/fscanf(fp,"%d%s%f%f%f\n",&p1->number,p1->name,&p1->yuwen,&p1->yingyu,&p1->shuxue);printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p1->number,p1->name,p1->yuwen,p1->yingyu,p1->shuxue);/*文件读入与显示*/}while(!feof(fp));p2->next=p1;p1->next=NULL;n=n+1;}printf("-----------------------------------------\n");/*表格下线*/fclose(fp);/*结束读入,关闭文件*/return(head);}/*==============================================================================================*//*==============================================================================================*/score*add2311(score*head,score*stu)/*函数add2311,功能:追加学生资料,并且将所有学生资料按学号排序*/{score*p0,*p1,*p2,*p3,*max;int i,j;float fen;char t[10];p3=stu=(score*)malloc(LEN);/*开辟一个新单元*/printf("\n输入要增加的学生的资料!");repeat4:printf("请输入学生学号(学号应大于0):");scanf("%d",&stu->number);/*输入学号,学号应大于0*/while(stu->number<0){getchar();printf("输入错误,请重新输入学生学号:");scanf("%d",&stu->number);}/*输入错误,重新输入学号*/ /******************************************************/if(stu->number==0)goto end2;/*当输入的学号为0时,转到末尾,结束追加*/else{p3=head;if(n>0){for(i=0;i<n;i++){if(stu->number!=p3->number)p3=p3->next;else{printf("学号重复,请重输!\n");goto repeat4;/*当输入的学号已经存在,程序报错,返回前面重新输入*/}}}}/******************************************************/printf("输入学生姓名:");scanf("%s",stu->name);/*输入学生姓名*/printf("请输入语文成绩(0~100):");scanf("%f",&stu->yuwen);/*输入语文成绩,成绩应在0-100*/while(stu->yuwen<0||stu->yuwen>100){getchar();printf("输入错误,请重新输入语文成绩");scanf("%f",&stu->yuwen);}/*输入错误,重新输入语文成绩直到正确为止*/ printf("请输入英语成绩(0~100):");scanf("%f",&stu->yingyu);/*输入英语成绩,成绩应在0-100*/while(stu->yingyu<0||stu->yingyu>100){getchar();printf("输入错误,请重新输入英语成绩");scanf("%f",&stu->yingyu);}/*输入错误,重新输入英语成绩直到正确为止*/printf("请输入数学成绩(0~100):");scanf("%f",&stu->shuxue);/*输入数学成绩,成绩应在0-100*/while(stu->shuxue<0||stu->shuxue>100){getchar();printf("输入错误,请重新输入数学成绩");scanf("%f",&stu->shuxue);}/*输入错误,重新输入数学成绩直到正确为止*/p1=head;p0=stu;if(head==NULL){head=p0;p0->next=NULL;}/*当原来链表为空时,从首结点开始存放资料*/else/*原来链表不为空*/{if(p1->next==NULL)/*找到原来链表的末尾*/{p1->next=p0;p0->next=NULL;/*将它与新开单元相连接*/}else{while(p1->next!=NULL)/*还没找到末尾,继续找*/{p2=p1;p1=p1->next;}p1->next=p0;p0->next=NULL;}}n=n+1;p1=head;p0=stu;for(i=1;i<n;i++){for(j=i+1;j<=n;j++){max=p1;p1=p1->next;if(max->number>p1->number){k=max->number;max->number=p1->number;p1->number=k;/*交换前后结点中的学号值,使得学号大者移到后面的结点中*/strcpy(t,max->name);strcpy(max->name,p1->name);strcpy(p1->name,t);/*交换前后结点中的姓名,使之与学号相匹配*/fen=max->yuwen;max->yuwen=p1->yuwen;p1->yuwen=fen;/*交换前后结点中的语文成绩,使之与学号相匹配*/fen=max->yingyu;max->yingyu=p1->yingyu;p1->yingyu=fen;/*交换前后结点中的英语成绩,使之与学号相匹配*/fen=max->shuxue;max->shuxue=p1->shuxue;p1->shuxue=fen;/*交换前后结点中的数学成绩,使之与学号相匹配*/}}max=head;p1=head;/*重新使max,p指向链表头*/}end2:printf("现在的学生数为:%d个!\n",n);return(head);}/*==============================================================================================*//*==============================================================================================*/score*search2311(score*head)/*函数search2311,功能:查询学生成绩*/{int number;score*p1,*p2;printf("输入要查询的学生的学号,");scanf("%d",&number);while(number!=0){if(head==NULL){printf("\n没有任何学生资料!\n");return(head);}printf("-----------------------------------------\n");printf("|学号\t|姓名\t|语文\t|英语\t|数学\t|\n");printf("-----------------------------------------\n");/*打印表格域*/p1=head;while(number!=p1->number&&p1->next!=NULL){p2=p1;p1=p1->next;}if(number==p1->number){printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p1->number,p1->name,p1->yuwen,p1->yingyu,p1->shuxue);printf("-----------------------------------------\n");}/*打印表格域*/elseprintf("%d不存在此学生!\n",number);printf("输入要查询的学生的学号,");scanf("%d",&number);}printf("已经退出了!\n");return(head);}/*==============================================================================================*//*==============================================================================================*/score*del2311(score*head)/*函数del2311,功能:删除学生资料*/{score*p1,*p2;int number;printf("输入要删除的学生的学号(输入0时退出):");scanf("%d",&number);getchar();while(number!=0)/*输入学号为0时退出*/{if(head==NULL){printf("\n没有任何学生资料!\n");return(head);}p1=head;while(number!=p1->number&&p1->next!=NULL)/*p1指向的不是所要找的首结点,并且后面还有结点*/{p2=p1;p1=p1->next;}/*p1后移一个结点*/if(number==p1->number)/*找到了*/{if(p1==head)head=p1->next;/*若p1指向的是首结点,把地二个结点地址赋予head*/elsep2->next=p1->next;/*否则将下一个结点地址赋给前一结点地址*/printf("删除:%d\n",number);n=n-1;}elseprintf("%d不存在此学生!\n",number);/*找不到该结点*/printf("输入要删除的学生的学号:");scanf("%d",&number);getchar();}#ifdef DEBUGprintf("已经退出了!\n");#endifprintf("现在的学生数为:%d个!\n",n);return(head);}/*==============================================================================================*//*==============================================================================================*/void print2311(score*head)/*函数print2311,功能:显示学生成绩*/{score*p;if(head==NULL){printf("\n没有任何学生资料!\n");}else{printf("%d\n",n);printf("-----------------------------------------\n");printf("|学号\t|姓名\t|语文\t|英语\t|数学\t|\n");printf("-----------------------------------------\n");/*打印表格域*/p=head;do{printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\n",p->number,p->name,p->yuwen,p->yingyu,p->shuxue);printf("-----------------------------------------\n");/*打印表格域*/p=p->next;}while(p!=NULL);/*打印完成了*/}}/*==============================================================================================*//*==============================================================================================*/score*statistics2311(score*head)/*函数statistics2311,功能:统计学生成绩*/{float sum1=0,sum2=0,sum3=0,ave1=0,ave2=0,ave3=0,max=0,min;score*p;int x,y=0,i=0;p=head;printf("1个人总分和平均分\t2单科平均分\t3总分最高分\t4总分最低分\n");scanf("%d",&x);getchar();switch(x)/*用switch语句实现功能选择*/{case1:if(head==NULL){printf("\n没有任何学生资料!\n");return(head);}/*链表为空*/else{printf("---------------------------------------------------------\n");printf("|学号\t|姓名\t|语文\t|英语\t|数学\t|总分\t|平均分\t|\n");printf("---------------------------------------------------------\n");/*打印表格域*/while(p!=NULL){sum1=p->yuwen+p->yingyu+p->shuxue;/*计算个人总分*/ave1=sum1/3;/*计算个人平均分*/printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|\n",p->number,p->name,p->yuwen,p->yingyu,p->shuxue,sum1,ave1);/*打印结果*/printf("---------------------------------------------------------\n");/*打印表格域*/p=p->next;}}return(head);break;case2:if(head==NULL){printf("\n没有任何学生资料!\n");return(head);}/*链表为空*/while(p!=NULL){sum1=sum1+p->yuwen;sum2=sum2+p->yingyu;sum3=sum3+p->shuxue;/*计算总分*/y=y+1;ave1=sum1/y;ave2=sum2/y;ave3=sum3/y;/*计算平均分*/p=p->next;/*使p指向下一个结点*/}printf("语文平均分是%.1f\n",ave1);printf("英语平均分是%.1f\n",ave2);printf("数学平均分是%.1f\n",ave3);/*打印结果*/return(head);break;case3:if(head==NULL){printf("\n没有任何学生资料!\n");return(head);}/*链表为空*/max=p->yuwen+p->yingyu+p->shuxue;while(i<n){i=i+1;sum1=p->yuwen+p->yingyu+p->shuxue;/*计算个人总分*/if(max<sum1)max=sum1;p=p->next;}printf("总分最高分:%.1f",max);printf("\n");return(head);break;case4:if(head==NULL){printf("\n没有任何学生资料!\n");return(head);}/*链表为空*/while(p!=NULL){min=p->yuwen+p->yingyu+p->shuxue;while(p!=NULL){sum2=p->yuwen+p->yingyu+p->shuxue;if(min>sum2)min=sum2;p=p->next;}}printf("总分最低分:%.1f",min);printf("\n");return(head);break;default:printf("输入错误,请重试!\n");}return(head);}/*==============================================================================================*//*==============================================================================================*/save2311(score*p1)/*函数save2311,功能:保存学生的资料*/{FILE*fp;char filepn[20];/*用来存放文件保存路径以及文件名*/printf("请输入文件路径及文件名:");scanf("%s",filepn);if((fp=fopen(filepn,"w+"))==NULL){printf("不能打开文件!\n");return0;}fprintf(fp,"考试成绩管理系统\n");fprintf(fp,"作者:周纯钢班级:信息023学号:11\n");fprintf(fp,"-----------------------------------------\n");fprintf(fp,"|学号\t|姓名\t|语文\t|英语\t|数学\t|\n");fprintf(fp,"-----------------------------------------\n");/*打印表格域*/while(p1!=NULL){fprintf(fp,"%d\t%s\t%.1f\t%.1f\t%.1f\t\n",p1->number,p1->name,p1->yuwen,p1->yingyu,p1->shuxue);p1=p1->next;/*下移一个结点*/}fclose(fp);printf("文件已经保存!\n");return0;}/*==============================================================================================*//*==============================================================================================*/score*taxis2311(score*head)/*定义排序函数。
C语言课程设计 学生成绩管理系统 源代码

//学生成绩管理系统//用户名:xdxy 密码:700619#include<stdio.h>#include<conio.h> /*清屏*/#include <stdlib.h> /*显示目录*/#include<string.h>#define MAX 1000void menu();void input(); /*输入数据函数*/ void sort(); /*排序数据函数*/ void display(); /*显示数据函数*/ void display1(); /*显示各科成绩函数*/ void insert(); /*插入数据函数*/ void del(); /*删除数据函数*/ void average(); /*平均值函数*/void find(); /*查找数据函数*/ void save(); /*保存数据函数*/ void read(); /*读出数据函数*/ void del_file(); /*删除文件函数*/void modify(); /*修改文件函数*/int now_no=0;struct student //定义学生信息{int no; // 学号char name[20]; //姓名char sex[4]; //性别float score1; //成绩1float score2; //成绩2float score3; //成绩3float sort; //排序成绩float ave; //平均分float sum; //总分};void main(){int h,flag1,flag2;char name[20]="xdxy",password[10]="700619";char person[20],password1[10];printf ("\t\t ******** 欢迎进入学生成绩管理系统!********\n\n");printf ("\t\t\t 用户登录\n\n");for(h=0;h!=5;){printf("\t\t\t\t 用户名:");gets(person);flag1=strcmp(person,name);printf("\t\t\t\t 密码:");gets(password1);flag2=strcmp(password,password1);if(flag1==0 && flag2==0){printf("\t\t\t\t 登陆成功!\n\n");menu();break;}else{printf ("\t\t\t 用户名或密码错误!\n\n");printf ("\t\t\t 请注意:您还剩%d次机会!\n\n",4-h);h++;}}if (h=5)printf ("对不起,您输入的用户名或密码有误,已被强制退出。
学生成绩管理系统(数据结构C语言版源代码)

让结局不留遗憾,让过程更加完美。
#include<stdio.h>#include<string.h>#include<stdlib.h>struct students{char Num[10]; /*字符型学生学号*/char Name[20]; /*字符型学生姓名*/char Sex[3]; /*字符型学生性别*/double English; /*双精度实型英语成绩*/double Java; /*双精度实型Java成绩*/double Sjjg; /*双精度实数据结构*/double Szdl; /*双精度实型数字电路*/double Jsj; /*计算机组成原理*/struct students *next; /*用与构建连表指向下一结点*/};FILE *fp; /*定义全局变量fp*/void Revisemenu();/*修改菜单*/void Sortmenu();/*排序菜单*/void menu();/*主菜单*/void secret();/*安全验证*/struct students * Input();/*新建学生信息*/void fprint(struct students *head);/*将信息导入文件可追加*/void fprint_(struct students *head);/*将信息导入文件并覆盖*/void Browse(struct students *head);/*浏览全部学生信息*/struct students * create(struct students *headint *n);/*从tushu_list中读取数据构建链表*/void FindofNum(struct students *head);/*按学号查询学生信息*/void FindofNname(struct students *head);/*按姓名查询学生信息*/void SortEnglish(struct students * head);/*按英语成绩排序*/void SortJava(struct students * head);/*按Java成绩排序*/void SortSjjg(struct students * head);/*按数据结构成绩排序*/void SortSzdl(struct students * head);/*按数字逻辑电路成绩排序*/ void SortJsj(struct students * head);/*按计算机组成原理成绩排序*/ struct students * Delete(struct students * headchar m[15]);/*按学号删除学生成绩信息*/struct students * Revise();/*修改学生信息(按编号修改)*//*主菜单*/void menu(){printf("\n\n");printf("***************************************************\n");printf(" 学生成绩管理系统 \n");printf("---------------------------------------------------\n");printf(" 1-添加新同学 2-浏览学生信息 \n");printf(" 3-按学号查询 4-按姓名查询 \n");printf(" 5-按成绩排序 6-修改学生信息 \n");printf(" 7-删除学生信息 0-退出系统 \n");printf("---------------------------------------------------\n");printf("___________________________________________________\n"); }/*排序菜单*/void Sortmenu(){printf("\n\n");printf("***************************************************\n");printf(" 按成绩排序 \n");printf(" 1-大学英语 2-JAVA编程 \n");printf(" 3-数据结构 4-数字逻辑电路 \n");printf(" 5-计算机组成原理 0-返回上级菜单 \n");printf("***************************************************\n"); }/*修改菜单*/void Revisemenu(){printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf(" 1--修改学生姓名 2--修改学生学号 \n"); printf(" 3--修改学生性别 4--修改英语成绩 \n"); printf(" 5--修改JAVA成绩 6--修改数据结构 \n"); printf(" 7--修改数字电路 8--修改计算计 \n");printf(" 0--返回上级菜单 \n"); printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); }/*安全验证*/void secret(){char a[20];printf("**欢迎来到学生信息管理系统进入系统前请先进行密码验证---");printf(" ");do{gets(a); /*输入密码*/system("cls"); /*调用库函数清屏*/printf("对不起!您输入的密码有误请重新输入---");}while(strcmp(a"0605")!=0); /*单一密码"0605"*/system("cls");}/*新建学生信息*/struct students * Input(){struct students *p1*p2*head; /*建立辅助结点及头结点*/char Name;int n=0x;printf("\n请按对应项输入学生信息以#结束:\n");printf("姓名学号性别英语 Java 数据结构数字电路计算机组成原理\n");p1=(struct students *)malloc(sizeof(struct students));head=p2=p1;do{ /*使用do while语句输入学生信息*/scanf("%s"&p1->Name);if(strcmp(p1->Name"#")==0)break; /*判断结束符*/elsescanf("%s%s%lf%lf%lf%lf%lf"p1->Nump1->Sex&p1->English&p1->Java&p1->Sjjg&p1->Szdl&p1->Jsj);Name='#';p1=(struct students *)malloc(sizeof(struct students));p2->next=p1;p2=p1;n++;}while(1);p1->next=NULL;printf("学生信息输入结束!\n");getchar();printf("是否保存学生信息?(1.是/2.否):");scanf("%d"&x);if(x==1)fprint(head); /*调用函数保存至文件*/ elseprintf("\n文件没有被保存!\n");return head; /*返回头指针*/}/*将信息导入文件可追加*/void fprint(struct students *head){struct students *p1;if((fp=fopen("students_list.txt""a"))==NULL){printf("File open error!\n");exit(0);}for(p1=head;p1->next!=NULL;p1=p1->next) /*遍历*/fprintf(fp"%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p1->Namep1->Nump1->Sexp1->Englishp1->Javap1->Sjjgp1->Szdlp1->Jsj);/*将学生信息写入文件*/fclose(fp); /*关闭文件*/printf("\n学生信息已成功保存到文件 students_list.txt 中!\n");getchar();}/*将信息导入文件并覆盖*/void fprint_(struct students *head){struct students *p1;if((fp=fopen("students_list.txt""w"))==NULL)printf("File open error!\n");exit(0);}for(p1=head;p1!=NULL;p1=p1->next) /*遍历*/fprintf(fp"%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p1->Namep1->Nump1->Sexp1->Englishp1->Javap1->Sjjgp1->Szdlp1->Jsj);/*将学生信息写入文件*/fclose(fp); /*关闭文件*/;getchar();}/*浏览全部学生信息*/void Browse(struct students *head){char Num[10]; /*字符型学生学号*/char Name[20]; /*字符型学生姓名*/char Sex[3]; /*字符型学生性别*/double English; /*双精度实型英语成绩*/double Java; /*双精度实型Java成绩*/double Sjjg; /*双精度实数据结构*/double Szdl; /*双精度实型数字电路*/double Jsj; /*计算机组成原理*/if((fp=fopen("students_list.txt""a+"))==NULL){printf("File open error!\n");exit(0);}printf("-------------------------------------------------------------\n");printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(!feof(fp))/*读取并输出*/{fscanf(fp"%s%s%s%lf%lf%lf%lf%lf"NameNum&English&Java&Sjjg&Szdl&Jsj);printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"NameNumSexEnglishJavaSjjgSzdlJsj);};if(fclose(fp)){printf("Can not close the file!\n");exit(0);}}/*从tushu_list中读取数据构建链表*/struct students * create(struct students * headint *n){FILE *fp;struct students*p*p1*p2;if((fp=fopen("students_list.txt""a+"))==NULL){printf("File open error!\n");exit(0);}while(!feof(fp)){(*n)++;p=(struct students *)malloc(sizeof(struct students));fscanf(fp"%s%s%s%lf%lf%lf%lf%lf"p->Namep->Nump->Sex&p->English&p->Java&p->Sjjg&p->Szdl&p->Jsj);if(head==NULL){head=p;p1=p;}else{p1->next=p;p2=p1;p1=p;}}p2->next=NULL;free(p);(*n)--;fclose(fp);return head;}/*按姓名查询学生信息*/void FindofName(struct students *head) {int i=0n=0;char b[20];struct students *p;head=create(head&n);p=head;printf("\n请输入要查询的学生姓名:");scanf("%s"b);while(p!=NULL){if(strcmp(p->Nameb)==0){printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);i++;}p=p->next;}if(i==0)printf("\n对不起!没有找到名为"%s"的学生信息!\n"b);}/*按学号查询学生信息*/void FindofNum(struct students *head){int i=0n;char b[20];struct students *p;head=create(head&n);p=head;printf("\n请输入要查询的学生学号:");scanf("%s"b);while(p!=NULL){if(strcmp(p->Numb)==0){printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);i++;}p=p->next;}if(i==0)printf("\n对不起!没有找到学号为"%s"学生信息!\n"b);}/*按英语成绩排序*/void SortEnglish(struct students * head){struct students *p*tail; /*定义中间变量*/int n;double English;p=(struct students *)malloc(sizeof(struct students));head=create(head&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;English=p->English; /*将链表中第一个成绩赋给English*/while(p!=NULL){if((p->English)>English)/*比较*/English=p->English;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->English==English){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->English==English){ /*分数相同时无需比较*/ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/printf("按英语成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按JAVA成绩排序*/void SortJava(struct students * head){struct students *p*tail; /*定义中间变量*/int n;double Java;p=(struct students *)malloc(sizeof(struct students));head=create(head&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Java=p->Java; /*将链表中第一个成绩赋给Java*/while(p!=NULL){if((p->Java)>Java)/*比较*/Java=p->Java;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Java==Java){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Java==Java){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/printf("按Java成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按数据结构排序*/void SortSjjg(struct students * head){struct students *p*tail; /*定义中间变量*/int n;double Sjjg;p=(struct students *)malloc(sizeof(struct students));head=create(head&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Sjjg=p->Sjjg; /*将链表中第一个成绩赋给Sjjg*/while(p!=NULL){if((p->Sjjg)>Sjjg)/*比较*/Sjjg=p->Sjjg;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Sjjg==Sjjg){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Sjjg==Sjjg){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/printf("按数据结构成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按数字电路排序*/void SortSzdl(struct students * head){struct students *p*tail; /*定义中间变量*/int n;double Szdl;p=(struct students *)malloc(sizeof(struct students));head=create(head&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Szdl=p->Szdl; /*将链表中第一个成绩赋给Szdl*/while(p!=NULL){if((p->Szdl)>Szdl)/*比较*/Szdl=p->Szdl;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Szdl==Szdl){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Szdl==Szdl){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/printf("按数字电路成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按计算机组成原理排序*/void SortJsj(struct students * head){struct students *p*tail; /*定义中间变量*/int n;double Jsj;p=(struct students *)malloc(sizeof(struct students));head=create(head&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Jsj=p->Jsj; /*将链表中第一个成绩赋给Jsj*/while(p!=NULL){if((p->Jsj)>Jsj)/*比较*/Jsj=p->Jsj;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Jsj==Jsj){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Jsj==Jsj){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/printf("按计算机组成原理成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按学号删除学生成绩信息*/struct students * Delete(struct students * headchar m[15]){struct students *ptr1*ptr2;int n;printf("\n所有学生信息如下:\n");Browse(head);printf("\n请输入想要删除的学生学号:");scanf("%s"m);head=create(head&n);if(head==NULL){printf("无学生信息!\n");return head;}if((strcmp(head->Numm)==0)&&head!=NULL){ptr2=head;head=head->next;free(ptr2);}if(strcmp(head->Numm)!=0){ptr1=head;ptr2=head->next;while(ptr2!=NULL){if(strcmp(ptr2->Numm)==0){ptr1->next=ptr2->next;free(ptr2);}elseptr1=ptr2;ptr2=ptr1->next;}}fprint_(head);printf("\n学号为' %s '学生信息已被删除并保存至文件!\n"m);return head;}/*修改学生信息(按编号修改)*/struct students * Revise(){int n=0t;char num[10];char Num[10]; /*字符型学生学号*/char Name[20]; /*字符型学生姓名*/char Sex[3]; /*字符型学生性别*/double English; /*双精度实型英语成绩*/double Java; /*双精度实型Java成绩*/double Sjjg; /*双精度实数据结构*/double Szdl; /*双精度实型数字电路*/double Jsj; /*计算机组成原理*/struct students *head=NULL;struct students *p;printf("\n所有学生信息如下:\n");Browse(head);head=create(head&n);printf("\n输入需要修改的学生的学号:");scanf("%s"num);p=head;while(head!=NULL){if(strcmp(p->Numnum)==0){system("cls");Revisemenu();printf("编号为%s的学生信息如下:\n"num);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);while(1){printf("请选择需要修改的信息:");scanf("%d"&t);switch(t){case 1:printf("请输入新姓名:");scanf("%s"Name);strcpy(p->NameName);break;case 2:printf("请输入新学号:");scanf("%s"&Num);strcpy(p->NumNum);break;case 3:printf("请输入新性别:");scanf("%s"Sex);strcpy(p->SexSex);break;case 4:printf("请输入新英语成绩:");scanf("%lf"&English);p->English=English;break;case 5:printf("请输入新Java成绩:");scanf("%lf"&Java);p->Java=Java;break;case 6:printf("请输入新数据结构成绩:");scanf("%lf"&Sjjg);p->Sjjg=Sjjg;break;case 7:printf("请输入新数字电路成绩:");scanf("%lf"&Szdl);p->Szdl=Szdl;break;case 8:printf("请输入新计算机组成原理成绩:");scanf("%lf"&Jsj);p->Jsj=Jsj;break;case 0:system("cls");menu();goto lab;break;default:printf("对不起输入有误!");break;}}}elsep=p->next;}lab:fprint_(head);printf("修改完成并储存至文件!\n");return head;}/*主函数*/void main(){int choicech;char m[15];struct students *head=NULL;secret();menu();while(1){printf("请输入选项:");scanf("%d"&choice);switch(choice){case 1:Input();break;case 2:system("cls");menu();Browse(head);break;case 3:system("cls");menu();FindofNum(head);break;case 4:system("cls");menu();FindofName(head);break;case 5:system("cls");Sortmenu();do{printf("请输入您的选择:");scanf("%d"&ch);switch(ch){case 1:system("cls");Sortmenu();SortEnglish(head);break;case 2:system("cls");Sortmenu();SortJava(head);break;case 3:system("cls");Sortmenu();SortSjjg(head);break;case 4:system("cls");Sortmenu();SortSzdl(head);break;case 5:system("cls");Sortmenu();SortJsj(head);break;}}while(ch!=0);system("cls");menu();break;case 6:system("cls");menu();Revise();break;case 7:system("cls");menu();head=Delete(headm);break;case 0:system("cls");printf("\t\t欢迎下次再来!");exit(0);default:printf("对不起输入有误!");break;}}return ;}。
c语言学生成绩管理系统(含源代码)

{int i,j,k;
STU t;
total();
avergescore();
system("cls”);
for(i=0;i<n—1;i++)
{for(k=i,j=i+1;j<n;j++)
if(stu[j].aver>stu[k].aver)
k=j;
if(k!=j)
char name[20];
float score[M];
float aver;
float total;
}STU;
STU stu[N];
int n;
void inputscore(void);
void savescore(void);
void avergescore(void);
void total(void);
printf(”平均分低于60的学生名单\n");
for(i=0;i〈n;i++)
{
if(stu[i].aver〈60)
printf(”%s\n”,stu[i]。name);
}/*统计不及格学生名单*/
}
/***************修改学生成绩*****************/
void modify(void)
printf("菜单\n");
printf("输入成绩-———-----—-————-—-——-—-——-—--—-—————-1\n");
printf(”查看成绩及成绩排序—---—--——-—-———---—--—--———2\n”);
C语言课程设计 200行代码 -学生成绩查询系统.doc

功能:查询修改统计成绩。
#include <stdio.h>struct student /*成绩表的结构声明*/{int num;char name[15];char sex;float WuLi;float ShuXue;float YingYu;float KuaiJi;float totle;};/*定义6个学生的信息:*/#define STU_NUMBER 6 /*宏定义学生数为6*/struct student Stu[STU_NUMBER]={{101,"yuchen", 'F', 98,85,96,89,0},{102,"xiaotong", 'F', 99,91,90,93,0},{103,"likanglong",'M', 76,83,74,82,0},{104,"yinger", 'F', 88,76,89,77,0},{105,"fengjiao", 'F', 97,100,94,96,0},{106,"sunyao", 'M', 87,89,66,84,0} };int SelectMainMenu(); /*显示并选择主菜单。
返回:被选择的菜单项*//*所有的函数声明:*/void Show(); /*成绩查询模块*/void Modify(); /*成绩修改模块*/void Stat(); /*成绩统计模块*/void StatAve(float *AveWuLi,float *AveShuXue,float *AveYingYu,float *AveKuaiJi);/*统计平均分*/int FindStudent(int num); /*根据学号查找某一学生*/void SetAllTotle(); /*计算所有学生总分*/void SetTotle(int No); /*计算第No个学生总分*/void ShowAllStudent(); /*显示所有成绩*/void ShowTitle(); /*显示表头信息*/void ShowStudent(int No); /*显示第No个的学生信息*/void main(){int isend=0,password=0; /*程序结束标志量,0表示不结束,1表示结束*/SetAllTotle(); /*计算所有学生总分*/while(password!=666){printf("qing shu ru mi ma:\n");scanf("%d",&password);}{switch(SelectMainMenu()) /*显示并选择主菜单*/{case 1: /*成绩查询*/Show(); /*调用成绩查询函数*/break;case 2: /*成绩修改*/Modify(); /*调用成绩修改函数*/break;case 3: /*成绩统计*/Stat(); /*调用成绩统计函数*/break;case 4: /*退出系统*/printf("\nxie xie nin de shi yong,zai jian!\n\n");isend = 1; /*设置程序结束标志*/break;}if(isend) break; /*程序结束*/}}int SelectMainMenu() /*显示并选择主菜单。
C语言课程设计-学生成绩管理系统-完整版

#include<stdio.h> #include<stdlib.h>#include<io.h> #include<string.h> /* strcmp 函数原型包含 */#define N 100 /* 定义最大学生人数为 100*/ struct student /* 学生结构体定义 */ char no[11]; /* 学号 ,10 位 */ char name[10];/* 姓名, 3 个汉字 */ char grade[10];/* 班级 */ char pro[20];/* 专业 */float score[5];/* 储存 5 门功课的成绩 */ float ave;/* 储存平均分 */ int year;/* 入学年 *//* 通过 i 的值,判断信息要查找的信息是否存在 *//* 输出学生成绩函数(公共函数) */ /* 系统初始化函数 */ /* 建立新的数据文件 *//* 从数据文件中读取数据 */ /* 维护界面函数 */ /* 新增一个学生成绩函数 */ /* 修改学生成绩 */ /* 修改成绩 *//* 删除学生信息函数 */ /* 统计界面函数 */ /* 计算每个学生平均分 */ /* 计算每门课程的平均分 */ /* 排序函数 */ /* 按学号排序 */ /* 按平均分排序 */ /* 按单科成绩排序 *//* 交换结构体数组中的两个记录 *//* 选择输出单科成绩 */ /* 查找界面函数 */ /* 按学号查找 */ int findname(char cname[]);/* 按姓名查找 */ void findyear(int cyear); /* 按入学年查找 */ void save(); /* 保存文件 */ void stop(); /* 停顿函数 */void stop()/* 停顿函数 (公共函数) */{printf("Press Any Key To Continue...\n"); getchar();}}stu[N]; int num; void panduani(int); void output(); voidinit(); void newfile(); void read1(); void weihu(); void new1(); void xiugai(); void xgcj(int); void delete1(); void tongji(); void tongji1(); void tongji2(); void paixu1(); void paino(); void paiave(); void paidkcj(); voidchange(int,int); void outputx(int); void find1(); int find(char sno[]);void output() /* 输出学生成绩函数(公共函数) */{int i,j;printf("===================================================================\n");printf(" 学号姓名班级专业入学年 C 语言高数大物电路模电\n");printf("===================================================================\n");for(i=0;i<num;i++){printf("%s %s %s %s %d",stu[i].no,stu[i].name,stu[i].grade,stu[i].pro,stu[i].year) Jfor(j=0;j<5;j++)printf(" %.1f",stu[i].score[j]);printf("\n");}stop();}void init() /* 系统初始化函数*/{if(access("stu.dat",0)) /* 判断文件是否存在*/newfile(); /* 若不存在,新建数据文件*/elseread1(); /* 若存在,读取数据*/}void newfile() /* 建立新的数据文件*/{int i;FILE *fp;if((fp=fopen("stu.dat","wb"))==NULL) /* 创建二进制文件*/{printf(" 创建文件失败,请重新运行程序.\n"); /* 显示" 创建文件失败,请重新运行程序"*/exit(0); /* 终止程序*/}printf(" 初次运行,进行数据初始化...\n");/* 显示" 初次运行,进行数据初始化..."*/ stop();printf(" 请输入学生人数:");/* 显示"请输入学生人数:"*/ scanf("%d",&num);for(i=0;i<num;i++){printf(" 请输入第%d 个学生的学号:",i+1); /* 显示"请输入第i+1 个学生的学号:"*/ getchar(); /* 吃回车*/gets(stu[i].no);printf(" 姓名:"); /* 显示"姓名:"*/gets(stu[i].name);printf(" 班级:"); /* 显示"班级:"*/gets(stu[i].grade);printf(" 专业:"); /* 显示"专业:"*/gets(stu[i].pro);printf(" 入学年n:");/* 显示" 入学年"*/scanf("%d",&stu[i].year);printf("C 语言成绩:");/* 显示"C 语言成绩"*/ scanf("%f",&stu[i].score[0]);printf(" 高数成绩:");/* 显示"高数成绩"*/ scanf("%f",&stu[i].score[1]);printf(" 大物成绩:");/* 显示" 大物成绩"*/ scanf("%f",&stu[i].score[2]);printf(" 电路成绩:");/* 显示" 电路成绩"*/ scanf("%f",&stu[i].score[3]);printf(" 模电成绩:");/* 显示" 模电成绩"*/scanf("%f",&stu[i].score[4]);fwrite(&stu[i],1,sizeof(struct student),fp); /* 把第i+1 名学生成绩写入文件*/ }fclose(fp);printf("========================\n");printf(" 刚才输入的%d 个数据为:\n",num); /*显示"刚才输入的num 个数据为:"*/ printf("========================\n\n");output();}void read1() /* 从数据文件中读取数据*/{FILE *fp;num=0; /*num 为数据文件中实际存储的学生人数*/fp=fopen("stu.dat","r");if(fp==NULL) /* 数据文件不存在*/{printf(" 文件打开失败!重新运行程序\n"); /* 显示"文件打开失败!重新运行程序"*/ exit(0);}while(!feof(fp)) /* 文件结束检测"*/{fread(&stu[num],1,sizeof(struct student),fp); num++;}num--; fclose(fp); printf("\t\t\t=======================================\n"); printf(" \t\t\t现有 %d 个学生的成绩: \n",num); /* 显示 "现有 NUM 个学生的成绩: "*/printf("\t\t\t=======================================\n\n"); output();}void weihu() /* 维护界面函数 */{char c1; while(1){getchar(); if(c1=='9') break; switch(c1) { case '1': new1(); break; case '2': delete1(); case '3': xiugai(); break; default:printf(" 选择有误,请重选! \n");/*" 选择有误,请重选! "*/} } }void new1() /* 新增一个学生成绩函数 */{printf(" 请输入学号 :"); /* 显示 "请输入学号 :"*/ gets(stu[num].no);printf("\t\t\t* 维护*\n");printf("\t\t\t* 1. 新增 *\n"); /*新增 */printf("\t\t\t* 2. 删除 *\n"); /* 删除(按学号)*/printf("\t\t\t* 3. 修改 *\n"); /* 修改 */ printf("\t\t\t*9. 返回*\n"); /* 返回 */printf("\t\t\t************************\n");printf("\t\t\t 请选\n");/* 请选*/printf("\n\n\n\t\t\t* ********************* **\n"); c1=getchar();printf(" 姓名:"); /* 显示"姓名:"*/ gets(stu[num].name);printf(" 班级:"); /* 显示" 班级:"*/ gets(stu[num].grade);printf(" 专业:"); /* 显示"专业:"*/ gets(stu[num].pro);printf(" 入学年:");/* 显示"入学年"*/ scanf("%d",&stu[num].year);printf("C 语言成绩:");/* 显示"C 语言成绩"*/ scanf("%f",&stu[num].score[0]); printf(" 高数成绩:");/* 显示"高数成绩"*/ scanf("%f",&stu[num].score[1]);printf(" 大物成绩:");/* 显示" 大物成绩"*/ scanf("%f",&stu[num].score[2]);printf(" 电路成绩:");/* 显示" 电路成绩"*/ scanf("%f",&stu[num].score[3]);printf(" 模电成绩:");/* 显示" 模电成绩"*/ scanf("%f",&stu[num].score[4]);num++; printf("\n======================================\n");"*/ printf(" 现有%d 个学生的成绩:\n",num); /* 显示"现有NUM 个学生的成绩:printf("======================================\n\n");output();}void xiugai() /* 修改学生成绩*/{char xg[11];int i;printf("\n 请输入要修改学生的学号 :\n\n"); gets(xg);for(i=0;i<num;i++)if(strcmp(stu[i].no,xg)==0)break; if(i==num){printf("\n 数据文件无该生信息 !\n\n 请重新输入学号 .\n\n"); stop(); return;}xgcj(i);} void xgcj(int x)/* 修改成绩 */{ char xueke[5][10]={"C 语言","高数 ","物理","电路","模电"}; char (*p)[10],c; int j,k; p=xueke; for(;;){**\n\n"); printf("\t\t\t 成绩 printf("\t\t\t 1.C 语言 printf("\t\t\t 2.高数printf("\t\t\t 3.物理 printf("\t\t\t 4.电路 printf("\t\t\t5.模电 printf("\t\t\t9.返回printf("\n");printf("\t\t\t** ******************************** printf("\t\t\t** ******************************** \n");\n"); /*C 语言 */ \n"); /*高数 */\n"); /* 大学物理 */ \n"); /*电路 */ \n"); /*模电 */ \n\n"); /* 返回上级 */**\n\n"); printf("\t 请选择要修改的成绩 (按 1.2.3.4.5.9):\n"); c=getchar(); getchar();if(c=='9')break; else if (c>='1'&&c<='5'){k=c-49;printf("\n 请输入 %s 成绩 :\n",p+k); scanf("%f",&stu[x].score[k]); printf("\n 修 息为 :\n");printf(" 学号 姓名 班级 专业 入学年 C 语言 高数 大物电路模电printf("===================================================================\n");printf("%s %s %s %s %d",stu[x].no,stu[x].name,stu[x].grade,stu[x].pro,stu[x].ye ar);for(j=0;j<5;j++)printf(" %.1f",stu[x].score[j]);printf("\n");}else printf("\n 选择有误,请重选!\n\n");stop();}}int find(char sno[]) /* 按学号查找*/{int i;for(i=0;i<num;i++)if(strcmp(stu[i].no,sno)==0) /* 判断两个字符串相等*/return i;/* 查找成功*/return -1;/* 查找失败*/}void delete1() /* 删除学生信息函数*/{char cno[11];int i,j;printf(" 请输入要删除的学生学号:"); /*" 请输入要删除的学生学号"*/gets(cno);i=find(cno);if(i!=-1){for(j=i;j<num;j++)stu[j]=stu[j+1];num--;printf(" 现有%d 个学生的成绩:\n",num); /* 显示" 现有NUM 个学生的成绩:"*/ output();}else {printf(" 请输入正确的学号. \n");stop();}}void tongji(){int i;char c2; while(1) {printf("\t\t\t 请选择 :\n");/* 请选择: */ c2=getchar(); getchar(); if(c2=='9') break; switch(c2){case '1': tongji1();printf("\n\n 学生平均分为 :\n");printf("===========================================\n"); printf(" 学号 姓名 入学年 平均分 \n");printf("===========================================\n"); for(i=0;i<num;i++)printf("%s %s %d %.2f\n",stu[i].no,stu[i].name,stu[i].year,stu[i].ave); stop(); break; case '2': tongji2(); break; default:printf(" 选择有误,请重选 \n");/*" 选择有误,请重选! "*/ }} }void tongji1() /* 计算每个学生平均分 */ { int i,j;for(i=0;i<num;i++){stu[i].ave=0; for(j=0;j<5;j++)stu[i].ave+=stu[i].score[j]; stu[i].ave=stu[i].ave/5;}}void tongji2()/* 计算每门课程的平均分 */{int i,j; float sum;printf("\t\t\t* 统计 *\n");printf("\t\t\t*1. 学生平均分 *\n"); /* 计算学生平均分 */ printf("\t\t\t*2. 课程平均分 *\n"); /* 计算每门课程平均分 */ printf("\t\t\t*9. 返回*\n"); /* 返回 */printf("\n\n\n\t\t\t ***************************** **\n"); printf("\t\t\t* **************************** **\n"); /* 统计界面函数 */float avec[5]; /* 储存每门课的平均分*/ for(j=0;j<5;j++){sum=0;for(i=0;i<num;i++)sum+=stu[i].score[j];avec[j]=sum/num;}printf("\n\n 各科平均分:\n");/*" 各科平均分:"*/printf("===================================\n"); printf("C 语言高数大物电路模电\n"); printf("===================================\n"); for(i=0;i<5;i++)printf("%-7.1f",avec[i]);printf("\n");stop();}void paixu1() /* 排序界面*/{char c3;for(;;){printf("\n\n\n");printf("\t\t\t***********************************\n");printf("\t\t\t* 排序* \n");printf("\t\t\t* 1. 按学号排序* \n"); /* 按学号排序*/printf("\t\t\t* 2. 按平均分排序* \n"); /* 按平均分排序*/printf("\t\t\t* 3. 按单科成绩排序* \n"); /* 按单科成绩排序*/printf("\t\t\t* 9. 返回* \n"); /* 返回*/printf("\t\t\t***********************************\n\n");printf("\t 请选(按 1.2.3.9):\n");/* 请选择:*/c3=getchar();getchar();if(c3=='9') break;switch(c3){case '1':paino();break;case '2':paiave();break;case '3':paidkcj();break; default:printf("\n 选择有误,请重选!\n\n");/* 选择有误,请重选!*/ stop();}}}void paino() /* 按学号排序*/{ /* 按学号从低到高冒泡法排序*/int i,j;for(i=0;i<num;i++)for(j=0;j<num-1-i;j++)if(strcmp(stu[j].no,stu[j+1].no)>0) change(j,j+1);printf("\n 排序后为:\n"); /*" 排序后为:"*/output();}void paiave() /* 按平均分排序*/{ /* 按平均分从高到低冒泡法排序*/int i,j;tongji1(); /* 计算平均成绩*/ for(i=0;i<num;i++) for(j=0;j<num-i-1;j++)if(stu[j].ave<stu[j+1].ave) change(j,j+1);printf("\n\t 排序后为:\n"); /*" 排序后为:"*/printf("\t===============================================\n"); printf("\t 学号姓名入学年平均分排名\n");printf("\t===============================================\n"); for(i=0;i<num;i++) printf("\t%s %s %d %.2f %4d\n",stu[i].no,stu[i].name,stu[i].year,stu[i].ave,i+1); stop();void paidkcj() /* 按单科成绩排序*/ {char c;int i,j,k;while(1){printf("\n");printf("\t\t\t************************************\n\n");printf("\t\t\t 单科成绩\n");printf("\t\t\t 1.C 语言\n"); /*C 语言*/printf("\t\t\t 2.高数\n"); /*高数*/printf("\t\t\t 3.物理\n"); /* 大学物理*/printf("\t\t\t 4.电路\n"); /*电路*/printf("\t\t\t 5.模电\n"); /*模电*/printf("\t\t\t 9.返回\n\n"); /* 返回上级*/printf("\t\t\t************************************\n\n");( 按 1.2.3.4.5.9):\n");printf("\t 请选择:c=getchar();getchar();else if (c>='1'&&c<='5'){k=c-49;for(i=0;i<num;i++) for(j=0;j<num-1-i;j++) if(stu[j].score[k]<stu[j+1].score[k])change(j,j+1);outputx(k);}else printf("\n 选择有误,请重选!\n\n"); stop();}}void change(int i,int j)/* 交换结构体数组中的两个记录*/{struct student temp; temp=stu[i]; stu[i]=stu[j]; stu[j]=temp;}void outputx(int k) /* 选择输出单科成绩*/char xueke[5][10]={"C 语言","高数 ","物理","电路","模电"}; char (*p)[10]; /* 定义一个指向包含 10 个字符型元素的一维数组的指针变量 */int i;p=xueke;printf("\n\t 排序后为 :\n");printf("\t===============================================\n"); printf("\t 学号 姓名入学年 %s 排名 \n",p+k);printf("\t===============================================\n"); for(i=0;i<num;i++)printf("\t%-11s% -10s%-11d%-6.1f%5d\n",stu[i].no, stu[i].name,stu[i].year,stu[i].score[k],i+1);}void find1() /* 查找界面函数 */{char c4;char cno[11],cname[10]; int i,cyear; while(1){printf("\t\t\t* ************************************\n"); printf("\t\t\t* printf("\t\t\t* printf("\t\t\t* printf("\t\t\t* printf("\t\t\t* printf("\t\t\t* printf("\t\t\t请选择 :\n");/* 请选择:*/ c4=getchar();getchar(); if(c4==57) break; switch(c4){case '1':printf(" 输入学号 :\n");/*" 输入学号: "*/ gets(cno); i=find(cno); panduani(i); break; case '2':printf(" 输入姓名 :\n");/*" 输入姓名: "*/ gets(cname);i=findname(cname); panduani(i); break; case '3':printf(" 输入入学年 :\n");/*" 输入入学年 "*/ scanf("%d",&cyear);查找1. 按学号查找2. 按姓名查找3. 按入学年查找 9. 返回************************************\n");*\n");*\n"); /* 按学号查找 */ *\n"); /* 按姓名查找 */ *\n"); /* 按入学年查找 */findyear(cyear);stop();break;default:printf(" 选择有误,请重选!\n");/*" 选择有误,请重选!"*/}}} int findname(char cname[]) /* 按姓名查找*/{int i;for(i=0;i<num;i++)if(strcmp(stu[i].name,cname)==0) /* 判断两个字符串相等*/return i; /* 查找成功*/return -1; /* 查找失败*/}void findyear(int cyear){int i,j,flag=0;for(i=0;i<num;i++)if(stu[i].year==cyear){ flag=1;break;}if(flag==0){printf(" 要查找的学生不存在\n");stop(); }else{printf(" 查找到的学生信息为:\n");/*" 查找到的学生信息为:"*/printf(" 学号姓名班级专业入学年 C 语言高数大物电路模电\n");printf("================================================================ ===\n");for(i=0;i<num;i++){if(stu[i].year==cyear) /* 判断两个数值相等*/{printf("%s %s %s %s %d",stu[i].no,stu[i].name,stu[i].grade,stu[i].pro,stu[i].year); for(j=0;j<5;j++) printf(" %.1f",stu[i].score[j]); printf("\n");}}}}void panduani(int i) /* 通过i 的值,判断信息要查找的信息是否存在*/{int j;if(i==-1){printf(" 要查找的学生不存在\n");/* 要查找的学生不存在*/ stop();}else{printf(" 查找到的学生信息为:\n");/*" 查找到的学生信息为:"*/ printf(" 学号姓名班级专业入学年 C 语言高数大物电路模电\n");printf("================================================================ ===\n");printf("%s %s %s %s %d",stu[i].no,stu[i].name,stu[i].grade,stu[i].pro,stu[i].year)Jfor(j=0;j<5;j++)printf(" %.1f",stu[i].score[j]);printf("\n");stop();}}void save() /* 保存文件*/{int i;FILE *fp;if((fp=fopen("stu.dat","wb"))==NULL) /* 创建二进制文件*/{printf(" 创建文件失败,请重新运行程序.\n"); /* 显示" 创建文件失败,请重新运行程序"*/exit(0); /* 终止程序*/}for(i=0;i<num;i++)fwrite(&stu[i],1,sizeof(struct student),fp); /* 将I+1 名学生成绩写入文件*/ fclose(fp);}void main() /* 主控菜单*/{char c;init();while(1){printf("\t\t 请选择 :\n");/* 请选择: */ c=getchar(); getchar(); switch(c){case '1': weihu(); break; case '2': tongji(); break; case '3': paixu1(); break; case '4': find1(); break; case '9': save(); exit(0); break; default:printf(" 选择有误,请重选 !\n");/*" 选择有误,请重选! "*/printf("\n\t\t***制作:王清珍,陈超,路梓裕,卢诚知,****\n"); printf("\n\t\t*************************************************\n");printf("\t\t* 、 t t • I 、/, 主菜单*\n");printf("\t\t* 1. 维护 *\n"); /* 维护 */ printf("\t\t* 2. 统计 *\n"); /* 统计 */ printf("\t\t* 3. 排序 *\n"); /* 排序 */ printf("\t\t*4. 查找*\n"); /* 排序 */ printf("\t\t*9. 存盘退出*\n"); /* 存盘退出printf("\t\t************* 欢迎登陆学生成绩管理系统 ************\n"); printf("\t\t** ********************************************* **\n");。
学生成绩管理系统完整版C程序设计源代码不用链表有添加删除查找修改等功能

/*4. 定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩,编写一程序。
应用简单菜单和子函数调用方式实现下面的功能:(1)从键盘输入10个学生的以上内容,存入文件stud.txt(2)浏览显示成绩表(要求显示格式成绩时,格式较规范)(3)将10个学生按照平均分数从高到低进行排序,结果存入文件stud1.txt (4)输入任意的一个课程名,分数从高到低进行排序,结果存入文件stud2.txt (5)向文件stud1.txt中插入一个记录,成绩排序不变,结果存入文件stud1.txt */#include "stdio.h" /*头文件名*/#include "stdlib.h" /*头文件名,因为程序中用到了exit(结束程序)和函数*/ #include "string.h" /*头文件名,因为程序中用到了字符串函数*/#define N 1000/******************************************************************** *****************************//*****************************************定义结构体模块******************************************/struct student {long num; /*定义学生学号为长整型*/char name[20]; /*定义姓名为字符型,占12个字符*/float math,English,physics,total,average;float TOT_math,TOT_English,TOT_physics,TOT_total,TOT_aver;float aver_math,aver_English,aver_physics,aver_total,aver_average;}student; /*定义结构体名称为student*//******************************************************************** *****************************//****************************************输入初始值模块*******************************************/void input(struct student *p,int size){int i;for(i=0;i<size;i++){printf("请输入学号:");while(1){scanf("%ld",&p[i].num);if(long(p[i].num)!=p[i].num||long(p[i].num)<=0){ /*输入判断*/printf("输入错误,学号必须为整数,请重新输入: ");fflush(stdin);}else{break;}}printf("请输入姓名:");scanf("%s",p[i].name);printf("请输入数学成绩:");while(1){scanf("%f",&p[i].math);if(float(p[i].math)!=p[i].math||float(p[i].math)<=0||p[i].math>100||p[i].math <0){printf("输入错误,数学成绩必须为0~100之间的数,请重新输入: ");fflush(stdin);}else{break;}}printf("请输入英语成绩:");while(1){scanf("%f",&p[i].English);if(float(p[i].English)!=p[i].English||float(p[i].English)<=0||p[i].English>100||p[i ].English<0){printf("输入错误,英语成绩必须为0~100之间的数,请重新输入: ");fflush(stdin); }else{break;}}printf("请输入物理成绩:");while(1){scanf("%f",&p[i].physics);if(float(p[i].physics)!=p[i].physics||float(p[i].physics)<=0||p[i].physics>100||p[ i].physics<0){printf("输入错误,英语成绩必须为0~100之间的数,请重新输入: ");fflush(stdin);}else{break;}}printf("\n");}printf("信息录入成功!\n\n");}/******************************************************************** ****************************************//*************************************保存初始值到"初始二进制值.txt"模块*************************************/void save(struct student *p,int size){ /*保存模块*/ FILE *fp;int i;if((fp=fopen("初始值二进制值.txt","wb+"))==NULL){ /*建立文件*/printf("cannot open the file\n");}for(i=0;i<size;i++){fwrite(&p[i],sizeof(student),1,fp);} /*快写函数,写到磁盘中为二进制数*/ fclose(fp); /*关闭文件*/}/******************************************************************** ****************************************//*************************************保存初始值到"初始二进制值.txt"模块*************************************/void save0(struct student *p,int size){ /*保存模块*/ FILE *fp;int i;if((fp=fopen("初始值二进制值1.txt","ab+"))==NULL){ /*建立文件*/printf("cannot open the file\n");}for(i=0;i<size;i++){fwrite(&p[i],sizeof(student),1,fp);} /*快写函数,写到磁盘中为二进制数*/ fclose(fp); /*关闭文件*/}/******************************************************************** ****************************************//******************************************保存初始值到可浏览文件模块****************************************/void SAVE(struct student *p,int size){FILE *fp;int i,b=0;char name[20];printf("请输入保存初始值的可浏览文件名: ");scanf("%s",name);if((fp=fopen(name,"w+"))==NULL){printf("文件名输入错误!!\n");}fprintf(fp,"\n\t\t----------------------------------------------------------\n");fprintf(fp,"\t\t序号学号姓名数学英语物理\n");fprintf(fp,"\t\t----------------------------------------------------------");fprintf(fp,"\n" );for(i=0;i<size;i++) {b++;fprintf(fp,"\t\t %-6d%-12d%-12s%-8.2f%-8.2f%-8.2f\n",b,p[i].num,p[i].name,p[ i].math,p[i].English,p[i].physics);fprintf(fp,"\t\t----------------------------------------------------------\n");}fclose(fp);printf("\n文件保存成功!\n\n");}/******************************************************************** ****************************************//******************************************读取初始值模块****************************************************/int read(struct student *p,int size){FILE *fp;int i,n=0;if((fp=fopen("初始值二进制值.txt","rb+"))==NULL){printf("文件名输入错误!!\n");}for(i=0;i<size;i++) {if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}}fclose(fp);return n;}/******************************************************************** ****************************************//******************************************读取输出初始值模块************************************************/void read_print(struct student *p,int size){FILE *fp;int i,n=0,b=0;if((fp=fopen("初始值二进制值.txt","rb+"))==NULL){printf("文件名输入错误!!\n");} printf("\n\t\t----------------------------------------------------------\n");printf("\t\t序号学号姓名数学英语物理\n");printf("\t\t----------------------------------------------------------\n");for(i=0;i<size;i++) {if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}}for(i=0;i<n;i++) {b++;printf("\t\t %-6d%-12d%-12s%-8.2f%-8.2f",b,p[i].num,p[i].name,p[i].math,p[i]. English);printf("%-8.2f\n",p[i].physics);printf("\t\t----------------------------------------------------------\n");}printf("\n\n");fclose(fp);}/******************************************************************** ****************************************//*********************************************计算总分和平均分模块*******************************************/void total_average(struct student *p,int size){ /*求每位同学的总分和平均分模块*/int i;for(i=0;i<size;i++){ /*循环,从第一个同学开始计算到最后一个同学*/p[i].total=p[i].math+p[i].English+p[i].physics;/*每个同学的总分等于三科成绩之和*/p[i].average=p[i].total/3; /*每个同学的平均分等于总分的1/3*/}}/******************************************************************** ****************************************//**************************************输出初始值总分和平均分模块*******************************************/void read_print1(struct student *p,int size){void total_average(struct student *p,int size);FILE *fp;int i,n=0,b=0;if((fp=fopen("初始值二进制值.txt","rb+"))==NULL){printf("文件名输入错误!!\n");} printf("\n\t---------------------------------------------------------------------------\n");printf("\t序号学号姓名数学英语物理总分平均分\n");printf("\t---------------------------------------------------------------------------\n");for(i=0;i<size;i++) {if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}}total_average(p,n);for(i=0;i<n;i++) {b++;printf("\t %-6d%-12d%-12s%-8.2f%-8.2f",b,p[i].num,p[i].name,p[i].math,p[i].E nglish);printf("%-8.2f%-10.2f%-8.2f\n",p[i].physics,p[i].total,p[i].average);printf("\t---------------------------------------------------------------------------\n");}printf("\n\n");fclose(fp);}/******************************************************************** ****************************************//***************************************将初始值按平均分排序模块*********************************************/void range(struct student *p,int size){ /*所有同学的成绩按平均分由高到低排序模块*/int i,j,k;struct student temp; /*定义一个student类型的变量备用*/ for(i=0;i<size;i++){ /*用选择排序法进行排序*/k=i;for(j=i+1;j<size;j++)if(p[k].average<p[j].average){temp=p[k];p[k]=p[j];p[j]=temp;}}}/******************************************************************** ****************************************//************************************输出初始值按平均分排序的结果模块****************************************/int read_print2(struct student *p,int size){void total_average(struct student *p,int size);void range(struct student *p,int size);FILE *fp;int i,n=0,b=0;if((fp=fopen("初始值二进制值.txt","rb+"))==NULL){printf("文件名输入错误!!\n");} printf("\n\t---------------------------------------------------------------------------\n");printf("\t学号姓名数学英语物理总分平均分名次\n");printf("\t---------------------------------------------------------------------------\n");for(i=0;i<size;i++) {if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}}total_average(p,n);range(p,n);for(i=0;i<n;i++) {b++;printf("\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].English); printf("%-8.2f%-10.2f%-8.2f %d\n",p[i].physics,p[i].total,p[i].average,b);printf("\t---------------------------------------------------------------------------\n");}printf("\n\n");fclose(fp);return n;}/******************************************************************** ****************************************//********************保存初始值按平均分排序后结果到"初始值按平均分排序二进制值.txt"模块**********************************/void save1(struct student *p,int size){ /*保存模块*/ FILE *fp;int i;if((fp=fopen("按平均分排序二进制值.txt","wb+"))==NULL){ /*建立文件*/printf("cannot open the file\n");}for(i=0;i<size;i++){fwrite(&p[i],sizeof(student),1,fp);} /*快写函数,写到磁盘中为二进制数*/ fclose(fp); /*关闭文件*/}/******************************************************************** ****************************************//******************************************读取排序后结果模块************************************************int read1(struct student *p,int size){FILE *fp;int i,n=0;if((fp=fopen("按平均分排序二进制值.txt","r+"))==NULL){printf("文件名输入错误!!\n");}for(i=0;i<size;i++) {if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}}fclose(fp);return n;}/******************************************************************** ****************************************//*******************************保存初始值按平均分排序后结果到可浏览文件模块*********************************/void SAVE1(struct student *p,int size){FILE *fp;int i,b=0;char name[20];printf("请输入保存排序结果的文件名: ");scanf("%s",name);if((fp=fopen(name,"w+"))==NULL){printf("文件名输入错误!!\n");}fprintf(fp,"\n\t---------------------------------------------------------------------------\n");fprintf(fp,"\t学号姓名数学英语物理总分平均分名次\n");fprintf(fp,"\t---------------------------------------------------------------------------\n");fprintf(fp,"\n" );for(i=0;i<size;i++) {b++;fprintf(fp,"\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].Englis h);fprintf(fp,"%-8.2f%-10.2f%-8.2f %d\n",p[i].physics,p[i].total,p[i].average,b);fprintf(fp,"\t---------------------------------------------------------------------------\n");}fclose(fp);printf("\n文件保存成功!\n\n");}/******************************************************************** ****************************************//***********************************************科目选择模块*************************************************/int choose(){system("color B1 ");system("cls");printf("\n\t************请选择按成绩从高到低排序的科目******************\n\n");printf("\t\t\t查看数学成绩排序请输入(数学)\n\n");printf("\t\t\t查看英语成绩排序请输入(英语)\n\n");printf("\t\t\t查看物理成绩排序请输入(物理)\n\n");printf("\t=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*\n");printf("\t\t请输入科目名称: ");int a;char str1[]="数学",str2[]="英语",str3[]="物理";char str[20];scanf("%s",str);if(strcmp(str1,str)==0){a=1;}else{if(strcmp(str2,str)==0){a=2;}else{if(strcmp(str3,str)==0){a=3;}else{printf("\n输入错误,请重新输入!!\n\n");system("pause");}}}return(a);}/******************************************************************** ****************************************//*******************************所有同学的成绩按数学成绩由高到低排序模块*************************************/void range1(struct student *p,int size){int i,j,k;struct student temp;for(i=0;i<size;i++){ /*用选择排序法进行排序*/k=i;for(j=i+1;j<size;j++)if(p[k].math<p[j].math){temp=p[k];p[k]=p[j];p[j]=temp;}}}/******************************************************************** ****************************************//*******************************所有同学的成绩按英语成绩由高到低排序模块*************************************/void range2(struct student *p,int size){int i,j,k;struct student temp;for(i=0;i<size;i++){ /*用选择排序法进行排序*/k=i;for(j=i+1;j<size;j++)if(p[k].English<p[j].English){temp=p[k];p[k]=p[j];p[j]=temp;}}}/************************************************************************************************************//*******************************所有同学的成绩按物理成绩由高到低排序模块*************************************/void range3(struct student *p,int size){int i,j,k;struct student temp;for(i=0;i<size;i++){ /*用选择排序法进行排序*/k=i;for(j=i+1;j<size;j++)if(p[k].physics<p[j].physics){temp=p[k];p[k]=p[j];p[j]=temp;}}}/******************************************************************** ****************************************//****************************************输出按数学科目排序结果模块*****************************************/int read_print31(struct student *p,int size){void total_average(struct student *p,int size);void range1(struct student *p,int size);FILE *fp;int i,n=0,b=0;if((fp=fopen("按平均分排序二进制值.txt","rb+"))==NULL){printf("文件名输入错误!!\n");} printf("\n\t---------------------------------------------------------------------------\n");printf("\t学号姓名数学英语物理总分平均分名次\n");printf("\t---------------------------------------------------------------------------\n");for(i=0;i<size;i++) {if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}}total_average(p,n);range1(p,n);for(i=0;i<n;i++) {b++;printf("\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].English); printf("%-8.2f%-10.2f%-8.2f %d\n",p[i].physics,p[i].total,p[i].average,b);printf("\t---------------------------------------------------------------------------\n");}printf("\n\n");fclose(fp);return n;}/******************************************************************** ****************************************//****************************************输出按英语科目排序结果模块*****************************************/int read_print32(struct student *p,int size){void total_average(struct student *p,int size);void range2(struct student *p,int size);FILE *fp;int i,n=0,b=0;if((fp=fopen("按平均分排序二进制值.txt","rb+"))==NULL){printf("文件名输入错误!!\n");} printf("\n\t---------------------------------------------------------------------------\n");printf("\t学号姓名数学英语物理总分平均分名次\n");printf("\t---------------------------------------------------------------------------\n");for(i=0;i<size;i++) {if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}}total_average(p,n);range2(p,n);for(i=0;i<n;i++) {b++;printf("\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].English); printf("%-8.2f%-10.2f%-8.2f %d\n",p[i].physics,p[i].total,p[i].average,b);printf("\t---------------------------------------------------------------------------\n");}printf("\n\n");fclose(fp);return n;}/******************************************************************** ****************************************//****************************************输出按物理科目排序结果模块*****************************************/int read_print33(struct student *p,int size){void total_average(struct student *p,int size);void range3(struct student *p,int size);FILE *fp;int i,n=0,b=0;if((fp=fopen("按平均分排序二进制值.txt","rb+"))==NULL){printf("文件名输入错误!!\n");} printf("\n\t---------------------------------------------------------------------------\n");printf("\t学号姓名数学英语物理总分平均分名次\n");printf("\t---------------------------------------------------------------------------\n");for(i=0;i<size;i++) {if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}}total_average(p,n);range3(p,n);for(i=0;i<n;i++) {b++;printf("\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].English); printf("%-8.2f%-10.2f%-8.2f %d\n",p[i].physics,p[i].total,p[i].average,b);printf("\t---------------------------------------------------------------------------\n");}printf("\n\n");fclose(fp);return n;}/******************************************************************** ****************************************//*******************************************保存按科目排序结果模块*******************************************/void SAVE2(struct student *p,int size){FILE *fp;int i,b=0;char name[20];printf("请输入保存科目排序后的文件名: ");scanf("%s",name);if((fp=fopen(name,"w+"))==NULL){printf("文件名输入错误!!\n");}fprintf(fp,"\n\t---------------------------------------------------------------------------\n");fprintf(fp,"\t学号姓名数学英语物理总分平均分名次\n");fprintf(fp,"\t---------------------------------------------------------------------------\n");fprintf(fp,"\n" );for(i=0;i<size;i++) {b++;fprintf(fp,"\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].Englis h);fprintf(fp,"%-8.2f%-10.2f%-8.2f %d\n",p[i].physics,p[i].total,p[i].average,b);fprintf(fp,"\t---------------------------------------------------------------------------\n");}fclose(fp);printf("\n文件保存成功!\n\n");}/******************************************************************** ****************************************//************************************输出所有值按平均分排序的结果模块****************************************//******************************************************************** ****************************************//************************************输出所有值按平均分排序的结果模块****************************************/int read_print3(struct student *p,int size){void total_average(struct student *p,int size);void range(struct student *p,int size);FILE *fp;int i,n=0,b=0;if((fp=fopen("初始值二进制值1.txt","rb+"))==NULL){printf("文件名输入错误!!\n");} printf("\n\t---------------------------------------------------------------------------\n");printf("\t学号姓名数学英语物理总分平均分名次\n");printf("\t---------------------------------------------------------------------------\n");for(i=0;i<size;i++) {if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}}total_average(p,n);range(p,n);for(i=0;i<n;i++) {b++;printf("\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].English); printf("%-8.2f%-10.2f%-8.2f %d\n",p[i].physics,p[i].total,p[i].average,b);printf("\t---------------------------------------------------------------------------\n");}printf("\n\n");fclose(fp);return n;}/******************************************************************** ****************************************//***************************************查找模块************************************************************/void search(struct student *p,int size){void total_average(struct student *p,int size);char str[20]; long c;int i,a,flag=0,n=0;printf("\n\t********************查找某位同学的成绩*********************\n\n");printf("\t\t\t按学号查找请输入(学号)\n\n");printf("\t\t\t按姓名查找请输入(姓名)\n\n");printf("\t=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*\n");char str1[]="学号",str2[]="姓名";char str3[20];while(1){printf("\t\t请输入查找方式: ");scanf("%s",str3);if(strcmp(str1,str3)==0){a=1;break;}else{if(strcmp(str2,str3)==0){a=2;break;}else{printf("\n输入错误,请重新输入!!\n\n");}}}switch(a){case 1: printf("\n\t请输入学号: ");scanf("%s",str);c=strtol(str,NULL,0);FILE *fp;if((fp=fopen("初始值二进制值1.txt","rb+"))==NULL){printf("文件名输入错误!!\n");}for(i=0;i<size;i++) {if(fread(&p[i],sizeof(struct student),1,fp)!=0)n++;}total_average(p,n);for(i=0;i<n;i++)if(p[i].num==c){ flag=1;printf("\n\t---------------------------------------------------------------------------\n");printf("\t学号姓名数学英语物理总分平均分\n");printf("\t---------------------------------------------------------------------------\n");printf("\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].English); printf("%-8.2f%-10.2f%-8.2f\n",p[i].physics,p[i].total,p[i].average);printf("\t---------------------------------------------------------------------------\n\n");break;}if(flag==0){printf("输入学号错误!!\n");}break;case 2: printf("\n\t请输入姓名: ");scanf("%s",str);if((fp=fopen("初始值二进制值1.txt","rb+"))==NULL){printf("文件名输入错误!!\n");}for(i=0;i<size;i++){if(fread(&p[i],sizeof(struct student),1,fp)!=0)n++;}total_average(p,n);for(i=0;i<n;i++)if(strcmp(str,p[i].name)==0){ flag=1;printf("\n\t---------------------------------------------------------------------------\n");printf("\t学号姓名数学英语物理总分平均分\n");printf("\t---------------------------------------------------------------------------\n");printf("\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].English); printf("%-8.2f%-10.2f%-8.2f\n",p[i].physics,p[i].total,p[i].average);printf("\t---------------------------------------------------------------------------\n\n");break;}if(flag==0){printf("输入姓名错误!!\n");}break;}}/******************************************************************** ****************************//*************************************。
C语言程序设计-学生成绩管理系统源码

#include〈stdio.h>#include<conio。
h>#include<malloc.h>#include<string.h>struct STUDENT{char studentNumber[10];/*学生学号*/char studentName[20];/*学生姓名*/char className[20];/*班级名称*/float mark1;/*第1门成绩*/float mark2;/*第2门成绩*/float mark3;/*第3门成绩*/struct STUDENT *next;};struct STUDENT *headLink;/*链表表头指针*//*以下是函数声明*/void ReadInfoFormFile(void);/*读入信息形成文件*/void DisplayMenu(void);void CreateHeadLink(void);struct STUDENT *MallocNode(void);void GetInformation(struct STUDENT *t);void OutputInformation(void);void DisplayInfoBystudentName(void);void DisplayInfoBystudentNumber(void);void DisplayOneNode(struct STUDENT *t);void InsertOneNode(struct STUDENT *t);void DeleteNodeBystudentNumber(void);void ChangeMarkByName(void);void ChangeMarkByNumber(void);void SaveLinkToFile(void);void DisplayMarkSegment(void);/*显示各分数段的学生成绩*/ void CompositorByTotalMark(void);/*按总成绩排序*/int choose;/*用于接受用户的选择*//*主函数*/int main(){CreateHeadLink();ReadInfoFormFile();DisplayMenu();return 0;}/************************************函数功能:从文件中读学生信息到链表中************************************/void ReadInfoFormFile(void){FILE *fp;STUDENT *p;fp=fopen(”student。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*4. 定义一个结构体数组,存放 10 个学生的学号,姓名,三门课的成绩,编写一程序。
应用简单菜单和子函数调用方式实现下面的功能:(1)从键盘输入 10 个学生的以上内容,存入文件 stud.txt(2)浏览显示成绩表(要求显示格式成绩时,格式较规范)(3)将 10 个学生按照平均分数从高到低进行排序,结果存入文件 stud1.txt( 4)输入任意的一个课程名,分数从高到低进行排序,结果存入文件stud2.txt ( 5)向文件 stud1.txt 中插入一个记录,成绩排序不变,结果存入文件 stud1.txt#include "stdio.h" /* 头文件名*/*/#inelude "stdlib.h" /*头文件名,因为程序中用到了exit(结束程序)和函数*/ #include "string.h"/*头文件名,因为程序中用到了字符串函数 */#define N 1000定义结构体模块struct student {long num; /* 定义学生学号为长整型 */char name[20]; /* 定义姓名为字符型,占 12 个字符*/float math,English,physics,total,average;float TOT_math,TOT_English,TOT_physics,TOT_total,TOT_aver;float aver_math,aver_English,aver_physics,aver_total,aver_average;}student; /* 定义结构体名称为 student*/输入初始值模块void input(struct student *p,int size){int i;for(i=0;i<size;i++){printf("请输入学号 :");while(1){scanf("%ld",&p[i].num);if(long(p[i].num)!=p[i].num||long(p[i].num)<=0){ /* 输入判断*/printf("输入错误,学号必须为整数 ,请重新输入 : ");fflush(stdin);}else{break;}}printf("请输入姓名 :");scanf("%s",p[i].name);printf("请输入数学成绩 :");保存初始值到 "初始二进制值 .txt"模************************************while(1){scanf("%f",&p[i].math);if(float(p[i].math)!=p[i].math||float(p[i].math)<=0||p[i].math>100||p[i].math <0){printf("输入错误 ,数学成绩必须为 0~100 之间的数 ,请重新输入 : "); fflush(stdin);} else{break;}}printf("请输入英语成绩 :");while(1){scanf("%f",&p[i].English);if(float(p[i].English)!=p[i].English||float(p[i].English)<=0||p[i].Eng lish>100||p[i ].English<0){printf("输入错误 ,英语成绩必须为 0~100 之间的数 ,请重新输入 : ");fflush(stdin); } else{break;}}printf("请输入物理成绩 :");while(1){scanf("%f",&p[i].physics);if(float(p[i].physics)!=p[i].physics||float(p[i].physics)<=0||p[i].phy sics>100||p[ i].physics<0){printf("输入错误 ,英语成绩必须为 0~100 之间的数 ,请重新输入 : "); fflush(stdin);} else{break;}} printf("\n");}printf("信息录入成功 !\n\n");}void save(struct student *p,int size){/* 保存模块 */FILE *fp;int i;if((fp=fopen("初始值二进制值 .txt","wb+"))==NULL){ /* 建立文件 */ printf("cannot open the file\n");}for(i=0;i<size;i++){ fwrite(&p[i],sizeof(student),1,fp);} /* 快写函数, 写到磁盘中为二进制数 */ fclose(fp); /* 关闭文件 */}*/ 块保存初始值到 "初始二进制值 .txt"模******************************************************************************************************void save0(struct student *p,int size){ /* 保存模块 */FILE *fp;int i;if((fp=fopen("初始值二进制值 1.txt","ab+"))==NULL){ /* 建立文件 */printf("cannot open the file\n");}for(i=0;i<size;i++){ fwrite(&p[i],sizeof(student),1,fp);} /* 快写函数, 写到磁盘中为二进制数 */ fclose(fp); /* 关闭文件 */ }保存初始值到可浏览文件模块void SAVE(struct student *p,int size){FILE *fp;int i,b=0; char name[20];printf("请输入保存初始值的可浏览文件名 : "); scanf("%s",name); if((fp=fopen(name,"w+"))==NULL){ printf("文件名输入错误 !!\n");}fprintf(fp,"\n\t\t -------------------------------- \n"); fprintf(fp,"\t\t 序号 学号 姓名 数学 英语 物理 \n"); fprintf(fp,"\t\t --------------------------------- "); fprintf(fp,"\n"); for(i=0;i<size;i++) {b++;fprintf(fp,"\t\t %-6d%-12d%-12s%-8.2f%-8.2f%-8.2f\n",b,p[i].num,p[i].n ame,p[ i].math,p[i].English,p[i].physics);fprintf(fp,"\t\t -------------------------------- \n"); }fclose(fp);printf("\n 文件保存成功!\n\n");*/ 块读取初始值模块int read(struct student *p,int size){FILE *fp;int i,n=0;if((fp=fopen("初始值二进制值 .txt","rb+"))==NULL){ printf("文件名输入错误 !!\n");}for(i=0;i<size;i++) { if(fread(&p[i],sizeof(structstudent),1,fp)!=0){n++;}} fclose(fp);return n;}I********************************************************************读取输出初始值模块void read_print(struct student *p,int size){ FILE *fp;int i,n=0,b=0;if((fp=fopen("初始值二进制值 .txt","rb+"))==NULL){printf("文件名输入错误 !!\n");} printf("\n\t\t ------------------------------------ \n");printf("\t\t 序号学号姓名数学英语物理 \n");printf("\t\t --------------------------------- \n");for(i=0;i<size;i++) {if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}} for(i=0;i<n;i++) {b++;printf("\t\t %-6d%-12d%-12s%-8.2f%-8.2f",b,p[i].num,p[i].name,p[i].mat h,p[i]. English);printf("%-8.2f\n",p[i].physics);printf("\t\t ---------------------------------- \n");}printf("\n\n");fclose(fp);}计算总分和平均分模块*****************************************'void total_average(struct student *p,int size){ /* 求每位同学的总分和平均分模块*/int i;for(i=0;i<size;i++){ /* 循环,从第一个同学开始计算到最后一个同学*/p[i].total=p[i].math+p[i].English+p[i].physics;/* 每个同学的总分等于三科成绩之和 */ p[i].average=p[i].total/3; /* 每个同学的平均分等于总分的 1/3*/ }}I********************************************************************输出初始值总分和平均分模块void read_print1(struct student *p,int size){void total_average(struct student *p,int size);FILE *fp;int i,n=0,b=0;if((fp=fopen("初始值二进制值 .txt","rb+"))==NULL){printf("文件名输入错误 !!\n");} printf("\n\t ------------------------------------------------- \n");printf("\t 序号学号姓名数学英语物理总分平均分 \n");printf("\t --------------------------------------------- \n");for(i=0;i<size;i++) {if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}} total_average(p,n);for(i=0;i<n;i++) {b++;printf("\t %-6d%-12d%-12s%-8.2f%-8.2f",b,p[i].num,p[i].name,p[i].math, p[i].E nglish);printf("%-8.2f%-10.2f%-8.2f\n",p[i].physics,p[i].total,p[i].average);printf("\t --------------------------------------------- \n");}printf("\n\n"); fclose(fp);}I***********************************************************************************************************************************************将初始值按平均分排序模块void range(struct student *p,int size){ /* 所有同学的成绩按平均分由高到低排序模块 */int i,j,k;struct student temp; /* 定义一个 student 类型的变量备用 */ for(i=0;i<size;i++){ /* 用选择排序法进行排序 */ k=i;for(j=i+1;j<size;j++) if(p[k].average<p[j].average){ temp=p[k];p[k]=p[j]; p[j]=temp;}}}输出初始值按平均分排序的结果模块int read_print2(struct student *p,int size){void total_average(struct student *p,int size);void range(struct student *p,int size);FILE *fp;int i,n=0,b=0;if((fp=fopen("初始值二进制值 .txt","rb+"))==NULL){printf("文件名输入错误 !!\n");} printf("\n\t ------------------------------------------------- \n");printf("\t 学号姓名数学英语物理总分平均分名次 \n");printf("\t --------------------------------------------- \n");for(i=0;i<size;i++) { if(fread(&p[i],sizeof(structstudent),1,fp)!=0){n++;}} total_average(p,n); range(p,n);for(i=0;i<n;i++) {b++;printf("\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].En glish);printf("%-8.2f%-10.2f%-8.2f %d\n",p[i].physics,p[i].total,p[i].average,b);printf("\t ---------------------------------------------- \n");}printf("\n\n");"初始值按平均分排保存初始值按平均分排序后结果到可浏览文件模块 ******************************** */ fclose(fp); return n;}/******************** 保存初始值按平均分排序后结果到 序二进制值 .txt"模块void save1(struct student *p,int size){/* 保存模块 */FILE *fp;int i;if((fp=fopen("按平均分排序二进制值 .txt","wb+"))==NULL){ /* 建 立文件 */ printf("cannot open the file\n");}for(i=0;i<size;i++){ fwrite(&p[i],sizeof(student),1,fp);} /* 快写函数, 写到磁盘中为二进制数 */ fclose(fp); /* 关闭文件 */}读取排序后结果模块 ************************************************ int read1(struct student *p,int size){FILE *fp;int i,n=0;if((fp=fopen("按平均分排序二进制值 .txt","r+"))==NULL){ printf("文件名输入错误 !!\n");} for(i=0;i<size;i++) {if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}} fclose(fp); return n;}void SAVE1(struct student *p,int size){FILE *fp;int i,b=0; char name[20];printf("请输入保存排序结果的文件名 : ");scanf("%s",name); if((fp=fopen(name,"w+"))==NULL){ printf("文件名输入错误 !!\n");}fprintf(fp,"\n\t -------------------------------------------- \n");fprintf(fp,"\t 学号姓名数学英语物理总分平均分名次 \n");fprintf(fp,"\t --------------------------------------------- \n");fprintf(fp,"\n"); for(i=0;i<size;i++) {b++;fprintf(fp,"\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i ].Englis h);fprintf(fp,"%-8.2f%-10.2f%-8.2f %d\n",p[i].physics,p[i].total,p[i].average ,b); fprintf(fp,"\t --------------------------------------- \n");} fclose(fp); printf("\n 文件保存成功 !\n\n");}科目选择模块int choose(){system("color B1 ");system("cls");printf("\n\t************ 请选择按成绩从高到低排序的科目******************\n\n");printf("\t\t\t 查看数学成绩排序请输入 (数学 )\n\n");printf("\t\t\t 查看英语成绩排序请输入 (英语 )\n\n");printf("\t\t\t 查看物理成绩排序请输入 (物理 )\n\n");printf("\t=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*\n");printf("\t\t 请输入科目名称 : ");int a;char str1[]="数学",str2[]="英语",str3[]="物理";char str[20];scanf("%s",str);if(strcmp(str1,str)==0){a=1;}else{if(strcmp(str2,str)==0){a=2;}else{if(strcmp(str3,str)==0){a=3;}else{printf("\n 输入错误 ,请重新输入 !!\n\n"); system("pause");}} }return(a);所有同学的成绩按数学成绩由高到低排序}模块void range1(struct student *p,int size){int i,j,k;struct student temp;for(i=0;i<size;i++){ /* 用选择排序法进行排序 */ k=i;for(j=i+1;j<size;j++) if(p[k].math<p[j].math){ temp=p[k]; p[k]=p[j];p[j]=temp;}}所有同学的成绩按英语成绩由高到低排序}模块void range2(struct student *p,int size){int i,j,k;struct student temp;for(i=0;i<size;i++){ /* 用选择排序法进行排序 */ k=i;for(j=i+1;j<size;j++) if(p[k].English<p[j].English){ temp=p[k];p[k]=p[j]; p[j]=temp;}}}**************************************所有同学的成绩按物理成绩由高到低排序模块void range3(struct student *p,int size){int i,j,k;struct student temp;for(i=0;i<size;i++){ /* 用选择排序法进行排序 */ k=i;for(j=i+1;j<size;j++) if(p[k].physics<p[j].physics){ temp=p[k];p[k]=p[j]; p[j]=temp;}}}输出按数学科目排序结果模块int read_print31(struct student *p,int size){void total_average(struct student *p,int size);void range1(struct student *p,int size);FILE *fp;int i,n=0,b=0;if((fp=fopen("按平均分排序二进制值 .txt","rb+"))==NULL){printf("文件名输入错误 !!\n");} printf("\n\t ------------------------------------------------- \n");printf("\t 学号姓名数学英语物理总分平均分名次 \n");printf("\t --------------------------------------------- \n");for(i=0;i<size;i++) {if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}} total_average(p,n);range1(p,n); for(i=0;i<n;i++) {b++;printf("\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].En glish);printf("%-8.2f%-10.2f%-8.2f %d\n",p[i].physics,p[i].total,p[i].average,b);printf("\t ---------------------------------------------- \n");}printf("\n\n");fclose(fp);return n;}输出按英语科目排序结果模块int read_print32(struct student *p,int size){void total_average(struct student *p,int size);void range2(struct student *p,int size);FILE *fp;int i,n=0,b=0;if((fp=fopen("按平均分排序二进制值 .txt","rb+"))==NULL){printf("文件名输入错误 !!\n");} printf("\n\t ------------------------------------------------- \n");printf("\t 学号姓名数学英语物理总分平均分名次 \n");printf("\t --------------------------------------------- \n");for(i=0;i<size;i++) {if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}} total_average(p,n);range2(p,n); for(i=0;i<n;i++) {b++;printf("\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].En glish);printf("%-8.2f%-10.2f%-8.2f %d\n",p[i].physics,p[i].total,p[i].average,b);printf("\t ---------------------------------------------- \n");}printf("\n\n"); fclose(fp);return n;}输出按物理科目排序结果模块int read_print33(struct student *p,int size){ void total_average(struct student *p,int size); void range3(struct student *p,int size);FILE *fp;int i,n=0,b=0;if((fp=fopen("按平均分排序二进制值 .txt","rb+"))==NULL){printf("文件名输入错误 !!\n");} printf("\n\t ------------------------------------------------- \n");printf("\t 学号姓名数学英语物理总分平均分名次 \n");printf("\t --------------------------------------------- \n");for(i=0;i<size;i++) {if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}} total_average(p,n);range3(p,n);for(i=0;i<n;i++) {b++;printf("\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].En glish);printf("%-8.2f%-10.2f%-8.2f %d\n",p[i].physics,p[i].total,p[i].average,b);printf("\t ---------------------------------------------- \n");}printf("\n\n"); fclose(fp);return n;}保存按科目排序结果模块void SAVE2(struct student *p,int size){FILE *fp;int i,b=0;char name[20];printf("请输入保存科目排序后的文件名 : "); scanf("%s",name);if((fp=fopen(name,"w+"))==NULL){ printf("文件名输入错误 !!\n");}fprintf(fp,"\n\t -------------------------------------------- \n");fprintf(fp,"\t 学号姓名数学英语物理总分平均分名次 \n");fprintf(fp,"\t --------------------------------------------- \n");fprintf(fp,"\n"); for(i=0;i<size;i++) {b++;fprintf(fp,"\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i ].Englis h);fprintf(fp,"%-8.2f%-10.2f%-8.2f %d\n",p[i].physics,p[i].total,p[i].average ,b); fprintf(fp,"\t --------------------------------------- \n");} fclose(fp); printf("\n 文件保存成功 !\n\n");}输出所有值按平均分排序的结果模块输出所有值按平均分排序的结果模块int read_print3(struct student *p,int size){void total_average(struct student *p,int size);void range(struct student *p,int size);FILE *fp;int i,n=0,b=0;if((fp=fopen("初始值二进制值 1.txt","rb+"))==NULL){ printf("文件名输入错误 !!\n");} printf("\n\t ------------------------------------------------- \n");printf("\t 学号姓名数学英语物理总分平均分名次 \n");printf("\t --------------------------------------------- \n");for(i=0;i<size;i++) {if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}} total_average(p,n);range(p,n);for(i=0;i<n;i++) {b++;printf("\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].En glish);printf("%-8.2f%-10.2f%-8.2f %d\n",p[i].physics,p[i].total,p[i].average,b);printf("\t ---------------------------------------------- \n");}printf("\n\n");fclose(fp);return n;}查找模块void search(struct student *p,int size){ void total_average(struct student *p,int size);char str[20]; long c;printf("\n\t* ******************* 查找某位同学的成绩int i,a,flag=0,n=0;*********************\n\n");printf("\t\t\t 按学号查找请输入 (学号 )\n\n"); printf("\t\t\t 按姓名查找请输入 (姓名 )\n\n");printf("\t=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*==*\n");char str1[]="学号",str2[]="姓名";char str3[20];while(1){printf("\t\t 请输入查找方式 : ");scanf("%s",str3);if(strcmp(str1,str3)==0){a=1;break;}else{if(strcmp(str2,str3)==0){a=2;break;}else{printf("\n 输入错误 ,请重新输入 !!\n\n");}}}switch(a){case 1: printf("\n\t 请输入学号 : ");scanf("%s",str);c=strtol(str,NULL,0);FILE *fp;if((fp=fopen("初始值二进制值 1.txt","rb+"))==NULL){printf("文件名输入错误 !!\n");}for(i=0;i<size;i++) {if(fread(&p[i],sizeof(struct student),1,fp)!=0)n++;}total_average(p,n);for(i=0;i<n;i++)if(p[i].num==c){ flag=1;\n");物理总分printf("\t 学号平均分\n");姓名数学英语printf("\n\t ---------------------------------------------- \n");printf("\t 学号姓名数学英语物理总分平均分 \n");printf("\t ---------------------------------------------- \n");printf("\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].Englis h);printf("%-8.2f%-10.2f%-8.2f\n",p[i].physics,p[i].total,p[i].average);printf("\t ---------------------------------------------- \n\n");break;}if(flag==0){printf("输入学号错误 !!\n");}break;case 2: printf("\n\t 请输入姓名 : "); scanf("%s",str);if((fp=fopen("初始值二进制值 1.txt","rb+"))==NULL){printf("文件名输入错误 !!\n");for(i=0;i<size;i++){if(fread(&p[i],sizeof(struct student),1,fp)!=0)n++;}total_average(p,n);for(i=0;i<n;i++)if(strcmp(str,p[i].name)==0){ flag=1;printf("\n\tprintf("\t ---------------------------------------------- \n");printf("\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].Englis h);printf("%-8.2f%-10.2f%-8.2f\n",p[i].physics,p[i].total,p[i].average);printf("\t ---------------------------------------------- \n\n");break;}if(flag==0){printf("输入姓名错误 !!\n");}break;}**************************}void correct(struct student *p,int size){void input(struct student *p,int size);int i,a=0,flag=0; FILE *fp;if((fp=fopen("初始值二进制值 1.txt","r+"))==NULL){printf("不能打开文件 \n");}printf("请输入需要修改人的学号进行修改 ,修改后将自动计算总分和平均分并排序 !!\n");printf("\n\t 请输入需要修改学生的学号 : ");scanf("%ld",&p[N].num);for(i=0;fread(&p[i],sizeof(struct student),1,fp)!=0;i++){a++;}for(i=0;i<a;i++)if(p[i].num==p[N].num){flag=1;printf("请输入新的信息 !!\n\n");printf("请输入学号 :");while(1){scanf("%ld",&p[i].num);if(long(p[i].num)!=p[i].num||long(p[i].num)<=0){ /* 输入判断*/printf("输入错误,学号必须为整数 ,请重新输入 : ");fflush(stdin);} else{break;}} printf("请输入姓名 :");scanf("%s",p[i].name);printf("请输入数学成绩 :");while(1){scanf("%f",&p[i].math);if(float(p[i].math)!=p[i].math||float(p[i].math)<=0||p[i].math>100||p[ i].math <0){printf("输入错误,数学成绩必须为0~100 之间的数,请重新输入: ");fflush(stdin);}else{break;}}printf("请输入英语成绩 :");while(1){scanf("%f",&p[i].English);if(float(p[i].English)!=p[i].English||float(p[i].English)<=0||p[i].Eng lish>100||p[i ].English<0){printf("输入错误 ,英语成绩必须为 0~100 之间的数 ,请重新输入 : ");fflush(stdin); } else{break;}} printf("请输入物理成绩 :"); while(1){scanf("%f",&p[i].physics);if(float(p[i].physics)!=p[i].physics||float(p[i].physics)<=0||p[i].phy sics>100||p[i].physics<0){printf("输入错误,英语成绩必须为0~100 之间的数,请重新输入: ");fflush(stdin);} else{break;}}}if((fp=fopen("初始值二进制值 1.txt","w+"))==NULL){printf("不能打开文件 \n");exit(0); }for(i=0;i<a;i++){ fwrite(&p[i],sizeof(struct student),1,fp);}fclose(fp);if(flag==0){printf("对不起 !! 没有查找到您所输的学号 !!\n");}}删除void delite (struct student *p,int size){int i,a=0,flag=0; FILE *fp;printf("请输入需要删除的学号进行查找后,该项将自动删除并自动计算总分和平均分及排序 !!\n");if((fp=fopen("初始值二进制值 1.txt","rb+"))==NULL){ printf("不能打开文件 \n");}printf("\n\t 请输入需要删除学生的学号 : "); scanf("%ld",&p[N].num);for(i=0;fread(&p[i],sizeof(struct student),1,fp)!=0;i++){a++;}for(i=0;i<a;i++){if(p[i].num==p[N].num){ for(i=i;i<a;i++){ p[i]=p[i+1];}if((fp=fopen("初始值二进制值 1.txt","w+"))==NULL){ printf("不能打开文件 \n");exit(0);} for(i=0;i<a-1;i++){ fwrite(&p[i],sizeof(struct student),1,fp);} fclose(fp);flag=1;break;}} if(flag==0){ printf("对不起 !! 没有你找到你想删除的人 !!\n");system("pause");*/\n\n");printf("\t |***| (6)插入新的成绩 \n\n");|***| (7)查找某位|=*=| (8)按学号修改|===| (9)按学号删除|=*=| (0)浏览所有同|===| (10)退出程序*/ ******************************************************* int menu(){int a;system("color 9F"); /* 改变输出框字体和背景的颜色 */ system("cls");/* 运行前清屏 */printf("\n");printf("\t===============成绩 *=*=*=*=*=*=* 处理=*=*=*=*=*=*=* 系统===============\n");printf("\n\t 作者:卢荣盼 班级 :计本 102 学号:1018014052\n\n");printf("\t 此程序具有以下功能: \n"); printf("\t =========\n");printf("\n\t |***| (1)输入同学的相关信息同学的成绩 \n\n"); printf("\t |=*=| (2)浏览初始学生信息某位同学的成绩 \n\n"); printf("\t |===| (3)求初始学生总分及平均分某位同学的信息 \n\n"); printf("\t |=*=| (4)查看初始学生平均分排序 学的信息及排名 \n\n"); printf("\t |===| (5)按科目排序存入所有成绩printf("\t=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");printf("\t 请选择操作序号 (0-7):"); /* 选择操作项 */scanf("%d",&a); /* 输入选择项 */ return a;}主函数******************************************************* void main(){int b=0,n;struct student p[N];}while(1){switch(menu()){case 1:system("color B0 ");system("cls");printf("请输入要保存的初始数据的个数 : ");while(1){scanf("%d",&n);if(int(n)!=n||long(n)<=0){ /* 输入判断 */ printf("输入错误,个数必须为整数 ,请重新输入 : "); fflush(stdin);}else{break;}} input(p,n); /* 输入初始同学信息 */save(p,n);save0(p,n);SAVE(p,n); /* 保存初始同学信息 */system("pause"); /* 程序运行至此暂停,然后按任意键可继续运行*/break;case 2:system("color F9");system("cls");printf("\n\n 读取数据如下 :\n");read_print(p,N); /* 读取并输出初始值数据 */system("pause");break;case 3:system("color d0 ");system("cls");printf("\n\n\n\n 录入初始学生的总分平均分如下表 : \n");read_print1(p,N); /* 输出初始值每位同学的总分和平均分*/system("pause");break;case 4:system("color F0 ");system("cls");printf("\n\n\n\n 录入初始学生成绩按平均分由高到低排序如下\n\n");SAVE1(p,read_print2(p,N)); /* 输出和保存初始值每位同学的平均分排名*/save1(p,read(p,N)); system("pause");break;case 5:switch(choose()){case 1: printf("\n 所有同学的成绩按数学成绩由高到低排序如下 :\n\n");/* 保存输出SAVE2(p,read_print31(p,N));模块*/system("pause");break;case 2: printf("\n 所有同学的成绩按英语成绩由高到低排序如下 :\n\n");SAVE2(p,read_print32(p,N)); /* 保存输出模块*/system("pause");break;case 3: printf("\n 所有同学的成绩按英语成绩由高到低排序如下 :\n\n");SAVE2(p,read_print33(p,N)); /* 保存输出模块*/system("pause");break;}break;case 6: system("color d0 "); system("cls");printf("插入前学生信息如下 :\n"); read_print3(p,N);printf("请输入插入学生信息 :\n\n"); input(p,1);save0(p,1);printf("插入后学生信息如下 :\n");SAVE1(p,read_print3(p,N)); system("pause"); break;case 7:system("color fc "); system("cls"); search(p,N);system("pause");break;case 8: system("color E0 "); system("cls"); printf("修改前学生信息如下 :\n"); read_print3(p,N); correct(p,N);printf("修改后学生信息如下 :\n"); SAVE1(p,read_print3(p,N));system("pause");break;case 9:system("color A0 "); system("cls"); printf("删除前学生信息如下 :\n"); read_print3(p,N); delite(p,N);printf("删除后学生信息如下 :\n"); SAVE1(p,read_print3(p,N));谢谢使用程序,谢 /* 程序终止 system("pause");break;case 0: system("color e0 "); system("cls"); printf("读取数据如下 :\n"); read_print3(p,N); system("pause");break;case 10:system("color E0 ");{printf("\n谢!!\n\n");}system("pause");exit(O);*/default: system("color fc ");{printf("\n菜 单 选 择 错 误 ,请 重 新 选择!!\n\n");}system("pause");break;}}}。