有bug,不过还能凑合用。。。。。
#include <iostream> #include <stdio.h> #include<stdlib.h> #include<windows.h> using namespace std; struct xs { int xh;char xb,xm[20]; double cj1,cj2,zong,jun; xs*next;int mc; }; xs *h=NULL; void cc(xs * h,const char * filename) { FILE *fp=fopen(filename,"w"); xs*p=h; if(h==NULL) { printf("\n 您还未输入数据呢!请到1中输入!正在跳转……"); Sleep(2000);system("cls");return; } while(p!=NULL) { fprintf(fp,"%d %s %c %.2f %.2f\n",p->xh,p->xm,p->xb,p->cj1,p->cj2); p=p->next; } fclose(fp); system("cls"); printf("\n 已成功存储!正在返回……");Sleep(1000);system("cls"); } void change(xs*a1,xs*a2) { int xh,mc;char xm[20],xb; double cj1,cj2,zong,jun; xh=a1->xh;strcpy(xm,a1->xm); xb=a1->xb;cj1=a1->cj1;cj2=a1->cj2;zong=a1->zong;jun=a1->jun;mc=a1->mc; a1->xh=a2->xh;strcpy(a1->xm,a2->xm); a1->xb=a2->xb;a1->cj1=a2->cj1;a1->cj2=a2->cj2;a1->zong=a2->zong;a1->jun=a2->jun;a1->mc=a2->mc; a2->xh=xh;strcpy(a2->xm,xm); a2->xb=xb;a2->cj1=cj1;a2->cj2=cj2;a2->zong=zong;a2->jun=jun;a2->mc=mc; } xs*dq(xs*h) { FILE *fp=fopen("amazing.txt","r"); if(!fp || feof(fp)) { system("cls"); printf("\n 文件里未存储文件!请在1中输入!正在返回……"); Sleep(1000);system("cls"); } int xh; while(fscanf(fp,"%d",&xh)!=EOF) { xs*p=(xs*)malloc(sizeof(xs)); p->xh=xh; fscanf(fp," %s %c %lf %lf\n",&p->xm,&p->xb,&p->cj1,&p->cj2); p->zong=p->cj1+p->cj2;p->jun=(p->zong)/2.0; if(h==NULL) { h=p;h->next=NULL; } else { xs *pp=h; while(pp->next!=NULL) { pp=pp->next; } pp->next=p; p->next=NULL; } } xs*p0=h,*p=h->next; while(p0!=NULL) { while(p!=NULL) { if(p0->zong<p->zong) { change(p0,p); } p=p->next; } p0=p0->next; if(p0!=NULL) p=p0->next; } int ppp=1;xs*p3=h; while(p3!=NULL) { p3->mc=ppp++; p3=p3->next; } system("cls"); printf("\n 已成功读取!正在返回……");Sleep(1000);system("cls"); return h; } xs * dele(xs*h) { system("cls"); printf("\n 请输入您想删除的学生学号\n ");long long xh; cin>>xh; xs *p,*pp;p=h;pp=p->next;int flag=0; if(p==NULL) { printf(" 目前还未输入呢!请在1中输入!跳转中……");Sleep(2000);system("cls"); return h; } if(h->xh==xh) { printf(" 你确定想删除吗?1:确定 2:取消\n "); int gg;cin>>gg; if(gg==2) { system("cls"); return h; } xs*x=h->next; free(h); h=x; xs*p0=h,*p1=h->next; while(p0!=NULL) { while(p1!=NULL) { if(p0->zong<p1->zong) { change(p0,p1); } p1=p1->next; } p0=p0->next; if(p0!=NULL) p1=p0->next; } int ppp=1;xs*p3=h; while(p3!=NULL) { p3->mc=ppp++; p3=p3->next; } printf(" 已成功删除!正在返回……"); Sleep(1000);system("cls"); return h; } while(pp!=NULL) { if(pp->xh==xh) { printf(" 你确定想删除吗?1:确定 2:取消\n "); int gg;cin>>gg; if(gg==2) { system("cls"); return h; } p->next=pp->next; free(pp); xs*p0=h,*p1=h->next; while(p0!=NULL) { while(p1!=NULL) { if(p0->zong<p1->zong) { change(p0,p1); } p1=p1->next; } p0=p0->next; if(p0!=NULL) p1=p0->next; } int ppp=1;xs*p3=h; while(p3!=NULL) { p3->mc=ppp++; p3=p3->next; } flag=1; break; } p=pp; pp=p->next; } if(flag==0) { printf(" 未找到有该学号的学生!无需删除或重新输入,正在跳转……");Sleep(2000);system("cls"); return h; }else { printf(" 已成功删除!正在返回……"); Sleep(1000);system("cls"); return h; } } xs*px(xs*h) { if(h==NULL) { printf(" 目前还未输入呢!请在1中输入!跳转中……"); Sleep(1000);system("cls"); } printf("\n 请对应输入您要排序的内容:\n 1:高数成绩 2:程序与设计成绩 3:总成绩\n "); long long x;cin>>x; while(x!=1&&x!=2&&x!=3) { printf(" 请重新正确对应数字输入1或2或3!"); cin>>x; } if(x==1) { printf(" 您想从小到大还是从大到小排序呢?1.从小到大 2.从大到小\n "); long long t;cin>>t; if(t==1) { xs*p0=h,*p=h->next; while(p0!=NULL) { while(p!=NULL) { if(p0->cj1>p->cj1) { change(p0,p); } p=p->next; } p0=p0->next; if(p0!=NULL) p=p0->next; } printf(" 您已成功从小到大以高数成绩排序!正在跳转……"); Sleep(1000);system("cls");return h; } else { xs*p0=h,*p=h->next; while(p0!=NULL) { while(p!=NULL) { if(p0->cj1<p->cj1) { change(p0,p); } p=p->next; } p0=p0->next; if(p0!=NULL) p=p0->next; } printf(" 您已成功从大到小以高数成绩排序!正在跳转……"); Sleep(1000);system("cls");return h; } } else if(x==2) { printf(" 您想从小到大还是从大到小排序呢?1.从小到大 2.从大到小\n "); long long t;cin>>t; if(t==1) { xs*p0=h,*p=h->next; while(p0!=NULL) { while(p!=NULL) { if(p0->cj2>p->cj2) { change(p0,p); } p=p->next; } p0=p0->next; if(p0!=NULL) p=p0->next; } printf(" 您已成功从小到大以程序设计成绩排序!正在跳转……"); Sleep(1000);system("cls");return h; } else { xs*p0=h,*p=h->next; while(p0!=NULL) { while(p!=NULL) { if(p0->cj2<p->cj2) { change(p0,p); } p=p->next; } p0=p0->next; if(p0!=NULL) p=p0->next; } printf(" 您已成功从大到小以程序设计成绩排序!正在跳转……"); Sleep(1000);system("cls");return h; } }else if(x==3) { printf(" 您想从小到大还是从大到小排序呢?1.从小到大 2.从大到小\n "); long long t;cin>>t; if(t==1) { xs*p0=h,*p=h->next; while(p0!=NULL) { while(p!=NULL) { if(p0->zong>p->zong) { change(p0,p); } p=p->next; } p0=p0->next; if(p0!=NULL) p=p0->next; } printf(" 您已成功从小到大以总成绩排序!正在跳转……"); Sleep(1000);system("cls");return h; } else { xs*p0=h,*p=h->next; while(p0!=NULL) { while(p!=NULL) { if(p0->zong<p->zong) { change(p0,p); } p=p->next; } p0=p0->next; if(p0!=NULL) p=p0->next; } printf(" 您已成功从大到小以总成绩排序!正在跳转……"); Sleep(1000);system("cls");return h; } } return h; } void shuchu(xs*pp) { printf("%4d %10s",pp->xh,pp->xm); if(pp->xb=='f')printf(" 女 "); else printf(" 男 "); printf(" %4.2f %4.2f %4.2f %4.2f %d\n",pp->cj1,pp->cj2,pp->zong,pp->jun,pp->mc); } void shuru(xs*p) { printf(" 请输入学号:\n "); cin>>p->xh; printf(" 请输入姓名:\n "); cin>>p->xm; printf(" 请输入姓别(m或f):\n "); cin>>p->xb; while(p->xb!='m'&&p->xb!='f') { printf(" 请正确输入性别!男生请输入m,女生请输入f\n "); cin>>p->xb; } printf(" 请输入高数成绩:\n "); cin>>p->cj1; printf(" 请输入程序与设计成绩:\n "); cin>>p->cj2; p->zong=p->cj1+p->cj2; p->jun=p->zong/2.0; } void cx(xs*h) { printf("\n 请输入您想查询的学生学号\n "); long long xh; cin>>xh; xs*p=h; if(h==NULL) { printf(" 目前还未输入呢!请在1中输入!跳转中……");Sleep(2000);system("cls"); return; } while(p!=NULL) { if(p->xh==xh) { shuchu(p); printf(" 返回请输入1:\n "); bool m;cin>>m; while(m!=1) { system("cls"); printf(" 请重新输入1!\n "); cin>>m; } system("cls"); return; } p=p->next; } printf(" 未找到该学号的学生!正在返回……");Sleep(1000);system("cls"); } xs*xg(xs*h) { system("cls"); printf("\n 请输入您想更改的学生学号\n ");long long xh; cin>>xh; xs *p;p=h; if(p==NULL) { printf(" 目前还未输入呢!请在1中输入!跳转中……");Sleep(2000);system("cls"); return h; } while(p!=NULL) { if(p->xh==xh) { printf(" 请输入你想改的学生信息\n"); Sleep(1000);system("cls"); shuru(p); xs*p0=h,*p1=h->next; while(p0!=NULL) { while(p1!=NULL) { if(p0->zong<p1->zong) { change(p0,p1); } p1=p1->next; } p0=p0->next; if(p0!=NULL) p1=p0->next; } int ppp=1;xs*p3=h; while(p3!=NULL) { p3->mc=ppp++; p3=p3->next; } printf(" 修改成功!正在返回……"); Sleep(1000);system("cls"); return h; } p=p->next; } printf(" 未找到有该学号的学生!正在返回……"); Sleep(1000);system("cls"); return h; } void sc(xs * h) { if(h==NULL) { printf("\n 目前还未输入呢!请在1中输入!跳转中……");Sleep(2000);system("cls"); } else { printf("\n 学号 姓名 性别 高数成绩 程序与设计成绩 总分 平均分 名次\n"); xs*pp=h; while(pp!=NULL) { shuchu(pp); pp=pp->next; } } } xs *zj(xs *h) { printf(" 您要增加多少人的信息?\n "); long long x; cin>>x; printf(" 好的,正在跳转……"); Sleep(1000); long long o=1; while(x--) { system("cls"); printf("\n 第%I64d人:\n",o++); xs *p=(xs*)malloc(sizeof(xs)); shuru(p); if(h==NULL) { h=p;h->next=NULL; } else { xs *pp=h; while(pp->next!=NULL) { pp=pp->next; } pp->next=p; p->next=NULL; } xs*p0=h,*p1=h->next; while(p0!=NULL) { while(p1!=NULL) { if(p0->zong<p1->zong) { change(p0,p1); } p1=p1->next; } p0=p0->next; if(p0!=NULL) p1=p0->next; } int ppp=1;xs*p3=h; while(p3!=NULL) { p3->mc=ppp++; p3=p3->next; } } printf(" 增加成功!跳转中……"); Sleep(1000); system("cls"); return h; } int main() { printf("\n 1:增加学生信息 5:删除学生信息\n"); printf(" 2:修改学生信息 6:对学生信息进行排序\n"); printf(" 3:显示学生信息 7:保存学生信息至纪录文件\n"); printf(" 4:查询学生信息 8:从纪录文件读取学生信息\n"); printf(" 0:运行结束\n "); long long u; cin>>u; while(u!=0) { system("cls"); switch(u) { case 1:h=zj(h);break; case 2:h=xg(h);break; case 3:sc(h);break; case 4:cx(h);break; case 5:h=dele(h);break; case 6:h=px(h);break; case 7:cc(h,"amazing.txt");break; case 8:h=dq(h);break; default:system("cls");printf(" 请重新对应输入0~8的数字,跳转中……\n");Sleep(1000);system("cls"); } if(u!=3) { printf("\n 1:增加学生信息 5:删除学生信息\n"); printf(" 2:修改学生信息 6:对学生信息进行排序\n"); printf(" 3:显示学生信息 7:保存学生信息至纪录文件\n"); printf(" 4:查询学生信息 8:从纪录文件读取学生信息\n"); printf(" 0:运行结束\n "); }else { printf("\n 返回请输入1:\n ");bool c; cin>>c;system("cls"); printf("\n 1:增加学生信息 5:删除学生信息\n"); printf(" 2:修改学生信息 6:对学生信息进行排序\n"); printf(" 3:显示学生信息 7:保存学生信息至纪录文件\n"); printf(" 4:查询学生信息 8:从纪录文件读取学生信息\n"); printf(" 0:运行结束\n "); } cin>>u; } return 0; }