职工信息管理系统C++版 程序设计说明书.doc

上传人:laozhun 文档编号:2385488 上传时间:2023-02-17 格式:DOC 页数:27 大小:88KB
返回 下载 相关 举报
职工信息管理系统C++版 程序设计说明书.doc_第1页
第1页 / 共27页
职工信息管理系统C++版 程序设计说明书.doc_第2页
第2页 / 共27页
职工信息管理系统C++版 程序设计说明书.doc_第3页
第3页 / 共27页
职工信息管理系统C++版 程序设计说明书.doc_第4页
第4页 / 共27页
职工信息管理系统C++版 程序设计说明书.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《职工信息管理系统C++版 程序设计说明书.doc》由会员分享,可在线阅读,更多相关《职工信息管理系统C++版 程序设计说明书.doc(27页珍藏版)》请在三一办公上搜索。

1、高级语言程序设计说明书职工信息管理系统 系 别 专业班级 学生姓名 指导教师 注释:2010计算机工程系高级语言程序设计大作业目 录引言 (3)程序结构 (3)程序流程图 (4)程序源程序模块设计说明 (5) 1.函数头 (5)2.主函数 (5)3.基类及继承类 (5)3-1.基类 (5)3-2.继承类 (6)3-3.公司类 (6)程序使用说明 (8)总结 (9)引言程序名称:职工信息管理系统 开发平台:windows 7 Microsoft Visual C+ 6.0主要功能:1。添加职工信息; 2。删除职工信息及薪酬; 3。修改职工信息; 4。查询职工信息及薪酬; 5。设置职位基本薪酬;

2、6。存储职位信息;程序说明:准确性要求高,可靠性要求高,输入控制严格,页面响应时间短,用户界面友好,输出准确,功能强大! 运行环境:Windows NT/2000/XP/VISTA/WIN7文件说明:程序源代码(职工信息管理系统.cpp); 程序运行文件(职工信息管理系统.exe); 职工信息存储文件(Employee.text);参考资料:C+程序设计 谭浩强 编著 清华大学出版社程序结构函数头: / cin , cout , 等函数 /类,对象,等函数定义 / 文本文档的读/写/复制 等函数 主函数:void main () 基类职工类employee派生类:Technician技术员类、

3、Salesman销售员类、Salesmanager销售经理类、Manager经理类、Company公司类。在公司类中定义六个模块功能的实现方法:void Add () /添加 void Delete () /删除 void Modify () /修改 void Query () /查询 void set () /设置 void Save() /载入 void Load() /储存 程序流程图开始定义变量数据处理调用输出函数退出系统YN输入C的值C=1&C=7调用设置函数调用储存函数调用载入函数调用查询函数调用输出函数调用修改函数调用删除函数调用增加函数程序流程图程序源程序模块设计说明1.函数头

4、: #include #include #include #include 调用系统在程序中将要用到的函数。2.主函数:switch(c) case 1: a.Add(); break; case 2: a.Delete();break; case 3: a.Modify();break; case 4: a.Query(); break; case 5: a.Set(); break; case 6: a.Save(); break; case 7: a.Load(); break; 在do-while循环中嵌套switch结构,用来调用构造函数,实现函数模块的功能。3.基类及继承类:3-1

