当前位置首页 > 建筑/施工 > 其它相关建筑施工文档
搜柄,搜必应! 快速导航 | 使用教程  [会员中心]

小型公司工资管理系统C++课程设计报告

文档格式:DOCX| 36 页|大小 218.65KB|积分 20|2022-09-30 发布|文档ID:157554125
第1页
下载文档到电脑,查找使用更方便 还剩页未读,继续阅读>>
1 / 36
此文档下载收益归作者所有 下载文档
  • 版权提示
  • 文本预览
  • 常见问题
  • C++程序设计课程设计报告课 题:小型公司工资管理系统专业班级:XXXXX学 号:XXXXXXXX姓 名:XXXXX指导教师:XXXXX评阅意见:评定成绩:指导老师签名:翊内容1 2012年6月12目录目录一、 课程设计内容 31・1课程设计的目的 31. 2设计题目及要求 3二、 设计思路 4三、 程序清单 72. 1程序源代码 7四、 运行结果 304.1程序运行 313. 2备份文本信息 34五、 程序使用说明 36六、 总结及心得体会 36(要求:给出一级目录,宋体加粗,四号字, 1.5倍行距)一:课程设计内容1.1、 课程设计的目的此次课程设计的目的是以《程序设计语言(C/C++)》为基础,针对具有一 定难度的综合性题目,进行分析、编程、调试和运行,进一步掌握面向对象和面 向过程程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实践相结 合,提高分析问题、解决问题的能力通过设计一个简单的小型公司工资管理系统,进一步熟悉C++中类的概念、 类的封装、继承和多态的实现方式了解系统开发的需要分析,类层次设计,模 块分析,编码测试,模块组装与整体调试的全过程,逐步熟悉程序设计的方法, 并养成良好的编程习惯。

    1.2、 设计题目及要求(1) 题目:小型公司工资管理系统 设计(2) 设计题目及要求:1. 公司主要有 4类人员:经理、技术员、销售员、销售经理要求存储这些 人的职工号、姓名、月工资、岗位、年龄、性别等信息其中(1)职工编号在输入人员信息时生成,每输入一个人员信息编号顺序加 12) 程序对所有人员有提升级别的功能3) 能够按照不同身份进行月薪的计算4) 能按姓名或者编号查找各类人员的信息5) 能够修改/删除各类人员的信息6) 能够显示所有人员的信息2. 工资的计算办法:经理:固定月薪为 8000;技术员:工作时间*小时工资(100 元每小时); 销售员:销售额*4%提成; 销售经理:底薪(5000)+所辖部门销售额总额*0.5% 3)类的层次结构大体如下:1. 需求分析:对用户提出的问题提出解决的办法和思路2. 根据需求,设计系统功能模块,并设计相应的类和界面3. 根据基本思路,确定输入和输出,设计程序的算法4. 确定用到的所有类的描述和定义,并设计测试程序来对类进行测试6.在计算机上编译程序,检验程序的可运行性1.4 课程设计报告内容写设计报告(要求正规打印,A4幅面),内容包括:题目系统功能模块结构图数据结构设计及用法说明程序结构(画流程图)各模块的功能试验结果(包括输入数据和输出结果)体会参考文献附录:源程序清单二、设计思路1、 整体考虑程序应该实现的功能,有员工信息管理、职务管理、月薪计算、 查找信息、显示所有人员的信息和退出系统6个。

    2、 首先定义一个Employee的雇员基类,然后由此派生出Manager、Seller、 Tech三个分别为经理类、销售员类、技术员类;再由Seller派生出销售经理类 Xmanager每个类中的成员都是public型的,所有的继承都是公有继承,基类中 定义有数据输入和输出函数3、 整个程序由主函数的一个 for 循环控制,根据输入的操作选项通过一个switch语句判断该进行什么操作,每一个case后面对应一个函数,每个函数对 应一个操作, 1对应信息管理, 2对应职务管理, 3对应月薪计算, 4对应查找信 息,5对应显示所有人员的信息,0对应退出系统4、 case中调用了五个无参的函数allSave()Exit();dataManagement() ;postManaMenu() ;calculateSal() ; findMenu() ;allDisplay() ;五个函数均用了模板函数的实例化分别进行输入、 职务管理、计算月薪、显示全部信息如输入中的一个:template void showMember(T & t , Ti * ti ){if(t.n <= 0 ) return ;for(t.p = t.head ; t.p != NULL ; t.p = t.p -> next ) t.p -> show() ; }showMember ()函数在各个类中都定义,并且同名,这样能简化程序。

    5、 在进行信息输入时,在基类中定义了一个虚函数,避免了值的副本,首先 给出提示语句,首先选择要输入的职工类型,然后依次调用saveFile(),首先创 建类的对象指针,如Seller * t ;ofstream cout ("S. txt“),建立文件流,创 建链表,将所输入的数据都保存至文件,并且对备份文件进行命名,同时确定存 储位置以便之后的查找和删除功能的实现6、 在进行工资计算时,每个类都定义了各自的calcuSalary()函数,依次 计算出每一种职工的工资,由提示语句选择是否输出7、 职务管理功能的实现,是通过编号来查找要提升职位的人员,选择要升为 哪一种职位,然后将多余的数据成员删除,在提升后的成员中将工资重新进行计 算,予以赋值8、 查找时,建立函数模板,参数为class T , class Ti,需要在哪一个类 中查找就将模板实例化为哪一个类,每一次查找时,指针都是先指向文件的起始 位置,然后用for循环来控制,先要输入编号,如t.p != NULL && t.p -> num != no;若当前对象的编号与输入的编号不相等,则指针移向下一个对象继续查找, 若相等则停止查找,并将所找到的信息全部输出。

    9、 考虑各种数据类型还有所需的C++内的函数,要引用〈iostream〉〈cstring〉 这四个头文件#include#include #include using namespace std ;class Employee{public:Employee * next ;char name[50]; int num; int age;char sex[8]; double salary;char post[30];char * getName(){return name ;}int getNum(){return num ;}int getAge(){return age ;}char * getSex(){return sex ;}double getSalary(){return salary ;}char * getPost(){return post ;}virtual void get(){cout<<"\t 姓名:";cin>>name;cout<<"\t 性别:";cin>>sex;cout<<"\t 年龄:";cin>>age;cout<<"\t 编号:";cin>>num;}Employee(){salary = 0.0 ;}virtual void show(){ndlcout<<"\t"<>hour ;}double gethour(){return hour ;}double calcuSalary(){salary = 100 * hour ;return salary;}};class Seller:virtual public Employee{public:Seller *next ;double income ;void get(){Employee::get();cout〈〈"\t请输入营业额:";cin>>income ;}double calcuSalary(){salary = income * 0.04 ;return salary ;}double getIncome() { return income ; }};class Manager:virtual public Employee{public:Manager * next ;void calcuSalary(){salary = 8000.00 ;}};class SellerList{public :int n ;Seller * head , *p ;SellerList(){n = 0 ;p = head = NULL ;}void inputFile() ;void saveFile() ;} S ;template void addMember(TT & t , Ti * ti ) {Ti * p = t.head ;t.head = ti ;if(p == NULL) t.head -> next = NULL ;t.head -> next = p ;t.n ++ ;}void SellerList::inputFile(){Seller * t;char na[50] ;ifstream cins ("S.txt") ; while(cins >> na ){t = new Seller() ;t -> next = NULL ; strcpy(t -> name , na ) ;cins >> (t -> post ) >> (t -> sex) >> (t -> num) >> (t -> age) >> (t -> salary) >> (t -> income) ;addMember(S , t ) ;}}void SellerList::saveFile(){Seller * t ;ofstream cout ("S.txt") ;for(t = S.head ; t != NULL ; t = t ->next )cout<< (t -> name)<<' ' << (t -> post ) <<' '<< (t -> sex) <<' '<< (t -> num)<<' '<< (t -> age) <<' '<< (t -> salary) <<' '<< (t -> income)< next ) salary += t -> income * 0.005 ; return salary ;}class TechList{public :int n ;Tech * head , * p ;TechList(){n = 0 ;p = head = NULL ;}void inputFile() ;void saveFile() ;} T ;template void showMember(T & t , Ti * ti ){if(t.n <= 0 ) return ;for(t.p = t.head ; t.p != NULL ; t.p = t.p -> next ) t.p -> show() ; }void TechList::inputFile(){char na[50] ;Tech * t ;ifstream cint ("T.txt") ;while(cint>> na ){t = new Tech() ;t -> next = NULL ; strcpy(t -> name , na ) ;cint >> (t -> post ) >> (t -> sex) >> (t -> num) >> (t -> age) >> (t -> salary) >> (t -> hour) ;addMember(T , t ) ;}}void TechList::saveFile(){Tech * t ;ofstream cout ("T.txt") ;for(t = T.head ; t != NULL ; t = t ->next )cout<< (t -> name)<<' ' << (t -> post ) <<' '<< (t -> sex) <<' '<< (t -> num)<<' '<< (t -> age) <<' '<< (t -> salary) <<' '<< (t -> hour)<> na ){t = new XManager() ;t -> next ; strcpy(t -> name , na ) ;cinx >> (t -> post ) >> (t -> sex) >> (t -> num) >> (t -> age) >> (t -> salary) ; addMember(X , t ) ;}}void XManagerList::saveFile(){XManager * t ;ofstream cout ("X.txt") ;for(t = X.head ; t != NULL ; t = t ->next )cout<< (t -> name)<<' ' << (t -> post ) <<' '<< (t -> sex) <<' '<< (t -> num)<<' '<< (t -> age) <<' '<< (t -> salary)<> na ){t = new Manager() ;t -> next = NULL ; strcpy(t -> name , na ) ;cinm >> (t -> post ) >> (t -> sex) >> (t -> num) >> (t -> age) >> (t -> salary ) ; addMember(M , t ) ;}}void ManagerList::saveFile(){Manager * t ;ofstream cout ("M.txt") ;for(t = M.head ; t != NULL ; t = t ->next )cout<< (t -> name)<<' ' << (t -> post ) <<' '<< (t -> sex) <<' '<< (t -> num)<<' '<< (t -> age) <<' '<< (t -> salary)<> " return 0;}void addDataMenu(){int sel ;Tech * ti ;Seller *si ;Manager * mi ;XManager * xi ;cout<<"\n\n\n\n\t**************************"<> "while(cin>>sel && (sel > 4 || sel < 0 ) ) cout<<"\n\t您的输入有误,请重新输 入: " ;switch(sel ){case 0 : return ;case 1 :ti = new Tech() ; strcpy(ti -> post, "技术员") ;ti -> get() ;//ti -> show() ; addMember(T , ti) ;break ;case 2 : si = new Seller() ;strcpy(si -> post , "销售员") ;si -> get() ; addMember(S , si ) ;break ;case 3 :xi = new XManager() ; strcpy(xi -> post , "销售经理") ;xi -> get() ; addMember(X , xi) ;break ;case 4 :mi = new Manager() ; strcpy(mi -> post , "总经理") ;mi -> get() ; addMember(M , mi ) ;break ;default : break ;}}template void renewMember(T & t , Ti * ti ){int no , sel ;cout<<"\n\t请输入员工编号:";cin>>no ;if(findMember(t , ti , no ) == false ){cout<<"\n\t该员工不存在,操作失败! "< show() ;cout<<"\n\t \n";cout<<"\n\t请输入要修改的属性编号:"; cin>>sel ;if(sel < 1 || sel > 5 ){cout<<"\n\t对不起,您的输入有误,操作失败!"<>na ;strcpy(t.p -> name , na ) ;cout<<"\n\t 修改成功! "<>s ; strcpy(t.p -> sex , s ) ;cout<<"\n\t 修改成功! "<>a ;t.p -> age = a ;cout<<"\n\t 修改成功! "<>nu ;t.p -> num = nu ;cout<<"\n\t 修改成功! "<>sal ;t.p -> salary = sal ;cout<<"\n\t 修改成功! "<> ";while(cin>>sel && (sel > 4 || sel < 0 ) ) cout<<"\n\t您的输入有误,请重新输 入: " ;switch(sel ){case 0 : return ;case 1 :renewMember(T , t ) ; break ;case 2 : renewMember(S , s ) ;break ;case 3 :renewMember(X , x ) ;break ;case 4 : renewMember(M , m ) ; break ;default : break ;}}template bool deleteMember(T & t , Ti * ti , int no){if(findMember(t , ti , no ) == false ){cout<〈〃\n\t该员工不存在,操作失败! "< num == no ){delete(t.head ) ;t.head = NULL ;return true;}Ti * pi ;for(ti = t.head ; ti -> next != NULL && ( (ti -> next -> num) != no) ; ti = ti-> next ) ;pi = ti -> next -> next ;delete(ti -> next ) ;ti -> next = pi ;return true ;}void deleteData(){int sel ;Tech * t ;Seller * s ;XManager * x ;Manager * m ;cout〈〈〃\n\n\n\t**************************〃〈〈endl ;cout〈〈〃\t \n〃〈〈endl ;cou t<< "\t 删除员工信息"<> ";while(cin>>sel && (sel > 4 || sel < 0 ) ) cout<<"\n\t您的输入有误,请重新输 入: " ;cout<> ";cin>>no ;if(deleteMember(T ,t , no)) cout<<"\n\t 删除成功!"<> ";cin>>no ;if(deleteMember(S , s , no))cout<<"\n\t 删除成功!"<> ";cin>>no ;if(deleteMember(X , x, no) ) cout<<"\n\t 删除成功!"<> ";cin>>no ;if(deleteMember(M , m , no) ) cout<<"\n\t 删除成功!"< “;while(cin>>sel && (sel > 3 || sel < 0 ) ) cout<<〃\n\t 您的输入有误,请重 新输入: " ;switch(sel )case0return ;case1addDataMenu(); breakcase2renewData() ;break ;case 3 : deleteData() ; break default : break ;}}}template bool findMember(T & t , Ti * ti , int no) {for(t.p = t.head ; t.p != NULL && t.p -> num != no ; t.p = t.p -> next ) if(t.p != NULL ) return true ;else return false ;}void all_Init(){T.head = NULL ;S.head = NULL ;M.head = NULL ;X.head = NULL ;T.inputFile() ;S.inputFile() ;M.inputFile() ;X.inputFile() ; }void allSave(){T.saveFile() ;S.saveFile() ;M.saveFile() ;X.saveFile() ; }S *s ), Ti ti )template void copyMember(T *t , {strcpy(t -> name , s -> name ) ;strcpy(t -> sex , s -> sex ) ;t -> age = s -> age ;t -> num = s -> num ; } template int changePost(TT t {int no , sel ;Tech * tt ;Seller * ss ;XManager * xx ;Manager * mm ;cout<<"\n\t请输入员工编号:"; cin>>no ;if(findMember(t , ti , no ) == false ) {cout<<"\n\t该员工不存在,操作失败! "<> ";while(cin>>sel && (sel > 4 || sel < 0 ) ) cout<<"\n\t您的输入有误,请重新输 入: " ;cout< post ,"技术员") tt -> salary = 0.0 ;tt -> hour = 0 ; copyMember(tt, t.p ) ;// tt -> show() ; addMember(T , tt ) ;// T.head->show() ; //deleteMember(t, ti , no ) break ;case 2 :ss = new Seller() ; strcpy(ss -> post ,"销售员") ss -> salary = 0.0 ;ss -> income = 0.0 ; copyMember(ss, t.p ) ; //ss-> show() ; addMember(S , ss ) ;//T.head->show() ;break ;case 3 :xx = new XManager() ;strcpy(xx -> post ,"销售经理") xx -> salary = 8000 ;xx -> income = 0.0 ; copyMember(xx, t.p ) ;//ss-> show() ; addMember(X , xx ) ;//T.head->show() ;break ;case 4 :mm = new Manager() ;strcpy(mm -> post ,"总经理") ;mm -> salary = 8000 ;copyMember(mm, t.p ) ;//ss-> show() ;addMember(M , mm ) ;//T.head->show() ;break ;default : break ;}return no ;}void postManaMenu(){int sel , no ;Tech * t ;Seller * s ;XManager * x ;Manager * m ;cout<<"\n\n\n\t**************************"<> 〃;while(cin>>sel && (sel > 4 || sel < 0) ) cout<<"\n\t 您的输入有误,请重新输 入: 〃 ;cout< void caluSal(T & t , Ti * ti ){for(t.p = t.head ; t.p != NULL ; t.p = t.p -> next ) t.p -> calcuSalary() ; }void allDisplay() ;void calculateSal() {Tech * t ; Seller * s ; XManager * x ; Manager * m ;caluSal(M , m) ;caluSal(X , x ) caluSal(S , s ) caluSal(T , t )cout<<"\n\t 工资计算成功! "<> "; cin>>sel ;if(sel == 1 ) allDisplay() ;}void findMenu(){int sel ; Tech * t ;Seller * s ;XManager * xManager * mcout<<"\n\n\n\t**************************"<>p ;cout<<"\t> > > 系统连接中... \n"<

    点击阅读更多内容
    卖家[上传人]:jinzhuang
    资质:实名认证