数据结构课程设计学生管理系统.docx
《数据结构课程设计学生管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计学生管理系统.docx(17页珍藏版)》请在冰豆网上搜索。
数据结构课程设计学生管理系统
淮阴工学院
数据结构课程设计报告
选题名称:
学生管理系统
系(院):
计算机工程系
专业:
计算机科学与技术
班级:
网络1071
姓名:
施琦学号:
1071304118
指导教师:
张亚红张勇军
学年学期:
2008~2009学年第2学期
2009年6月20日
设计任务书
课题
名称
学生管理系统
设计
目的
本课程设计的目的是通过实践使学生经历一个系统开发的全过程并受到一次综合的训练,以便能较全面地理解、掌握和综合运用所学的知识去分析、解决实际问题。
实验
环境
1、Windows2000及以上
2、MicrosoftVisualC++6.0
任务
要求
任务:
完成《学生管理系统》的分析设计工作,并选用MicosoftVisualC++6.0完成系统的开发。
要求:
1.搜集学生管理方面的资料并编写代码;
2、上机调试;
3、答辩;
4、完成课程设计报告。
工作进度计划
序号
起止日期
工作内容
2009.6.8~2009.6.9
搜集学生管理方面的资料并编写代码
2009.6.9~2009.6.10
上机调试
2009.6.10
答辩
2009.6.10~2009.6.14
完成课程设计报告
指导教师:
2009年6月10日
摘要:
随着现在学校在校同学的增加,传统的的学生的信息的管理系统已经不能满足现在的需求,为了能够更加有效地对学生信息进行管理,所以在本次的数据结构课程设计中,目标是运用数据结构中的链表知识在C++中涉及一个能够有效管理学生信息的程序包括:
主控程序、学生档案管理子系统、学生成绩管理子系统、学生宿舍管理子系统。
可以对学生信息进行添加,修改,删除,和查看。
关键词:
数据结构;链表;学生管理系统
目录
1.需求分析2
2.概要设计2
2.1功能模块描述2
3.详细设计和实现2
3.1类的定义2
3.2具体函数的实现4
3.3程序流程图9
4.调试与操作说明9
总结12
致谢13
参考文献14
1.需求分析
随着现在学校在校同学的增加,传统的的学生的信息的管理系统已经不能满足现在的需求,所以在本次的数据结构课程设计中,我选择的课题是学生管理系统,目标是运用数据结构中的链表知识在VisualC++编程环境中设计出学生管理系统。
2.概要设计
链表是线形表的一种,线形表分为顺序存储结构和链式存储结构。
线形表的顺序存储结构的特点是逻辑关系上相邻的两个元素物理位置上也相邻,因此可以随机存取表中任一元素。
链式存储结构的特点是用一组任意的存储单元存储线形表的数据元素。
链表的最大的优点是对表的添加、删除、查找、排序等操作比较方便,因此采用链表来存储学生相关信息。
本课题分为六个部分:
构造单链表,显示所有学生信息的函数,添加学生信息的函数,查找学生信息的函数,删除学生信息的函数,主函数的设计。
2.1功能模块描述
voidCList:
:
addnode(CNode*pnode)//增加结点
voidCList:
:
deletelist()//删除链表
CNode*CList:
:
deletenode(CNode*pnode)//删除结点
CNode*CList:
:
lookup(CData&data)//查询
voidCList:
:
showlist()//显示学生信息
CNode*CList:
:
getnext(CNode*pnode)//获得下个结点
intStudent:
:
comparename(CData&data)//比较姓名
intmain()//主函数
3.详细设计和实现
3.1类的定义
定义了CData类,声明了comparename和show函数。
classCData
{
public:
CData(){};
virtualintcomparename(CData&)=0;
virtualvoidshow()=0;
virtual~CData(){};
};
定义结点类,声明了inputdata,shownode函数。
classCNode
{
public:
CNode()
{
pdata=0;
pnext=0;
}
CNode(CNode&n);
voidinputdata(CData*pd){pdata=pd;}
voidshownode(){pdata->show();}
CData*getdata(){returnpdata;}
friendclassCList;
private:
CData*pdata;
CNode*pnext;
};
定义了链表类,声明了addnode和deletelist函数
classCList
{
public:
CList(){phead=0;}
~CList(){deletelist();}
voidaddnode(CNode*pnode);
voiddeletelist();
CNode*deletenode(CNode*pnode);
CNode*lookup(CData&data);
CNode*getlisthead(){returnphead;}
voidshowlist();
CNode*getnext(CNode*pnode);
private:
CNode*phead;
};
3.2具体函数的实现
voidloadfile(CList&stulist)
{
ifstreaminfile("student.dat",ios:
:
binary);
if(!
infile)
{
cout<<"没有数据文件!
"<return;
}
CNode*p;
Student*s;
while(!
infile.eof())
{
s=newStudent;
infile.read((char*)s,sizeof(Student));
p=newCNode;
p->inputdata(s);
stulist.addnode(p);
}
stulist.deletenode(p);
infile.close();
}//在该函数中创建了一个文件,可以存储数据,并且创建结点和链表
voidoperate(CList&stulist)
{
intchoice;
do
{
system("cls");
cout<<"欢迎使用学生管理系统\n";
cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"
<<"1.输出所有学生记录\n"
<<"2.增加学生记录\n"
<<"3.删除学生记录\n"
<<"4.查询学生记录\n"
<<"0.退出\n"
<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
cout<<"提示:
按0-4进行选择"<cin>>choice;
cout<switch(choice)
{case1:
display(stulist);break;
case2:
add(stulist);break;
case3:
deletes(stulist);break;
case4:
lookup(stulist);break;
case0:
storefile(stulist);break;
default:
cout<<"输入错误,请重新输入您的选择:
";
}
}while(choice!
=0);
}//在该函数中使用了switch语句,可以选择相应的case进行操作。
在case1中
voidCList:
:
showlist()//显示学生信息
{
if(phead==0)
cout<<"对不起,没有任何记录.\n";
else
{
CNode*p=phead;
while(p)
{
p->pdata->show();
p=p->pnext;
}
}
}//对学生的信息进行了显示。
在case2中
voidadd(CList&stulist)
{
CNode*p;
Student*s;
charc[17],n[17],nam[17];
doublee,cp,m,ce,sm,cg,mar;floataver;
cout<<"请输入姓名(输入0结束):
";
cin.ignore();
cin.getline(nam,17);
while(strcmp(nam,"0"))
{
cout<<"输入学号:
";cin.getline(n,17);
cout<<"输入班级:
";cin.getline(c,17);
cout<<"输入宿舍:
";cin>>e;
cout<<"输入C++成绩:
";cin>>cp;
cout<<"输入多媒体技术成绩:
";cin>>m;
cout<<"输入大学英语成绩:
";cin>>ce;
cout<<"输入高等数学成绩:
";cin>>sm;
cout<<"输入大学体育成绩:
";cin>>cg;
aver=(cp+m+ce+sm+cg)/5;
s=newStudent;
s->set(c,n,nam,e,cp,m,ce,sm,cg,mar,aver);
p=newCNode;
p->inputdata(s);
stulist.addnode(p);
cout<<"记录添加成功."<cout<<"请输入姓名(输入0结束):
";
cin.ignore();
cin.getline(nam,17);
}}//在该函数中增加学生信息到结点中去
在case3中
voiddeletes(CList&stulist)
{
CNode*plook;
charname[17];
cout<<"请输入要删除的记录的学生姓名(输入0结束):
";
cin.ignore();
cin.getline(name,17);
while(strcmp(name,"0"))
{
Students;
s.set("0","0",name,0,0,0,0,0,0,0,0);
plook=stulist.lookup(s);
if(plook)
{
plook->shownode();
stulist.deletenode(plook);
cout<}
else
cout<<"对不起,在学生记录中查找不到"<cout<<"请输入要删除的记录的学生姓名(输入0结束):
";
cin.getline(name,17);
}
}//在该函数中删除结点信息,从而达到删除学生信息的目的。
在case4中
voidlookup(CList&stulist)
{
CNode*plook;
charname[17];
cout<<"请输入你要查找的姓名(输入0结束):
";
cin.ignore();
cin.getline(name,17);
while(strcmp(name,"0"))
{
Students;
s.set("0","0",name,0,0,0,0,0,0,0,0);
plook=stulist.lookup(s);
if(plook)
{
plook->shownode();
}
else
cout<<"对不起,在学生记录中查找不到"<cout<<"请输入你要查找的姓名(输入0结束):
";
cin.getline(name,17);
}
}//对比学生的姓名进行查找学生。
3.3程序流程图
图1.流程图
4.调试与操作说明
执行程序后,首先向系统中录入三位同学的信息,然后显示三个人的信息,运行后的界面如下:
图4.1录入三个学生信息后的运行结果
然后增加一个学生的信息再输出,结果如下图:
图4.2添加一个学生后的运行结果
接着再任意删除一个学生的信息,输出结果如下图:
图4.3删除一个学生后的运行结果
最后查询“shiqi”的信息,结果如下图:
图4.4查询的结果
总结
在这次课程设计中,感觉自己学到了不少知识,以往在上机实验过程中,书上总有相关的代码可以让我们参考,但是在这次课程设计中,是要独立的设计出一个真正的程序,在开始的时候我们使用了上学期C++所学到的关于文本输入输出的程序,但是在和同伴的讨论过程中,发现仅仅只是输入输出流的应用,并没有数据结构中的知识,所以我们就否定了原来的程序,重新做了这个程序,在这个程序中使用了链表存储相关信息,在编写程序中,动手能力得到了很大的提高,同时对链表的知识得到了很大的巩固。
在编写过程中,遇到了很多的问题,比如开始的时候算法不正确,后来的编写程序中对程序函数不能正确认识,但是在后来查阅资料和与同伴讨论中,很多的问题都得到了良好的解决。
总之,这次的课程设计对我来说是受益匪浅。
致谢
本次课程设计中,我得到了很多来自他方的帮助,在这里我要谢谢所有帮助过我的老师学生。
首先,我要谢谢淮阴工学院计算机工程系提供给实验室给我提供的方便环境!
其次,要谢谢这次课程设计的辅导老师张亚红老师给予我的帮助,没有他的悉心指导我也不能这么顺利的完成本次的课程设计,在这里衷心的对他们表示深深的谢意,谢谢!
同时也要感谢学校提供了优越的硬件设备可以让我们能够顺利的完成课程设计。
参考文献
1.殷人昆.据结构(用面向对象方法与C++语言描述).清华大学出版社,2008
2.吴乃陵,况迎辉.高等教育出版社,2006
3.慧南.结构——C++语言描述.人民邮电出版社,2005
4.周云静.数据结构习题解析与上机指导.冶金工业出版社,2004
5.苏仕华.数据结构课程设计.机械工业出版社,2005
6.李春葆,金晶.数据结构教程.清华大学出版社,2006
指导教师评语
学号
1071304118
姓名
施琦
班级
网络1071
选题
名称
学生管理系统
序号
评价内容
权重(%)
得分
1
考勤记录、学习态度、工作作风与表现。
5
2
自学情况:
上网检索机时数、文献阅读情况(笔记)。
10
3
论文选题是否先进,是否具有前沿性或前瞻性。
5
4
成果验收:
是否完成设计任务;能否运行、可操作性如何等。
20
5
报告的格式规范程度、是否图文并茂、语言规范及流畅程度;主题是否鲜明、重心是否突出、论述是否充分、结论是否正确;是否提出了自己的独到见解。
30
6
文献引用是否合理、充分、真实。
5
7
答辩情况:
自我陈述、回答问题的正确性、用语准确性、逻辑思维、是否具有独到见解等。
25
合计
指导教师(签章):
2008年6月30日