c++课设报告项目管理系统

上传人:痛*** 文档编号:86015020 上传时间:2022-05-06 格式:DOC 页数:32 大小:156KB
收藏 版权申诉 举报 下载
c++课设报告项目管理系统_第1页
第1页 / 共32页
c++课设报告项目管理系统_第2页
第2页 / 共32页
c++课设报告项目管理系统_第3页
第3页 / 共32页
资源描述:

《c++课设报告项目管理系统》由会员分享,可在线阅读,更多相关《c++课设报告项目管理系统(32页珍藏版)》请在装配图网上搜索。

1、-封 皮按学校要求手工填写成绩评定表学生*:班级*:专 业:通信工程课程设计题目:工程管理系统评语组长签字:成绩日期年 月 日课 程 设 计 任 务 书学院信息科学与工程学院专业通信工程学生*设计题目工程管理系统容及要求:该系统处理工程的相关信息,工程信息主要包括:工程编号、工程名称、等级、负责人等容,要现以下功能:(1) 建立工程类。(2) 工程信息初始化。(3) 工程信息的添加、修改、删除、查找。(4) 工程信息的输出。(5) 在工程信息中按工程编号、工程名称排序。进度安排:第17周:分析题目,查阅课题相关资料,进展类设计、算法设计;第18周:程序的设计、调试与实现;第19周:程序测试与分

2、析,撰写课程设计报告,进展辩论验收。指导教师签字:年 月 日学院院长签字年 月 日目 录1 需求分析- 1 -2 算法根本原理- 1 -3 类设计- 2 -4 详细设计- 3-4.1 类的接口设计- 3 -4.2 类的实现- 6 -4.3 主函数设计- 12-5 DOS界面程序运行结果及分析- 13 -5.1 程序运行结果- 13 -5.2运行结果分析- 16 -6 基于MFC的图形界面程序开发- 17-6.1 基于MFC的图形界面程序设计- 17 -6.2 程序测试- 23-6.3 MFC程序编写总结-26-7 参考文献- 27-. z.-1 需求分析该系统处理工程的相关信息,工程信息主要包

3、括:工程编号、工程名称、等级、负责人等容,要现以下功能:(1) 建立工程类。(2) 工程信息初始化。(3) 工程信息的添加、修改、删除、查找。(4) 工程信息的输出。(5) 在工程信息中按工程编号、工程名称排序。随着信息化的普及一个企业按传统做法,设定一个工程后,参与的会有很多部门,彼此信息统计需要太多时间影响效率。工程管理系统可对工程的全部工作进展高效的管理,便于工程经理对工程信息进展临时调整和修改,转入转出资料、制作报表、计算预算值并对时间利用、本钱、人员分配、质量、风险的多种因素进展综合考虑,制定方案从而充分的实现高运营效率。工程管理系统还可同时处理多个子工程,对工程实施跟踪和监视针,对

4、各种情况做出假设制定应对策略且文件工程的*程度高,实用型高。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参加列

5、表。此时共有五个工程。第二步,修改正程。运行修改程序,输入工程编号如4之后输入新的4号工程的名称、等级、负责人等信息。第三步,查找过程。运行查找程序,输入按等级查找,查找等级为2的工程。输出结果为3号工程。第四步,删除过程。运行删除程序,输入删除工程的编号如输入7会将7号工程删除此时剩余4个工程。第五步,排序过程。选择按编号排序,则输出次序为3号、4号、8号、9号。选择按名称排序,则输出次序为a工程、b工程、d工程、e工程。3 类设计从算法分析可以看出,本设计面临的关键问题是对各个工程信息的输入,删除,修改,查找。可定义一个工程类project、一个新数据类Rdata作为基类。然后由工程类继承

6、出提取名称getname、提取工程总数(gettag)、提取编号(getnumber)、提取负责人(getcharge)、提取等级(getlevel)、输入名称和负责人setname、输入编号和等级setnum、删除类(del)。派生出虚函数添加工程类(addproject)和输出类(output)。新数据类Rdata声明其构造函数、输出函数(output)、排序函数(sort)、操作函数(projectdate)、重新定义工程添加函数addproject和析构函数RData。定义初始化函数clear、按编号查找函数equal。其中,工程类project中的getname、gettag、 ge

