课设C++公司人员管理_第1页
课设C++公司人员管理_第2页
课设C++公司人员管理_第3页
课设C++公司人员管理_第4页
课设C++公司人员管理_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计报告课程名称算法与程序设计课题名称公司人员管理系统专 业班 级学 号姓 名指导教师2017年12月18日课程设计任务书课程名算法与程序设计课 题 公司人员管理系统专业班级学生姓名 学 号指导老师审 批任务书下达日期2017 年12月 18日任务完成日期 2017年 12月 31日设计内容与设计要求1设计内容:题目 7:公司人员管理系统(一)、课程设计题目:公司职员管理系统(二)、目的与要求:1、目的:(1)要求学生达到熟练掌握 C+语言的基本知识和技能;( 2)基本掌握面向对象程序设计的基本思路和方法;( 3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。2、基本要求:

2、(1)要求利用面向对象的方法以及 C+的编程思想来完成系统的设计;( 2)要求在设计的过程中,建立清晰的类层次;( 3)在系统中至少要定义四个类,每个类中要有各自的属性和方法;3、创新要求 :在基本要求达到后, 可进行创新设计, 如根据查找结果进行修改的功能及设 计出比较友好的界面等。(三)、设计方法和基本原理:1 、问题描述(功能要求): 某小型公司,主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。现在, 需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。要求:1。兼职推1)其中,人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加2)程序对所有人

3、员有提升级别的功能3)月薪的计算方法是: 经理拿固定月薪, 兼职技术人员按工作小时数领取月薪, 销员的报酬按该推销员当月销售额提成 , 销售经理既拿固定月薪也领取销售提成。4)能按姓名或者编号显示、查找、增加、删除和保存各类人员的信息 2、问题的解决方案 :根据系统功能要求,可以将问题解决分为以下步骤:(1)分析系统中的各个实体之间的关系及其属性和行为;(2)根据问题描述,设计系统的类层次;(3)完成类层次中各个类的描述(包括属性和方法);(4)完成类中各个成员函数的定义;(5)完成系统的应用模块;(6)功能调试;(7)完成系统总结报告以及系统使用说明书2设计要求: 前言(包括课题的背景资料,

4、别人已做了些什么,自己准备做哪些改进) 课程设计报告正文内容(包括系统设计要求,设计思路,系统功能模块图,系统流程图,类的层次图(包括类成员 列表),调试过程,关键程序代码,总结,参考书目等)。(一)需求分析系统设计目的与意义 系统功能需求(系统流程图); 输入输出的要求;(二)总体设计系统功能分析; 系统功能模块划分与设计(系统功能模块图)。(三)详细设计数据库需求分析数据库概念结构设计( ER 图); 数据库逻辑结构设计。类层次图(四)界面设计与各功能模块实现(五)系统调试 调试问题出现的主要问题:编译语法错误及修改,重点是运行逻辑问题修改和调整六)使用说明及编程体会说明如何使用你编写的程

5、序,详细列出每一步的操作步骤。(七)关键源程序(带注释)书写格式a. 要求用A4纸打印成册b. 正文格式:一级标题用 3号黑体,二级标题用四号宋体加粗 ,正文用小四号宋 体; 行距为 22。c. 正文的内容:正文总字数要求在 3000字左右(不含程序原代码)。d. 封面格式如下页。考核方式指导老师负责验收程序的运行结果, 并结合学生的工作态度、 实际动手能力、 创新精神 和设计报告等进行综合考评,并按优秀、 良好、 中等、及格和不及格五个等级给出每位同学 的课程设计成绩。具体考核标准包含以下几个部分:a. 平时出勤(占10%)b. 系统需求分析、功能设计、数据结构设计及程序总体结构合理与否(占

6、10%)c. 程序能否完整、准确地运行,个人能否独立、熟练地调试程序(占40%)d .设计报告(占30%)注意:不得抄袭他人的报告(或给他人抄袭),一旦发现,成绩为零分。e. 独立完成情况(占 10% )。课程验收要求a. 判定算法设计的合理性,运行相关程序,获得正确的数值结果。b. 回答有关问题。c. 提交课程设计报告。d. 提交软盘(源程序、设计报告文档)。e. 依内容的创新程度,完善程序情况及对程序讲解情况打分。二、 教材及参考书 朱战立等著 , C+ 面向对象程序设计,人民邮电出版社; 郑莉著, C+ 语言程序设计(含实验指导书)。 清华大学出版社 ( 结构化程序设计 部分 )钱能主编

