《面向对象程序设计》课程设计报告题目:职工信息管理;小型公司工资管理系统院系:专业班级:学号:学生姓名:小组成员:2011年9月6日一、引言本题对程序有如下要求:试建立一个类Worker用于描述职工对象,具体要求如下:私有数据成员intid:职工号。floatwage:工资。charlevel:技术等级(A—一等,B—二等,C—三等,NULL—无级,其它为无效)公有成员函数缺省构造函数:初始化数据成员为0或NULL值。带参构造函数:用参数初始化数据成员(需判断参数是否有效)。输出函数voidList():输出本职工的各项信息。修改函数voidSet():从键盘输入新的职工号、工资和等级数据,修改相应数据成员的值。接受输入前屏幕上显示提示输入哪些信息。主函数:定义三个不同的worker对象作为测试数据,完成对worker类和程序的测试。每个成员函数至少被调用一次。系统功能介绍:本程序中定义的Worker类中包含私有数据成员:Id、wage和level,公有成员函数:Worker()、voidList()和voidSet(),Worker()可以用于参数初始化数据成员,并判断参数的有效性,voidList()可以用于职工信息的输出,voidSet()可以用于输入新的职工信息。此外本程序还可以将输入的技术等级A、B、C等对应的转换成一等、二等、三等,并将输入的职工信息保存到file.txt中,而且在每次输入之前都会有提示信息。模块设计:各个成员函数间关联:主函数进入主显示界面按照提示进行选择1.添加职工信息2.显示职工信息3.保存职工信息4.退出退出系统Pressanykeytocontinueworker*input();进行添加数据操作voidshowr();进行数据显示操作worker*baocun();保存新增加的联系人fwrite对file.txt进行保存操作四、结果显示图:五、程序清单:(附主要函数)#includestdio.h#includewindows.h#includemalloc.h#includeconio.h#includestring.h#defineNULL0#defineLENsizeof(structworker)typedefstructworker//定义结构体{intnum;charname[20];charlevel[20];floatwage;structworker*next;}worker;structworker*head=NULL;intn=0;worker*input(worker*p);//函数声明worker*baocun(worker*p);worker*sort(worker*p);voidshow(worker*p);//*********************************主函数*******************voidmain(){charc;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(\t1:添加职工信息\n);printf(\t2:显示职工信息\n);printf(\t3:保存职工信息\n);printf(\t4:退出\n);printf(\t\n);printf(\t请选择输入选项[1\\2\\3\\4]:);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(\n\n\n\n\n按任意键返回主菜单:);getchar();system(cls);}while(1);}//*******************职工信息输入界面**************************worker*input(worker*p){structworker*a;//定义指针n=0;do{system(cls);a=(worker*)malloc(sizeof(worker));//开辟空间printf(*******************职工信息输入界面********************\n\n\n);printf(输入录入职工工号为0时退出!\n);printf(请输入录入职工工号:);scanf(%d,&a-num);getchar();if(a-num==0)break;n++;//计算开辟节点数,以便排序printf(请输入录入职工姓名:);gets(a-name);printf(请输入录入职工工资:);scanf(%f,&a-wage);getchar();printf(请输入录入职工等级:);gets(a-level);a-next=NULL;if(head==NULL){head=a;p=head;}else{p-next=a;p=a;}}while(1);return(head);}//*****************职工信息显示界面****************************voidshow(worker*p){charc;system(cls);printf(*******************职工信息显示界面********************\n\n);if(head==NULL)//内存为空{printf(数据库暂为空,是否现在进行数据添加[Y/N]\n);doc=getchar();while(c!='Y'&&c!='y'&&c!='N'&&c!='n');if(c=='Y'||c=='y')input(head);}else{p=head;//输出内存员工信息do{printf(工号:%-12d姓名:%-16s等级:%-12s工资:%-16f\n:,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(cannotopenthefile);getch();exit(0);}while(p!=NULL){if(fwrite(&head,sizeof(structworker),1,fp)!=1)printf(文件写入错误\n);fclose(fp);/*关闭文件*/printf(工号:%-12d姓名:%-16s等级:%-12s工资:%-16f\n:,p-num,p-name,p-level,p-wage);p=p-next;}fclose(fp);//关闭文件returnp;}六、程序调试心得体会:制作程序时,开始有些困难上网上搜了一些相近似的例子,然后自己进行模仿,调试,有一些问题解决不了的,就百度了一下,看一下问题出在什么地方,这一个题目稍微简单些,基本上自己百度一下都可以解决问题的。之后对保存文件作了修改。七、参考文献:《c++面向对象程序设计》(第七版)WalterSavitch著周靖译清华大学出版社一、引言本题对程序有如下要求:(1)公司主要有4类人员:经理、技术员、销售员、销售经理。要求存储这些人的职工号、姓名、月工资、岗位、年龄、性别等信息。(2)工资的计算方法:A.经理:固定月薪为8000;B.技术员:工作时间*小时工资(100元每小时);C.销售员:销售额*4%提成;D.销售经理:底薪(5000)+所辖部门销售额总额*0.5%;(3)输入数据要求每类人员不能少于4人,并按以下格式输出:职工号姓名性别年龄岗位工资排名及某部门经理所辖部门各售货员的业绩及自己的工资表:(4)菜单要求:要有一个菜单,用于选择各项功能,其中1)数据录入:输入各种数据;2)数据统计:各销售经理的工资计算及最终按工资进行的冒泡排序;3)数据打印:打印上述表格;4)数据备份:把相关数据写入文件;5)退出:推出本系统;二、系统功能介绍:充分利用了类的继承与派生的知识,先定义了一个雇员类Employee,由雇员类公有派生出技术员类Tech,销售员类Seller,经理类Manager,由销售员类Seller,经理类Manager公有派生出销售经理类XManager。把基类都定义为虚基类。通过基类去写的派生类就可以调基类的公有成员。利用for循环把经理数据,技术员数据,销售员数据,销售经理数据输入,利用冒泡排序法把各销售经理的资按升序排列。利用switch进行选择系统进行的工作。在主菜单中进行调用各函数,从而实现系统各功能的运行。三、模块设计:四、各个成员函数间关联:主函数进入主显示界面按照提示进行选择数据输入数据统计数据打印数据查询数据备份退出系统返回上一级经理数据输入技术员数据输入销售员数据输入销售经理数据输入结束程序voiddata_input();进行数据输入操作voiddata_find();进行数据查询操作voidstatistics();/进行数据统计操作voiddata_save();进行数据备份操作voidmenu();显示主菜单voiddata_print();进行数据打印操作voidsave_new();保存新增加的联系人ofstream对C++程序设计实习.txt进行操作ofstream对C++程序设计实习.txt进行操作四、结果显示图:五、程序清单:#includefstream#includeiostream#includestring#includeiomanip#includestdlib.husingnamespacestd;//常变量(供修改用):constintn1=2,n2=2,n3=4,n4=2;/*定义公司各类职工人数(方便修改)(n1:技术员人数;n2:经理人数;n3:销售员人数;n4:销售经理人数)*/constdoublem_salary=8000;//经理固定月工资constdoublehourpay=100;//技术员小时工资constdoublebasicpay=5000;//销售经理的底薪constdoubles_proportion=4.0/100;//销售员的工资提成比例constdoublesm_proportion=0.5/100;//销售经理的提成比例//声明部分:voidmenu();//主菜单voidmenu2();//数据输入二级菜单voidmenu3();//数据打印二级菜单voiddata_input();//数据输入函数voiddata_print();//数据打印voidcharthe