学生管理系统.docx
《学生管理系统.docx》由会员分享,可在线阅读,更多相关《学生管理系统.docx(33页珍藏版)》请在冰豆网上搜索。
学生管理系统
1.学生学籍信息管理系统设计
[要求]
使用下面的数据设计一个简单的学籍管理系统。
学生基本信息文件(A.TXT)极其内容:
学号姓名性别宿舍号码电话号码
01张成成男50187732111
02李成华女10187723112
03王成凤女10187723112
04张明明男50287734333
05陈东男50187732111
06李果男50287734333
07张园园女10287756112
学生成绩基本信息文件(B.TXT)极其内容:
.....................................................................................................................
学号课程编号课程名称学分平时成绩实验成绩卷面成绩综合成绩实得学分
01A01大学物理3667882
02B03高等数学478-190
01B03高等数学445-188
02C01VF3657666
................................................................................................................
功能要求极其说明:
(1)数据录入功能:
录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据。
实得成绩、实得学分根据条件自动运算。
综合成绩的计算:
a.如果本课程的实验成绩为-1,则表无实验成绩,综合成绩=平时成绩*30%+卷面成绩*70%
b.如果实验成绩不为-1,表示本课程有实验成绩,综合成绩=平时成绩*15%+实验成绩*15%+卷面成绩*70%
实得学分的计算:
采用等级学分制。
综合成绩在90~100之间,应得学分=学分*100%
综合成绩在80~90之间,应得学分=学分*80%
综合成绩在70~80之间,应得学分=学分*75%
综合成绩在60~70之间,应得学分=学分*60%
综合成绩在60分以下,应得学分=学分*0%
(2)查询功能:
分为学生基本情况查询和成绩查询两种
学生基本情况查询:
输入一个学号或姓名(可实现选择)查出此学生的基本信息并显示输出。
输入一个宿舍号码,可查出本室所有学生的基本信息并显示输出。
称号查询:
输入一个学号时,查出此学生所有课程情况,格式如下:
学号:
XX课程名称:
XXXX综合成绩:
XX实得学分:
XXX
...............................................................................
共修:
X科,实得总分为:
XXX
(3)删除功能:
当在A.TXT中删除一个学生时,自动地在B.TXT中删除此学生所有信息。
(4)排序功能:
能实现选择按综合成绩或实得学分升序或降序排序并显示数据。
[提示]
数据结构采用结构体数组,提供学生基本信息和学生成绩基本信息结构体数组。
二需求分析
根据题目要求,该程序应具备的功能有:
(1)数据录入功能:
录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据。
实得成绩、实得学分根据条件自动运算。
(2)查询功能:
分为学生基本情况查询和成绩查询两种
(3)删除功能:
当在A.TXT中删除一个学生时,自动地在B.TXT中删除此学生所有信息。
(4)排序功能:
能实现选择按综合成绩或实得学分升序或降序排序并显示数据。
#include"stdafx.h"
#include
#include
#include
#include
#include
#include
usingnamespacestd;
intcount=0;
/*-------学生基本信息输入函数--------*/
structstudent//定义结构体存储学生基本信息
{
charnumber[20];
charname[10];
charsex[20];
charsushe[20];
charphone[20];
structstudent*next;
};
structxuesheng{//定义结构体存储学生基本信息
charxuehao[20];
charkecheng_hao[20];
charkecheng_ming[20];
floatpingshi;
floatxuefen;
floatshiji_xuefen;
floatzonghe;
floatshiyan;
floatjuanmian;
structxuesheng*next;
};
/*-------学生成绩基本信息输入函数--------*/
xuesheng*creat_b()//.....................创建链表..........................//
{
intn=0;
xuesheng*p1,*p2;
structxuesheng*head;
charc='Y';
head=NULL;//设头指针为空
while(c=='Y'||c=='y')
{
p1=newxuesheng;//动态分配空间并建立动态链表
cout<<"请输入学生信息"<cout<<"请输入学号"<cin>>p1->xuehao;
cout<"<cin>>p1->kecheng_hao;
cout<"<cin>>p1->kecheng_ming;
cout<";
cin>>p1->xuefen;
cout<"<cin>>p1->pingshi;
cout<";
cin>>p1->shiyan;
cout<";
cin>>p1->juanmian;
n++;
if(n==1)
{
head=p1;
p2=p1;
}
else
{
p2->next=p1;
p2=p1;
}
if(p1->shiyan==-1){p1->zonghe=p1->pingshi*3/10+p1->juanmian*7/10;}
else{p1->zonghe=p1->pingshi*3/20+p1->shiyan*3/20+p1->juanmian*7/10;}
if(p1->zonghe>90){p1->shiji_xuefen=p1->xuefen*1;}else{
if(p1->zonghe>80){p1->shiji_xuefen=p1->xuefen*8/10;}else{
if(p1->zonghe>70){p1->shiji_xuefen=p1->xuefen*3/4;}else{
if(p1->zonghe>60){p1->shiji_xuefen=p1->xuefen*3/5;}else{
if(p1->zonghe<60){p1->shiji_xuefen=0;}
}}}}
getchar();//吸收回车符getchar()是会接收任何输入流中的ASCII字符的,并不忽略空格换行等等这些控制字符。
cout<<"\n是否继续录入学生信息Y/N"<c=getchar();
}
p2->next=NULL;
return(head);
system("cls");
}
/*-------存档函数--------*/
voidcundang_b(xuesheng*head)//存入文件b.txt
{
structxuesheng*p1;
fstreamoutfile("b.txt",ios:
:
out);
if(!
outfile)
{
cout<<"不能打开目的文件"<exit(0);
}
outfile<<"学号"<<"课程号"<<"课程名称"<<"学分"<<"平时成绩"<<
"实验成绩"<<"卷面成绩"<<"综合成绩"<<"应得学分"<for(p1=head;p1!
=NULL;p1=p1->next)
{
outfile<xuehao<kecheng_hao<kecheng_ming<xuefen<<
setw(10)<pingshi<shiyan<juanmian<zonghe<shiji_xuefen<}
cout<<"录入的学生信息已经保存在“b.txt”文件中\n";
outfile.close();
}
/*-----学生基本信息输入函数-----*/
student*creat_a()//.....................创建链表..........................//
{
intn=0;
student*p1,*p2;
structstudent*head;
charc='Y';
head=NULL;//设头指针为空
while(c=='Y'||c=='y')
{
p1=newstudent;//动态分配空间并建立动态链表
cout<<"请输入学生信息"<cout<<"请输入学号"<cin>>p1->number;
cout<<"\n请输入姓名:
";
cin>>p1->name;
cout<<"\n请输入性别:
\n";
cin>>p1->sex;
cout<<"\n请输入宿舍号:
\n";
cin>>p1->sushe;
cout<<"\n请输入电话号码:
\n";
cin>>p1->phone;
n++;
if(n==1)
{
head=p1;
p2=p1;
}
else
{
p2->next=p1;
p2=p1;
}
getchar();//吸收回车符getchar()是会接收任何输入流中的ASCII字符的,并不忽略空格换行等等这些控制字符。
cout<<"\n是否继续录入学生信息Y/N"<c=getchar();
}
p2->next=NULL;
return(head);
system("cls");
}
/*-------存档函数--------*/
voidcundang_a(student*head)//存入文件a.txt
{
structstudent*p1;
fstreamoutfile("a.txt",ios:
:
out);
if(!
outfile)
{
cout<<"不能打开目的文件"<exit(0);
}
outfile<<"学号"<<"姓名"<<"性别"<<"宿舍"<<"电话号码"<for(p1=head;p1!
=NULL;p1=p1->next)
{
outfile<number<name<sex<sex<}
cout<<"录入的学生信息已经保存在“b.txt”文件中\n";
outfile.close();
}
/*-----学生学号查询函数-----*/
voidsousuo_num(structstudent*head)//搜索学号
{
charnum[20];
structstudent*p;
for(;;)
{
system("cls");
cout<<"--学生基本信息查询--\n";
cout<<"\n请输入要查询的学号:
\n若输入为0则返回上一级菜单";
if(strcmp(num,"0")==0)//判断输入的姓名是否为0
return;
cin>>num;
p=head;//将*p初始化
while(p!
=NULL)
{
if(strcmp(num,p->number)==0)//找到指定学生所在节点
{
cout<<"学号为"<number<<"的学生信息如下:
\n";
cout<<"姓名:
"<name<cout<<"性别为:
"<sex<cout<<"宿舍:
"<sushe<cout<<"电话:
"<phone<system("pause");
break;
}
p=p->next;
}
if(p==NULL)
{
cout<<"查询不到此人,数据输入错误!
";
system("pause");
}
}
}
/*-----学生姓名查询函数-----*/
voidsousuo_name(structstudent*head)//输出指定姓名的学生基本信息
{
charname[20];
structstudent*p;
for(;;)
{
system("cls");
cout<<"--学生基本信息查询--\n";
cout<<"\n请输入要查询的姓名:
\n若输入为0则返回上一级菜单";
cin>>name;
if(strcmp(name,"0")==0)//判断输入的姓名是否为0
return;
p=head;
while(p!
=NULL)
{
if(strcmp(name,p->name)==0)//找到指定学生所在节点
{
cout<<"姓名为"<name<<"的学生信息如下:
\n";
cout<<"学号:
"<number<cout<<"性别:
"<sex<cout<<"宿舍:
"<sushe<cout<<"电话:
"<phone<system("pause");
break;
}
p=p->next;
}
if(p==NULL)
{
cout<<"查询不到此人,数据输入错误!
"<system("pause");
}
}
}
/*-----学生宿舍查询函数-----*/
voidsousuo_sushe(structstudent*head)//输入宿舍号码进行查找
{
charsushe[20];
intflag;
structstudent*p=head;//p指针的初始化
for(;;)
{
system("cls");
cout<<"--学生基本信息查询--\n";
cout<<"\n请输入要查询的宿舍:
\n若输入为0则返回上一级菜单";
cin>>sushe;
if(strcmp(sushe,"0")==0)//判断输入的宿舍号是否为0
return;
p=head;//
flag=0;
while(p!
=NULL)//利用循环,输出指定宿舍的所有学生基本信息
{
if(strcmp(sushe,p->sushe)==0)//找到指定学生所在节点
{
if(flag==0)
{
cout<<"宿舍为"<sushe<<"%s的学生信息如下:
\n";
cout<<"学号\t姓名\t性别\t电话\n";
flag=1;
}
cout<number<<"\t";
cout<name<<"\t";
cout<sex<<"\t";
cout<phone<}
p=p->next;
}
if(flag==0)
cout<<"宿舍号输入错误!
无此宿舍的信息";
system("pause");
}
}
/*-----学生基本信息查找-----*/
voidsousuo_student(structstudent*head)//参数:
学生基本信息链表头指针
{
intn;
if(head==NULL)
{
system("cls");
cout<<"当前没有任何学生基本信息\n\n";
system("pause");
return;
}
for(;;)
{
system("cls");
cout<<"--学生基本信息查询--\n";
cout<<"1.按学号查询\n";
cout<<"2.按姓名查询\n";
cout<<"3.按宿舍查询\n";
cout<<"\n请输入操作代码:
\n";
cin>>n;
switch(n)
{
case1:
sousuo_num(head);
break;
case2:
sousuo_name(head);
break;
case3:
sousuo_sushe(head);
break;
default:
cout<<"输入指令错误!
"<break;
}
if(n==0)
return;
}
}
/*-----查找姓名函数-----*/
char*name(structstudent*head1,char*number)//参数:
学生基本信息链表头指针,要查找的学号
{
structstudent*p=head1;
while(p!
=NULL)
{
if(strcmp(number,p->number)==0)
returnp->name;//当学号匹配时,返回学生的姓名
p=p->next;
}
return"无此人信息!
";//找不到该学号的学生则返回“无”
}
/*-----学生成绩信息查找函数-----*/
voidsousuo_xuesheng(structstudent*head1,structxuesheng*head2)//利用两个结构体之间的联系,参数是两个结构体的头指针,查找指定学号的学生成绩信息
{
charnum[20];
intflag,gongxiu;
floatsum;
structxuesheng*p;
if(head2==NULL)//判断学生成绩信息链表头指针是否为空
{
system("cls");
cout<<"当前没有任何学生成绩信息\n\n";
system("pause");
return;
}
for(;;)
{
system("cls");
cout<<"学生成绩信息查询\n";
cout<<"\n请输入要查询的学号:
\n";
cin.getline(num,20);
p=head2;
flag=0;
gongxiu=0;//共修科目
sum=0;//实际学分
while(p!
=NULL)
{
if(strcmp(num,p->xuehao)==0)//找到指定学生所在节点
{
if(flag==0)
{
cout<<"学号:
"<xuehao<<"\t"<<"姓名:
"<flag=1;
}
cout<<"课程编号:
"<kecheng_hao<<"\t";
cout<<"课程名称:
"<kecheng_hao<<"\t";
cout<<"综合成绩:
"<zonghe<<"\t";
cout<<"实得学分:
"<shiji_xuefen<<"\t";
gongxiu++;
sum+=p->shiji_xuefen;//实得学分累加
}
p=p->next;
}
if(flag==0)
cout<<"没有这名学生的信息,信息不存在"<else
cout<<"共修学科总数:
"<"<system("pause");
}
}
/*-----查找函数菜单-----*/
voidsousuo(structstudent*head1,structxuesheng*head2)//总查询函数
{
intn;
for(;;)
{
system("cls");
cout<<"1.学生基本信息查询\n";
cout<<"2.学生成绩信息查询\n";
cout<<"3.返回上一级菜单\n";
cout<<"\n请输入操作代码:
\n";
cin>>n;
switch(n)
{
case1:
sousuo_student(head1);
break;
case2:
sousuo_xuesheng(head1,head2);
break;
case3:
break;
default:
cout<<"操作有误!
"<system("pause");
break;
}
if(n==3)
b