C面向对象程序设计课程设计报告

上传人:痛*** 文档编号:130335615 上传时间:2022-08-04 格式:DOC 页数:34 大小:454KB
收藏 版权申诉 举报 下载
C面向对象程序设计课程设计报告_第1页
第1页 / 共34页
C面向对象程序设计课程设计报告_第2页
第2页 / 共34页
C面向对象程序设计课程设计报告_第3页
第3页 / 共34页
资源描述:

《C面向对象程序设计课程设计报告》由会员分享,可在线阅读,更多相关《C面向对象程序设计课程设计报告(34页珍藏版)》请在装配图网上搜索。

1、好埒学阮课程设计课程名称C+面向对象程序设计题目名称公司人员管理系统专业班级13级计算机科学与技术一班学生姓名林涛、甑德胜、梁增辉吴志伟李齐江靖学号51302011015、51302011016、5130201100151302011037、5130201100651302011009指导教师郭有强二o四年六月二十日一、引言2二、课程设计报告41、问题描述42、系统总体方案43、设计思路和主要步骤54、各功能模块和流程图5(1)各功能模块5(2)流程图6三、系统测试9四、心得体会14五、参考文献16附:程序设计代码171一、引言1985年,管理信息系统的创始人,高登戴维斯给出的管理信息系统的定

2、义是:“它是一个利用计算机硬件和软件,手工作业,分析、计划、控制和决策模型,以及数据库的用户一机器系统。它能提供信息,支持企业或组织的运行、管理和决策。”这个定义说明了管理信息系统的组成要素:计算机硬件、软件、数据库、模型库和用户。随着我国社会的不断进步,人们对管理信息系统越来越重视,再加之管理信息系统在管理方面所产生的巨大影响,也使得人们越来越关注管理信息系统的发展趋势。由于管理信息系统的发展受到以上各种变革因素的制约,传统的管理信息系统必然向现代管理信息系统发展,在这个发展过程中,管理信息系统的发展将会呈现出以下趋势:管理信息系统将会越来越注重以人为本。管理科学的发展有科学管理理论行为管理

3、理论和现代管理理论三个发展阶段,正在向着越来越人性化的方向发展,即以人为本。基于管理学的这一研究视角,管理信息系统也将向着更加人性化的方向发展。在今后的管理信息系统中将会越来越注重人的因素,以人为出发点和中心,围绕着激发和调动人的主动性、积极性、创造性展开的,以实现人与社会共同发展的一系列管理活动。而且这种人性化还会贯穿于管理信息系统的开发设计与研究中,具体表现为今后的管理信息系统将具有更加友好的人机界面,易于人们操作,也会考虑到不同用户的不同需求,更加个性化。管理信息系统向智能化方向发展。随着人工智能技术的发展,数据仓库、数据挖掘技术在管理信息系统中的应用,管理信息系统必将向着智能化方向发展

4、,如产生了很多的决策支持系统、专家系统等等。智能化的管理信息系统具有思维模拟活动,它具有很高的自学习、自组织和进化性,并具有知识创新功能,可以解决非结构化事务,在决策中处于主导地位,是人的向导,在体系上将是大规模分布式计算模式,以基于网络神经元构件的智能网为主。管理信息系统向集成化方向发展。随着当前系统集成技术的提高,集成技术和方法也逐步地运用到管理信息系统中。由于管理信息系统将包含多个子系统,因此将这些功能集合在一起以便更好地发挥它的作用,这就是集成化的管理信息系统。集成化的管理信息系统将管理信息系统的各个子系统有机地结合起来,达到互通信息、共享数据资源的目的,其支撑技术是数据库和计算机网络

5、。集成管理则是一种全新的理念与方法,其核心是强调运用集成的思想和理念指导管理实践。而集成管理信息系统的本质是要素的整合和优势互补,在集成管理运作过程中,首先经历的是一个投入要素的聚集过程,当投入要素积累到一定量时,集成能量便开始发生膨胀裂变,从而使各种单项要素优势催化出更大的整体优势,管理效果也因而急剧放大。因此,管理信息系统是当代公司发展中不可或缺的一部分,是公司管理人员的基础。公司人员管理系统的完善也起到保护公司内部资料的作用,是公司盈利与否的必备条件之一。3二、课程设计报告1、问题描述某小型公司,主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。现在,需要存储这些人员的姓名、编号