7、 ,C+ 程序设计教程,清华大学出版社, 2000.11 戴锋编著, Visual C+ 程序设计基础 , 清华大学出版社 ,2001.4 吕日著, C+ 程序设计教程,清华大学出版社,C+ 大学教程,美国 Harvey M.Deitel 等三、进度安排1、 班级:2、 主讲教师:3、 辅导教师:4、 时间安排:第 18 周星期一 8 时:30 分11时: 30分; 14时: 00 分17时: 00分星期二 8 时:30 分11时: 30分; 14时: 00 分17时: 00分星期三 8 时:30 分11时: 30分; 14时: 00 分17时: 00分星期四 8时:30 分11时:30 分;

8、 14时: 00分 17 时: 00 分星期五 8 时: 30分 11时: 30分; 14时: 00 分 17时: 00分附:选题方案:所选题目根据学生学号确定,学号模7 加 1,即(学号 %9+1)。如你的学号为 17,则所选题目号为:17%7+仁=4 (题目4)。同班的同学自由组合,可以最多三个选同一题的同学共同完成一项作业。 学有余力的同学可以自由组合做题目 8,可以自由设计吉祥物的图案。、八 、-前言这次18周我们进行了 C+勺面向对象程序设计的课程设计,这次我们的课题是 课题 7 公司人员管理系统 当初拿到这个课题的时候一脸懵逼目录(一)需分求析 9(二)系统总体设计 9(三)详细设

9、计 11(四)功能模块实现流程图 13(五)系统调试 17(六)源程序 19(一)需分求析面对小公司职员的薪资发放问题及公司人员升职调整问题需作出公司人员管理 系统来解决这个问题。目的是要求:( 1) 其中,人员编号在生成人员信息时同时生成, 每输入一个人员信息编号顺 序加 1。( 2) 程序对所有人员有提升级别的功能( 3) 月薪的计算方法是: 经理拿固定月薪, 兼职技术人员按工作小时数领取月 薪,兼职推销员的报酬按该推销员当月销售额提成 , 销售经理既拿固定月 薪也领取销售提成。(4) 能按姓名或者编号显示、查找、增加、删除和保存各类人员的信息(二)系统总体设计( 1)系统分析 :根据问题

10、描述和要求, 系统要求能够按姓名或者编号显示、 查找、增加、删除和保存各类人员的信息。 确定程序至少应该具备如下功能: “查 询人员”、“增加人员”、“删除人员”、“数据存盘”基本模块。系统既然具有“数据存盘”功能人员数据可以保存到磁盘文件,那么也就 意味着今后可以从磁盘文件读出人员数据, 所以系统增加了 “人员数据装入” 模 块,以方便用户使用、避免数据重复录入。考虑到系统实现简捷,人员数据文件 采用文本文件,人员数据文件名: Person.txt 。做为一个完整系统,除了具有增加人员,删除人员信息模块,还应该具有修 改人员相关信息的功能,所以本系统设计时考虑增加“修改人员”模块。考虑到根据

