《面向对象程序设计》课程设计报告_第1页
《面向对象程序设计》课程设计报告_第2页
《面向对象程序设计》课程设计报告_第3页
《面向对象程序设计》课程设计报告_第4页
《面向对象程序设计》课程设计报告_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、面向对象程序设计课程设计报告题目:职工信息管理 ;小型公司工资管理系统 院系:专业班级:学号:学生姓名:小组成员:2011 年 9月6 日一、 引言本题对程序有如下要求:试建立一个类Worker用于描述职工对象,具体要求如下:私有数据成员int id: 职工号。float wage: 工资。char level: 技术等级(A一等,B二等,C三等,NULL无级,其它为无效)公有成员函数缺省构造函数:初始化数据成员为0或NULL值。带参构造函数:用参数初始化数据成员 (需判断参数是否有效)。输出函数void List( ):输出本职工的各项信息。修改函数void Set( ):从键盘输入新的职工

2、号、工资和等级数据,修改相应数据成员的值。接受输入前屏幕上显示提示输入哪些信息。主函数:定义三个不同的worker对象作为测试数据,完成对worker类和程序的测试。每个成员函数至少被调用一次。系统功能介绍: 本程序中定义的Worker类中包含私有数据成员:Id、wage和level,公有成员函数:Worker()、void List( )和 void Set( ),Worker()可以用于参数初始化数据成员,并判断参数的有效性,void List( )可以用于职工信息的输出,void Set( )可以用于输入新的职工信息。此外本程序还可以将输入的技术等级A、B、C等对应的转换成一等、二等、三

3、等,并将输入的职工信息保存到file.txt中,而且在每次输入之前都会有提示信息。 模块设计:主函数进入主显示界面按照提示进行选择 1.添加职工信息 3.保存职工信息 4.退出 2.显示职工信息Press any key to continue 退出系统各个成员函数间关联:worker *input ();进行添加数据操作void show r();进行数据显示操作worker* baocun ();保存新增加的联系人fwrite对file.txt进行保存操作四、结果显示图:五、程序清单:(附主要函数)#include #include #include #include #include #

4、define NULL 0#define LEN sizeof(struct worker)typedef struct worker/定义结构体int num;char name20;char level20;float wage;struct worker * next;worker;struct worker *head=NULL;int n=0;worker *input(worker *p);/函数声明worker *baocun(worker *p);worker *sort(worker *p);void show(worker *p);/*主函数*void main() cha

5、r c;printf(t*n);printf(t * *n);printf(t * *n);printf(t * 欢迎进入 *n);printf(t * 职工信息管理系统 *n);printf(t * *n);printf(t * 按回车键进入系统: *n);printf(t * *n);printf(t * *n);printf(t * *n);printf(t*n); getchar(); do system(cls); printf(t*n); printf(t 欢迎使用 n); printf(t 职工信息管理系统 n); printf(t n); printf(t 1: 添加职工信息

6、n); printf(t 2: 显示职工信息 n); printf(t 3: 保存职工信息 n); printf(t 4: 退 出 n); printf(t n); printf(t 请选择输入选项1234:); do c=getchar(); while(c!=1&c!=2&c!=3&c!=4); getchar(); switch(c) case 1: head=input(head); break; case 2: show(head); break;case 3: baocun(head); break;case 4: exit(0); break; printf(nnnnn按任意键返

7、回主菜单: ); getchar(); system(cls);while(1);/*职工信息输入界面*worker *input(worker *p)struct worker *a;/定义指针n=0;dosystem(cls);a=(worker *)malloc(sizeof(worker);/开辟空间printf(*职工信息输入界面*nnn);printf( 输入录入职工工号为0时退出!n);printf( 请输入录入职工工号:);scanf(%d,&a-num);getchar();if(a-num=0) break;n+;/计算开辟节点数,以便排序printf( 请输入录入职工姓名

8、:);gets(a-name);printf( 请输入录入职工工资:);scanf(%f,&a-wage);getchar();printf( 请输入录入职工等级:);gets(a-level);a-next=NULL;if(head=NULL)head=a;p=head;elsep-next=a;p=a; while(1);return(head);/*职工信息显示界面*void show(worker *p)char c;system(cls);printf(*职工信息显示界面*nn);if(head=NULL)/内存为空printf( 数据库暂为空,是否现在进行数据添加Y/Nn);doc

9、=getchar();while(c!=Y&c!=y&c!=N&c!=n);if(c=Y|c=y)input(head);elsep=head;/输出内存员工信息doprintf(工号:%-12d姓名:%-16s等级:%-12s工资:%-16fn:,p-num,p-name,p-level,p-wage); p=p-next;while(p!=NULL);/*职工信息保存界面*worker* baocun(worker* p1)FILE* fp;/定义文件指针类型worker* p;p=p1;fp=fopen(file.txt,wb);/打开文件if(fp=NULL)printf(can no

10、t open the file);getch();exit(0);while(p!=NULL)if(fwrite(&head,sizeof (struct worker),1,fp)!=1)printf(文件写入错误n);fclose(fp); /*关闭文件*/printf(工号:%-12d姓名:%-16s等级:%-12s工资:%-16fn:,p-num,p-name,p-level,p-wage);p=p-next;fclose(fp);/关闭文件return p;六、程序调试心得体会:制作程序时,开始有些困难上网上搜了一些相近似的例子,然后自己进行模仿,调试,有一些问题解决不了的,就百度了

