学生管理系统C语言编程.docx
《学生管理系统C语言编程.docx》由会员分享,可在线阅读,更多相关《学生管理系统C语言编程.docx(44页珍藏版)》请在冰豆网上搜索。
学生管理系统C语言编程
/******头文件*******/
#include
#include
#include
#defineLENstuInforsizeof(structstuInfor)
#defineLENstuMarksizeof(structstuMark)
/******a函数声明********/
structstuInfor
{
charname[10];
longstunum;
charsex;
charschool[30];
charbirthday[10];
charstuclass[20];
structstuInfor*next;
};
voidstuManage();
voidfileSave(structstuInfor*head);
voidfindStudentMessage(structstuInfor*head);
voidfindOneStuInfor(structstuInfor*head);
voidfindclassStuInfor(structstuInfor*head);
voidfindSchoolStuInfor(structstuInfor*head);
voidfindAllStuInfor(structstuInfor*head);
voidstuMarkManage();
structstuInfor*insertStudentMessage(structstuInfor*head);
structstuInfor*changeStudentMessage(structstuInfor*head);
structstuInfor*changeOneStuMessage(structstuInfor*p);
structstuInfor*deleteStudentMessage(structstuInfor*head);
structstuInfor*deleteOneStuInfor(structstuInfor*head);
structstuInfor*deleteClassStuInfor(structstuInfor*head);
structstuInfro*deleteSchoolStuInfor(structstuInfor*head);
structstuInfor*readFile();
/*********b函数声明********/
structstuMark
{
longintstunumb;
charnameb[10];
floatchinese;
floatmath;
floatenglish;
floataverage;
structstuMark*nextb;
};
voidstuMarkManage();
voidfileSaveMark(structstuMark*headb);
voidfindStudentMark(structstuMark*headb);
voidfindOneStuMark(structstuMark*headb);
voidfindAllStuMark(structstuMark*headb);
structstuMark*insertStudentMark(structstuMark*headb);
structstuMark*changeStudentMark(structstuMark*headb);
structstuMark*changeOneStuMark(structstuMark*q);
structstuMark*deleteStudentMark(structstuMark*headb);
structstuMark*deleteOneStuMark(structstuMark*headb);
structstuMark*deleteSchoolStuMark(structstuMark*headb);
structstuMark*readFileMark();
/*******主函数******/
voidmain()
{
chari;/*用户选择的菜单*/
system("cls");
printf("****************************************\n");
printf("*学生信息管理系统*\n");
printf("*1学生基本信息管理*\n");
printf("*2学生成绩信息管理*\n");
printf("*3退出*\n");
printf("****************************************\n");
printf("请选择:
\n");
while(i=getchar())
{
switch(i)
{
case'1':
system("cls");stuManage();break;/*如果用户选择1,则跳到学生基本信息管理的页面*/
case'2':
system("cls");stuMarkManage();break;/*如果用户选择2,则跳到学生成绩信息管理页面*/
case'3':
exit(0);/*如果用户选择3,则推出程序*/
}
}
}
/*********子函数a*******/
voidstuManage()
{
charc;/*定义变量*/
structstuInfor*head;
head=readFile();/*链表*/
getchar();
while
(1)
{
system("cls");
printf("**************************************\n");
printf("*1录入学生信息*\n");
printf("*2更改学生信息*\n");
printf("*3查找学生信息*\n");
printf("*4删除学生信息*\n");
printf("*5退出*\n");
printf("**************************************\n");
printf("请选择:
(r/R返回主界面)\n");
c=getchar();
switch(c)
{
case'1':
head=insertStudentMessage(head);break;/*添加学生信息*/
case'2':
head=changeStudentMessage(head);break;/*更改学生信息*/
case'3':
findStudentMessage(head);break;/*查找学生信息*/
case'4':
head=deleteStudentMessage(head);break;/*删除学生信息*/
case'5':
exit(0);/*退出*/
case'r':
case'R':
main();
}
}
}
/*********a1********/
structstuInfor*insertStudentMessage(structstuInfor*head)
{
structstuInfor*p1,*p2,*p0;/*p0为存储输入的结构体,p1为移动链表指针p2为当前链表位置指针*/
charc;/*用于判断是否返回*/
p1=p2=NULL;
while
(1)
{
system("cls");
p0=(structstuInfor*)malloc(LENstuInfor);
printf("提示:
性别男输入m,女输入w\n\t生日格式19900425\n");
printf("\n请输入该学生的信息:
\n学号\t姓名\t性别\t出生日期\t班级\t学院(系)\n");
scanf("%ld\t%s\t%c\t%s\t%s\t%s",&p0->stunum,p0->name,&p0->sex,p0->birthday,p0->stuclass,p0->school);
getchar();
if(head==NULL)/*如果头结点为空*/
{
head=p0;/*把输入的节点赋给头结点*/
head->next=NULL;/*头结点的下一个节点为空*/
}
else/*如果头结点不为空*/
{
p2=p1=head;/*把头结点赋给移动的指针*/
while(p0->stunum>=p2->stunum&&p2->next!
=NULL)/*当插入的学生学号比现在的大时就向后移动指针*/
{
p1=p2;
p2=p2->next;/*两个指针均向后移动*/
}
if(p0->stunumstunum)
{
if(head==p2)
{
head=p0;
}
else
{
p1->next=p0;
}
p0->next=p2;/*把p0接在链表上*/
}
else
{
p2->next=p0;
p0->next=NULL;
}
}
printf("是否继续(y/n)?
\t");
c=getchar();
if(c=='y'||c=='Y')
{
;
}
else
{
getchar();/*读取系统缓冲字符*/
printf("是否保存到文件(y/n)?
\n");/*询问是否保存输入的学生信息*/
c=getchar();
if(c=='y'||c=='Y')
{
fileSave(head);
returnhead;
}
else
{
stuManage();
}
}
}
returnhead;
}
/************a11***********/
voidfileSave(structstuInfor*head)
{
structstuInfor*p=head;
FILE*fp;
p=head;
if(head==NULL)
{
printf("学生信息为空,无需保存!
");
}
else
{
if((fp=fopen("studentInfromation.txt","w"))==NULL)
{
printf("打开文件失败");
}
else
{
while(p!
=NULL)
{
if((fwrite(p,LENstuInfor,1,fp))!
=1)
printf("保存学生信息失败");
p=p->next;
}
}
fclose(fp);
}
}
/**************a2***********/
structstuInfor*changeStudentMessage(structstuInfor*head)
{
structstuInfor*p;
charselect;/*记录用户选择*/
longstunum;/*用于存储用户输入得学号*/
p=head;
if(p==NULL)
{
printf("学生基本信息记录为空,无需更改!
!
!
");
returnhead;
}
else
{
while
(1)/*用于判断是否继续更改*/
{
system("cls");
printf("请输入要更改信息的学生的学号:
\n");
getchar();
scanf("%ld",&stunum);/*输入用户要更改学生的学生的学号*/
while(p!
=NULL&&stunum!
=p->stunum)
{
p=p->next;
}
if(stunum==p->stunum)
{
p=changeOneStuMessage(p);/*调用函数changeOneStuMessage()更改一个学生的信息,未保存*/
}
else
{
printf("您输入的学号有误!
!
!
\n");
}
printf("是否继续?
(y/n)\n");
printf("请选择:
\n");
getchar();
select=getchar();
if(select=='y'||select=='Y')
{
;
}
else
{
fileSave(head);
break;
}
}
}
returnhead;
}
/***********a21**********/
structstuInfor*changeOneStuMessage(structstuInfor*p)
{
charselect;/*记录用户选择*/
printf("学号姓名性别出生日期班级\t\t学校(系)\n");
if(p->sex=='m')
{
printf("%-10ld%-10s男%-10s%-20s%-20s\n",p->stunum,p->name,p->birthday,p->stuclass,p->school);
}
else
{
printf("%-10ld%-10s女%-10s%-20s%-20s\n",p->stunum,p->name,p->birthday,p->stuclass,p->school);
}
system("pause");
printf("请输入您要更改的选项:
\n");
printf("1、姓名\t2、性别\t3、出生日期\t4、班级\t5、学院(系)\n");
printf("R/r返回\n");
printf("`````````````````````\n");
printf("请选择:
");
getchar();
select=getchar();
system("cls");/*清屏*/
getchar();
switch(select)
{
case'1':
{
printf("请输入更正后的姓名:
\n");
scanf("%s",p->name);
break;
}
case'2':
{
printf("请输入更正后的性别(男(请输入m)/女(请输入w):
\n");
scanf("%c",&p->sex);
break;
}
case'3':
{
printf("请输入更正后的出生年月:
(如19900425)\n");
scanf("%s",p->birthday);
break;
}
case'4':
{
printf("请输入更正后的班级:
\n");
scanf("%s",p->stuclass);
break;
}
case'5':
{
printf("请输入更正后的学院(系):
\n");
scanf("%s",p->school);
break;
}
case'r':
case'R':
{
returnp;
}
}
returnp;
}
/**********a3*********/
voidfindStudentMessage(structstuInfor*head)/*用于查找学生的信息*/
{
intselect;/*用于用户输入选择的功能*/
while
(1)
{
getchar();
system("cls");
printf("1查找一个学生的信息\n");
printf("2查找一个班学生的信息\n");
printf("3查找一个学院(系)的学生的信息\n");
printf("4查找所有学生的记录\n");
printf("5返回\n");
printf("6退出\n");
printf("``````````````````````````````````````\n");
printf("请输入您的选择:
\n");
scanf("%d",&select);
switch(select)
{
case1:
findOneStuInfor(head);break;/*调用函数查找一个学生的信息*/
case2:
findclassStuInfor(head);break;/*调用函数查找班学生的信息*/
case3:
findSchoolStuInfor(head);break;/*调用函数查一个学院(系)的所有学生信息*/
case4:
findAllStuInfor(head);break;/*查找所有学生的记录*/
case5:
return;/*返回查找的函数*/
case6:
exit(0);/*退出系统*/
}
}
}
/*************a31*********/
voidfindOneStuInfor(structstuInfor*head)
{
structstuInfor*p=head;/*定义移动链表指针*/
longstunum;/*用于记录学号*/
system("cls");
printf("请输入您要查询的学生的学号:
\n");
scanf("%ld",&stunum);
printf("学号姓名性别出生年月班级学校(系)\n");
while(p!
=NULL)/*当学生记录不为空时*/
{
if(stunum==p->stunum)
{
if(p->sex=='m')
{
printf("%-10ld%-10s男%-10s%-20s%-20s\n",p->stunum,p->name,p->birthday,p->stuclass,p->school);
}
else
{
printf("%-10ld%-10s女%-10s%-20s%-20s\n",p->stunum,p->name,p->birthday,p->stuclass,p->school);
}
}
p=p->next;
}
system("pause");
}
/***********a32*********/
voidfindclassStuInfor(structstuInfor*head)
{
structstuInfor*p=head;/*定义移动链表指针*/
charstuclass[20];/*用于记录学号*/
system("cls");
printf("请输入您要查询的班级:
\n");
getchar();
gets(stuclass);
system("cls");
printf("学号姓名性别出生年月班级学校(系)\n");
while(p!
=NULL)/*当学生记录不为空时*/
{
if(strcmp(stuclass,p->stuclass)==0)
{
if(p->sex=='m')
{
printf("%-10ld%-10s男%-10s%-20s%-20s\n",p->stunum,p->name,p->birthday,p->stuclass,p->school);
}
else
{
printf("%-10ld%-10s女%-10s%-20s%-20s\n",p->stunum,p->name,p->birthday,p->stuclass,p->school);
}
}
p=p->next;
}
system("pause");
}
/***************a33*********/
voidfindSchoolStuInfor(structstuInfor*head)
{
structstuInfor*p=head;/*定义移动链表指针*/
charschool[30];/*用于记录学号*/
system("cls");
printf("请输入您要查询的学院(系):
\n");
getchar();
gets(school);
printf("学号姓名性别出生年月班级学校(系)\n");
while(p!
=NULL)/*当学生记录不为空时*/
{
if(strcmp(school,p->stuclass)==0)
{
if(p->sex=='m')
{
printf("%-10ld%-10s男%-10s%-20s%-20s\n",p->stunum,p->name,p->birthday,p->stuclass,p->school);
}
else
{
printf("%-10ld%-10s女%-10s%-20s%-20s\n",p->stunum,p->name,p->birthday,p->stuclass,p->school);
}
}
p=p->next;
}
system("pause");
}
/************a34********/
voidfindAllStuInfor(structstuInfor*head)
{
structstuInfor*p=head;/*定义移动链表指针*/
system("cls");
printf("学号姓名性别出生年月班级学校(系)\n");
while(p!
=NULL)/*当学生记录不为空时*/
{
if(p->sex=='m')
{
printf("%-10ld%-10s男%-10s%-