1、 /成绩 float sum; /总分 float average; /平均分 struct St *next; ;六,程序结构流程图七,模块功能在结构流程图中已经给出。八,实验结果体会:这个实验较上一个比起来更困难一些,不过经过和同学们的探讨和自己的努力最终完成了这个实验的基本要求,从中我受益匪浅,对以前学习的知识进行了进一步的巩固,对以后的学习有着很大的帮助。附录:#includestdlib.hmalloc.hstring.htime.hconio.hvoid Input(struct St * head,struct St * per); /录入学生数据int del(struct S
2、t * head,charIDNumber); /删除学生数据 void average(struct St * head); /按照平均分排序void listprint(struct St * head); /链表中学生信息输出intsearchname(struct St * head,charFamilyName ,char GivenName );/按照姓名查询信息 intfsave(struct St * head); /将链表中的数据保存到文件中intfread(struct St * head,FILE * fp); /读取文件信息intclasearch(struct St
3、* head); /按班级查找int grades(struct St * head); /计算学生的总分和平均分int main() printf(tt$*$*$tttn);tt¥*学生成绩管理系统*¥tttnstruct St * head=(struct St*)malloc(sizeof(struct St); head-next=NULL; FILE * fp=NULL;inti=1; while(i!=9) printf(tt1.输入学生信息n printf(tt2.按学号从表中删除学生信息ntt3.显示链表中所有记录ntt4.按照姓名查找记录ntt5.将链表中记录保存到文件中nt
4、t6.从文件中读入记录ntt7.计算所有学生的总分和平均分ntt8.按班级查询显示学生总分ntt9.退出n 请选择: scanf(%d,&i); switch(i) case 1:system(cls if(head=NULL) printf(数据出错! exit(0); else struct St * per=(struct St*)malloc(sizeof(struct St); per- Input(head,per); break; case 2: system( printf(ttt删除学生信息n请输入要删除的学生的学号:scanf(%s,IDNumber); del(head,
5、IDNumber);break; case 3:ttt显示链表中学生信息n listprint(head); break; case 4:ttt学生信息查询n请输入要查询学生的姓: scanf(,FamilyName);请输入要查询学生的名:,GivenName); searchname(head,FamilyName,GivenName); case 5: fsave(head); case 6: fread(head,fp); case 7: grades(head); case 8: clasearch(head); case 9: return 1; default: void Inp
6、ut(struct St * head,struct St * per) /录入学生数据 struct St *p=head-next ; if(p!=NULL) while(p-next! p=p-next; p-next=per; else head-ttt录入学生信息n请输入学生的学号: scanf(,per-IDNumber);请输入学生的姓:FamilyName);请输入学生的名:GivenName); do请输入学生的性别(0女,1男):per-sex); if(1!=per-sex & 0!sex)您输入的性别有误!n while(1! struct tm *ptm; /当前时间
7、获取 long ts;inty,m,d,h,n,s;ts=time(NULL);ptm=localtime(&ts); y=ptm-tm_year+1900; /*年*/ m=ptm-tm_mon+1; /*月*/ d=ptm-tm_mday; /*日*/ h=ptm-tm_hour; /*时*/ n=ptm-tm_min; /*分*/ s=ptm-tm_sec; /*秒*/请输入出生年:BirthYear); if(per-BirthYear y)您输入的年份有错请重新输入! while(per- y);请输入出生月:BirthMonth);BirthMonth 12)您输入的月份份有错请重
8、新输入! 12);请输入出生日:BirthDay);BirthDay 31)您输入的日期有错请重新输入! 31);外语:%fscore0);高数:score1);C语言:score2);马哲:score3); per-average=(per-score0 + per-score1 + per-score2 + per-score3)/4;sum=per-score0+per-score1+per-score2+per-score3;int del(struct St * head,charIDNumber) /删除学生数据 if(head-next=NULL)数据列表为空,无法删除! ret
9、urn 0; struct St *p=head- struct St * pfront=head; while(p!=NULL &strcmp(p-IDNumber,IDNumber)!=0) pfront=p; if(p=NULL)记录中没有发现您要删除的人n else pfront-next=p- free(p);该生信息已删除n return 1;void average(struct St * head) /按照平均分将列表排序 struct St *p,*q,*m,*n; struct St *temp1;NO LINKLIST! p=head;q=head- while(q- m
10、=p- n=q- temp1=m; while(temp1- if(temp1-next-average average & temp1- n-average ) m=temp1;n=temp1- temp1=temp1- /*此循环用于找到基准(q)以后的序列的最小的节点*/ if(m!=p-next | (m=p-next & m-average n-average ) p-next=n; p=n; m-next=q; m=q; q=q- n=n- /*此条件用于交换两个节点*/ p=p- /*此条件用于没有找到最小值时的p,q后移操作*/ /*外循环用于从前往后扫描,通过移动p,q指针实
11、现*/void listprint(struct St * head) /链表中学生信息输出 average(head);学号:%s 姓氏:%s 名字:%s 性别:%d n 出生年:%d 月:%d 日:%d n,p-IDNumber,p-FamilyName,p-GivenName,p-sex,p-BirthYear,p-BirthMonth,p-%f 高数:%f c语言:%f 马哲:n%f 总分:%f 平均分:%fnscore0,p-score1,p-score2,p-score3,p-sum,p-average); 链表为空,请先输入数据nintsearchname(struct St *
12、 head,charFamilyName ,char GivenName ) /按照姓名查询信息数据列表为空,无法查询! if(strcmp(p-FamilyName,FamilyName)=0&GivenName,GivenName)=0) break;记录中并没有发现您要找的人!%fc 语言:n %f 总分:intfsave(struct St * head) /将链表中的数据保存到文件中 printf(ttt文件保存n FILE * fp; if(fp=fopen(grades.txt,wb+)=NULL)文件无法打开! struct St * p=head- fwrite(p,size
13、of(struct St),1,fp); fclose(fp);链表已经写入文件nintfread(struct St * head,FILE * fp) /读取文件信息ttt文件读取n struct St * p, * p1; p=p1=(struct St*)malloc(sizeof(struct St);rb文件读取错误! printf(正在读取.n while(!feof(fp) p=(struct St*)malloc(sizeof(struct St); fread(p,sizeof(struct St),1,fp); if(feof(fp)next=NULL) head-nex
14、t=p; p1- p1=p; p1- listprint(head);文件已读完nint grades(struct St * head) /计算有学生的总分和平均分ttt计算学生的总分和平均分n struct St * p=head- float totalScore4=0,0,0,0; float totalAverage4=0,0,0,0; int amount=0;数据列表为空,无法计算所有学生的总分和平均分! totalScore0+=p-score0; totalScore1+=p-score1; totalScore2+=p-score2; totalScore3+=p- amo
15、unt+; totalAverage0=totalScore0/amount; totalAverage1=totalScore1/amount; totalAverage2=totalScore2/amount; totalAverage3=totalScore3/amount;记录中共有%d个学生的信息,各科总分和平均分如下:,amount);外语总分为:%ftt外语平均分:,totalScore0,totalAverage0);高数总分为:%ftt高数平均分:,totalScore1,totalAverage1);C语言总分为:%fttC语言平均分:,totalScore2,totalAverage2);马哲总分为:%ftt马哲平均分:,totalScore3,totalAverage3);平均分90分以上的学生信息: p=head- while(p!=NULL ) if( p-average=90)%d 出生年: p=p-平均分8090分的学生信息:
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2