5、.基类: class Employee /职工类 protected: int No; /编号 char Name20; /姓名char Sex10; /性别int Duty; /职位 double Earning; /收入 Employee *next; public: Employee(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 Compan

6、y; ;先定义一个职工基类,设置了属于保护类的职工基本属性,以及构造函数Employee,可以给职工类型继承。3-2.继承类:class Technician:public Employee /技术员类 private: double Workload; /上个月完成工作量 public: Technician(char ID,char *Name,int Duty,double Workload):Employee(ID,Name,Duty) this-Workload=Workload; double GetWorkload() return Workload; void SetWorkl

7、oad(double Amount) this-Workload=Amount; void CalcSalary() Earning=Workload*100; void Output() CalcSalary(); coutNotNamet技术员tttEarningnext; delete Worker; Worker=p; Worker=0; 在公司类中先定义一个职工表Worker用于存储职工信息,然后构造函数中可以构造链表,用于管理职工的信息。析构函数用来释放存储空间,清除链表结点中的信息。模块功能的实现方法:void Company:Add() /增加人员 Employee *p; /

8、新结点指针 int Duty; char Name20;char Sex10; /性别double Workload; coutn* 新增员工 *n; /输入员工信息 coutID; coutDuty; coutName; coutSex;if(Duty!=4) coutWorkload; /创建新员工结点 switch(Duty) case 1:p=new Technician(ID,Name,Duty,Workload); break; case 3:p=new Manager(ID,Name,Duty,Workload); break; case 4:p=new Salesmanager

9、(ID,Name,Duty); break; case 5:p=new Salesman(ID,Name,Duty,Workload); break; p-next=0;构造添加函数Add(),在函数中先定义职工的基本信息和新节点指针,创建新的初始化构造函数,用于添加新的职工信息。职工结点加入链表 :if(Worker) /若已经存在结点 Employee *p2; p2=Worker; while(p2-next) /查找尾结点 p2=p2-next; p2-next=p; /连接 else /若不存在结点(表空) Worker=p; /连接 使用指针p和职工表Worker构造一个单链表,在

10、if选择结构和while选择结构中添加新的结点,这个新的结点可以输入职工信息和存储信息的地址,再把职工信息添加到职工链表中。其他模块删除函数Delete()、修改函数Modify()、查询函数Query()、载入函数Save()和存储函数Load()都使用了链表的构造方法。具体内容可以看代码部分。void Company:Set() /设置基础数据 coutn* 设置基础数据 *n; cout经理的基本工资CSalaryCSalary; cout销售经理的基本工资APSalaryAPSalary; cout=IDID; 设置经理和销售经理的基本工资,用于计算这两个职位的工资。 使用说明这是一个

11、关于职工信息管理系统,具有增加、输出、删除、查询、修改、保存、载入数据、计算总支出薪酬等功能,建立了一个含有工号、姓名、性别、工作量等成员的类的变量class Employee。系统中已预输入了5个职工的相关数据以及基本薪酬数据,调试是可按“4”键先查看输入的数据记录。调试过程中,可按照有关提示进行相关操作:增加职工数据按“1”键;删除职工数据按“2”键;修改职工数据按“3”键;查询职工数据按“4”键;基础数据设置按“5”键;数据存盘按“6”键;数据装入按“7”键;退出系统按“8”键。总结经过对职工信息管理系统的分析与编写,我得到了很大的收获。自主学习的必要性更是解决问题的基础。这次设计使我重

12、温了以前学过的各科知识,让我对C编程有了更深刻的认识。除了对系统作出正确的分析,实际的调查工作对系统的整体设计有着至关重要的作用。所以在分析系统之前,我花了一些时间在公司的实际管理工作调查上。也因为这样,如何编写代码逐渐变得明朗。每一个功能模块经过调查后后,各个功能逐渐显露出来,然后,反复探讨,验证这项功能是否有存在的必要,是否可以改进得更好。在这样的前提下,最后顺利完成了这份设计。 这次C系统设计作业,提升了我分析问题的能力和思考问题的逻辑能力,更明白实际调研的重要性。从这次设计学到的东西,相信会对我们日后的学习工作起到很大的指导作用代码附录:#include #include #inclu

13、de #include using namespace std;/全局数据,对象 double APSalary; double CSalary; int ID; /员工工号 class Employee /员工类 protected: int No; /编号 char Name20; /姓名char Sex10; /性别int Duty; /职位 double Earning; /收入 Employee *next; public: Employee(char ID,char *Name,int Duty) this-Duty=Duty; strcpy(this-Name,Name); th

14、is-No=ID; virtual void CalcSalary()=0; virtual void Output()=0; friend class Company; ; class Technician:public Employee /技术员类 private: double Workload; /上个月完成工作量 public: Technician(char ID,char *Name,int Duty,double Workload):Employee(ID,Name,Duty) this-Workload=Workload; double GetWorkload() retur

15、n Workload; void SetWorkload(double Amount) this-Workload=Amount; void CalcSalary() Earning=Workload*100; void Output() CalcSalary(); coutNotNamet技术员tttEarningWorkload=Workload; double GetWorkload() return Workload; void SetWorkload(double Amount) this-Workload=Amount; void CalcSalary() Earning=Work

16、load*0.04; void Output() CalcSalary(); coutNotNamet销售员tttEarningWorkload=Workload; double GetWorkload() return Workload; void SetWorkload(double Amount) this-Workload=Amount; void CalcSalary() Earning=APSalary+Workload*0.005; void Output() CalcSalary(); coutNotNamet销售经理ttEarningWorkload=Workload; do

17、uble GetWorkload() return Workload; void SetWorkload(double Amount) this-Workload=Amount; void CalcSalary() Earning=CSalary;/固定月薪 void Output() CalcSalary(); coutNotNamet经理tEarningnext; delete Worker; Worker=p; Worker=0; void Find(char Name20);/按姓名查找 void Find(int ID);/按编号查找 void Add(); /增加人员 void D

18、elete(); /删除人员 void Modify(); /修改人员 void Query(); /查询人员 void Set(); /基础数据设置 void Save(); /数据存盘(包括基础数据,人员数据) void Load(); /数据装入(包括基础数据,人员数据) ; void Company:Clear() /清除内存中人员数据(内部使用) Employee* p=Worker; while(p) Worker=p-next; delete p; p=Worker; void Company:Find(char Name20) void Company:Add() /增加人员

19、Employee *p; /新结点指针 int Duty; char Name20;char Sex10; /性别double Workload; coutn* 新增员工 *n; /输入员工信息 coutID; coutDuty; coutName; coutSex;if(Duty!=4) coutWorkload; /创建新员工结点 switch(Duty) case 1:p=new Technician(ID,Name,Duty,Workload); break; case 3:p=new Manager(ID,Name,Duty,Workload); break; case 4:p=ne

20、w Salesmanager(ID,Name,Duty); break; case 5:p=new Salesman(ID,Name,Duty,Workload); break; p-next=0; /员工结点加入链表 if(Worker) /若已经存在结点 Employee *p2; p2=Worker; while(p2-next) /查找尾结点 p2=p2-next; p2-next=p; /连接 else /若不存在结点(表空) Worker=p; /连接 void Company:Delete() /删除人员 int No; coutn* 删除员工 *n; coutNo; /查找要删

21、除的结点 Employee *p1,*p2; p1=Worker; while(p1) if(p1-No=No) break; else p2=p1; p1=p1-next; /删除结点 if(p1!=NULL)/若找到结点,则删除 if(p1=Worker) /若要删除的结点是第一个结点 Worker=p1-next; delete p1; else /若要删除的结点是后续结点 p2-next=p1-next; delete p1; cout找到并删除n; else /未找到结点 cout未找到!n; void Company:Modify()/修改员工 int No,Duty; char

22、Name20; double Workload; coutn* 修改员工 *n; coutNo; /查找要修改的结点 Employee *p1,*p2; p1=Worker; while(p1) if(p1-No=No) break; else p2=p1; p1=p1-next; /修改结点 if(p1!=NULL)/若找到结点 p1-Output(); coutDuty; if(p1-Duty!=Duty) /若职位发生变动 /修改其它数据 coutName; if(Duty!=4) coutWorkload; /创建新员工结点 Employee *p3; switch(Duty) cas

23、e 1:p3=new Technician(p1-No,Name,Duty,Workload); break; case 3:p3=new Manager(p1-No,Name,Duty,Workload); break; case 4:p3=new Salesmanager(p1-No,Name,Duty); break; case 5:p3=new Salesman(p1-No,Name,Duty,Workload); break; /员工结点替换到链表 p3-next=p1-next; if(p1=Worker) /若要替换的结点是第一个结点 Worker=p3; else /若要删除的

24、结点是后续结点 p2-next=p3; /删除原来的员工结点 delete p1; else /若职位没有变动 coutp1-Name; if(Duty=1) coutWorkload; (Technician *)p1)-SetWorkload(Workload); else if(Duty=3) coutWorkload; (Manager *)p1)-SetWorkload(Workload); else if (Duty=5) coutWorkload; (Salesman *)p1)-SetWorkload(Workload); cout修改成功!n; else /未找到结点 cou