11、编号查找人员信息功能在“删除人员”、“修改人员”等模块都使用,所以可以考虑设置为一个模块考虑到系统要求人员编号在生成人员信息时同时生成,每输入一个人员信息 编号顺序加 1。这样就要求人员编号在增加人员时自动生成 ( 增加 1)且不重复。 根据这个要求,可以考虑设置一个全局量: “当前最大编号” ,每增加一个人员, 当前最大编号自动增 1,然后新增加人员使用这个编号。为了保证系统能记忆这 个编号,可以使用一个数据文件保存当前这个编号。 系统每次开始运行前从文件 读入这个编号, 随着人员增加, 编号自动增加, 系统每次运行结束时将这个编号 写入文件。本系统将初值 ( 没有一个用户时 )设置为 0。

12、考虑到人员的许多固定信息如:经理、销售经理的固定月薪,销售经理、销 售人员提成, 技术人员小时工资等都是一些不需要每个人员都要输入的信息, 所 以可以将这些信息都保存在一个数据文件中, 本系统为了方便起见, 将这些信息 与“最大编号”全部保存在一个文件中,并使用“基础数据设置”模块进行设置 和管理。基础数据文件也采用文本文件,基础数据文件名: Base.txt 。本系统还提供“查询本月经营信息”帮助计算销售总额,工资总额,并按照 公式计算本月盈亏。综合考虑系统具有下面 8 项功能模块:增加人员,删除人员,修改人员,查询 本月经营信息,基础数据设置,数据存盘,数据装入系统使用的数据文件格式如下:

13、Base.txt :( 格式:项目 数据 ) 经理固定月薪 3000 销售经理固定月薪 1000 销售经理提成 1 销售人员提成 2 技术人员小时工资 20 ID 6Person.txt :(格式:编号 ,姓名,人员类别,其它数据,销售员销售额 ,技术人员 工作小时)2 wang 3 1000003 liu 14 wu 4 1005 huang 26 tao 3 150000注:人员类型编号 1经理; 2销售经理; 3销售员; 4技术人员 (2)系统功能模块划分与设计使用面向对象的程序设计思想进行分析,整个系统涉及两大类信息和操作,公司,人员。所以系统主要涉及两个大类:公司类 Company人

14、员类Person。系 统的总体框架就是公司类, 人员类的定义; 主函数中定义一个公司对象, 循环显 示主菜单并根据用户选择调用公司类的相应方法 (成员函数 )。(1)公司类 Compan:y 考虑系统操作的人员信息的数量具有不确定性,所以考虑 使用链表保存、 处理人员信息。 公司类包含: 所有人员信息的一个不带头结点的 链表(作为数据成员)及可以对人员信息进行增,删,改,查询经营信息,基础 数 据 设 置 , 数 据 存 盘 , 数 据 装 入 等 操 作 的 相 关 模 块 (Add,Delete,Modify,Query,Set,Save,Load) 作为成员函数。人员类Person :所

15、有人员都具有的公共信息及操作可以使用人员类进行描 述。由于系统具有 4 类人员且 4类人员数据, 操作有所不同, 如销售员包含销售 额,而技术人员包含工作小时数且计算工资的方法不同, 所以应当为 4 类人员创 建相应的 Person 类的派生类。(3) 为了使公司类可以方便处理人员信息,可以考虑将公司类确定为人员类的友 元类或者人员类提供公共的方法以便公司类进行操作。 为了公司类可以用共同方 法操作人员类,可以将人员类的方法确定为虚函数(三)详细设计(1)数据库需求分析 使用面向对象的程序设计思想进行分析,整个系统涉及两大类信息和操作, 公司,人员。所以系统主要涉及两个大类:公司类Compan

16、y人员类Person。系统的总体框架就是公司类, 人员类的定义; 主函数中定义一个公司对象, 循环显 示主菜单并根据用户选择调用公司类的相应方法 (成员函数 )。(1) 公司类 Compan:y 考虑系统操作的人员信息的数量具有不确定性,所以考虑 使用链表保存、 处理人员信息。 公司类包含: 所有人员信息的一个不带头结点的 链表(作为数据成员)及可以对人员信息进行增,删,改,查询经营信息,基础 数 据 设 置 , 数 据 存 盘 , 数 据 装 入 等 操 作 的 相 关 模 块 (Add,Delete,Modify,Query,Set,Save,Load) 作为成员函数。人员类Person

