C课程总结报告模板参考.doc
课程总结报告课程名称: C+开发技术 学生学号: 学生姓名: 专 业: 班 级: 16年 月 日目录第一部分 课程学习概述1第二部分 课后程序设计介绍411.概述41.1程序的基本功能41.2其它功能41.3扩展功能42课题分析52.1会员登入系统模块即systemhead静态全局函数模块52.2查询功能模块即search函数模块52.3职务信息匹配及处理模块即systembody静态全局函数模块模块452.4循环控制模块即while(1)模块53详细设计63.1类声明63.2系统简略流程图73.3会员登入系统模块即systemhead静态全局函数模块83.4查询功能模块即search函数模块93.5职务信息匹配及处理模块即systembody静态全局函数模块103.6循环控制模块即while(1)模块104程序设计总结114.1完成情况114.2遇到的问题及解决11参考文献13附录14第一部分 课程学习概述上学期我们学习的Java 和这学期学习的C+一样都是面向对象的,虽然C+也可以面向过程设计。在说面向对象之前我们先做个比较。一,传统开发方式存在问题1.软件重用性差重用性是指同一事物不经修改或稍加修改就可多次重复使用的性质。软件重用性是软件工程追求的目标之一。2.软件可维护性差软件工程强调软件的可维护性,强调文档资料的重要性,规定最终的软件产品应该由完整、一致的配置成分组成。在软件开发过程中,始终强调软件的可读性、可修改性和可测试性是软件的重要的质量指标。实践证明,用传统方法开发出来的软件,维护时其费用和成本仍然很高,其原因是可修改性差,维护困难,导致可维护性差。3.开发出的软件不能满足用户需要用传统的结构化方法开发大型软件系统涉及各种不同领域的知识,在开发需求模糊或需求动态变化的系统时,所开发出的软件系往往不能真正满足用户的需要。用结构化方法开发的软件,其稳定性、可修改性和可重用性都比较差,这是因为结构化方法的本质是功能分解,从代表目标系统整体功能的单个处理着手,自顶向下不断把复杂的处理分解为子处理,这样一层一层的分解下去,直到仅剩下若干个容易实现的子处理功能为止,然后用相应的工具来描述各个最低层的处理。因此,结构化方法是围绕实现处理功能的“过程”来构造系统的。然而,用户需求的变化大部分是针对功能的,因此,这种变化对于基于过程的设计来说是灾难性的。用这种方法设计出来的系统结构常常是不稳定的,用户需求的变化往往造成系统结构的较大变化,从而需要花费很大代价才能实现这种变化。二,面向对象的基本概念1.对象对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则,计划或事件。2.对象的状态和行为对象具有状态,一个对象用数据值来描述它的状态。对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。3.类具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。3. 类的构造在客观世界中有若干类,这些类之间有一定的结构关系。通常有两种主要的结构关系,即一般-具体结构关系,整体-部分结构关系。一般具体结构称为分类结构,也可以说是“或”关系,或者是is a 的关系。整体部分结构称为组装结构,它们之间的关系是一种“与”关系,或者是has a 的关系。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 详细设计作为一个面向对象程序设计,我们不得不先从类的声明开始设计,而后是一个整体的流程图做框架。最后在从小的模块结构着手。class TechManager:public Technician, public Managerprivate:float gradeBonus;int grade;public:TechManager(float x=1000);void setgrade(float x);void countSalary( );图3.1 类声明3.1 类声明图3.2 职工工资管理系统简略流程图3.2 系统简略流程图假结束再次输入否是是否会员输入编号及密码开始注册检验?假真选择?0查询信息1输入姓名、职务、月份真显示职务代码分析工资记录在salary.txt处理1处理2处理3处理4输入1输入2输入3输入4处理5输入5记录编码姓名职务月份至info.txt从info.txt提取职务代码优点:一个入口,一个出口!3.3 会员登入系统模块即systemhead静态全局函数模块清空info.txt并将编号存入到info.txt中图3.3 登入系统模块详细流程图否是否会员输入编号及密码打开name.txt并输出编号及密码匹配?关闭name.txt否是以增加方式打开name.txt并输入编号及密码关闭name.txt.输入编号及密码3.4 查询功能模块即search函数模块10否是输出info.txt中的职务信息将info.txt的编号与salary.txt中的编号进行匹配是否打开info.txt!indata.eof() ?图3.4 查询功能模块以默认方式打开info.txt以默认方式打开salary.txt从文件info.txt中提取编号并关闭文件输出“以上是你的工资信息!”关闭salary.txt3.5 职务信息匹配及处理模块即systembody静态全局函数模块图3.5 systembody函数模块以默认方式打开info.txt提取info.txt中的职务信息switch语句进行职务匹配调用不同函数进行数据处理及显示3.6 循环控制模块即while(1)模块图3.6循环控制模块即while(1)模块102输入选择操作查询功能模块Info及recordinfo调用systembody调用选择?结束4 程序设计总结4.1 完成情况本次程序设计的所有功能基本完成,并且扩展功能也成功的实现!可执行文件能正常执行指令并运行!4.2 遇到的问题及解决图4.2.1错误Error C:Users权Desktopmain.o(.data$_vt$8Employee+0xc):main.cpp: undefined reference to Employee:countSalary(void)'错误:没有定义Employee类中的countSalary函数!改正:将原先的“virtual void countSalary();”改为” virtual void countSalary()”图4.2.2错误错误分析:(会员板块中)提示:“数字1表示是!其他键表示否!”,但定义的选择变量为整型。加上我当时输入字符p。改正:“其他键表示否!”改为”数字0表示否”。输入时按提示进行输入即可!图4.2.3错误调试分析:错误发生在systemhead静态全局函数内的文件输入循环模块中!改正:将以nocreate方式即” ifstream indata("d:number.txt",ios:nocreate); “ 该为默认打开方式即“ifstream indata("d:number.txt");”。图4.2.4错误调试分析:错误发生在调用systembody静态全局函数前后的while循环模块中,很有可能是数据存取混乱造成的。改正: systemhead静态全局函数内“ofstream outdata("d:info.txt",ios:trunc);”改为先清后在以默认方式输入!且将存取整型编号的变量类型从字符型改为整型。图4.2.5错误错误:后面莫名其妙的跟着一个提示语句指令。分析调试:当语句指令是基类info函数内的语句,很有可能是循环控制出现了一些问题。改正:见程序源代码!参考文献1 下面给出几个参考文献的格式参考2 匿名,不知道,非常多计算机实用教程北京:XX大学出版社,2004,1232343 美 Donis SomethingVisual X# 2008技术内幕北京:YYY大学出版社,2007,56784 Johns Smith, James Nothing. Programming in C+ or Anything and Something. http:/www.world.ic.ac.uk/lab/cplusplus/nothing/index.html 20075 Anonymous. Something to Say. 20076 面向对象程序设计 ,郑莉,清华大学出版社, 7 面向对象程序设计C+语言,朱战立等编 西安电子科技大学出版社8 面向对象程序设计-Visual C+,刘斌等编, 清华大学出版社 9 面向对象程序设计-C+语言描述, Richard Johnsonbaugh(美)等著,蔡宇辉等译,机械工业出版社, 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"static void systemhead();static void systembody(); static void technician();static void salesman();static void secretary();static void techmanager();static void salesmanager();using namespace std;void main()systemhead(); /调用systemhead静态全局函数 cout<<"nn1: 查询工资"cout<<"nn2: 输入工资数据"cout<<"nn0: 退出系统!nn"cout<<"请选择您需要的操作!n"while(1) int xuanze; cin>>xuanze; if(xuanze=1) employee a; cout<<endl<<endl; a.search(); cout<<"nn输入工资数据请按数字2,退出系统请按数字0!nn" /查询工资信息 if(xuanze=2) employee a; a.info(); a.recordinfo(); /输入处理工资数据并暂时记录 systembody(); /调用systembody静态全局函数 cout<<"nn查询工资请按数字1,退出系统请按数字0!nn" if(xuanze=0)exit(0);static void salesmanager()SalesManager a5;float sum;cout<<"请输入整个月的总营业额:"cin>>sum;a5.setsalesnum(sum);a5.countSalary();a5.recordSalary();static void techmanager()TechManager a4;int gra;cout<<"请输入这个月的评级:" /1,2,3三个等级 cin>>gra;a4.setgrade(gra);a4.countSalary();a4.recordSalary();static void secretary()Secretary a3;float bon;cout<<"请输入这个月的额外奖励:"cin>>bon;a3.setbonus(bon);a3.countSalary();a3.recordSalary();static void salesman()Salesman a2;float sum;cout<<"请输入整个月的营业额:"cin>>sum;a2.setsalesnum(sum);a2.countSalary();a2.recordSalary();static void technician()Technician a1;float hour;cout<<"请输入整个月的工作时间:"cin>>hour;a1.setHour(hour);a1.countSalary();a1.recordSalary();static void systembody()ifstream indata("info.txt");if(indata=NULL) exit(0);int num;char na25;int sta;indata>>num>>na>>sta; /职务代号分别为1,2,3,4,5 switch(sta)case 1:technician();break;case 2:salesman();break;case 3:secretary();break; case 4:techmanager();break; case 5:salesmanager();break;default:cout<<"职务代号错误!n请重新输入!"static void systemhead()char x,y='y'int num;char secret6;while(y) cout<<"nn系统会员请输入'y',非系统会员请输入nn" cin>>x; if(x) cout<<"请输入编号(首位为职务代号且为不超过5位数的整数):n" cin>>num; cout<<"请输入密码(6及6位字符以下):n" cin>>secret; /输入编号及密码 ifstream indata("number.txt"); if(indata=NULL) cout<<"文件打开失败!请联系管理员!n" exit(0); /文件没打开,退出程序 int num1;char secret16; 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; /注册输入编号及密码ofstream outdata("number.txt",ios:app);outdata<<num<<'t'<<secret<<'t'outdata.close(); /将编号及密码保存到number.txt中cout<<endl<<endl; ofstream outdata("info.txt",ios:trunc); outdata.close(); /清空文件内容 ofstream outdata1("info.txt");outdata1<<num<<'t'outdata.close(); /输入编号至info.txt System.cpp#include <iostream>#include <fstream>#include "system.h"using namespace std;void Employee:info()char na25;int sta,mon;cout<<"请依次输入姓名、职务代号及月份(以空格符分隔):" cin>>na>>sta>>mon;name=na;status=sta;month=mon; /存储姓名、职务、月份 void Employee:search()int num;ifstream indata0("info.txt");if(indata0=NULL) exit(0);indata0>>num;indata0.close(); /从文件info.txt中提取编号 int num1;char na125;int sta1;int mon1;float sal;int mon0;ifstream indata("salary.txt");if(indata=NULL) exit(0);while(!indata.eof()indata>>num1>>na1>>sta1>>mon1>>sal;if(num=num1)cout<<num1<<'t'<<na1<<'t'<<sta1<<'t'<<mon1<<'t'<<sal<<'n' /依次输出该雇员的工资信息 if(indata.eof() cout<<"nn以上是你的工资信息!nn" indata.close();void Employee:recordinfo()ofstream outdata("info.txt",ios:app);outdata<<name<<'t'<<status<<'t'<<month;outdata.close(); /添加姓名、职务、月份至存有编号的info.txt中 void Employee:recordSalary()ifstream indata("info.txt");indata>>number>>name>>status>>month;indata.close(); /依次输出该雇员的工资信息 int num1;char na125;int sta1;int mon1;float sal;ifstream indata1("salary.txt");if(indata1=NULL) exit(0);while(!indata1.eof()indata1>>num1>>na1>>sta1>>mon1>>sal;if(month!=mon1)cout<<num1<<'t'<<na1<<'t'<<sta1<<'t'<<mon1<<'t'<<sal<<'n'else exit(0); /依次输出该雇员的工资信息 cout<<number<<'t'<<name<<'t'<<status<<'t'<<month<<'t'<<salary; /显示工资信息ofstream outdata("salary.txt",ios:app);outdata<<'n'<<number<<'t'<<name<<'t'<<status<<'t'<<month<<'t'<<salary;outdata.close(); void Technician:setHour(float x)workHour=x;Technician:Technician(float x)hourSalary=x;void Technician:countSalary()salary=workHour*hourSalary;void Salesman:setsalesnum(float x) salesnum=x;Salesman:Salesman(float x)getRate=x;void Salesman:countSalary( )salary=salesnum*getRate;void Secretary:setbonus(float x) bonus=x;Secretary:Secretary(float x)fixedSalary=x;void Secretary:countSalary( )salary=fixedSalary+bonus;Manager:Manager(float x)fixedSalary=x;void TechManager:setgrade(int x)grade=x;TechManager:TechManager(float x)gradeBonus=x;void TechManager:countSalary()salary=fixedSalary+grade*gradeBonus;SalesManager:SalesManager(float x)getRate=x;void SalesManager:countSalary()salary=fixedSalary+salesnum*getRate;void Technician:setHour(float x)workHour=x;Technician:Technician(float x)hourSalary=x;void Technician:countSalary()salary=workHour*hourSalary;void Salesman:setsalesnum(float x) salesnum=x;Salesman:Salesman(float x)getRate=x;void Salesman:countSalary( )salary=salesnum*getRate;void Secretary:setbonus(float x) bonus=x;Secretary:Secretary(float x)fixedSalary=x;void Secretary:countSalary( )salary=fixedSalary+bonus;Manager:Manager(float x)fixedSalary=x;void TechManager:setgrade(int x)grade=x;TechManager:TechManager(float x)gradeBonus=x;void TechManager:countSalary()salary=fixedSalary+grade*gradeBonus;SalesManager:SalesManager(float x)getRate=x;void SalesManager:countSalary()salary=fixedSalary+salesnum*getRate;System.hclass Employeeprotected:int number; char name25; int status;int month; float salary;public:void info(); void search();virtual void countSalary()void recordinfo(); void recordinfo1();void recordSalary();class Salesman:public Employee protected:float salesnum;double getRate;public:Salesman(float x=0.05);void setsalesnum(float x);void countSalary( );class Technician:public Employeeprivate:float workHour; float hourSalary;public:Technician(float x=35.0); void setHour(float x);void countSalary( );class Secretary:public Employeeprivate:float fixedSalary;float bonus;public:Secretary(float x=4000);void setbonus(float x);void countSalary( );class Managerprotected:float fixedSalary;public:Manager(float x=6000);void countSalary( );class SalesManager:public Salesman, public Managerpublic:SalesManager(float x=0.02);void countSalary( );class TechManager:public Technician, public Managerprivate:float gradeBonus;int grade;public:TechManager(float x=1000);void setgrade(int x);void countSalary( );东华理工大学课程总结报告评分表学生姓名: 班级: 学号:课程名称:C+开发技术项目内容满分实 评选题能结合所学课程知识、有一定的能力训练。符合选题要求(5人一题)10工作量适中,难易度合理10能力水平能熟练应用所学知识,有一定查阅文献及运用文献资料能力10理论依据充分,数据准确,公式推导正确10能应用计算机软件进行编程、资料搜集录入、加工、排版、制图等10能体现创造性思维,或有独特见解10成果质量总体设计正确、合理,各项技术指标符合要求。10说明书综述简练完整,概念清楚、立论正确、技术用语准确、结论严谨合理;分析处理科学、条理分明、语言流畅、结构严谨、版面清晰10设计说明书栏目齐全、合理,符号统一、编号齐全。格式、绘图、表格、插图等规范准确,符合国家标准10有一定篇幅,字符数不少于500010总 分100教师评语: 教师签名: 年 月 日