} system(\ system(\} void menu() //显示函数----屏幕 { printf(\ printf(\学生信息管理系统 |\\n\ printf(\、 信息输入 |\\n\ printf(\、 显示信息 |\\n\ printf(\、 查找学生信息 |\\n\ printf(\、 删除指定学生的信息 |\\n\ printf(\、 插入学生信息 |\\n\ printf(\、 排序 |\\n\ printf(\、 修改 |\\n\ printf(\、 保存 |\\n\ printf(\、 退出系统 |\\n\ printf(\ return; } void paixuxh(student *head) //利用结点交换的方法对学号进行排序 { student *p,*prep,*temp,*tail; //定义所需结点 tail=NULL; while( head->next != tail ) { prep = head; p = head->next; while( p->next != tail ) { if(strcmp(p->num,p->next->num)>0) //利用字符串比较函数对学号比较大小 { temp = p->next; //临时保存p的后继结点的值 prep->next = p->next; p->next = p->next->next; prep->next->next = p; p = temp; //完成交换 } // 节点后移 p = p->next; prep = prep->next; } tail = p; } // 第一个while printf(\排序成功\\n\21 } void paixusf(student *&L) //将学生单链表按数分成绩递减排序strcmp( { student *p,*pre,*q; p=L->next->next; //p指向L的第2个数据结点 L->next->next=NULL; //构造只含一个数据结点的有序表 while (p!=NULL) { q=p->next; //q保存*p结点后继结点的指针 pre=L; //从有序表开头进行比较,pre指向插入*p的前驱结点 while (pre->next!=NULL && pre->next->math>p->math) pre=pre->next; //在有序表中找插入*p的前驱结点*pre p->next=pre->next; //将*pre之后插入*p pre->next=p; p=q; //扫描原单链表余下的结点 } } void paixuyy(student *&L) //将学生单链表按英语成绩递减排序 { student *p,*pre,*q; p=L->next->next; L->next->next=NULL; while (p!=NULL) { q=p->next; pre=L; while (pre->next!=NULL && pre->next->English>p->English) pre=pre->next; p->next=pre->next; pre->next=p; p=q; } } void paixusj(student *&L) //将学生单链表按数据结构成绩递减排序 { student *p,*pre,*q; p=L->next->next; L->next->next=NULL; while (p!=NULL) { q=p->next; pre=L; 22 while (pre->next!=NULL && pre->next->Data>p->Data) pre=pre->next; p->next=pre->next; pre->next=p; p=q; } } void Print(student *head ) //输出函数 { printf(\学号 姓名 数分 英语 数据结构 \\n\ while( head != NULL ){ printf(\h,head->Data); head = head->next; } system(\ system(\} void Saveandfree() //将所有记录写入文件 { FILE *fp; //定义文件指针 student *p=head->next; char filename[20]; //定义文件名 printf(\保存数据\\n\输入文件名 printf(\输入文件名:\ scanf(\ if((fp=fopen(filename,\打开文件 { printf(\打开文件失败\\n\ system(\ return; } fprintf(fp,\学号 姓名 数分 英语 数据结构 \\n\ while(p!=NULL) //循环写入文件 { fprintf(fp,\>Data); p=p->next; } 23 fclose(fp); //关闭文件 printf(\成功!\\n\返回成功信息 system(\ system(\} void xiugei(student *head) //学生信息修改函数 { char xg[20]; //保存修改者的学号 char num1[20]; //保存修改时输入的学号 char name1[20]; //保存修改时输入的名字 int math1; //保存修改时输入的数分 int English1; //保存修改时输入的英语 int Data1,t=1; //保存修改时输入的数据结构,t用于辅助判断 student *p=head->next; printf(\输入需要修改的学生的学号:\ scanf(\ while(p!=NULL) { if(strcmp(p->num,xg)==0) //查找成功,并显示被修改者的信息 { printf(\这是你要修改的学生的信息\\n\ printf(\学号 姓名 数分 英语 数据结构 \\n\ printf(\a); printf(\请输入你要修改的学生的学号、姓名、数分、英语、数据结构:\\n\ scanf(\ strcpy(p->num,num1); //字符串复制函数修改学号,名字 strcpy(p->name,name1); p->math=math1;p->English=English1;p->Data=Data1;//修改成绩 printf(\修改成功\\n\ t=0; //修改成功,赋值为0 } p=p->next; //指针移动 } if(t==1) //查找失败,无修改者信息 { printf(\找不到要修改的学号!\\n\ } system(\ system(\} 24 //主函数 int main(void) { int a,c; //辅助选择 menu(); //调用显示函数 int choice; while(1) { printf(\请选择相应的功能:\ scanf(\ switch(a) { case 0: return 0; //退出系统 case 1: //学生信息输入 create(); //输入函数 menu(); break; case 2: //信息显示 if(head) //判断链表是否空 { display(); //显示函数 menu();} else //空链表,提示建表 { printf(\链表为空,请先建立链表!\\n\ Sleep(666); system(\ menu(); } break; case 3: //查找信息 if(head) { printf(\请选择是按学号查找还是按姓名查找,若是学号就按1,姓名按2\\n\ scanf(\ if(choice==1) //按学号查找 { search1(); //学号查找函数 } 25
好文档 - 专业文书写作范文服务资料分享网站