17、:所有人员都具有的公共信息及操作可以使用人员类进行描 述。由于系统具有 4 类人员且 4类人员数据, 操作有所不同, 如销售员包含销售 额,而技术人员包含工作小时数且计算工资的方法不同, 所以应当为 4 类人员创 建相应的 Person 类的派生类。(3) 为了使公司类可以方便处理人员信息,可以考虑将公司类确定为人员类的友 元类或者人员类提供公共的方法以便公司类进行操作。 为了公司类可以用共同方 法操作人员类,可以将人员类的方法确定为虚函数。2)数据库概念结构设计( E R 图);3)类的层次图Pers on No,Name,Duty,Earni ng, next,Perso n( ),Cal

18、cSalary(),Output() Ma nager(), Amou nt,Amou nt, t,CalcSalary(), Sales(),GetAmou nt(), SalesMa nager(), Tech nicia n(),Output() SetAmou nt(),SetAmou nt(),GetT(),SetT(),CalcSalary(), CalcSalary(), CalcSalary(), Output() Output() Output()其中:(1) Person类的No-人员编号,Name人员姓名,Duty-人员类别,Earning-工资,next-指向下一个人员

19、的指针;Person类的CalcSalary() , Output()定义为 纯虚函数分别表示要计算人员工资和输出人员信息,由于定义纯虚函数,所以Person是抽象类,具体计算工资,输出人员信息由派生类完成。(2) 各个派生的类,包含本类对象特有的数据,Sales:Amount-销售员销售额, SalesManager:Amount-销售经理的总销售额(系统统计各个销售员销售额得到 销售经理的总销售额),Tech ni cia n:t-技术人员工作小时数。Compa nyPerson *Worker,Clear(),Compa ny(),Compa ny(),Add(),Delete(),Mo

20、dify(),Query(),Set(),Save(),Load()其中:(1) Worker就是人员链表。(2) Clear()用于清除人员链表所有结点。(3) Add(),Delete(),Modify(),Query(),Set(),Save(),Load()分别表示系统各 个功能模块:增加人员,删除人员,修改人员,查询本月经营信息,基础数据设置,数据存盘,数据装入(四) 功能模块实现流程图(1)主函数流程开始创建公司对象显示菜单接受输入根据输入执行公司操作结束(2) Company:Add()- 开始ID号增1输入岗位输入数据,创建员工对象结点员工结点加入链表(3) Company:D

21、elete() Compa ny:Modify输入员工ID1纟口 点存在 ?.”修改结点提示未找到查找结点结束5) Company:Query()(6) Company:Save()(7) Compa ny:Load()(五)系统调试(六)心得体会这次课程设计我们小组的课题是 公司员工管理系统 ,刚刚拿到这个课题是觉 得很,毕竟我们只学习了一个学期的 C+勺面向对象程序设计,设计一个比较系 统的又相对灵活的系统是很难的, 所以我们三个人决定去网上找一个已解决这个 课题的C+程序,我们要做的就是对原有的做出修改 所以我们先看了源程序在 理解的的基础上做出修改完善, 在理解源程序的时候对类的理解还

