1、目录2010 2011学年第一学期- 1 -1概述- 3 -1.1基本功能- 3 -1.2拓展功能- 3 -2课题分析- 3 -2.1类的设计- 3 -2.2类的实现- 4 -2.2.1class employee- 4 -2.2.2class technician- 5 -2.2.3class salesman- 6 -2.2.4class secretary- 6 -2.2.5class manager- 7 -2.2.6class techmanager- 7 -2.2.7clasee salesmanager- 8 -3详细设计说明- 9 -3.1程序主界面- 9 -3.2总体设计方案
2、- 9 -3.3程序描述- 9 -3.4各菜单功能介绍- 10 -3.4.1添加员工信息- 10 -3.4.2添加员工工资- 10 -3.4.3保存员工信息- 11 -3.4.4保存员工信息和工资- 12 -3.4.5读入员工信息- 12 -3.4.6读取员工信息和工资- 13 -3.4.7查询单个员工信息工资- 13 -3.4.8按职务查询员工信息工资- 14 -3.4.9查询所有员工信息工资- 14 -3.4.10退出- 15 -4程序测试- 15 -4.1.1发现并解决的bug:- 15 -4.1.2暂时没有解决的问题:- 16 -4.1.3程序测试信息:- 16 -5课程设计总结- 3
3、0 -6软件使用说明- 30 -7附录(参考文献,原代码:)- 30 -7.1.1参考文献- 30 -7.1.2原代码- 31 -1 概述1.1 基本功能本程序的基本功能有:1. 添加员工的基本信息,如名字,编号,职位。2. 添加员工的工资,并自动根据员工的职位计算工资。3. 存档员工的基本信息。4. 存档员工当月的基本信息和工资。1.2 拓展功能本程序的拓展功能有:1. 查询单个员工的基本信息和当月工资。2. 根据职位显示该职位下所有员工的基本信息和当月工资。3. 查询所有员工的基本信息和当月工资。4. 从文件中读入员工的基本信息。5. 从文件中读入员工的基本信息和当月工资2 课题分析2.1
4、 类的设计从用户需求中,可以发现5种类型的职员都可以分别设计为一个类。首先,他们都属于雇员,因此可以设计一个基类employee(雇员),然后从中派生出technician(技术人员)类,salesman(销售人员)类、secretary(文秘)类。对于技术经理和销售经理来说,他们都属于经理,所以设计时可以从employee类中派生出一个manager(经理)类作为techmanager(技术经理)和salesman(销售经理)类的父类。而经理类本身并不对应实际的员工类型,由于技术经理有技术人员和经理的双重特点,因此techmanager类同时继承technician类和manger类;销售经
5、理有销售人员和经理的双重特点,因此salesmanager类同时继承salesman类和manager类。2.2 类的实现2.2.1 class employee2.2.1.1 类型基类2.2.1.2 声明class employeeprotected:string number;string name;int status;int month;double salary;public:employee();int info(string num,string na,int stat);bool search(string infom);virtual int countSalary();in
6、t recordInfo();int recordSalary();int getStatus()return status;string getNumber()return number;void setInfo(string num,string na);void setInfo(string num,string na,int stat);void setInfo(string num,string na,int mo,double sal);void setMonth(int mon)month=mon;void setStatus(int stat)status=stat;void
7、show(); ;2.2.1.3 成员函数说明成员函数说明employee()默认构造函数,执行格式化操作int info(string num,string na,int stat)将获得的编号姓名和职位存入protected成员bool search(string infom)搜索信息,如果找到返回1,找不到返回0virtual int countSalary()虚函数,用于处理动态的工资计算方法int recordInfo()将职工基本信息存入文件int recordSalary()将职工基本信息和当月工资存入文件int getStatus()获取该职员的职位string getNumb
8、er()获取该职员的编号void setInfo(string num,string na)将名字编号存入portected成员void setInfo(string num,string na,int stat)将名字编号职位存入portected成员void setInfo(string num,string na,int mo,double sal)将名字编号职位工资存入portected成员void setMonth(int mon)将月份存入portected成员void setStatus(int stat)将职位存入portected成员void show()显示该职工的所有信息
9、2.2.2 class technician2.2.2.1 类型派生类:从employee中虚拟派生2.2.2.2 声明class technician:virtual public employeeprotected:int workHour;float hourlySalary;public:technician();int countSalary();2.2.2.3 成员函数说明成员函数说明technician()默认构造函数,执行格式化操作int countSalary()计算工资函数2.2.3 class salesman2.2.3.1 类型派生类:从employee中虚拟派生2.2
10、.3.2 声明class salesman:virtual public employeeprotected:float salesum;double getRate;public:salesman();int countSalary();2.2.3.3 成员函数说明成员函数说明salesman()默认构造函数,执行格式化操作int countSalary()计算工资函数2.2.4 class secretary2.2.4.1 类型派生类:从employee中虚拟派生2.2.4.2 声明class secretary:virtual public employeeprivate:float f
11、ixedSalary;float bonus;public:secretary();int countSalary();2.2.4.3 成员函数说明成员函数说明secretary()默认构造函数,执行格式化操作int countSalary()计算工资函数2.2.5 class manager2.2.5.1 类型派生类:从employee中虚拟派生2.2.5.2 声明class manager:virtual public employeeprotected:float fixedSalary;public:manager();int countSalary();2.2.5.3 成员函数说明成
12、员函数说明manager()默认构造函数,执行格式化操作int countSalary()计算工资函数2.2.6 class techmanager2.2.6.1 类型派生类:从technician和manager中派生2.2.6.2 声明class techmanager:public manager,public technicianprivate:float gradeBonus;int grade;public:techmanager();int countSalary();2.2.6.3 成员函数说明成员函数说明techmanager()默认构造函数,执行格式化操作int count
13、Salary()计算工资函数2.2.7 clasee salesmanager2.2.7.1 类型派生类:从salesman和manager中派生2.2.7.2 声明class salesmanager:public manager,public salesmanprivate:float money;double rate;public:salesmanager();int countSalary();2.2.7.3 成员函数说明成员函数说明technician()默认构造函数,执行格式化操作int countSalary()计算工资函数3 详细设计说明3.1 程序主界面3.2 总体设计方案
14、本系统首先设计出了主函数,然后根据去要实现的功能分别设计了添加,保存,读取,查询的功能。在显示的函数设计过程中首先运用了文件的读取等必要的知识通过把文件的内容读取到内存然后打印出来。查询是用一个字符串对比的方法找出用户要查找的人,然后打印出来。添加则是通过将学生信息存入类中从而实现添加功能。3.3 程序描述本程序为职工工资管理系统的设计,采用的是类的相关知识点进行操作,拥有添加员工信息,添加员工工资,保存员工信息,保存员工工资,读取员工信息,读取员工信息工资,查询等功能。3.4 各菜单功能介绍3.4.1 添加员工信息3.4.2 添加员工工资3.4.3 保存员工信息3.4.4 保存员工信息和工资
15、3.4.5 读入员工信息3.4.6 读取员工信息和工资3.4.7 查询单个员工信息工资3.4.8 按职务查询员工信息工资3.4.9 查询所有员工信息工资3.4.10 退出4 程序测试在程序初步完成之后,进行了一系列的程序调试,调试中出现了很多的问题,针对这些问题进一一解决。4.1.1 发现并解决的bug:1. 输入编号后若输入的为字符,则程序奔溃(通过将编号设定成string 格式后解决)2. 添加信息时,若已经存在相同的编号则不提示(通过增加查询是否有相同编号解决)3. 输入职位后若输入的为字符,则程序奔溃(通过使用cin.good函数解决)4. 菜单栏输入数字进入相应位置时,若输入字符或输
16、入多个数字出现奔溃(通过将choice定义为string格式解决)5. 读入员工信息后,原来输入的员工的工资仍保存于其中(通过读入数据前清空工资解决)6. 读入员工信息菜单没有提示信息,按入后如果之前有内容将被覆盖(通过添加提示信息提示用户解决)7. 读入员工信息和工资菜单没有提示信息,按入后如果之前有内容将被覆盖(通过添加提示信息提示用户解决)8. 添加编号时,如果编号为字符也会被存入(通过判断输入的编号是否存在字符解决)9. 添加编号时,如果编号为1个数字也会被存入(通过限定编号为4位解决)10. 添加工资时,若输入为字符则程序奔溃(通过使用cin.good函数解决)11. 技术人员每月工
17、作时间超过755个小时也会存入(通过限定工作时间小雨755个小时解决)12. 添加技术经理等级时,若输入为字符则程序奔溃(通过使用cin.good函数解决)13. 添加技术经理等级时,若输入内容不在13之间也会存入(通过限定范围解决)14. 退出时,若有未保存的内容,无提示直接退出(通过判断是否存在未保存的内容,若存在则提示是否需要保存解决)15. 若在菜单中输入错误5次自动退出时,如果有未保存的内容也会自动退出(通过判断是否存在未保存的内容,若存在则提示是否需要保存解决)16. 输入月份是,0也可输入 (通过限定范围解决)17. 读取文件时,如果文件不存在则直接奔溃(通过添加判断是否存在文件
18、解决)4.1.2 暂时没有解决的问题:1. 程序缺少删除职工信息的功能2. 程序缺少对编号排序的功能3. 程序缺少修改职工信息的功能4. 主菜单仍需要美化5. 程序无法自定义储存路径和读入路径6. 销售经理的工资计算仍需要手动输入,无法通过所管理的销售人员的工资自动计算4.1.3 程序测试信息:1. 欢迎界面2. 输入月份界面3. 主菜单界面4. 添加员工信息5. 添加员工工资6. 保存员工信息7. 保存员工信息工资8. 读取员工信息9. 读取员工信息工资10. 查询单个员工信息工资11. 按职务查询员工信息和工资12. 查询所有员工信息工资13. 主菜单按键错误14. 主菜单按键错误达到5次
19、退出15. 输入编号出错信息16. 输入职位错误信息17. 添加员工工资已经在提示信息18. 添加员工工资错误信息19. 读取员工信息提示信息20. 读取员工信息和工资提示信息20. 查询单个员工信息工资没有找到提示21. 按职务查询员工信息工资不存在提示22. 查询所有员工信息工资不存在提示23. 退出时提示保存界面24.yes or no 输入错误提示5 课程设计总结通过1周的学习,我进一步掌握了C+语言类、以及封装知识的用法。我认为一个好的程序不仅是在设计时能够尽量简洁化、易懂化,并且还需要健壮,不能因为一点小错误而导致整个程序出错,并且编写程序时初期构想的思路非常重要,有一个好的思路,
20、才能编出一个好的程序。另外,Debug也是关键的一步,通过Debug会发现程序中很多存在的漏洞,反应出程序的不足之处,而加以改进。综上,我认为这一次课程设计让我体会到了做一个程序应该有的步骤,为我今后的发展埋下了铺垫。6 软件使用说明1. 本程序开始时会提示用户输入您要统计的职工工资的月份,输入月份后进入主菜单2. 如果您第一次使用程序,没有员工信息,则请按1,添加员工信息后按3存入一份只含有员工信息的文本,便于日后计算每月的工资而不用再次输入已有的员工,该文本位于c:info.txt3. 如果您需要添加员工工资,并且已经添加了员工信息或者读入员工信息,在主菜单按2后您可以添加员工的工资信息,
21、添加完成后不要忘了返回主菜单按4将工资信息保存。保存后,保存的工资信息在c:salary.txt 文件中,您可以拷贝到其他地方。4. 如果您需要查询员工的工资,您可以通过按6将员工的信息和工资全部读取后,按79进行查询。在查询过程中,如果发现有错误,也可返回主菜单按2输入员工编号或姓名后更改员工的工资,更改后请不要忘记保存。另外,本程序仅供课程设计使用,所有用于商业目的而造成的损失与本人无关!注:作者信息中R、R为本人英文名7 附录(参考文献,原代码:)7.1.1 参考文献(1)面向对象程序设计 ,郑莉,清华大学出版社, (2)面向对象程序设计C+语言,朱战立等编 西安电子科技大学出版社(3)面向对象程序设计-Visual C+,刘斌等编, 清华大学出版社 (4)面向对象程序设计-C+语言描述, Richard Johnsonbaugh(美)等著,蔡宇辉等译,机械工业出版社, 20037.1.2 原代码下载地址:点击这里下载源代码.忽略此处.- 30 -