#*头文件说明*/#*字符串函数*/#*内存操作函数*/#*字符操作函数*/#*动态地址分配函数*/# )*定义结构体数组用于缓存数据*/{];];];S;/*各函数声明*/S *; /*初始化函数*/; /*菜单函数*/S *; /*创建链表*/ * /* 显示全部记录*/ * /*查找记录*/S * * /*删除记录*/S * * /*排序*/S * * * /*插入记录*/ * /*保存文件*/S *; /*读文件*//*主函数界面*/{S *; /*链表初始化,使;) /*循环无限次*/{){:;:::::*&::; :); /*如菜单返回值为9则程序结束*/}}}/*初始化函数*/S *{*返回空指针*/}/*菜单选择函数*/{n;d; /*定义时间结构体*/d); /*读取系统日期并把它放到结构体to ...."); /*按任一键进入主菜单*/; /*从键盘读取一个字符,但不显示于屏幕*/; /*清屏*/********************************************************************************\n");\t\t to\n");\n");**************************************************************************\n");\t\t\n"); /*输入学生成绩记录*/\t\t\n"); /*显示*/\t\t\on n"); /*寻找*/\t\t\a n"); /*删除*/\t\t\to a n"); /*排序*/\t\t\to n"); /*插入*/\t\t\n"); /*保存*/\t\t\n"); /*读取*/\t\t\n"); /*退出*/\n\t\t n");********************************************************************************\n");\t\t\t\t%d\\%d\\%d\n", /*显示当前系统日期*/\n\t\t\~9):");%d",&n);} /*如果选择项不在1~9之间则重输*/n); /*返回选择项,主函数根据该数调用相应的函数*/}/*输入函数*/S *{i,s;S *p; /* ;;){p=(S *)); /*开辟一个新的单元*/p) /*如果指针{\of ); /*输出内存溢出*/ /*返回头指针,下同*/}:");%s",p->if(p->]=='0') *如果学号首字符为0则结束输入*/);%s",p->d n",3); /*提示开始输入成绩*/s=0; /*计算每个学生的总分,初值为0*/i=0;i]);if(p->i]i]>100) /*确保成绩在0~100之间*/n");}p->i]i]>100);s=s+p->i]; /*累加各门成绩*/}p->s; /*将总分保存*/p->s/3; /*先用强制类型转换将求平均值*/p->; /*未排序前此值为0*/p->*将头结点做为新输入结点的后继结点*/p; /*新输入结点为新的头结点*/}}/* 显示全部记录函数*/ *i=0; /* 统计记录条数*/S *p; /*移动指针*/;p=*初值为头指针*/\n************************************S************************************\n");n"); | \n");n");p!=i++;| %3d | %4s | % %3d | %3d | %3d |%3d | % %n",i, p->p->p->],p->],p->],p->p->p->p=p->n");**************************************************************************\n");}/*查找记录函数*/ *S *p; /* 移动指针*/s[5]; /*存放姓名用的字符数组*/;n");%s",s);p=*将头指针赋给p*/p->s) && p != *当记录的姓名不是要找的,或指针不为空时*/p=p->*移动指针,指向下一结点*/if(p!=*如果指针不为空*/{\n***********************************************************************\n");n");| \n");n");| %4s | %4s | %3d | %3d | %3d | %3d| % %n",p->p->p->],p->],p->],p->p->p->n");***************************************************************************\n");}\is no s S on n",s); /*显示没有该学生*/}/*删除记录函数*/S * *n;S **c,s[6]; /*s[6]用来存放学号,;");%s",s);p1=p2=*给s) && = *当记录的学号不是要找的,或指针不为空时*/ {p2=*将p1=*将}if(s)==0) /*学号找到了*/{************************************************************************\n");n");| \n");n");| %4s | %4s | %3d | %3d | %3d | %3d| % %n",],],],n");***************************************************************************\n");to Y/N ?"); /*提示是否要删除,输入则退出*/;){%c",&c);if(c=='n'||c=='N') *如果不删除,则跳出本循环*/if(c=='y'||c=='Y'){if(*若明被删结点是首结点*/*把第二个结点地址赋予*否则将一下结点地址赋给前一结点地址*/n=\s S n",s);t to n");*删除后就跳出循环*/}}}\is no s S on n",s); /*找不到该结点*/}/*排序函数*/S * *i=0; /*保存名次*/S *t,**定义临时指针*/*将原表的头指针所指的下一个结点作头指针*/*第一个结点为新表的头结点*/*当原表不为空时,进行排序*/{t=*取原表的头结点*/*原表头结点指针后移*/p1=*设定移动指针头指针开始*/p2=*设定移动指针值为头指针*/t->*作成绩平均分比较*/{p2=*待排序点值小,则新表指针后移*/p1=if(*明待排序点值大,应排在首位*/{t->*待排序点的后继为p*/t; /*新头结点为待排序点*/}*待排序点应插入在中间某个位置{t->*t; /*}}p1=*已排好序的头指针赋给备填写名次*/*当行下列操作*/{i++; /*结点序号*/i; /*将结点序号赋值给名次*/p1=*指针后移*/}is n"); /*排序成功*/}/*插入记录函数*/S * * *S *p2;n,i;p1=*使p0=*\a n"); /*提示输入记录信息*/);%s",);%s",d n",3);; /*保存新记录的总分,初值为0*/i=0;i]);if(i]>100||i]i]>100||i]i]; /*累加各门成绩*/}*将总分存入新记录中*/;;if(*原来的链表是空表*/{p0; /*使&({p2=*使p1=*}if(if(p1)*插到原来第一个结点之前*/*插到p0; /*插到最后的结点之后*/}n=n+1; /*结点数加1*/ /*调用排序的函数,将学生成绩重新排序*/\s n",t to n");}/*保存数据到文件函数*/ **定义指向文件的指针*/S *p; /* 定义移动指针*/0];c:\\n");%s",fp=)==*为输出打开一个二进制文件,为只写方式*/{n");*若打不开则返回菜单*/}\....\n");p=*移动指针从头指针开始*/p!=*如{p,L,1, /*写入一条记录*/p=p->*指针后移*/} /*关闭文件*/n");}/* 从文件读数据函数*/S *{S **定义记录指针变量*/* 定义指向文件的指针*/0];c:\\n");%s",fp=)==*打开一个二进制文件,为只读方式*/{n");}\n");S *)); /*开辟一个新单元*/of n");}*申请到空间,将其作为头指针*/ /*循环读数据直到文件尾结束*/{if(,1,=1) *如果没读到数据,跳出循环*/S *)); /*为下一个结点开辟空间*/of n");}p2=*使p1=*指针后移,新读入数据链到当前表尾*/}*最后一个结点的后继指针为空*/to n");}
展开阅读全文