《2022年实验输入输出流库 .pdf》由会员分享,可在线阅读,更多相关《2022年实验输入输出流库 .pdf(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验内容程序 Ex_File: 用文件来实现一个学生记录的添加、查找等操作。提示:学生记录用类CstudenRec表示,它的数据成员有:姓名、学号、3门课的成绩以及总平均分,成员函数记录显示Print、记录键盘输入 Input 和数据校验 Validate 以及“ ”运算符重载等。文件操作用CStuFile 类定义,成员函数有数据的添加Add、查找 Seek、显示 List 等。实验准备和说明(1)在学习完第 2章内容之后进行本次实验。(2)编写本次上机所需要的程序。实验步骤1.创建工作文件夹打开计算机,在“ D:Visual C+ 程序、 LiMing ”文件夹中创建一个新的子文件夹“实验7
2、”。2.创建控制台应用程序项目Ex_File创建控制台应用程序项目Ex_File 的具体步骤如下。(1)启动 Visual C+6.0。( 2)选 择 “ 文 件 ”“ 新 建 ” 菜 单 命 令 , 显 示 出 “ 新 建 ” 对 话 框 。 从 列 表 框 中 选 中Win32Console Application 项。(3)在“工程”编辑框中输入控制台应用程序项目名称Ex_File,并将项目文件夹定位到“D:Visual C+程序实验7”。(4)单击“确定”按钮,显示Win32应用程序向导对话框。选中An empty project 项。单击“完成”按钮,系统将显示向导创建的信息,单击“
3、确定”按钮将自动创建此应用程序。3.添加 Ex_File.h 文件添加 Ex_File.h 文件的具体步骤如下。(1)选择“文件”“新建”菜单命令,将“新建”对话框切换到“文件”标签页面,选中“C/C+Header File”文件类型,在文件编辑框中输入Ex_File.h,单击“确定”按钮。(2)在 Ex_File.h 中添加 CstudentRec类代码:#include# include# include# includeclass CstudentRec名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - -
4、- - - - - 第 1 页,共 9 页 - - - - - - - - - public:CstudentRec(char*name,char*id,float score);CstudentRec()chFlag=N; 默认构造函数CStudentRec(); /默认析构函数void Input(void); /键盘输入,返回记录float Validate(void); /成绩数据的输入验证,返回正确值void Print(bool isTitle=false); /记录显示friend ostream&operator(istream&is,CStudentRec&stu);char
5、 chFlag; /标志, A表示正常, N表示空char strName20; /姓名char strID10; /学号float fScore3; /3门成绩float fAve;/总平均分;/CStudent 类的实现CStudentRec:CStudentRec(char*name,char*id,float score)strncpy(strName,name,20);strncpy(strID,id,10);fAve=0;for(ont i=0;i3;i+)fScorei=scorei; fAve+=fScorei;fAve=float(fAve/3.0);chFlag=A;voi
6、d CStudentRec:Input(void)coutstrName;coutstrID;float fSum=0;for9int i=0;i3;i+)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - cout成绩i+1res;s=cin.rdstate();while(s)cin.clear();cin.getline(buf,80);coutres;s=cin.rdstate();if(res=0.0)break;else
7、cout 输入的成绩超过范围!请重新输入:;return res;void CStudentRec:Print(bool isTitle)cout.setf(ios:left);if(isTitle)coutsetw(20)姓名 setw(10) 学号 t 成绩 1t 成绩 2t 成绩 3t 平均分 endl;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - coutsetw(20)strNamesetw(10)strID;for
8、(int i=0;i3;i+) couttfScorei;couttfAveendl;ostream&operator(istream& is,CStudentRec& stu)char name20,id10;is.read(&stu.chFlag,sizeof(char);is.read(name,sizeof(name);is,read(id,sizeof(id);is.read(char*)stu.fScore,sizeof(float)*3);is.read(char*)&stu.fAve,sizeof(float);strncpy(stu.strName,name,sizeof(n
9、ame);strncpy(stu.strID,id,sizeof(name);return is;4.添加 Ex_File.cpp 文件,测试 CStudentRec 类添加 Ex_File.cpp 文件,测试 CStudentRec类的具体步骤如下。(1)选择“文件”“新建”菜单命令,将“新建”对话框切换到“文件”标签页面,选中“C+Source File ”文件类型,在文件编辑框中输入Ex_File.cpp,单击“确定”按钮。(2)在 Ex_File.cpp中添加 CStudentRec类的测试代码:#include#include” Ex_File.h”void main() float
10、 fScore=80,90,92;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - CStudentRec rec1( “Ding”,”21050101”,fScore);Rec1.Print(true);CStudentRec rec2;Rec2.Input();Rec2.Print(true);(3)编译运行并测试, CStudentRec类的测试结果如图T7.1所示。试一试若将输入的学生记录保存在文件中,并从文件中读取记录,
11、则这样的功能应如何实现?5添加 CStuFile 类代码添加 CStuFile 类代码的具体步骤如下。(1)将工作区窗口切换到FileView 页面,展示所有结点,双击Ex_File.h 结点。(2)在 Ex_File.h 文件后面添加以下CStuFile 类代码:class CStuFilepublic:CStuFile(char*filename); CStuFile();void Add(CStudentRec &stu);int Seek(char*id,CStudentRec &stu);int List(int nNum=-1);private:char*strFileName;C
12、StuFile:CStuFile(char*filename)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - - - - - - - - - strFileName=new charstrlen(Filename)+1;strcpy(strFileName,filename);CStuFile: CStuFile()if(strFileName)deletestrFileName;void CStuFile:Add(CStudentRec stu)Fstrea
13、m file(strFileName,ios:outlios:applios:binary);filestu;file.close();int CStuFile:Seek(char*id,CStudentRec&stu)int nRec= -1;Fstream file(strFileName,ios:inlios:nocreate);if(!file)cout”文件” strFileNamestu;if(strcmp(id,stu.strID)=0)&(stu.chFlag!=N) nRec = I; break;i+;file.close();return nRec;/列表显示 nNum
14、个记录, -1时全部显示,并返回文件中的记录数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 9 页 - - - - - - - - - int CstuFile:List(int nNum)Fstream file(strFileName,ios:inlios:nocreate); /打开文件用于只读if(!file)cout”文件” strFileName0)cout_setf(ios:left);coutsetw(6)”记录” setw(20)”姓名” setw(1
15、0)”学号”t 成绩 1t 成绩 2t 成绩 3t 平均分” data;if(data.chFlag=”A”)nRec+;if(nNum=-1)|(nRec=nNum)cout.setf(ios:left);coutsetw(6)nRec;data.Print();file.close();return nRec;6.添加 CstuFile 类的测试代码名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 9 页 - - - - - - - - - 添加 CstuFile类的测
16、试代码的具体步骤如下。(1)在工作区窗口的FileView 页面中,双击 Ex_File.cpp 结点。(2)修改 Ex_File.cpp 文件的代码:#include#include “Ex_File.h”CstuFile theStu(“student.txt”); /定义一个全局对象void AddTo(int nNum) /输入多个记录CstudentRec stu;for(int i=0;inNum;i+)cout”请输入第” i+1 ”记录:” =0)one Print(true);elsecout”没有找到 !n”;theStu.List();(3)编译运行并测试,按运行的提示内
17、容输入下列3哥记录数据:MaWenTao 21050101 80 90 85LiMing 21050102 75 81 83YangYang 21050103 80 65 76想一想若上述程序在重新运行一次,且输入3个相同的记录数据,则运行的结果将会如何?若在输入成绩时,故意输成字符或不在0100的数直,则运行结果又将如何?7退出 Visual C+ 6.0名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 9 页 - - - - - - - - - 8写出实验报告结合上述分析和试一试内容,写出实验报告。思考与练习若 CStuFile 类还能实现记录的修改、删除、排序功能(按平均分高低),则应如何编程?(提示:对于删除来说,由于文件中的记录删除需要移动大量数据,因此为避免这种情况发生,删除时只需将文件中要删除的标志成员chFlag 变成 N 即可。 )名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -
限制150内