6、、级别、当月薪水,计算月薪总额并显示全部信息。要求:其中,人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。程序对所有人员有提升级别的功能月薪的计算方法是:经理拿固定月薪,兼职技术人员按工作小时数领取月薪,兼职推销员的报酬按该推销员当月销售额提成,销售经理既拿固定月薪也领取销售提成。能按姓名或者编号显示、查找、增加、删除和保存各类人员的信息。用文件处理方式实现。2、系统总体方案使用面向对象的程序设计思想进行分析,整个系统涉及两大类信息和操作,公司,人员。所以系统主要涉及两个大类:公司类Company、人员类Person。系统的总体框架就是公司类,人员类的定义;主函数中定义一个公

7、司对象,循环显示主菜单并根据用户选择调用公司类的相应方法(成员函数)。(1)公司类Company:考虑系统操作的人员信息的数量具有不确定性,所以考虑使用链表保存、处理人员信息。公司类包含:所有人员信息的一个不带头结点的链表(作为数据成员)及可以对人员信息进行增,删,改,查询经营信息,基础数据设置,数据存盘,数据装入等操作的相关模块(Add,Delete,Modify,Query,Set,Save,Load)作为成员函数。人员类Person:所有人员都具有的公共信息及操作可以使用人员类进行描述。由于系统具有4类人员且4类人员数据,操作有所不同,如销售员包含销售额,而技术人员包含工作小时数且计算工

8、资的方法不同,所以应当为4类人员创建相应的Person类的派生类。(3) 为了使公司类可以方便处理人员信息,可以考虑将公司类确定为人员类的友元类或者人员类提供公共的方法以便公司类进行操作。为了公司类可以用共同方法操作人员类,可以将人员类的方法确定为虚函数。3、设计思路和主要步骤根据需求分析,首先我们需要建立Person基类,由此派生出了经理类(Manager),销售经理类(SalesManager)销售员类(Sales),技术人员类(Technician)在Person类中,需要将人员编号,姓名,岗位,收入,以及next指针等数据设置权限为protected由于其他类需要访问基类数据及相应成员

9、函数,所以我们必须设置为public在各个派生类中,因为都需要使用了CalcSalary(),OutPi函数,为了不出现二义性的问题,我们需要在基类中将这两个函数声明为纯虚函数,通过进一步分析,由于基类中的构造函数不能被继承,而且在派生类中又需要增加自己的数据成员,所以我们必须定义派生类的构造函数来完成相应的初始化。然后建立Company类,在public访问权限中,我们通过链表来操作人员数据,同时增加不同功能的成员函数如:voidAdd();/增加人员voidDelete();/删除人员voidModify();/修改人员voidQuery();/查询人员voidSet();/基础数据设置v

10、oidSave();/数据存盘voidLoad();/数据装入为了实现多文件的效果,我们将Company类定义及该类的实现分开,然后逐一对各功能函数进行代码编写。最后,我们定义了主函数,通过公司类创建了一个对象,并通过此对象完成相应的操作。在调试并测试代码过程中,当程序员输入相应的指令后,该系统自动调用相应的功能函数来达到需求效果,至此,一个公司人员管理系统的实现才算基本成功。4、各功能模块和流程图(1)各功能模块l.Person类的No-人员编号,Name-人员姓名,Duty-人员类别,Earning-工资,next-指向下一个人员的指针;Person类的CalcSalary(),Outpu

11、t()定义为纯虚函数分别表示要计算人员工资和输出人员信息,由于定义纯虚函数,所以Person是抽象类,具体计算工资,输出人员信息由派生类完成。2.各个派生的类,包含本类对象特有的数据,Sales:Amount-销售员销售额,SalesManager:Amount-销售经理的总销售额(系统统计各个销售员销售额得到销售经理的总销售额),Technician:t-技术人员工作小时数。其中:Worker就是人员链表。Clear()用于清除人员链表所有结点。Add(),Delete(),Modify(),Query(),Set(),Save(),Load()分别表示系统各个功能模块:增加人员,删除人员,

