C++设计报告

时间:2024.3.10

C++课程设计

班级:通信0702 姓名:

学号:0207105230 指导老师:

摘 要

C++是由C发展而来的,与C兼容。所以它可以用于面向过程的结构化程序设计,但是它又有自己的特点,它也可以用于面向对象的程序设计,是一种功能强大的混合型的程序设计语言。

虽然C++仍然允许使用从C继承来的传统用法,但是仍然提倡使用C++的新方法。面向对象的程序设计主要有四个特点:封装,继承,多态,抽象。学好C++,绝不是一个纯技术的问题,需要综合考虑多方面的因素,作出合理的决策和安排。因此必须强调多编程,多上机实践。本次课设三个题目要求设计管理系统,我选择了公司人员信息管理系统,编写的程序涵盖了C++语言中的封装,继承,多态(虚函数的使用),文件操作。在设计过程中我尽量秉持着靠近实际应用的原则,用心的从一个管理者的角度出发并解决了自己在程序中的多处不足和缺陷,例如在输入编号设计中,设计了关于数据有效性的操作等。在系统设计

中我加强了界面的美观设计,使程序在简洁的基础上可读性更强,更人性化!最后我在设计过程中也尝试了创新的方法,也收到了很好的效果。总之,两周的课设过去了,我感觉自己在整体上有了一个很大的提高,知识更加系统化,理论化,我会继续努力和不断地钻研!!! 本文利用Microsoft Visual C++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 课程设计环境

本次课设采用的是Microsoft Visual C++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系统流程图

C设计报告

C设计报告

C设计报告

C设计报告

C设计报告

C设计报告

C设计报告

C设计报告

C设计报告

3.2.2 程序清单

1、main 函数:实现各个参数的定义及赋初值,提供选择界面;

2、基类:定义参数、相关函数以及虚函数

3、派生类:实现新增员工信息、删除员工信息、员工信息搜索(按姓名)、员工信息统计(按姓名或工资或类别)、员工信息分类存储、员工信息导入、按工资排序、退出等功能。

3.2.3源程序代码:

#include

C设计报告

#include

#include #include #include #include int n=0; //统计雇员的人数 int K=0; //统计销售的人数 int H=0; //统计临时工人的人数 int M0=0; //统计经理的人数 int J=0; //统计一般工人的人数 class Employee { protected: char name[20];//姓名 char gender[20];//性别 char date[20]; //出生日期 float accumPay; //月薪总额 char Staffcategory[20]; public: Employee(){accumPay=0;} ~Employee(){} void set_name(char *na){strcpy(name,na);} void set_gender(char *ge){strcpy(gender,ge);} void set_date(char *da){strcpy(date,da);} void set_Staffcategory(char *staff){strcpy(Staffcategory,staff);} void set_accumpay(float accu){accumPay=accu;} char *get_name(){return name;} char *get_gender(){return gender;} char *get_date(){return date;} float get_accumpay(){return accumPay;} char *get_Staffcategory(){return Staffcategory; } virtual void computeSalay()=0; virtual void get_data() { cout<<"(姓名 性别 出生日期 员工类别)"; cin>>name>>gender>>date>>Staffcategory; } virtual void display() { cout<

};

//普通工人

class Worker:public Employee

{

private:

float dayRate; //每天酬金

int workDays; //当月工作天数

public:

Worker(){dayRate=180;}

virtual void get_data()

{

cout<<"(姓名 性别 出生日期 员工类别 工作天数)";

cin>>name>>gender>>date>>Staffcategory>>workDays;

}

float get_dayRate(){return dayRate;}

int get_workDays (){return workDays;}

void computeSalay(){accumPay=dayRate*workDays;}

void display()

{

//cout<<"一般工人显示数据如下:"<

//cout<<"姓名 性别 出生日期 员工类别 当月工作天数 每天酬金 月薪总额"<

cout<

<

}

};

//销售人员

class Salesman:public Employee

{

private:

float commRate;//每件产品提成额

float sales; //销售的产品数量

float salary; //基本工资

public:

Salesman()

{

commRate=8;

salary=3000;

}

virtual void get_data()

{

cout<<"(姓名 性别 出生日期 员工类别 销售产品数量)";

cin>>name>>gender>>date>>Staffcategory>>sales;

}

void computeSalay(){accumPay=commRate*sales+salary;}

void display()

{

//cout<<"销售人员数据显示数据如下:"<

//cout<<"姓名 性别 出生日期 员工类别 销售的产品总量 每件产品提成额 基本工资"

//<<" "<<"月薪总额";

cout<

<

}

};

//经理

class Manager:public Employee

{

private:

float monthSalary;//月工资

public:

Manager(){monthSalary=10000;}

virtual void get_data()

{

cout<<"(姓名 性别 出生日期 员工类别)";

cin>>name>>gender>>date>>Staffcategory;

}

float get_monthSalary(){return monthSalary;}

void computeSalay(){accumPay=monthSalary;}

void display()

{

//cout<<"经理显示数据如下:"<

//cout<<"姓名 性别 出生日期 员工类别 月薪总额"<

<

}

};