22、不够深刻比如 说在类的定义的时候容易出现理解上的偏差, 虽然是学过类的相关知识但是还是 不足以完全理解,这方面我们会努力的学习。课程设计旨在锻炼人的系统性设计思维和对学到的知识的应用。 自主编程是一个 需要长期积累的过程。对源程序的修改就会应用到这些。程序设计是一门实践性很强的课程,既要掌握概念,又要动手编程,还要上 机调试运行,这次设计更让我们深刻体会到这一点。 我们不仅编程能力得到提高, 而且学会掌握通过分析问题, 并用专业知识去解决问题。 从分析问题到算法编写, 中间的过程只有实践才会真正明白。七)源程序/* 本程序有关的两个数据文件:base.txt 基础数据文件 ( 必须存在,且按规

23、定格式保存 ) person.txt 人员信息文件 ( 可选 )*/ #include #include #include #include 经理固定月薪 销售经理固定月薪 销售经理提成 销售人员提成 技术人员小时工资 员工标识 ( 要保证唯一 )/ 全局数据,对象double ManagerSalary; / double SalesManagerSalary; / double SalesManagerPercent; / double SalesPercent; / double WagePerHour; / int ID; /class Person / 员工类 protected:i

24、nt No; / 编号char Name20; /姓名int Duty; /岗位double Earning; /收入Person *next;public:Person(char ID,char *Name,int Duty)this-Duty=Duty;strcpy(this-Name,Name);this-No=ID;virtual void CalcSalary()=0;virtual void Output()=0;friend class Company;class Manager:public Person / 经理类 public:Manager(char ID,char *N

25、ame,int Duty):Person(ID,Name,Duty)void CalcSalary()Earning=ManagerSalary;void Output()CalcSalary();coutNotNamet经理 tEarningendl;class SalesManager:public Person / 销售经理类private:double Amount;public:SalesManager(char ID,char *Name,int Duty):Person(ID,Name,Duty)void SetAmount(double s)Amount=s;void Calc

26、Salary()Earning=SalesManagerSalary+Amount*SalesManagerPercent/100;void Output()CalcSalary();coutNotNamet 销售经理 tEarningt=T;double GetT()return t;void SetT(double T)this-t=T;void CalcSalary()Earning=WagePerHour*t;void Output()CalcSalary();coutNotNamet 技术员 tttEarningAmount=Amount;double GetAmount()retu

27、rn Amount;void SetAmount(double Amount)this-Amount=Amount;void CalcSalary()Earning=SalesPercent/100*Amount;void Output()CalcSalary();coutNotNamet 销售员 tAmounttEarningnext; delete Worker; Worker=p;Worker=0;void Add(); / void Delete(); / void Modify(); / void Query(); / void Set(); / void Save(); / voi

28、d Load(); / ;员工表清除内存中数据增加人员 删除人员 修改人员 查询人员 基础数据设置数据存盘 ( 包括基础数据,人员数据 ) 数据装入 ( 包括基础数据,人员数据 )void Company:Clear() / 清除内存中人员数据 (内部使用 ) Person* p=Worker;while(p)Worker=p-next;delete p; p=Worker;void Company:Add()Person *p; /新结点指针int Duty;char Name20;double Amount,T;coutn* 新增员工 *n;/ 输入员工信息ID+;coutDuty; co

29、utName;if(Duty=3)coutAmount;else if(Duty=4)coutT;/ 创建新员工结点switch(Duty)case 1:p=new Manager(ID,Name,Duty); break;case 2:p=new SalesManager(ID,Name,Duty); break;case 3:p=new Sales(ID,Name,Duty,Amount); break;case 4:p=new Technician(ID,Name,Duty,T); break;p-next=0;/ 员工结点加入链表if(Worker) / 若已经存在结点Person *

30、p2;p2=Worker;while(p2-next) / 查找尾结点p2=p2-next;p2-next=p; / 连接else / 若不存在结点 ( 表空 )Worker=p; / 连接void Company:Delete() / 删除人员int No;coutn* 删除员工 *n; coutID 请输入数字! n; coutNo;/ 查找要删除的结点Person *p1,*p2; p1=Worker; while(p1) if(p1-No=No) break;elsep2=p1; p1=p1-next;/ 删除结点 if(p1!=NULL)/ 若找到结点,则删除 if(p1=Worke

31、r) / 若要删除的结点是第一个结点 Worker=p1-next; delete p1;else / 若要删除的结点是后续结点 p2-next=p1-next; delete p1;cout 找到并删除 n;else / 未找到结点 cout 未找到 !n;void Company:Modify()int No,Duty;char Name20;double Amount,T;coutn* 修改员工 *n; coutID 请输入数字! n; coutNo;/ 查找要修改的结点Person *p1,*p2; p1=Worker; while(p1)if(p1-No=No)break;elsep

