1、界面友好,方便管理。其中,普通职工无底薪,业务经理底薪4000加月提成,新增时工资方面只需输入月提成。经理是底薪8000加奖金,新增时工资方面只需输入奖金。3性能描述 (1)数据精确度:精确到整数部分。(2)时间特性:响应时间短,可更新性强,运行速度快。4运行环境:Visual C+6.05条件与限制:装有Windows操作系统的计算机,装有软件Visual C+6.0三任务设计1类的划分:(1) 类1:类名Employee,是职工类。功能是对名字(name)、标记(tag)、编号(no)、工资(salary)的设置等。主要成员函数及功能:char *getname() return name
2、;/获取名字 int gettag() return tag;/获取标记 int getno() return no;/获取编号 int getsalary()return salary;/获取工资 流程图如图3-1. 图3-1 职工类流程图(2) 类2:类名Database,是职工数据类。主要功能是将职工信息从employee.txt读取到read中,对职工信息的读取、增加职工、删除全部、更改查找以及职工信息的显示等。void clear()/删除所有int addemp (int n, int sa,char *na,char*q) /增加职工void disp() /职工信息显示void
3、 Database:empdata()/职工维护流程图如图3-2. 图3-2 职工数据类流程图2类的接口设计:(1)类1:Employee() char *getname() return name; int gettag() return tag; int getno() return no; int getsalary()return salary; void setzw(char q)/设置名字(3) 类2:Database()/将职工信息从employee.txt读取到read中 Employee s; top=-1; fstream file(employee.txt,ios:in)
4、; while (1) file.read(char *)&s,sizeof(s); if (!file) break; top+; readtop=s; file.close(); 3类之间的关系:类2的功能实现是建立在类1的基础之上的,可以说类2是继承了类1,同时类1也包含了类2。class Database int top; Employee readMaxr;四编写代码1问题1(1)问题描述:刚接到任务时无从下手,对功能的实现比较乱。(2)解决办法:提前设计程序流程图,理清设计思路和功能实现方法。2问题2 (1)问题描述:编写程序的动手能力差,没有自定义析构函数。 (2)解决办法:在程
5、序中补充自定义了析构函数Database()(将read中的信息读如到employee.txt中)。3.问题3所有语句输出显示成一排,没有加换行符。在程序中必要的语句后加换行符,使程序输出更加友好、整洁。4.问题4在编写程序时未加注释,对查错和阅读带来很多不便。将程序语句后写上注释,方便自己和他人阅读查错。五程序运行1. 程序运行的过程:通过人事管理系统管理职工的信息,方便新增职工,和对职工信息的更改、查找、删除等操作。2类的构造顺序:类1构造后类2才可调用。3错误描述及其解决办法(1)问题1问题描述:程序编译时没有编写退出选项,进入界面后,无“退出”选项。 解决办法:重新修改调试程序,将“退
6、出”选项显示在程序显示窗口。(2)问题2 问题描述:一开始查询职工信息时,输入不存在的职工编号,程序无法响应。在程序中加入if语句,当职工编号不存在时,输出“该职工不存在”。 (3)问题3 问题描述:主界面比较单一,不够友好,输出显示职工信息时不够规范整洁。在程序中的信息显示部分加入边框,使输出信息更加美观、友好。六、感想认识两个星期的课程设计虽然有些疲劳和困倦,但带给我很多的收获。随着课程学习的深入,我感觉到了利用类和对象、继承、封装等一系列知识可以把我们程序中很多繁杂、重复的部分省略掉,还可以解决一些利用面向过程的设计思想无法解决的问题。在课程设计之前,因为有了综合实验的经验与教训,明白了
7、写代码这一步是非常重要的,因为当你把代码输入电脑,并用编译器将其运行,发现通过不了,再来检查找出问题,这是一件非常辛苦的事情,也很浪费时间。于是在课程设计的时候,我花了三天的时间来规划与写代码,将要实现的内容分析清楚,才把代码输入电脑。我觉得写程序,应该先找到该程序中的核心地方,用多种方法来实现该核心,这才可能避免等到发现逻辑上或者编译器不支持上的错误,才来想补救的措施,这样花费时间在想补救措施是很不值得的。 这次的课程设计,真是让我充分的感觉到了要自己设计一个程序是多么的难,以及学习好c+是多么的重要。在这个程序的设计过程中,我清楚的意识到自己的水平有多么的薄弱,课程的知识学得有多么的不扎实
8、。自己上机实际操作总出现了很多问题,调试的时候系统总是在报错,还有很多警告,每增加一个函数就要调试好久,有时候应为少了一个大括号或是分号,导致要找很久很久。虽然系统可以运行,也具有了一些基本的功能,但我意识到了自己有太多的不足。 以后还会有很多的课程设计,一定要吸取这次的教训,把知识学懂学透学精,真正的为我所用,这样走上社会我才能真正的发挥所长,才能成为当今社会需要的人才。七程序代码#include #include #includefstream.h const int Maxr=100; class Employee /职工类 int tag;/删除标记 int no;/职工编号 char
9、 name20; char zw20;/职工姓名 int salary;/职工工资 public: Employee() strcpy(zw,q); void setname(char na)/设置名字 strcpy(name,na); void getsalary(int sa)salary=sa; void delna()tag=1;/删除 void addemp(int n,int sa,char *na,char *q)/增加 tag=0;no=n;salary=sa;strcpy(name,na);strcpy(zw,q); void disp()/显示职工信息 coutsetw(1
10、0)nonamesalaryzwendl;= ; class Database/职工数据类 int top; Employee readMaxr; Database()/将职工信息从employee.txt读取到read中 void clear()/删除所有 int addemp (int n, int sa,char *na,char*q) /增加职工 Employee *p=query(n); if (p=NULL) readtop.addemp(n,sa,na,q); return 1; return 0; Employee *query(int empid) for (int i=0;
11、i=top;i+) if (readi.getno()=empid & readi.gettag()=0) return &readi; return NULL; Employee *query1(char empna20)i+) if (readi.getname()=empna) & readi.gettag()=0) return & void disp() /职工信息显示 readi.disp(); void empdata(); Database() /将read中的信息读如到employee.txt中out); if (readi.gettag()=0) file.write(ch
12、ar *)&readi,sizeof(readi); file.close(); void Database: int choice=1; int m=1; int b=1; char rname20; int empid; int empsa; char q20; Employee *r; while (choice!=0) cout; cinchoice; switch (choice) case 1: coutsetw(50)m; while(m!=0) switch(m) case 1:输入经理编号:empid;输入奖金: empsa;输入经理姓名:rname; addemp(empi
13、d,8000+empsa,rname,经理); break; case 2:输入业务经理编号:输入月提成:输入业务经理姓名: addemp(empid,4000+empsa,rname,业务经理break; case 3:输入职工编号:输入工资:输入职工姓名: addemp(empid,empsa,rname,普通职工 break; break;cinr=query(empid);if (r=NULL)该职工不存在输入新的工资: cin r-getsalary(empsa);请输入新的职务q;setzw(q); addemp(empid,empsa,rname,q); r=query(empid); if (r=NULL) 该读者不存在delna(); case 4: 按编号查找1,并按回车键 n 返回 2,并按回车键 nb; while(b! switch(b)coutdisp();case 2:case 5: disp(); case 6: clear();void main() Database EmpDB; while(choice!*setw(20)*欢迎使用人事管理系统* n 操作 1,并按回车键 n 返回 0,并按回车键 nswitch(choice)case 1:while(1)setw(20);EmpDB.empdata();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1