




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
天津农学院计算机科学与信息工程系C+程序设计教学实习报告实习名称: C+程序设计 专 业: 信息管理与信息系统 班 级: 2008级 2 班 学 号: 0808044227 姓 名: 李立 指导教师: 赵光煜 成 绩: 二00九年 七 月 十 日15 目 录 1 教学实习的内容12 教学实习的目的13 教学实习设计介绍14 总结与体会141 教学实习的内容通过使用所学的C+语言的基本词法和语法规则(字符集、词法规则、程序结构、运算符和表达式、各类语句、函数格式和调用方式、作用域及存储类)以及一些面向对象的程序设计方法(类和对象的概念及定义格式、对象的赋值和运算、继承性和派生类、多态性和虚函数)等知识,熟练掌握其内涵并且达到自己编译程序的目的。使用C+开发环境进行C+程序的设计、编辑、编译、调试、运行、测试,完成实习报告。2 教学实习的目的完成C+程序设计课程学习后,通过本次教学实习,对所学的C+专业知识进一步消化、理解并且掌握程序设计方法,把所学的C+专业知识灵活运用到现实问题中,锻炼和提高综合运用所学面向对象的程序设计方法和其他的一些知识结合起来解决实际问题的能力。而且,通过学习C+知识让我利用另外一种方式去发现问题、分析问题和解决问题的重要性3 教学实习设计介绍 对整个系统的设计思路是这样的,首先由员工输入用户信息,包括编号、姓名和职务;然后,在计算某为职工的当月工资时,系统先从一输入的职工信息文件中获取职工的工作类型,接着调用不同的处理程序进行计算;最后将结果存档。从用户的需求中,可以发现5种类型的职员都可以分别设计为一个类。首先,他们都属于雇员,因此可以设计一个基类employee(雇员),然后从中派生出technician(技术人员)类、salesman(销售人员)类、secretary(文秘)类。对于技术经理和销售经理来说,他们都属于经理,所以设计时可以从employee类中派生出一个manager(经理)类作为techmanager(技术人员)类、salesman(销售人员)类、secretary(文秘)类的父类。而经理类本身并不对应实际的工作类型,由于技术经理有技术人员和经理的双重特点,因此techmanager类同时继承technician类和manager类;销售经理有销售人员和经理的双重特点,因此salesmanager类同时继承salesman类和manager类。根据用户需求,employee类应该拥有的属性有:编号、姓名、职务、月份和工资。Employee类的服务可以包括info()、search()、countsalary()、recordinfo()和recordsalary()。其中info()函数用于接收用户输入的职工信息;search()函数用来根据职工名查找职工信息;countsalary()函数为工资计算函数,但在基类中为空,原因是各类人员的工资计算方法不同,无法在基类中统一定义,必须在派生类中分别定义。Recordinfo()函数和recordsalary()函数分别是职工信息和职工工资的记录函数,分别将信息存入文件info.txt和salary.txt。该系统的源程序如下,salary.h为头文件,定义了所有的类,salary.cpp实现了所有的类,manager.cpp为主程序,实现了整个管理流程。/*/ */ salary.h */ 定义对所有的类 */ */*class employeepublic:int number; /编号char *name; /姓名int status; /职务代码,1:技术经理;2:销售经理;3:技术人员;4:销售人员5:文秘int month; / 所计算工资的月份float salary; / 工资额public:void info(); /接受用户输入的职工信息bool search(); /根据姓名查找职工信息virtual void countSalary()=0; /计算工资函数,纯虚函数用于被重载int recordInfo(); /记录职工信息int recordSalary(); /记录职工工资信息;class technician: virtual public employeeprotected:int workHour; /本月工作小时数float hourlySalary; /时薪public:technician(float x=35); /构造函数void countSalary(); /技术人员工资计算函数;/销售人员类class salesman: virtual public employeeprotected:float saleSum; / 本月销售额double getRate; /提成比率public:salesman(float x=0.05); /构造函数void countSalay(); /销售人员工资计算函数;/经理类,不对应实际职务class manager:virtual public employeeprotected:float fixedSalary; /经理的固定工资public:manager(float x=6000); /构造函数void countSalary();/经历的工资计算函数,为空;/文秘类class secretary: public employeefloat fixedSalary; /文秘的固定工资float bonus; /文秘的奖金public:secretary(float x=4000); /构造函数void countSalary(); /文秘的工资计算函数;/技术经理类class techmanager: public technician, public managerfloat gradeBonus; /技术经理的业绩等级奖(每级)int grade; /技术经理的业绩等级public:techmanager(float x=1000);/构造函数void countSalary();/技术经历的工资计算函数;/销售经理类class salesmanager: public salesman, public managerpublic:salesmanager(float x=0.02);/构造函数void countSalary();/销售经历的工资计算函数;/*/ */ salary.cpp */ 实现所有的类 */ */*#include #include#includesalary.husing namespace std;struct infoRecorderint number;char name30;int status; irl; /职工信息结构,用于将职工信息写入文件struct salaryRecorderchar name30;int month;float salary; srl; /职工工资信息结构,用于将职工信息写入文件void employee:info()char namestr30; /用于临时存放职工姓名coutendlnamestr;name=new charstrlen(namestr)+1; /动态申请内存空间strcpy(name,namestr); /拷贝职工姓名到namecoutnumber;while(number9999) /检查员工编号coutnumber;countstatus;while (status5) /检查员工职务代码coutstatus;bool employee:search()int i:ifstream ifile(info.txt,ios:in|ios:binary); /打开员工信息文件info.txtif(! ifile)cerrend员工信息文件读取错误!endl;return false;while (! ifile.eof() / 根据职工名查找职工信息ifile.read( (char *)&irl, sizeof(irl) ); /读取一条记录i=strcmp(,name);/比较职工名是否匹配if(i=0) 如果匹配就读取职工信息number=irl.number;status=irl.status;ifile.close();return true; /查找到职工信息ifile.close();return false; /未查找到职工信息int employee:recordIfo()strcpy(,name);/先将职工信息存入结构inforecorder中irl.status=status;ofstream ofile(info.txt, ios:app|ios:binary);/使用追加方式打开员工信息文件info.txtif(! ofile)cerrendl员工信息文件打开错误!endl;return 0;ofile.write( (char *)&irl, sizeof(irl) );/写入一个记录ofile.close();return 1;int employee:recordSalary()char ch1;coutendlch1;/获取用户输入while (ch1 =Y&ch1! =y&ch1! =N&ch1! =n)cinch1;if( ch1=N|ch1n) return 0;/不存档else /存档strcpy(,name);/将职工工资信息先存入结构salaryrecorder中coutendlsrl.month; while(sr1.month12)/检查输入月份 Coutendlsr1.month; srl.salary=salary; ofstream ofile(salary.txt,ios:app|ios:binary);/打开文件salary.txt if(! ofile) cerrendl员工工资文件打开错误!endl; return 0; ofile.write( (char *)&srl,sizeof(srl) );/写入一条记录ofile.close();return 1;technician:technician(float x)hourlySalary=x;/技术人员时薪默认为35元void technician:countSalary()cout请输入技术员nameworkHour;/输入工作时数salary=workHour*hourlySalary;/工资=工作时数*cout技术员salaryendl;/class salesman/salesman:salesman(float x)getRate=x; / 销售员提成比率为5%void salesman:countSalary()cout请输入销售员namesaleSum; /输入销售额salary=saleSum*getRate; /工资=销售额*提成比率cout销售员name编号number本月工资为:salaryendl;/class manager/manager:manager(float x)fixedSalary=x; / 经理的固定工资为6000元void manager:countSalary()/class secretary/secretary:secretary(float x)fixedSalary=4000; /文秘的固定工资为4000元void secretary:countSalary()cout请输入文秘namebonus; /输入文秘当月奖金salary=fixedSalary+bonus; /工资=固定工资+奖金coutendl文秘name编号number本月工资为:salaryendl;/class techmanager/techmanager:teachmanager(float x)gradeBonus=x; /技术经理工作业绩每等级的奖金void techmanager:countSalary()cout请输入技术经理namegrade; / 输入工作业绩等级while( grade3) /检查输入工作业绩等级coutendl工作业绩等级错误,工作业绩等级必须为1、2、3,请重新输入:;salary=fixedSalary+grade*gradeBonus; /工资=固定工资+业绩等级*每级奖金coutendl技术经理name编号number本月工资为:salaryendl;/class salesmanafer/salesmanager:salesmanager(float x)getRate=x;/销售经理的销售总额提成比率void salesmanager:countSalary()cout请输入销售经理namesaleSum;/当月销售总额salary=fixedSalary+saleSum*getRate;/工资=固定工资+当月销售额*提成比率coutendl销售经理name编号number本月工资为:salaryendl;/*/ */ manager.cpp */ 主程序 * / * /*#include#include#includesalary.husing namespace std;void main()char ch1; /用于临时存放姓名char namestr30; /分别定义各个类的实例technician em, te;salesman sa;secretary se;manager ma;techmanager tm;salesmanager sm; /定义一个基类指针数组分别指向各个派生类的对象employee *pem6=&ma,&tm,&sm,&te,&sa,&se;int i;coutendl=; coutendl=职工工资管理系统=; coutendl=;while(true) /设定循环操作coutendlch1;while( ch1 =1 & ch1!=2 & ch1!=3 )/检查用户输入cinch1;if( ch1=1 ) /输入员工信息(); /接受用户输入员工信息em.recordInfo(); / 记录员工信息else if( ch1=2 ) /计算员工工资coutendlnamestr;=new charstrlen(namestr)+1; / 申请内存空间存放姓名strcpy(,namestr); / 复制姓名while( ! em.search() ) /根据姓名查找员工信息coutendlnamestr; /如输入员工姓名错误,则重复上述步骤=new charstrlen(namestr)+1;strcpy(,namestr);i=em.status; /获得该名职工的职务代码pemi-name=; /将获得的职工信息输入到对应的派生类对象pemi-number=em.number;pemi-status=em.status;pemi-countSalary(); / 根据职务代码调用不同派生类的函数pemi-recordSalary(); /删除动态申请的空间else break; /如果用户选择3,则退出程序运行结果如下:= 职工工资管理系统=请选择操作:1.输入员工信息;2。计算员工工资;3.退出。请输入员工姓名:Tom请输入员工编号:1001请输入员工职务代
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河北省中央“特岗计划”招聘笔试真题2024
- 黑龙江省文化和旅游厅所属事业单位招聘笔试真题2024
- 石大学前儿童保育学课外必读:5《幼儿园纲要》解读
- 投标资格承诺声明函模板
- 头癣临床表现AI诊断系统研究-洞察阐释
- 提升农村互助性养老服务质量的评估体系
- 2025至2030年中国电力安全型红外测温仪行业投资前景及策略咨询报告
- 2025至2030年中国现代茶水柜行业投资前景及策略咨询报告
- 六年级讲课数学
- 2025至2030年中国油压式裁床行业投资前景及策略咨询报告
- 2025年高考真题-语文(全国一卷) 无答案
- 护理法律法律试题及答案
- 2025年中考语文押题作文范文10篇
- 拆迁名额转让协议书
- T/CAEPI 23-2019地下式城镇污水处理厂工程技术指南
- 2025年初中学业水平考试地理试卷(地理学科核心素养)含答案解析
- 40篇英语短文搞定高考3500个单词(全部含翻译,重点解析)
- 《重大电力安全隐患判定标准(试行)》解读与培训
- 电路分析基础(浙江大学)知到智慧树期末考试答案题库2025年浙江大学
- 天津市公安局为留置看护总队招聘警务辅助人员考试真题2024
- DB13-T 5266-2020 基于岩体基本质量BQ分级法的公路隧道围岩级别快速判定技术要求
评论
0/150
提交评论