11、一下,看一下问题出在什么地方,这一个题目稍微简单些,基本上自己百度一下都可以解决问题的。之后对保存文件作了修改。七、参考文献:c+面向对象程序设计(第七版) Walter Savitch著 周靖译 清华大学出版社一、 引言本题对程序有如下要求:(1)公司主要有4类人员:经理、技术员、销售员、销售经理。要求存储这些人的职工号、姓名、月工资、岗位、年龄、性别等信息。 (2)工资的计算方法: A.经理:固定月薪为8000; B.技术员:工作时间*小时工资(100元每小时); C.销售员:销售额*4%提成; D.销售经理:底薪(5000)+所辖部门销售额总额*0.5%; (3)输入数据要求每类人员不能

12、少于4人,并按以下格式输出: 职工号姓名性别年龄岗位工资排名 及某部门经理所辖部门各售货员的业绩及自己的工资表: (4)菜单要求:要有一个菜单,用于选择各项功能,其中 1)数据录入:输入各种数据; 2)数据统计:各销售经理的工资计算及最终按工资进行的冒泡排序; 3)数据打印:打印上述表格; 4)数据备份:把相关数据写入文件; 5) 退出:推出本系统;二、 系统功能介绍:充分利用了类的继承与派生的知识,先定义了一个雇员类Employee,由雇员类公有派生出技术员类Tech,销售员类Seller,经理类Manager,由销售员类Seller,经理类Manager公有派生出销售经理类XManager

13、。把基类都定义为虚基类。通过基类去写的派生类就可以调基类的公有成员。利用for循环把经理数据,技术员数据,销售员数据,销售经理数据输入,利用冒泡排序法把各销售经理的资按升序排列。利用switch进行选择系统进行的工作。在主菜单中进行调用各函数,从而实现系统各功能的运行。 三、 模块设计:主函数进入主显示界面按照提示进行选择数据查询数据备份 退出系统数据输入数据统计数据打印 返回上一级经理数据输入技术员数据输入销售员数据输入销售经理数据输入结束程序四、 各个成员函数间关联:void data_input(); 进行数据输入操作void statistics(); /进行数据统计操作void da

14、ta_print(); 进行数据打印操作void data_find(); 进行数据查询操作void data_save(); 进行数据备份操作ofstream对C+程序设计实习.txt进行操作void save_new();保存新增加的联系人ofstream对C+程序设计实习.txt进行操作void menu(); 显示主菜单四、结果显示图:五、程序清单:#include#include#include#include#includeusing namespace std;/常变量(供修改用):const int n1=2,n2=2,n3=4,n4=2; /*定义公司各类职工人数(方便修改)

15、 (n1:技术员人数;n2:经理人数;n3:销售员人数;n4:销售经理人数 )*/const double m_salary=8000; /经理固定月工资const double hourpay=100; /技术员小时工资const double basicpay=5000; /销售经理的底薪const double s_proportion=4.0/100; /销售员的工资提成比例const double sm_proportion=0.5/100; /销售经理的提成比例/声明部分:void menu(); /主菜单void menu2(); /数据输入二级菜单void menu3(); /

