




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
高级语言程序设计说明书职工信息管理系统 系 别 专业班级 学生姓名 指导教师 注释: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。设置职位基本薪酬; 6。存储职位信息;程序说明:准确性要求高,可靠性要求高,输入控制严格,页面响应时间短,用户界面友好,输出准确,功能强大! 运行环境:windows nt/2000/xp/vista/win7文件说明:程序源代码(职工信息管理系统.cpp); 程序运行文件(职工信息管理系统.exe); 职工信息存储文件(employee.text);参考资料:c+程序设计 谭浩强 编著 清华大学出版社程序结构函数头: / cin , cout , 等函数 /类,对象,等函数定义 / 文本文档的读/写/复制 等函数 主函数:void main () 基类职工类employee派生类:technician技术员类、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.函数头: #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.基类: 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 company; ;先定义一个职工基类,设置了属于保护类的职工基本属性,以及构造函数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 setworkload(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; /新结点指针 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(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构造一个单链表,在if选择结构和while选择结构中添加新的结点,这个新的结点可以输入职工信息和存储信息的地址,再把职工信息添加到职工链表中。其他模块删除函数delete()、修改函数modify()、查询函数query()、载入函数save()和存储函数load()都使用了链表的构造方法。具体内容可以看代码部分。void company:set() /设置基础数据 coutn* 设置基础数据 *n; cout经理的基本工资csalarycsalary; cout销售经理的基本工资apsalaryapsalary; cout=idid; 设置经理和销售经理的基本工资,用于计算这两个职位的工资。 使用说明这是一个关于职工信息管理系统,具有增加、输出、删除、查询、修改、保存、载入数据、计算总支出薪酬等功能,建立了一个含有工号、姓名、性别、工作量等成员的类的变量class employee。系统中已预输入了5个职工的相关数据以及基本薪酬数据,调试是可按“4”键先查看输入的数据记录。调试过程中,可按照有关提示进行相关操作:增加职工数据按“1”键;删除职工数据按“2”键;修改职工数据按“3”键;查询职工数据按“4”键;基础数据设置按“5”键;数据存盘按“6”键;数据装入按“7”键;退出系统按“8”键。总结经过对职工信息管理系统的分析与编写,我得到了很大的收获。自主学习的必要性更是解决问题的基础。这次设计使我重温了以前学过的各科知识,让我对c编程有了更深刻的认识。除了对系统作出正确的分析,实际的调查工作对系统的整体设计有着至关重要的作用。所以在分析系统之前,我花了一些时间在公司的实际管理工作调查上。也因为这样,如何编写代码逐渐变得明朗。每一个功能模块经过调查后后,各个功能逐渐显露出来,然后,反复探讨,验证这项功能是否有存在的必要,是否可以改进得更好。在这样的前提下,最后顺利完成了这份设计。 这次c系统设计作业,提升了我分析问题的能力和思考问题的逻辑能力,更明白实际调研的重要性。从这次设计学到的东西,相信会对我们日后的学习工作起到很大的指导作用代码附录:#include #include #include #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); this-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() return 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=workload*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; double 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 delete(); /删除人员 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() /增加人员 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=new 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; /查找要删除的结点 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 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) case 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 /若要删除的结点是后续结点 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 /未找到结点 cout未找到!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) (manager*)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; 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) femployeegetworkload()t; femployeenext; femployee.close(); /保存基础数据 fbase.open(base.txt,ios:out); fbase经理的基本工资tcsalaryendl; fbase销售经理的基本工资tapsalaryendl; fbaseidtidendl; femployee.close(); coutbufcsalary; /经理的基本工资 fbasebufapsalary; /销售经理的基本工资 fbasebufid; /员工工号fbase.close(); /清除内存人员数据 clear(); /人员数据数据装入 ifstream femployee; employee *p=worker; int no; char name20; int duty; double workload
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年广播媒体后期制作面试模拟题及解析
- 2025年机械设计试题及答案解析
- 2025年心电图师面试高频考点及模拟题
- 机电行业职业知识培训课件
- 2025年国际物流运营管理师资格考试试题及答案解析
- 2025年市政安全操作规范试题含答案
- 2025年机器人包装行业应用面试题
- 2025年宠物克隆师中级考试高频题预测
- 课件不允许录屏的原因
- 2025年高考真题-山东省高考真题地理试卷(含答案)
- 初中七年级数学备课组科研合作计划
- 《人工智能应用基础》 完整课件(共十个模块-上)
- 职业技术学院旅游管理专业《旅行社经营与管理》课程标准
- 奶茶店股份合作合同协议
- 2025-2030中国空气粒子计数器行业市场发展趋势与前景展望战略研究报告
- 立杆方法分类普通电杆的组立系列课件
- 四年级音标试卷及答案
- 学校食堂运营管理职责与分工
- 2025云南师范大学辅导员考试题库
- BEC商务英语(中级)阅读模拟试卷11(共405题)
- 语文课堂教学目标设计“四出发”
评论
0/150
提交评论