数据结构课程设计学生管理系统.docx
《数据结构课程设计学生管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计学生管理系统.docx(13页珍藏版)》请在冰点文库上搜索。
数据结构课程设计学生管理系统
成绩
10信计2011-2012
(一)
数据结构课程设计
设计题目 学生管理系统
设计时间 2012.12.31至2012.1.6
学生姓名
学生学号
所在班级
指导教师
徐州工程学院数学与物理科学学院
学生管理系统
一、需求分析
1)课程设计题目:
运用数据结构编一C++程序,实现对学生信息的管理,主要包括主控程序、学生档案管理子系统、学生成绩管理子系统、学生宿舍管理子系统。
2)课程设计的基本要求:
设计好算法,使之能顺利实现对学生信息的管理,实用。
3)课程设计的任务:
通过此系统可以实现如下功能:
a)添加学生信息:
包括学生的姓名,学号,班级,宿舍号以及其C++、多媒体技术、高等数学、大学英语、大学体育等成绩;
b)删除学生信息:
可以根据其姓名、学号、班级、宿舍号和其成绩进行删除;
c)查询学生信息:
可以根据其姓名、学号、班级、宿舍号和其成绩进行查询;
d)输出所有学生信息:
可以显示所有录入到系统中的学生的信息。
4)软硬件运行环境及开发工具
本次课程设计主要是在VisualC++6.0下做的,VisualC++是Microsoft公司的功能强大的Windows应用程序开发环境。
由于VisualC++与Windows同为Microsoft公司的产品,它与Windows操作系统的结合将更加紧密。
目前,VisualC++是Windows平台下开发应用程序最重要的开发环境之一。
VisualC++既能支持C语言程序,又能C++运行程序,C++程序通常无需修改,或稍作修改,即可在其他计算机系统上运行。
二、概要设计
(1)、课程设计思想
学生管理系统是由单链表来完成的,它的主要思想是先将你的具体信息录入到文件中,如果要查询的话就是从文件中读取出来的,然后我的查询是由多种方式来查询的,可以通过姓名,学号,班级,宿舍号或成绩;删除也是通过多种方式实现的,也是根据用户输入的姓名,学号,班级,宿舍号或者成绩;最后还有一个显示所有学生的信息,可以把所有录入的学生信息显示出来。
这个系统整个思想就是如此。
编程时考虑得还不是很周全,还需要不断完善。
(2)、模块设计
本课题主要分为5个模块,即:
(1)voidadd(CList&stulist)模块,其作用是向系统中添加学生的信息;
(2)voiddisplay(CList&stulist)模块,其作用是显示所有录入的学生的信息;
(3)voidlookup(CList&stulist)模块,其作用是按照一定的条件查找学生的信息;
(4)voiddeletes(CList&stulist)模块,其作用是删除满足一定条件的学生的信息。
其流程图如下:
判断
开始
功能菜单
用户选择功能
执行选择服务
y
三、详细设计
本课题分为六个部分:
构造单链表,显示所有学生信息的函数,添加学生信息的函数,查找学生信息的函数,删除学生信息的函数,主函数的设计。
1)构造单链表
单链表有连个部分组成,即链表的结点类和链表类,其代码如下:
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;
};
CNode:
:
CNode(CNode&n)//拷贝构造函数
{
pdata=n.pdata;
pnext=n.pnext;
}
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;
};
2)显示所有学生信息的函数
代码如下:
voiddisplay(CList&stulist)
{
stulist.showlist();
cout<cout<<"按任意键返回主菜单";
getchar();getchar();
}
3)添加学生信息的函数
代码如下:
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);
}
}
4)查找学生信息的函数
代码如下:
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);
}
}
5)删除学生信息的函数
代码如下:
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);
}
}
6)主函数的设计
代码如下:
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);
}
intmain()
{
CListstulist;
loadfile(stulist);
operate(stulist);
return0;
}
四、调试分析与测试结果
执行程序后,首先向系统中录入三位同学的信息,然后显示三个人的信息,运行后的界面如下:
图4.1录入三个学生信息后的运行结果
然后增加一个学生的信息再输出,结果如下图:
图4.2添加一个学生后的运行结果
接着再任意删除一个学生的信息,输出结果如下图:
图4.3删除一个学生后的运行结果
最后查询“shiqi”的信息,结果如下图:
图4.4查询的结果
五、课设总结
本次课程设计使我了解到了有关VC++的真实案例,当然也使我学到的不少的知识,也提高了我的实际动手能力。
由于之前对VC++的知识没有足够的掌握,使我在实验的最初阶段遇到了不小的困难,但是随着实验的进行,随着问题的一步步被我解决了,我由衷的感到高兴,因为我又掌握了一些知识。
实验过程中我更好地掌握了单链表等相关涉及的知识点,运用这些知识点编写程序代码。
调试程序中,我们常常会不注意细节性的问题。
例如:
变量没有初始化、没有定义、少分号、少头文件等这些细节性的错误。
这此问题只是细小的问题,但不容忽视,它可能会影响到全部程序的运行。
查找主要代码无误后,若调试程序还存在错误的话,我们就需要关注这此细节性问题了。
要规范化程序,这样就很容易查找出细节性的问题。
一个好的程序应该是一个所占空间小、运行时间短、其他性能也好的算法。
然而,实际上很难做到十全十美,原因是上述要求有时相互抵触。
要节约算法的执行时间往往要以牺牲更多的存储空间为代价;而为了节省存储空间又可能要以更多的时间作为代价。
因此,只能根据具体情况有所侧重。
学习了数据结构这门课,我们在编写程序时就应该注意到所编写程序的时间复杂度,以及是否运用了良好的算法,充分考虑程序的性能,争取编写出更优良的程序来!
虽然在这一周中有过挫折和坎坷,有的问题一直到了最后才被解决,但是我认为这未必就不是好事,这样能磨练我的耐心,也锻炼了我主动收集查阅资料、关注点滴知识积累、重视实验细节分析的主动性、积极性、实践性,形式规范书写的习惯。
资料仅供参考!
!
!