12、修改人员,查询本月经营信息,基础数据设置,数据存盘,数据装入。2)流程图1主函数流程Y结束:2Company:Add()73Company:Delete()8#6Company:4Company:5Company:Save()#7Company:Load()9三、系统测试列出各功能具体的输入数据及对应的输出结果,说明其是否符合设计要求:增加人员数据:贰F:_3f建文件MicrosoftVisualStudiolyProjec-tsdayl21Debugdayl21.息- 住- 经设数人人人本数.除加除改询础WW修杳基-一翔P装入8-退出请选择“一”江10睛选择新増员工心卷“-经理2-销售经理A

13、销售员4-技术员泊名:王二月销售=2000011#自S信昔豊-经设数人人人本数奠除加除改询础修查基数数退-12345678.#查询所添加人员的信息:删除员工:昌理系统F-增加人岗耳丿川八Ap-删除AsB-修改人囚自JlI-I查葡本貝经菖信基砒数塢设豊?-数聲入b-退出删除员工*ID:S慨到并删除查询是否删除成功:修改员工的姓名:i12345&78#一1囚囚ER鲁入-数人人人本数奠除扣除改询础郛修查基数数退封_一一趙自心昔聲经设*修改贝工*ID:99陈山技术员1203G09fcggCl-g理2-销售鲤理3-fi员4一技术胁4睾月工作力荷数10-1阴:120修改成功甲查询是否修改成功:数据存盘:1

14、3we*数据装入:自j昔聲-经设-数人人人本数羹除加除改询础倏查基数数退一012345678人员和基础数据己经装入清除并退出系统:14四、心得体会通过此次课程设计,使我们更加扎实的掌握了有关C+程序设计方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我们在这方面的知识欠缺和经验不足。实践出真知,通过大家的亲自动手制作,使我们掌握的知识不再是纸上谈兵。过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了

15、,在设计中遇到了很多问题,最后通过查阅相关书籍以及在大家的积极讨论下,终于迎刃而解。在今后社会的发展和学习实践过程中,我们一定会不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!课程设计诚然是一门专业课,给我们很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我们莫大的空间。同时,设计让我们感触很深。使我们对抽象的理论有了具体的认识。通过这次课程设计,我们基本掌握了

16、C+课程设计的原理。我认为,在这学期的实验中,不仅培养了团结合作、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在实验课上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有很大的帮助。以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的事情。回顾起此次课程设计,至今仍让我们感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,不仅巩固了以前所学过的知识,而且

17、学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高我们的实际动手能力和团结互助的能力。在设计的过程中遇到问题,可以说是困难重重,但可喜的是最终都得到了解决。此次设计也让我们明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。16五、参考文献1. 美GaryBronson著,刘勇译.ProgrammingDevelopmentandDesignUsingC+,Second

18、Edition(C+程序开发与设计,第2版).北京:人民邮电出版社,20022. 王萍.C+面向对象程序设计.北京:清华大学出版社.20023. 罗建军等.C+程序设计教程(第2版).北京:高等教育出版社,20044. 谭浩强.C+程序设计.北京:清华大学出版社.20045. 黄维通.VisualC+面向对象与可视化程序设计(第2版).北京:清华大学出版社,20076. 张基温.C+程序设计基础.北京:高等教育出版社,20017. 刁成嘉.面向对象C+程序设计.北京:机械工业出版社,20048. 郭有强等编著,C+面向对象程序设计清华大学出版社,2009年出版9. 郭有强等编著,C+面向对象程

19、序设计实验指导与课程设计,清华大学出版社,2009年出版17附:程序设计代码/Company.h#includePerson.hclassCompany/公司类private:Person*Worker;/员工表voidClear();/清除内存中数据public:Company()Worker=0;Load();Company()Person*p;p=Worker;while(p)p=p-next;deleteWorker;Worker=p;Worker=0;voidAdd();/增加人员voidDelete();/删除人员voidModify();/修改人员voidQuery();/查询人

