printf(\查找结果\\n\ printstart(); printc(); printe(p); printstart(); } else Nofind(); }
void Del(Link l) //删除 {
Node *p,*r;
char findmess[20]; if(!l->next) {
printf(\提示:没有资料可以删除!\\n\ return; }
printf(\确定进行删除操作请按 1,按其他按键退出该操作\\n\\n\\n\\n\
if(menu()==1) {
printf(\请你输入要删除的学号:\ scanf(\
p=Locate(l,findmess,\ if(p) {
r=l;
while(r->next!=p) r=r->next;
r->next=p->next; free(p);
printf(\提示:该学生已经成功删除!\\n\ shoudsave=1; } else
Nofind(); } else exit; }
void Modify(Link l) //修改函数 {
16
Node *p;
char findmess[20]; if(!l->next) {
printf(\提示:没有资料可以修改!\\n\ return; }
printf(\请你输入要修改的学生学号:\ scanf(\
p=Locate(l,findmess,\ if(p) {
printf(\请你输入新学号(原来是%s):\ scanf(\
printf(\请你输入新姓名(原来是%s):\ scanf(\ getchar();
printf(\请你输入新性别(原来是%s):\ scanf(\
printf(\请你输入新的数据结构成绩(原来是%d分):\ scanf(\ getchar();
printf(\请你输入新的数据库成绩(原来是%d分):\ scanf(\ getchar();
printf(\请你输入新的英语成绩(原来是%d分):\ scanf(\
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade; p->data.ave=p->data.totle/3;
printf(\提示:资料修改成功!\\n\ shoudsave=1; } else
Nofind(); }
void Disp(Link l) //显示函数 {
int count=0; Node *p; p=l->next;
if(!p) {
17
printf(\提示:没有资料可以显示!\\n\ return; }
printf(\显示结果\\n\ printstart(); printc(); printf(\ while(p) {
printe(p); p=p->next; }
printstart(); printf(\ }
void Tongji(Link l) //统计函数 {
Node *pm,*pe,*pc,*pt,*pa; //用于指向分数最高的接点 Node *r=l->next; if(!r) {
printf(\提示:没有资料可以统计!\\n\ return ; }
pm=pe=pc=pt=pa=r; while(r!=NULL) {
if(r->data.cgrade>=pc->data.cgrade) pc=r;
if(r->data.mgrade>=pm->data.mgrade) pm=r;
if(r->data.egrade>=pe->data.egrade) pe=r;
if(r->data.totle>=pt->data.totle) pt=r;
if(r->data.ave>=pa->data.ave) pa=r;
r=r->next; }
printf(\统计结果--------------------------------\\n\ printf(\总分最高者:\\t%s %d分\\n\ printf(\平均分最高者:\\t%s %d分\\n\ printf(\英语最高者:\\t%s %d分\\n\
printf(\数据库最高者:\\t%s %d分\\n\
18
printf(\数据结构最高者:\\t%s %d分\\n\ printstart(); }
void Save(Link l) //保存函数 {
FILE* fp; Node *p;
int flag=1,count=0;
fp=fopen(\ if(fp==NULL) {
printf(\提示:重新打开文件时发生错误!\\n\ exit(1); }
p=l->next; while(p) {
if(fwrite(p,sizeof(Node),1,fp)==1) {
p=p->next; count++; } else {
flag=0; break; } }
if(flag) {
printf(\提示:文件保存成功.(有%d条记录已经保存.)\\n\ shoudsave=0; }
fclose(fp); }
void main() {
Link l;//连表
FILE *fp; //文件指针 char ch; char jian;
19
int count=0; Node *p,*r;
l=(Node*)malloc(sizeof(Node)); l->next=NULL; r=l;
fp=fopen(\ if(fp==NULL) {
fp=fopen(\ exit(0); }
printf(\提示:文件已经打开,正在导入记录......\\n\
while(!feof(fp)) {
p=(Node*)malloc(sizeof(Node));
if(fread(p,sizeof(Node),1,fp)) //将文件的内容放入接点中 {
p->next=NULL; r->next=p;
r=p; //将该接点挂入连中 count++; } }
fclose(fp); //关闭文件
printf(\提示:记录导入完毕,共导入%d条记录.\\n\
for(;;) {
switch(menu()) {
case 1:Add(l);break; //增加学生 case 2:Del(l);break;//删除学生 case 3:Qur(l);break;//查询学生 case 4:Modify(l);break;//修改学生 case 5:Disp(l);break;//显示学生 case 6:Tongji(l);break;//统计学生 case 7:Save(l);break;//保存学生 default: Wrong(); getchar(); break; } } }
20