学生信息管理.docx
《学生信息管理.docx》由会员分享,可在线阅读,更多相关《学生信息管理.docx(23页珍藏版)》请在冰豆网上搜索。
![学生信息管理.docx](https://file1.bdocx.com/fileroot1/2023-1/10/1eb8e83b-7624-4c9e-8200-35d1cb5a67ff/1eb8e83b-7624-4c9e-8200-35d1cb5a67ff1.gif)
学生信息管理
#include"stdio.h"
#include"stdlib.h"
#include"malloc.h"
#include"string.h"
/*定义结构体*/
typedefstructGRecord/*基本信息*/
{
longintnum;
charname[10];
intage;
structGRecord*G;/*孩子*/
structMRecord*M;/*兄弟*/
}GRecord;
typedefstructMRecord/*成绩信息*/
{
inteng;
intmath;
}MRecord;
typedefstructClass/*班级信息*/
{
intCN;/*班号*/
structGRecord*fchild;/*孩子*/
structClass*nextkid;/*兄弟*/
}Class;
/*函数声明*/
voidWrite();/*1.登记班级全部学生基本情况*/
voidInsert(structClass*H);/*2.插入某个学生的基本情况*/
voidDelete(structClass*H);/*3.删除某个学生的基本情况*/
voidRevisegk(structClass*H);/*4.修改某个学生某门功课的成绩*/
voidRevisejb(structClass*H);/*5.修改某个学生的基本情况*/
voidSearchjb(structClass*H);/*6.浏览某个学生的基本信息*/
voidSearchqb(structClass*H);/*7.浏览每个学生的全部信息*/
voidMainmenu();/*主菜单界面*/
voidMenuxz();/*菜单选择*/
/*全局变量*/
GRecord*GR,*T;/*两个独立结点*/
Class*H;/*树的根结点*/
intZ,Z1,Z2;/*总计数器*/
voidWrite()/*1.登记班级全部学生基本情况*/
{
intflag=1,flag1=1,z=1,cn;charch;
system("cls");
Z1=Z2=0;
T=(structGRecord*)malloc(sizeof(GRecord));
T->M=(structMRecord*)malloc(sizeof(MRecord));
while(z)/*当z为0时,跳出登记学生信息模块*/
{
printf("请输入学生的班号:
");
scanf("%d",&cn);
printf("请按学号由小到大依次输入:
\n");
if(cn==1)
{H->CN=cn;/*输入班号*/
H->fchild=T;
while(flag==1)
{flag1=1;GR=(structGRecord*)malloc(sizeof(GRecord));
GR->M=(structMRecord*)malloc(sizeof(MRecord));T->G=GR;
printf("请输入学生的学号:
");scanf("%d",&GR->num);
printf("请输入学生的姓名:
");scanf("%s",GR->name);
printf("请输入学生的年龄:
");scanf("%d",&GR->age);
printf("请输入学生的外语课成绩:
");scanf("%d",&GR->M->eng);
printf("请输入学生的数学课成绩:
");scanf("%d",&GR->M->math);
Z1++;T=GR;printf("现已%d条学生信息\n",Z1);
printf("按@退出输入...");
ch=getch();
if(ch=='@')flag=0;
printf("\n");
}
T->G=NULL;z=0;break;}
elseif(cn==2)
{H->nextkid->CN=cn;/*输入班号*/
H->nextkid->fchild=T;
while(flag1==1)
{GR=(structGRecord*)malloc(sizeof(GRecord));
GR->M=(structMRecord*)malloc(sizeof(MRecord));T->G=GR;
printf("请输入学生的学号:
");scanf("%d",&GR->num);
printf("请输入学生的姓名:
");scanf("%s",GR->name);
printf("请输入学生的年龄:
");scanf("%d",&GR->age);
printf("请输入学生的外语课成绩:
");scanf("%d",&GR->M->eng);
printf("请输入学生的数学课成绩:
");scanf("%d",&GR->M->math);
Z2++;T=GR;printf("现已%d条学生信息\n",Z2);
printf("按@退出输入...");
ch=getch();
if(ch=='@')flag1=0;
printf("\n");
}
T->G=NULL;z=0;break;
}
else{printf("班号输入错误...\n");z=0;break;}
Z=Z1+Z2;
/*Z1为所录入的1班人数,Z2为所录入的2班人数*/
}
}
voidSearchqb(structClass*H)/*7.浏览每个学生的全部信息*/
{intcn,flag=1;charch;
structGRecord*p;
system("cls");
while(flag)
{printf("请输入学生所在的班级:
");
scanf("%d",&cn);
if(cn==1)
{if(H->fchild->G==NULL){printf("暂无学生信息...\n");break;}
printf("\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t┃%2d班学生信息┃\n",H->CN);
printf("\t┠────────┰─────┰───┰───┰───┨\n");
printf("\t┃学号┃姓名┃年龄┃外语┃数学┃\n");
for(p=H->fchild->G;p!
=NULL;p=p->G)
{
printf("\t┣━━━━━━━━╋━━━━━╋━━━╋━━━╋━----┫\n");
printf("\t┃%15d┃%10s┃%4d┃%4d┃%4d┃\n",p->num,p->name,p->age,p->M->eng,p->M->math);
}
printf("\t┣━━━━━━━━┻━━━━━┻━━━┻━━━┻━━━┫\n");
printf("\t┃共%3d个学生┃\n",Z1);
printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");}
elseif(cn==2){if(H->nextkid->fchild->G==NULL){printf("暂无学生信息...\n");break;}
printf("\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t┃%2d班学生信息┃\n",H->nextkid->CN);
printf("\t┠────────┰─────┰───┰───┰───┨\n");
printf("\t┃学号┃姓名┃年龄┃外语┃数学\n");
for(p=H->nextkid->fchild->G;p!
=NULL;p=p->G)
{
printf("\t┣━━━━━━━━╋━━━━━╋━━━╋━━━╋━━━┫\n");
printf("\t┃%15d┃%10s┃%4d┃%4d┃%4d┃\n",p->num,p->name,p->age,p->M->eng,p->M->math);
}
printf("\t┣━━━━━━━━┻━━━━━┻━━━┻━━━┻━━━┫\n");
printf("\t┃共%3d个学生┃\n",Z2);
printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
}
else{printf("输入班级序号错误...\n");break;}
printf("按@退出输入...\n");
ch=getch();getchar();
if(ch=='@')flag=0;
elseflag=1;
}
}
voidInsert(structClass*H)/*2.插入某个学生的基本情况*/
{
intcn,flag;
structGRecord*p1,*p2,*R;
system("cls");
R=(structGRecord*)malloc(sizeof(GRecord));
R->M=(structMRecord*)malloc(sizeof(MRecord));
while(flag)
{
printf("请输入学生所在的班级:
");
scanf("%d",&cn);
if(cn==1)
{H->CN=cn;
printf("请输入学生的学号:
");scanf("%d",&R->num);
printf("请输入学生的姓名:
");scanf("%s",R->name);
printf("请输入学生的年龄:
");scanf("%d",&R->age);
printf("请输入学生的外语课成绩:
");scanf("%d",&R->M->eng);
printf("请输入学生的数学课成绩:
");scanf("%d",&R->M->math);
if(H->fchild->G==NULL){H->fchild->G=R;R->G=NULL;Z1++;printf("插入成功...按任意键返回...\n");getch();flag=0;break;}
for(p1=H->fchild;p1->G!
=NULL;p1=p1->G)
{p2=p1->G;
if(p1->num<=R->num&&p2->num>R->num)
{p1->G=R;R->G=p2;Z1++;printf("插入成功...按任意键返回...\n");getch();flag=0;break;}
}
if(p1->G==NULL){p1->G=R;R->G=NULL;Z1++;printf("插入成功...按任意键返回...\n");getch();}
flag=0;}
elseif(cn==2){H->nextkid->CN=cn;
printf("请输入学生的学号:
");scanf("%d",&R->num);
printf("请输入学生的姓名:
");scanf("%s",R->name);
printf("请输入学生的年龄:
");scanf("%d",&R->age);
printf("请输入学生的外语课成绩:
");scanf("%d",&R->M->eng);
printf("请输入学生的数学课成绩:
");scanf("%d",&R->M->math);
if(H->nextkid->fchild->G==NULL){H->nextkid->fchild->G=R;R->G=NULL;Z2++;printf("插入成功...按任意键返回...\n");getch();flag=0;break;}
for(p1=H->nextkid->fchild;p1->G!
=NULL;p1=p1->G)
{p2=p1->G;
if(p1->num<=R->num&&p2->num>R->num)
{p1->G=R;R->G=p2;Z2++;printf("插入成功...\n");getch();flag=0;break;}
}if(p1->G==NULL){p1->G=R;R->G=NULL;Z2++;printf("插入成功...按任意键返回...\n");getch();}
flag=0;}
else{printf("输入班级序号错误...\n");flag=1;break;}
}
}
voidDelete(structClass*H)/*3.删除某个学生的基本情况*/
{
intn,nu,cn,flag=1;charna[10],ch;
structGRecord*p1,*p2,*t1;
system("cls");
while(flag)
{
printf("请输入学生所在的班级:
");
scanf("%d",&cn);
switch(cn)
{case1:
if(H->fchild->G==NULL){printf("由于无学生记录,无法删除...\n");break;}
printf("\t\t1.按学号删除学生信息\n");
printf("\t\t2.按姓名删除学生信息\n");
printf("请选择需要的操作:
");
scanf("%d",&n);
if(n==1)
{t1=H->fchild;printf("请输入需要删除的学生的学号:
");scanf("%d",&nu);
p1=t1->G;p2=p1->G;
if(p1->num==nu){H->fchild->G=p2;Z1--;printf("删除成功...\n");flag=0;break;}
while(p1->num!
=nu&&p1->G!
=NULL)
{
p2=p1->G;p1=p1->G;p2=p2->G;
}if(p1->num!
=nu)printf("无该学生记录...\n");
if(p1->num==nu){p1->G=p2->G;Z1--;printf("删除成功...\n");}
free(p2);}
elseif(n==2){t1=H->fchild;printf("请输入需要删除的学生的姓名:
");scanf("%s",na);
p1=t1->G;p2=p1->G;
if(!
strcmp(p1->name,na)){H->fchild->G=p2;Z1--;printf("删除成功...\n");flag=0;break;}
while(strcmp(p1->name,na)&&p1->G!
=NULL)
{
p2=p1->G;p1=p1->G;p2=p2->G;
}if(strcmp(p1->name,na)!
=0)printf("无该学生记录...\n");
if(strcmp(p1->name,na)==0){p1->G=p2->G;Z1--;printf("删除成功...\n");}
free(p2);}
else{printf("输入序号错误...\n");flag=1;break;}
break;
case2:
if(H->nextkid->fchild->G==NULL){printf("由于无学生记录,无法删除...\n");flag=0;break;}
printf("\t\t1.按学号删除学生信息\n");
printf("\t\t2.按姓名删除学生信息\n");
printf("请选择需要的操作:
");
scanf("%d",&n);
if(n==1)
{t1=H->nextkid->fchild;printf("请输入需要删除的学生的学号:
");scanf("%d",&nu);
p1=t1->G;p2=p1->G;
if(p1->num==nu){H->nextkid->fchild->G=p2;Z1--;printf("删除成功...\n");flag=0;break;}
while(p1->num!
=nu&&p1->G!
=NULL)
{
p2=p1->G;p1=p1->G;p2=p2->G;
}if(p1->num!
=nu)printf("无该学生记录...\n");
if(p1->num==nu){p1->G=p2->G;Z2--;printf("删除成功...\n");}
free(p2);}
elseif(n==2){t1=H->nextkid->fchild;printf("请输入需要删除的学生的姓名:
");scanf("%s",na);
p1=t1->G;p2=p1->G;
if(!
strcmp(p1->name,na)){H->nextkid->fchild->G=p2;Z1--;printf("删除成功...\n");flag=0;break;}
while(strcmp(p1->name,na)!
=0&&p1->G!
=NULL)
{
p2=p1->G;p1=p1->G;p2=p2->G;
}if(strcmp(p1->name,na)!
=0)printf("无该学生记录...\n");
if(strcmp(p1->name,na)==0){p1->G=p2->G;Z2--;printf("删除成功...\n");}
free(p2);}
else{printf("输入序号错误...\n");flag=1;break;}
break;
default:
printf("输入序号错误...\n");flag=1;break;
}printf("按@退出输入...\n");
ch=getch();getchar();
if(ch=='@')flag=0;
elseflag=1;
}
}
voidRevisejb(structClass*H)/*5分别按照学号和姓名修改某个学生的基本情况*/
{
structGRecord*p1,*t1;
intn,n1,cn,nu,a,flag=1,flag1=1,flag2=1;charna[10];
while(flag)
{
system("cls");
printf("请输入学生所在的班级:
");
scanf("%d",&cn);
switch(cn)
{case1:
while(flag1){/*第一个班*/
if(H->fchild->G==NULL){printf("由于无学生记录,无法修改...\n按任意键返回...\n");getch();break;}//
printf("\t\t1.按学号修改学生信息\n");
printf("\t\t2.按姓名修改学生信息\n");
printf("请选择需要的操作:
");
scanf("%d",&n);
if(n==1)
{while(flag2){/*按学号*/
system("cls");
printf("\t\t1.修改学生的姓名\n");
printf("\t\t2.修改学生的年龄\n");
printf("请选择需要的操作:
");
scanf("%d",&n1);
if(n1==1)
{t1=H->fchild;p1=t1->G;
printf("请输入需要修改的学生的学号:
");scanf("%d",&nu);
while(p1->num!
=nu&&p1->G!
=NULL)
{p1=p1->G;}
if(p1->num!
=nu){printf("无该学生记录...\n按任意键返回...\n");getch();flag2=0;break;}
printf("请输入新的姓名:
");scanf("%s",na);
if(p1->num==nu)
{strcpy(p1->name,na);printf("修改成功...\n按任意键返回...\n");}
getch();flag2=0;}
elseif(n1==2){t1=H->fchild;p1=t1->G;
printf("请输入需要修改的学生的学号:
");scanf("%d",&nu);
while(p1->num!
=nu&&p1->G!
=NULL)
{p1=p1->G;}
if(p1->num!
=nu){printf("无该学生记录...\n按任意键返回...\n");getch();flag2=0;break;}
printf("请输入新的年龄:
");scanf("%d",&a);
if(p1->num==nu){p1->age=a;printf("修改成功...\n按任意键返回...\