1、xxxxx课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx 共修:xx科,实得总学分为: xxx(3)删除功能:提供待删除学生的学号,则在student.txt和score.dat中删除所有与该学生有关的信息。(4)排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据。【程序设计的具体说明】(1) 将与两个文件对应的信息分别定义两种结构体类型来表示,也可以用类来定义;(2) 对score.dat文件的写入,从键盘上输入的是前七项,后两项数据项根据计算方法算出后,得到完整的结构体信息,作为一个整体写入(可调用write函数)。(3) 删除功能中可以将删除相
2、关信息后得到的文件生成新文件存储,也可以在原文件的基础上作删除(4) 可以用面向过程方法或是面向对象的方法实现。(5) 主界面提供菜单选择的方法选择实现某一功能,一次运行程序能进行多次选择执行不同的功能。#includestdio.hstdlib.hstring.h#define N 3typedef struct z1 char no11; char name15; int scoreN; float sum; float average; int order; struct z1 *next;STUDENT;STUDENT *init();STUDENT *create();STUDENT
3、 *del(STUDENT *h);void print(STUDENT *h);void search1(STUDENT *h);void search2(STUDENT *h);STUDENT *insert(STUDENT *h);void sort(STUDENT *h);void save(STUDENT *h);void tongji(STUDENT *h);int menu_select();STUDENT *load();void inputs(char *prompt,char *s,int count);main() int i; STUDENT *head; head=i
4、nit(); for(;) switch(menu_select() case 0:head=init();break; case 1:head=create(); case 2:head=insert(head); case 3:save(head); case 4:print(head); case 5:search1(head); case 6:head=del(head); case 7:sort(head); case 8:tongji(head); case 9:search2(head); case 10:exit(0); int menu_select() char *menu
5、=*菜单*, 0. 初始化链表1. 输入学生成绩2. 插入学生成绩3. 保存学生记录4. 显示学生记录5. 按学号查找学生信息6. 删除指定学号的学生信息7. 按某一门课对学生成绩排序8. 统计某门课程的学生成绩9. 按姓名查找学生信息10. 退出系统; char s3; int c,i; for(i=0;i=11;i+) printf( %sn,menui); do printf(n请选择010中的某一个选项n); scanf(%s,s); c=atoi(s); while(c10); return c;STUDENT *init() return NULL;STUDENT *create(
6、)int s; STUDENT *h=NULL,*info; info=(STUDENT *)malloc(sizeof(STUDENT); if(!info) printf(n内存不足 return NULL; inputs(输入学号:,info-no,11); if(info-no0=)break;输入姓名:name,15);开始输入%d门课的成绩n,N); s=0; for(i=0;N; do printf(第%d门分数:,i+1); scanf(%d,&info-scorei); if(info-scorei100|info-scorei0); s=s+info-scorei; inf
7、o-sum=s;average=(float)s/N;order=0;next=h; h=info; return h;void inputs(char *prompt,char *s,int count) char p255; printf(prompt);,p); if(strlen(p)count)n太长了! while(strlen(p)count); strcpy(s,p);void print(STUDENT *h) int i=0; STUDENT *p; p=h;nnn*学生*n|序号|学号 | 姓名 | 语文 | 英语 |数学 | 总分 |平均分 |名次 |n|-|-|-|-
8、|-|-|-|-|-|n while(p!=NULL) i+;|%3d |%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|n,i,p-no,p-name,p-score0,p-score1,p-score2,p-sum,p-average,p-order); p=p-next;*end*nSTUDENT *del(STUDENT *h) STUDENT *p,*q; char s11;请输入要删除的学生的学号n scanf( q=p=h; while(strcmp(p-no,s)&p! q=p; if(p=NULL)n链表中没有学号为%s的学生n elsennn*
9、找到了*n|学号 | 姓名 | 语文 | 英语 | 数学 | 总分 | 平均分 | 名次 |n|-|-|-|-|-|-|-|-|n|%-10s|%-8s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|n,p-请按任意键删除n getchar(); if(p=h) h=p- else q-next=p- free(p);n已经删除学号为%s的学生n不要忘了保存数据nvoid search1(STUDENT *h)请输入你要查找的同学的学号n p=p-n没有学号为%s的学生n|学号 | 姓名 | 语文 | 英语 | 数学 | 总分 | 平均分 | 名次 |n|-|-|-|-|-|-|-|
10、-|nvoid search2(STUDENT *h)请输入你要查找的同学的姓名nname,s)&n没有姓名为%s的学生n|学号 | 姓名 | 语文 | 英语 | 数学 | 总分 | 平均分 | 名次 |nSTUDENT *insert(STUDENT *h) STUDENT *p,*q,*info; int s1,i;请输入插入点的学生学号nn请输入新的学生信息n info=(STUDENT *)malloc(sizeof(STUDENT); if(!n内存不足! return NULL; inputs(请输入%d门课的分数n s1=0; do分数%d scanf( if(info-输入数据
11、有误,请重新输入n while(info- s1=s1+info- info-sum=s1;average=(float)s1/N;next=NULL; q=h; q=p;p=p- h=info;next=info;next=p; q-n已经插入了%s这个学生nname);-不要忘了存盘啊-n return(h);void save(STUDENT *h) FILE *fp; char outfile10;请输入保存文件的文件名,例如 c:f1te.txt:,outfile); if(fp=fopen(outfile,wb)=NULL)不能打开文件n exit(1);n正在保存.n fwrit
12、e(p,sizeof(STUDENT),1,fp); fclose(fp);-保存成功!-nvoid sort(STUDENT *h) int i=0,j; STUDENT *p,*q,*t,*h1;请输入要按哪门课程的编号来排序:(0.语文 1.数学 2.英语)nj); h1=h- h- while(h1! t=h1; h1=h1- p=h; q=h; while(t-scorejscorej& q=p; p=p- if(p=q) t- h=t; else q-next=t; p-order=i; print(h); printf(排序成功!void tongji(STUDENT *h) int a,b,i;请输入课程编号ni);请输入分数段:%d,%da,&b); printf( if(p-=a&=b)