C++课程设计报告.docx_第1页
C++课程设计报告.docx_第2页
C++课程设计报告.docx_第3页
C++课程设计报告.docx_第4页
C++课程设计报告.docx_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C+课程设计报告 姓名:学号:04 班级:软件152班 指导老师: 2016 年 6 月 25日课程设计报告一、课程设计目的及要求1. 设计目的1提高和加强学生的计算机应用与软件开发能力,使学生由初学者向专业的程序员过渡。2培养学生独立分析问题、解决问题、查阅资料以及自学能力,以适应计算机产业日新月异发展的形势。3学习和掌握C+程序设计方法以及上机调试技巧,为今后学习其它专业课程打好基础。仓库管理系统目的:理清头绪,开始入手。交通工具选择系统目的:考察我们的抛出异常解决问题能力。公司库存管理系统目的:考察继承,基类和子类的关系。学生选修课系统目的:主要是文件的读写。成绩记录簿目的:练习链表功能,和文件与链表的关系。2. 设计要求(1) 仓库管理私有成员为,仓库名称,仓库中物品(名称,数量,单价),采用指针存储动态数组方式存储学生信息。重载“+”操作,表示两个仓库合并,仓库名称由两个仓库名称连接到一起,其中新仓库为为两个仓库的所有物品,且同一种物品能够合并。重载操作直接获得第i个同学记录。l该类的对象不能拷贝构造及赋值(2) 交通工具选择l设计抽象类:交通工具类。l派生类:汽车类、火车类、飞机类。l设计函数:获得交通类型名称函数,函数可以根据不同交通工具类型输出不同的运输方式获得交通类型名称。设计运输函数,参数为运输人数,在不同派生类实现该函数,要求:汽车40;飞机200;火车2000;在不同类中如果参数超出范围则抛出字符串异常。(3) 公司库存管理系统某公司现有以下设备:普通电视机、DVD、带DVD的电视机。带DVD的电视机的售价为普通电视机和DVD单价之和的80%。要求对所有的库存设备都能按照品名进行显示、查找、增加和删除、保存的功能。(4) 学生选修课系统系统以菜单方式工作?课程信息录入功能(课程信息用文件保存)输入?课程信息浏览功能输出?查询功能:(至少一种查询方式)算法?按学分查询?按课程性质查询?学生选修课程(可选项)?(5) 成绩记录簿创建信息链表并以磁盘文件保存;读取磁盘文件并显示输出所有学生的成绩;按学号或姓名查询成绩;添加成绩记录;修改指定姓名或学号的学生的成绩并可存盘;显示输出60分以下、6079、8089、90分以上各分数段的学生信息。2、 课程设计具体实现1、 仓库管理(1) 总体设计用例图:总体设计方案:首先输入仓库信息接着输入仓库里的物品信息,直接进行合并,并输出合并后的信息,之后选择添加信息或者查询信息。主要设计原理:定义两个类,仓库类和物品类,在仓库类里采用动态数组储存物品的方式,在物品类里面重载插入提取运算符,方便输入和输出。利用重载下标运算符来来获得所要查询的物品信息,如果下标越界则抛出异常,下面接受异常。(2) 详细设计数据录入模块主要完成功能为:输入仓库信息,物品信息,合并仓库并输出。主要使用技术:重载插入,提取运算符,给指针分配空间。关键代码如下:int s;cout*n;coutName;coutn; s=cin.rdstate(); /判断输入n的返回流的状态while(s)cin.clear();cin.getline(t,80);coutn;s=cin.rdstate();sum=n;g=new CGoodsn; /动态分配空间for(int i=0;igi; /重载了插入运算符 for(i=0;is2.sum;i+) /两重for循环flag=1;for(j=0;js.sum;j+)if(s.gj.getName()=s2.gi.getName() /判断两个对象的物品名是否相同flag=0;s.gj.setGood(s2.gi); /若相同,让两个数量相加break;if(flag)s.gs.sum+=s2.gi; /若不相同,让物品累加在前面对象的清单里添加物品信息模块主要完成功能为:动态添加到动态数组。主要使用技术:需要再定义一个动态指针数组,并把以前的值付给指针数组之后再添加。关键代码如下:CGoods *gg; /新定义一个物品类指针gg=new CGoodssum+1; /分配原有物品个数+1大的空间for(i=0;isum;i+)ggi=gi; /把原来的物品类赋值给新开辟的空间ggsum+=gd; /添加新的物品delete g; /释放掉原有的空间g=gg; /让g指针指向gg for(int i=0;is1.getSum();i+) if(go.getName()=si+1.getName() /判断物品是否相同 a=0; si+1.setGood(go); /添加时若物品相同数量相加 break; if(a) s.addGood(go);数据查询模块主要完成功能:用for循环来控制查找相同的变量输出,或者直接输出。关键代码如下: cout名称t数量t单价endl; for(int i=0;isum;i+) cout选择交通工具-输出交通类型,根据顾客人数判断抛出异常。之后再重新选择直至三个交通方式都不是,或者只要有一个可以乘坐结束。主要设计原理:先定义一个抽象类,再定义汽车类,火车类,飞机类继承抽象类,分别实现里面的虚函数,判断是否抛出异常,接受异常并输出。(2) 详细设计数据录入模块主要完成功能为:输入顾客人数,来判断乘坐哪种交通工具数据输出模块主要完成功能为:判断顾客人数是否否和范围,不符合范围抛出异常,接受异常并输出异常。其中有三个静态变量来控制标记已选过的交通工具。三个都选过,或者没有异常结束。主要使用技术:使用throw,try,catch三个函数,用基类指针调用子类。关键代码如下: trycouta;int sss;char tt20;sss=cin.rdstate(); /用于控制输入选项的状态while(sss)cin.clear();cin.getline(tt,80);couta;sss=cin.rdstate();while(a3) /判断选项是否越界couta;sss=cin.rdstate();while(sss)cin.clear();cin.getline(tt,80);couta;sss=cin.rdstate();if(a=1)v=&c;v-printf();v-transport(n); /抛出异常语句else if(a=2)v=&t;v-printf();v-transport(n); /抛出异常语句else if(a=3)v=&p;v-printf();v-transport(n); /抛出异常语句catch(char *message) /接受异常 coutendlendlendl;coutmessageendl;system(pause);if(t.e2=2&c.e1=1&p.e3=3) /用来判断是否全选过一边system(cls); /清屏coutendlendlendlendl;cout三种交通工具都超载!请另想办法吧!菜单-显示包括录入和输出。由于有三个物品类型所以要分别输入,之后的查询,删除等方式都要分情况选择。实行完这些模块后会选择返回主页面和结束程序。注意:输入时第三种物品是前两种的价钱80%,所以要加以判断。主要设计原理:注意对应文件对应的对象,查询要从文件读数据,删除还要再写进去。注意继承,由于函数相同所以要判断,其中还有静态变量来控制每个类型的物品数,用来之后的删除。(2) 详细设计登陆模块主要完成功能为:当用户开始使用本系统,进入登陆模块。屏幕显示提示,用户可根据需要选择相应功能。具体如下:1、进入菜单2、结束程序。用户可根据需要选择相应功能。进入菜单之后又会出现登录模块,1、存入物品2、显示库存3、查找物品4、增加物品5、删除物品6、返回主页面,根据自己的意愿选择相应的功能。主要使用技术:清屏实现页面的转换,控制选项的越界和状态。关键代码如下:system(cls); /清屏coutendlendlendl;cout *欢迎进入公司库存管理系统!*endl;cout * *endl;cout * 1.存入物品 *endl;cout * *endl; cout * 2.显示库存 *endl;cout * *endl;cout * 3.查找物品 *endl;cout * *endl;cout * 4.增加物品 *endl;cout * *endl;cout * 5.删除物品 *endl;cout * *endl;cout * 6.返回主页面 *endl;cout * *endl;cout *n;n=pand(n); /自己定义的判断选项状态的函数数据录入模块主要完成功能为:刚进入就分四个选项,三个是要输入的种类,还有一个是返回主页面。把信息分别录入不同种类的不同文件中,其中物品品名已经规定直接输入选项。主要使用技术:文件的写入,还有一些数据控制同上。关键代码如下: rrrface(); /物品品名显示菜单 cout请按照品名(16以外结束) 单价输入,例:(TV,DVD)1 216 555 ,(TVDVD)1 222endl; while(1) /用选项来代替课程性质,但最后写入文件类型是string类couttype;type=pand(type);if(type6)break;if(type=1)out先科;else if(type=2)out先锋;else if(type=3)out谷天;else if(type=4)out索尼;else if(type=5)out飞利浦;elseoutpricenum;查询、删除、添加模块主要完成功能为:查询,删除,添加对应信息的物品,物品品名可用选项代替,删除后要把删除后的代码重新读入文件中。主要使用技术:文件的读和写。关键代码如下:查询:while(intpn)if(t1=t&p=p1) /查询必须品名和单价相等cout所查询的TV有:品名:t单价:p数量:ntpn)if(t!=t1|p!=p1)couteeeendl;tti=t;ppi=p;nni=n;i+;in.close();sum1-;ofstream out(TVGoods.txt);if(!out)judge();for(int j=0;ji;j+) /最后重新写入文件outttj ppj nnjendl; 添加:while(1)couttype;type=pand(type);if(type6)break;if(type=1)out先科;else if(type=2)out先锋;else if(type=3)out谷天;else if(type=4)out索尼;else if(type=5)out飞利浦;elseoutprice;(3) 调试及问题解决删除时会系统会崩,原因是下表越界,由于程序太长,所以采用断点调试的方法查找错误。还有就是控制输入格式。4、 学生选修课系统(1) 总体设计用例图:总体设计方案:主页面-菜单-录入,输出,查询,学生选修,分别实现各个模块。学生选修课程要先分学生登陆,注册。登陆之后再进行选课或者查询选课纪录,之后再有两个选项返回主页面,和结束程序。主要设计原理:注意对应文件对应的对象,查询要从文件读数据。学生选修课记录课程需要学生登录,注册。注册密码需要把密码学生信息写到一个文件里,登录时需要从中读出相应学生密码并比较。之后进入后可以选课或者已经选过课直接查看选课记录。(2) 详细设计登陆模块主要完成功能为:当用户开始使用本系统,进入登陆模块。屏幕显示提示,用户可根据需要选择相应功能。具体如下:1、进入菜单2、结束程序。用户可根据需要选择相应功能。进入菜单之后又会出现登录模块,1、录入课程信息2、输出课程信息3、按学分查询4、按课程性质查询5、学生选修课程。根据用户的身份选则不同的选项。进入学生选修课程后会有1、登陆2、注册3、返回页面。关键代码如下:system(cls);coutendlendlendl;cout *欢迎进入学生选修课程系统!*endl;cout * *endl;cout * 1.录入课程信息 *endl;cout * *endl; cout * 2.输出课程信息 *endl;cout * *endl;cout * 3.查询课程信息-学分 *endl;cout * *endl;cout * 4.查询课程信息-课程性质 *endl;cout * *endl;cout * 5.学生选修课程 *endl;cout * *endl;cout * 6.返回主页面 *endl;cout * *endl;cout *endl;数据录入和输出模块:主要完成功能为:把输入的数据写入文件里面,把从文件里面的数据读出来。注意:课程性质用选项来代替。主要使用技术:文件的读和写。关键代码如下: 录入:coutid;if(id=xxx)break;cintitlenatureperiodteachperiod0creditterm;teachperiod1=period-teachperiod0;while(nature5|nature1)cout课程性质不存在,请重新输入!endl;coutidtitlenatureperiodteachperiod0creditterm;teachperiod1=period-teachperiod0;while(credit4|credit1)cout课程学分越界,请重新输入!endl;coutidtitlenatureperiodteachperiod0creditterm;teachperiod1=period-teachperiod0;outid title ;if(nature=1)out社会;else if(nature=2)out技术;else if(nature=3)out跨科;else if(nature=4)out数学;else if(nature=5)out文明;out period teachperiod0 teachperiod1 credit termch;coutch;if(ch= )coutt;in.close(); 学生选修课模块主要完成功能为:注册,登录,选课和查询选课记录。主要使用技术:隐藏密码,文件读写。关键代码如下: 注册:coutendlendlendlendl;cout *欢迎注册!*endl;coutnum;coutname;cout 请输入密码:;for(int i=0;ipassagei;passage6=0;cout *注册成功!*endl;ofstream out1(student.txt,ios:app);out1num name passageendl;out1.close(); 登录: for(int i=0;in3na3)inni1tn1p1t1t2c1te;if(n3=num&na3=name)couti1tttn1tp1tt1tt2tc1tteendl;inn.close();查询模块主要完成功能为:查找相应的物品信息关键代码如下:system(cls);cout *学分类型*endlendl;cout 1.1分 2.2分 3.3分 4.4分 endlendl;cout *endl;couta;if(a=1)cout*课程信息(学分为1)*endl;cout编号t名称t性质t总学时t授课时t实验时t学分t开课期itnpt1t2cte)if(c=1)coutitttntptt1tt2tctte菜单-1.成绩管理系统 2.成绩查询系统-各个部分的菜单-分别实现录入信息,查询信息,修改信息,添加信息等功能。最后实现各个模块后在返回主页面进行下一次选择。主要设计原理:主要定义结构体利用了链表的方法,再结合文本进行读出和写入。注意判断链表是否为空链表,否则会引起系统错误。链表文件是同步的,即添加链表后要写入文件,读出文件的时候要把数据赋值给链表。(2) 详细设计登陆模块主要完成功能为:当用户开始使用本系统,进入登陆模块。屏幕显示提示,用户可根据需要选择相应功能。具体如下:1、进入菜单2、结束程序。用户可根据需要选择相应功能。进入菜单之后又会出现登录模块,1、成绩管理系统2、成绩查询系统3、返回主页面,根据用户的身份选则不同的选项。进入各个系统后又会出现登录页面里面有:录入,查询,修改等功能,根据需要选择不同的功能来满足用户的需求。主要使用技术:清屏实现页面的转换,控制选项的越界和状态。关键代码如下: system(cls); /清屏coutendlendlendl;cout *欢迎进入成绩记录簿系统!*endl;cout * *endl;cout * 1.成绩管理系统 *endl;cout * *endl; cout * 2.成绩查询系统 *endl;cout * *endl;cout * 3.返回主页面 *endl;cout * *endl;cout *endl;coutb; /输入选项ss=cin.rdstate(); /返回流的当前状态标志字while(ss) /用while循环控制cin.clear(); /将流的状态设置为flag cin.getline(t,80); /读入字符串(包括空格)coutb;ss=cin.rdstate();数据录入模块:主要完成功能为:实现链表与文件之间的联系。增加节点的同时写入文件,进行数据保存,注意要动态分配新节点,判断是否为空指针。主要使用技术:增加节点,写入文件。关键代码如下: struct Student /节点定义 string num; /定义学生学号 string name; /定义学生姓名 double score; /定义学生成绩 Student *next; /定义结构体指针;if(head=NULL) /如果链表为空,输入为第一个节点head=s;s-next=NULL;outst.num st.scorenext!=NULL) /往链表后面添加节点p=p-next;p-next=s;s-next=NULL;outnum name scores-nums-names-score;head=s;s-next=NULL;p=head;s=(Student*)new(Student);while(ins-nums-names-score) /如果不是,往后增加节点while(p-next!=NULL)p=p-next;p-next=s;s-next=NULL;s=(Student*)new(Student);in.close(); /关闭文件查询:while(p!=NULL) /直到节点为空结束输出coutsetiosflags(ios_base:left)setw(30)numsetw(30)n

温馨提示

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

评论

0/150

提交评论