c++课题设计报告.docx
- 文档编号:26765810
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:46
- 大小:276.78KB
c++课题设计报告.docx
《c++课题设计报告.docx》由会员分享,可在线阅读,更多相关《c++课题设计报告.docx(46页珍藏版)》请在冰豆网上搜索。
c++课题设计报告
课程设计报告
课程名称面向对象程序设计
课题名称公司人员管理系统
专业
班级
学号
姓名
指导教师
2011年12月28日
湖南工程学院
课程设计任务书
课程名称面向对象程序设计
课题公司人员管理系统
专业班级
学生姓名
学号
指导老师
审批
任务书下达日期2011年11月15日
任务完成日期2011年12月28日
一、设计内容与设计要求
1.课程设计目的:
面向对象程序设计课程设计是集中实践性环节之一,是学习完《面向对象程序设计》课程后进行的一次全面的综合练习。
要求学生达到熟练掌握C++语言的基本知识和技能;基本掌握面向对象程序设计的思想和方法;能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题,从而提高动手编程解决实际问题的能力。
2.课题题目
1)公司库存管理系统
2)高校学籍管理系统
3)高校工资管理系统
4)高校人事管理系统
5)通讯录程序设计
6)学生成绩管理系统
7)图书管理系统
8)文本编辑器的设计与实现
9)学生考勤管理系统
10)公司人员管理系统
3.设计要求:
⑴设计课题题目:
每位同学根据自己学号除以10所得的余数加1选择相应题号的课题。
随意换题者不记成绩。
⑵根据自己对应的课题完成以下主要工作:
①完成系统需求分析:
包括系统设计目的与意义;系统功能需求(系统流程图);输入输出的要求。
②完成系统总体设计:
包括系统功能分析;系统功能模块划分与设计(系统功能模块图)。
③完成系统详细设计:
包括数据库需求分析;数据库概念结构设计(E-R图);数据库逻辑结构设计;类层次图;界面设计与各功能模块实现。
④系统调试:
调试出现的主要问题,编译语法错误及修改,重点是运行逻辑问题修改和调整。
⑤使用说明书及编程体会:
说明如何使用你编写的程序,详细列出每一步的操作步骤。
⑥关键源程序(带注释)
⑶按规定格式完成课程设计报告,将其打印稿(A4纸)上交给老师存档。
⑷不得抄袭他人程序、课程设计报告,每个人应体现自己的个性设计。
二、进度安排
第17周星期一8:
00——12:
00
星期二8:
00——12:
00
星期四8:
00——12:
00
第18周星期一8:
00——12:
00
星期二14:
30——18:
30
星期三8:
00——12:
00
三、参考书籍
1.《C++程序设计课程设计》刘振安编著TP312C563
2.《C++Builder和Delphi课程设计与系统开发案例》伍俊良清华大学出版社7-302-06072-X
3.VisualC++课程设计案例精编严华峰中国水利水电出版社7-5084-2007-12004
4.VisualC++课程设计与系统开发案例伍俊良清华大学出版社7-302-05968-32002
5.VisualC++语言课程设计:
案例精选与编程指导陈清华朱红东南大学出版社7-81089-275-42003
6.VisualC++课程设计案例精编中国水利水电出版社7-5084-1004-12002
7.数据结构课程设计案例精编:
用C/C++描述李建学李光元吴春芳清华大学出版社7-302-14536-92007
(编程平台不限,vc++,c++Builder等等。
)
课题5:
公司人员管理系统
(一)、课程设计题目:
公司人员管理系统
(二)、目的与要求:
1、目的:
(1)要求学生达到熟练掌握C++语言的基本知识和技能;
(2)基本掌握面向对象程序设计的基本思路和方法;
(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
2、基本要求:
(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;
(2)要求在设计的过程中,建立清晰的类层次;
(3)在系统中至少要定义四个类,每个类中要有各自的属性和方法;
(4)在系统的设计中,至少要用到面向对象的一种机制。
3、创新要求:
在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。
4、写出设计说明书
(三)、设计方法和基本原理:
1、问题描述(功能要求):
公司人员管理系统实现对公司人员按姓名或者编号显示、查找、增加、删除和保存各类人员信息的操作。
某小型公司,主要有四类人员:
经理、兼职技术人员、销售经理和兼职推销员。
现在,需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。
人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。
程序对所有人员有提升级别的功能。
薪金的计算方法是:
经理拿固定月薪,兼职技术人员按工作小时数领取月薪,兼职推销员的报酬按该推销员当月销售额提成,销售经理既拿固定月薪也领取销售提成。
能按姓名或者编号显示、查找、增加、删除和保存各类人员的信息。
在基本要求达到后,可设计出比较友好的界面(如下拉菜单),也可用VC++ClassWizard设计(选作)。
2、问题的解决方案:
根据系统功能要求,可以将问题解决分为以下步骤:
(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
(2)分析系统中的各个实体及它们之间的关系包括属性和行为;
(3)根据问题描述,设计系统的类层次;
(4)完成类层次中各个类的描述(包括属性和方法);
(5)完成类中各个成员函数的定义;
(6)完成系统的应用模块;
(7)功能调试;
(8)完成系统总结报告以及系统使用说明书。
1.系统需求分析.............................................................................1
7.附录…………………………………………………………...21
1.系统需求分析
1.1问题描述
公司人员管理系统实现对公司人员按姓名或者编号显示、查找、增加、删除和保存各类人员信息的操作。
某小型公司,主要有四类人员:
经理、兼职技术人员、销售经理和兼职推销员。
现在,需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。
人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。
程序对所有人员有提升级别的功能。
薪金的计算方法是:
经理拿固定月薪,兼职技术人员按工作小时数领取月薪,兼职推销员的报酬按该推销员当月销售额提成,销售经理既拿固定月薪也领取销售提成。
能按姓名或者编号显示、查找、增加、删除和保存各类人员的信息。
在基本要求达到后,可设计出比较友好的界面(如下拉菜单),也可用VC++ClassWizard设计(选作)
1.2功能分析
⊙查询功能:
voidQuery()
⊙删除功能:
voidDelete()
⊙添加功能:
voidAdd()
⊙修改功能:
voidModify()
⊙保存功能:
voidSave()
⊙数据装入:
voidLoad()
1.2.1查询功能
函数原型:
voidQuery()
说明:
查询一个职员的基本信息,包括职工号,姓名,性别,所在部门,职务,薪水。
1.2.2删除功能
函数原型:
voidDelete()
说明:
能够对一个职员的信息进行删除,按职工号+姓名进行删除。
1.2.3添加功能
函数原型:
voidAdd()说明:
添加一个职员的基本信息,包括职工号,姓名,性别,所在部门,职务,薪水。
12..4修改功能
函数原型:
voidModify()
说明:
对满足条件的职员的信息进行修改,可以修改职工所在部门、职务、工资。
1.2.5保存功能
函数原型:
voidSave()
说明:
保存想要保存的人员信息。
1.2.6数据装入
函数原型:
voidLoad()
说明:
将保存在磁盘的数据装入到内存中,以便对数据的再次管理和操作。
2.总体设计
2.1系统总体框架
系统总体框架使用面向对象的程设计思想进行分析,整个系统涉及两大类信息和操作,公司,人员。
所以系统主要涉及两个大类:
公司类Company、人员类Person。
系统的总体框架就是公司类,人员类的定义;主函数中定义一个公司对象,循环显示主菜单并根据用户选择调用公司类的相应方法(成员函数)。
(1)公司类Company:
考虑系统操作的人员信息的数量具有不确定性,所以考虑使用链表保存、处理人员信息。
公司类包含:
所有人员信息的一个不带头结点的链表(作为数据成员)及可以对人员信息进行增,删,改,查询,数据存盘等操作的相关模块(Add,Delete,Modify,Query,Set)作为成员函数。
(2)人员类Person:
所有人员都具有的公共信息及操作可以使用人员类进行描述。
由于系统具有4类人员且4类人员数据,操作有所不同,如销售员包含销售额,而技术人员包含工作小时数且计算工资的方法不同,所以应当为4类人员创建相应的Person类的派生类。
(3)为了使公司类可以方便处理人员信息,可以考虑将公司类确定为人员类的友元类或者人员类提供公共的方法以便公司类进行操作。
为了公司类可以用共同方法操作人员类,可以将人员类的方法确定为虚函数。
2.2结构框图
2.3类的层次图
其中:
(1)Person类有No-人员编号,Name-人员姓名,Duty-人员类别,Earning-
工资,next-指向下一个人员的指针;Person类的CalcSalary(),Output()定义为纯虚函数分别表示要计算人员工资和输出人员信息,由于定义纯虚函数,所以Person是抽象类,具体计算工资,输出人员信息由派生类完成。
(2)各个派生的类,包含本类对象特有的数据,Sales:
:
Amount-销售员销售额,SalesManager:
:
Amount-销售经理的总销售额(系统统计各个销售员销售额得到销售经理的总销售额),Technician:
:
t-技术人员工作小时数。
Company{
Persor*Worker,
Company(),~Company(),Add(),Delete(),Modify(),Query(),Set(),Save(),Load()}
其中:
Worker就是人员链表。
Add(),Delete(),Modify(),Query(),Set(),Save(),Load()分别表示系统各个功能模块:
增加人员,删除人员,修改人员,查找人员,基本数据的设置,数据存盘,数据装入。
3.详细设计
3.1.程序的运行步骤及函数的实现
(1)主函数流程
(2)Company:
:
Add()
(3)Company:
:
Delete()
(4)Company:
:
Modify
(5)Company:
:
Query()
(6)Company:
:
Save()
(7)Company:
:
Load()
4.系统调试
4.1界面的显示,选择功能项
图4.1
4.2最开始先增加人员
1)增加经理
图4.2.1
2)增加销售经理
图4.2.2
3)增加技术人员
图4.2.3
4.3增加后对增加的人员进行查找
图4.3
4.4如果能查找到就说明增加成功,然后在进行修改操作
图4.4
4.5修改之后再查找这个人员,看是否修改成功。
图4.5
4.6确定修改成功后再进行删除人员
图4.6
4.7确定是否删除成功
图4.7
4.8确定删除之后再进行保存
图4.8
4.9对数据进行修改
图4.9
4.10看一下修改后的效果
图4.10
4.11修改正确,整个系统无误,退出系统
图4.11
5.结果分析
一.本系统独特的设计
1.两个类的设计
1.1Company类有数据成员员工,这个类的主要功能是对功能模块的实现,可以设计Add(),Delete(),Modify(),Query(),Set(),Save(),Load()函数对系统功能需求的实现。
查询功能voidQuery()
查询一个职员的基本信息,包括职工号,姓名,性别,所在部门,职务,薪水。
删除功能voidDelete()
能够对一个职员的信息进行删除,按职工号+姓名进行删除。
添加功能voidAdd()
添加一个职员的基本信息,包括职工号,姓名,性别,所在部门,职务,薪水。
修改功能voidModify()
对满足条件的职员的信息进行修改,可以修改职工所在部门、职务、工资。
保存功能voidSave()
保存想要保存的人员信息。
数据装入voidLoad()
将保存在磁盘的数据装入到内存中,以便对数据的再次管理和操作。
1.2People类有数据成员姓名,编号,职务,月总工资,还有两个纯虚函数,纯虚数不给出实现,在People类的派生类中再给出两个纯虚函数的相应的实现,一个纯虚函数是virtualvoidCalcSalary()=0;实现对每个人员工资的计算,另一个就是virtualvoidOutput()=0;实现对每个人员的具体信息的输出。
这个设计是一个亮点。
2.链表的设计,使用链表可以动态的增加人员,而不受内存的限制,先定义一个People类的链表头指针,再在以后每增加的人员设置为一个节点然后再把节电连接到头指针就实现了人员的增加。
3.界面的设计,每对一个具体的操作进行完之后,利用一个return;就可以返回主函数,在进行下一步操作,这是个很好的操作。
二.本系统不足之处
1.我设计的思路是由People类派生出四个类,Manager类,Sales类,SalesManager类,和Technician类。
但也可以用Manager类和Sales类共同派生出SalesManager类,这样就更接近我们学习的面向对象的设计的思路,这是一个不足之处。
2.本系统的删除功能不是很完善,问题就是每当删除一个人员的时候,这个人员的所有信息都被删除了,包括人员的编号,编号一旦删除了就找不回了,也就是说删除了一号,这个系统就没有了一号,这是一个不足之处。
其他的还算比较好。
⏹6.总结
这次课程设计所设计的公司员工管理系统(CEMS)是一个小型的人事信息管理系统,该系统实现了职工信息的添加、删除、修改、显示、查询等功能,并且运用了文件操作技术,可以实现数据的永久性保存。
通过这次课程设计,我拓宽了知识面,锻炼了能力,综合素质得到较大提高。
运用学习成果,把课堂上学到的系统化的理论知识,尝试性地应用于实际设计工作,并从理论的高度对设计工作的现代化提出一些有针对性的建议和设想。
检验学习成果,看一看课堂学习与实际工作到底有多大距离,并通过综合分析,找出学习中存在的不足,以便为完善学习计划,改变学习内容与方法提供实践依据。
对我们计算机专业的本科生来说,实际能力的培养至关重要,而这种实际能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践。
这也是一次预演和准备毕业设计工作。
通过课程设计,让我们找出自身状况与实际需要的差距,并在以后的学习期间及时补充相关知识,为求职与正式工作做好充分的知识、能力准备,从而缩短从校园走向社会的心理转型期。
经过两周的C++课程实践,我对C++语言设计有了一个更深,更全面的了解,尤其体会到C++面向对象操作对简化程序的重要作用.下面是我的几点体会:
①刚拿到课题时,我一脸的茫然,看到如此庞大的工程,不知如何下手.这个工资管理系统中职工子信息竟然包15条,以前从来没有遇到过如此多的变量.和同学讨论很久好,我发现其实可以化繁为简的,信息15条不一定全都要,因为其中本身就有重复的.所以做任何事情都必须要开动脑筋,积极思考,有时还要学会化繁为简.②在编程时条理清晰是至关重要的.主函数,函数,成员函数之间的层次关系,调用关系一定要有一个全面的把握,尤其要体会类的封装性.另外很重要的一点就是一定要对链表的五种操作熟练的掌握.③在编译,链接,调试的过程中一定要有耐心.因为一个程序中会有很多小的错误,甚至有的问题要几个小时才能解决.遇到问题,一定要全面分析,有时候还要向同学请教.
总得来说,编程时极需要耐心的.C++课程设计实践为我们提供了一个综合运用所学知识,解决实际问题的平台,增强了我们实践动手的能力和工程实践能力,并且锻炼和培养了我们的自学能力,让我们对C++有了一个更全面的了解。
7.附录
源程序清单:
#include
#include
#include
#include
#include
//全局数据,对象
doubleManagerSalary=5000;//经理固定月薪
doubleSalesManagerSalary=2000;//销售经理固定月薪
doubleSalesManagerPercent=0.5;//销售经理提成%
doubleSalesPercent=5;//销售人员提成%
doubleWagePerHour=20;//技术人员小时工资
intID;//员工标识(要保证唯一)
classPerson//员工类
{
protected:
intNo;//编号
charName[20];//姓名
intDuty;//岗位
doubleEarning;//收入
Person*next;
public:
Person(charID,char*Name,intDuty)
{
this->Duty=Duty;
strcpy(this->Name,Name);
this->No=ID;
}
virtualvoidCalcSalary()=0;
virtualvoidOutput()=0;
friendclassCompany;
};
classManager:
publicPerson//经理类
{
public:
Manager(charID,char*Name,intDuty):
Person(ID,Name,Duty){}
voidCalcSalary(){Earning=ManagerSalary;}
voidOutput()
{
CalcSalary();
cout< } }; classSalesManager: publicPerson//销售经理类 { private: doubleAmounts; public: SalesManager(charID,char*Name,intDuty,doubleAmounts): Person(ID,Name,Duty){ this->Amounts=Amounts;} voidSetAmounts(doubles) { Amounts=s; } doubleGetAmounts() { returnAmounts; } voidCalcSalary() { Earning=SalesManagerSalary+Amounts*SalesManagerPercent/100; } voidOutput() { CalcSalary(); cout< } }; classTechnician: publicPerson//技术员类 { private: doublet; public: Technician(charID,char*Name,intDuty,doubleT): Person(ID,Name,Duty) { this->t=T; } doubleGetT() { returnt; } voidSetT(doubleT) { this->t=T; } voidCalcSalary() { Earning=WagePerHour*t; } voidOutput() { CalcSalary(); cout< } }; classSales: publicPerson//销售员类 { private: doubleAmount; public: Sales(charID,char*Name,intDuty,doubleAmount): Person(ID,Name,Duty) { this->Amount=Amount; } doubleGetAmount() { returnAmount; } voidSetAmount(doubleAmount) { this->Amount=Amount; } voidCalcSalary() { Earning=SalesPercent/100*Amount; } voidOutput() { CalcSalary(); cout< } }; classCompany//公司类 { private: Person*Worker;//员工表 public: Company() { Worker=0; Load(); } ~Company() { Person*p; p=Worker; while(p) { p=p->next; deleteWorker; Worker=p; } Worker=0; } voidAdd();//增加人员 voidDelete();//删除人员 voidModify();//修改人员 voidQuery();//查询人员 voidSet();//设置基本数据 voidSave();//数据存盘(包括基础数据,人员数据) voidLoad();//数据的装入 }; voidCompany: : Add()//增加人员 { Person*p;//新结点指针 intDuty; charName[20]; doubleAmount,Amounts,T;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 课题 设计 报告