16、数据打印二级菜单void data_input(); /数据输入函数void data_print(); /数据打印void charthead1(); /制作表头1函数,统计销售额void charthead2(); /制作表头2函数,数据打印void chartend(); /制作表尾 void statistics(); /数据统计double sm_salary(); /销售经理工资计算void sm_print(); /销售经理打印数据void data_find(); /数据查询void data_save(); /数据备份ofstream outfile; /打开磁盘文件流对象s

17、tring f_name; /全局变量(查询用)/定义类:class Employee /雇员类(基类)public: void input() /数据输入函数 coutnum; coutname; coutsex; coutage; void print() /打印数据函数 coutendl; coutsetw(6)num setw(8)name setw(6)sex setw(6) age setw(7)pay endl; void find() /查询函数 if(f_name=name) charthead2(); print(); chartend(); coutendl; void

18、save() /备份数据函数 outfileendl; outfilesetw(6)num setw(8)name setw(6)sex setw(6) age setw(7)pay endl; protected: int num; /职工号 string name; /职工姓名 char sex; /职工性别 int age; /职工年龄 double pay; /职工工资;class Technician:public Employee /技术员类(公有继承) public: void input() cout技术员的; Employee:input(); coutworktime; v

19、oid print() pay=worktime*hourpay; Employee:print(); void find() Employee:find(); void save() pay=worktime*hourpay; Employee:save(); protected: double worktime; /工作时间(小时);class Manager:public Employee /经理类public: void input() cout经理的; Employee:input(); void print() pay=m_salary; Employee:print(); voi

20、d find() Employee:find(); void save() pay=m_salary; Employee:save(); ;class Sell_manager:public Employee /销售经理类public: void input() cout销售经理的; Employee:input(); int sm_number() /调用销售经理职工号 return num; string sm_name() /调用销售经理姓名 return name; void print() coutendl; coutsetw(6)num setw(8)name setw(6)sex

21、 setw(6) age ; void save() outfileendl; outfilesetw(6)num setw(8)name setw(6)sex setw(6) age ; ;class Seller:public Employee /销售员类public: Seller() sold_amount=0; /构造函数,销售额初始化为0 void input() cout销售员的; Employee:input(); coutsold_amount; coutnu; void grade() /销售员业绩输出 coutendl; coutsetw(6)num setw(8)nam

22、e setw(7)sold_amount endl; void print() pay=sold_amount*s_proportion; coutendl; coutsetw(6)num setw(8)name setw(6)sex setw(6) age setw(7)pay setw(13)nu endl; int s_number() /调用销售员所属销售经理职工号 return nu; double amount() /调用销售员销售额 return sold_amount; void find() if(f_name=name) coutendl; cout 职 工 号 姓 名 性

23、 别 年 龄 工 资 所属部门经理编号 endl; print(); cout; void save() pay=sold_amount*s_proportion; outfileendl; outfilesetw(6)num setw(8)name setw(6)sex setw(6) age setw(7)pay setw(13)nu endl; protected: double sold_amount; /销售额 int nu; /所属销售经理职工号;/定义全局对象数组 Technician tn1; /技术员 Manager mn2; /经理 Seller sn3; /销售员 Sel

