最新数据结构课程设计报告.docx
《最新数据结构课程设计报告.docx》由会员分享,可在线阅读,更多相关《最新数据结构课程设计报告.docx(21页珍藏版)》请在冰豆网上搜索。
最新数据结构课程设计报告
数据结构与算法课程论文
题目:
学生管理系统
院(系):
专业:
课程名称:
姓名:
学号:
指导老师:
2011年12月
学生管理系统
【设计目的】
设计“学生管理系统”使其具有数据插入、修改、删除、统计学生成绩、显示和查询等功能。
(1)数据包括:
学号、姓名、身份证信息及个人成绩等数据。
(2)可对记录中的学生信息进行修改。
(3)可增加或删除记录。
(4)可显示所有保存的记录。
(5)可按人名或学号进行查询。
(6)可进行成绩汇总统计和平均成绩及及格率的计算
【设计思路】
根据要求,学生管理系统数据以文本文件存放在文件中,故需要提供文件的输入、输出等操作;还需要保存记录以进行修改,删除,查找等操作;另外还应提供键盘式选择菜单实现功能选择。
【总体设计】
图1系统功能模块图
【详细设计】
一、代码分析
此程序主要包含一个类student用来.对学生相关学籍信息的描述.School.
二、
(1)数据成员number;name.sex.place.nation.Birth.party.id.score
Number学生学号.Name学生姓名sex学生性别place学生籍贯nation民族
Birth学生生日party政治面貌id学生身份证score学生分数
(2)成员函数
getnumber().getscore().output().get(); input();mend()del();found();show()count();save();begin();clear();
三、函数实现说明
1.Show( )函数:
该函数列出一个清晰的结构,对本程序所运用的几个模块整体上有个统一认识,方便了对程序的调用,节省了时间。
2.Input( )函数:
该函数是一个输入函数,它运用了for循环语句,本程序定义了两个变量,通过scanf语句的使用,又调用了函数SIR,实现了简洁明了的对学生成绩,姓名以及学号等进行键入。
3.del( )函数:
该函数实现的是删除功能。
该函数虽然定义的变量不多,但通过if语句和scanf语句的使用,对文件进行了读去和运用,简便的删除所选的目标
4.output()函数:
该函数是一个输出函数,它运用了for循环语句,本程序定义了两个变量,通过scanf语句的使用,又调用了函数SIR,实现了简洁明了的对学生成绩,姓名以及学号等进行输出。
5.mend()函数
该函数实现的是修改功能。
该函数虽然定义的变量不多,但通过if语句和scanf语句的使用,对文件进行了读去和运用,简便的修改所选的目标
6.found()函数
该函数实现的是查找功能。
该函数虽然定义的变量不多,但通过if语句和scanf语句的使用,对文件进行了读去和运用,简便的查找所选的目标
7.main()函数:
一个程序主函数不能少。
当以上的函数均编完之后,要实现各个功能操作的连接,还必须有主函数将它们联系起来,这样才能达到理想的结果。
对以上函数的连接,此程序采用了switch语句,格式清晰、容易接受。
至此学生成绩管理的基本功能便基本实现。
二 、系统软件环境:
MicrosoftVisualC++6.0
三 、程序主要功能:
实现基本的学生成绩数据管理,如:
具有建立文件,读取文件和保存记录的功能,并可增加、显示、修改、删除、查询学生记录的功能,并能对学生成绩进行统计.其中数据的查找、数据的删除又可通过不同的方式如按学号或姓名等进行操作。
四 、总结
系统功能说明:
1录入:
作用:
用于对学生学籍信息进行输入,并保存.
方法:
先输入学生学籍信息,然后录入,最后按enter结束.你所录入的文字
就给保存到该文件里!
2显示
输入学生学号,或者姓名可以显示学生的学籍信息
3查找:
有两种,一种按学号,一种按姓名。
4删除
输入需要删除的学生的学号,或者姓名
5修改
输入需要修改的学生的学号,或者姓名
6统计:
作用:
用于对学生学习成绩进行统计
方法:
输入学生学号,或者姓名.然后按确定
7保存
. 按7,并按确定,可以保存学生学籍信息
0退出:
作用:
退出整个"学生学籍管理系统";
方法:
按0并按确定.
【附录程序】
//学生管理系统
//头文件及类
#include
#include
#includepoweredby
#include
usingnamespacestd;
classstudent
{
protected:
intnumber;
charname[20];
charsex[6];
charplace[20];
charnation[6];
charbirth[20];
charparty[10];
charid[20];
floatscore[5];
public:
student*next;
student(){}
~student(){}
char*getname(){returnname;}
intgetnumber(){returnnumber;}
doublegetscore(inti){returnscore[i];}
floatgetg(){return(score[0]+score[1]+score[2]+score[3]+score[4]+score[5]);}
voidinput()
{
inte=1;
cout<<"\t\t\t按提示输入:
"<cout<<"\t\t输入学号:
";
cin>>number;
cout<<"\t\t输入姓名:
";
cin>>name;
do
{
cout<<"\t\t输入性别:
";
cin>>sex;
if(strcmp(sex,"男")==0||strcmp(sex,"女")==0)
{
cout<<"\t\t输入籍贯:
";
cin>>place;
cout<<"\t\t输入民族:
";
cin>>nation;
cout<<"\t\t输入生日:
";
cin>>birth;
cout<<"\t\t输入政治面貌:
";
cin>>party;
cout<<"\t\t输入身份证号:
";
cin>>id;
cout<<"\t\t输入数据结构与算法分数:
";
cin>>score[0];
cout<<"\t\t输入信息管理与信息系统分数:
";
cin>>score[1];
cout<<"\t\t输入ERP原理与应用分数:
";
cin>>score[2];
cout<<"\t\t输入数据库原理与应用分数:
";
cin>>score[3];
cout<<"\t\t输入企业认知实践分数:
";
cin>>score[4];
cout<<"\t\t输入体测分数:
";
cin>>score[5];
e=0;
}
else
{
cout<<"\t\t\t无此类型性别!
重新输入!
"<e=1;
}
}while(e);
return;
}
voidinput(ifstream&is)
{
is>>number>>name>>sex>>place>>nation>>birth>>party>>id
>>score[0]>>score[1]>>score[2]>>score[3]>>score[4]>>score[5];
is.get();
}
voidoutput()
{
cout<<"学生基本信息如下:
"<cout<<"学号:
"<<<"姓名:
"<<<"性别:
"<<<"籍贯:
"<<<"民族:
"<<<"生日:
"<<<"政治面貌:
"<<<"身份证号:
"<<<"数据结构与算法:
"<<<"信息管理与信息系统:
"<<<"ERP原理与应用:
"<<<"数据库原理与应用:
"<<<"企业认知实践:
"<<<"体测:
"<<<"总分:
"<}
voidoutput(ofstream&os)
{
os<<<<<<<<<<<<<<}
};
classschool
{
public:
school(){head=newstudent;head->next=NULL;key=0;}
~school(){deletehead;}
voidinput();
voidmend();
voiddel();
intfind(student**p,intnum,char*pn="^");
voidfound();
voidshow();
voidcount();
voidsave();
voidbegin();
voidclear();
charmainmenu();
intgetkey(){returnkey;}
voidsetkey(intk){key=k;}
private:
student*head;
intkey;
};
//录入函数
voidschool:
:
input()
{
student*p,*p2=NULL;
p=head;
intn;
while(p->next)
p=p->next;
while(n)
{
p2=newstudent;
p2->input();
p->next=p2;
p2->next=NULL;
p=p->next;
school:
:
setkey
(1);
cout<<"\t\t\t按1继续,按0返回:
";
cin>>n;
}
}
//子查找函数
intschool:
:
find(student**p1,intnum,char*pn)
{
student*p;
p=head;
while(p->next)
{
(*p1)=p;
if((p->next)->getnumber()==num||!
strcmp((p->next)->getname(),pn))
return1;
p=p->next;
}
return0;
}
//查找函数
voidschool:
:
found()
{
student*p;
intnum=-1,n=9;
charname[20]="^";
do
{
cout<<"\t\t1:
按学号查找,2:
按姓名查找:
";
cin>>n;
}while(n<1||n>2);
if(n==1)
{
cout<<"\t\t\t输入学号:
";
cin>>num;
}
if(n==2)
{
cout<<"\t\t\t输入姓名:
";
cin>>name;
}
if(!
find(&p,num,name))
{
cout<<"\t\t找不到你要查找的内容!
"<return;
}
(p->next)->output();
}
//删除函数
voidschool:
:
del()
{
student*p,*p2;
intnum;
cout<<"\t\t\t输入学号:
";
cin>>num;
if(!
find(&p,num,"^"))
{
cout<<"\t\t找不到你要删除的内容!
"<return;
}
(p->next)->output();
p2=p->next;
p->next=p2->next;
deletep2;
school:
:
setkey
(1);
}
//显示函数
voidschool:
:
show()
{
student*p;
p=head;
while(p->next)
{
(p->next)->output();
p=p->next;
}
}
//修改函数
voidschool:
:
mend()
{
student*p;
intnum=-1,n;
charname[20]="^";
do
{
cout<<"\t\t1:
按学号修改,2:
按姓名修改:
";
cin>>n;
}while(n<1||n>2);
if(n==1)
{
cout<<"\t\t\t输入学号:
";
cin>>num;
}
if(n==2)
{
cout<<"\t\t\t输入姓名:
";
cin>>name;
}
if(!
find(&p,num,name))
{
cout<<"\t\t找不到你要修改的内容!
"<return;
}
(p->next)->output();
(p->next)->input();
school:
:
setkey
(1);
}
//保存函数
voidschool:
:
save()
{
student*p;
p=head;
ofstreamos("student.txt",ios:
:
out);
if(school:
:
getkey()==1)
{
while(p->next)
{
(p->next)->output(os);
p=p->next;
}
}
cout<<"\t\t\t文件已保存!
"<school:
:
setkey(0);
}
//初始化函数
voidschool:
:
begin()
{
student*p,*p2;
p=head;
clear();
longt;
ifstreamis("student.txt",ios:
:
in);
if(!
is)
{
ofstreamos("student.txt",ios:
:
out);
os.close();
return;
}
intnum=-1;
while
(1)
{
num=-1;
t=is.tellg();
is>>num;
is.seekg(t);
if(num<0)
{
is.close();
return;
}
p2=newstudent;
p2->input(is);
p->next=p2;
p2->next=NULL;
p=p->next;
}
}
//清空函数
voidschool:
:
clear()
{
student*p,*p2;
p=head->next;
while(p)
{
p2=p;
p=p->next;
deletep2;
}
}
//统计函数
voidschool:
:
count()
{
student*p;
p=head;
intn=0;
doubleg[3]={0,0,0};
floatj[3]={0,0,0};
while(p->next)
{
p=p->next;
n++;
for(inti=0;i<3;i++)
{
g[i]=g[i]+(p->getscore(i));
(p->getscore(i))>=60?
j[i]++:
0;
}
}
cout<<"\t\t\b\b\b\b数据结构与算法总分:
"<"<<<"及格率:
"<"<<<"平均分:
"<"<<<"\t\t\b\b\b\bERP原理与应用总分:
"<"<<<"及格率:
"<<<"\t\t\b\b\b\b数据库原理与应用总分:
"<"<<<"及格率:
"<"<<<"平均分:
"<"<<<"\t\t\b\b\b\b体测总分:
"<"<<<"及格率:
"<}
//主选菜单函数
charschool:
:
mainmenu()
{
charn[6];
cout<<"\n\n☆☆☆☆欢迎进入学生管理系统☆☆☆☆"<cout<<"专业:
信息管理与信息系统专业班级:
090509学号:
090509112姓名:
盛韩"<<<"****************************"<<<"****************************"<<<"**1:
录入学生信息**"<<<"**2:
显示设计学生信息**"<<<"**3:
查找学生信息**"<<<"**4:
删除学生信息**"<<<"**5:
修改学生信息**"<<<"**6:
统计学生成绩**"<<<"**7:
保存学生信息**"<<<"**0:
退出系统**"<<<"****************************"<<<"****************************"<<<"请选择:
";
cin>>n;
returnn[0];
}
//主函数
voidmain()
{
schoolpp;
intk=1;
charn;
pp.begin();
while(k==1)
{
n=pp.mainmenu();
switch(n)
{
case'1':
pp.input();break;
case'2':
pp.show();break;
case'3':
pp.found();break;
case'4':
pp.del();break;
case'5':
pp.mend();break;
case'6':
pp.count();break;
case'7':
pp.save();break;
case'0':
if(pp.getkey()==1)
{
cout<<"\t\t\t是否保存?
1:
保存0:
不保存:
";
cin>>k;
if(k==1)
pp.save();
}
pp.clear();
k=0;
break;
}
}
}
//源程序结束
【设计体会】
做了这个学生学籍管理系统,懂得了很多.明白了做事情都必须要先做好准备.看了有关C++方面的资料,上网找了些程序以作参考.觉得我这个程序的优点在于简单快捷的录入学生信息,并可以进行保存,我加上了学生各科成绩的统计,让学校在查看学生学籍信息的时候可以对学生的成绩一目了然.只需要输入学生的学号或者姓名就可以找到学生的学籍信息,还可以进行修改,保存.
但是存在的缺点就是,当录入的步骤有差错的时候不能够返回,有待完善与提高.
经过这次之后让我懂得一个程序的完善需要平时努力学习,积累知识,之后才可以找到解决方法的.改进方法就是增加个while
(1)死循环.
经过这次设计程序之后,让我的逻辑思维,与动手能力都有所提高,使我一步步的向前.
总之,编程尤其是调试是一项细致深入的工作,需要下工夫、动脑子、善于积累经验,这往往能反映出一个人的水平、经验和科学态度。
【参考文献】
朱若愚.数据结构[M].北京:
电子工业出版社,2006.1:
41-65
晋良颍.数据结构[M].北京:
人民邮电出版社,2007.05:
21-45
刘大有.数据结构[M].北京:
高等教育出版社,2006.3:
30-58
赵文静.数据结构与算法[M].北京:
科学出版社,2007.8:
41-64
徐孝凯.数据结构简明教程.[M].北京:
清华大学出版社,2006.04:
102-115
严蔚敏,吴伟民.数据结构(C语言版)[M].北京:
清华大学出版社,2007.4:
39-43
傅清祥,王晓东.数据结构与算法设计[M].北京:
电子工业出版社,2006.3:
31-46
王敬华,林萍,.陈静.C语言程序设计[M].北京:
清华大学出版社,2007.10:
22-39
李云清,杨庆红,揭安全.数据结构(C语言版)[M].北京:
人民邮电出版社,2006.1:
44-67
[10]李春葆.数据结构(C语言版)习题与解析[M].北京:
清华大学出版社,2006.1:
47-55