《最新c--课设报告(项目管理系统).doc》由会员分享,可在线阅读,更多相关《最新c--课设报告(项目管理系统).doc(43页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-datec-课设报告(项目管理系统)面向对象课程设计封 皮(按学校要求手工填写)成绩评定表学生姓名:班级学号:专 业:通信工程课程设计题目:项目管理系统评语组长签字:成绩日期 年 月 日课 程 设 计 任 务 书学院信息科学与工程学院专业通信工程学生姓名学号设计题目项目管理系统内容及要求:该系统处理项目的相关信息,项目信息主要包括:项目编号、项目名称、等级、负责人等内容,要求
2、实现以下功能:(1) 建立项目类。(2) 项目信息初始化。(3) 项目信息的添加、修改、删除、查找。(4) 项目信息的输出。(5) 在项目信息中按项目编号、项目名称排序。进度安排:第17周:分析题目,查阅课题相关资料,进行类设计、算法设计;第18周:程序的设计、调试与实现;第19周:程序测试与分析,撰写课程设计报告,进行答辩验收。指导教师(签字):年 月 日学院院长(签字)年 月 日目 录1 需求分析- 1 -2 算法基本原理- 1 -3 类设计- 2 -4 详细设计- 3-4.1 类的接口设计- 3 -4.2 类的实现- 6 -4.3 主函数设计- 12-5 DOS界面程序运行结果及分析-
3、13 -5.1 程序运行结果- 13 -5.2运行结果分析- 16 -6 基于MFC的图形界面程序开发- 17-6.1 基于MFC的图形界面程序设计- 17 -6.2 程序测试- 23-6.3 MFC程序编写总结-26 -7 参考文献- 27-1 需求分析该系统处理项目的相关信息,项目信息主要包括:项目编号、项目名称、等级、负责人等内容,要求实现以下功能:(1) 建立项目类。(2) 项目信息初始化。(3) 项目信息的添加、修改、删除、查找。(4) 项目信息的输出。(5) 在项目信息中按项目编号、项目名称排序。随着信息化的普及一个企业按传统做法,设定一个项目后,参与的会有很多部门,彼此信息统计需
4、要太多时间影响效率。项目管理系统可对项目的全部工作进行高效的管理,便于项目经理对项目信息进行临时调整和修改,转入转出资料、制作报表、计算预算值并对时间利用、成本、人员分配、质量、风险的多种因素进行综合考虑,制定计划从而充分的实现高运营效率。项目管理系统还可同时处理多个子项目,对项目实施跟踪和监督针,对各种情况做出假设制定应对策略且文件项目的保密程度高,实用型高。2 算法基本原理设有4个项目分别是:(1)项目编号:8;项目名称:a;项目等级:4级;负责人:john;(2)项目编号:9;项目名称:b;项目等级:3级;负责人:lin;(3)项目编号:7;项目名称:c;项目等级:6级;负责人:shen
5、g;(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号项目。第四步,删除过程。运行删除程序
6、,输入删除项目的编号(如输入7)会将7号项目删除此时剩余4个项目。第五步,排序过程。选择按编号排序,则输出次序为3号、4号、8号、9号。选择按名称排序,则输出次序为a项目、b项目、d项目、e项目。3 类设计从算法分析可以看出,本设计面临的关键问题是对各个项目信息的输入,删除,修改,查找。可定义一个项目类project、一个新数据类Rdata作为基类。然后由项目类继承出提取名称(getname)、提取项目总数(gettag)、提取编号(getnumber)、提取负责人(getcharge)、提取等级(getlevel)、输入名称和负责人(setname)、输入编号和等级(setnum)、删除类(
7、del)。派生出虚函数添加项目类(addproject)和输出类(output)。新数据类Rdata声明其构造函数、输出函数(output)、排序函数(sort)、操作函数(projectdate)、重新定义项目添加函数(addproject)和析构函数(RData)。定义初始化函数(clear)、按编号查找函数(equal)。其中,项目类project中的getname、gettag、 getnumber、getcharge、getlevel、setname、setnum负责输入和提取信息,del负责删除信息,派生出的虚函数output负责对项目信息的输出,addproject负责新项目的添
8、加。新数据类Rdata类中的output负责最终信息的输出,sort负责对项目信息的按名称排序和按序号排序,projectdate负责对项目信息进行添加、删除、修改、查找等操作。clear负责清空当前的所有信息,equal负责按编号查找项目,被重新定义的addproject负责添加项目信息,析构函数用来释放内存。4 详细设计整个程序分为三个独立的文档,project文件中包括addproject、del、getcharge、getleval、getname、getnumber、gettag、output、project、setname、setnum的声明,RData文件中包括addprojec
9、t、clear、equal、output、projectdate、RData、RData、sort函数的声明用于具体步骤的实现。Globals文件包括程序的主函数。4.1 类的接口设计#include #include#includeusing namespace std;#define m 100#define M 10class project/基类project的声明private:int tag;/项目总数int number;/编号char name15;/名称int leval;/等级char charge15;/负责人public:/外部接口project()/构造函数char
10、*getname()/提取名称函数定义return name;int gettag()/提取项目总数函数定义return tag;int getnumber()/提取编号名称函数定义return number;char *getcharge()/提取负责人函数定义return charge;int getleval()/提取等级函数定义return leval;void setname(char *na,char*nb)/输入名称和负责人函数定义strcpy(name,na);strcpy(charge,nb);void setnum(int a,int b)/输入编号和等级函数定义numbe
11、r=a;leval=b;void del()/删除函数定义tag=1;virtual void addproject(int n,char *na,int nn,char *nb);/虚函数用于添加项目信息,virtual void output();/读取项目信息;class RData/基类Rdata声明private:int top;/项目记录指针project prom;public:/外部接口RData();/构造函数void clear()/清除函数定义top=-1;int addproject(int n,char *na,int nn,char *nb);/项目信息添加,虚函数
12、重新定义project *equal(int projectid)/按编号查找for(int i=0;i=top;i+)if(proi.getnumber()projectid&proi.gettag()=0;return &proi;return NULL;void output();/输出函数void projectdate();/操作函数void sort(project *b,int c);/排序函数RData();/析构函数; 通过公有派生,project类和Rdata类派生出除构造函数、析构函数和虚函数之外的全部成员,由于基类的成员是公有和私有类型,因此在派生类中的成员函数中,从自
13、己基类继承来的成员全部可以访问,而对于建立project类和Rdata类对象的外部模块来讲,基类的保护和私有的成员是无法访问的。通过保护访问类型和公有的继承方式,实现了基类project和Rdata的数据的可靠保护。在程序中,项目所需的编号、名称、负责人和等级采用动态分配内存,这些工作都是在基类、派生类的构造函数中完成,它们的清理工作在析构函数中完成。其余的派生函数负责项目的输入输出、提取、清除等工作。4.2 类的实现/project类的实现void project:output()/读出项目信息cout编号;/输出编号coutnumberendl;cout名称;/输出名称coutnameen
14、dl;cout等级;/输出等级coutlevalendl;cout负责人;/输出负责人coutchargeendl;void project:addproject(int n,char *na,int nn,char *nb)/项目信息添加,虚函数tag=0;number=n;strcpy(name,na);/调用strcpy函数,输入名称leval=nn;strcpy(charge,nb);/调用strcpy函数,输入负责人/Rdata类的实现RData:RData()/析构函数fstream file(project.dat,ios:out);for (int i=0;i=top;i+)i
15、f (proi.gettag()=0)/释放内存file.write(char*)&proi,sizeof(proi);file.close();void RData:output()/读出项目信息for(int i=0;i=top;i+)/输出每一条项目信息proi.output();int RData:addproject(int n,char *na,int nn,char *nb)/项目信息添加,虚函数重新定义project *p=equal(n);/查找是否存在if (p=NULL)top+;protop.addproject(n,na,nn,nb);/通过指针进行添加项目信息ret
16、urn 1;return 0;RData:RData()/构造函数project s;top=-1;/清空所有项目信息fstream file(project.dat,ios:in);/打开一个输入文件while(1)file.read(char *)&s,sizeof(s);if (!file)break;top+;protop=s;file.close();void RData:sort(project *b,int c)/对排序函数的声明int i,j;project temp;int choose;/输入的选项cout1.按项目编号排序:n;cout2.按项目名称排序:n;cout请输
17、入要进行的操作:choose;if(choose=1)/冒泡排序法对项目按编号排序for(j=0,jbi.getnumber()temp=bi;bi=bj;bj=temp;for (i=0;i=c;i+)bi.output();if (choose=2)/冒泡排序法对项目按名称排序for(i=0;i=c-1;i+)for(j=j+1;j=0)temp=bi;bi=bj;bj=temp;for (i=0;i=c;i+)cout项目名称:;coutbi.getname()endl;cout项目编号:;coutbi.getnumber()endl;cout项目等级:;coutbi.getleval(
18、)endl;cout项目负责人:;coutbi.getcharge()endl;coutendl;void RData:projectdate()/操作函数的定义char choice=1;char rname100;/RData函数中的名称int projectid;/RData函数中的编号int lev;/RData函数中的等级char charg100;/RData函数中的负责人project *r;while (choice!=0)cout1.添加n;cout2.修改n;cout3.删除n;cout4.查找n;coutchoice;switch(choice)case1:;/执行添加操
19、作system(cls);coutprojectid;coutrname;coutlev;coutcharg;addproject(projectid,rname,lev,charg);break;case2:;/执行修改操作system(cls);coutprojectid;r=equal(projectid);if(r=NULL)cout该项目不存在;break;coutprojectid;coutrname;coutlev;coutcharg;r-setnum(projectid,lev);r-setname(rname,charg);break;case3:;/执行删除操作system
20、(cls);coutprojectid;r=equal(projectid);if(r=NULL)cout该项目不存在del();cout删除成功!;break;case4:;/执行查找操作system(cls);coutprojectid;r=equal(projectid);if(r=NULL)cout该项目不存在output();break;case5:;cout退出,谢谢使用!;exit(0);default:;cout退出:n;system(cls);在类实现的过程中,对基类project类和RData类中声明的函数做了定义,定义output函数用于输出项目信息,虚函数addproj
21、ect用于项目信息的添加多次重新定义。析构函数定义释放内存,各自基类中声明的数据成员经过公有派生以被保护的形式出现,派生函数可自由进行访问。4.3 主函数设计void main()/主函数char choice;/选项RData projectdb;while(choice!=0)coutC+课程设计n;cout项目管理系统n;cout1403060325n;cout请选择操作n;cout1.项目操作n;coutchoice;switch(choice)case1:;system(cls);projectdb.projectdate();/调用操作函数case0:;exit(0);/输入错误直
22、接退出break;default:;cout退出n;在程序的主函数部分,给出两个选项直接输入1开始程序的调试,输入0则被认为是输入错误,直接结束程序。之后出现主界面,选择对应数字进行操作,每一步操作完成后都会回到主界面等待下一个命令。直至输入数字5执行退出程序。5 DOS界面程序运行结果及分析5.1 程序运行结果1.程序运行结果如图1所示。图1 程序运行结果图2程序运行结果图1为程序开始运行的初始界面,选择1则进行下一步操作,选择0退出。图2为选择1后执行操作函数的界面,选择不同的数字执行不同的操作。2.选择1.添加程序运行的结果如图3所示图3 程序运行结果图3为选择添加程序之后的输入结果,需
23、要调用output函数,添加完成后回到主界面。3.选择2.修改程序运行的结果如图4所示图4程序运行结果图4为选择修改程序之后的输入结果,需要先查找之后进行修改,完成修改后返回主界面。4.选择3删除程序运行的结果如图5所示图5程序运行结果图5为选择删除程序之后的运行结果,输入项目编号后可完成对应的项目删除。完成后返回主界面。5.选择4查找程序运行的结果如图6所示图6程序运行结果 图6为选择查找程序之后的运行结果,输入项目编号后可完成对应的项目查找并将找到的项目输出。完成后返回主界面。5.2运行结果分析整个程序中的项目存储采用的是动态内存分配的方式。基类用于数据输入提取,公有派生类output用于
24、项目信息的输出,虚函数addproject用于项目信息的添加,除了继承基类的基本特征之外,结合问题的实际需要,增加按编号查找的指针equal,使基类进一步具体化、实用化,使项目信息进行各种处理时更方便快捷。程序的访问控制也是根据问题的需要而设计的。基类project的数据成员的存储、维护着项目信息,这些都是在进行查找,删除等一系列操作所必须访问和使用的。利用保护成员特征,将基类数据成员的访问控制属性设置为保护型,对于其派生类可以自由调用,而对于类外的其余模块,这些数据无法访问。这样,不影响整个程序对数据的实用又能很好的保护项目的信息。在派生过程中,基类的构造函数和析构函数无法继承下来,因此在派
25、生类中需要添加构造函数、析构函数来完成派生类的初始化和最后清理工作。派生类的构造函数通过调用基类的构造函数来对基类数据进行初始化。6 基于MFC的图形界面程序开发MFC的图形界面程序设计可在上述类设计的基础上进行改造,MFC的图形界面程序与DOS界面程序的主要不同点是:MFC图形界面程序与DOS界面程序的输入输出方式不同,DOS界面程序采用字符交互式实现数据输入输出,主要通过cin,cout等I/O流实现,而MFC的图形程序界面采用标准Windows窗口和控件实现输入输出,因此必须在MFC类的框架下加入上面所设计的矩阵和方程组类,并通过图形界面的输入输出改造来完成。6.1 基于MFC的图形界面
26、程序设计(1)界面设计首先在VC中建立MFC AppWizard(exe)工程,名称为MFC界面,并在向导的Step1中选择Dialog based,即建立基于对话框的应用程序,如下图7、图8所示。图7 建立MFC AppWizard(exe)工程图8 建立基于对话框的应用程序将对话框资源中的默认对话框利用工具箱改造成如下界面,如图9所示。图9 项目信息操作程序界面设计图9所示的界面中包含了16个Static Text控件,5个Button控件,和16个Edit Box控件,控件的基本信息列表如下表1所示。表1 控件基本信息控件类别控件ID控件Caption说明Static TextIDC_S
27、TATIC项目名称添加操作使用项目编号项目等级项目负责人需要输入的项目编号修改操作使用项目名称项目编号项目等级项目负责人需要输入的项目编号删除操作使用删除是否成功需要输入的项目编号 查找操作使用项目名称项目编号项目等级项目负责人BottonIDC_tianjia执行添加操作IDC_xiugai执行修改操作IDC_shanchu 执行删除操作IDC_chazhao执行查找操作IDC_tuichu执行退出操作Edit BoxIDC_TJname名称添加使用IDC_TJnumber编号IDC_TJlevel等级IDC_TJcharge负责人IDC_XGINnumber输入编号修改使用IDC_XGna
28、me名称IDC_XGnumber编号IDC_XGlevel等级IDC_XGcharge负责人IDC_SCINnumber输入编号删除使用IDC_SCYON是否成功IDC_CZINnumber出入编号查找使用IDC_CZname名称IDC_CZnumber编号IDC_CZlevel等级IDC_CZcharge负责人(2)代码设计为了能够将对话框界面上的控件能够与代码联系起来,需要为16个Edit Box控件建立Member Variables,按Ctrl+w键进入MFC ClassWizard界面,选择Member Variables选项卡,可显示成员变量设置界面,如图10、图11所示。图10
29、成员变量设置界面图11 成员变量设置界面通过该界面设置与16个Edit Box控件对应的成员变量,具体如表2所示。表2 控件基本信息控件ID成员变量类型成员变量名称IDC_TJnameCStringm_TJnameIDC_TJnumberIntm_TJnumberIDC_TJlevelintIDC_TJlevelIDC_TJchargeCStringm_TJchargeIDC_XGINnumberIntm_XGINnumberIDC_XGnameCStringm_XGnameIDC_XGnumbeIntm_XGnumbeIDC_XGlevelIntm_XGlevelIDC_XGchargeCS
30、tringm_XGchargeIDC_SCINnumberIntm_SCINnumberIDC_SCYONCStringm_SCYONIDC_CZINnumberIntm_CZINnumberIDC_CZnameCStringm_CZnameIDC_CZnumberIntm_CZnumberIDC_CZlevelIntm_CZlevelIDC_CZchargeCStringm_CZcharge下面是编写代码的重要阶段,由于自身水平所限,无法应用类。所以选择直接通过按钮实施各项操作,下面是各个按钮的编写代码。 void CMy2020Dlg:Ontianjia() /添加函数按钮代码Update
31、Data(true);m_TJname=m_TJname; m_TJnumber=m_TJnumber; m_TJlevel=m_TJlevel; m_TJcharge=m_TJcharge; UpdateData(false);/ TODO: Add your control notification handler code herevoid CMy2020Dlg:Onxiugai() /修改函数按钮代码UpdateData(true);if(m_XGINnumber=m_TJnumber)m_TJname=m_XGname;m_TJlevel=m_XGlevel;m_TJcharge=m
32、_XGcharge;elsem_XGname=a;m_XGlevel=0;m_XGcharge=b;UpdateData(false);/ TODO: Add your control notification handler code herevoid CMy2020Dlg:Onshanchu() /删除按钮的代码UpdateData(true);if(m_SCINnumber=m_TJnumber)/判断是否删除成功m_SCYON=Y;elsem_SCYON=N;UpdateData(false);/ TODO: Add your control notification handler
33、code herevoid CMy2020Dlg:Onchazhao() /查找函数的代码UpdateData(true);if(m_CZINnumber=m_TJnumber)m_CZnumber=m_TJnumber;m_CZname=m_TJname;m_CZlevel=m_TJlevel;m_CZcharge=m_TJcharge;elsem_CZnumber=0;m_CZname=c;m_CZlevel=0;m_CZcharge=d;UpdateData(false);/ TODO: Add your control notification handler code here6.2
34、 程序测试运行程序后,首先出现的界面如图12所示。图12程序初始运行界面在添加一行中输入相应的项目信息,点击添加按钮后如图13所示。图13 添加数据后的界面在修改一行中输入需要修改的项目编号,之后输入修改后的结果点击修改按钮。如图14所示。图14点击修改后的界面在删除行中输入需要删除的项目编号,点击删除按钮。后一个框中会显示是否删除成功。成功为Y,失败为N。如图15所示图15点击修改后的界面在查找行中输入需要查找的项目编号,结果出现在后面的4格中,如图16所示。6.3 MFC程序编写总结MFC程序与DOS界面程序编写的最大不同是程序员需要将编程精力放在图形界面设计、图形界面输入输出以及界面元素
35、和代码对应转换等问题上,而这些问题在DOS界面程序中是不存在的,因此,初学MFC的编程者会对此感到困难,但编写出一个基于Windows界面的程序时,所获得的满足程度远远大于简单的DOS界面程序,况且基于Windows的图形界面的程序设计已成为主流,作为程序员而言,是非学会不可的。本次课程设计作为编写Windows程序的初步尝试,能够初步实现程序的主要功能,可以说是取得了成功,然而好的程序绝不仅仅是只有功能性这一个指标,本此编写的MFC程序虽然能实现所需功能,但从面向对象程序设计理念和图形界面设计要求来说,尚存在不足,主要包括以下几个方面。(1)项目信息只能单个显示,不能批量显示。不能将更多的项
36、目信息进行统计。(2)界面设置简陋,目前知识不足做不到更加规范完整的界面。以后会慢慢完善。(3)对于MFC界面的了解不全,只能用按钮进行初步的操作不能使用类做到真正的面向对象。7 参考文献1谭浩强. C+面向对象程序设计. 北京:清华大学出版社,2006版2谭浩强. C语言程序设计.北京.清华大学出版社.2010版3郑莉,董渊,张瑞丰. C+语言程序设计(第3版). 北京:清华大学出版社,2007版4钱能. C+程序设计教程(第二版). 北京:清华大学出版社,2007版5陈志泊,王春玲. 面向对象的程序设计语言C+. 北京:人民邮电出版社,2002版6 任美璇.基于校园网的学生信息管理系统(C+版)(第2版).北京:机械工业出版社,2011版7帕罗赛斯MFC WINDOWS程序设计 清华大学出版社 2007版