24、l_manager smn4; /销售经理(下属若干销售员)/主函数部分:int main() char n; menu(); for(int i=0;in; switch(n) case1: /数据输入 coutendl您所选操作为数据输入,请继续-endlendl; data_input(); coutendl; menu(); break; case2: /数据统计 coutendl您所选操作为数据统计,请继续-endlendl; statistics(); coutendl销售经理按工资排序为:nendl; sm_print(); coutendl; menu(); break; ca

25、se3: /数据打印 coutendl您所选操作为数据打印,请继续-endlendl; couta数据打印中,请等待nnendl; cout职工基本情况一览表如下:nendl; data_print(); coutendlendl; couta-数据打印完毕-nnendl; menu(); break; case4: /数据查询 coutendl您所选操作为数据查询,请继续-endlendl; coutf_name; coutendl-正在查询,请等待-endlendl; cout您查询的信息如下:endlendl; data_find(); coutendlendl; menu(); bre

26、ak; case5: /数据备份 outfile.open(C+程序设计实习.txt,ios:out); /打开磁盘文件流对象 coutendl您所选操作为数据备份,请继续-endlendl; outfile职工基本情况一览表如下:nendl; data_save(); outfile.close(); coutendlendl; couta-数据备份完成,请继续-endlendl; menu(); break; case0: /退出系统 coutendl您所选操作为退出系统,请确认-endlendl; cout 是( y ) n; if(n=y) coutn-请按任意键退出系统-endl;

27、exit(0); coutendl; else menu(); break; default: coutendl-出错!请重新选择操作! nendl; menu(); break; return 0;/自定义函数部分:void menu() /菜单函数 cout 小型公司工资管理系统 endl; coutendl; cout 请选择您所需的操作 endl; cout 数据输入:1,并按回车键; endl; cout 数据统计:2,并按回车键; endl; cout 数据打印:3,并按回车键; endl; cout 数据查询:4,并按回车键; endl; cout 数据备份:5,并按回车键; e

28、ndl; cout 退出系统:0,并按回车键; endl; coutendl; cout 请选择一个操作:;void menu2() /数据输入二级菜单函数 cout 小型公司工资管理系统 endl; coutendl; cout 请选择您所需的操作 endl; cout 经理数据输入 :1,并按回车键; endl; cout 技术员数据输入 :2,并按回车键; endl; cout 销售员数据输入 :3,并按回车键; endl; cout 销售经理数据输入:4,并按回车键; endl; cout 返回上一级 :5,并按回车键; endl; coutendl; cout 请选择一个操作:;vo

29、id menu3() /数据打印二级菜单函数 cout 小型公司工资管理系统 endl; coutendl; cout 请选择您所需的操作 endl; cout 经理数据打印 :1,并按回车键; endl; cout 技术员数据打印 :2,并按回车键; endl; cout 销售员数据打印 :3,并按回车键; endl; cout 销售经理数据打印:4,并按回车键; endl; cout 返回上一级 :5,并按回车键; endl; coutendl; cout 请选择一个操作:;void data_input() /数据输入函数 char p;int i; menu2(); for(int j

30、=0;jp; if(p=5) break; else switch(p) case1: for(i=0;in2;i+) mi.input(); coutendl-endl;menu2();break; case2: for(i=0;in1;i+) ti.input(); coutendl-endl;menu2();break; case3: for(i=0;in3;i+) si.input(); coutendl-endl;menu2();break; case4: for(i=0;in4;i+) smi.input(); coutendl-endl;menu2();break; void c

31、harthead1() /制表头1(数据统计用) coutendl; cout职 工 号 姓 名 销 售 额 endl;void charthead2() /制表头2(数据打印及销售经理数据统计用) coutendl; cout 职 工 号 姓 名 性 别 年 龄 工 资 endl;void chartend() /制表尾(数据打印及销售经理数据统计用) cout; void statistics() /数据统计函数 int i,j; for(i=0;in4;i+) double sum=0; coutendl职工号为 smi.sm_number() 销售经理 smi.sm_name() 下属

32、销售员的业绩为:endlendl; charthead1(); for(j=0;jn3;j+) if(sj.s_number()=smi.sm_number() sum=sum+sj.amount(); sj.grade(); coutendl; cout销售额总计setw(12)sum endl; coutendl; double salaryn4;double sm_salary() /销售经理工资计算及排序 int i,j;double a ;Sell_manager b; for(int k=0;kn4;k+) salaryk=0; for(i=0;in4;i+) double sum

33、=0; for(j=0;jn3;j+) if(sj.s_number()=smi.sm_number() sum=sum+sj.amount(); salaryi=sum*sm_proportion+basicpay; for( j=0;jn4-1;j+) for( i=0;in4-1-j;i+) if(salaryisalaryi+1) a=salaryi+1;salaryi+1=salaryi;salaryi=a; b=smi+1;smi+1=smi;smi=b; return 0;void sm_print() sm_salary(); charthead2(); for(int i=0

34、;in4;i+) smi.print(); coutsetw(7)salaryi endl; chartend(); coutendl;void data_print() /数据打印 char p;int i,j; menu2(); for(j=0;jp; if(p=5) break; else switch(p) case1: coutendl经理endl; /经理信息 charthead2(); for(i=0;in2;i+) mi.print(); chartend(); coutendlendl-endl; menu3();break; case2: coutendl技术员endl; /技术员信息 charthead2(); for(i=0;in1;i+) ti.print(); c

温馨提示

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

评论

0/150

提交评论