C语言学生管理系统.docx
《C语言学生管理系统.docx》由会员分享,可在线阅读,更多相关《C语言学生管理系统.docx(21页珍藏版)》请在冰豆网上搜索。
C语言学生管理系统
#include
#include
#include
#include
#include
#defineCOURSE_NUM3//预定义定义3个科目
/*学生信息管理系统*/
/*一个学生的属性有:
姓名、学号、(性别、年龄、地址略)、成绩(科目1、2、3...+总分+平均分)、排名*/
/*统计:
成绩(各科总分、平均分、及格率)略、在录人数*/
/*主菜单1.添加一个学生(姓名、学号、性别、年龄、地址)
2.添加学生成绩(通过搜索学号显示确认某个学生信息,并添加相应成绩)
3.查找-修改/删除学生信息(副菜单:
通过搜索学号或姓名显示某个学生信息,并做出修改/删除)
4.显示全部学生信息
5.保存学生记录
6.清除所有学生记录
7.退出系统*/
/*定义一个结构体*/
structStudent
{
charName[40];
charID[40];
/*charSex;
intAge;
charAdd[20];*/
floatCourse[COURSE_NUM];
floatSum;
floatAve;
intNo;
intflag;//用于标记是否已录入成绩
structStudent*next;
}*head,*temp;
//定义结构体别名
typedefstructStudentStudent;
/*初始化头节点*/
voidInitHead()
{
head=NULL;
}
/*创建新链节*/
voidCreate_Node()
{
Student*p1=NULL,*p2=NULL;
p1=(Student*)malloc(sizeof(Student));//申请内存
p2=head;
if(head==NULL)
{
head=p1;
}else{
while(p2->next!
=NULL)
{
p2=p2->next;
}
p2->next=p1;
}
p1->next=NULL;
temp=p1;
}
/*测试链表*/
voidTest_LinkList()
{
Create_Node();
Create_Node();
Create_Node();
Create_Node();
Create_Node();
printf("END");
}
/*显示菜单*/
voidMenu();
/*1.添加一个学生*/
boolRepeat_ID(char*ID);//检查学号是否重复
voidNew_Student();//新添加一个学生
/*2.添加学生成绩*/
voidCourse_NO();//进行排名
voidAdd_Course();//添加某一个学生成绩
/*3.查找-修改/删除学生信息*/
intSearch_ByName();//通过名字搜索
intSearch_ByID();//通过学号搜索
voidSearch_Info();
voidCourse_Change();//更改成绩
voidDelete_Student();//删除某个学生
/*4.显示全部学生信息*/
voidShow_All();
/*5.保存学生记录*/
voidSave();//保存至文件
voidLoad();//从文件载入
voidNNT();//统计人数
/*6.清除所有学生记录*/
voidDelete_All();
/*系统帮助*/
voidhelp();
/*主函数*/
intmain()
{
InitHead();//初始化链表头
Load();
//Test_LinkList();
while
(1)
{
Menu();//显示菜单
charch=getchar();//接收字符命令
system("cls");//清空屏幕
switch(ch)
{
case'1':
New_Student();break;
case'2':
Add_Course();break;
case'3':
Search_Info();break;
case'4':
Show_All();break;
case'5':
Save();break;
case'6':
Delete_All();break;
case'7':
exit(0);break;
case'0':
help();break;
default:
break;
}
}
return0;
}
/*显示菜单*/
voidMenu()
{
printf("------------------学生信息管理系统-----------------------");printf("\n\n");
NNT();
printf("\t");printf("1.添加一个学生");printf("\n");
printf("\t");printf("2.添加学生成绩");printf("\n");
printf("\t");printf("3.查找-修改/删除学生信息");printf("\n");
printf("\t");printf("4.显示全部学生信息");printf("\n");
printf("\t");printf("5.保存学生记录");printf("\n");
printf("\t");printf("6.清除学生记录");printf("\n");
printf("\t");printf("7.退出系统");printf("\n");
printf("\t");printf("0.系统帮助");printf("\n");
printf("\t");printf("请选择功能:
");
}
/*1.添加一个学生*/
boolRepeat_ID(char*ID)
{
temp=head;
if(head==NULL)
{
returnfalse;
}
while(temp!
=NULL)
{
if(strcmp(temp->ID,ID)==0)
{
returntrue;
}
temp=temp->next;
}
returnfalse;
}
voidNew_Student()
{
getchar();
printf("------------------添加一个学生-----------------------");printf("\n\n");
charName[40];
charID[40];
Student*stu;
printf("请输入姓名:
");
gets(Name);
printf("请输入学号:
");
gets(ID);
while(Repeat_ID(ID))
{
printf("学号已存在!
\n");
printf("请重新输入学号:
");
gets(ID);
}
Create_Node();
stu=head;
while(stu->next!
=NULL)
{
stu=stu->next;
}
strcpy(stu->Name,Name);
strcpy(stu->ID,ID);
stu->flag=0;
}
/*添加学生成绩*/
voidAdd_Course()
{
getchar();
if(head==NULL)
{
printf("无数据!
\n");
Sleep(1000);
return;
}
printf("------------------添加学生成绩-----------------------");printf("\n\n");
charID[40];
printf("请输入学号:
");
gets(ID);
temp=head;
while(temp!
=NULL)
{
if(strcmp(temp->ID,ID)==0)
{
break;
}
temp=temp->next;
}
if(temp==NULL)
{
printf("无此学号!
\n");
return;
}
if(temp->flag==1)
{
printf("该生成绩已存在!
\n");
return;
}
printf("姓名:
%s\n",temp->Name);
temp->Sum=0;
for(inti=0;i{
printf("请输入成绩%d:
",i+1);
scanf("%f",&temp->Course[i]);
temp->Sum+=temp->Course[i];
}
temp->Ave=temp->Sum/COURSE_NUM;
printf("总分:
%.2f\n",temp->Sum);
printf("平均分:
%.2f\n",temp->Ave);
temp->flag=1;
Course_NO();
getchar();
}
voidCourse_NO()
{
if(head->next==NULL)
{
head->No=1;
return;
}
floatsum[100];
intnum=0;
temp=head;
while(temp!
=NULL)
{
sum[num++]=temp->Sum;
temp=temp->next;
}
for(inti=0;i{
for(intj=i;j{
if(sum[i]{
floatt=sum[i];
sum[i]=sum[j];
sum[j]=t;
}
}
}
temp=head;
while(temp!
=NULL)
{
for(inti=0;i{
if(sum[i]==temp->Sum)
{
temp->No=i+1;
break;
}
}
temp=temp->next;
}
}
/*3.查找-修改/删除学生信息*/
voidSearch_Info()
{
getchar();
if(head==NULL)
{
printf("无数据!
\n");
Sleep(1000);
return;
}
printf("------------------查找-修改/删除学生信息-----------------------");printf("\n\n");
while
(1)
{
printf("a.搜索姓名\n");
printf("b.搜索学号\n");
printf("c.退出\n");
printf("请选择:
");
charch=getchar();
intcheck;
switch(ch)
{
case'A':
case'a':
check=Search_ByName();break;
case'B':
case'b':
check=Search_ByID();break;
case'C':
case'c':
return;
default:
continue;
}
if(check==1&&temp->flag==1)
{
printf("1.修改成绩\n");
printf("2.直接删除\n");
printf("0.退出\n");
printf("请选择:
");
ch=getchar();
switch(ch)
{
case'1':
Course_Change();break;
case'2':
Delete_Student();break;
case'0':
return;
default:
continue;
}
getchar();
}
}
getchar();
}
intSearch_ByName()
{
getchar();
charName[40];
printf("请输入姓名:
");
gets(Name);
temp=head;
while(temp!
=NULL)
{
if(strcmp(temp->Name,Name)==0)
{
printf("姓名\t学号\t");
for(inti=1;i<=COURSE_NUM;i++)
printf("成绩%d\t",i);
printf("总分\t平均分\t排名\n");
printf("%s\t%s\t",temp->Name,temp->ID);
if(temp->flag==0)
{
for(inti=1;i<=COURSE_NUM;i++)
printf("无\t");
printf("无\t无\t无\n");
}else{
for(inti=0;iprintf("%.2f\t",temp->Course[i]);
printf("%.2f\t%.2f\t%d\n",temp->Sum,temp->Ave,temp->No);
}
break;
}
temp=temp->next;
}
if(temp==NULL)
{
printf("查无此人!
\n");
return0;
}
return1;
}
intSearch_ByID()
{
getchar();
charID[40];
printf("请输入学号:
");
gets(ID);
temp=head;
while(temp!
=NULL)
{
if(strcmp(temp->ID,ID)==0)
{
printf("姓名\t学号\t");
for(inti=1;i<=COURSE_NUM;i++)
printf("成绩%d\t",i);
printf("总分\t平均分\t排名\n");
printf("%s\t%s\t",temp->Name,temp->ID);
if(temp->flag==0)
{
for(inti=1;i<=COURSE_NUM;i++)
printf("无\t");
printf("无\t无\t无\n");
}else{
for(inti=0;iprintf("%.2f\t",temp->Course[i]);
printf("%.2f\t%.2f\t%d\n",temp->Sum,temp->Ave,temp->No);
}
break;
}
temp=temp->next;
}
if(temp==NULL)
{
printf("查无此人!
\n");
return0;
}
return1;
}
voidCourse_Change()
{
temp->Sum=0;
for(inti=0;i{
printf("请输入成绩%d:
",i+1);
scanf("%f",&temp->Course[i]);
temp->Sum+=temp->Course[i];
}
temp->Ave=temp->Sum/COURSE_NUM;
printf("总分:
%.2f\n",temp->Sum);
printf("平均分:
%.2f\n",temp->Ave);
temp->flag=1;
Course_NO();
}
voidDelete_Student()
{
Student*p,*pr;
p=head;
if(temp==head)
{
head=head->next;
temp=NULL;
Course_NO();
return;
}
while(p!
=NULL)
{
if(temp==p)
{
pr->next=p->next;
temp=NULL;
Course_NO();
}
pr=p;
p=p->next;
}
}
/*4.显示全部学生信息*/
voidShow_All()
{
if(head==NULL)
{
printf("无数据!
\n");
Sleep(1000);
return;
}
printf("------------------显示全部学生信息-----------------------");printf("\n\n");
printf("姓名\t学号\t");
for(inti=1;i<=COURSE_NUM;i++)
printf("成绩%d\t",i);
printf("总分\t平均分\t排名\n");
temp=head;
while(temp!
=NULL)
{
printf("%s\t%s\t",temp->Name,temp->ID);
if(temp->flag==0)
{
for(inti=1;i<=COURSE_NUM;i++)
printf("无\t");
printf("无\t无\t无\n");
}else{
for(inti=0;iprintf("%.2f\t",temp->Course[i]);
printf("%.2f\t%.2f\t%d\n",temp->Sum,temp->Ave,temp->No);
}
temp=temp->next;
}
getchar();
}
/*5.保存学生记录*/
voidSave()
{
FILE*fp=fopen("学生记录.my","w");//以只写的形式打开文件
temp=head;
while(temp!
=NULL)
{
fprintf(fp,"%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%d\t%d\n",
temp->Name,temp->ID,temp->Course[0],temp->Course[1],
temp->Course[3],temp->Sum,temp->Ave,temp->No,temp->flag);
temp=temp->next;
}
fclose(fp);//关闭文件
printf("已保存!
\n");
Sleep(2000);
}
voidLoad()
{
FILE*fp=fopen("学生记录.my","r");//以只读的形式打开文件
If(fp==NULL)return;
while(!
feof(fp))
{
Create_Node();//产生新节点
fscanf(fp,"%s\t%s\t%f\t%f\t%f\t%f\t%f\t%d\t%d\n",
temp->Name,temp->ID,&temp->Course[0],&temp->Course[1],
&temp->Course[2],&temp->Sum,&temp->Ave,&temp->No,&temp->flag);
}
fclose(fp);//关闭文件
}
voidNNT()
{
if(head==NULL)
{
printf("在录人数为0\n\n");
return;
}
intnnt=0;
temp=head;
while(temp!
=NULL)
{
nnt++;
temp=temp->next;
}
printf("在录人数为%d\n\n",nnt);
return;
}
voidDelete_All()
{
temp=head;
while(temp!
=NULL)
{
head=head->next;
temp=NULL;
temp=head;
}
printf("已清除在线记录!
");
Sleep(2000);
}
voidhelp()
{
printf("请自由编辑!
~任意键继续~");
getch();
}