32、2=p1; p1=p1-next;/ 修改结点 if(p1!=NULL)/ 若找到结点p1-Output();coutDuty; if(p1-Duty!=Duty) / 若岗位发生变动/ 修改其它数据coutName;if(Duty=3)coutAmount;else if(Duty=4)coutT;/ 创建新员工结点Person *p3;switch(Duty)case 1:p3=new Manager(p1-No,Name,Duty); break;case 2:p3=new SalesManager(p1-No,Name,Duty); break; case 3:p3=new Sales

33、(p1-No,Name,Duty,Amount); break; case 4:p3=new Technician(p1-No,Name,Duty,T); break;/ 员工结点替换到链表p3-next=p1-next;if(p1=Worker) / 若要替换的结点是第一个结点 Worker=p3;else / 若要删除的结点是后续结点p2-next=p3;/ 删除原来的员工结点delete p1;else / 若岗位没有变动coutp1-Name;if(Duty=3)(Sales(TechniciancoutAmount; *)p1)-SetAmount(Amount);else if(D

34、uty=4)coutT; *)p1)-SetT(T);cout 修改成功 !n;else / 未找到结点cout 未找到 !n;void Company:Query()coutDuty=3)sum+=(Sales *)p)-GetAmount(); p=p-next;p=Worker;double sum2=0; / 工资总和 while(p) if(p-Duty=2)(SalesManager *)p)-SetAmount(sum); p-Output();sum2+=p-Earning;p=p-next;cout 本月盈利 :sum*0.20-sum2endl;cout( 按照 20利润计

35、算 )n;void Company:Set()coutn* 设置基础数据 *n;cout 经理固定月薪 ManagerSalaryManagerSalary;cout 销售经理固定月薪 SalesManagerSalarySalesManagerSalary;cout 销售经理提成 SalesManagerPercentSalesManagerPercent;cout 销售人员提成 SalesPercentSalesPercent;cout 技术人员小时工资 WagePerHourWagePerHour;cout=IDID;void Company:Save() / 数据存盘 ( 包括基础数据

36、,人员数据 ), 均采用文本文 件ofstream fPerson,fBase;char c;coutc;if(toupper(c)!=Y)return;/ 保存人员编号、姓名、岗位 fPerson.open(person.txt,ios:out);Person *p=Worker;while(p) fPersonNotNametDutyt;cout 人员编号 t 姓名 t 岗位 tendl;/ 既保存 在文档中也显示在运行界面中coutNottNametDutytDuty=3)fPersonGetAmount()t; coutGetAmount()tDuty=4)fPersonGetT()t

37、;coutGetT()tendl;fPersonnext;fPerson.close();/ 保存基础数据 fBase.open(base.txt,ios:out); cout 基础数据显示: endl;/ 基础数据既保存在文档中也显示在屏幕上 fBase 经理固定月薪 tManagerSalaryendl; cout 经理固定月薪 tManagerSalaryendl;fBase 销售经理固定月薪 tSalesManagerSalaryendl;cout 销售经理固定月薪 tSalesManagerSalaryendl;fBase 销售经理提成 tSalesManagerPercentendl;cout 销售经理提成 tSalesManagerPercentendl;fBase 销售人员提成 tSalesPercentendl;cout 销售人员提成 tSalesPercentendl;fBase 技术人员小时工资 tWagePerHourendl;cout 技术人员小时工资 tWagePerHourendl; fBaseIDtIDe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论