数据结构课程设计报告学生成绩管理系统62961.docx
《数据结构课程设计报告学生成绩管理系统62961.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告学生成绩管理系统62961.docx(27页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告学生成绩管理系统62961
《数据结构》课程设计报告
信息工程学院
计算机科学与技术专业
题目:
学生成绩管理系统(线性表应用)
班级:
计算机111班第11组
组长:
:
葛学谦学号:
*************
组员:
:
冷冰学号:
*************
指导老师:
曲、郭晓利、志颖
日期:
2012年12月20日
程序设计书目录
一、程序设计目标
二、问题描述
三、需求分析
四、概要设计(说明课程设计中用到的抽象数据类型的定义、主程序的流程以及各程序模块之间的调用关系等)
五、详细设计
六、软件说明书
七、源程序清单
八、测试报告
九、课程设计总结
数据结构课程设计
一、课程设计目的
1.数据结构课程设计,使我们能够将学到的面向对象的设计思想运用在具体的工作和学习中,加深对类和对象的理解,
2.要求学生对生活中许多具体的事物抽象出类,并掌握继承和派生类、基类、虚函数和多态的概念。
3.通过课程设计掌握《面向对象语言程序设计》的编程思想,为后续课程打下基础。
4.培养我实际操作能力和实践能力,为以后的工作打下坚实的基础。
二、课程设计的容
1、课程设计的题目及简介
文本界面为
管理员
1.输入信息
2.保存信息
3.查询信息
4.修改并保存
5.显示全部
6.删除信息
7.退出系统
学生
1信息查询
(1)输入
(2)输入学号
2退出系统
三、需求分析(说明课程设计的任务)
提供身份验证,和使用系统的权限设置、判定。
教师用户能实现本班同学各学期各科成绩的录入、编辑,数据必须保存在文件中,以便反复使用。
学生用户提供对学号或,各学期、各学科成绩的查询。
学生和教师用户能按各学期、各学科分数排序输出。
教师用户能统计各科成绩分数段的分布,并输出。
四、概要设计(说明课程设计中用到的抽象数据类型的定义、主程序的流程以及各程序模块之间的调用关系等)
1.调用函数Node*Create()判断是否等于一如果是可创建链表输入相应的学生成绩如果不是则需要运用Insert(p)函数插入结点增加学生成绩的,并通过chundang(p)函数进行存档,
2.调用函数Node*Delete(Node*head,intnum)
删除学生的成绩则必须对链表结点进行删除意味着将某个要删除结点前后的连续打断,去掉该结点,使前后指针变量重新连接,完成链表结点的删除任务
3.打开存档文件ifstreamFilein("out.txt");输出说存档的学生成绩
4.调用函数Node*sousuo(Node*head,charna[20]),按学生的进行搜索
五、详细设计
(1)程序流程图
各功能模块的实现流程图:
1增加学生成绩
调用函数Node*Create()判断是否等于一如果是可创建链表输入相应的学生成绩如果不是则需要运用Insert(p)函数插入结点增加学生成绩的,并通过chundang(p)函数进行存档,具体流程如下图所示
流程图
2删除学生成绩
调用函数Node*Delete(Node*head,intnum)
删除学生的成绩则必须对链表结点进行删除意味着将某个要删除结点前后的连续打断,去掉该结点,使前后指针变量重新连接,完成链表结点的删除任务
流程图
3.导入学生成绩
打开存档文件ifstreamFilein("out.txt");输出说存档的学生成绩
4、学生成绩的搜索
调用函数Node*sousuo(Node*head,charna[20]),按学生的进行搜索
流程图:
5成绩的统计
调用函数Node*sousuo(Node*head,charna[20]),按学生的进行搜索
。
6、按英语成绩进行排序:
调用函数Node*paixu(Node*head)完成排序功能
它的主要思想的:
首先设置英语成绩的最大值100,最小值0(也可以使150或者其他)然后让输入的学生成绩英语成绩一次比较进行比较,(如果有相等的就输出排名1,然后排名加1),否则最大值减1,然后再次进行比较(如果等于99且上次没有等于100的,就输出排名1,然后排名加1,如果上次有等于100的排名为2),如果没有与99相等的.,则继续循环……
流程图:
总功能模块图:
各功能显示效果模块图:
学生和管理员输入
管理员进入界面后
增加学生成绩和导入学生成绩
保存学生成绩
学生进入界面后,按学生查询并输出成绩
六、软件说明书
总体结构我们采取模块化方式进行程序设计,要求程序的功能设计、数据结构设计及整体
结构设计合理。
也可根据自己对题目的理解增加新的功能模块。
系统以菜单界面方式(至少采用文本菜单界面,如能采用图形菜单界面更好)工作,运行界面友好,演示程序以用户和计算机的对话方式进行
(1)首先,看题目要求,每一条记录包括一个学生的、性别、专业、出生日期、家庭住址、英语成绩。
同时,应具备以下功能:
1、输入功能:
一次可以完成自定义学生人数的学生成绩记录的输入。
2.保存功能:
对指定学生的成绩进行保存
3.查询功能:
选择某种方式并输入该成绩查询符合条件的学生成绩
4、修改并保存功能:
对指定学生的成绩进行修改保存。
5.显示功能:
将以上功能操作后的学生成绩显示出来。
6、删除功能:
对指定学生的成绩进行删除。
7.退出主菜单。
七、源程序清单
#include
#include
#include
usingnamespacestd;
#definepassword123456;
//people.h
classstupeople//人员类基类
{
public:
intgetage();//年龄
char*getname();//
char*getsex();//性别
voiddisplay();//输出信息
voidpeosearch();//查询信息
voidpeosave();//保存信息
private:
charname[20];
charsex[4];
intage;
};
//student.h
classstustudent:
publicstupeople
{
public:
intgetnumber();//学号
doublegetcscore();//语文
doublegetmscore();//高数
doublegetescore();//外语
doublegetpscore();//C++
doublegetdscore();//数据库
doublegetsscore();//体育
doublegetave();//平均成绩
doublegetsum();//总成绩
voidstuenterinfo();//输入信息
voiddisplay();//输出信息
voidstusearch();//查找信息
voidstusave();//保存信息
voidstuload();//加载信息
private:
intnumber;
doublecscore;
doublemscore;
doubleescore;
doubledscore;
doublepscore;
doublesscore;
doublesumscore;
doubleavescore;
};
//admin.h
classstuadmin:
publicstustudent//派生类管理员类
{
public:
voidchange();//更改信息
voiddel();//删除信息
private:
intnewage;
intnewnumber;
charnewsex;
charnewname;
charchangename[20];
doublenewcscore;
doublenewmscore;
doublenewescore;
doublenewdscore;
doublenewpscore;
doublenewsscore;
doublenewsumscore;
doublenewavescore;
};
inti,j,p[6];
charA,B,x;
stuadminsa;
structstudentinfo
{
intnumber;
charname[20];
charsex[4];
intage;
doublecscore;
doublemscore;
doubleescore;
doublepscore;
doubledscore;
doublesscore;
doublesumscore;
doubleavescore;
intflag;
}s;
//人员类的相关函数的定义
intstupeople:
:
getage()
{
returnage;
}
char*stupeople:
:
getname()
{
returnname;
}
char*stupeople:
:
getsex()
{
returnsex;
}
//学生类的相关函数的定义
intstustudent:
:
getnumber()
{
returnnumber;
}
doublestustudent:
:
getcscore()
{
returncscore;
}
doublestustudent:
:
getmscore()
{
returnmscore;
}
doublestustudent:
:
getescore()
{
returnescore;
}
doublestustudent:
:
getpscore()
{
returnpscore;
}
doublestustudent:
:
getdscore()
{
returndscore;
}
doublestustudent:
:
getsscore()
{
returnsscore;
}
doublestustudent:
:
getsum()
{
sumscore=cscore+mscore+escore+pscore+dscore+sscore;
returnsumscore;
}
doublestustudent:
:
getave()//平均成绩
{
avescore=sumscore/6;
returnavescore;
}
voidstustudent:
:
stuenterinfo()//输入信息
{
cout<<"请输入学号:
";
cin>>s.number;
cout<cout<<"请输入:
";
cin>>s.name;
cout<cout<<"请输入性别:
";
cin>>s.sex;
cout<cout<<"请输入年龄:
";
cin>>s.age;
cout<cout<<"请输入各科成绩:
"<cout<<"语文:
";
cin>>s.cscore;
cout<cout<<"高数:
";
cin>>s.mscore;
cout<cout<<"外语:
";
cin>>s.escore;
cout<cout<<"C++:
";
cin>>s.pscore;
cout<cout<<"数据库:
";
cin>>s.dscore;
cout<cout<<"体育:
";
cin>>s.sscore;
cout<cout<<"信息输入成功!
"<s.flag=0;
s.sumscore=s.cscore+s.mscore+s.escore+s.pscore+s.dscore+s.sscore;
s.avescore=s.sumscore/6;
}
voidstustudent:
:
stusave()//保存信息
{
ofstreamout("information.txt",ios:
:
app|ios:
:
binary);
if(out)
{
out.write((char*)&s,sizeofs);
cout<<"信息保存成功!
"<}
elsecout<<"文本为空!
"<out.close();
}
voidstustudent:
:
display()//显示信息
{
ifstreamifile;
ifile.open("information.txt",ios:
:
binary);
if(ifile)
{
while(ifile.read((char*)&s,sizeofs)!
=0)
{
if(s.flag==0)
{
cout<<"学号:
"<"<"<"<"<<
s.cscore<<"高数:
"<"<"<"<<<"体育:
"<"<"<}
}
}
else
cout<<"文本为空!
"<ifile.close();
}
voidstustudent:
:
stusearch()//查询信息
{
charstuname[20];
inte=0;
cout<<"请输入您要查找的:
";
cin>>stuname;
ifstreamifile;
ifile.open("information.txt",ios:
:
binary);
if(ifile)
{
while(ifile.read((char*)&s,sizeofs)!
=0)
{
if((strcmp(stuname,s.name)==0)&&s.flag==0)
{cout<<"学号:
"<"<"<"<<<"语文:
"<"<"<"<"数据库:
"<"<"<"<e=1;
break;
}
}
}
elsecout<<"文本未建立!
"<ifile.close();
if(e==0)
cout<<"没有相关信息!
"<}
//管理员类的相关函数的定义
voidstuadmin:
:
change()
{
charchangename[20];
inte;
cout<<"请输入您要修改的:
";
cin>>changename;
fstreamifile("information.txt",ios:
:
in|ios:
:
out);
while(ifile.read((char*)&s,sizeofs)!
=0)
{
if((strcmp(changename,s.name)==0)&&s.flag==0)
{
cout<<"学号:
"<"<"<"<"语文:
"<"<"<"<<<"数据库:
"<"<"<"<e=1;
break;
}
}
if(e==0)
cout<<"没有相关信息!
"<if(e==1)
{
intchoose;
cout<<"\t请选择修改方式:
"<cout<<"1.修改学号:
"<cout<<"2.修改:
"<cout<<"3.修改性别:
"<cout<<"4.修改年龄:
"<cout<<"5.修改语文成绩:
"<cout<<"6.修改高数成绩:
"<cout<<"7.修改外语成绩:
"<cout<<"8.修改C++成绩:
"<cout<<"9.修改数据库成绩:
"<cout<<"10.修改体育成绩:
"<cout<cout<<"请选择:
"<cin>>choose;
switch(choose)
{
case1:
cout<<"请输入学生学号:
"<cin>>s.number;
break;
case2:
cout<<"请输入学生:
"<cin>>s.name;
break;
case3:
cout<<"请输入学生性别:
"<cin>>s.sex;
break;
case4:
cout<<"请输入学生年龄:
"<cin>>s.age;
break;
case5:
cout<<"请输入学生语文成绩:
"<cin>>s.cscore;
break;
case6:
cout<<"请输入学生高数成绩:
"<cin>>s.mscore;
break;
case7:
cout<<"请输入学生外语成绩:
"<cin>>s.escore;
break;
case8:
cout<<"请输入学生C++成绩:
"<cin>>s.pscore;
break;
case9:
cout<<"请输入数据库成绩:
"<cin>>s.dscore;
break;
case10:
cout<<"请输入学生体育成绩:
"<cin>>s.sscore;
break;
/*default:
cout<<"\t输入错误,返回主菜单!
"<adminwelcome();*/
}
cout<<"信息输入成功!
"<s.flag=0;
s.sumscore=s.cscore+s.mscore+s.escore+s.pscore+s.dscore+s.sscore;
s.avescore=s.sumscore/6;
ifile.seekp(-(sizeofs),ios:
:
cur);
ifile.write((char*)&s,sizeofs);
cout<<"信息已修改并保存!
"<}
ifile.close();
}
voidstuadmin:
:
del()//删除信息
{
chardelname[20];
inte=0;
cout<<"请输入您要删除的学生:
"<cin>>delname;
fstreamifile;
ifile.open("information.txt",ios:
:
in|ios:
:
out);
while(ifile.read((char*)&s,sizeofs)!
=0)
{
if((strcmp(delname,s.name)==0)&&s.flag==0)
{cout<<"学号:
"<"<"<"<"语文:
"<"<"<"<"
<"<"<"<e=1;
break;
}
}
if(e==0)
cout<<"没有相关信息!
"<if(e==1)
{
s.flag=1;
ifile.seekp(-(sizeofs),ios:
:
cur);
ifile.write((char*)&s,sizeofs);
cout<<"信息删除成功!
"<}
ifile.close();
}
//欢迎界面
voidstudentwelcome()//学生欢迎界面
{
cout<<"********************************************************************************"<cout<<"****************************欢迎使用学生信息管理系统****************************"<cout<<"********************************************************************************"<cout<<"\t\t1.查询信息\t\t2.退出系统"