20、员voidSet();/基础数据设置voidSave();/数据存盘(包括基础数据,人员数据)voidLoad();/数据装入(包括基础数据,人员数据);/Manager.hexterndoubleManagerSalary;classManager:publicPerson/经理类public:Manager(charID,char*Name,intDuty):Person(ID,Name,Duty)voidCalcSalary()Earning=ManagerSalary;voidOutput()CalcSalary();coutNotNamet经理tEarningDuty=Duty;st

21、rcpy(this-Name,Name);this-No=ID;virtualvoidCalcSalary()=0;virtualvoidOutput()=0;friendclassCompany;/Sales.hexterndoubleSalesPercent;/销售人员提成classSales:publicPerson/销售员类private:doubleAmount;public:Sales(charID,char*Name,intDuty,doubleAmount):Person(ID,Name,Duty)this-Amount=Amount;doubleGetAmount()retu

22、rnAmount;voidSetAmount(doubleAmount)this-Amount=Amount;voidCalcSalary()Earning=SalesPercent/100*Amount;voidOutput()CalcSalary();coutNotNamet销售员tAmounttEarningendl;/SalesManager.hexterndoubleSalesManagerSalary;/销售经理固定月薪externdoubleSalesManagerPercent;/销售经理提成classSalesManager:publicPerson/销售经理类private

23、:doubleAmount;public:SalesManager(charID,char*Name,intDuty):Person(ID,Name,Duty)voidSetAmount(doubles)Amount=s;voidCalcSalary()Earning=SalesManagerSalary+Amount*SalesManagerPercent/100;voidOutput()CalcSalary();coutNotNamet销售经理tEarningt=T;doubleGetT()returnt;voidSetT(doubleT)this-t=T;voidCalcSalary()

24、Earning=WagePerHour*t;voidOutput()CalcSalary();coutNotNamet技术员tttEarningnext;deletep;p=Worker;voidCompany:Add()Person*p;/新结点指针intDuty;charName20;doubleAmount,T;coutDuty;cout输入岗位(1-经理2-销售经理3-销售员4-技术员):;coutName;if(Duty=3)coutAmount;elseif(Duty=4)coutT;/创建新员工结点switch(Duty)case1:p=newManager(ID,Name,Du

25、ty);break;case2:p=newSalesManager(ID,Name,Duty);break;case3:p=newSales(ID,Name,Duty,Amount);break;case4:p=newTechnician(ID,Name,Duty,T);break;p-next=0;/员工结点加入链表if(Worker)/若已经存在结点Person*p2;p2=Worker;while(p2-next)/查找尾结点p2=p2-next;p2-next=p;/连接else/若不存在结点(表空)Worker=p;/连接voidCompany:Delete()/删除人员intNo;

26、coutn*删除员工*n;coutNo;/查找要删除的结点Person*p1,*p2;p1=Worker;while(p1)if(p1-No=No)break;elsep2=p1;p1=p1-next;/删除结点if(pl!=NULL)/若找到结点,则删除if(p1=Worker)/若要删除的结点是第一个结点Worker=p1-next;deletep1;else/若要删除的结点是后续结p2-next=p1-next;deletep1;cout找到并删除n;else/未找到结点cout未找到!n;voidCompany:Modify()intNo,Duty;charName20;doubleA

27、mount,T;coutn*修改员工*n;coutNo;/查找要修改的结点Person*p1,*p2;p1=Worker;while(p1)if(p1-No=No)break;elsep2=p1;p1=p1-next;/修改结点if(pl!=NULL)/若找到结点p1-Output();coutDuty;if(p1-Duty!=Duty)/若岗位发生变动/修改其它数据coutName;if(Duty=3)coutAmount;elseif(Duty=4)coutT;/创建新员工结点Person*p3;switch(Duty)case1:p3=newManager(p1-No,Name,Duty

28、);break;case2:p3=newSalesManager(p1-No,Name,Duty);break;case3:p3=newSales(p1-No,Name,Duty,Amount);break;case4:p3=newTechnician(p1-No,Name,Duty,T);break;/员工结点替换到链表p3-next=p1-next;if(p1=Worker)/要替换的结点是第一个结点Worker=p3;else/若要除的结点是后续结点p2-next=p3;/删除原来的员工结点deletep1;else/若岗位没有变动coutpl-Name;if(Duty=3)coutAm

