有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;
}