7、tnumber、getcharge、getlevel、setname、setnum负责输入和提取信息,del负责删除信息,派生出的虚函数output负责对工程信息的输出,addproject负责新工程的添加。新数据类Rdata类中的output负责最终信息的输出,sort负责对工程信息的按名称排序和按序号排序,projectdate负责对工程信息进展添加、删除、修改、查找等操作。clear负责清空当前的所有信息,equal负责按编号查找工程,被重新定义的addproject负责添加工程信息,析构函数用来释放存。4 详细设计整个程序分为三个独立的文档,project文件中包括addproject

8、、del、getcharge、getleval、getname、getnumber、gettag、output、project、setname、setnum的声明,RData文件中包括addproject、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

9、 tag;/工程总数int number;/编号char name15;/名称int leval;/等级char charge15;/负责人public:/外部接口project()/构造函数char *getname()/提取名称函数定义return name;int gettag()/提取工程总数函数定义return tag;int getnumber()/提取编号名称函数定义return number;char *getcharge()/提取负责人函数定义return charge;int getleval()/提取等级函数定义return leval;void setname(char

10、 *na,char*nb)/输入名称和负责人函数定义strcpy(name,na);strcpy(charge,nb);void setnum(int a,int b)/输入编号和等级函数定义number=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:/

11、外部接口RData();/构造函数void clear()/去除函数定义top=-1;int addproject(int n,char *na,int nn,char *nb);/工程信息添加,虚函数重新定义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

12、);/排序函数RData();/析构函数;通过公有派生,project类和Rdata类派生出除构造函数、析构函数和虚函数之外的全部成员,由于基类的成员是公有和私有类型,因此在派生类中的成员函数中,从自己基类继承来的成员全部可以访问,而对于建立project类和Rdata类对象的外部模块来讲,基类的保护和私有的成员是无法访问的。通过保护访问类型和公有的继承方式,实现了基类project和Rdata的数据的可靠保护。在程序中,工程所需的编号、名称、负责人和等级采用动态分配存,这些工作都是在基类、派生类的构造函数中完成,它们的清理工作在析构函数中完成。其余的派生函数负责工程的输入输出、提取、去除等工

13、作。4.2 类的实现/project类的实现void project:output()/读出工程信息cout编号;/输出编号coutnumberendl;cout名称;/输知名称coutnameendl;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);/调用

14、strcpy函数,输入负责人/Rdata类的实现RData:RData()/析构函数fstream file(project.dat,ios:out);for (int i=0;i=top;i+)if (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)/工程信息添

15、加,虚函数重新定义project *p=equal(n);/查找是否存在if (p=NULL)top+;protop.addproject(n,na,nn,nb);/通过指针进展添加工程信息return 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(proj

16、ect *b,int c)/对排序函数的声明int i,j;project temp;int choose;/输入的选项cout1.按工程编号排序:n;cout2.按工程名称排序:n;cout请输入要进展的操作: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

17、;i=c;i+)cout工程名称:;coutbi.getname()endl;cout工程编号:;coutbi.getnumber()endl;cout工程等级:;coutbi.getleval()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

18、*r;while (choice!=0)cout1.添加n;cout2.修改n;cout3.删除n;cout4.查找n;coutchoice;switch(choice)case1:;/执行添加操作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;cou