25、t未找到!n; void Company:Query()/查询人员 int chet,count(0); coutn* 查询职工信息以及本月销售信息 *n; cout编号t姓名t职位ttt工资(元/月)Output(); sum2+=p-Earning; p=p-next; cout本月实发工资总数:sum2元endl; coutchet; Employee *p4=Worker; while(p4) if(p4-No=chet) if(p4-Duty=1) (Technician*)p4)-Output(); count+; break; else if(p4-Duty=3) (Manage

26、r*)p4)-Output(); count+; break; else if(p4-Duty=4) (Salesmanager*)p4)-Output(); count+; break; else if(p4-Duty=5) (Salesman*)p4)-Output(); count+; break; else p4=p4-next; if(count=0) cout未找到!endl; void Company:Set() /设置基础数据 coutn* 设置基础数据 *n; cout经理的基本工资CSalaryCSalary; cout销售经理的基本工资APSalaryAPSalary;

27、cout=IDID; void Company:Save() /数据存盘(包括基础数据,人员数据),均采用文本文件 ofstream fEmployee,fBase; char c; coutc; if(toupper(c)!=Y)return; /保存人员编号、姓名、职位 fEmployee.open(Employee.txt,ios:out); Employee *p=Worker; while(p) fEmployeeNotNametDutyDuty=1) fEmployeeGetWorkload()Duty=3) fEmployeeGetWorkload()Duty=5) fEmplo

