学生信息管理系统.docx
《学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统.docx(25页珍藏版)》请在冰豆网上搜索。
学生信息管理系统
《学生管理系统》
程序设计基础课程设计报告
二OO八年六月十五日
C++课程设计
——学生管理系统
1、本程序概述
本程序是用C++语言设计的一个《学生管理系统》,本程序采用了结构体编写其中用到了动态链表的建立对文件进行操作。
界面采用文本菜单,其主要功能是对学生进行管理,包括对学生相关信息的录如和查询。
实用性比较强,是对学生管理的一种辅助小型软件。
2、总体设计
本程序流程图如下:
3、对《学生管理系统》的进一步介绍
(1)本程序具体功能:
本程序具有以下功能:
a)数据录入功能:
对B.TXT进行数据录入,只录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据.综合成绩、学分由程序根据条件自动运算
(2)查询功能:
分为学生基本情况查询和成绩查询两种:
A:
学生基本情况查询:
A1----输入一个学号或姓名(可实现选择),查出此生的基本信息并显示输出。
A2---输入一个宿舍号码,可查询出本室所有的学生的基本信息并显示输出。
B:
成绩查询:
B1:
输入一个学号时,查询出此生的所有课程情况,格式如下:
学号:
xx姓名:
xxxxx
课程编号:
xxx课程名称:
xxxxx综合成绩:
xxxx实得学分:
xx
课程编号:
xxx课程名称:
xxxxx综合成绩:
xxxx实得学分:
xx
课程编号:
xxx课程名称:
xxxxx综合成绩:
xxxx实得学分:
xx
………………………
共修:
xx科,实得总学分为:
xxx
b)删除功能:
当在A.TXT中删除一个学生时,自动地在B.TXT中删除此人所有信息。
c)排序功能:
能实现选择按综合成绩或实得学分升序或降序排序并显示数据。
(2)源程序清单及说明
程序及其注释如下:
#include
#include
#include
#include
usingnamespacestd;
/*********学生基本信息*********/
structstudent//学生基本信息
{
stringnum;//学号
stringname;//姓名
stringsex;//性别
stringsushenum;//宿舍号码
stringtelephone;//电话号码
student*next;
};
student*head=NULL;
voidaddA(student*pt)//增加数据到链表
{
student*p=head;
if(head==NULL)
head=pt;
else
{
while(p->next!
=NULL)
p=p->next;
p->next=pt;
}
}
voidAfileinput()//将学生基本信息输入链表
{
student*pt;
ifstreaminfile("A.txt",ios:
:
in);
stringsss;
infile>>sss>>sss>>sss>>sss>>sss;
pt=newstudent;
infile>>pt->num;
while(pt->num!
="-1")
{
infile
>>pt->name
>>pt->sex
>>pt->sushenum
>>pt->telephone;
pt->next=NULL;
addA(pt);
pt=newstudent;
infile>>pt->num;
}
deletept;
}
voidoutput_student()//保存学生基本信息
{
cout<:
left)<<"学号姓名性别宿舍号码电话号码\n";
if(head!
=NULL)
{
student*p=head;
while(p!
=NULL)
{
cout<num
<name
<sex
<sushenum<<telephone
<p=p->next;
}
}
}
voidAsave()//保存学生基本信息
{
ofstreamoutfile("A.txt");
outfile<:
left)<<"学号姓名性别宿舍号码电话号码\n";
if(head!
=NULL)
{
student*p=head;
while(p!
=NULL)
{
outfile<num
<name
<sex
<sushenum<<telephone
<p=p->next;
}
outfile<<"-1"<}
}
voidqueryA1()//按学号或姓名查询学生基本信息
{
cout<<"☆-1-☆按学号查询\n"
<<"☆-2-☆按姓名查询\n";
intN;
student*p=head;
cin>>N;
if(N==1)
{
cout<<"输入学号:
";
stringnum;
cin>>num;
while(p!
=NULL)
{
if(p->num==num)
{
cout<num<<""
<name<<""
<sex<<""
<sushenum<<""
<telephone<break;
}
p=p->next;
}
if(p==NULL)
cout<<"无此生!
"<}
elseif(N==2)
{
cout<<"输入姓名:
";
stringname;
cin>>name;
while(p!
=NULL)
{
if(p->name==name)
{
cout<num<<""
<name<<""
<sex<<""
<sushenum<<""
<telephone<break;
}
p=p->next;
}
if(p==NULL)
cout<<"无此生!
"<}
else
cout<<"选择错误!
"<}
voidqueryA2()//按宿舍号查询学生基本信息
{
intN=0;
student*p=head;
cout<<"输入宿舍号:
";
stringnum;
cin>>num;
while(p!
=NULL)
{
if(p->sushenum==num)
{
cout<(2)<num<<""
<name<<""
<(2)<sex<<""
<(2)<sushenum<<""
<telephone<N++;
}
p=p->next;
}
if(N==0)
cout<<"无此宿舍!
"<}
voidAdel(student*p)//删除一个学生
{
if(head->next==NULL)
{
if(head->num==p->num)
{
deletehead;
head=NULL;
}
}
elseif(head->next!
=NULL)
{
student*p1=head,*p2=head->next,*pt;
while(p2!
=NULL)
{
if(head->num==p->num)
{
pt=head;
head=head->next;
deletept;
break;
}
else
{
if(p2->num==p->num)
{
if(p2->next!
=NULL)
{
p1->next=p2->next;
deletep2;
break;
}
else
{
deletep2;
p1->next=NULL;
break;
}
}
}
p1=p1->next;
p2=p2->next;
}
}
}
/*********学生成绩信息*********/
structstuscore//学生基本成绩
{
stringnum;//学号
stringsubnum;//课程编号
stringsubname;//课程名称
doublesubtime;//学分
doubledayscore;//平时成绩
doubleexpscore;//实验成绩
doublepaperscore;//卷面成绩
doublescore;//综合成绩
doublegettime;//实得学分
stuscore*next;
};
stuscore*shead=NULL;
voidinputB(stuscore*pt)//输入数据
{
cout<<"学号:
";
cin>>pt->num;
cout<<"课程编号:
";
cin>>pt->subnum;
cout<<"课程名称:
";
cin>>pt->subname;
cout<<"学分:
";
cin>>pt->subtime;
cout<<"平时成绩:
";
cin>>pt->dayscore;
cout<<"实验成绩:
";
cin>>pt->expscore;
cout<<"卷面成绩:
";
cin>>pt->paperscore;
pt->next=NULL;//////////////////?
?
?
?
?
?
?
}
voidcount(stuscore*pt)//计算综合成绩和实得学分
{
if(pt->expscore==-1)
pt->score=pt->dayscore*0.3+pt->paperscore*0.7;
else
pt->score=pt->dayscore*0.15+pt->expscore*0.15+pt->paperscore*0.7;
intt=int(pt->score)/10;
switch(t)
{
case10:
case9:
pt->gettime=pt->subtime;break;
case8:
pt->gettime=pt->subtime*0.8;break;
case7:
pt->gettime=pt->subtime*0.75;break;
case6:
pt->gettime=pt->subtime*0.6;break;
default:
pt->gettime=0;break;
}
}
voidaddB(stuscore*pt)//增加数据到链表
{
stuscore*p=shead;
if(shead==NULL)
shead=pt;
else
{
while(p->next!
=NULL)
p=p->next;
p->next=pt;
}
}
voidoutput()//输出学生成绩信息
{
if(shead!
=NULL)
{
cout<<"学号课程编号课程名称学分平时成绩实验成绩卷面成绩综合成绩实得学分"<stuscore*p=shead;
while(p!
=NULL)
{
cout<:
left)
<num<<""
<subnum<<""
<subname<<""
<subtime<<""
<dayscore<<""
<expscore<<""
<paperscore<<""
<score<<""
<gettime<p=p->next;
}
}
}
voidBsave()//保存学生成绩信息
{
ofstreamoutfile("B.txt");
outfile<<"学号课程编号课程名称学分平时成绩实验成绩卷面成绩综合成绩实得学分"<if(shead!
=NULL)
{
stuscore*p=shead;
while(p!
=NULL)
{
outfile<:
left)
<num<<""
<subnum<<""
<subname<<""
<subtime<<""
<dayscore<<""
<expscore<<""
<paperscore<<""
<score<<""
<gettime<p=p->next;
}
outfile<<"-1"<}
}
voidinsert()//插入学生成绩信息
{
stuscore*pt=newstuscore;
inputB(pt);
count(pt);
addB(pt);
Bsave();
}
voidBfileinput()//将学生成绩信息输入链表
{
stuscore*p;
ifstreaminfile("B.txt",ios:
:
in);
stringsss;
infile>>sss>>sss>>sss>>sss>>sss>>sss>>sss>>sss>>sss;
p=newstuscore;
infile>>p->num;
while(p->num!
="-1")
{
infile>>p->subnum
>>p->subname
>>p->subtime
>>p->dayscore
>>p->expscore
>>p->paperscore
>>p->score
>>p->gettime;
p->next=NULL;
addB(p);
p=newstuscore;
infile>>p->num;
}
deletep;
}
//成绩查询
voidqueryB1()//按学号查询学生的课程信息
{
student*p1=head;
stuscore*p2=shead;
cout<<"输入学号:
";
stringnum;
cin>>num;
while(p1!
=NULL)
{
if(p1->num==num)
{
cout<:
left)
<<"学号:
"<num
<<"姓名:
"<name
<break;
}
p1=p1->next;
}
if(p1==NULL)
cout<<"无此学生信息!
"<else
{
intN=0;//所修课程数
doublealltime=0;//总学分
while(p2!
=NULL)
{
if(p2->num==num)
{
cout<<"课程编号:
"<subnum
<<"课程名称:
"<subname
<<"综合成绩:
"<score
<<"实得学分:
"<gettime
<N++;
alltime+=p2->gettime;
}
p2=p2->next;
}
cout<<"共修:
"<(2)<"<}
}
voidBdel(stringnum)//删除一个学生
{
if(shead->next==NULL)
{if(shead->num==num)
{
deleteshead;
shead=NULL;
}
}
else
{
stuscore*p1=shead,*p2=shead->next,*pt;
while(p2!
=NULL)
{
if(shead->num==num)
{
pt=shead;
shead=shead->next;
deletept;
p1=shead;
p2=shead->next;
}
else
{
if(p2->num==num)
{
if(p2->next!
=NULL)
{
p1->next=p2->next;
deletep2;
p2=p1->next;
}
else
{
deletep2;
p1->next=NULL;
p2=p1->next;
}
}
else{
p1=p1->next;
p2=p2->next;
}
}
}
}
}
voiddelstu()
{
student*p1=head;
stuscore*p2=shead;
cout<<"输入学号:
";
stringnum;
cin>>num;
while(p1!
=NULL)
{
if(p1->num==num)
{
Adel(p1);
break;
}
p1=p1->next;
}
if(p1==NULL)
cout<<"无此学生信息!
"<else
{
Bdel(num);
Asave();
Bsave();
}
}
voidBtrade(stuscore*p1,stuscore*p2)//交换两记录的数据,路由不变
{
stringstemp;
doubledtemp;
stemp=p1->num;
p1->num=p2->num;
p2->num=stemp;
stemp=p1->subnum;
p1->subnum=p2->subnum;
p2->subnum=stemp;
stemp=p1->subname;
p1->subname=p2->subname;
p2->subname=stemp;
dtemp=p1->subtime;
p1->subtime=p2->subtime;
p2->subtime=dtemp;
dtemp=p1->dayscore;
p1->dayscore=p2->dayscore;
p2->dayscore=dtemp;
dtemp=p1->expscore;
p1->expscore=p2->expscore;
p2->expscore=dtemp;
dtemp=p1->gettime;
p1->gettime=p2->gettime;
p2->gettime=dtemp;
dtemp=p1->paperscore;
p1->paperscore=p2->paperscore;
p2->paperscore=dtemp;
dtemp=p1->score;
p1->score=p2->score;
p2->score=dtemp;
}
voidscoresort()//按综合成绩排序
{
inta;
cout<<"☆-1-☆升序排序\n"
<<"☆-2-☆降序排序\n";
cin>>a;
if(a==1)
{
if(shead->next->next!
=NULL)//2个或2个以上
{
stuscore*p1,*p2;
for(p1=shead;p1->next!
=NULL;p1=p1->next)
for(p2=p1->next;p2!
=NULL;p2=p2->next)
if(p1->score>p2->score)
Btrade(p1,p2);
}
}
elseif(a==2)
{
if(shead->next->next!
=NULL)//2个或2个以上
{
stuscore*p1,*p2;
for(p1=shead;p1->next!
=NULL;p1=p1->next)
for(p2=p1->next;p2!
=NULL;p2=p2->next)
if(p1->scorescore)
Btrade(p1,p2);
}
}