计算机与通信工程学院天津理工大学计算机与通信工程学院实验报告2013至2014学年第二学期课程名称高级语言程序设计II实验(5)实验名称I/O流类库模板实验时间2014年5月12日第3节至第6节学号姓名专业信息安全主讲教师唐召东辅导教师唐召东软件环境VC++6硬件环境PC机计算机与通信工程学院2实验目的1.掌握标准输入输出流的使用方法和作用;2.了解字符串流的定义与使用;3.掌握运用成员函数和操纵符进行格式化输入/输出的方法;4.掌握流的插入/提取操作的重载方法;5.掌握文件流的打开、关闭及使用的使用方法;6.了解文本文件流与二进制文件流在操作上的区别。7.掌握MSVisualC++6.0调试C++程序的基本方法、基本步骤。实验内容(应包括实验题目、实验要求、实验任务等)1.设计一个职员类EMPLOYEE,主要包括工号、姓名、部门、年龄、工资等属性以及更换部门、年龄变更、工资增长等操作,为EMPLOYEE类提供输入/输出运算“”和“”。(提示:类EMPLOYEE应有多个重载的构造函数)题目说明:1)类EMPLOYEE的定义可以参考如下:classEMPLOYEE{private:longid;charname[MAX_LEN];chardepartment[MAX_LEN];intage;doublesalary;public:EMPLOYEE();EMPLOYEE(constEMPLOYEE&obj);EMPLOYEE(longidd,charnamee[],chardepar[],intagee,doublesala);~EMPLOYEE();voidchangeDepartment(charnewDepar[]);voidchangeAge(intagee);voidraiseSalary(doubledelta);//定义友元函数,提供输入/输出运算和。friendostream&operator(ostream&stream,EMPLOYEE&obj);friendistream&operator(istream&stream,EMPLOYEE&obj);};2)主函数如下所示:voidmain(){EMPLOYEEA(200701,Tom,DEPARTMENTA,34,2345.6);coutA;EMPLOYEEB;cinB;cout输入的信息:Bendl;}计算机与通信工程学院32.教材324页【7.11】有两个矩阵a和b,均为2行3列,编写程序求两个矩阵的和,重载插入运算符“”和提取运算符“”,使之能用于矩阵的输入和输出;重载“+”运算符使之能用于矩阵求和:c=a+b。3.设计一个管理图书目的简单程序,提供的基本功能包括:可连续将新书存入文件book.dat中,新书信息加入到文件的尾部;也可以根据输入的书名进行查找;把文件book.dat中同书名的所有书目信息显示出来。(为简单起见,描述一本书的信息包括:书号,书名,出版社和作者)题目要求:1)//定义描述书信息的结构体structBook{longid;charname[MAX_LEN];charpublisher[MAX_LEN];charauthor[MAX_LEN];};2)定义函数实现://向文件book.dat中添加新的一条书的信息voidaddBookInfo(BookaBook);//从文件book.dat中读出书名为namee的所有书的记录voidselectBook(charnamee[]);3)主函数中用一个演示程序完成对所设计的新类的功能测试,并给出测试数据和实验结果:voidmain(){BookaBook={2001,Star,yahoo,LiMing};BookbBook={2002,Boold,Sina,TomBerry};BookcBook={2003,Star,google,LiMing};addBookInfo(aBook);addBookInfo(bBook);addBookInfo(cBook);selectBook(Star);}计算机与通信工程学院43.建立两个磁盘文件f1.dat和f2.dat,编程序实现以下工作:①从键盘输入20个整数,分别存放在两个磁盘文件中(每个文件中放10个整数);②从f1.dat读入10个数,然后存放到f2.dat文件原有数据的后面;③从f2.dat中读入20个整数,将它们按从小到大的顺序存放到f2.dat(不保留原来的数据)。4.针对学生类,利用本章中学到的文本文件的顺序、随机读写,二进制文件的顺序、随机读写函数,实现下列功能:1)学生基本信息由学号(长整型)、姓名(字符数组)、性别(字符型)、年龄(整型)、数学成绩(float)、语文成绩(float)、英语成绩(float)组成。学生类的定义可以参考如下://定义Student类的子类classStudent{public:longid;charname[20];intage;floatmath;floatchinese;floatenglish;public:Student();Student(longl,charNAME[],inta);Student(longl,charNAME[],inta,floatm,floatc,floate);//特殊的构造函数:拷贝构造函数Student(constStudent&other);//重载赋值运算符Studentoperator=(constStudent&other);~Student();voidsetId(longl);longgetId();voidsetName(charNAME[]);voidsetAge(inta);intgetAge();voidsetAll(floatm,floatc,floate);//利用友元函数:重载输出运算符和输入运算符friendostream&operator(ostream&stream,Student&obj);friendistream&operator(istream&stream,Student&obj);};计算机与通信工程学院52)文本文件的顺序读写:定义fstream的对象ioFile,与文件“a.txt”建立关联,创建两个对象,Students1(2007002,Jerry,18);Students2(2007003,Jack,19,78.5,89.5,93.0);将s1、s2的学号、年龄、平均分的数据写入文件“a.txt”,并从文件“a.txt”中读出。3)二进制文件的顺序读写:定义ofstream的对象outfile与文件“stud.dat”建立关联,创建三个对象,Students1;Students2(2007002,Jerry,18);Students3(2007003,Jack,19,78.5,89.5,93.0);将s1、s2、s3的全部信息写入到文件“stud.dat”定义ifstream的对象infile与文件“stud.dat”建立关联,从文件“stud.dat”依次读出三个对象的信息到数组Studentstud[3]中,并将三个对象的信息在屏幕上输出:cout输入第i+1个学生的信息:\nstud[i]endl;4)二进制文件的随机读写,编写程序实现下列操作:定义ofstream的对象outfile与文件“stud1.dat”建立关联,创建4个对象,Studente1(1,张三,23,10,20,30);Studente2(2,李四,32,20,30,40);Studente3(3,王五,34,30,40,50);Studente4(4,刘六,27,40,50,60);按e1,e2,e3,e4顺序写入文件;将e3(即王五)的年龄改为40岁;定义ifstream的对象infile与文件“stud1.dat”建立关联;从文件中读出第3个人的数据,记录到对象Students1中;在屏幕上输出s1的信息:cout输出s1的信息:s1endl;实验过程与实验结果(可包括实验实施的步骤、算法描述、流程、结论等)计算机与通信工程学院61.代码#includeiostream.h#includestring.hclassEMPLOYEE{private:longid;//工号、姓名、部门、年龄、工资charname[20];chardepartment[50];intage;doublesalary;public:EMPLOYEE();EMPLOYEE(constEMPLOYEE&obj);EMPLOYEE(longidd,charnamee[],chardepar[],intagee,doublesala);~EMPLOYEE();voidchangeDepartment(charnewDepar[]);voidchangeAge(intagee);voidraiseSalary(doubledelta);//定义友元函数,提供输入/输出运算和。friendostream&operator(ostream&stream,EMPLOYEE&obj);friendistream&operator(istream&stream,EMPLOYEE&obj);};EMPLOYEE::EMPLOYEE(){id=0;name[0]=0;//字符数组的初始化department[0]=0;//字符数组的初始化age=0;salary=0;}EMPLOYEE::EMPLOYEE(longidd,charnamee[],chardepar[],intagee,doublesala){id=idd;strcpy(name,namee);strcpy(department,depar);age=agee;salary=sala;}EMPLOYEE::~EMPLOYEE(){coutdestructoriscalledendl;}voidEMPLOYEE::changeDepartment(charnewDepar[]){//修改部门}voidEMPLOYEE::changeAge(intagee){//修改年龄计算机与通信工程学院7ostream&operator(ostream&stream,EMPLOYEE&obj){stream工号:obj.idendl;stream姓名:obj.nameendl;//输出数组stream部门:obj.departmentendl;//输出数组stream年龄:obj.ageendl;stream工资:obj.salaryendl;returnstream;}istream&operator(istream&stream,EMPLOYEE&obj){cout请输入工号:;streamobj.id;cout请输入姓名:;streamobj.name;cout请输入部门:;streamobj.department;cout请输入年龄:;streamobj.age;cout请输入工资:;streamobj.salary;returnstream;}voidmain(){EMPLOYEEA(200701,Tom,DEPARTMENTA,34,2345.6);coutA;EMPLOYEEB;inB;cout输入的信息:endlBendl;}计算机与通信工程学院82.代码#includeiostream.hclassMatrix{public:Matrix();friendMatrixoperator+(Matrix&,Matrix&);friendostream&operator(ostream&,Matrix&);frie