//临时工

class Floater:public Employee

{

private:

float hourRates; //每小时酬金

int workHours; //当月工作时数

public:

Floater(){hourRates=15;}

virtual void get_data()

{

cout<<"(姓名 性别 出生日期 员工类别 当月工作时数)";

cin>>name>>gender>>date>>Staffcategory>>workHours;

}

float get_hour_Rates(){return hourRates;}

int get_workHours(){return workHours;}

void computeSalay(){accumPay=hourRates*workHours;}

void display()

{

//cout<<"一般工人显示数据如下:"<

//cout<<"姓名 性别 出生日期 员工类别 当月工作时数 每小时酬金 月薪总额"<

cout<

<

}

};

Employee *E[100];

Employee *W[100];

Employee *S[100];

Employee *F[100];

Employee *M[100];

void displayAll()

{

ifstream in("employee.dat",ios::binary);

if(in.fail())

{

cout<<"The File is not sucessfully opened"<display(); in.close(); } void ADD() { int m; ofstream output("employee.dat",ios::app); if(output.fail()) { cout<<"The file was not successfully opened"<>m; for (int i=0;i>t; if(t=='w') { E[n]=new Worker(); E[n]->get_data(); E[n]->computeSalay(); output.write((char*)E[n],sizeof(E[n])); n++; } if(t=='m') { E[n]=new Manager() ; E[n]->get_data(); E[n]->computeSalay(); output.write((char*)E[n],sizeof(E[n])); n++; } if(t=='s')

{ E[n]=new Salesman(); E[n]->get_data(); E[n]->computeSalay(); output.write((char*)E[n],sizeof(E[n])); n++; } if(t=='f') { E[n]=new Floater(); E[n]->get_data(); E[n]->computeSalay(); output.write((char*)E[n],sizeof(E[n])); n++; } }; output.close(); } //排序 void Paixu() { ifstream in("employee.dat",ios::binary); for(int p=0;pget_accumpay()>E[j+1]->get_accumpay()) { swap=1; temp=E[j]; E[j]=E[j+1];

E[j+1]=temp; } if(!swap)break; } ofstream out("employee.dat",ios::binary); for(int t=0;t>sname; for(int i=0;iget_name(),sname)==0) { for(int j=i;j

cout<<"输入要查询的姓名:"; cin>>sname; for(int i=0;iget_name(),sname)==0) { E[i]->display(); } else if(i==n)cout<<"此人不存在"<get_Staffcategory(),"Worker")==0) { W[J]=new Worker(); 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]=new Salesman(); S[K]=E[i]; out3.write((char*)S[K],sizeof(S[K])); //S[K]->display(); K++; }

if(strcmp(E[i]->get_Staffcategory(),"Floater")==0) { F[H]=new Floater(); F[H]=E[i]; out2.write((char*)F[H],sizeof(F[H])); //F[H]->display(); H++; } if(strcmp(E[i]->get_Staffcategory(),"Manager")==0)

{

M[M0]=new Manager();

M[M0]=E[i];

out2.write((char*)M[M0],sizeof(M[M0]));

//M[M0]->display();

M0++;

}

}

cout<<"一般工人信息显示如下:"<

