c++课设报告.docx
《c++课设报告.docx》由会员分享,可在线阅读,更多相关《c++课设报告.docx(13页珍藏版)》请在冰豆网上搜索。
c++课设报告
封皮
(按学校要求手工填写)
成绩评定表
学生姓名:
班级学号:
专业:
通信工程
课程设计题目:
项目管理系统
评
语
组长签字:
成绩
日期
年月日
课程设计任务书
学院
信息科学与工程学院
专业
通信工程
学生姓名
学号
设计题目
项目管理系统
内容及要求:
该系统处理项目的相关信息,项目信息主要包括:
项目编号、项目名称、等级、负责人等内容,要求实现以下功能:
(1)建立项目类。
(2)项目信息初始化。
(3)项目信息的添加、修改、删除、查找。
(4)项目信息的输出。
(5)在项目信息中按项目编号、项目名称排序。
进度安排:
第17周:
分析题目,查阅课题相关资料,进行类设计、算法设计;
第18周:
程序的设计、调试与实现;
第19周:
程序测试与分析,撰写课程设计报告,进行答辩验收。
指导教师(签字):
年月日
学院院长(签字)
年月日
1需求分析
该系统处理项目的相关信息,项目信息主要包括:
项目编号、项目名称、等级、负责人等内容,要求实现以下功能:
(1)建立项目类。
(2)项目信息初始化。
(3)项目信息的添加、修改、删除、查找。
(4)项目信息的输出。
(5)在项目信息中按项目编号、项目名称排序。
随着信息化的普及一个企业按传统做法,设定一个项目后,参与的会有很多部门,彼此信息统计需要太多时间影响效率。
项目管理系统可对项目的全部工作进行高效的管理,便于项目经理对项目信息进行临时调整和修改,转入转出资料、制作报表、计算预算值并对时间利用、成本、人员分配、质量、风险的多种因素进行综合考虑,制定计划从而充分的实现高运营效率。
项目管理系统还可同时处理多个子项目,对项目实施跟踪和监督针,对各种情况做出假设制定应对策略且文件项目的保密程度高,实用型高。
2算法基本原理
设有4个项目分别是:
(1)项目编号:
8;项目名称:
a;项目等级:
4级;负责人:
john;
(2)项目编号:
9;项目名称:
b;项目等级:
3级;负责人:
lin;
(3)项目编号:
7;项目名称:
c;项目等级:
6级;负责人:
sheng;
(4)项目编号:
4;项目名称:
d;项目等级:
7级;负责人:
hong;
此时需要的操作为:
(1)加入项目:
编号:
3;名称:
e;等级:
2;负责人:
ming。
(2)修改:
修改项目4。
。
(3)查找等级为2级的项目。
(4)删除项目7
(5)按编号和名称排序。
第一步,添加过程。
运行添加程序,输入(编号:
3;名称:
e;等级:
2;负责人:
ming。
)
会将项目3加入列表。
此时共有五个项目。
第二步,修改过程。
运行修改程序,输入项目编号(如4)之后输入新的4号项目的名称、等级、负责人等信息。
第三步,查找过程。
运行查找程序,输入按等级查找,查找等级为2的项目。
输出结果为3号项目。
第四步,删除过程。
运行删除程序,输入删除项目的编号(如输入7)会将7号项目删除此时剩余4个项目。
第五步,排序过程。
选择按编号排序,则输出次序为3号、4号、8号、9号。
选择按名称排序,则输出次序为a项目、b项目、d项目、e项目。
3类设计
从算法分析可以看出,本设计面临的关键问题是对各个项目信息的输入,删除,修改,查找。
可定义一个项目类project、一个新数据类Rdata作为基类。
然后由项目类继承出提取名称(getname)、提取项目总数(gettag)、提取编号(getnumber)、提取负责人(getcharge)、提取等级(getlevel)、输入名称和负责人(setname)、输入编号和等级(setnum)、删除类(del)。
派生出虚函数添加项目类(addproject)和输出类(output)。
新数据类Rdata声明其构造函数、输出函数(output)、排序函数(sort)、操作函数(projectdate)、重新定义项目添加函数(addproject)和析构函数(~RData)。
定义初始化函数(clear)、按编号查找函数(equal)。
其中,项目类project中的getname、gettag、getnumber、getcharge、getlevel、setname、setnum负责输入和提取信息,del负责删除信息,派生出的虚函数output负责对项目信息的输出,addproject负责新项目的添加。
新数据类Rdata类中的output负责最终信息的输出,sort负责对项目信息的按名称排序和按序号排序,projectdate负责对项目信息进行添加、删除、修改、查找等操作。
clear负责清空当前的所有信息,equal负责按编号查找项目,被重新定义的addproject负责添加项目信息,析构函数用来释放内存。
4详细设计
整个程序分为三个独立的文档,project文件中包括addproject、del、getcharge、getleval、getname、getnumber、gettag、output、project、setname、setnum的声明,RData文件中包括addproject、clear、equal、output、projectdate、RData、~RData、sort函数的声明用于具体步骤的实现。
Globals文件包括程序的主函数。
类的接口设计
#include
#include<>
#include
usingnamespacestd;
#definem100
#defineM10
classprojectetnumber())projectid&&pro[i].gettag()==0;
{
return&pro[i];
}
returnNULL;
}
voidoutput();ettag()==0)utput();
}
intRData:
:
addproject(intn,char*na,intnn,char*nb)ddproject(n,na,nn,nb);项目编号排序:
\n";
cout<<"2.按项目名称排序:
\n";
cout<<"请输入要进行的操作:
"<cin>>choose;
if(choose==1)etnumber()>b[i].getnumber())
{
temp=b[i];
b[i]=b[j];
b[j]=temp;
}
}
}
for(i=0;i<=c;i++)
{
b[i].output();
}
if(choose==2)etname(),b[i].getname())>=0)
{
temp=b[i];
b[i]=b[j];
b[j]=temp;
}
}
}
for(i=0;i<=c;i++)
{
cout<<"项目名称:
";
cout<
cout<<"项目编号:
";
cout<
cout<<"项目等级:
";
cout<
cout<<"项目负责人:
";
cout<
cout<}
}
}
voidRData:
:
projectdate()加\n";
cout<<"2.修改\n";
cout<<"3.删除\n";
cout<<"4.查找\n";
cout<<"5.退出\n";
cin>>choice;
switch(choice)
{
case'1':
;del目操作\n";
cout<<"0.退出\n";
cin>>choice;
switch(choice)
{
case'1':
;
system("cls");
();序运行结果如图1所示。
图1程序运行结果
图2程序运行结果
图1为程序开始运行的初始界面,选择1则进行下一步操作,选择0退出。
图2为选择1后执行操作函数的界面,选择不同的数字执行不同的操作。
2.选择1.添加程序运行的结果如图3所示
图3程序运行结果
图3为选择添加程序之后的输入结果,需要调用output函数,添加完成后回到主界面。
3.选择2.修改程序运行的结果如图4所示
图4程序运行结果
图4为选择修改程序之后的输入结果,需要先查找之后进行修改,完成修改后返回主界面。
4.选择3删除程序运行的结果如图5所示
图5程序运行结果
图5为选择删除程序之后的运行结果,输入项目编号后可完成对应的项目删除。
完成后返回主界面。
5.选择4查找程序运行的结果如图6所示
图6程序运行结果
图6为选择查找程序之后的运行结果,输入项目编号后可完成对应的项目查找并将找到的项目输出。
完成后返回主界面。
运行结果分析
整个程序中的项目存储采用的是动态内存分配的方式。
基类用于数据输入提取,公有派生类output用于项目信息的输出,虚函数addproject用于项目信息的添加,除了继承基类的基本特征之外,结合问题的实际需要,增加按编号查找的指针equal,使基类进一步具体化、实用化,使项目信息进行各种处理时更方便快捷。
程序的访问控制也是根据问题的需要而设计的。
基类project的数据成员的存储、维护着项目信息,这些都是在进行查找,删除等一系列操作所必须访问和使用的。
利用保护成员特征,将基类数据成员的访问控制属性设置为保护型,对于其派生类可以自由调用,而对于类外的其余模块,这些数据无法访问。
这样,不影响整个程序对数据的实用又能很好的保护项目的信息。
在派生过程中,基类的构造函数和析构函数无法继承下来,因此在派生类中需要添加构造函数、析构函数来完成派生类的初始化和最后清理工作。
派生类的构造函数通过调用基类的构造函数来对基类数据进行初始化。
6基于MFC的图形界面程序开发
MFC的图形界面程序设计可在上述类设计的基础上进行改造,MFC的图形界面程序与DOS界面程序的主要不同点是:
MFC图形界面程序与DOS界面程序的输入输出方式不同,DOS界面程序采用字符交互式实现数据输入输出,主要通过cin,cout等I/O流实现,而MFC的图形程序界面采用标准Windows窗口和控件实现输入输出,因此必须在MFC类的框架下加入上面所设计的矩阵和方程组类,并通过图形界面的输入输出改造来完成。
基于MFC的图形界面程序设计
(1)界面设计
首先在VC中建立MFCAppWizard(exe)工程,名称为MFC界面,并在向导的Step1中选择Dialogbased,即建立基于对话框的应用程序,如下图7、图8所示。
图7建立MFCAppWizard(exe)工程
图8建立基于对话框的应用程序
将对话框资源中的默认对话框利用工具箱改造成如下界面,如图9所示。
图9项目信息操作程序界面设计
图9所示的界面中包含了16个StaticText控件,5个Button控件,和16个EditBox控件,控件的基本信息列表如下表1所示。
表1控件基本信息
控件类别
控件ID
控件Caption
说明
StaticText
IDC_STATIC
项目名称
添加操作使用
项目编号
项目等级
项目负责人
需要输入的项目编号
修改操作使用
项目名称
项目编号
项目等级
项目负责人
需要输入的项目编号
删除操作使用
删除是否成功
需要输入的项目编号
查找操作使用
项目名称
项目编号
项目等级
项目负责人
Botton
IDC_tianjia
执行添加操作
IDC_xiugai
执行修改操作
IDC_shanchu
执行删除操作
IDC_chazhao
执行查找操作
IDC_tuichu
执行退出操作
EditBox
IDC_TJname
名称
添加使用
IDC_TJnumber
编号
IDC_TJlevel
等级
IDC_TJcharge
负责人
IDC_XGINnumber
输入编号
修改使用
IDC_XGname
名称
IDC_XGnumber
编号
IDC_XGlevel
等级
IDC_XGcharge
负责人
IDC_SCINnumber
输入编号
删除使用
IDC_SCYON
是否成功
IDC_CZINnumber
出入编号
查找使用
IDC_CZname
名称
IDC_CZnumber
编号
IDC_CZlevel
等级
IDC_CZcharge
负责人
(2)代码设计
为了能够将对话框界面上的控件能够与代码联系起来,需要为16个EditBox控件建立MemberVariables,按Ctrl+w键进入MFCClassWizard界面,选择MemberVariables选项卡,可显示成员变量设置界面,如图10、图11所示。
图10成员变量设置界面
图11成员变量设置界面
通过该界面设置与16个EditBox控件对应的成员变量,具体如表2所示。
表2控件基本信息
控件ID
成员变量类型
成员变量名称
IDC_TJname
CString
m_TJname
IDC_TJnumber
Int
m_TJnumber
IDC_TJlevel
int
IDC_TJlevel
IDC_TJcharge
CString
m_TJcharge
IDC_XGINnumber
Int
m_XGINnumber
IDC_XGname
CString
m_XGname
IDC_XGnumbe
Int
m_XGnumbe
IDC_XGlevel
Int
m_XGlevel
IDC_XGcharge
CString
m_XGcharge
IDC_SCINnumber
Int
m_SCINnumber
IDC_SCYON
CString
m_SCYON
IDC_CZINnumber
Int
m_CZINnumber
IDC_CZname
CString
m_CZname
IDC_CZnumber
Int
m_CZnumber
IDC_CZlevel
Int
m_CZlevel
IDC_CZcharge
CString
m_CZcharge
下面是编写代码的重要阶段,由于自身水平所限,无法应用类。
所以选择直接通过按钮实施各项操作,下面是各个按钮的编写代码。
voidCMy2020Dlg:
:
Ontianjia()C++面向对象程序设计.北京:
清华大学出版社,2006版
[2]谭浩强.C语言程序设计.北京.清华大学出版社.2010版
[3]郑莉,董渊,张瑞丰.C++语言程序设计(第3版).北京:
清华大学出版社,2007版
[4]钱能.C++程序设计教程(第二版).北京:
清华大学出版社,2007版
[5]陈志泊,王春玲.面向对象的程序设计语言—C++.北京:
人民邮电出版社,2002版
[6]任美璇.基于校园网的学生信息管理系统(C++版)(第2版).北京:
机械工业出版社,2011版
[7]帕罗赛斯MFCWINDOWS程序设计清华大学出版社2007版