29、ount;(Sales*)p1)-SetAmount(Amount);elseif(Duty=4)coutT;(Technician*)p1)-SetT(T);cout修改成功!n;else/未找到结点cout未找到!n;voidCompany:Query()coutDuty=3)sum+=(Sales*)p)-GetAmount();p=p-next;p=Worker;doublesum2=0;/工资总和while(p)if(p-Duty=2)(SalesManager*)p)-SetAmount(sum);p-Output();sum2+=p-Earning;p=p-next;cout本月

30、盈利:sum*0.20-sum2endl;cout(按照20%利润计算)n;voidCompany:Set()coutn*设置基础数据*n;cout经理固定月薪ManagerSalaryManagerSalary;cout销售经理固定月薪SalesManagerSalarySalesManagerSalary;cout销售经理提成SalesManagerPercentSalesManagerPercent;cout销售人员提成SalesPercentSalesPercent;cout技术人员小时工资WagePerHour(元/小时):;cinWagePerHour;cout“员工标识=ID:;

31、cinID;voidCompany:Save()/数据存盘(包括基础数据,人员数据),均采用文本文件ofstreamfPerson,fBase;charc;coutn保存人员和基础数据,是否继续?Y/N:;cinc;if(toupper(c)!=Y)return;/保存人员编号、姓名、岗位fPerson.open(person.txt,ios:out);Person*p=Worker;while(p)fPersonp-Notp-Nametp-Dutyt;if(p-Duty=3)fPersonGetAmount()Duty=4)fPersonGetT()t;fPersonnext;fPerson

32、.close();/保存基础数据fBase.open(base.txt,ios:out);fBase经理固定月薪tManagerSalaryendl;fBase销售经理固定月薪tSalesManagerSalaryendl;fBase销售经理提成tSalesManagerPercentendl;fBase销售人员提成tSalesPercentendl;fBase技术人员小时工资tWagePerHourendl;fBaseIDtIDendl;fPerson.close();coutbufManagerSalary;/经理固定月薪fBasebufSalesManagerSalary;/销售经理固定

33、月薪fBasebufSalesManagerPercent;/销售经理提成/销售人员提成/技术人员小时工资/员工标识fBasebufSalesPercent;fBasebufWagePerHour;fBasebufID;fBase.close();/清除内存人员数据Clear();/人员数据数据装入ifstreamfPerson;Person*p=Worker;intNo;charName20;intDuty;doubleAmount,T;fPerson.open(person.txt,ios:in);/读一条记录fPersonNoNameDuty;if(Duty=3)fPersonAmoun

34、t;elseif(Duty=4)fPersonT;while(fPerson.good()/创建员工结点switch(Duty)case1:p=newManager(No,Name,Duty);break;case2:p=newSalesManager(No,Name,Duty);break;case3:p=newSales(No,Name,Duty,Amount);break;case4:p=newTechnician(No,Name,Duty,T);break;p-next=0;/员工结点加入链表if(Worker)/若已经存在结点Person*p2;p2=Worker;while(p2-

35、next)/查找尾结点p2=p2-next;p2-next=p;/连接else/若不存在结点(表空)Worker=p;/连接/读下一条记录fPersonNoNameDuty;if(Duty=3)fPersonAmount;elseif(Duty=4)fPersonT;fPerson.close();coutn人员和基础数据已经装入.n;/main.cpp#includeiostream.h#includeCompany.h/全局数据,对象doubleManagerSalary;/经理固定月薪doubleSalesManagerSalary;/销售经理固定月薪doubleSalesManager

36、Percent;/销售经理提成doubleSalesPercent;/销售人员提成doubleWagePerHour;/技术人员小时工资intID;voidmain()charc;Companya;docoutn*公司人员管理系统*n;cout1一增加人员n;cout2删除人员n;cout3修改人员n;cout4一查询本月经营信息n;cout5基础数据设置n;cout6数据存盘n;cout7数据装入n;coutc;switch(c)case1:a.Add();break;case2:a.Delete();break;case3:a.Modify();break;case4:a.Query();break;case5:a.Set();break;case6:a.Save();break;case7:a.Load();break;while(c!=8);32

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!