19、trname;coutlev;coutcharg;r-setnum(projectid,lev);r-setname(rname,charg);break;case3:;/执行删除操作system(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退出,谢谢使用!;e*it(0)

20、;default:;cout退出:n;system(cls);在类实现的过程中,对基类project类和RData类中声明的函数做了定义,定义output函数用于输出工程信息,虚函数addproject用于工程信息的添加屡次重新定义。析构函数定义释放存,各自基类中声明的数据成员经过公有派生以被保护的形式出现,派生函数可自由进展访问。4.3 主函数设计void main()/主函数char choice;/选项RData projectdb;while(choice!=0)coutC+课程设计n;cout工程管理系统n;cout1403060325n;cout请选择操作n;cout1.工程操作n

21、;coutchoice;switch(choice)case1:;system(cls);projectdb.projectdate();/调用操作函数case0:;e*it(0);/输入错误直接退出break;default:;cout退出n;在程序的主函数局部,给出两个选项直接输入1开场程序的调试,输入0则被认为是输入错误,直接完毕程序。之后出现主界面,选择对应数字进展操作,每一步操作完成后都会回到主界面等待下一个命令。直至输入数字5执行退出程序。5 DOS界面程序运行结果及分析5.1 程序运行结果1.程序运行结果如图1所示。图1 程序运行结果图2程序运行结果图1为程序开场运行的初始界面,

22、选择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为选择查找程序之后的运行

23、结果,输入工程编号后可完成对应的工程查找并将找到的工程输出。完成后返回主界面。5.2运行结果分析整个程序中的工程存储采用的是动态存分配的方式。基类用于数据输入提取,公有派生类output用于工程信息的输出,虚函数addproject用于工程信息的添加,除了继承基类的根本特征之外,结合问题的实际需要,增加按编号查找的指针equal,使基类进一步具体化、实用化,使工程信息进展各种处理时更方便快捷。程序的访问控制也是根据问题的需要而设计的。基类project的数据成员的存储、维护着工程信息,这些都是在进展查找,删除等一系列操作所必须访问和使用的。利用保护成员特征,将基类数据成员的访问控制属性设置为保

24、护型,对于其派生类可以自由调用,而对于类外的其余模块,这些数据无法访问。这样,不影响整个程序对数据的实用又能很好的保护工程的信息。在派生过程中,基类的构造函数和析构函数无法继承下来,因此在派生类中需要添加构造函数、析构函数来完成派生类的初始化和最后清理工作。派生类的构造函数通过调用基类的构造函数来对基类数据进展初始化。6 基于MFC的图形界面程序开发MFC的图形界面程序设计可在上述类设计的根底上进展改造,MFC的图形界面程序与DOS界面程序的主要不同点是:MFC图形界面程序与DOS界面程序的输入输出方式不同,DOS界面程序采用字符交互式实现数据输入输出,主要通过cin,cout等I/O流实现,

25、而MFC的图形程序界面采用标准Windows窗口和控件实现输入输出,因此必须在MFC类的框架下参加上面所设计的矩阵和方程组类,并通过图形界面的输入输出改造来完成。6.1 基于MFC的图形界面程序设计1界面设计首先在VC中建立MFC AppWizard(e*e)工程,名称为MFC界面,并在向导的Step1中选择Dialog based,即建立基于对话框的应用程序,如以下图7、图8所示。图7 建立MFC AppWizard(e*e)工程图8 建立基于对话框的应用程序将对话框资源中的默认对话框利用工具箱改造成如下界面,如图9所示。图9工程信息操作程序界面设计图9所示的界面中包含了16个Static

26、Te*t控件,5个Button控件,和16个Edit Bo*控件,控件的根本信息列表如下表1所示。表1 控件根本信息控件类别控件ID控件Caption说明Static Te*tIDC_STATIC工程名称添加操作使用工程编号工程等级工程负责人需要输入的工程编号修改操作使用工程名称工程编号工程等级工程负责人需要输入的工程编号删除操作使用删除是否成功需要输入的工程编号 查找操作使用工程名称工程编号工程等级工程负责人BottonIDC_tianjia执行添加操作IDC_*iugai执行修改操作IDC_shanchu 执行删除操作IDC_chazhao执行查找操作IDC_tuichu执行退出操作Edi

27、t Bo*IDC_TJname名称添加使用IDC_TJnumber编号IDC_TJlevel等级IDC_TJcharge负责人IDC_*GINnumber输入编号修改使用IDC_*Gname名称IDC_*Gnumber编号IDC_*Glevel等级IDC_*Gcharge负责人IDC_SCINnumber输入编号删除使用IDC_SCYON是否成功IDC_CZINnumber出入编号查找使用IDC_CZname名称IDC_CZnumber编号IDC_CZlevel等级IDC_CZcharge负责人2代码设计为了能够将对话框界面上的控件能够与代码联系起来,需要为16个Edit Bo*控件建立Mem

28、ber Variables,按Ctrl+w键进入MFC ClassWizard界面,选择Member Variables选项卡,可显示成员变量设置界面,如图10、图11所示。图10 成员变量设置界面图11 成员变量设置界面通过该界面设置与16个Edit Bo*控件对应的成员变量,具体如表2所示。表2 控件根本信息控件ID成员变量类型成员变量名称IDC_TJnameCStringm_TJnameIDC_TJnumberIntm_TJnumberIDC_TJlevelintIDC_TJlevelIDC_TJchargeCStringm_TJchargeIDC_*GINnumberIntm_*GIN

29、numberIDC_*GnameCStringm_*GnameIDC_*GnumbeIntm_*GnumbeIDC_*GlevelIntm_*GlevelIDC_*GchargeCStringm_*GchargeIDC_SCINnumberIntm_SCINnumberIDC_SCYONCStringm_SCYONIDC_CZINnumberIntm_CZINnumberIDC_CZnameCStringm_CZnameIDC_CZnumberIntm_CZnumberIDC_CZlevelIntm_CZlevelIDC_CZchargeCStringm_CZcharge下面是编写代码的重要阶

30、段,由于自身水平所限,无法应用类。所以选择直接通过按钮实施各项操作,下面是各个按钮的编写代码。 void CMy2021Dlg:Ontianjia() /添加函数按钮代码UpdateData(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 CMy2021Dlg:On*iugai() /修改函数按钮代码Upd

31、ateData(true);if(m_*GINnumber=m_TJnumber)m_TJname=m_*Gname;m_TJlevel=m_*Glevel;m_TJcharge=m_*Gcharge;elsem_*Gname=a;m_*Glevel=0;m_*Gcharge=b;UpdateData(false);/ TODO: Add your control notification handler code herevoid CMy2021Dlg:Onshanchu() /删除按钮的代码UpdateData(true);if(m_SCINnumber=m_TJnumber)/判断是否删

32、除成功m_SCYON=Y;elsem_SCYON=N;UpdateData(false);/ TODO: Add your control notification handler code herevoid CMy2021Dlg: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=

33、0;m_CZcharge=d;UpdateData(false);/ TODO: Add your control notification handler code here6.2 程序测试运行程序后,首先出现的界面如图12所示。图12程序初始运行界面在添加一行中输入相应的工程信息,点击添加按钮后如图13所示。图13添加数据后的界面在修改一行中输入需要修改的工程编号,之后输入修改后的结果点击修改按钮。如图14所示。图14点击修改后的界面在删除行中输入需要删除的工程编号,点击删除按钮。后一个框中会显示是否删除成功。成功为Y,失败为N。如图15所示图15点击修改后的界面在查找行中输入需要查找的工

34、程编号,结果出现在后面的4格中,如图16所示。6.3 MFC程序编写总结MFC程序与DOS界面程序编写的最大不同是程序员需要将编程精力放在图形界面设计、图形界面输入输出以及界面元素和代码对应转换等问题上,而这些问题在DOS界面程序中是不存在的,因此,初学MFC的编程者会对此感到困难,但编写出一个基于Windows界面的程序时,所获得的满足程度远远大于简单的DOS界面程序,况且基于Windows的图形界面的程序设计已成为主流,作为程序员而言,是非学会不可的。本次课程设计作为编写Windows程序的初步尝试,能够初步实现程序的主要功能,可以说是取得了成功,然而好的程序绝不仅仅是只有功能性这一个指标

35、,本此编写的MFC程序虽然能实现所需功能,但从面向对象程序设计理念和图形界面设计要求来说,尚存在缺乏,主要包括以下几个方面。1工程信息只能单个显示,不能批量显示。不能将更多的工程信息进展统计。2界面设置简陋,目前知识缺乏做不到更加规完整的界面。以后会慢慢完善。3对于MFC界面的了解不全,只能用按钮进展初步的操作不能使用类做到真正的面向对象。7 参考文献1谭浩强. C+面向对象程序设计. :清华大学,2006版2谭浩强. C语言程序设计.清华大学.2021版3莉,董渊,瑞丰. C+语言程序设计(第3版). :清华大学,2007版4钱能. C+程序设计教程(第二版). :清华大学,2007版5志泊,王春玲. 面向对象的程序设计语言C+. :人民邮电,2002版6 任美璇.基于校园网的学生信息管理系统C+版第2版.:机械工业,2021版7帕罗赛斯MFC WINDOWS程序设计清华大学 2007版. z.

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!