吴世亮课设22.docx
《吴世亮课设22.docx》由会员分享,可在线阅读,更多相关《吴世亮课设22.docx(43页珍藏版)》请在冰豆网上搜索。
吴世亮课设22
课程设计报告
课程名称《面向对象编程》
课题名称学生成绩管理系统
专业信息管理与信息系统
班级信管0901
学号200903110119
姓名吴世亮
指导教师李峰、赵锦元、郭芳
2011年1月09日
湖南工程学院
课程设计任务书
课程名称《面向对象程序编程》
课题学生成绩管理系统
专业班级信管0901
学生姓名吴世亮
学号200903110119
指导老师李峰、赵锦元、郭芳
审批
任务书下达日期2010年12月20日
任务完成日期2011年1月09日
一、设计内容与设计要求
1.课程设计目的:
全面熟悉、掌握计算机系统与系统软件基本知识,增强对不同的问题运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,增强面向对象程序设计概念,熟悉C++语言编程,养成提供文档资料的习惯和规范编程的思想,为后继课程的实验以及课程设计打下较扎实的基础。
进一步提高上机动手能力,培养使用计算机解决实际问题的能力,为后继课程(数据结构、数据库和汇编语言等课程)的实验以及课程设计,特别是自学、毕业论文的完成打下扎实的基础。
2.课题题目
1、学生成绩管理系统
2、职工信息管理系统
3、图书管理系统程序系统
4、教师工作量统计系统
3.设计要求:
●主要模块
1、学生成绩管理系统
具有功能:
1、显示统计数据2、查找学生成绩3、修改学生成绩4、删除学生成绩5、插入学生成绩6、按平均分降序排列7、显示全部学生成绩8、退出本系统
2、职工信息管理
具有功能:
1、添加信息2、显示统计数据3、查找学生成绩4、修改信息5、删除信息6、插入信息7、显示全部信息8、退出本系统
3、图书管理系统程序
具有功能:
1、浏览书籍信息2、修改书籍信息3、统计书记情况4、查询书的基本信息5、录入新书信息
4、教师工作量统计系统
具有功能:
1、输入教师信息2、查看教师信息3、清空记录4、退出程序
课程设计报告规范
1、完成系统需求分析:
包括系统设计目的与意义;系统功能需求;输入输出的要求。
2、完成系统概要设计:
程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模块的功能;课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。
3、完成系统详细设计:
包括采用C++语言定义相关的数据类型;写出各模块的类C++码算法;画出函数的调用关系图。
4、调试分析、设计体会、测试数据:
准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果;程序调试中遇到的问题以及解决问题的方法;课程设计过程经验教训、心得体会。
5、关键源程序(带注释)
6、其他
1)设计正确,方案合理。
2)界面友好,使用方便。
3)程序精炼,结构清晰。
4)设计报告5000字以上,含程序设计说明、系统的功能框图、流程图、源程序清单等。
5)实际操作过程中遇到的问题及解决方法:
设计总结及心得体会.
6)上机演示。
二、进度安排
第17周星期二14时:
00分
星期三8时:
00分
星期四8时:
00分
星期五8时:
00分
第18周星期二14时:
00分
星期三14时:
00分
目录
1系统需求分析1
2总体设计2
2.1总体设计图2
2.2各函数之间的调用关系3
2.3数据结构及数据结构7
3详细设计7
3.1采用C++语言定义的相关数据类型7
3.2功能模块划分8
3.2.1构建学生类8
3.2.2构造函数9
3.2.3析构函数10
3.2.4统计数据10
3.2.5查找学生成绩11
3.2.6修改学生成绩12
3.2.7删除学生成绩13
3.2.8插入学生成绩14
3.2.9按平均分降序排序14
4.1调试结果15
4.1.1增加学生成绩16
4.1.2显示学生成绩17
4.1.3排序统计成绩18
4.1.4查找学生成绩20
4.1.5删除学生成绩20
4.1.6修改学生成绩22
4.1.7安全退出系统22
4.2程序调试中的问题23
5使用说明24
6心得体会24
7附录25
7.1源代码25
7.2参考文献:
34
8评分表35
1系统需求分析
本课题运用了c++类(面向对象)、链表和指针相结合开发的学生成绩管理系统,该系统的主要功能是:
显示统计数据
查找学生成绩
修改学生成绩
删除学生成绩
插入学生成绩
按平均分降序排列
显示全部学生成绩
退出本系统
2总体设计
2.1总体设计图
本程序实行了对学生成绩管理系统的管理,其系统功能模块如图所示;
图2.1
2.2各函数之间的调用关系
统计模块
输出模块
修改模块
删除模块
2.3数据结构及数据结构
程序利用C++语言编写,数据保存到已建立的文档实现数据保存和查询以及文档的更新。
3详细设计
3.1采用C++语言定义的相关数据类型
classStu//构建学生类
{
public:
friendvoidInput(Stustud[]);
friendvoidStatistic(Stustud[]);
friendvoidLookup(Stustud[]);
friendvoidModify(Stustud[]);
friendvoidDelete(Stustud[]);
friendvoidOutput(Stustud[]);
friendvoidSort(Stustud[]);
friendvoidInsert(Stustud[]);
friendvoidWrite(Stustud[],intn);
friendintRead(Stustud[]);
private:
charclass_0[20];
intnum;
charname[8];
floatelec;
floatc_program;
floatmedia;
floatenglish;
floatmath;
floatsport;
floatpolity;
floataverage;
intorder;
}
3.2功能模块划分
3.2.1构建学生类
classStu
{
public:
friendvoidInput(Stustud[]);
friendvoidStatistic(Stustud[]);
friendvoidLookup(Stustud[]);
friendvoidModify(Stustud[]);
friendvoidDelete(Stustud[]);
friendvoidOutput(Stustud[]);
friendvoidSort(Stustud[]);
friendvoidInsert(Stustud[]);
friendvoidWrite(Stustud[],intn);
friendintRead(Stustud[]);
private:
charclass_0[20];
intnum;
charname[8];
floatelec;
floatc_program;
floatmedia;
floatenglish;
floatmath;
floatsport;
floatpolity;
floataverage;
intorder;
}
3.2.2构造函数
Studentmassage:
:
Studentmassage()
{
Head=newStudent;
Head->Next=newStudent;
End=Head->Next;
in.open("sort.txt");
if(!
in)
cout<<"信管欢迎您登入我们的系统\n\n\n"<else
{
while(!
in.eof())
{
End->ReadFile(in);
if(End->name[0]=='\0')break;
End->Next=newStudent;
End=End->Next;
}
in.close();
cout<<"\t\t读取学生信息成功!
"<}
}
3.2.3析构函数
Studentmassage:
:
~Studentmassage()
{
Save();
for(Student*temp;Head->Next!
=End;)
{
temp=Head->Next;
Head->Next=Head->Next->Next;
deletetemp;
}
deleteHead,End;
}
3.2.4统计数据
intStudentmassage:
:
Statistic()//统计当前链表的记录总数,返回一个整数
{
if(!
Head)
return0;
intn=0;
for(Student*p=Head->Next;p!
=End;p=p->Next)
{
n++;
}
returnn;
}
3.2.5查找学生成绩
voidStudentmassage:
:
Lookup()
{
charname[20],Id[10];
intx;
Student*p=NULL;
cout<<"\n\t\t*********************************\n";
cout<<"\t\t※1.按学生的姓名查找\n\t\t※2.按学生学号查找";
cout<<"\n\t\t*********************************\n请选择:
";
cin>>x;
switch(x)
{
case1:
{cout<<"\t\t请输入要查找的学生的姓名:
";cin>>name;
if(p=Lookupname(name))
{
p->Next->Show();
cout<<"输入任意字符!
继续……";
getch();
}
else
{
cout<<"\t\t没有找到该姓名的学生!
"<<'\n'<cout<<"输入任意字符!
继续……";
getch();
}
}break;
case2:
{
cout<<"\t\t请输入要查找的学生的学号:
";cin>>Id;
if(p=LookupID(Id))
{
p->Next->Input();
cout<<"输入任意字符!
继续……";
getch();
}
else
{
cout<<"\t\t没有找到该学好的学生!
"<<'\n'<cout<<"输入任意字符!
继续……";
getch();
}
}break;
}
}
3.2.6修改学生成绩
voidStudentmassage:
:
Modify()//修改信息
{
charname[20];
Student*p=NULL;
cout<<"\t\t请输入要修改的人的姓名:
";cin>>name;
if(p=Lookupname(name))
{
cout<<"\t\t已找到学生的信息,请输入新的信息!
"<p->Next->Input();
cout<<"修改成功!
"<cout<<"输入任意字符!
继续……";
getch();
}
else
{
cout<<"\t\t没有找到!
"<cout<<"输入任意字符!
继续……";
getch();
}
}
3.2.7删除学生成绩
voidStudentmassage:
:
Delete()//删除信息
{
charname[20];
Student*p=NULL,*temp=NULL;
cout<<"\t\t请输入要删除的学生的姓名:
"<>name;
if(p=Lookupname(name))
{
temp=p->Next;
p->Next=p->Next->Next;
deletetemp;
cout<<"\t\t删除成功!
"<cout<<"输入任意字符!
继续……";
getch();
}
else
{
cout<<"\t\t没有找到!
"<cout<<"输入任意字符!
继续……";
getch();
}
}
3.2.8插入学生成绩
voidAdd()
{
End->Input();
End->Next=newStudent;
End=End->Next;
cout<<"添加成功!
"<cout<<"输入任意字符!
继续……";
getch();
}
3.2.9按平均分降序排序
voidStudentmassage:
:
Sort()//对当前链表进行排序
{
cout<<"Sorting..."<Student*p=NULL,*p1=NULL,*k=NULL;
intn=Studentmassage:
:
Statistic();
if(n<2)
return;
for(p=Head->Next;p!
=End;p=p->Next)
for(k=p->Next;k!
=End;k=k->Next)
{
if(p->averaver)
{
Studentmassage:
:
Swap(p,k);
}
}
cout<<"排序完成!
"<getch();
return;
}
3.2.6显示全部学生成绩
voidOutput()
{
for(Student*p=Head->Next;p!
=End;p=p->Next)
p->Show();
cout<<"输入任意字符!
继续……";
getch();
}
4.1调试结果
学生成绩管理程序登陆原始界面
登陆后的学生成绩管理界面并开始执行操作:
4.1.1增加学生成绩
选择序号1进行增加学生成绩
4.1.2显示学生成绩
选择序号2进行显示学生成绩
4.1.3排序统计成绩
选择序号3进行学生成绩的排序
排序后再进行显示学生成绩
4.1.4查找学生成绩
选择4进行查找学生成绩
4.1.5删除学生成绩
选择5进行删除学生成绩
删除后进行核实结果:
4.1.6修改学生成绩
选择6进行修改学生成绩
4.1.7安全退出系统
选择0退出系统
4.2程序调试中的问题
1、没有声明student*next出现错误,显示程序中nextisnotamemberofstudent。
解决方法是在student类中的public中声明student*next。
2、不熟悉构造函数及析构函数的作用,后查阅c++有关资料后知道,构造函数和析构函数都是类的公用成员函数,构造函数的作用是为了处理对象初始化。
析构函数是完成一些默认的处理工作。
3、各个函数调用复杂,不易理解,程序中有两个类的定义,分别为student和studentmessage,他们各有其函数,应对其函数进行合理分布。
4、在选择操作数字是若输入字符时程序进入死循环即代码的健壮性不好,亟待提高。
5、再输入数据时可以输入相同的学号即代码健壮性不好亟待提高。
6、程序运行之后在计算机磁盘中找不到相关的文档,应主函数增加执行保存文档操作。
case7:
Grade.Save();break;
5使用说明
1、运行程序到系统界面,按entered
键进入选择界面
2、输入你想要进行操作的相关阿拉伯数字,进行操作。
6心得体会
这一学期上完了《程序员》给我的感觉是内容多且知识点复杂抽象,虽然计算机是我们必不可少的生活工具、学习工具、娱乐工具。
他给我们带来的是便利,愉悦。
可是当我们真正得了解它时确是给人以不可言表的困难和虚幻。
不得不佩服计算机的始祖。
我们能做的也只是跟着前人的足迹不断拓展我们的知识面。
在完成程序编程中,应考虑到注意运用到面向对象编程和符合程序需求。
在此基础上怎样建立涵数以及怎样调用它们,建立他们的相互关系,在本程序中我用到了两个类,一个是类class和类Studentmessage,其中申明他们的私有变量和共有涵数,整个涵数中我用到的数据结构有链表及数组,用了两个系统自行运行的涵数分别为构造涵数和析构涵数,在整个运行程序中主要问题有界面的友好程度还有代码的简洁性和使算法尽量简单,以及程序的健壮性,程序的健壮性尤为重要亟待完善。
结束了这个学期的计算机课程,我们稍微了解了面向对象程序,其中类确实是我们棘手的问题,我们又不得不在两星期内完成我们的c++课设,确实对我们来说很困难。
自己在网上搜取相关信息外还看了c++的有关课程,经几天的认识了解,我还是懂了些相关知识,在老师、同学的帮助下我也在一步一步的进步,虽然期间遇到的困难不仅仅是知识问题,我还是一步步的攻克了。
现在的成果也是建立在c语言课设的基础上,在吸取c课设的优点时还对其进行了相关的完善。
每一次课设后,我得到的很多其中最重要的算是懂得多学习的重要性以及做事就应该有准备,不得毫无准备,态度不端正,计划安排不合理等等。
7附录
7.1源代码
#include
#include
#include
#include//用getch();
usingnamespacestd;
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Student类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
classStudent
{
public:
charname[20];
charId[20];
intCnum;//C课程得分
intMnum;//数学课程得分
intEnum;//英语课程得分
intelecnum;//电子课程得分
intmedianum;//多媒体课程得分
intsportnum;//体育成绩
intpolitynum;//政治成绩
intsum;//总分
intaver;
Student*Next;
voidInput()
{
cout<<"\t\t请输入学生的姓名:
";cin>>name;
cout<<"\t\t请输入学生的学号:
";cin>>Id;
cout<<"\t\t请输入C课程的成绩:
";cin>>Cnum;
cout<<"\t\t请输入数学课程的成绩:
";cin>>Mnum;
cout<<"\t\t请输入英语课程的成绩:
";cin>>Enum;
cout<<"\t\t请输入电子课程得分:
";cin>>elecnum;
cout<<"\t\t请输入多媒体课程得分:
";cin>>medianum;
cout<<"\t\t请输入体育成绩:
";cin>>sportnum;
cout<<"\t\t请输入政治成绩:
";cin>>politynum;
sum=Cnum+Mnum+Enum+elecnum+medianum+sportnum+politynum;
aver=sum/7;
}
voidReadFile(istream&in)
{
in>>name>>Id>>Cnum>>Mnum>>Enum>>elecnum>>medianum>>sportnum>>politynum>>sum>>aver;
}
voidShow()
{
cout<<"姓名:
"<"<"<<<"数学:
"<"<"<<<"多媒体课程:
"<"<"<<<"总成绩:
"<"<}
};
//﹌﹌﹌﹌﹌﹌﹌﹌﹌Studentmassage类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
classStudentmassage
{
public:
Studentmassage();
~Studentmassage();
voidInput();
voidLookup();
voidSave();
voidModify();
voidDelete();
voidSwap(Student*,Student*);
voidSort();
intStatistic();
voidOutput()
{
for(Student*p=Head->Next;p!
=End;p=p->Next)
p->Show();
cout<<"输入任意字符!
继续……";
getch();
}
voidAdd()
{
End->Input();
End->Next=newStudent;
End=End->Next;
cout<<"添加成功!
"<cout<<"输入任意字符!
继续……";
getch();
}
private:
Student*Head,*End;
ifstreamin;
ofstreamout;
Student*Lookupname(char*name)
{
for(Student*p=Head;p->Next!
=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
if(!
strcmp(p->Next->name,name))returnp;
returnNULL;
}
Student*LookupID(char*Id)
{
for(Student*p=Head;p->Next!
=End;p=p->Next)//匹配成功则返回上一个指针