C++设计报告.docx
- 文档编号:3729908
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:23
- 大小:137.87KB
C++设计报告.docx
《C++设计报告.docx》由会员分享,可在线阅读,更多相关《C++设计报告.docx(23页珍藏版)》请在冰豆网上搜索。
C++设计报告
C++课程设计
班级:
通信0702
姓名:
学号:
**********
指导老师:
摘要
C++是由C发展而来的,与C兼容。
所以它可以用于面向过程的结构化程序设计,但是它又有自己的特点,它也可以用于面向对象的程序设计,是一种功能强大的混合型的程序设计语言。
虽然C++仍然允许使用从C继承来的传统用法,但是仍然提倡使用C++的新方法。
面向对象的程序设计主要有四个特点:
封装,继承,多态,抽象。
学好C++,绝不是一个纯技术的问题,需要综合考虑多方面的因素,作出合理的决策和安排。
因此必须强调多编程,多上机实践。
本次课设三个题目要求设计管理系统,我选择了公司人员信息管理系统,编写的程序涵盖了C++语言中的封装,继承,多态(虚函数的使用),文件操作。
在设计过程中我尽量秉持着靠近实际应用的原则,用心的从一个管理者的角度出发并解决了自己在程序中的多处不足和缺陷,例如在输入编号设计中,设计了关于数据有效性的操作等。
在系统设计中我加强了界面的美观设计,使程序在简洁的基础上可读性更强,更人性化!
最后我在设计过程中也尝试了创新的方法,也收到了很好的效果。
总之,两周的课设过去了,我感觉自己在整体上有了一个很大的提高,知识更加系统化,理论化,我会继续努力和不断地钻研
本文利用MicrosoftVisualC++6.0编写程序,实现了用户对公司职员信息的增加﹑更改﹑删除﹑查找﹑显示﹑存储等操作。
关键词:
类继承派生多态性虚函数输入输出文件操作
一:
设计任务与要求:
假设要为某个公司编写雇员工资支付程序。
一般工人(Worker)按每月工作的天数计算工资;销售人员(Salesman)在基本工资基础上每月还有销售提成;经理(Manager)每月按固定工资支付,临时工(Floater )按小时支付。
要求设计抽象类(Employee)描述所有雇员的共同特性(如姓名,性别,出生日期,员工类别),含有计算工资的纯虚函数computeSalay(),所有员工用该方法计薪。
要求用多态实现。
经理工资计算:
月工资()
销售人员工资计算:
基本工资+每件产品提成额*销售的产品数量
一般工人工资计算:
每天工资额*工作天数
临时工工资计算:
每小时工资额*总工作小时数
文本界面为:
1.新增员工信息
2.删除员工信息
3.员工信息搜索(按姓名)
4.员工信息统计(按姓名或工资或类别)
5.员工信息分类存储
6.员工信息导入
7.按工资排序
8.退出
第一章绪论
1.1课程设计的目的
C++作为一种面向对象的程序设计语言,它支持对类的抽象.了解面向对象的程序设计思想及其方法,其核心概念--类,包括类及其派生类的声明实现利用类来解决具体问题,并达到以下目的:
(1)要求学生达到熟练掌握C++语言的基本知识和技能;
(2)基本掌握面向对象程序设计的基本思路和方法;
(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
1.2课程设计的背景和意义
C++是一门实践性很强的课程,光靠听课和看书是学不好的。
衡量学习好坏的标准不是懂不懂。
因此必须强调多编程,多上机实践。
所以开设了这次课程设计,目的在于使学生达到熟练掌握C++语言的基本知识和技能,掌握面向对象程序设计的基本思路和方法,能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
这对于进一步巩固C++知识是一个很好的机会。
同时我们在这次课程设计的过程中学到了很多课本以外的知识,解决了很多以前没有碰到的问题,可以说对程序设计这门课有了一个新的认识。
1.3课程设计环境
本次课设采用的是MicrosoftVisualC++6.0编写程序
第二章需求分析
2.1问题描述
制作公司人员信息管理系统实现数据录入、数据删除、数据保存和数据显示以及数据查询等一些功能。
2.2功能要求
(1)根据自己的喜好设计系统封面
(2).系统应包括记录编辑和记录查询等功能模块。
记录编辑功能完成职工记录编辑的记录增加、记录删除和记录查询等功能。
记录查询功能可以对数据集中的记录进行查询,要求按职工姓名进行查询
2.3问题的解决方案
根据系统功能要求,可以将问题解决分为以下步骤:
1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
2)分析系统中的各个实体及它们之间的关系;
3)根据问题描述,设计系统的类层次;
4)完成类层次中各个类的描述;
5)完成类中各个成员函数的定义;
6)完成系统的应用模块;
7)功能调试;
8)完成系统总结报告。
第三章系统设计
3.1数据设计
3.1.1类设计
本次程序设计一共定义了五个类:
Employee,Manager,Floater,Workers和Salesman。
在Employee类里定义了Empoyee类的缺省构造函数和它的析构函数,ADD函数用于实现新增成员的输入,delete1函数用于实现数据的删除,displayall函数用于实现数据的显示。
Find用于实现在查找的时候得到姓名。
Sort用于分类。
排序用于根据工资排序。
Manager,worker,floater和Salesman类公有继承Employee类,它们的函数功能,数据成员与基类的基本相同。
3.1.2函数设计
在五个类里定义了它们的的缺省构造函数和它的析构函数,Add函数用于实现新增成员的输入,通过for循环给对象数组赋值来实现。
change函数实现数据的更改。
delete1函数用于实现数据的删除。
displayall函数用于实现数据的显示。
Find用于实现根据姓名查找。
Paixu实现通过工资高低排序。
Sort实现通过员工信息分类存储。
3.2结构设计
3.2.1系统流程图
3.2.2程序清单
1、main函数:
实现各个参数的定义及赋初值,提供选择界面;
2、基类:
定义参数、相关函数以及虚函数
3、派生类:
实现新增员工信息、删除员工信息、员工信息搜索(按姓名)、员工信息统计(按姓名或工资或类别)、员工信息分类存储、员工信息导入、按工资排序、退出等功能。
3.2.3源程序代码:
#include
#include
#include
#include
#include
#include
intn=0;//统计雇员的人数
intK=0;//统计销售的人数
intH=0;//统计临时工人的人数
intM0=0;//统计经理的人数
intJ=0;//统计一般工人的人数
classEmployee
{
protected:
charname[20];//姓名
chargender[20];//性别
chardate[20];//出生日期
floataccumPay;//月薪总额
charStaffcategory[20];
public:
Employee(){accumPay=0;}
~Employee(){}
voidset_name(char*na){strcpy(name,na);}
voidset_gender(char*ge){strcpy(gender,ge);}
voidset_date(char*da){strcpy(date,da);}
voidset_Staffcategory(char*staff){strcpy(Staffcategory,staff);}
voidset_accumpay(floataccu){accumPay=accu;}
char*get_name(){returnname;}
char*get_gender(){returngender;}
char*get_date(){returndate;}
floatget_accumpay(){returnaccumPay;}
char*get_Staffcategory(){returnStaffcategory;}
virtualvoidcomputeSalay()=0;
virtualvoidget_data()
{
cout<<"(姓名性别出生日期员工类别)";
cin>>name>>gender>>date>>Staffcategory;
}
virtualvoiddisplay()
{
cout< < } }; //普通工人 classWorker: publicEmployee { private: floatdayRate;//每天酬金 intworkDays;//当月工作天数 public: Worker(){dayRate=180;} virtualvoidget_data() { cout<<"(姓名性别出生日期员工类别工作天数)"; cin>>name>>gender>>date>>Staffcategory>>workDays; } floatget_dayRate(){returndayRate;} intget_workDays(){returnworkDays;} voidcomputeSalay(){accumPay=dayRate*workDays;} voiddisplay() { //cout<<"一般工人显示数据如下: "< //cout<<"姓名性别出生日期员工类别当月工作天数每天酬金月薪总额"< cout< < } }; //销售人员 classSalesman: publicEmployee { private: floatcommRate;//每件产品提成额 floatsales;//销售的产品数量 floatsalary;//基本工资 public: Salesman() { commRate=8; salary=3000; } virtualvoidget_data() { cout<<"(姓名性别出生日期员工类别销售产品数量)"; cin>>name>>gender>>date>>Staffcategory>>sales; } voidcomputeSalay(){accumPay=commRate*sales+salary;} voiddisplay() { //cout<<"销售人员数据显示数据如下: "< //cout<<"姓名性别出生日期员工类别销售的产品总量每件产品提成额基本工资" //<<""<<"月薪总额"; cout< < } }; //经理 classManager: publicEmployee { private: floatmonthSalary;//月工资 public: Manager(){monthSalary=10000;} virtualvoidget_data() { cout<<"(姓名性别出生日期员工类别)"; cin>>name>>gender>>date>>Staffcategory; } floatget_monthSalary(){returnmonthSalary;} voidcomputeSalay(){accumPay=monthSalary;} voiddisplay() { //cout<<"经理显示数据如下: "< //cout<<"姓名性别出生日期员工类别月薪总额"< cout< < } }; //临时工 classFloater: publicEmployee { private: floathourRates;//每小时酬金 intworkHours;//当月工作时数 public: Floater(){hourRates=15;} virtualvoidget_data() { cout<<"(姓名性别出生日期员工类别当月工作时数)"; cin>>name>>gender>>date>>Staffcategory>>workHours; } floatget_hour_Rates(){returnhourRates;} intget_workHours(){returnworkHours;} voidcomputeSalay(){accumPay=hourRates*workHours;} voiddisplay() { //cout<<"一般工人显示数据如下: "< //cout<<"姓名性别出生日期员工类别当月工作时数每小时酬金月薪总额"< cout< < } }; Employee*E[100]; Employee*W[100]; Employee*S[100]; Employee*F[100]; Employee*M[100]; voiddisplayAll() { ifstreamin("employee.dat",ios: : binary); if(in.fail()) { cout<<"TheFileisnotsucessfullyopened"< } for(inti=0;i in.read((char*)E[i],sizeof(E[i])); for(intk=0;k E[k]->display(); in.close(); } voidADD() {intm; ofstreamoutput("employee.dat",ios: : app); if(output.fail()) { cout<<"Thefilewasnotsuccessfullyopened"< } cout<<"新增员工人数"; cin>>m; for(inti=0;i { chart; cout<<"输入第"< cout<<"选择(w: 一般工人m: 经理s: 销售人员f: 临时工)"; cin>>t; if(t=='w') { E[n]=newWorker(); E[n]->get_data(); E[n]->computeSalay(); output.write((char*)E[n],sizeof(E[n])); n++; } if(t=='m') { E[n]=newManager(); E[n]->get_data(); E[n]->computeSalay(); output.write((char*)E[n],sizeof(E[n])); n++; } if(t=='s') { E[n]=newSalesman(); E[n]->get_data(); E[n]->computeSalay(); output.write((char*)E[n],sizeof(E[n])); n++; } if(t=='f') { E[n]=newFloater(); E[n]->get_data(); E[n]->computeSalay(); output.write((char*)E[n],sizeof(E[n])); n++; } }; output.close(); } //排序 voidPaixu() { ifstreamin("employee.dat",ios: : binary); for(intp=0;p { in.read((char*)E[p],sizeof(E[p])); } in.close(); inti,j; Employee*temp; intswap; for(i=0;i { swap=0; for(j=0;j if(E[j]->get_accumpay()>E[j+1]->get_accumpay()) { swap=1; temp=E[j]; E[j]=E[j+1]; E[j+1]=temp; } if(! swap)break; } ofstreamout("employee.dat",ios: : binary); for(intt=0;t out.write((char*)E[t],sizeof(E[t])); out.close(); } voidDELETE() { ofstreamout("employee.dat",ios: : binary); ifstreamin("employee.dat",ios: : binary); in.seekg(0); charsname[20]; cout<<"输入要删除的姓名: "; cin>>sname; for(inti=0;i {in.read((char*)E[i],sizeof(E[i])); if(strcmp(E[i]->get_name(),sname)==0) { for(intj=i;j { E[j]=E[j+1]; } E[n-1]=NULL; n--; } out.write((char*)E[i],sizeof(E[i])); } in.close(); out.close(); } voidFind() { ifstreamin("employee.dat",ios: : binary); charsname[20]; cout<<"输入要查询的姓名: "; cin>>sname; for(inti=0;i {in.read((char*)E[i],sizeof(E[i])); if(strcmp(E[i]->get_name(),sname)==0) { E[i]->display(); } elseif(i==n)cout<<"此人不存在"< } } voidsort() { ofstreamout1("Worker.dat",ios: : binary); ofstreamout2("Floater.dat",ios: : binary); ofstreamout3("Salesman.dat",ios: : binary); ofstreamout4("Manager.dat",ios: : binary); ifstreamin1("Worker.dat",ios: : binary); ifstreamin2("Floater.dat",ios: : binary); ifstreamin3("Salesman.dat",ios: : binary); ifstreamin4("Manager.dat",ios: : binary); for(inti=0;i { if(strcmp(E[i]->get_Staffcategory(),"Worker")==0) { W[J]=newWorker(); W[J]=E[i]; out1.write((char*)W[J],sizeof(W[J])); //W[J]->display(); J++; } if(strcmp(E[i]->get_Staffcategory(),"Salesman")==0) {S[K]=newSalesman(); S[K]=E[i]; out3.write((char*)S[K],sizeof(S[K])); //S[K]->display();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 设计 报告