c++课程设计 10Word文件下载.docx
《c++课程设计 10Word文件下载.docx》由会员分享,可在线阅读,更多相关《c++课程设计 10Word文件下载.docx(22页珍藏版)》请在冰豆网上搜索。
第2章课程设计内容2
2.1课题描述2
2.2系统设计3
2.2.1功能分析3
2.2.2面向对象设计4
2.2.2类成员描述6
2.3程序实现9
2.3.1源码分析9
2.3.2运行结果17
第3章课程设计总结19
参考文献20
第1章课程设计目的与要求
1.1设计目的
将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。
通过课程设计,学生在下述各方面的能力应该得到锻炼:
(1)进一步巩固、加深学生所学专业课程《C++语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握面向对象程序设计的方法。
(6)熟练掌握C++语言的基本语法,灵活运用各种数据类型。
(7)进一步掌握在集成环境下如何调试程序和修改程序。
1.2实验环境
硬件要求能运行Windows操作系统的微机系统。
C++语言应用程序开发软件使用:
VC++系统,或其他C++语言应用程序开发软件。
1.3预备知识
熟悉C++语言程序设计的基本知识及VC++编辑器的使用方法。
1.4设计要求
1.仔细分析设计题目,画出程序流程图,编写程序源代码。
2.积极上机调试源程序,增强编程技巧与调程能力。
3.认真书写课程设计预习报告,课程设计说明书。
4.遵守课程设计要求和机房管理制度,服从指导教师的安排,确保课程设计的顺利完成课程设计内容。
第2章课程设计内容
2.1课题描述
C++系统作为信息管理系统的一个分支,已逐渐成为现代信息化建设的重要组成部分,为高校提供了一个功能强大、安装部署方便、使用成本低、操作简捷的人事管理系统。
经过分析,使用c++开发工具,通过实现数据的输入、查找、统计、输出等功能,进一步了解和学习面向对象程序设计的思想和理念;
并且被广泛地应用于各种程序设计中。
该程序运用图形界面操作方式,方便各行个业的人使用,也避免了不了解计算机的人不会操作这个系统的麻烦,并且功能齐全。
通过c++这种面向对象程序设计结构化语言特点可以将高校人事管理系统做成操作窗口清新、大方,操作方便。
现在绝大多的高校人事管理系统还处于手工作业状态,效率很低,而且容易出错,不便于管理,还不排除有不真实的现象。
我们认为有必要开发一个中小型高校人事管理系统的管理软件。
本系统开发实现的模块有添加人员信息、修改人员信息、删除人员信息、查找人员信息、数据库装入、等。
其中添加人员信息模块主要是用来添加人员的编号和个人简历相关信息,删除已经离职的人员信息。
同时本文还分析了软件工程、数据库技术的相关理论。
本系统具有良好的可移植性和可修改性。
系统简单,易于操作,对相关的具有对人员信息管理的企业具有一定的使用价值。
算法设计方面:
本系统在算法方面采用了类的概念,其中有类的定义,类的构造函数的定义,析构函数的定义,内联函数的定义,类的初始化。
在ID号查找过程中采用了编号查找法,能够快速的找到所要找的数据,在程序中还广泛使用了函数的实参和形参的调用方法,循环语句,条件判断语句等技术。
程序设计中的技术重点:
本程序中应用了动态数据结构,在程序运行期间根据需要动态申请内存,并建立元素之间的线形关系。
链表是一种动态数据结构,可以用来表示顺序访问的线形群体。
链表是由一系列的结点组成,结点在运行说产生。
每一个结点包括数据域和指向链表中下一个结点的指针。
1.问题识别
(1)功能需求:
明确所开发的软件必须具备什么样的功能。
(2)性能需求:
明确待开发的软件的技术性能指标。
(3)用户界面需求:
明确人机交互方式、输入输出数据格式。
2.分析与综合,导出软件的逻辑模型
分析人员对获取的需求,进行一致性的分析检查,在分析、综合中逐步细化软件功能,划分成各个子功能。
用图文结合的形式,建立起新系统的逻辑模型。
3.编写文档
(1)编写“功能规格说明书”,把双方共同的理解与分析结果用规范的方式描述出来,作为今后各项工作的基础。
(2)编写初步目的与需求,着重反映被开发软件的用户功能界面和用户使用的具体要求,需求能强制分析人员从用户使用的观点考虑软件。
(3)编写确认测试计划,作为今后添加信息和删除信息的依据。
(4)修改完善软件开发计划。
在需求分析阶段对待开发的系统有了更进一步的了解,所以能更准确地估计开发成本、进度及资源要求,因此对原计划要进行适当修正。
2.2系统设计
2.2.1功能分析
一、目的与要求:
1.目的:
能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
2.基本要求:
(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;
(2)要求在设计的过程中,建立清晰的类层次;
(3)在系统设计中要分析和定义各个类,每个类中要有各自的属性和方法;
(4)在系统的设计中,要求运用面向对象的机制(类)来实现系统功能。
二、设计方法和基本原理:
1.功能要求:
某高校,主要人员有:
在职人员(行政人员、教师、一般员工)、退休人员、返聘人员和临时工。
现在,需要存储这些人员的人事档案信息:
编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、来院时间。
要求:
(1)添加删除功能:
能根据学院人事的变动情况,添加删除记录;
(2)查询功能:
能根据编号和姓名进行查询;
(3)编辑功能(高级):
根据查询对相应的记录进行修改,并存储;
(4)保存功能:
能对输入的数据进行相应的存储,要求重载插入和提取符以完成数据的保存和打开。
(5)人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。
2.问题的解决方案:
根据系统功能要求,可以将问题解决分为以下步骤:
(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
(2)分析系统中的各个实体及它们之间的关系包括属性和行为;
(3)根据问题描述,设计系统的类层次;
(4)完成类层次中各个类的描述(包括属性和方法);
(5)完成类中各个成员函数的定义;
(6)完成系统的应用模块;
(7)功能调试。
2.2.2面向对象设计
面向对象程序设计方法是通过增加软件的可扩充性和可重用性来提高程序员的编程能力的。
面向对象程序的基本元素是对象面向对象的主要结构特点是:
第一,程序一般由类的定义和类的使用两部分组成,在主程序中定义各对象并规定它们之间传递消息的规律;
第二,程序间的一切操作都是通过向对象发送消息来实现的,对象接收到消息后,启动有关方法完成相应的操作;
第三,类由继承关系产生相互间的联系。
一个程序中涉及到的类,可以由程序设计者自己定义,也可以使用现成的类。
尽量使用现成的类,是面向对象程序设计范型所倡导的程序设计风格。
本系统定义两个类,一个person类,包含在职人员(行政人员、教师、一般员工)、退休人员、返聘人员和临时工。
员工信息包括编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、来院时间。
定义一个school类,在里面实现数据的添加、删除、修改、查找、显示和退出。
这个程序是用派生,继承来实现people,date,student,teacher,garduate之间的联系;
具体的是student从people里面继承它的公有和保护部分,teacher从people里面继承它的公有和保护部分;
graduate从student里面继承它的私有和保护部分;
图2.1继承类和派生类
(1)设计一个人事管理的People(人员)类,考虑到通用性。
这里只抽象出所有类型人员都具有的属性:
name(姓名),number(编号),sex(性别),等。
其中“编号”定义为一个“日期”类(具有属性:
year(年))内嵌子对象,用成员函数实现对人员信息的录入和显示等必要功能操作(自己独立思考设计),要求包括:
构造函数和析构函数,拷贝构造函数,内联成员函数。
图2.2person类UML图
(2)从People(人员)类派生出person类,添加属性;
编号;
从People类派生出name(教师)类,添加属性:
职务,部门;
从student类中派生出sex(性别)类,添加属性;
导师teacheradviser(为(教师类内嵌子对象);
注意虚基类的使用,重载相应的成员函数。
图2.3school类UML图
(3)定义一个对People类对象数组按编号排序的函数,一个按编号查找people对象的函数。
2.2.2类成员描述
这个程序是高校人事的一个管理程序,通过屏幕的提示和键盘的输入来实现对于高校人事信息的添加,修改,删除,查找等效果。
并且在输入数据之后可以整理查看,实现人事系统的管理。
高校人事管理系统是针对各个学校对现有员工和学生管理平台。
主页功能模块主要包括以下功能模块:
人员管理:
主要包括浏览人员信息、添加人员信息、人员信息的修改、存储数据库、删除人员信息等功能。
图2.4高校人事管理系统模块图
根据类的操作设计系统流程图:
(1)Person:
:
add()
图2.5Person:
add部分流程图
(2)Person:
delete()
图2.6Person:
delete部分流程图
(3)Person:
change()
图2.7Person:
change部分流程图
(4)Person:
find()
图2.8Person:
find部分流程图
2.3程序实现
2.3.1源码分析
一、主函数部分
#include<
iostream.h>
string.h>
fstream.h>
iomanip.h>
#include"
person.h"
School.h"
voidmain()
{
Schoolobj;
intc;
do
{//选择界面
cout<
<
"
\t\t高校人事管理系统"
endl;
\t1.增加人员资料"
\t2.删除人员信息"
\t3.修改人员信息"
\t4.查询人员信息"
\t5.统计人员信息"
\t6.数据存盘"
\t7.数据装入"
\t8.显示所有信息"
\t9--退出"
cout<
请选择(1-9):
;
cin>
>
c;
switch(c)
{
case1:
obj.add();
break;
//调用添加函数,添加爱人员
case2:
obj.removedatnum();
//调用删除函数,删除人员
case3:
obj.upperson();
//调用修改函数,修改人员信息
//按选定参数查询
case4:
intnm;
1-通过编号。
2-通过姓名。
请选择:
cin>
nm;
if(nm==1)
obj.find1();
else
obj.find2();
};
case5:
obj.stat();
//调用统计函数,统计人员信息
case6:
obj.save();
//调用保存数据函数,数据存盘
case7:
obj.load();
//调用载入数据函数,数据装入
case8:
obj.pri();
//调用输出函数,显示所有信息到屏幕
}
}while(c!
=9);
}
二、定义person类部分
classperson
{//人员类似有数据成员
private:
intno;
chartype[20];
charname[20];
charsex[10];
intage;
chartime1[20];
chartime2[20];
charpos[20];
chartechpos[20];
charparty[20];
charstudy[30];
person*mynext;
public:
//构造函数一
person(intnnum,charntype[],charnname[],charnsex[],intnage,charntime1[],charntime2[],charnpos[],charntechpos[],charnparty[],charnstudy[])
no=nnum;
strcpy(type,ntype);
strcpy(name,nname);
strcpy(sex,nsex);
strcpy(time1,ntime1);
age=nage;
strcpy(time2,ntime2);
strcpy(pos,npos);
strcpy(techpos,ntechpos);
strcpy(party,nparty);
strcpy(study,nstudy);
mynext=NULL;
//构造函数二
person(intnnum,charntype[],charnname[],charnsex[],intnage,charntime1[],charntime2[],
charnpos[],charntechpos[],charnparty[],charnstudy[],person*next)
/*某高校,主要人员有:
现在,需要存储这些人员的人事档案信息:
编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间。
*/
mynext=next;
voidsetnext(person*next)
{mynext=next;
person*getnext()
{returnmynext;
三、定义school类部分
classSchool
person*myfirst;
intfirstnum;
School()
{myfirst=NULL;
//构造函数,将数据初始化
School(intnnu,charntyp[],charnnam[],charnse[],intnag,charntim1[],charntim2[],charnpo[],charntechpo[],charnpart[],charnstud[])
myfirst=newperson(nnu,ntyp,nnam,nse,nag,ntim1,ntim2,npo,ntechpo,npart,nstud);
}
//在最后插入新成员函数
voidinsertatlast(intnnum,charntype[],charnname[],charnsex[],intnage,charntime1[],charntime2[],charnpos[],charntechpos[],charnparty[],charnstudy[])
person*next=myfirst;
if(next==NULL)
myfirst=newperson(nnum,ntype,nname,nsex,nage,ntime1,ntime2,npos,ntechpos,nparty,nstudy);
while(next->
getnext()!
=NULL)
next=next->
getnext();
next->
setnext(newperson(nnum,ntype,nname,nsex,nage,ntime1,ntime2,npos,ntechpos,nparty,nstudy,next->
getnext()));
//-------------------------------------------------------------
//从键盘输入数据,并创建相应对象函数,
voidinput(intr)
intnage;
charntype[20],nname[20],nsex[20],ntime1[20],ntime2[20],npos[20],ntechpos[20],nparty[20],nstudy[20];
请输入编号为"
r<
的成员的信息"
输入职工分类码[行政人员,教师,一般员工,退休人员,返聘人员,临时工]:
ntype;
输入姓名:
nname;
输入性别:
nsex;
输入年龄:
nage;
参加工作时间:
ntime1;
输入来院时间:
ntime2;
输入职务[无,科级,处级,地级]:
npos;
输入职称[无,初级,中级,高级]:
ntechpos;
输入加入党派[群众,中共党员,民主党派]:
nparty;
输入学历[小学,初中,高中,大专,大学,硕士,博士]:
nstudy;
insertatlast(r,ntype,nname,nsex,nage,ntime1,ntime2,npos,ntechpos,nparty,nstudy);
//从键盘输入数据,并创建相应对象函数二,
voidinput1(person*ahead)
编号:
setiosflags(ios:
left)<
"
ahead->
getname()<
性别:
getsex()<
年龄:
getage()<
职工类型:
gettype()<
职务:
getpos()<
职称:
gettechpos()<
学历:
getstudy()<
政治面貌:
getparty()<
来院时间:
gettime1()<
gettime2()<
//---------------------------------------------
//增加员工函数
voidadd()
inti,a,b;
person*p1=myfirst;
if(p1==NULL)
请输入编号:
i;
input(i);
if(p1->
getnext()==NULL)
a=p1->
getnum()+1;
input(a);
while(p1->
p1=p1->
b=p1->
input(b);
//查找人员函数
boolfind1()
intid;
person*ahead=myfirst;
person*follow=ahead;
id;
信息如下:
if(ahead==NULL)