学生管理系统包括信息管理和成绩管理,代码还不完完善,欢迎
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
//宏定义
#define length 10
#define MES (struct studentMessage*)malloc(sizeof(struct studentMessage))
#define MAR (struct studentMark*)malloc(sizeof(struct studentMark))
char subname[][10]={"高数","线代","C语言","英语","专概","心理","思修","体育","日语","韩语"};
//定义学生基本信息
typedef struct studentMessage
{
char name [15];//姓名
int number;//学号
int age;//年龄
char sex[20];//性别
char collage[20];//学院
char major[20];//专业
int Class;//班级
char ID[50];//身份证号
struct studentMessage *next;
}MESSAGE;//定义链表
#include <stdlib.h>
#include <conio.h>
#include <string.h>
//宏定义
#define length 10
#define MES (struct studentMessage*)malloc(sizeof(struct studentMessage))
#define MAR (struct studentMark*)malloc(sizeof(struct studentMark))
char subname[][10]={"高数","线代","C语言","英语","专概","心理","思修","体育","日语","韩语"};
//定义学生基本信息
typedef struct studentMessage
{
char name [15];//姓名
int number;//学号
int age;//年龄
char sex[20];//性别
char collage[20];//学院
char major[20];//专业
int Class;//班级
char ID[50];//身份证号
struct studentMessage *next;
}MESSAGE;//定义链表
//定义学生成绩信息
typedef struct studentMark
{
int number;
char name[15];
struct subject
{
int subnum;
char subname[20];
float score;
}
sub[length];//保存学生各科成绩
double total;//总分
struct studentMark *next;//定义链表
}MARK;
//定义函数
int Password();
int menu(void);
void mainmenu(MESSAGE *,MARK *);
void searchmenu(MESSAGE *);
void searchstuone(MESSAGE *);
void scanstuAll(MESSAGE *);
void searchstuclass(MESSAGE *);
void scanstuMarkAll(MARK *);
void searchMarkmenu(MARK *);
void searchstuMarkone(MARK *);
void savefilestuMark(MARK *);
void savefilestu(MESSAGE *);
MESSAGE *addstudent(MESSAGE *);//信息管理部分函数
MESSAGE *changestu(MESSAGE *);
MESSAGE *change(MESSAGE *);
MESSAGE *deletestuone(MESSAGE *);
MESSAGE *deletemenu(MESSAGE *);
MESSAGE *deletestuclass(MESSAGE *);
MESSAGE *deletestuall(MESSAGE *);
MESSAGE *readfilestu(MESSAGE *);
MARK *addstudentMark(MARK *);//成绩管理部分函数
MARK *deletestuMarkall(MARK *);
MARK *deletestuMarkone(MARK *);
MARK *deleteMarkmenu(MARK *);
MARK *changeMark(MARK *);
MARK *changestuMark(MARK *);
MARK *readfilestuMark(MARK *);
//主函数
main()
{
if(Password())
{
MESSAGE *head=NULL;
MARK *top=NULL;
mainmenu(head,top);
}
else
printf("无法进入系统\n");
}
//密码验证
int Password()
{
char PASSWORD[6]="123456";
int i,j,k;
char password[6];
for(i=0;i<=3;i++)
{
printf("\t\t|****************************************************|\n");
printf("\t\t| |\n");
printf("\t\t| |\n");
printf("\t\t| 欢迎使用学生信息管理系统 |\n");
printf("\t\t| |\n");
printf("\t\t| |\n");
printf("\t\t|********************************制作人:黄蕾********|\n");
printf("\t\t|**************请输入密码****************************|\n");
for(j=0;j<6;j++)
{
getch();
printf("*");}
if(strcmp(password,PASSWORD))
{
printf(" \t| **************登陆成功***************|\n");
return 1;
}
else
{
printf(" \t| *************登陆失败*****************|\n");
}
typedef struct studentMark
{
int number;
char name[15];
struct subject
{
int subnum;
char subname[20];
float score;
}
sub[length];//保存学生各科成绩
double total;//总分
struct studentMark *next;//定义链表
}MARK;
//定义函数
int Password();
int menu(void);
void mainmenu(MESSAGE *,MARK *);
void searchmenu(MESSAGE *);
void searchstuone(MESSAGE *);
void scanstuAll(MESSAGE *);
void searchstuclass(MESSAGE *);
void scanstuMarkAll(MARK *);
void searchMarkmenu(MARK *);
void searchstuMarkone(MARK *);
void savefilestuMark(MARK *);
void savefilestu(MESSAGE *);
MESSAGE *addstudent(MESSAGE *);//信息管理部分函数
MESSAGE *changestu(MESSAGE *);
MESSAGE *change(MESSAGE *);
MESSAGE *deletestuone(MESSAGE *);
MESSAGE *deletemenu(MESSAGE *);
MESSAGE *deletestuclass(MESSAGE *);
MESSAGE *deletestuall(MESSAGE *);
MESSAGE *readfilestu(MESSAGE *);
MARK *addstudentMark(MARK *);//成绩管理部分函数
MARK *deletestuMarkall(MARK *);
MARK *deletestuMarkone(MARK *);
MARK *deleteMarkmenu(MARK *);
MARK *changeMark(MARK *);
MARK *changestuMark(MARK *);
MARK *readfilestuMark(MARK *);
//主函数
main()
{
if(Password())
{
MESSAGE *head=NULL;
MARK *top=NULL;
mainmenu(head,top);
}
else
printf("无法进入系统\n");
}
//密码验证
int Password()
{
char PASSWORD[6]="123456";
int i,j,k;
char password[6];
for(i=0;i<=3;i++)
{
printf("\t\t|****************************************************|\n");
printf("\t\t| |\n");
printf("\t\t| |\n");
printf("\t\t| 欢迎使用学生信息管理系统 |\n");
printf("\t\t| |\n");
printf("\t\t| |\n");
printf("\t\t|********************************制作人:黄蕾********|\n");
printf("\t\t|**************请输入密码****************************|\n");
for(j=0;j<6;j++)
{
getch();
printf("*");}
if(strcmp(password,PASSWORD))
{
printf(" \t| **************登陆成功***************|\n");
return 1;
}
else
{
printf(" \t| *************登陆失败*****************|\n");
}
}
if(i>3)
printf("输入次数过多,不能登录\n");
return 0;
}
if(i>3)
printf("输入次数过多,不能登录\n");
return 0;
}
//主菜单//
int menu(void)
{
int choose;
do{
system("cls");
printf(" *************************************\n" );
printf(" * 学生管理系统 *\n" );
printf(" * 1.添加信息 *\n" );
printf(" * 2.查找信息 *\n" );
printf(" * 3.修改信息 *\n" );
printf(" * 4.删除信息 *\n" );
printf(" * 5.文件操作 *\n" );
printf(" * 6.退出 *\n" );
printf(" *************************************\n" );
fflush(stdin);
printf("请选择功能\n");
scanf("%d",&choose);
if(choose!=1&&choose!=2&&choose!=3&&choose!=4&&choose!=5&&choose!=6)
printf("输入错误,请重新输入\n");
}
while(choose!=1&&choose!=2&&choose!=3&&choose!=4&&choose!=5&&choose!=6) ;
return choose;
}
//选择菜单//
void mainmenu(MESSAGE *head,MARK *top)
{
int getchoose,choose,choose1;
while(1){
getchoose=menu();
switch(getchoose)
{
case 1:
printf(" *************添加信息**********\n " );
printf(" 1.添加学生基本信息\n" );
printf(" 2.添加学生成绩信息\n " );
printf(" 3.返回\n" );
printf(" ********************************\n" );
fflush(stdin);
printf("请选择\n");
scanf("%d",&choose);
if(choose==1)
head=addstudent(head);
if(choose==2)
top=addstudentMark(top);
if(choose==3)
{
printf("请按任意键返回\n");
getch();
}
else
printf("输入错误,请重新输入\n");
break;
case 2:
printf(" *************查找信息**********\n " );
printf(" 1.查找学生基本信息\n" );
printf(" 2.查找学生成绩信息\n " );
printf(" 3.返回\n" );
printf(" ********************************\n" );
fflush(stdin);
printf("请选择\n");
scanf("%d",&choose);
if(choose==1)
searchmenu(head);
if(choose==2)
searchMarkmenu(top);
if(choose==3)
{
printf("请按任意键返回\n");
getch();
}
else
printf("输入错误,请重新输入\n");
break;
case 3:
printf(" *************修改信息**********\n " );
printf(" 1.修改学生基本信息\n" );
printf(" 2.修改学生成绩信息\n " );
printf(" 3.返回\n" );
printf(" ********************************\n" );
fflush(stdin);
printf("请选择\n");
scanf("%d",&choose);
if(choose==1)
head=changestu(head);
if(choose==2)
top=changestuMark(top);
if(choose==3)
{
printf("请按任意键返回\n");
getch();
}
else
printf("输入错误,请重新输入\n");
break;
case 4:
printf(" *************删除信息**********\n " );
printf(" 1.删除学生基本信息\n" );
printf(" 2.删除学生成绩信息\n " );
printf(" 3.返回\n" );
printf(" ********************************\n" );
fflush(stdin);
printf("请选择\n");
scanf("%d",&choose);
if(choose==1)
head=deletemenu(head);
if(choose==2)
top=deleteMarkmenu(top);
if(choose==3)
{
printf("请按任意键返回\n");
getch();
}
else
printf("输入错误,请重新输入\n");
break;
case 5:
printf(" ************文件管理***********\n" );
printf(" * 1.读取信息 ***\n" );
printf(" * 2.保存信息 ***\n" );
printf(" * 3.返回 ***\n );
fflush(stdin);
printf("请选择\n");
scanf("%d",&choose);
if(choose==1)
{
printf(" ******读取信息选择**********\n");
printf(" * 1.读取学生基本信息 ***\n" );
printf(" * 2.读取学生成绩信息 ***\n" );
fflush(stdin);
printf("请选择\n");
scanf("%d",&choose1);
if(choose1==1)
head=readfilestu(head);
if(choose1==2)
top=readfilestuMark(top);
else
{
printf("输入错误\n");
printf("按任意键返回\n");
getch();
}
}
if(choose==2)
{
printf(" ********* 保存信息选择**********\n ");
printf(" * 1.保存学生基本信息 **\n" );
printf(" * 2.保存学生成绩信息 **\n" );
fflush(stdin);
printf("请选择\n");
scanf("%d",&choose1);
if(choose1==1)
savefilestu(head);
if(choose1==2)
savefilestuMark(top);
else
{
printf("输入错误\n");
printf("按任意键返回\n");
getch();
}
}
if(choose==3)
{
printf("按任意键返回\n");
getch();
}
break;
case 6:
exit(0);
break;
}
}
}
//添加学生信息
int menu(void)
{
int choose;
do{
system("cls");
printf(" *************************************\n" );
printf(" * 学生管理系统 *\n" );
printf(" * 1.添加信息 *\n" );
printf(" * 2.查找信息 *\n" );
printf(" * 3.修改信息 *\n" );
printf(" * 4.删除信息 *\n" );
printf(" * 5.文件操作 *\n" );
printf(" * 6.退出 *\n" );
printf(" *************************************\n" );
fflush(stdin);
printf("请选择功能\n");
scanf("%d",&choose);
if(choose!=1&&choose!=2&&choose!=3&&choose!=4&&choose!=5&&choose!=6)
printf("输入错误,请重新输入\n");
}
while(choose!=1&&choose!=2&&choose!=3&&choose!=4&&choose!=5&&choose!=6) ;
return choose;
}
//选择菜单//
void mainmenu(MESSAGE *head,MARK *top)
{
int getchoose,choose,choose1;
while(1){
getchoose=menu();
switch(getchoose)
{
case 1:
printf(" *************添加信息**********\n " );
printf(" 1.添加学生基本信息\n" );
printf(" 2.添加学生成绩信息\n " );
printf(" 3.返回\n" );
printf(" ********************************\n" );
fflush(stdin);
printf("请选择\n");
scanf("%d",&choose);
if(choose==1)
head=addstudent(head);
if(choose==2)
top=addstudentMark(top);
if(choose==3)
{
printf("请按任意键返回\n");
getch();
}
else
printf("输入错误,请重新输入\n");
break;
case 2:
printf(" *************查找信息**********\n " );
printf(" 1.查找学生基本信息\n" );
printf(" 2.查找学生成绩信息\n " );
printf(" 3.返回\n" );
printf(" ********************************\n" );
fflush(stdin);
printf("请选择\n");
scanf("%d",&choose);
if(choose==1)
searchmenu(head);
if(choose==2)
searchMarkmenu(top);
if(choose==3)
{
printf("请按任意键返回\n");
getch();
}
else
printf("输入错误,请重新输入\n");
break;
case 3:
printf(" *************修改信息**********\n " );
printf(" 1.修改学生基本信息\n" );
printf(" 2.修改学生成绩信息\n " );
printf(" 3.返回\n" );
printf(" ********************************\n" );
fflush(stdin);
printf("请选择\n");
scanf("%d",&choose);
if(choose==1)
head=changestu(head);
if(choose==2)
top=changestuMark(top);
if(choose==3)
{
printf("请按任意键返回\n");
getch();
}
else
printf("输入错误,请重新输入\n");
break;
case 4:
printf(" *************删除信息**********\n " );
printf(" 1.删除学生基本信息\n" );
printf(" 2.删除学生成绩信息\n " );
printf(" 3.返回\n" );
printf(" ********************************\n" );
fflush(stdin);
printf("请选择\n");
scanf("%d",&choose);
if(choose==1)
head=deletemenu(head);
if(choose==2)
top=deleteMarkmenu(top);
if(choose==3)
{
printf("请按任意键返回\n");
getch();
}
else
printf("输入错误,请重新输入\n");
break;
case 5:
printf(" ************文件管理***********\n" );
printf(" * 1.读取信息 ***\n" );
printf(" * 2.保存信息 ***\n" );
printf(" * 3.返回 ***\n );
fflush(stdin);
printf("请选择\n");
scanf("%d",&choose);
if(choose==1)
{
printf(" ******读取信息选择**********\n");
printf(" * 1.读取学生基本信息 ***\n" );
printf(" * 2.读取学生成绩信息 ***\n" );
fflush(stdin);
printf("请选择\n");
scanf("%d",&choose1);
if(choose1==1)
head=readfilestu(head);
if(choose1==2)
top=readfilestuMark(top);
else
{
printf("输入错误\n");
printf("按任意键返回\n");
getch();
}
}
if(choose==2)
{
printf(" ********* 保存信息选择**********\n ");
printf(" * 1.保存学生基本信息 **\n" );
printf(" * 2.保存学生成绩信息 **\n" );
fflush(stdin);
printf("请选择\n");
scanf("%d",&choose1);
if(choose1==1)
savefilestu(head);
if(choose1==2)
savefilestuMark(top);
else
{
printf("输入错误\n");
printf("按任意键返回\n");
getch();
}
}
if(choose==3)
{
printf("按任意键返回\n");
getch();
}
break;
case 6:
exit(0);
break;
}
}
}
//添加学生信息
MESSAGE *addstudent(MESSAGE *head)
{
int number;
MESSAGE *p1,*p2;
do
{
fflush(stdin);
printf("请输入一个学生学号:(以输入0结束)\n");
scanf("%d",&number);
}while(number<0);
while(number!=0)
{
//输入信息
p1=MES;
fflush(stdin);
printf("请输入:姓名\t学号\t\t年龄\t性别\t班级\t学院\t专业\t身份证号\n");
scanf("%s\t%d\t%d\t%s\t%d\t%s\t%s\t%s\n",
p1->name,&p1->number,&p1->age,p1->sex,&p1->Class,p1->collage,p1->major,p1->ID);
if(head!=NULL)
{
p2=head;
p1->next=p2;
head=p1;
}
else
head=p1;
do
{
fflush(stdin);
printf("请输入一个学生的学号(以输入0结束)\n");
scanf("%d",&number);
}
while(number<0);
}return head;
}
{
int number;
MESSAGE *p1,*p2;
do
{
fflush(stdin);
printf("请输入一个学生学号:(以输入0结束)\n");
scanf("%d",&number);
}while(number<0);
while(number!=0)
{
//输入信息
p1=MES;
fflush(stdin);
printf("请输入:姓名\t学号\t\t年龄\t性别\t班级\t学院\t专业\t身份证号\n");
scanf("%s\t%d\t%d\t%s\t%d\t%s\t%s\t%s\n",
p1->name,&p1->number,&p1->age,p1->sex,&p1->Class,p1->collage,p1->major,p1->ID);
if(head!=NULL)
{
p2=head;
p1->next=p2;
head=p1;
}
else
head=p1;
do
{
fflush(stdin);
printf("请输入一个学生的学号(以输入0结束)\n");
scanf("%d",&number);
}
while(number<0);
}return head;
}
//浏览学生信息
void scanstuAll(MESSAGE *head)
{
int count=0;
MESSAGE *p=head;
while(p!=NULL)
{
printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
p->name,p->sex,p->number,p->age,p->collage,p->Class,p->major,p->ID);
p=p->next;
count++;
}
printf("总共有%d条学生信息\n",count);
printf("请按任意键返回菜单\n");
getch();
}
//添加学生成绩信息
MARK *addstudentMark(MARK *top)
{
int num,i,j,Number,gole;
MARK *p1=top,*p2=top,*p;
do
{
fflush(stdin);
printf("请输入一个学生学号:(以输入0结束)\n");
scanf("%d",&num);
}while(num<0);
while(num!=0)
{
//输入信息
gole=0;
p1=top;
p2=top;
p=MAR;
p->total=0;
fflush(stdin);
printf("请输入该学生姓名\n");
scanf("%s",p->name);
for(i=0;i<length;i++)
{
printf("%d%s",i+1,subname[i]);}
printf("\n");
fflush(stdin);
printf("请选择你所选修的课程(输入-1结束选择)\n");
for(i=0;i<length;i++)
{
scanf("%d",&Number);
p->sub[i].subnum=Number;
if(Number==-1)
break;
gole++;
}
for(i=0;i<gole;i++)
{
j=p->sub[i].subnum;
if(j!=-1)
{
fflush(stdin);
printf("请输入该学生%s的成绩\n",subname[j-1]);
scanf("%f",&p->sub[j-1].score);
p->total+=((double)(p->sub[j-1].score)/gole);
}
else
break;
}
void scanstuAll(MESSAGE *head)
{
int count=0;
MESSAGE *p=head;
while(p!=NULL)
{
printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
p->name,p->sex,p->number,p->age,p->collage,p->Class,p->major,p->ID);
p=p->next;
count++;
}
printf("总共有%d条学生信息\n",count);
printf("请按任意键返回菜单\n");
getch();
}
//添加学生成绩信息
MARK *addstudentMark(MARK *top)
{
int num,i,j,Number,gole;
MARK *p1=top,*p2=top,*p;
do
{
fflush(stdin);
printf("请输入一个学生学号:(以输入0结束)\n");
scanf("%d",&num);
}while(num<0);
while(num!=0)
{
//输入信息
gole=0;
p1=top;
p2=top;
p=MAR;
p->total=0;
fflush(stdin);
printf("请输入该学生姓名\n");
scanf("%s",p->name);
for(i=0;i<length;i++)
{
printf("%d%s",i+1,subname[i]);}
printf("\n");
fflush(stdin);
printf("请选择你所选修的课程(输入-1结束选择)\n");
for(i=0;i<length;i++)
{
scanf("%d",&Number);
p->sub[i].subnum=Number;
if(Number==-1)
break;
gole++;
}
for(i=0;i<gole;i++)
{
j=p->sub[i].subnum;
if(j!=-1)
{
fflush(stdin);
printf("请输入该学生%s的成绩\n",subname[j-1]);
scanf("%f",&p->sub[j-1].score);
p->total+=((double)(p->sub[j-1].score)/gole);
}
else
break;
}
p->number=num;
p->next=NULL;
if(!top)
{
top=p;
}
else
{
while(p1)
{
if(p1->total>=p->total)
{
p2=p1;
p1=p1->next;
}
else
break;
}
p->next=p1;
p2->next=p;
}
do
{
fflush(stdin);
printf("请输入一个学生的学号(以输入0结束)\n");
scanf("%d",&num);
}while(num<0);
}
printf("输入成功,按任意键返回\n");
getch();
return top;
}
//浏览学生成绩信息
void scanstuMarkAll(MARK *top)
{
int count=0,i,j;
MARK *p=top;
while(p!=NULL)
{
printf("姓名\t学号\n");
printf("%s\t%d\n",p->name,p->number);
for(i=0;i<length;i++)
{
j=p->sub[i].subnum;
if(j==-1)
break;
printf("%s\t",subname[j-1]);
printf("%.2f\n",p->sub[j-1].score);
}
printf("总分\n");
printf("%.2lf\n",p->total);
p=p->next;
count++;
}
printf("总共有%d条学生信息\n",count);
printf("请按任意键返回菜单\n");
getch();
}
//查找信息菜单
void searchmenu(MESSAGE *head)
{
int choose;
printf("查找信息\n");
printf("1.查找个人信息\n");
printf("2.查找班级信息\n");
printf("3.查找全部信息\n");
printf("请选择\n");
fflush(stdin);
scanf("%d",&choose);
switch(choose)
{
case 1:searchstuone(head);break;
case 2:searchstuclass(head);break;
case 3:scanstuAll(head);break;
default:printf("输入错误\n");break;
}
}
//查找学生个人信息
void searchstuone(MESSAGE *head)
{
char name[20];
int number;
int gole=0;
int choose;
do
{
fflush(stdin);
printf("请选择查找方式\n1.姓名查找\n2.学号查找\n3.返回\n");
scanf("%d",&choose);
switch(choose)
{
case 1:
fflush(stdin);
printf("请输入查找的姓名\n");
gets(name);
while(head!=NULL)
{
if(!strcmp(name,head->name))
{
printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
head->name,head->sex,head->number,head->age,head->collage,head->Class,head->major,head->ID);
gole++;
}
printf("\n");
head=head->next;
}
if(gole==0)
printf("没有您要查找的信息");
break;
p->next=NULL;
if(!top)
{
top=p;
}
else
{
while(p1)
{
if(p1->total>=p->total)
{
p2=p1;
p1=p1->next;
}
else
break;
}
p->next=p1;
p2->next=p;
}
do
{
fflush(stdin);
printf("请输入一个学生的学号(以输入0结束)\n");
scanf("%d",&num);
}while(num<0);
}
printf("输入成功,按任意键返回\n");
getch();
return top;
}
//浏览学生成绩信息
void scanstuMarkAll(MARK *top)
{
int count=0,i,j;
MARK *p=top;
while(p!=NULL)
{
printf("姓名\t学号\n");
printf("%s\t%d\n",p->name,p->number);
for(i=0;i<length;i++)
{
j=p->sub[i].subnum;
if(j==-1)
break;
printf("%s\t",subname[j-1]);
printf("%.2f\n",p->sub[j-1].score);
}
printf("总分\n");
printf("%.2lf\n",p->total);
p=p->next;
count++;
}
printf("总共有%d条学生信息\n",count);
printf("请按任意键返回菜单\n");
getch();
}
//查找信息菜单
void searchmenu(MESSAGE *head)
{
int choose;
printf("查找信息\n");
printf("1.查找个人信息\n");
printf("2.查找班级信息\n");
printf("3.查找全部信息\n");
printf("请选择\n");
fflush(stdin);
scanf("%d",&choose);
switch(choose)
{
case 1:searchstuone(head);break;
case 2:searchstuclass(head);break;
case 3:scanstuAll(head);break;
default:printf("输入错误\n");break;
}
}
//查找学生个人信息
void searchstuone(MESSAGE *head)
{
char name[20];
int number;
int gole=0;
int choose;
do
{
fflush(stdin);
printf("请选择查找方式\n1.姓名查找\n2.学号查找\n3.返回\n");
scanf("%d",&choose);
switch(choose)
{
case 1:
fflush(stdin);
printf("请输入查找的姓名\n");
gets(name);
while(head!=NULL)
{
if(!strcmp(name,head->name))
{
printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
head->name,head->sex,head->number,head->age,head->collage,head->Class,head->major,head->ID);
gole++;
}
printf("\n");
head=head->next;
}
if(gole==0)
printf("没有您要查找的信息");
break;
case 2:
fflush(stdin);
printf("请输入要查找的学号\n");
scanf("%d",&number);
while(head!=NULL)
{
if((number=head->number))
{
printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
head->name,head->sex,head->number,head->age,head->collage,head->Class,head->major,head->ID);
gole++;
}
printf("\n");
head=head->next;
}
if(gole==0)
printf("没有您要查找的信息\n");
break;
case 3:
printf("请按任意键返回\n");
getch();
break;
default:
printf("输入错误,重新选择\n");
break;
}
}
while(choose!=1&&choose!=2&&choose!=3);
getch();
}
//查找班级信息
void searchstuclass(MESSAGE *head)
{
int Class;
int gole=0;
fflush(stdin);
printf("请输入查找的班级\n");
scanf("%d",&Class);
while(head!=NULL)
{
if((Class=head->Class))
{
printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
head->name,head->sex,head->number,head->age,head->collage,head->Class,head->major,head->ID);
gole++;
}printf("\n");
head=head->next;
}
if(gole==0)
printf("没有您要查找的信息");
else
printf("该班共有%d名学生",gole);
getch();
}
//查找成绩菜单
void searchMarkmenu(MARK *top)
{
int choose;
printf("1 个人成绩\n");
printf("2 全部学生成绩\n");
printf("请选择");
fflush(stdin);
scanf("%d",&choose);
switch(choose)
{
case 1:searchstuMarkone(top);break;
case 2:scanstuMarkAll(top);break;
default:printf("输入错误\n");break;
}
}
//查找学生成绩信息
void searchstuMarkone(MARK *top)
{
char name[20];
int number,i,j;
int gole=0;
int choose;
do
{
fflush(stdin);
printf("请选择\n1.姓名查找\n2.学号查找\n3.返回\n");
scanf("%d",&choose);
switch(choose)
{
case 1:
fflush(stdin);
printf("请输入查找的姓名\n");
gets(name);
while(top!=NULL)
{
if(strcmp(name,top->name))
{
printf("姓名\t学号\n");
printf("%s\t%d\n",top->name,top->number);
for(i=0;i<length;i++)
{
j=top->sub[i].subnum;
if(j==-1)
break;
printf("%s\t",subname[j-1]);
printf("%.2f\n",top->sub[j-1].score);
printf("\n");
}
printf("总分\n");
printf("%.2lf\n",top->total);
gole++;
}
printf("\n");
top=top->next;
}
if(gole==0)
printf("没有您要查找的信息");
break;
case 2:
fflush(stdin);
printf("请输入要查找的学号\n");
scanf("%d",&number);
while(top!=NULL)
{
if((number=top->number))
{
printf("姓名\t学号\n");
printf("%s\t%d\n",top->name,top->number);
for(i=0;i<length;i++)
{
j=top->sub[i].subnum;
if(j==-1)
break;
printf("%s\t",subname[j-1]);
printf("%.2f\n",top->sub[j-1].score);
}
printf("总分\n");
printf("%.2lf\n",top->total);
gole++;
}
printf("\n");
top=top->next;
}
if(gole==0)
printf("没有您要查找的信息\n");
break;
case 3:
printf("请按任意键返回\n");
getch();
break;
default:
printf("输入错误,重新选择\n");
break;
}
}
while(choose!=1&&choose!=2&&choose!=3);
printf("请按任意键返回\n");
getch();
}
//修改学生信息
MESSAGE *changestu(MESSAGE *head)
{
fflush(stdin);
printf("请输入要查找的学号\n");
scanf("%d",&number);
while(head!=NULL)
{
if((number=head->number))
{
printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
head->name,head->sex,head->number,head->age,head->collage,head->Class,head->major,head->ID);
gole++;
}
printf("\n");
head=head->next;
}
if(gole==0)
printf("没有您要查找的信息\n");
break;
case 3:
printf("请按任意键返回\n");
getch();
break;
default:
printf("输入错误,重新选择\n");
break;
}
}
while(choose!=1&&choose!=2&&choose!=3);
getch();
}
//查找班级信息
void searchstuclass(MESSAGE *head)
{
int Class;
int gole=0;
fflush(stdin);
printf("请输入查找的班级\n");
scanf("%d",&Class);
while(head!=NULL)
{
if((Class=head->Class))
{
printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
head->name,head->sex,head->number,head->age,head->collage,head->Class,head->major,head->ID);
gole++;
}printf("\n");
head=head->next;
}
if(gole==0)
printf("没有您要查找的信息");
else
printf("该班共有%d名学生",gole);
getch();
}
//查找成绩菜单
void searchMarkmenu(MARK *top)
{
int choose;
printf("1 个人成绩\n");
printf("2 全部学生成绩\n");
printf("请选择");
fflush(stdin);
scanf("%d",&choose);
switch(choose)
{
case 1:searchstuMarkone(top);break;
case 2:scanstuMarkAll(top);break;
default:printf("输入错误\n");break;
}
}
//查找学生成绩信息
void searchstuMarkone(MARK *top)
{
char name[20];
int number,i,j;
int gole=0;
int choose;
do
{
fflush(stdin);
printf("请选择\n1.姓名查找\n2.学号查找\n3.返回\n");
scanf("%d",&choose);
switch(choose)
{
case 1:
fflush(stdin);
printf("请输入查找的姓名\n");
gets(name);
while(top!=NULL)
{
if(strcmp(name,top->name))
{
printf("姓名\t学号\n");
printf("%s\t%d\n",top->name,top->number);
for(i=0;i<length;i++)
{
j=top->sub[i].subnum;
if(j==-1)
break;
printf("%s\t",subname[j-1]);
printf("%.2f\n",top->sub[j-1].score);
printf("\n");
}
printf("总分\n");
printf("%.2lf\n",top->total);
gole++;
}
printf("\n");
top=top->next;
}
if(gole==0)
printf("没有您要查找的信息");
break;
case 2:
fflush(stdin);
printf("请输入要查找的学号\n");
scanf("%d",&number);
while(top!=NULL)
{
if((number=top->number))
{
printf("姓名\t学号\n");
printf("%s\t%d\n",top->name,top->number);
for(i=0;i<length;i++)
{
j=top->sub[i].subnum;
if(j==-1)
break;
printf("%s\t",subname[j-1]);
printf("%.2f\n",top->sub[j-1].score);
}
printf("总分\n");
printf("%.2lf\n",top->total);
gole++;
}
printf("\n");
top=top->next;
}
if(gole==0)
printf("没有您要查找的信息\n");
break;
case 3:
printf("请按任意键返回\n");
getch();
break;
default:
printf("输入错误,重新选择\n");
break;
}
}
while(choose!=1&&choose!=2&&choose!=3);
printf("请按任意键返回\n");
getch();
}
//修改学生信息
MESSAGE *changestu(MESSAGE *head)
{
char name[20];
int number;
int gole=0;
int choose;
MESSAGE *p;
p=MES;
if(p==NULL)
{
printf("分配内存失败\n");
exit(1);
}
if(head!=NULL)
{
do
{
int number;
int gole=0;
int choose;
MESSAGE *p;
p=MES;
if(p==NULL)
{
printf("分配内存失败\n");
exit(1);
}
if(head!=NULL)
{
do
{
fflush(stdin);
printf("请选择\n1.姓名查找\n2.学号查找\n3.返回\n");
scanf("%d",&choose);
p=head;
if(choose==1)
{
fflush(stdin);
printf("请输入修改的姓名\n");
gets(name);
while(p!=NULL)
{
if(!strcmp(name,p->name))
{
p=change(p);
gole++;
}
p=p->next;
}
if(gole==0)
printf("没有您要修改的信息");
}
printf("请选择\n1.姓名查找\n2.学号查找\n3.返回\n");
scanf("%d",&choose);
p=head;
if(choose==1)
{
fflush(stdin);
printf("请输入修改的姓名\n");
gets(name);
while(p!=NULL)
{
if(!strcmp(name,p->name))
{
p=change(p);
gole++;
}
p=p->next;
}
if(gole==0)
printf("没有您要修改的信息");
}
else if(choose==2)
{
fflush(stdin);
printf("请输入要修改的学号\n");
scanf("%d",&number);
while(p!=NULL)
{
if(number==p->number)
{
p=change(p);
}
p=p->next;
}
if(gole==0)
printf("没有您要修改的信息\n");}
{
fflush(stdin);
printf("请输入要修改的学号\n");
scanf("%d",&number);
while(p!=NULL)
{
if(number==p->number)
{
p=change(p);
}
p=p->next;
}
if(gole==0)
printf("没有您要修改的信息\n");}
if(choose==3)
{
printf("请按任意键返回\n");getch();break;
}
else{
printf("输入错误,重新选择\n");
}
}
while(choose!=1&&choose!=2&&choose!=3);
}
else {
printf("没有信息,请存入信息");}
printf("请按任意键返回\n");
getch();
return head;
}
//分别修改学生信息
MESSAGE *change(MESSAGE *p)
{
int choose1;
printf("姓名\t性别\t学号\t年龄\t\t学院\t班级\t专业\t身份证号\t\n");
printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
p->name,p->sex,p->number,p->age,p->collage,p->Class,p->major,p->ID);
do
{
fflush(stdin);
printf("请选择\n");
printf("1.姓名\t2.性别\t3.学号\t4.年龄\t5.学院\t6.班级\t7.专业\t8.身份证号\t9.返回\t\n");
//选择修改的信息
scanf("%d",&choose1);
switch(choose1)
{
case 1:
fflush(stdin);
printf("请输入要修改的名字\n");
gets(p->name);
printf("已经修改成功\n");
break;
case 2:
fflush(stdin);
printf("请输入要修改的性别\n");
gets(p->sex);
printf("已经修改成功\n");
break;
case 3:
fflush(stdin);
printf("请输入要修改的学号\n");
scanf("%d",&p->number);
printf("已经修改成功\n");
break;
case 4:
fflush(stdin);
printf("请输入要修改的年龄\n");
scanf("%d",&p->age);
printf("已经修改成功\n");
break;
case 5:
fflush(stdin);
printf("请输入要修改的学院\n");
gets(p->collage);
printf("已经修改成功\n");
break;
case 6:
fflush(stdin);
printf("请输入要修改的班级\n");
scanf("%d",&p->Class);
printf("已经修改成功\n");
break;
case 7:
fflush(stdin);
printf("请输入要修改的专业\n");
gets(p->major);
printf("已经修改成功\n");
break;
case 8:
fflush(stdin);
printf("请输入要修改的身份证号\n");
gets(p->ID);
printf("已经修改成功\n");
break;
case 9:
break;
default:
printf("您输入的错误,请重新选择\n");
break;
}
} while(choose1!=1&&choose1!=2&&choose1!=3&&choose1!=4&&
choose1!=5&&choose1!=6&&choose1!=7&&choose1!=8&&choose1!=9);
getch();
return p;
}
//修改学生成绩信息
{
printf("请按任意键返回\n");getch();break;
}
else{
printf("输入错误,重新选择\n");
}
}
while(choose!=1&&choose!=2&&choose!=3);
}
else {
printf("没有信息,请存入信息");}
printf("请按任意键返回\n");
getch();
return head;
}
//分别修改学生信息
MESSAGE *change(MESSAGE *p)
{
int choose1;
printf("姓名\t性别\t学号\t年龄\t\t学院\t班级\t专业\t身份证号\t\n");
printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
p->name,p->sex,p->number,p->age,p->collage,p->Class,p->major,p->ID);
do
{
fflush(stdin);
printf("请选择\n");
printf("1.姓名\t2.性别\t3.学号\t4.年龄\t5.学院\t6.班级\t7.专业\t8.身份证号\t9.返回\t\n");
//选择修改的信息
scanf("%d",&choose1);
switch(choose1)
{
case 1:
fflush(stdin);
printf("请输入要修改的名字\n");
gets(p->name);
printf("已经修改成功\n");
break;
case 2:
fflush(stdin);
printf("请输入要修改的性别\n");
gets(p->sex);
printf("已经修改成功\n");
break;
case 3:
fflush(stdin);
printf("请输入要修改的学号\n");
scanf("%d",&p->number);
printf("已经修改成功\n");
break;
case 4:
fflush(stdin);
printf("请输入要修改的年龄\n");
scanf("%d",&p->age);
printf("已经修改成功\n");
break;
case 5:
fflush(stdin);
printf("请输入要修改的学院\n");
gets(p->collage);
printf("已经修改成功\n");
break;
case 6:
fflush(stdin);
printf("请输入要修改的班级\n");
scanf("%d",&p->Class);
printf("已经修改成功\n");
break;
case 7:
fflush(stdin);
printf("请输入要修改的专业\n");
gets(p->major);
printf("已经修改成功\n");
break;
case 8:
fflush(stdin);
printf("请输入要修改的身份证号\n");
gets(p->ID);
printf("已经修改成功\n");
break;
case 9:
break;
default:
printf("您输入的错误,请重新选择\n");
break;
}
} while(choose1!=1&&choose1!=2&&choose1!=3&&choose1!=4&&
choose1!=5&&choose1!=6&&choose1!=7&&choose1!=8&&choose1!=9);
getch();
return p;
}
//修改学生成绩信息
MARK *changestuMark(MARK *top)
{
char name[20];
int number;
int gole=0;
int choose;
MARK *p;
p=MAR;
if(p==NULL)
{
printf("分配内存失败\n");
exit(1);
}
if(top!=NULL)
{
do{
fflush(stdin);
printf("请选择\n1.姓名\n2.学号\n3.返回");
scanf("%d",&choose);
p=top;
if(choose==1)
{
fflush(stdin);
printf("请输入要修改的信息的名字\n");
gets(name);
while(p!=NULL)
{
if(strcmp(name,p->name))
{
p=changeMark(p);
gole++;
}
p=p->next;
}
if(gole==0)
printf("没有您要修改的信息\n");
}
if(choose==2)
{
fflush(stdin);
printf("请输入您要修改信息的学号\n");
scanf("%d",&number);
while(p!=NULL)
{
if((number=p->number))
{
p=changeMark(p);
gole++;
}
p=p->next;
}
if(gole==0)
printf("没有您要修改的信息\n");
}
else if(choose==3)
{
printf("请按任意键返回主菜单\n");
getch();
break;
}
else
printf("输入错误,请重新输入\n");
}while(choose!=1&&choose!=2&&choose!=3);
}
else
printf("没有信息,请先存入信息\n");
printf("请按任意键返回\n");
getch();
return top;
}
//分别修改学生成绩信息
MARK *changeMark(MARK *p)
{
int choose1,i,j,k=3,m,gole=0;
float change=0;
printf("姓名\t学号\n");
printf("%s\t%d\n",p->name,p->number);
for(i=0;i<length;i++)
{
j=p->sub[i].subnum;
if(j==-1)
break;
gole++;
printf("%s\n",subname[j-1]);
printf("%.2f\n",p->sub[j-1].score);
printf("\n");
}
printf("总分\n");
printf("%.2lf\n",p->total);
do
{
fflush(stdin);
printf("请选择(1 姓名 2 学号");
for(i=0;i<length;i++)
{
j=p->sub[i].subnum;
if(j==-1)
break;
printf("%d %s",i+3,subname[j-1]);
}
printf("\n");
scanf("%d",&choose1);
if(choose1==1)
{
fflush(stdin);
printf("请输入要修改的名字\n");
gets(p->name);
printf("已经修改\n");
}
if(choose1==2)
{
fflush(stdin);
printf("请输入要修改的学号");
scanf("%d",&p->number);
printf("已经修改成功");
}
while(1)
{
if(choose1==k)
{
fflush(stdin);
m=p->sub[k-3].subnum;
printf("输入要修改的%s分数\n",subname[m-1]);
change=p->sub[m-1].score;
scanf("%.3f",&p->sub[m-1].score);
p->total+=(int)(p->sub[m-1].score-change)/gole;
printf("已经修改成功\n");
break;
}
k++;
}
}while(choose1!=1&&choose1!=2&&choose1!=3&&choose1!=4&&choose1!=5&&choose1!=6);
getch();
return p;
}
//删除信息菜单
{
char name[20];
int number;
int gole=0;
int choose;
MARK *p;
p=MAR;
if(p==NULL)
{
printf("分配内存失败\n");
exit(1);
}
if(top!=NULL)
{
do{
fflush(stdin);
printf("请选择\n1.姓名\n2.学号\n3.返回");
scanf("%d",&choose);
p=top;
if(choose==1)
{
fflush(stdin);
printf("请输入要修改的信息的名字\n");
gets(name);
while(p!=NULL)
{
if(strcmp(name,p->name))
{
p=changeMark(p);
gole++;
}
p=p->next;
}
if(gole==0)
printf("没有您要修改的信息\n");
}
if(choose==2)
{
fflush(stdin);
printf("请输入您要修改信息的学号\n");
scanf("%d",&number);
while(p!=NULL)
{
if((number=p->number))
{
p=changeMark(p);
gole++;
}
p=p->next;
}
if(gole==0)
printf("没有您要修改的信息\n");
}
else if(choose==3)
{
printf("请按任意键返回主菜单\n");
getch();
break;
}
else
printf("输入错误,请重新输入\n");
}while(choose!=1&&choose!=2&&choose!=3);
}
else
printf("没有信息,请先存入信息\n");
printf("请按任意键返回\n");
getch();
return top;
}
//分别修改学生成绩信息
MARK *changeMark(MARK *p)
{
int choose1,i,j,k=3,m,gole=0;
float change=0;
printf("姓名\t学号\n");
printf("%s\t%d\n",p->name,p->number);
for(i=0;i<length;i++)
{
j=p->sub[i].subnum;
if(j==-1)
break;
gole++;
printf("%s\n",subname[j-1]);
printf("%.2f\n",p->sub[j-1].score);
printf("\n");
}
printf("总分\n");
printf("%.2lf\n",p->total);
do
{
fflush(stdin);
printf("请选择(1 姓名 2 学号");
for(i=0;i<length;i++)
{
j=p->sub[i].subnum;
if(j==-1)
break;
printf("%d %s",i+3,subname[j-1]);
}
printf("\n");
scanf("%d",&choose1);
if(choose1==1)
{
fflush(stdin);
printf("请输入要修改的名字\n");
gets(p->name);
printf("已经修改\n");
}
if(choose1==2)
{
fflush(stdin);
printf("请输入要修改的学号");
scanf("%d",&p->number);
printf("已经修改成功");
}
while(1)
{
if(choose1==k)
{
fflush(stdin);
m=p->sub[k-3].subnum;
printf("输入要修改的%s分数\n",subname[m-1]);
change=p->sub[m-1].score;
scanf("%.3f",&p->sub[m-1].score);
p->total+=(int)(p->sub[m-1].score-change)/gole;
printf("已经修改成功\n");
break;
}
k++;
}
}while(choose1!=1&&choose1!=2&&choose1!=3&&choose1!=4&&choose1!=5&&choose1!=6);
getch();
return p;
}
//删除信息菜单
MESSAGE *deletemenu(MESSAGE *head)
{
int choose;
printf("删除信息\n");
printf("1.删除个人信息\n");
printf("2.删除班级信息\n");
printf("3.删除全部信息\n");
fflush(stdin);
printf("请选择\n");
scanf("%d",&choose);
if(choose==1)
head=deletestuone(head);
if(choose==2)
head=deletestuclass(head);
if(choose==3)
head=deletestuall(head);
else
printf("输入错误\n");
return head;
}
//删除班级
MESSAGE *deletestuclass(MESSAGE *head)
{
int Class;
int gole=0;
MESSAGE *p1,*p2,*p3=head;
MESSAGE *p=head;
fflush(stdin);
printf("请输入删除的班级");
scanf("%d",&Class);
while(p3!=NULL)
{
p1=head;
p2=head;
while((p1->next!=NULL)&&(p2->Class!=Class))
{
p2=p1;
p1=p1->next;
{
int choose;
printf("删除信息\n");
printf("1.删除个人信息\n");
printf("2.删除班级信息\n");
printf("3.删除全部信息\n");
fflush(stdin);
printf("请选择\n");
scanf("%d",&choose);
if(choose==1)
head=deletestuone(head);
if(choose==2)
head=deletestuclass(head);
if(choose==3)
head=deletestuall(head);
else
printf("输入错误\n");
return head;
}
//删除班级
MESSAGE *deletestuclass(MESSAGE *head)
{
int Class;
int gole=0;
MESSAGE *p1,*p2,*p3=head;
MESSAGE *p=head;
fflush(stdin);
printf("请输入删除的班级");
scanf("%d",&Class);
while(p3!=NULL)
{
p1=head;
p2=head;
while((p1->next!=NULL)&&(p2->Class!=Class))
{
p2=p1;
p1=p1->next;
}
if(p1->Class==Class)
{
printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
p->name,p->sex,p->number,p->age,p->collage,p->Class,p->major,p->ID);
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
free(p1);
gole++;
if(p1->Class==Class)
{
printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
p->name,p->sex,p->number,p->age,p->collage,p->Class,p->major,p->ID);
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
free(p1);
gole++;
}else
printf("该班级没有信息\n");
p3=p3->next;
}
if(gole!=0)
printf("共删除该班级%d条信息",gole);
getch();
return head;
}
printf("该班级没有信息\n");
p3=p3->next;
}
if(gole!=0)
printf("共删除该班级%d条信息",gole);
getch();
return head;
}
//删除全部信息
MESSAGE *deletestuall(MESSAGE *head)
{
int count=0;
while(head!=NULL)
{
count++;
head=head->next;
}
printf("共删除%d条信息",count);
return head;
}
//删除学生个人信息
MESSAGE *deletestuone(MESSAGE *head)
{
char name[20];
int number;
int gole=0;
int choose;
char m;
MESSAGE*p1,*p2,*find;
MESSAGE*p=head;
p1=MES;
p2=MES;
find=MES;
if(p1==NULL)//分配内存
{
printf("分配内存失败");
exit(1);
}
if(p2==NULL)
{
printf("分配内存失败");
exit(1);
}
if(find==NULL)
{
printf("分配内存失败");
exit(1);
}
if(head!=NULL)
{
p1=head;
p2=head;
do
{
fflush(stdin);
printf("请选择\n1.姓名\n2.学号\n3.返回\n");
scanf("%d",&choose);
switch(choose)
{
case 1:
find=head;
fflush(stdin);
printf("请输入要删除的信息名字\n");
gets(name);
while(find!=NULL)
{
if(strcmp(name,find->name))
{
printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
p->name,p->sex,p->number,p->age,p->collage,p->Class,p->major,p->ID);
gole++;
}
printf("\n");
find=find->next;
}
if(gole==0)
printf("没有您要删除的信息\n");
else
{
fflush(stdin);
printf("是否要删除以上的信息(y/n)\n");
m=getchar();
if(m=='y')
{
while((p1->next=NULL)&&(strcmp(name,p1->name)!=0))
{
p2=p1;p1=p1->next;
}
if(strcmp(name,p1->name)==0)
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
free(p1);
}
printf("成功删除以上信息\n");
}
}
printf("请按任意键返回\n");
getch();
break;
MESSAGE *deletestuall(MESSAGE *head)
{
int count=0;
while(head!=NULL)
{
count++;
head=head->next;
}
printf("共删除%d条信息",count);
return head;
}
//删除学生个人信息
MESSAGE *deletestuone(MESSAGE *head)
{
char name[20];
int number;
int gole=0;
int choose;
char m;
MESSAGE*p1,*p2,*find;
MESSAGE*p=head;
p1=MES;
p2=MES;
find=MES;
if(p1==NULL)//分配内存
{
printf("分配内存失败");
exit(1);
}
if(p2==NULL)
{
printf("分配内存失败");
exit(1);
}
if(find==NULL)
{
printf("分配内存失败");
exit(1);
}
if(head!=NULL)
{
p1=head;
p2=head;
do
{
fflush(stdin);
printf("请选择\n1.姓名\n2.学号\n3.返回\n");
scanf("%d",&choose);
switch(choose)
{
case 1:
find=head;
fflush(stdin);
printf("请输入要删除的信息名字\n");
gets(name);
while(find!=NULL)
{
if(strcmp(name,find->name))
{
printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
p->name,p->sex,p->number,p->age,p->collage,p->Class,p->major,p->ID);
gole++;
}
printf("\n");
find=find->next;
}
if(gole==0)
printf("没有您要删除的信息\n");
else
{
fflush(stdin);
printf("是否要删除以上的信息(y/n)\n");
m=getchar();
if(m=='y')
{
while((p1->next=NULL)&&(strcmp(name,p1->name)!=0))
{
p2=p1;p1=p1->next;
}
if(strcmp(name,p1->name)==0)
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
free(p1);
}
printf("成功删除以上信息\n");
}
}
printf("请按任意键返回\n");
getch();
break;
case 2:
fflush(stdin);
printf("请输入要删除的信息学号\n");
scanf("%d",&number);
find=head;
while(find!=NULL)
{
if(number==find->number)
{
printf("姓名\t性别\t学号\t年龄\t学院\t班级\t专业\t身份证号\t\n");
printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
p->name,p->sex,p->number,p->age,p->collage,p->Class,p->major,p->ID);
gole++;
}
printf("\n");
find=find->next;
}
if(gole==0)
printf("没有您要删除的信息\n");
else
{
fflush(stdin);
printf("是否要删除以上的信息(y/n)\n");
m=getchar();
if(m=='y')
{
while((p1->next=NULL)&&(number!=p1->number))
{
p2=p1;p1=p1->next;
}
if(number==p1->number)
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
free(p1);
}
printf("成功删除以上信息\n");
}
}
printf("请按任意键返回\n");
getch();
break;
case 3:
printf("请按任意键返回\n");
getch();
break;
default:
printf("您输入错误,请重新选择\n");
break;
}
}while(choose!=1&&choose!=2&&choose!=3);
}
else {
printf("没有信息,请存入信息");
}
printf("请按任意键返回\n");
getch();
return head;
}
fflush(stdin);
printf("请输入要删除的信息学号\n");
scanf("%d",&number);
find=head;
while(find!=NULL)
{
if(number==find->number)
{
printf("姓名\t性别\t学号\t年龄\t学院\t班级\t专业\t身份证号\t\n");
printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
p->name,p->sex,p->number,p->age,p->collage,p->Class,p->major,p->ID);
gole++;
}
printf("\n");
find=find->next;
}
if(gole==0)
printf("没有您要删除的信息\n");
else
{
fflush(stdin);
printf("是否要删除以上的信息(y/n)\n");
m=getchar();
if(m=='y')
{
while((p1->next=NULL)&&(number!=p1->number))
{
p2=p1;p1=p1->next;
}
if(number==p1->number)
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
free(p1);
}
printf("成功删除以上信息\n");
}
}
printf("请按任意键返回\n");
getch();
break;
case 3:
printf("请按任意键返回\n");
getch();
break;
default:
printf("您输入错误,请重新选择\n");
break;
}
}while(choose!=1&&choose!=2&&choose!=3);
}
else {
printf("没有信息,请存入信息");
}
printf("请按任意键返回\n");
getch();
return head;
}
//删除成绩菜单
MARK *deleteMarkmenu(MARK *top)
{
int choose;
printf("删除信息\n");;
MARK *deleteMarkmenu(MARK *top)
{
int choose;
printf("删除信息\n");;
printf("1.删除个人信息\n");
printf("2.删除全部信息");
fflush(stdin);
printf("请选择\n");
scanf("%d",&choose);
if(choose==1)
top=deletestuMarkone(top);
if(choose==2)
top=deletestuMarkall(top);
else
printf("输入错误\n");
return top;
}
printf("2.删除全部信息");
fflush(stdin);
printf("请选择\n");
scanf("%d",&choose);
if(choose==1)
top=deletestuMarkone(top);
if(choose==2)
top=deletestuMarkall(top);
else
printf("输入错误\n");
return top;
}
//删除学生个人成绩信息
MARK *deletestuMarkone(MARK *top)
{
char name[20];
int number,i,j;
int gole=0;
int choose;
char m;
MARK *p1,*p2,*find;
p1=MAR;
p2=MAR;
find=MAR;
if((p1=NULL))
{
printf("分配内存失败");
exit(1);
}
if((p2=NULL))
{
printf("分配内存失败");
exit(1);
}if((find=NULL))
{
printf("分配内存失败");
exit(1);
}
if(top!=NULL)
{
p1=top;
p2=top;
do
{
fflush(stdin);
printf("请选择\n1.姓名\n 2.学号\n 3.返回\n");
scanf("%d",&choose);
switch(choose)
{
case 1:
find=top;
fflush(stdin);
printf("输入要删除的名字\n");
gets(name);
while(find!=NULL)
{
if(!strcmp(name,find->name))
{
printf("姓名\t学号\n");
printf("%s\t%d\n",find->name,find->number);
for(i=0;i<length;i++)
{
j=find->sub[i].subnum;
if(j==-1)
break;
printf("%s\n",subname[j-1]);
printf("%.2f\n",find->sub[j-1].score);
printf("\n");
}
printf("总分\n");
printf("%.2lf\n",find->total);
gole++;
}
printf("\n");
find=find->next;
}
if(gole==0)
{
printf("没有您要删除的信息\n");
MARK *deletestuMarkone(MARK *top)
{
char name[20];
int number,i,j;
int gole=0;
int choose;
char m;
MARK *p1,*p2,*find;
p1=MAR;
p2=MAR;
find=MAR;
if((p1=NULL))
{
printf("分配内存失败");
exit(1);
}
if((p2=NULL))
{
printf("分配内存失败");
exit(1);
}if((find=NULL))
{
printf("分配内存失败");
exit(1);
}
if(top!=NULL)
{
p1=top;
p2=top;
do
{
fflush(stdin);
printf("请选择\n1.姓名\n 2.学号\n 3.返回\n");
scanf("%d",&choose);
switch(choose)
{
case 1:
find=top;
fflush(stdin);
printf("输入要删除的名字\n");
gets(name);
while(find!=NULL)
{
if(!strcmp(name,find->name))
{
printf("姓名\t学号\n");
printf("%s\t%d\n",find->name,find->number);
for(i=0;i<length;i++)
{
j=find->sub[i].subnum;
if(j==-1)
break;
printf("%s\n",subname[j-1]);
printf("%.2f\n",find->sub[j-1].score);
printf("\n");
}
printf("总分\n");
printf("%.2lf\n",find->total);
gole++;
}
printf("\n");
find=find->next;
}
if(gole==0)
{
printf("没有您要删除的信息\n");
}
else
{
else
{
fflush(stdin);
printf("是否要删除以上的信息\n");
m=getchar();
if(m=='y'||m=='Y')
{
while(p1->next!=NULL&&(strcmp(name,p1->name)!=0))
{
p2=p1;
p1=p1->next;
printf("是否要删除以上的信息\n");
m=getchar();
if(m=='y'||m=='Y')
{
while(p1->next!=NULL&&(strcmp(name,p1->name)!=0))
{
p2=p1;
p1=p1->next;
}
if(strcmp(name,p1->name)==0)
{
if(p1==top)
top=p1->next;
else
p2->next=p1->next;
free(p1);
}
printf("成功删除以上信息");
if(strcmp(name,p1->name)==0)
{
if(p1==top)
top=p1->next;
else
p2->next=p1->next;
free(p1);
}
printf("成功删除以上信息");
}
}
printf("请按任意键返回\n");
getch();
break;
case 2:
fflush(stdin);
printf("请按任意键返回\n");
getch();
break;
case 2:
fflush(stdin);
printf("请输入要删除的信息学号\n");
scanf("%d",&number);
find=top;
while(find!=NULL)
{
if(number==find->number)
{
printf("姓名\t学号\n");
printf("%s\t%d\n",find->name,find->number);
for(i=0;i<length;i++)
{
j=find->sub[i].subnum;
if(j==1)
break;
printf("%s\n",subname[j-1]);
printf("%.2f\n",find->sub[j-1].score);
printf("\n");
scanf("%d",&number);
find=top;
while(find!=NULL)
{
if(number==find->number)
{
printf("姓名\t学号\n");
printf("%s\t%d\n",find->name,find->number);
for(i=0;i<length;i++)
{
j=find->sub[i].subnum;
if(j==1)
break;
printf("%s\n",subname[j-1]);
printf("%.2f\n",find->sub[j-1].score);
printf("\n");
}
printf("总分\n");
printf("%.2lf\n",find->total);
gole++;
}
printf("\n");
find=find->next;
}
if(gole==0)
printf("没有您要删除的信息\n");
else
{
fflush(stdin);
printf("是否要删除以上的信息(y/n)\n");
m=getchar();
if(m=='y'||m=='Y')
{
while(p1->next!=NULL&&(number!=p1->number))
{
p2=p1;
p1=p1->next;
printf("总分\n");
printf("%.2lf\n",find->total);
gole++;
}
printf("\n");
find=find->next;
}
if(gole==0)
printf("没有您要删除的信息\n");
else
{
fflush(stdin);
printf("是否要删除以上的信息(y/n)\n");
m=getchar();
if(m=='y'||m=='Y')
{
while(p1->next!=NULL&&(number!=p1->number))
{
p2=p1;
p1=p1->next;
}
if(number==p1->number)
{
if(p1==top)
top=p1->next;
else
p2->next=p1->next;
free(p1);
}
printf("成功删除以上信息");
if(number==p1->number)
{
if(p1==top)
top=p1->next;
else
p2->next=p1->next;
free(p1);
}
printf("成功删除以上信息");
}
}
printf("请按任意键返回\n");
getch();
break;
case 3:
printf("请按任意键返回\n");
getch();
break;
default:
printf("输入错误,重新输入\n");
break;
}
}while(choose!=1&&choose!=2&&choose!=3);
}
else {
printf("没有信息,请存入信息");
printf("请按任意键返回\n");
getch();
}
return top;
}
//删除全部成绩
MARK *deletestuMarkall(MARK *top)
{
int count=0;
while(top!=NULL)
{
count++;
top=top->next;
printf("请按任意键返回\n");
getch();
break;
case 3:
printf("请按任意键返回\n");
getch();
break;
default:
printf("输入错误,重新输入\n");
break;
}
}while(choose!=1&&choose!=2&&choose!=3);
}
else {
printf("没有信息,请存入信息");
printf("请按任意键返回\n");
getch();
}
return top;
}
//删除全部成绩
MARK *deletestuMarkall(MARK *top)
{
int count=0;
while(top!=NULL)
{
count++;
top=top->next;
}
printf("总共删除%d条信息\n",count);
return top;
}
printf("总共删除%d条信息\n",count);
return top;
}
//浏览学生信息文件
MESSAGE *readfilestu(MESSAGE *head)
{
char *filename;
MESSAGE *add;
FILE *stu;
filename=(char *)malloc(sizeof(char));
fflush(stdin);
printf("请输入要读取的文件");
gets(filename);
filename=strcat(filename,".txt");
stu=fopen(filename,"r");
if(stu==NULL)
{
printf("文件中没有任何文件,请存入\n");
}
else{
while(!feof(stu))
{
add=MES;
if(add==NULL)
{
printf("申请内存失败\n");
exit(1);
}
printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
fscanf(stu,"%s%s%d%d%s%s%d%s%s",
add->name,add->sex,&add->number,&add->age,add->collage,&add->Class,add->major,add->ID);
printf("%s\t%s\t%d\t%d\t%s\t%s\t%s\t%s\t\n",
add->name,add->sex,add->number,add->age,add->collage,add->Class,add->major,add->ID);
add->next=head;
head=add;
add=add->next;
}
fclose(stu);
printf("读取信息成功\n");
}
printf("请按任意键返回\n");
getch();
return head;
}
//浏览成绩文件
MARK *readfilestuMark(MARK *top)
{
int i,k=0;
char *filename;
FILE *stu;
MARK *add,*p1=top,*p2=top;
filename=(char *)malloc(sizeof(char));
fflush(stdin);
printf("请输入要读取的文件");
gets(filename);
filename=strcat(filename,".txt");
stu=fopen(filename,"r");
if(stu==NULL)
{
printf("文件中没有任何文件,请存入\n");
}
else{
while(!feof(stu))
{
add=MAR;
if(add==NULL)
{
printf("申请内存失败\n");
exit(1);
}
printf("姓名\t学号\n");
fscanf(stu,"%s%d",&add->name,&add->number);
printf("%s\t%d\n",add->name,add->number);
for(i=0;i<length;i++)
{
printf("%s\t",subname[i]);
MESSAGE *readfilestu(MESSAGE *head)
{
char *filename;
MESSAGE *add;
FILE *stu;
filename=(char *)malloc(sizeof(char));
fflush(stdin);
printf("请输入要读取的文件");
gets(filename);
filename=strcat(filename,".txt");
stu=fopen(filename,"r");
if(stu==NULL)
{
printf("文件中没有任何文件,请存入\n");
}
else{
while(!feof(stu))
{
add=MES;
if(add==NULL)
{
printf("申请内存失败\n");
exit(1);
}
printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
fscanf(stu,"%s%s%d%d%s%s%d%s%s",
add->name,add->sex,&add->number,&add->age,add->collage,&add->Class,add->major,add->ID);
printf("%s\t%s\t%d\t%d\t%s\t%s\t%s\t%s\t\n",
add->name,add->sex,add->number,add->age,add->collage,add->Class,add->major,add->ID);
add->next=head;
head=add;
add=add->next;
}
fclose(stu);
printf("读取信息成功\n");
}
printf("请按任意键返回\n");
getch();
return head;
}
//浏览成绩文件
MARK *readfilestuMark(MARK *top)
{
int i,k=0;
char *filename;
FILE *stu;
MARK *add,*p1=top,*p2=top;
filename=(char *)malloc(sizeof(char));
fflush(stdin);
printf("请输入要读取的文件");
gets(filename);
filename=strcat(filename,".txt");
stu=fopen(filename,"r");
if(stu==NULL)
{
printf("文件中没有任何文件,请存入\n");
}
else{
while(!feof(stu))
{
add=MAR;
if(add==NULL)
{
printf("申请内存失败\n");
exit(1);
}
printf("姓名\t学号\n");
fscanf(stu,"%s%d",&add->name,&add->number);
printf("%s\t%d\n",add->name,add->number);
for(i=0;i<length;i++)
{
printf("%s\t",subname[i]);
}
printf("\n");
for(i=0;i<length;i++)
{
fscanf(stu,"%f",&add->sub[i].score);
printf("%.3f\t",add->sub[i].score);
if(add->sub[i].score!=0)
{
add->sub[k].subnum=i+1;
k++;
}
}
add->sub[k].subnum=-1;
printf("总分\n");
fscanf(stu,"%lf\n",&add->total);
printf("%.4lf\n",add->total);
add->next=NULL;
if(!top)
{
top=add;
}
else
{
//找到插入的位置
while(p1)
{
if(p1->total>=add->total)
{
p2=p1;
p1=p1->next;
}
else
break;
}
add->next=p1;
p2->next=add;
}
add=add->next;
}
fclose(stu);
printf("读取信息成功\n");
}
printf("请按任意键返回\n");
getch();
return top;
}
//储存学生信息文件
void savefilestu(MESSAGE *head)
{
char *filename;
FILE *stu;
MESSAGE *p;
if(head==NULL)
{
printf("没有任何信息,请先存入信息\n");
printf("请按任意键返回\n");
getch();
}
else
{
p=head;
filename=(char*)malloc(sizeof(char));
fflush(stdin);
printf("请输入要保存的文件\n");
gets(filename);
filename=strcat(filename,".txt");
stu=fopen(filename,"a+");
do
{
printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
p->name,p->sex,p->number,p->age,p->collage,p->Class,p->major,p->ID);
p=p->next;
}
while(p!=NULL);
fclose(stu);
printf("已经将信息保存入%s中\n",filename);
}
printf("请按任意键返回\n");
getch();
}
//储存学生成绩文件
void savefilestuMark(MARK *top)
{
int i,j,k=0;
char *filename;
FILE*stu;
MARK*p;
p=MAR;
if(top==NULL)
{
printf("没有任何信息,请先存入信息\n");
printf("请按任意键返回\n");
getch();
}
else
{
p=top;
filename=(char *)malloc(sizeof(char));
fflush(stdin);
printf("请输入你要保存文件的名字\n");
gets(filename);
filename=strcat(filename,".txt");
stu=fopen(filename,"a+");
while(p!=NULL)
{
printf("姓名\t学号\n");
fprintf(stu,"%s\t%d\t",p->name,p->number);
printf("%s\t%d\n",p->name,p->number);
for(i=0;i<length;i++)
{
printf("%s\t",subname[i]);
}
printf("\n");
for(i=0;i<length;i++)
{
j=p->sub[i].subnum;
if(j==-1)
{
while(k<length)
{
fprintf(stu,"0\t");
printf("0\t");
k++;
}
break;}
else{
while(k<length)
{
printf("\n");
for(i=0;i<length;i++)
{
fscanf(stu,"%f",&add->sub[i].score);
printf("%.3f\t",add->sub[i].score);
if(add->sub[i].score!=0)
{
add->sub[k].subnum=i+1;
k++;
}
}
add->sub[k].subnum=-1;
printf("总分\n");
fscanf(stu,"%lf\n",&add->total);
printf("%.4lf\n",add->total);
add->next=NULL;
if(!top)
{
top=add;
}
else
{
//找到插入的位置
while(p1)
{
if(p1->total>=add->total)
{
p2=p1;
p1=p1->next;
}
else
break;
}
add->next=p1;
p2->next=add;
}
add=add->next;
}
fclose(stu);
printf("读取信息成功\n");
}
printf("请按任意键返回\n");
getch();
return top;
}
//储存学生信息文件
void savefilestu(MESSAGE *head)
{
char *filename;
FILE *stu;
MESSAGE *p;
if(head==NULL)
{
printf("没有任何信息,请先存入信息\n");
printf("请按任意键返回\n");
getch();
}
else
{
p=head;
filename=(char*)malloc(sizeof(char));
fflush(stdin);
printf("请输入要保存的文件\n");
gets(filename);
filename=strcat(filename,".txt");
stu=fopen(filename,"a+");
do
{
printf("姓名\t性别\t学号\t\t年龄\t学院\t班级\t专业\t身份证号\t\n");
printf("%s\t%s\t%d\t%d\t%s\t%d\t%s\t%s\t\n",
p->name,p->sex,p->number,p->age,p->collage,p->Class,p->major,p->ID);
p=p->next;
}
while(p!=NULL);
fclose(stu);
printf("已经将信息保存入%s中\n",filename);
}
printf("请按任意键返回\n");
getch();
}
//储存学生成绩文件
void savefilestuMark(MARK *top)
{
int i,j,k=0;
char *filename;
FILE*stu;
MARK*p;
p=MAR;
if(top==NULL)
{
printf("没有任何信息,请先存入信息\n");
printf("请按任意键返回\n");
getch();
}
else
{
p=top;
filename=(char *)malloc(sizeof(char));
fflush(stdin);
printf("请输入你要保存文件的名字\n");
gets(filename);
filename=strcat(filename,".txt");
stu=fopen(filename,"a+");
while(p!=NULL)
{
printf("姓名\t学号\n");
fprintf(stu,"%s\t%d\t",p->name,p->number);
printf("%s\t%d\n",p->name,p->number);
for(i=0;i<length;i++)
{
printf("%s\t",subname[i]);
}
printf("\n");
for(i=0;i<length;i++)
{
j=p->sub[i].subnum;
if(j==-1)
{
while(k<length)
{
fprintf(stu,"0\t");
printf("0\t");
k++;
}
break;}
else{
while(k<length)
{
if(j==k)
{
k++;
fprintf(stu,"%.3f\t",p->sub[k-1].score);
printf("%.3f\t",p->sub[k-1].score);
break;
}
else{
fprintf(stu,"0\t");
printf("0\t");
}
}
}}
printf("\n");
printf("总分\n");
fprintf(stu,"%.4lf\n",p->total);
printf("%.4lf\n",p->total);
p=p->next;
}
fclose(stu);
printf("已经将信息保存到%s中\n",filename);
}
printf("按任意键返回\n");
getch();
}
{
k++;
fprintf(stu,"%.3f\t",p->sub[k-1].score);
printf("%.3f\t",p->sub[k-1].score);
break;
}
else{
fprintf(stu,"0\t");
printf("0\t");
}
}
}}
printf("\n");
printf("总分\n");
fprintf(stu,"%.4lf\n",p->total);
printf("%.4lf\n",p->total);
p=p->next;
}
fclose(stu);
printf("已经将信息保存到%s中\n",filename);
}
printf("按任意键返回\n");
getch();
}