#includestdio.h/*I/O函数*/#includestdlib.h/*其它说明*/#includestring.h/*字符串函数*/#includeconio.h/*屏幕操作函数*/#includemem.h/*内存操作函数*/#includectype.h/*字符操作函数*/#includealloc.h/*动态地址分配函数*/#defineN3/*定义常数*/typedefstructz1/*定义数据结构*/{charno[11];charname[15];intscore[N];floatsum;floataverage;intorder;structz1*next;}STUDENT;/*以下是函数原型*/STUDENT*init();/*初始化函数*/STUDENT*create();/*创建链表*/STUDENT*delete(STUDENT*h);/*删除记录*/voidprint(STUDENT*h);/*显示所有记录*/voidsearch(STUDENT*h);/*查找*/voidsave(STUDENT*h);/*保存*/STUDENT*load();/*读入记录*/voidcomputer(STUDENT*h);/*计算总分和均分*/STUDENT*insert(STUDENT*h);/*插入记录*/voidappend();/*追加记录*/voidcopy();/*复制文件*/STUDENT*sort(STUDENT*h);/*排序*/STUDENT*index(STUDENT*h);/*索引*/voidtotal(STUDENT*h);/*分类合计*/intmenu_select();/*菜单函数*//******主函数开始*******/main(){inti;STUDENT*head;/*链表定义头指针*/head=init();/*初始化链表*/clrscr();/*清屏*/for(;;)/*无限循环*/{switch(menu_select())/*调用主菜单函数,返回值整数作开关语句的条件*/{/*值不同,执行的函数不同,break不能省略*/case0:head=init();break;/*执行初始化*/case1:head=create();break;/*创建链表*/case2:head=delete(head);break;/*删除记录*/case3:print(head);break;/*显示全部记录*/case4:search(head);break;/*查找记录*/case5:save(head);break;/*保存文件*/case6:head=load();break;/*读文件*/case7:computer(head);break;/*计算总分和均分*/case8:head=insert(head);break;/*插入记录*/case9:copy();break;/*复制文件*/case10:head=sort(head);break;/*排序*/case11:append();break;/*追加记录*/case12:head=index(head);break;/*索引*/case13:total(head);break;/*分类合计*/case14:exit(0);/*如菜单返回值为14程序结束*/}}}/*菜单函数,返回值为整数*/menu_select(){char*menu[]={***************MENU***************,/*定义菜单字符串数组*/0.initlist,/*初始化*/1.Enterlist,/*输入记录*/2.Deletearecordfromlist,/*从表中删除记录*/3.printlist,/*显示单链表中所有记录*/4.Searchrecordonname,/*按照姓名查找记录*/5.Savethefile,/*将单链表中记录保存到文件中*/6.Loadthefile,/*从文件中读入记录*/7.computethescore,/*计算所有学生的总分和均分*/8.insertrecordtolist,/*插入记录到表中*/9.copythefiletonewfile,/*复制文件*/10.sorttomakenewfile,/*排序*/11.appendrecordtofile,/*追加记录到文件中*/12.indexonnomber,/*索引*/13.totalonnomber,/*分类合计*/14.Quit};/*退出*/chars[3];/*以字符形式保存选择号*/intc,i;/*定义整形变量*/gotoxy(1,25);/*移动光标*/printf(pressanykeyentermenu......\n);/*压任一键进入主菜单*/getch();/*输入任一键*/clrscr();/*清屏幕*/gotoxy(1,1);/*移动光标*/textcolor(YELLOW);/*设置文本显示颜色为黄色*/textbackground(BLUE);/*设置背景颜色为蓝色*/gotoxy(10,2);/*移动光标*/putch(0xc9);/*输出左上角边框┏*/for(i=1;i44;i++)putch(0xcd);/*输出上边框水平线*/putch(0xbb);/*输出右上角边框┓*/for(i=3;i20;i++){gotoxy(10,i);putch(0xba);/*输出左垂直线*/gotoxy(54,i);putch(0xba);}/*输出右垂直线*/gotoxy(10,20);putch(0xc8);/*输出左上角边框┗*/for(i=1;i44;i++)putch(0xcd);/*输出下边框水平线*/putch(0xbc);/*输出右下角边框┛*/window(11,3,53,19);/*制作显示菜单的窗口,大小根据菜单条数设计*/clrscr();/*清屏*/for(i=0;i16;i++)/*输出主菜单数组*/{gotoxy(10,i+1);cprintf(%s,menu[i]);}textbackground(BLACK);/*设置背景颜色为黑色*/window(1,1,80,25);/*恢复原窗口大小*/gotoxy(10,21);/*移动光标*/do{printf(\nEnteryouchoice(0~14):);/*在菜单窗口外显示提示信息*/scanf(%s,s);/*输入选择项*/c=atoi(s);/*将输入的字符串转化为整形数*/}while(c0||c14);/*选择项不在0~14之间重输*/returnc;/*返回选择项,主程序根据该数调用相应的函数*/}STUDENT*init(){returnNULL;}/*创建链表*/STUDENT*create(){inti;ints;STUDENT*h=NULL,*info;/*STUDENT指向结构体的指针*/for(;;){info=(STUDENT*)malloc(sizeof(STUDENT));/*申请空间*/if(!info)/*如果指针info为空*/{printf(\noutofmemory);/*输出内存溢出*/returnNULL;/*返回空指针*/}inputs(enterno:,info-no,11);/*输入学号并校验*/if(info-no[0]=='@')break;/*如果学号首字符为@则结束输入*/inputs(entername:,info-name,15);/*输入姓名,并进行校验*/printf(pleaseinput%dscore\n,N);/*提示开始输入成绩*/s=0;/*计算每个学生的总分,初值为0*/for(i=0;iN;i++)/*N门课程循环N次*/{do{printf(score%d:,i+1);/*提示输入第几门课程*/scanf(%d,&info-score[i]);/*输入成绩*/if(info-score[i]100||info-score[i]0)/*确保成绩在0~100之间*/printf(baddata,repeatinput\n);/*出错提示信息*/}while(info-score[i]100||info-score[i]0);s=s+info-score[i];/*累加各门课程成绩*/}info-sum=s;/*将总分保存*/info-average=(float)s/N;/*求出平均值*/info-order=0;/*未排序前此值为0*/info-next=h;/*将头结点做为新输入结点的后继结点*/h=info;/*新输入结点为新的头结点*/}return(h);/*返回头指针*/}/*输入字符串,并进行长度验证*/inputs(char*prompt,char*s,intcount){charp[255];do{printf(prompt);/*允鞠提示信息*/scanf(%s,p);/*输入字符串*/if(strlen(p)count)printf(\ntoolong!\n);/*进行长度校验,超过count值重输入*/}while(strlen(p)count);strcpy(s,p);/*将输入的字符串拷贝到字符串s中*/}/*输出链表中结点信息*/voidprint(STUDENT*h){inti=0;/*统计记录条数*/STUDENT*p;/*移动指针*/clrscr();/*清屏*/p=h;/*初值为头指针*/printf(\n\n\n****************************STUDENT********************************\n);printf(|rec|nO|name|sc1|sc2|sc3|sum|ave|order|\n);printf(|---|----------|---------------|----|----|----|--------|-------|-----|\n);while(p!=NULL){