用户:雾殇lin
2016年07月26日
给个参考你:/*编制一个学生成绩管理系统,每个学生信息包括:学号、姓名、C语言、高数和英语成绩。具体功能:(1)创建信息链表并以磁盘文件保存;(2)读取磁盘文件并显示输出所有学生的成绩;(3)按学号或姓名查询成绩;(4)添加成绩记录;(5)修改指定姓名或学号的学生的成绩并可存盘;(6)显示输出60分以下、60~79、80~89、90分以上各分数段的学生信息。以C语言成绩为例*/#include#include#include#include#defineN20typedefstruct{charname[10];intnum;floatc;floatmath;floatenglish;floataver;}stu;//菜单voidmenu()/*便于操作员使用*/{/*清屏*/system("cls");printf("学生平时成绩管理\n");printf("=======================\n");printf("1.成绩录入\n");printf("2.计算\n");printf("3.查询\n");printf("4.修改\n");printf("5.插入\n");printf("6.显示\n");printf("7.统计\n");printf("8.删除\n");printf("0.退出\n");printf("=======================\n");printf("请选择相应的功能:");}//成绩录入voidinput(){FILE*fp;stuxs;/*定义一个结构体变量来装从文件中读出来的数据*/if((fp=fopen("student.dat","ab"))==NULL){printf("can'topenfile!\n");exit(0);}printf("\n录入格式:姓名学号C语言高数英语当输入姓名为ps结束录入\n");while(1)/*中间加油break,可使循环中断*/{scanf("%s",xs.name);if(strcmp(xs.name,"ps")==0)break;/*判断姓名是否为ps,用字符串判断*/scanf("%d%f%f%f",&xs.num,&xs.c,&xs.math,&xs.english);xs.aver=0;/*给平均分变量赋初值*/fwrite(&xs,sizeof(stu),1,fp);//将成绩信息写入文件}fclose(fp);}//计算平均分voidsum(){inti=0,n;stuxs[N];FILE*fp;if((fp=fopen("student.dat","rb+"))==NULL){printf("can'topenfile!\n");exit(0);}while(!feof(fp))/*文件读入内存,读取指针未到文件尾时返回值为0,读到尾时返回值为1,加!取反后,结束即为0*/{fread(&xs[i],sizeof(stu),1,fp);/*读入结构体变量*/if(feof(fp))break;/*上面while循环那个会多读一次因为读到尾时那个0还没返回,这里判断如果以读到文件尾,则直接停止,避免重复输入*/xs[i].aver=(xs[i].c+xs[i].math+xs[i].english)/3;i++;}n=i;/*把i的末尾值给n,用于下面循环写入*/i=0;fclose(fp);if((fp=fopen("student.dat","wb"))==NULL){printf("can'topenfile!\n");exit(0);}while(i=0)/*k的位置要位于数组范围之内*/{//插入for(j=lenth-1;j>=k;j--)xs[j+1]=xs[j];/*一开始j是最大的,往后移一个这样移动避免数据被覆盖*//*循环是只循环这一句的*/xs[k]=s;/*将输入的学生信息加入这个k位置*/lenth++;/*长度+1*///写回if((fp=fopen("student.dat","wb"))==NULL){printf("不能建立文件!!\n");exit(0);}for(i=0;i=60&&s[i].c=80&&s[i].c=90){p4[m++]=&s[i++];continue;}}printf("不及格:姓名学号C语言\n");for(n=0;nname,p1[n]->num,p1[n]->c);}printf("60-79:姓名学号C语言\n");for(p=0;pname,p2[p]->num,p2[p]->c);}printf("80-89:姓名学号C语言\n");for(q=0;qname,p3[q]->num,p3[q]->c);}printf("90以上:姓名学号C语言\n");for(r=0;rname,p4[r]->num,p4[r]->c);}fclose(fp);getch();}//删除:输入学生姓名,若该学生存在,则删除,并显示删除后余下的学生成绩信息voiddele(){stuxs[N];FILE*fp;charname[10];inti=0,len,k=-1/*k=0)/*k>0说明找到删除学生位置*/{if((fp=fopen("student.dat","wb+"))==NULL){printf("can'topenfile!\n");exit(0);}for(i=0;i