#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student
{
int num;
char name[10];
int yingyu;
int shuxue;
int chengji;
struct student *pnext;
}stu;
stu *createlist()
{
stu *p;
p=(stu*)malloc(sizeof(stu));
p->pnext=NULL;
return p;
}
//添加结点=====================
void addnode(stu*p)
{
stu *pnew=NULL;
int n;
printf("输入几个学员信息");
scanf("%d",&n);
printf("请输入学员的信息\n");
printf("学号\t姓名\t英语\t数学\n");
for(int i=0;i<n;i++)
{
pnew=(stu*)malloc(sizeof(stu));
pnew->chengji=0;
scanf("%d%s%d%d",&pnew->num,pnew->name,&pnew->shuxue,&pnew->yingyu);
pnew->chengji=pnew->shuxue+pnew->yingyu;
pnew->pnext=NULL;
p->pnext=pnew;
p=p->pnext;
}
}
//添加数据======================================================================
void addstudent(stu *p)
{
int num;
stu *pnew=NULL;
pnew=(stu*)malloc(sizeof(stu));
printf("输入插入前的学号:");
scanf("%d",&num);
p=p->pnext;
while(p!=NULL)
{
if(p->num==num)
{
printf("输入插入的学号;");
scanf("%d",&pnew->num);
printf("姓名:");
scanf("%s",pnew->name);
printf("英语:");
scanf("%d",&pnew->yingyu);
printf("数学:");
scanf("%d",&pnew->shuxue);
pnew->chengji=pnew->shuxue+pnew->yingyu;
pnew->pnext=p->pnext;
p->pnext=pnew;
break;
}
p=p->pnext;
}
}
//输出数据===========================================================================
void printfadd(stu *p)
{
p=p->pnext;
printf("****************************************************************\n");
printf("学号\t姓名\t英语\t数学\t成绩\n");
while(p!=NULL)
{
printf("%d\t%s\t%d\t%d\t%d\n",p->num,p->name,p->yingyu,p->shuxue,p->chengji);
printf("==================================================================\n");
p=p->pnext;
}
printf("****************************************************************\n");
}
//删除============================================================================
void deleate(stu *p)
{
stu *ptemp=p;
p=p->pnext;
int num;
printf("请问要删除的学生学号是;");
scanf("%d",&num);
while(p!=NULL)
{
if(p->num==num)
{
ptemp->pnext=p->pnext;
free(p);
break;
}
p=p->pnext;
ptemp=ptemp->pnext;
}
}
//查找===========================================================
void search(stu *p)
{
int num;
p=p->pnext;
printf("输入查找的学号:");
scanf("%d",&num);
while((p!=NULL)&&(p->num!=num))
p=p->pnext;
if(p!=NULL)
{
printf("学号\t姓名\t英语\t数学\t成绩\n");
printf("%d\t%s\t%d\t%d\t%d\n",p->num,p->name,p->yingyu,p->shuxue,p->chengji);
printf("================\n");
}
else
{
printf("未找到此学生\n");
}
}
//修改数据===========================================================
void rework(stu *p)
{
int number;
p=p->pnext;
printf("输入需要修改的数");
scanf("%d",&number);
getchar();
while(p!=NULL)
{
if(p->num==number)
{
printf("输入修改的学号");
scanf("%d",&p->num);
printf("姓名:");
scanf("%s",p->name);
printf("英语:");
scanf("%d",&p->yingyu);
printf("数学:");
scanf("%d",&p->shuxue);
printf("成绩:");
scanf("%d",&p->chengji);
break;
}
p=p->pnext;
}
}
void savefile(stu *p0) //写入文件
{
//int m = 0, n = 0;
FILE *fp;
if(p0 == NULL)
{
printf("\n\n\n存储信息为空!!!\n");
if ((fp = fopen("stu.dat", "wb+")) == NULL)
{
printf("\n\n\n删除存储文件失败!!!\n");
exit(0);
}
return;
}
if ((fp = fopen("stu.dat", "wb+")) == NULL)
{
printf("\n\n\n文件打开失败!!!\n");
return;
}
do
{
if ((fwrite(p0, sizeof(stu), 1, fp) != 1))
printf("文件写入失败!!!\n");
p0 = p0->pnext;
} while (p0 != NULL );
//printf("应写入%d名学生信息,已写入%d名学生的信息!!!\n", m, n);
fclose(fp);
}
struct Student *read() // 读取链表
{
stu *p0,*p1,*head;
FILE *fp;
if ((fp = fopen("stu.dat", "rb+")) == NULL)
{
printf("\n\n\n文件打开失败!!!\n");
return NULL;
}
rewind(fp);
head = p0 = p1 = (stu*)malloc(1 * sizeof(stu));
if (p1 == NULL)
{
printf("内存开辟失败!\n");
return 0;
}
do
{
p1->pnext=p0;
p1 = p0;
if ((fread(p1, sizeof(stu), 1, fp) != 1))
{
printf("文件为空,请先存入信息再读取!!!");
return NULL;
}
p0 = (stu*)malloc(1 * sizeof(stu));
if (p0 == NULL)
{
printf("内存开辟失败!\n");
return 0;
}
} while (p1->pnext != NULL );
p1->pnext = NULL;
free(p0);
fclose(fp);
return head;
}
//排序
void BubbleSortList(stu *p)
{
p=p->pnext;
stu *pl=NULL,*f=NULL,*t=NULL;
char ch[100];
int i=0;
int q=0;
int w=0,s=0;
pl=f=t=p;
for(pl=p;pl->pnext!=NULL;pl=pl->pnext)
{
for(t=p,f=t->pnext;t->pnext!=NULL;t=t->pnext,f=f->pnext)
{
if(t->chengji>f->chengji>0)
{
i=t->chengji;
t->chengji=f->chengji;
f->chengji=i;
q=t->num;
t->num=f->num;
f->num=q;
w=t->shuxue;
t->shuxue=f->shuxue;
f->shuxue=w;
s=t->yingyu;
t->yingyu=f->yingyu;
f->yingyu=s;
strcpy(ch,t->name);
strcpy(t->name,f->name);
strcpy(f->name,ch);
}
}
}
}
//排序2
void BubbleSortList123(stu *p)
{
p=p->pnext;
stu *pl=NULL,*f=NULL,*t=NULL;
char ch[100];
int i=0;
int q=0;
int w=0,s=0;
pl=f=t=p;
for(pl=p;pl->pnext!=NULL;pl=pl->pnext)
{
for(t=p,f=t->pnext;t->pnext!=NULL;t=t->pnext,f=f->pnext)
{
if(t->chengji<f->chengji>0)
{
i=t->chengji;
t->chengji=f->chengji;
f->chengji=i;
q=t->num;
t->num=f->num;
f->num=q;
w=t->shuxue;
t->shuxue=f->shuxue;
f->shuxue=w;
s=t->yingyu;
t->yingyu=f->yingyu;
f->yingyu=s;
strcpy(ch,t->name);
strcpy(t->name,f->name);
strcpy(f->name,ch);
}
}
}
}
void menu2()
{
printf("******************************************\n");
printf("* 成绩排序 *\n");
printf("******************************************\n");
printf("* 1,升序排列 2,降序排列 *\n");
printf("******************************************\n");
}
//菜单
void menu()
{
printf("*******************************************\n");
printf("* 欢迎使用信息管理系统 *\n");
printf("* 1,添加学生信息 2,查找学生信息 *\n");
printf("* 3,删除学生信息 4,修改学生信息 *\n");
printf("* 5,插入学生信息 6,对信息进行排序 *\n");
printf("* 7,读取文件 8,退出系统 *\n");
printf("*******************************************\n");
}
int a=0;
char b[20];
int main()
{
stu *pstu=NULL;
stu *p=NULL;
FILE *fp;
pstu=createlist(p);
menu();
printf("输入操作序号;");
scanf("%d",&a);
system("cls");
while(a!=8)
{
if(a==1)
{
addnode(pstu);
savefile(pstu);
printfadd(pstu);
printf("********保存成功**********");
getchar();
getchar();
}
else if(a==2)
{
search(pstu);
getchar();
getchar();
}
else if(a==4)
{
rework(pstu);
printfadd(pstu);
printf("**************修改数据成功**************\n");
savefile(pstu);
printf("保存成功\n");
printf("输入回车继续\n");
getchar();
getchar();
}
else if(a==3)
{
printfadd(pstu);
deleate(pstu);
printfadd(pstu);
savefile(pstu);
printf("**************保存成功*********************");
getchar();
getchar();
}
else if(a==6)
{
int j=0;
menu2();
printf("选择操作序号");
scanf("%d",&j);
system("cls");
if(j=2)
{
BubbleSortList(pstu);
printfadd(pstu);
savefile(pstu);
printf("**************保存成功*********************");
}
else
{
BubbleSortList123(pstu);
printfadd(pstu);
savefile(pstu);
printf("**************保存成功*********************");
}
getchar();
getchar();
}
else if(a==5)
{
addstudent(pstu);
printfadd(pstu);
savefile(pstu);
printf("**************插入学生信息成功***************");
getchar();
getchar();
}
else if(a==7)
{
stu *pt;
pt=read();
printfadd(pt);
getchar();
getchar();
}
else
{
break;
}
system("cls");
printf("输入两次enter返回界面\n");
getchar();
getchar();
system("cls");
menu();
printf("输入操作序号;");
scanf("%d",&a);
system("cls");
}
printf("成功退出系统");
return 0;
}