for(int b=0;b

{

in1.read((char*)W[b],sizeof(W[b]));

W[b]->display();

}

cout<<"销售工人显示如下:"<

for(int c=0;c

{

in3.read((char *)S[c],sizeof(S[c]));

S[c]->display();

}

cout<<"临时工信息显示如下:"<

for (int d=0;d

{

in2.read((char *)F[d],sizeof(F[d]));

F[d]->display();

}

cout<<"经理信息如下:"<

for(int e=0;e

{

in4.read((char *)M[e],sizeof(M[e]));

M[e]->display();

}

}

void main()

{ system ( "color 1f");

int choice=1;

while(choice!=0)

{

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cin>>choice;

switch(choice)

{

case 1:do{

cout<<"(1:新增,2:删除信息,3:员工信息检索,4:员工信息分类储存,5:员工信息导入,6:按工资排序,7:退出)"<

cout<<"请选择:";

int m;

cin>>m;

switch(m)

{

case 1:

ADD();

displayAll();

break;

case 2:

DELETE();

displayAll();

break;

case 3:

Find();

break;

case 4:

sort();

break;

case 5:

displayAll();

break;

case 6:

Paixu();

displayAll();

break;

case 7:

cout<

cout<

cout<

break;}

}while(1);}

}

}

运行结果:

C设计报告

C设计报告

总 结

本次课设我做的是公司人员管理系统,其优点是有友好的界面,可以有效地进行数据的增加,更改,删除,查找,显示和保存,并且在输入数据时有关于数据有效性的判断。但是也有一些缺点,就是删除数据时是把内容赋为空值,而不能把他从内存中彻底删除,导致内存空间的浪费。究其原因主要是对链表的掌握不熟练,所以以后要加强对链表知识的学习。总之,一周的课设,让我感觉自己在整体上有了一个很大的提高,知识更加系统化,理论化,我会继续努力和不断地钻研!!!

致 谢

本课题在选题及进行过程中得到林志强老师的悉心指导。论文行文

过程中,林志强老师多次帮助我分析思路,开拓视角,在我遇到困难想放弃的时候给予我最大的支持和鼓励。林志强老师严谨求实的治学态度,踏实坚韧的工作精神,将使我终生受益。再多华丽的言语也显苍白。在此,谨向林志强老师致以诚挚的谢意和崇高的敬意。同时也要感谢我的同学们在编写代码的过程中给予我的帮助。

参考文献

[1]吕凤翥. C++语言基础教程.清华大学出版社 .19xx年3月第一版

[2]郑莉 董渊 张瑞丰. C++语言程序设计. 清华大学出版社.. 2005

[3]张国峰.C++语言及其程序设计教程. 电子工业出版社. 1997

[4]和克智.C++程序设计. 西安交通大学出版社.2004

[5]张基温.C++程序开发教程. 清华大学出版社.2002-12

[6]揣锦华.C++程序设计语言. 西安电子科技大学出版社.2003-2

[7]裘宗燕.c++程序设计语言(特别版). 机械工业出版社.2002-7

[8]候捷译.C++设计新思维. 华中科技大学出版社.2003-3

更多相关推荐:
毕业设计报告范文

山东轻工业学院毕业设计论文开题报告注课题类型填写工程设计技术开发软件工程理论研究等同时注明X真实课题Y模拟课题Z虚拟课题

工程设计工作报告范本

金泉水库除险加固工程竣工验收工程设计工作报告贵州省黔东南州水利电力勘察设计院20xx年5月10日1审定校审编写刘家智2目录1工程概况11工程现状及工程建设的必要性12设计工作概况13工程范围和建设内容2工程规划...

电路设计报告范文

成都理工大学计算机辅助电路分析题目名称由LM10等构成的直流表头放大电路学院名称核技术及其自动化工程学院所属专业电气工程及其自动化学生姓名**学号***班级**课程设计由LM10等构成的直流表头放大电路一、设计…

设计报告格式

吉林师范大学博达学院计算机与信息科学系课程设计报告课程名称设计题目画笔程序专业信息科学技术姓名李瑞雪班级学号指导教师侯锟吕凯20xx年3月目录课程设计题目审批表2完成情况一览表3摘要4一设计分析5二设计要求5三...

设计报告格式及要求

设计报告格式及要求一报告的基本格式与层次编排1基本格式报告题目居中3号黑体摘要顶格小4宋加粗或小4黑摘要正文200300字可另起行也可与摘要2字之间空1字接排小4宋体关键词35个顶格小4宋体关键词与正文之间空两...

设计专业实习报告范文

引言家于丹教授对家的定义是这样解释的家是一个人回到原生态自己的地方可见家的舒适性对于生活节奏日渐加快的现代人来说是多么重要设计是连接精神文明与物质文明的桥梁人类寄希望于通过设计来改造世界改善环境提高人类生存的生...

数据库设计报告范文1

图书管理系统的开发与实现摘要:图书管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。其能够完成对图书的添加、删除、借阅、归还和对读者的管理等功能的操作。…

初步设计审查报告 - 范本

十甲花园东区22楼初步设计审查会议纪要20xx年7月27日上午930潍坊市住房和城乡建设局组织召开了十甲花园东区22楼工程初步设计审查会议专家委员会由潍坊市施工图审查中心潍坊市建筑设计研究院山东景城建筑设计有限...

工程设计质量检查报告范本

工程设计质量检查报告

信息化建设项目设计报告范本

密级内部项目编号XXW200文档编号XXW200上海市青浦公安局信息化建设项目设计报告上海市青浦公安局二OO九年十一月目录一项目简介3二信息系统应用现状3三需求及必要性分析包括功能与性能需求等4四建设方案6五实...

电子设计报告模板

题目简易频率特性测试仪E题作者纪强朱志兵张雅希赛前辅导教师黄光明文稿整理辅导老师黄光明摘要本系统是基于零中频正交解调原理的简易频率特性测试仪采用AD9854DDS集成芯片C8051F020作为控制平台实现正交扫...

啤酒瓶标签项目可行性研究报告评审方案设计(20xx年发改委标准案例范文)

啤酒瓶标签项目可行性研究报告评审方案设计20xx年发改委标准案例范文编制机构博思远略咨询公司360投资情报研究中心研究思路关键词识别1啤酒瓶标签项目可研2啤酒瓶标签市场前景分析预测3啤酒瓶标签项目技术方案设计4...

设计报告(33篇)