C++面向对象程序设计课程设计-公司员工管理系统.doc_第1页
C++面向对象程序设计课程设计-公司员工管理系统.doc_第2页
C++面向对象程序设计课程设计-公司员工管理系统.doc_第3页
C++面向对象程序设计课程设计-公司员工管理系统.doc_第4页
C++面向对象程序设计课程设计-公司员工管理系统.doc_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

数学与计算机学院课程设计说明书课 程 名 称: 面向对象程序设计-课程设计课 程 代 码: 8404101 题 目: 公司员工管理系统 年级/专业/班: 2009级软件工程四班 学 生 姓 名: 学 号: 开 始 时 间: 2011 年 6 月 13 日完 成 时 间: 2011 年 6 月 26 日课程设计成绩:学习态度及平时成绩(30)技术水平与实际能力(20)创新(5)说明书撰写质量(45)总 分(100)指导教师签名: 年 月 日 面向对象程序设计课程设计任务书学院名称: 数学与计算机学院 专业: 软件工程 年级: 2009级 一、设计题目 公司员工管理系统二、主要内容设计公司员工管理系统,具有插入、删除、显示、修改和查询员工信息的功能。三、具体要求(1) 采用双链表结构,用类和对象完成系统设计,设计一个employee类,包含职工号、姓名、性别、部门、职务、工资明细,具有员工信息的插入、删除、显示、修改和查询功能;(2)可通过员工姓名和所在部门进行查询;(3)显示功能中:对链表提供逐屏显示选择而且可以由用户确定每屏显示的数目。 课程设计说明采用运算符重载的方式进行文件存取,这样保存、查询、修改都很方便。四、主要技术路线提示首先根据要解决的问题分析设计类图,抽象出各个类的数据成员和函数成员,然后进行详细编码,在主函数中创建类的对象,调用适当的成员函数或全局函数实现相应的功能。最后要对软件进行测试。五、进度安排共计两周时间,20个机时,建议进度安排如下:1. 选题和需求分析1学时2. 查阅资料(图书、期刊资料或上网查阅相关资料)2学时3. 构造框架(系统总体设计、类层次关系图)3学时4. 编程上机,调试10学时5. 现场验收合格(根据程序提问)1学时6. 书写课程设计报告3学时当然,仅靠课内时间是不够的,希望同学们课外多花时间编程学习。六、完成后应上交的材料设计结束后,每位同学必须上交如下材料:1. 课程设计报告打印稿一份;2. 课程设计报告电子文档及课程设计的程序源代码 刻盘3. 答辩时的提问及答案记录一份。七、推荐参考资料1郑莉等 编著. C+程序设计语言(第三版).清华大学出版社,2005.06北京2. 陈清华 朱红主编. Visual C+课程设计案例精选与编程指导.东南大学出版社,2003.06,南京3. 刘振安等编著. C+程序设计课程设计.机械工业出版社,2004.08,北京4. 朱立华等编著. 面向对象程设计及C+.人民邮电出版社,2008.02,北京指导教师 签名日期 年 月 日系 主 任 审核日期 年 月 日目 录1 引 言11.1 问题的体出11.2 国内外研究的现状11.3 任务与分析22 需求分析22.1 功能分析22.1.1 插入功能22.1.2 删除功能22.1.3 显示功能22.1.4 修改功能22.1.5 查询功能32.2 需求分析规格说明书33 程序运行平台34 总体设计34.1 结构框图34.2 程序中类的说明44.3 抽象数据定义44.4 功能模块划分45 详细设计55.1 数据类型定义55.2 主要模块设计65.2.1 模块1 插入模块设计65.2.2 模块2 删除模块设计65.2.3 模块3 显示模块设计75.2.4 模块4 修改模块设计85.2.5 模块5 查询模块设计96 系统测试106.1 测试用例106.2 测试结果117 总 结15参 考 文 献16摘 要 在当今社会,互联网空间的发展,给人们的工作和生活带来了极大的便利和高效,信息化,电子化已经成为节约运营成本,提高工作效率的首选。当前大量企业的员工管理尚处于手工作业阶段,不但效率低下,还常常因为管理的不慎而出现纰漏。因此部分企业需求,设计员工信息管理系统,以帮助企业达到员工管理办公自动化、节约管理成本、提高企业工作效率的目的。员工信息管理系统主要对员工的信息以及跟人事相关的工作流程进行集中管理。使用C+编写操作程序,完成数据输入、修改、存储、调用查询等功能。 员工信息管理系统是事业单位科学、全面、高效进行人事管理的系统,参考大量中国人力资源管理理论,根植于国内管理的实际情况,实用而科学。内容包括机构的建立和维护,人员信息的录入和输出,工资的调整和输出等功能。在操作上集输入、维护、查询、统计、输出等处理为一体,简便灵活,自动化功能强大。分析了当前的形势,利用C+面向对象程序设计语言采用双链的数据结构编程实现了该公司员工管理系统,该系统具有人员信息的添加、删除、查找、修改和显示等功能。关键词:公司员工管理系统;计算机; 输入;修改;查询;管理 ;双链1 引 言1.1 问题的体出在现代化的企业管理中,人事管理系统有着十分重要的作用,然而,用大型软件系统来于小型的企事业单位,不啻于“杀鸡用牛刀”,因此小型的的软件对于这种单位自然有十分重要作用。某小型企业出于这种目的制作了这个员工管理系统。1.2 国内外研究的现状目前,在国内,人事信息管理系统从科学的人事信息管理角度出发,从企业的人事信息的规划开始,一般包括了员工基础信息,培训信息,技能信息,绩效评定,调动信息,往往经历,工资管理等,并以一种共享的、兼容的、相通的、便于访问和查询的方式存储到共通的数据库中,从而形成一个统一管理企业的人事信息的平台,及时且全面的收集员工的调动信息可加强信息分析系统的灵活性,减少人事信息的管理系统的复杂性和重复性,是人事管理人员的工作负担大大减轻,将更多的精力投入到企业人事的规划,统筹,及一些更具战略意义的工作中,提高了整个人事管理及企业运营的效率。从全局来看,人事信息管理系统会将每个企业员工从招聘到离职期间的所有历史信息全部记录下来,其中包括了员工在职期间的调动信息,绩效评定和工资信息等等。当今计算机的高速发展,使人事信息管理模式在软硬件的先进技术下不断发展,促使了人事信息管理系统的诞生,将其与企业自身管理模式相结合,通过共享的数据库共享,员工可自主的处理数据,达到共享服务的目的,有效降低企业的管理成本,提高其运营效率,简化操作管理工序。整个人事信息管理系统着重于组织结构和企业员工信息两大部分,能够让企业管理的部门快速了解及操作信息,便于及时规划及运作,形成一个有效管理的运作体系,其中包括了企业组织到员工,再到劳动和薪酬等等各个部分,能迅速且只管的反映人事信息的情况,为企业的人事管理的决策层提供有效及时的技术支持。1.3 任务与分析采用双链的数据结构设计公司员工管理系统,该系统实现对公司人员按姓名或者编号显示、查找、增加、删除和保存各类人员信息的操作。使用高效的,快捷的,方便的职工信息管理。能按姓名或者编号显示、查找、增加、删除和保存各类人员的信息。2 需求分析2.1 功能分析 插入功能:DLink InsertNode(DLink Head) 显示功能:void Print( ) 删除功能:void Delete() 修改功能:void Amend( ) 查询功能:void Query( )2.1.1 插入功能函数原型:DLink InsertNode(DLink Head)说 明:添加一个职员的基本信息,包括职工号,姓名,性别,所在部门,职务,薪水。2.1.2 删除功能函数原型:void Delete()说 明:能够对一个职员的信息进行删除,按职工号+姓名进行删除。2.1.3 显示功能函数原型:void Print( )说 明:输出显示满足条件的或者全部的职工信息,包括职工号,姓名,性别,所在部门,职务,工资明细等。2.1.4 修改功能函数原型:void Amend( )说 明:对满足条件的职员的信息进行修改,可以修改职工所在部门、职务、工资。2.1.5 查询功能函数原型:void Query( )说 明:根据你键入的职员姓名,显示其详细信息!2.2 需求分析规格说明书这是一个简单的、小型的公司员工信息管理系统,它可以实现职工信息的录入,删除,查询,以及对已有信息的修改等功能;该系统使用了文件操作来保存数据,可以将数据永久性的保存在计算机上。3 程序运行平台程序运行的平台是基于Windows操作系统的VC+6.0,该程序在此平台上测试通过,能正常运行。4 总体设计4.1 结构框图图 1 CEMS结构框图4.2 程序中类的说明职工类说明:class employeeprivate:Node data; / 结构体类型的数据成员public:friend ostream & operator(istream & stream,DLink p); /友元重载输入流运算符employee(); / 构造函数DLink CreateLink(); / 创建链表DLink InsertNode(DLink Head); / 插入一个结点;4.3 抽象数据定义ADT CEMS数据对象:职工信息;基本操作:DLink InsertNode(DLink Head);-插入职工信息void Print()-显示职工信息void Delete()-删除职工信息void Amend()-修改职工信息void Query()-查询职工信息void SetWage(DLink p)-设置明细工资ADT;4.4 功能模块划分图 2 CEMS功能模块划分图5 详细设计5.1 数据类型定义/ 工资明细结构体typedef struct WAGEfloat Base_Wage; / 基本工资 float Merit_Wage; / 绩效工资float Sum_Wage; / 总工资WAGE; / 包括职工姓名、职工号的工资记录typedef struct Emplo_Wagechar id10; / 职工编号char name10; / 职工姓名WAGE data; / 工资Emplo_Wage; typedef struct Nodechar E_id10; /职工号char E_name10; /姓名char E_sex3;/性别char E_dep20;/部门char E_job20;/职务float E_wage;/工资struct Node *prior; /前驱指针struct Node *next; /后继指针Node,*DLink;/ 工资大于1000的员工,超过部门需要按税率交税float Tax_Rate1=0.05f; / 3000 以下float Tax_Rate2=0.1f; / 3000-8000float Tax_Rate3=0.15f; / 8000 以上void SetWage(DLink p);/ 职工类class employeeNode data; / 结构体类型的数据成员public:friend ostream & operator(istream & stream,DLink p); /友元重载输入流运算符employee(); / 构造函数DLink CreateLink(); / 创建链表DLink InsertNode(DLink Head); / 插入一个结点;5.2 主要模块设计5.2.1 模块1 插入模块设计模块算法:通过前插法插入结点/插入结点DLink employee:InsertNode(DLink Head)DLink p;ofstream file(EmployeeInfo.txt,ios:app); / 打开文件if(!file) coutCannot open the file!n; return 0; p=new Node;cout请输入员工信息:n;coutp-E_id;while(strcmp(p-E_id,00) /循环输入,以“00”结束输入cinp;p-prior=Head;p-next=Head-next;if(Head-next!=NULL) /如果不是空链Head-next-prior=p;Head-next=p;file.write(char *)p,NUM);p=new Node;coutPlease input employees information:n;coutp-E_id;file.close(); /关闭文件printf(录入完毕.n);return Head;5.2.2 模块2 删除模块设计模块算法:/删除函数void Delete()char id10; /存放输入的职工号char name10; /存放输入的职工姓名int count1=0,count2=0; /count1-总的记录数,count2-删除记录以后的总记录数DLink p;p=new Node;ifstream file(EmployeeInfo.txt);if(!file) coutCannot open the file!n; return; ofstream newfile(NewEmployeeInfo.txt);if(!newfile) coutCannot open the file!n; return; coutid;coutname;while(!file.eof()file.read(char *)p,NUM);count1+;if(file.fail()break;if(strcmp(p-E_name,name)|strcmp(p-E_id,id)newfile.write(char *)p,NUM);count2+;file.close(); /关闭文件newfile.close(); /关闭文件remove(EmployeeInfo.txt); / 删除原来的EmployeeInfo.txtrename(NewEmployeeInfo.txt,EmployeeInfo.txt); / 重命名if(count1=count2)printf(没有这个记录!n);elseprintf(删除成功!n);5.2.3 模块3 显示模块设计模块算法:/输出void Print()int n,count=0; /n输入的每屏显示的记录数,count计数DLink p;ifstream file(EmployeeInfo.txt); / 打开文件if(!file) coutCannot open the file!n; return; p=new Node;coutn;system(cls); /清屏Print_Format(); /输出字段名while(!file.eof()file.read(char *)p,NUM);if(file.fail()break;if(n=count) /控制每一屏显示的记录条数system(pause); /暂停system(cls); /清屏count=0; /计数器清零Print_Format(); coutp;count+;5.2.4 模块4 修改模块设计模块算法:/修改函数void Amend()int n; /用于选择修改选项char id10; /存放输入的需要修改信息的职工号DLink p;p=new Node;fstream file;file.open(EmployeeInfo.txt,ios:in|ios:out); / 以读写方式打开if(!file) coutCannot open the file!n; return; coutid;while(!file.eof()file.read(char *)p,NUM);if(file.fail()break;if(!strcmp(p-E_id,id)break;if(file.eof() printf(没有这个职工号!n);return; cout可以修改的项目有:1-部门 2-职务 3-工资n;coutn;if(n=0) / 修改所在部门、职务、工资coutp-E_dep;coutp-E_job;SetWage(p);else if(n=1) / 修改所在部门coutp-E_dep;else if(n=2) / 修改职务coutp-E_job;else if(n=3) / 修改工资SetWage(p);else printf(输入错误!n);file.seekp(-1*NUM,ios:cur); /写指针回跳一条记录,以更新记录file.write(char *)p,NUM); /写入更新后的记录if(n=0|n=1|n=2|n=3)printf(修改成功!n); /操作提示file.close(); /关闭文件5.2.5 模块5 查询模块设计模块算法:/查询函数void Query()char Query_Value20; /存放输入的需要查询的姓名或部门名称int flag=0,n; /是否查询到的标志DLink p;p=new Node;ifstream file(EmployeeInfo.txt); /打开文件if(!file) coutCannot open the file!n; return; cout通过哪种方式查询:endl;coutt1-姓名 2-所在部门endl;coutn;if(n=1)coutQuery_Value;else if(n=2)coutQuery_Value;else cout输入错误!E_name,Query_Value) Print_Format(); coutE_dep,Query_Value) Print_Format(); coutp; flag=1; if(flag=0)printf(查询失败,没有相应记录!n);file.close(); /关闭文件6 系统测试6.1 测试用例职工号姓名性别所在部门职务基本工资绩效工资总工资001AAF部门1职务120005002425002BBM部门2职务230005003450003CCF部门3职务340005004350004DDM部门4职务450005005250005EEF部门5职务580005008425表1 测试用例表 6.2 测试结果图3 系统欢迎界面截图图4 主菜单界面截图图5 插入职工信息截图图6 显示职工信息截图图7 删除职工信息截图图8 删除后的职工信息截图图9 修改职工信息截图图10 修改后的职工信息截图图11 按姓名查询截图图12 按职工所在部门查询截图图 13 职工工资明细7 总 结这次课程设计所设计的公司员工管理系统(CEMS)是一个小型的人事信息管理系统,该系统实现了职工信息的添加、删除、修改、显示、查询等功能,并且运用了文件操作技术,可以实现数据的永久性保存。通过这次课程设计,我拓宽了知识面,锻炼了能力,综合素质得到较大提高。安排课程设计的基本目的,在于通过理论与实际的结合、人与人的沟通,进一步提高思想觉悟。尤其是观察、分析和解决问题的实际工作能力,以便培养成为能够主动适应社会主义现代化建设需要的高素质的复合型人才。作为整个学习体系的有机组成部分,课程设计虽然安排在两周进行,但并不具有绝对独立的意义。它的一个重要功能,在于运用学习成果,检验学习成果。运用学习成果,把课堂上学到的系统化的理论知识,尝试性地应用于实际设计工作,并从理论的高度对设计工作的现代化提出一些有针对性的建议和设想。检验学习成果,看一看课堂学习与实际工作到底有多大距离,并通过综合分析,找出学习中存在的不足,以便为完善学习计划,改变学习内容与方法提供实践依据。对我们计算机专业的本科生来说,实际能力的培养至关重要,而这种实际能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践。这也是一次预演和准备毕业设计工作。通过课程设计,让我们找出自身状况与实际需要的差距,并在以后的学习期间及时补充相关知识,为求职与正式工作做好充分的知识、能力准备,从而缩短从校园走向社会的心理转型期。课程设计促进了我系人才培养计划的完善和课程设置的调整。近年来,我系为适应学生的实践需要陆续增设与调整了一系列课程,受到同学的欢迎,其中这次的设计很受同学们的喜欢。课程设计达到了专业学习的预期目的。在一个星期的课程设计之后,我们普遍感到不仅实际动手能力有所提高,更重要的是通过对软件开发流程的了解,进一步激发了我们对专业知识的兴趣,并能够结合实际存在的问题在专业领域内进行更深入的学习参 考 文 献1 李强,贾云霞编著. Visual C+项目开发实践. 北京:中国铁道出版社,2003 2 Islamabad. Software tools for forgery detectionJ. Business line.2001. (5).3 郑莉等编著. C+程序设计语言(第三版). 北京:清华大学出版社,20054 陈清华 朱红主编. Visual C+课程设计案例精选与编程指导. 南京:东南大学出版社,20035 刘振安等编著. C+程序设计课程设计. 北京:机械工业出版社,2004 6 朱立华等编著. 面向对象程设计及C+.北京:人民邮电出版社,2008附录:源代码:/公司员工管理系统CEMS#include /文件操作头文件#include /包含system()等函数的头文件#include /字符串处理头文件#include /输入输出流重载需要的头文件#include / 工资明细结构体typedef struct WAGEfloat Base_Wage; / 基本工资 float Merit_Wage; / 绩效工资float Sum_Wage; / 总工资WAGE; / 包括职工姓名、职工号的工资记录typedef struct Emplo_Wagechar id10; / 职工编号char name10; / 职工姓名WAGE data; / 工资Emplo_Wage; typedef struct Nodechar E_id10; /职工号char E_name10; /姓名char E_sex3;/性别char E_dep20;/部门char E_job20;/职务float E_wage;/工资struct Node *prior; /前驱指针struct Node *next; /后继指针Node,*DLink;/ 工资大于1000的员工,超过部门需要按税率交税float Tax_Rate1=0.05f; / 3000 以下float Tax_Rate2=0.1f; / 3000-8000float Tax_Rate3=0.15f; / 8000 以上void SetWage(DLink p);/ 职工类class employeeprivate:Node data; / 结构体类型的数据成员public:friend ostream & operator(istream & stream,DLink p); /友元重载输入流运算符employee(); / 构造函数DLink CreateLink(); / 创建链表DLink InsertNode(DLink Head); / 插入一个结点;/ 全局常量,一个结点的大小const int NUM=sizeof(Node);/ 重载输出流运算符ostream & operator(ostream & stream,const DLink p)streamsetiosflags(ios:left)setw(10)E_idsetiosflags(ios:left)setw(10)E_namesetiosflags(ios:left)setw(7)E_sexsetiosflags(ios:left)setw(15)E_depsetiosflags(ios:left)setw(15)E_jobsetiosflags(ios:left)setw(8)E_wage(istream & stream,DLink p)coutp-E_name;coutp-E_sex;coutp-E_dep;coutp-E_job;SetWage(p); /输入工资coutprior=NULL;Head-next=NULL;return Head;/插入结点DLink employee:InsertNode(DLink Head)DLink p;ofstream file(EmployeeInfo.txt,ios:app); / 打开文件if(!file) coutCannot open the file!n; return 0; p=new Node;cout请输入员工信息:n;coutp-E_id;while(strcmp(p-E_id,00) /循环输入,以“00”结束输入cinp;p-prior=Head;p-next=Head-next;if(Head-next!=NULL) /如果不是空链Head-next-prior=p;Head-next=p;file.write(char *)p,NUM);p=new Node;cout请输入员工信息:n;coutp-E_id;file.close(); /关闭文件printf(录入完毕.n);return Head;/输出格式void Print_Format()coutsetiosflags(ios:left)setw(10)职工号setiosflags(ios:left)setw(10)姓名setiosflags(ios:left)setw(7)性别setiosflags(ios:left)setw(15)所在部门setiosflags(ios:left)setw(15)职务setiosflags(ios:left)setw(8)工资endl;/设置工资税率void SetTRate()docout请输入税率:;cinTax_Rate1;while(Tax_Rate11|Tax_Rate10);docout请输入税率:;cinTax_Rate2;while(Tax_Rate21|Tax_Rate20);docout请输入税率:;cinTax_Rate3;while(Tax_Rate31|Tax_Rate30);/设置一个员工的明细工资void SetWage(DLink p)/int flag=0;float sum;Emplo_Wage *s;s = new Emplo_Wage;/q = new Emplo_Wage;fstream file;file.open(Employee_Wage_Info.txt,ios:app);if(!file) cout打开工资文件失败!endl; return; couts-data.Base_Wage; / 设置基本工资couts-data.Merit_Wage; / 设置绩效工资sum=s-data.Base_Wage + s-data.Merit_Wage;if(sumdata.Sum_Wage=sum;else if(sumdata.Sum_Wage=(sum-1000) * (1-Tax_Rate1)+1000;else if(sumdata.Sum_Wage=(sum-3000) * (1-Tax_Rate2)+3000;elses-data.Sum_Wage=(sum-8000) * (1-Tax_Rate3)+8000;p-E_wage=s-data.Sum_Wage; / 总工资strcpy(s-id , p-E_id);strcpy(s-name , p-E_name);file.write(char *)s,sizeof(Emplo_Wage); / 写入文件file.close();/输出void Print()int n,count=0; /n输入的每屏显示的记录数,count计数DLink p;ifstream file(EmployeeInfo.txt); / 打开文件if(!file) coutCannot open the file!n; retu

温馨提示

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

评论

0/150

提交评论