版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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-需求分析该系统处理项
3、目的相关信息,项目信息主要包括:项目编号、项目名称、等级、负责人等内容,要求实现以下功能:(1)建立项目类。(2)项目信息初始化。(3)项目信息的添加、修改、删除、查找。(4)项目信息的输出。(5)在项目信息中按项目编号、项目名称排序。随着信息化的普及一个企业按传统做法, 设定一个项目后, 参与的会有很多部门,彼此信息统计需要太多时间影响效率。 项目管理系统可对项目的全部工作进行高效的管理,便于项目经理对项目信息进行临时调整和修改, 转入转出资料、制作报表、计算预算值并对时间利用、成本、人员分配、质量、风险的多种因素进行综合考虑, 制定计划从而充分的实现高运营效率。 项目管理系统还可同时处理多
4、个子项目, 对项目实施跟踪和监督针, 对各种情况做出假设制定应对策略且文件项目的保密程度高,实用型高 。算法基本原理设有 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 级
5、的项目。(4) 删除项目 7(5) 按编号和名称排序。- 1 -第一步,添加过程。运行添加程序,输入(编号:3;名称: e;等级: 2;负责人: ming。)会将项目 3 加入列表。此时共有五个项目。第二步,修改过程。运行修改程序, 输入项目编号 (如 4)之后输入新的 4 号项目的名称、 等级、负责人等信息。第三步,查找过程。运行查找程序, 输入按等级查找,查找等级为2 的项目。输出结果为 3 号项目。第四步,删除过程。运行删除程序,输入删除项目的编号(如输入7)会将 7 号项目删除此时剩余 4 个项目。第五步,排序过程。选择按编号排序,则输出次序为3 号、4 号、 8 号、9 号。选择按名
6、称排序,则输出次序为a 项目、 b 项目、 d 项目、 e 项目。类设计从算法分析可以看出, 本设计面临的关键问题是对各个项目信息的输入,删除,修改,查找。可定义一个项目类project 、一个新数据类Rdata 作为基类。然后由项目类继承出提取名称(getname)、提取项目总数 (gettag)、提取编号(getnumber) 、提取负责人 (getcharge)、提取等级 (getlevel)、输入名称和负责人( setname)、输入编号和等级( setnum)、删除类 (del) 。派生出虚函数添加项目类 (addproject)和输出类 (output)。新数据类 Rdata 声明
7、其构造函数、 输出函数 (output) 、排序函数 (sort) 、操作函数 (projectdate) 、重新定义项目添加函数( addproject )和析构函数( RData)。定义初始化函数( clear )、按编号查找函数( equal )。其中,项目类project中的 getname、gettag 、 getnumber 、getcharge 、getlevel 、 setname、 setnum 负责输入和提取信息, del 负责删除信息,派生出的虚函数 output 负责对项目信息的输出, addproject 负责新项目的添加。新数据类 Rdata 类中的 output
8、负责最终信息的输出, sort 负责对项目信息的按名称排序和按序号排序, projectdate 负责对项目信息进行添加、删除、修改、查找等操作。 clear 负责清空当前的所有信息, equal 负责按编号查找项目,被重新- 2 -定义的 addproject负责添加项目信息,析构函数用来释放内存。详细设计整个程序分为三个独立的文档,project文件中包括getcharge 、getleval 、getname、getnumber、gettag 、output setnum 的声明, RData 文件中包括 addproject 、 clearaddproject 、del 、projec
9、t 、setname、 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:/外部接口projec
10、t()/构造函数char *getname()/提取名称函数定义return name;int gettag()/提取项目总数函数定义- 3 -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
11、)/输入编号和等级函数定义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 声明- 4 -private:int top;/项目记录指针project prom;public:/外部接口RData();/构造函数void clear()/清除函数定义top=-1;int addproject(int n,char *na,int
12、 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);/排序函数RData();/析构函数;通过公有派生, project 类和 Rdata 类派生出除构造函数、析构函数和虚函数之外的全部成员, 由于基
13、类的成员是公有和私有类型, 因此在派生类中的成员函数中,从自己基类继承来的成员全部可以访问, 而对于建立 project 类和 Rdata 类对象的外部模块来讲, 基类的保护和私有的成员是无法访问的。 通过保护访问类型和公有的继承方式, 实现了基类 project 和 Rdata 的数据的可靠保护。 在程序中,项目所需的编号、名称、负责人和等级采用动态分配内存,这些工作都是在基类、派生类的构造函数中完成, 它们的清理工作在析构函数中完成。其余的派生函数负责项目的输入输出、提取、清除等工作。- 5 -4.2类的实现/project 类的实现void project:output()/ 读出项目信
14、息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);/调用 strcpy 函数,输入负责人/Rdata 类的实现RData:RData()/
15、析构函数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+)/ 输出每一条项目信息- 6 -proi.output();int RData:addproject(int n,char *na,int nn,char *nb)/项目信息添加,虚函数重新定义project *p=equal(n);
16、/查找是否存在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(project *b,int c)/ 对排序函数的声明in
17、t i,j;project temp;int choose;/输入的选项cout1.按项目编号排序 :n;- 7 -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;i=c;i+)- 8 -cou
18、t 项目名称 :;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
19、*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;coutprojecti
20、d;coutrname;coutlev;coutcharg;r-setnum(projectid,lev);r-setname(rname,charg);break;case3:;/执行删除操作system(cls);coutprojectid;-10-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退出,谢
21、谢使用! ;exit(0);default:;cout退出 :n;system(cls);在类实现的过程中,对基类 project 类和 RData类中声明的函数做了定义,定义 output 函数用于输出项目信息, 虚函数 addproject 用于项目信息的添加多次重新定义。 析构函数定义释放内存, 各自基类中声明的数据成员经过公有派生以被保护的形式出现,派生函数可自由进行访问。-11-4.3主函数设计void main()/ 主函数char choice;/选项RData projectdb;while(choice!=0)coutC+ 课程设计 n;cout项目管理系统 n;cout14
22、03060325n;cout请选择操作 n;cout1.项目操作 n;coutchoice;switch(choice)case1:;system(cls);jectdate();/调用操作函数case0:;exit(0);/ 输入错误直接退出break;default:;cout退出 n;在程序的主函数部分, 给出两个选项直接输入1 开始程序的调试, 输入 0 则被认为是输入错误,直接结束程序。之后出现主界面,选择对应数字进行操作,每一步操作完成后都会回到主界面等待下一个命令。直至输入数字 5 执行退出程序。-12-DOS 界面程序运行结果及分析5.1程序运行结果1
23、. 程序运行结果如图1 所示。图 1 程序运行结果-13-图 2 程序运行结果图 1 为程序开始运行的初始界面,选择 1 则进行下一步操作,选择 0 退出。图 2 为选择 1 后执行操作函数的界面,选择不同的数字执行不同的操作。选择 1. 添加程序运行的结果如图 3 所示图 3 程序运行结果图 3 为选择添加程序之后的输入结果,需要调用output 函数,添加完成后回到主界面。3. 选择 2. 修改程序运行的结果如图4 所示-14-图 4 程序运行结果图 4 为选择修改程序之后的输入结果, 需要先查找之后进行修改, 完成修改后返回主界面。选择 3 删除程序运行的结果如图 5 所示图 5 程序运
24、行结果图 5 为选择删除程序之后的运行结果, 输入项目编号后可完成对应的项目删除。完成后返回主界面。-15-选择 4 查找程序运行的结果如图 6 所示图 6 程序运行结果图 6 为选择查找程序之后的运行结果, 输入项目编号后可完成对应的项目查找并将找到的项目输出。完成后返回主界面。5.2 运行结果分析整个程序中的项目存储采用的是动态内存分配的方式。基类用于数据输入提取,公有派生类 output 用于项目信息的输出,虚函数 addproject 用于项目信息的添加,除了继承基类的基本特征之外,结合问题的实际需要,增加按编号查找的指针 equal ,使基类进一步具体化、实用化,使项目信息进行各种处
25、理时更方便快捷。程序的访问控制也是根据问题的需要而设计的。基类 project的数据成员的存储、维护着项目信息,这些都是在进行查找,删除等一系列操作所必须访问和使用的。利用保护成员特征,将基类数据成员的访问控制属性设置为保护型,对于其派生类可以自由调用,而对于类外的其余模块,这些数据无法访问。这样,不影响整个程序对数据的实用又能很好的保护项目的信息。在派生过程中, 基类的构造函数和析构函数无法继承下来,因此在派生类中需要添加构造函数、 析构函数来完成派生类的初始化和最后清理工作。派生类的构造函数通过调用基类的构造函数来对基类数据进行初始化。-16-6 基于 MFC的图形界面程序开发MFC的图形
26、界面程序设计可在上述类设计的基础上进行改造,MFC的图形界面程序与 DOS界面程序的主要不同点是:MFC图形界面程序与 DOS界面程序的输入输出方式不同,DOS界面程序采用字符交互式实现数据输入输出,主要通过cin ,cout 等 I/O 流实现,而 MFC的图形程序界面采用标准 Windows窗口和控件实现输入输出,因此必须在 MFC类的框架下加入上面所设计的矩阵和方程组类,并通过图形界面的输入输出改造来完成。6.1基于 MFC的图形界面程序设计( 1)界面设计首先在 VC中建立 MFC AppWizard(exe)工程,名称为 MFC界面,并在向导的Step1 中选择 Dialog bas
27、ed ,即建立基于对话框的应用程序,如下图7、图 8 所示。图 7 建立 MFC AppWizard(exe) 工程-17-图 8 建立基于对话框的应用程序将对话框资源中的默认对话框利用工具箱改造成如下界面,如图9 所示。图 9 项目信息操作程序界面设计图 9 所示的界面中包含了 16 个 Static Text 控件, 5 个 Button 控件,和 16个 Edit Box控件,控件的基本信息列表如下表1 所示。-18-控件类别控件 IDStatic TextIDC_STATICIDC_tianjiaIDC_xiugaiBottonIDC_shanchuIDC_chazhaoIDC_tui
28、chuIDC_TJnameIDC_TJnumberIDC_TJlevelIDC_TJchargeEdit BoxIDC_XGINnumberIDC_XGnameIDC_XGnumberIDC_XGlevel表 1 控件基本信息控件 Caption说明项目名称添加操作使用项目编号项目等级项目负责人需要输入的项目修改操作使用编号项目名称项目编号项目等级项目负责人需要输入的项目删除操作使用编号删除是否成功需要输入的项目查找操作使用编号项目名称项目编号项目等级项目负责人执行添加操作执行修改操作执行删除操作执行查找操作执行退出操作名称添加使用编号等级负责人输入编号修改使用名称编号等级-19-IDC_XG
29、charge负责人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 成员变量设置界面-20-图 11 成员变量设置界面通过
30、该界面设置与16 个 Edit Box控件对应的成员变量,具体如表2 所示。表 2控件基本信息控件 ID成员变量类型成员变量名称IDC_TJnameCStringm_TJnameIDC_TJnumberIntm_TJnumberIDC_TJlevelintIDC_TJlevelIDC_TJchargeCStringm_TJchargeIDC_XGINnumberIntm_XGINnumberIDC_XGnameCStringm_XGnameIDC_XGnumbeIntm_XGnumbeIDC_XGlevelIntm_XGlevelIDC_XGchargeCStringm_XGchargeIDC
31、_SCINnumberIntm_SCINnumberIDC_SCYONCStringm_SCYONIDC_CZINnumberIntm_CZINnumberIDC_CZnameCStringm_CZnameIDC_CZnumberIntm_CZnumberIDC_CZlevelIntm_CZlevelIDC_CZchargeCStringm_CZcharge-21-下面是编写代码的重要阶段,由于自身水平所限,无法应用类。所以选择直接通过按钮实施各项操作,下面是各个按钮的编写代码。void CMy2020Dlg:Ontianjia() / 添加函数按钮代码UpdateData(true);m_T
32、Jname=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_XGcharge;else
33、 m_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);-22-/ TODO: Add your control notification handler 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;else m_CZnumber=0; m_CZname=c;m_CZlevel=0;m_CZcharge=d;UpdateD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宫腔镜子宫隔膜切除术后护理查房
- 节能减排目标保证承诺书4篇
- 精准医疗技术规范承诺书4篇范文
- 无人机农业科技推广手册
- 紧急支援即时响应承诺书5篇
- 建设工程施工期限准时承诺函8篇
- 2026届浙江省余姚市重点中学初三下学期模块考试英语试题含解析
- 2026年湖南省长沙市长雅中学下学期初三期末质量检测试题英语试题含解析
- 2026年安徽省安庆市怀宁县达标名校初三5月联考英语试题试卷含解析
- 建筑装饰工程现场安全管理与操作手册
- 轮状病毒性肠炎护理查房
- 自由落体运动实验报告
- GB/T 8554-1998电子和通信设备用变压器和电感器测量方法及试验程序
- GB/T 17160-19971:500、1:1000、1:2000地形图数字化规范
- GA/T 1567-2019城市道路交通隔离栏设置指南
- 人力资源六大模块知识课件
- 氧化铝调度员培训手册
- 茶叶审评技术:茶叶色泽形成课件
- 2023年北京财贸职业学院教师招聘考试笔试题库及答案解析
- DB11T 2000-2022建筑工程消防施工质量验收规范
- 2023湖北成人学位英语考试真题及答案1
评论
0/150
提交评论