28、yeeGetWorkload()t; fEmployeenext; fEmployee.close(); /保存基础数据 fBase.open(base.txt,ios:out); fBase经理的基本工资tCSalaryendl; fBase销售经理的基本工资tAPSalaryendl; fBaseIDtIDendl; fEmployee.close(); coutbufCSalary; /经理的基本工资 fBasebufAPSalary; /销售经理的基本工资 fBasebufID; /员工工号fBase.close(); /清除内存人员数据 Clear(); /人员数据数据装入 ifst

29、ream fEmployee; Employee *p=Worker; int No; char Name20; int Duty; double Workload; fEmployee.open(Employee.txt,ios:in); /读一条记录 fEmployeeNoNameDuty; if(Duty!=4)fEmployeeWorkload; while(fEmployee.good() /创建员工结点 switch(Duty) case 1:p=new Technician(No,Name,Duty,Workload); break; case 3:p=new Manager(N

30、o,Name,Duty,Workload); break; case 4:p=new Salesmanager(No,Name,Duty); break; case 5:p=new Salesman(No,Name,Duty,Workload); break; p-next=0; /员工结点加入链表 if(Worker) /若已经存在结点 Employee *p2; p2=Worker; while(p2-next) /查找尾结点 p2=p2-next; p2-next=p; /连接 else /若不存在结点(表空) Worker=p; /连接 /读下一条记录 fEmployeeNoNameDuty; if(Duty!=4)fEmployeeWorkload; fEmployee.close(); coutn人员和基础数据已经装入.n; void main() char c; Company a; do coutn* 职工信息管理系统 *n; cout1增加人员n; cout2删除人员n; cout3修改人员n; cout4查询职工信息n; cout5基础数据设置n; cout6数据存盘n; cout7数据装入n; coutc; swi

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号