C++课程总结报告参考.docx
- 文档编号:25413986
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:31
- 大小:608.93KB
C++课程总结报告参考.docx
《C++课程总结报告参考.docx》由会员分享,可在线阅读,更多相关《C++课程总结报告参考.docx(31页珍藏版)》请在冰豆网上搜索。
C++课程总结报告参考
课程总结报告
课程名称:
C++开发技术
学生学号:
学生姓名:
专业:
班级:
16年月日
第一部分课程学习概述
上学期我们学习的Java和这学期学习的C++一样都是面向对象的,虽然C++也可以面向过程设计。
在说面向对象之前我们先做个比较。
一,传统开发方式存在问题
1.软件重用性差
重用性是指同一事物不经修改或稍加修改就可多次重复使用的性质。
软件重用性是软件工程追求的目标之一。
2.软件可维护性差
软件工程强调软件的可维护性,强调文档资料的重要性,规定最终的软件产品应该由完整、一致的配置成分组成。
在软件开发过程中,始终强调软件的可读性、可修改性和可测试性是软件的重要的质量指标。
实践证明,用传统方法开发出来的软件,维护时其费用和成本仍然很高,其原因是可修改性差,维护困难,导致可维护性差。
3.开发出的软件不能满足用户需要
用传统的结构化方法开发大型软件系统涉及各种不同领域的知识,在开发需求模糊或需求动态变化的系统时,所开发出的软件系
往往不能真正满足用户的需要。
用结构化方法开发的软件,其稳定性、可修改性和可重用性都比较差,这是因为结构化方法的本质是功能分解,从代表目标系统整体功能的单个处理着手,自顶向下不断把复杂的处理分解为子处理,这样一层一层的分解下去,直到仅剩下若干个容易实现的子处理功能为止,然后用相应的工具来描述各个最低层的处理。
因此,结构化方法是围绕实现处理功能的“过程”来构造系统的。
然而,用户需求的变化大部分是针对功能的,因此,这种变化对于基于过程的设计来说是灾难性的。
用这种方法设计出来的系统结构常常是不稳定的,用户需求的变化往往造成系统结构的较大变化,从而需要花费很大代价才能实现这种变化。
二,面向对象的基本概念
1.对象
对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则,计划或事件。
2.对象的状态和行为
对象具有状态,一个对象用数据值来描述它的状态。
对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。
对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。
3.类
具有相同或相似性质的对象的抽象就是类。
因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。
类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。
类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。
3.类的构造
在客观世界中有若干类,这些类之间有一定的结构关系。
通常有两种主要的结构关系,即一般--具体结构关系,整体--部分结构关系。
①一般——具体结构称为分类结构,也可以说是“或”关系,或者是isa的关系。
②整体——部分结构称为组装结构,它们之间的关系是一种“与”关系,或者是hasa的关系。
4.消息和方法
对象之间进行通信的结构叫做消息。
在对象的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。
发送一条消息至少要包括说明接受消息的对象名、发送给该对象的消息名(即对象名、方法名)。
一般还要对参数加以说明,参数可以是认识该消息的对象所知道的变量名,或者是所有对象都知道的全局变量名。
类中操作的实现过程叫做方法,一个方法有方法名、参数、方法体。
三、面向对象的特征
1.对象唯一性。
每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。
在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。
2.抽象性。
分类性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。
一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。
任何类的划分都是主观的,但必须与具体的应用有关。
3.继承性。
继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。
在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
继承性是面向对象程序设计语言不同于其它语言的最重要的特点,是其他语言所没有的。
在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。
在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承。
在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,它简化了对象、类的创建工作量,增加了代码的可重性。
采用继承性,提供了类的规范的等级结构。
通过类的继承关系,使公共的特性能够共享,提高了软件的重用性。
4.多态性(多形性)
多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。
不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
多态性允许每个对象以适合自身的方式去响应共同的消息。
多态性增强了软件的灵活性和重用性。
第二部分课后程序设计介绍
1.概述
本程序设计是《C++开发技术》课程的后继实践考核环节,学好C++语言就必须坚持用面向对象的思维方式分析问题、解决问题,最好的方法是仿照教材编写C++实际应用程序。
此次程序设计的题目及要求:
实现一个简单的工资管理系统。
1.1程序的基本功能
系统的主要功能是计算职工当月工资并存档。
公司内有5种不同类型的职工:
技术人员、销售人员、文秘、技术经理和销售经理,他们的工资计算方式各不相同。
1.2其它功能
将工资信息存入salary.txt文件中,工资信息包含雇员编号、姓名、职务、月份、月收入。
Info.txt文件中只存留一些信息及会员最后进入系统时输入的数据,最多含有编号、姓名、职务、月份的信息。
1.3扩展功能
采用了会员制度,并将登入信息及编号、密码存入number.txt文件中。
2课题分析
通过对课题的深入分析,我将这个课题分为以下几个模块,深入详细得剖析它们。
2.1会员登入系统模块即systemhead静态全局函数模块
程序运行后,先进行会员选择判断。
为减少会员重新注册,通过输入两次编号及密码,增加繁琐度。
同时在一定的方面上,又方便忘记密码的会员。
通过密码匹配,雇员的工资信息这一隐私得到了很好的保障。
2.2查询功能模块即search函数模块
首先,从info.txt中提取编号,与salary.txt中的编号进行匹配,匹配成功,输出工资信息,直到文件!
indata.eof()==0。
.
2.3职务信息匹配及处理模块即systembody静态全局函数模块模块4
从info.txt中提取职务信息,用switch语句进行匹配,据匹配情况调用不同的函数进行输入、处理、显示并以增加方式记录到salary.txt中。
2.4循环控制模块即while
(1)模块
为了更加方便使用,尽量改善系统,实现search函数及systembody函数功能,在search函数及systembody函数模块的基础上加了一些必要的语句,并增加了外层循环控制。
3详细设计
作为一个面向对象程序设计,我们不得不先从类的声明开始设计,而后是一个整体的流程图做框架。
最后在从小的模块结构着手。
3.1
类声明
3.2
图3.2职工工资管理系统简略流程图
系统简略流程图
3.3会员登入系统模块即systemhead静态全局函数模块
3.4查询功能模块即search函数模块
3.5职务信息匹配及处理模块即systembody静态全局函数模块
3.6循环控制模块即while
(1)模块
图3.6循环控制模块即while
(1)模块
1
0
2
输入选择操作
查询功能模块
Info及recordinfo调用
systembody调用
选择?
结束
4程序设计总结
4.1完成情况
本次程序设计的所有功能基本完成,并且扩展功能也成功的实现!
可执行文件能正常执行指令并运行!
4.2遇到的问题及解决
图4.2.1错误
[Error]C:
\Users\权\Desktop\main.o(.data$_vt$8Employee+0xc):
main.cpp:
undefinedreferenceto`Employee:
:
countSalary(void)'
错误:
没有定义Employee类中的countSalary函数!
改正:
将原先的“virtualvoidcountSalary();”改为”virtualvoidcountSalary(){}”
图4.2.2错误
错误分析:
(会员板块中)提示:
“数字1表示是!
其他键表示否!
”,但定义的选择变量为整型。
加上我当时输入字符p。
改正:
“其他键表示否!
”改为”数字0表示否”。
输入时按提示进行输入即可!
图4.2.3错误
调试分析:
错误发生在systemhead静态全局函数内的文件输入循环模块中!
改正:
将以nocreate方式即”ifstreamindata("d:
\\number.txt",ios:
:
nocreate);“该为默认打开方式即“ifstreamindata("d:
\\number.txt");”。
图4.2.4错误
调试分析:
错误发生在调用systembody静态全局函数前后的while循环模块中,很有可能是数据存取混乱造成的。
改正:
systemhead静态全局函数内“ofstreamoutdata("d:
\\info.txt",ios:
:
trunc);”改为先清
后在以默认方式输入!
且将存取整型编号的变量类型从字符型改为整型。
图4.2.5错误
错误:
后面莫名其妙的跟着一个提示语句指令。
分析调试:
当语句指令是基类info函数内的语句,很有可能是循环控制出现了一些问题。
改正:
见程序源代码!
参考文献
[1]下面给出几个参考文献的格式参考
[2]匿名,不知道,非常多.计算机实用教程.北京:
XX大学出版社,2004,123~234
[3][美]DonisSomething.VisualX#2008技术内幕.北京:
YYY大学出版社,2007,56~78
[4]JohnsSmith,JamesNothing.ProgramminginC++orAnythingandSomething.2007
[5]Anonymous.SomethingtoSay.2007
[6]《面向对象程序设计》,郑莉,清华大学出版社,
[7]《面向对象程序设计C++语言》,朱战立等编西安电子科技大学出版社
[8]《面向对象程序设计----VisualC++》,刘斌等编,清华大学出版社
[9]《面向对象程序设计----C++语言描述》,RichardJohnsonbaugh(美)等著,蔡宇辉等译,机械工业出版社,2003
附录
本系统有三个源程序文件构成,分别为system.h,system.cpp及main.cpp。
同时含有三个系统文件,分别为info.txt,name.txt及salary.txt,且全部存放在D盘根目录下,请勿随意移动或修改系统文件。
当会员正式进入系统,info.txt是先清空后用来存储会员输入的信息,最多含有编号、姓名、职务及月份。
当仅会员注册时,会将编码及密码存储到name.txt中。
当仅会员登入的编号及密码进行匹配时,会打开输入文件name.txt,提取编号及密码,进行匹配。
当仅当输入工资数据时,会将工资、编号、姓名、职务、月份存储到salary.txt中。
当仅当查询工资信息时,会打开salary.txt,提取编号、姓名、职务、月份及工资。
该系统是一个只适合5种及5种职务的工资管理系统。
并将职务分为技术人员、销售人员、文秘、技术经理和销售经理,其代号分别为1,2,3,4,5。
雇员编号以整型变量存储,编号所取范围在-65536至65535之内(包括边界值),首位数字表示相应的职务代码。
该系统能力有限,请根据指示严格输入相应字符!
程序清单
Main函数
#include"system.cpp"
#include"cstring"
staticvoidsystemhead();
staticvoidsystembody();
staticvoidtechnician();
staticvoidsalesman();
staticvoidsecretary();
staticvoidtechmanager();
staticvoidsalesmanager();
usingnamespacestd;
voidmain()
{
systemhead();//调用systemhead静态全局函数
cout<<"\n\n1:
查询工资";
cout<<"\n\n2:
输入工资数据";
cout<<"\n\n0:
退出系统!
\n\n";
cout<<"请选择您需要的操作!
!
\n";
while
(1)
{
intxuanze;
cin>>xuanze;
if(xuanze==1)
{
employeea;
cout< a.search(); cout<<"\n\n输入工资数据请按数字2,退出系统请按数字0! \n\n"; }//查询工资信息 if(xuanze==2) { employeea; a.info(); a.recordinfo();//输入处理工资数据并暂时记录 systembody();//调用systembody静态全局函数 cout<<"\n\n查询工资请按数字1,退出系统请按数字0! \n\n"; } if(xuanze==0)exit(0); } } staticvoidsalesmanager() { SalesManagera5; floatsum; cout<<"请输入整个月的总营业额: "; cin>>sum; a5.setsalesnum(sum); a5.countSalary(); a5.recordSalary(); } staticvoidtechmanager() { TechManagera4; intgra; cout<<"请输入这个月的评级: ";//1,2,3三个等级 cin>>gra; a4.setgrade(gra); a4.countSalary(); a4.recordSalary(); } staticvoidsecretary() { Secretarya3; floatbon; cout<<"请输入这个月的额外奖励: "; cin>>bon; a3.setbonus(bon); a3.countSalary(); a3.recordSalary(); } staticvoidsalesman() { Salesmana2; floatsum; cout<<"请输入整个月的营业额: "; cin>>sum; a2.setsalesnum(sum); a2.countSalary(); a2.recordSalary(); } staticvoidtechnician() { Techniciana1; floathour; cout<<"请输入整个月的工作时间: "; cin>>hour; a1.setHour(hour); a1.countSalary(); a1.recordSalary(); } staticvoidsystembody() { ifstreamindata("info.txt"); if(indata==NULL)exit(0); intnum; charna[25]; intsta; indata>>num>>na>>sta;//职务代号分别为1,2,3,4,5 switch(sta) { case1: technician();break; case2: salesman();break; case3: secretary();break; case4: techmanager();break; case5: salesmanager();break; default: cout<<"职务代号错误! \n请重新输入! "; } } staticvoidsystemhead() { charx,y='y'; intnum; charsecret[6]; while(y) { cout<<"\n\n系统会员请输入'y',非系统会员请输入‘n’\n"; cin>>x; if(x) { cout<<"请输入编号(首位为职务代号且为不超过5位数的整数): \n"; cin>>num; cout<<"请输入密码(6及6位字符以下): \n"; cin>>secret;//输入编号及密码 ifstreamindata("number.txt"); if(indata==NULL) { cout<<"文件打开失败! 请联系管理员! \n";exit(0);//文件没打开,退出程序 } intnum1;charsecret1[6]; indata>>num1; while(! indata.eof()) { indata>>secret1; if((num==num1)&&(strcmp(secret,secret1)==0)) { y=0;//改变判断变量的值,停止外层循环 break;//终止内层循环 } indata>>num1; } indata.close();//检验登入信息 } else { cout<<"请输入编号(首位为职务代号且为不超过5位数的整数): \n"; cin>>num; cout<<"请输入密码(6及6位字符以下): \n"; cin>>secret;//注册输入编号及密码 ofstreamoutdata("number.txt",ios: : app); outdata< outdata.close();//将编号及密码保存到number.txt中 cout< } } ofstreamoutdata("info.txt",ios: : trunc); outdata.close();//清空文件内容 ofstreamoutdata1("info.txt"); outdata1< outdata.close();//输入编号至info.txt } System.cpp #include #include #include"system.h" usingnamespacestd; voidEmployee: : info() { charna[25];intsta,mon; cout<<"请依次输入姓名、职务代号及月份(以空格符分隔): "; cin>>na>>sta>>mon; name=na;status=sta;month=mon;//存储姓名、职务、月份 } voidEmployee: : search() { intnum; ifstreamindata0("info.txt"); if(indata0==NULL)exit(0); indata0>>num; indata0.close();//从文件info.txt中提取编号 intnum1;charna1[25];intsta1;intmon1;floatsal; intmon0; ifstreamindata("salary.txt"); if(indata==NULL)exit(0); while(! indata.eof()) { indata>>num1>>na1>>sta1>>mon1>>sal; if(num==num1) cout< //依次输出该雇员的工资信息 } if(indata.eof()) cout<<"\n\n以上是你的工资信息! \n\n"; indata.close(); } voidEmployee: : recordinfo() { ofstreamoutdata("info.txt",ios: : app); outdata< outdata.close();//添加姓名、职务、月份至存有编号的info.txt中 } voidEmployee: : recordSalary() { ifstreamindata("info.txt"); indata>>number>>name>>status>>month; indata.close();//依次输出该雇员的工资信息 intnum1;charna1[25];intsta1;intmon1;floatsal; ifstreamindata1("salary.txt"); if(indata1==NULL)exit(0); while(! indata1.eof()) { indata1>>num1>>na1>>sta1>>mon1>>sal; if(month! =mon1) cout< else exit(0); //依次输出该雇员的工资信息 } cout< //显示工资信息 ofstreamoutdata("salary.txt",ios: : app); outdata<<'\n'< outdata.close(); } voidTechnician: : setHour(floatx) {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程 总结报告 参考