版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验内容程序Ex_File:用文件来实现一个学生记录的添加、查找等操作。提示:学生记录用类CstudenRec表示,它的数据成员有:姓名、学号、3门课的成绩以及总平均分,成员函数记录显示Print、记录键盘输入Input和数据校验Validate 以及“<<”>>”运算符重载等。文件操作用CStuFile类定义,成员函数有数据的添加Add、查找Seek、显示List等。实验准备和说明(1)在学习完第2章内容之后进行本次实验。(2)编写本次上机所需要的程序。实验步骤1.创建工作文件夹打开计算机,在“D:Visual C+程序、LiMing”文件夹中创建一个新的子文件夹“实
2、验7”。 2.创建控制台应用程序项目Ex_File创建控制台应用程序项目Ex_File的具体步骤如下。(1)启动Visual C+6.0。(2) 选择“文件”“新建”菜单命令,显示出“新建”对话框。从列表框中选中Win32Console Application项。 (3)在“工程”编辑框中输入控制台应用程序项目名称Ex_File,并将项目文件夹定位到“D:Visual C+程序LiMing实验7”。(4)单击“确定”按钮,显示Win32应用程序向导对话框。选中An empty project项。单击“完成”按钮,系统将显示向导创建的信息,单击“确定”按钮将自动创建此应用程序。 3.添加Ex_F
3、ile.h文件 添加Ex_File.h文件的具体步骤如下。(1)选择“文件”“新建”菜单命令,将“新建”对话框切换到“文件”标签页面,选中“C/C+Header File”文件类型,在文件编辑框中输入Ex_File.h,单击“确定” 按钮。 (2)在Ex_File.h中添加CstudentRec类代码:#include<iostream.h># include<iomanip.h># include<fstream.h># include<string.h>class CstudentRecpublic:CstudentRec(char*name
4、,char*id,float score);CstudentRec()chFlag=N; 默认构造函数CStudentRec(); /默认析构函数void Input(void); /键盘输入,返回记录float Validate(void); /成绩数据的输入验证,返回正确值void Print(bool isTitle=false); /记录显示friend ostream&operator<<(ostream&os,CStudentRec&stu);friend istream&operator>>(istream&is,C
5、StudentRec&stu);char 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;i<3;i+)fScorei=scorei; fAve+=fScorei;fAve=f
6、loat(fAve/3.0);chFlag='A'void CStudentRec:Input(void)cout<<"姓名"cin>>strName;cout<<"学号"cin>>strID;float fSum=0;for9int i=0;i<3;i+)cout<<"成绩"<<i+1<<": "fScorei+Validate(); fSum+=fScorei;fAve=(float)(fSum/3.0);
7、chFlag='A'float CStudentRec:Validate(void)int s;lchar buf80;float res;for(;)cin>>res;s=cin.rdstate();while(s)cin.clear();cin.getline(buf,80);cout<<"非法输入,重新输入:";cin>>res;s=cin.rdstate();if(res<=100.0)&&(res>=0.0)break;elsecout<<"输入的成绩超过范围!请
8、重新输入:";return res;void CStudentRec:Print(bool isTitle)cout.setf(ios:left);if(isTitle)cout<<setw(20)<<"姓名"<<setw(10)<<"学号"<<"t 成绩1"<<"t 成绩2"<<"t 成绩3"<<"t 平均分"<<endl;cout<<setw(
9、20)<<strName<<setw(10)<<strID;for(int i=0;i<3;i+) cout<<"t"<<fScorei;cout<<"t"<<fAve<<endl;ostream&operator<<(ostream&os,CStudentRec&stu)os.write(&stu.chFlag,sizeof(char);os.write(stu.strName,sizeof(stu.strN
10、ame);os.write(stu.strID,sizeof(stu.strID);os.write(char*)stu.fScore,sizeof(float)*3;os.write(char*)&stu.fAve,sizeof(float);return os;istrean& operator>>(istream& is,CStudentRec& stu) char name20,id10;is.read(&stu.chFlag,sizeof(char);is.read(name,sizeof(name);is,read(id,size
11、of(id);is.read(char*)stu.fScore,sizeof(float)*3);is.read(char*)&stu.fAve,sizeof(float);strncpy(stu.strName,name,sizeof(name);strncpy(stu.strID,id,sizeof(name);return is; 4.添加Ex_File.cpp文件,测试CStudentRec类 添加Ex_File.cpp文件,测试CStudentRec类的具体步骤如下。(1)选择“文件”“新建”菜单命令,将“新建”对话框切换到“文件”标签页面,选中“C+Source File”
12、文件类型,在文件编辑框中输入Ex_File.cpp,单击“确定”按钮。(2)在Ex_File.cpp中添加CStudentRec类的测试代码:#include<iostream.h>#include” Ex_File.h”void main() float fScore=80,90,92;CStudentRec rec1(“Ding”,”21050101”,fScore);Rec1.Print(true);CStudentRec rec2;Rec2.Input();Rec2.Print(true);(3)编译运行并测试,CStudentRec类的测试结果如图T7.1所示。 试一试
13、若将输入的学生记录保存在文件中,并从文件中读取记录,则这样的功能应如何实现? 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)
14、;private:char*strFileName;CStuFile:CStuFile(char*filename) strFileName=new charstrlen(Filename)+1;strcpy(strFileName,filename);CStuFile: CStuFile()if(strFileName)deletestrFileName;void CStuFile:Add(CStudentRec stu) Fstream file(strFileName,ios:outlios:applios:binary);file<<stu;file.close();int
15、 CStuFile:Seek(char*id,CStudentRec&stu) int nRec= -1;Fstream file(strFileName,ios:inlios:nocreate);if(!file) cout<<”文件”<<strFileName<<”不能打开!n”; return nRec;int i=0;while(!file.eof() file>>stu; if(strcmp(id,stu.strID)=0)&&(stu.chFlag!=N) nRec = I; break; i+;file.cl
16、ose();return nRec;/列表显示nNum个记录,-1时全部显示,并返回文件中的记录数int CstuFile:List(int nNum) Fstream file(strFileName,ios:inlios:nocreate); /打开文件用于只读 if(!file) cout<<”文件”<<strFileName<<“不能打开!n”; return 0;int nRec=0;if(nNum=-1)!(nNum>0) cout_setf(ios:left); cout<<setw(6)<<”记录”<<
17、;setw(20)<<”姓名”<<setw(10)<<”学号” <<”t成绩1t成绩2t成绩3t平均分”<<endl;while (!file.eof() CstudentRec data; file>>data; if(data.chFlag=”A”) nRec+; if(nNum=-1)|(nRec<=nNum) cout.setf(ios:left); cout<<setw(6)<<nRec;data.Print(); file.close();return nRec; 6.添加Cstu
18、File类的测试代码添加CstuFile类的测试代码的具体步骤如下。(1)在工作区窗口的FileView页面中,双击Ex_File.cpp结点。(2)修改Ex_File.cpp文件的代码:#include<iostream.h>#include “Ex_File.h”CstuFile theStu(“student.txt”); /定义一个全局对象void AddTo(int nNum) /输入多个记录CstudentRec stu;for(int i=0;i<nNum;i+) cout<<”请输入第”<<i+1<<”记录:”<<endl; stu.Input(); theStu.Add(stu);void main() AddTo(3); theStu.List(); Cstudent one; if (heStu.Seek(“21050102”,one)>=0) one Print(true); else cout<<”没有找到!n”; theStu.List();(3)编译运行并测试,按运行的提示内容输入下列3哥记录数据:MaWenTao 21050101 80 9
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CRRA 1314-2023存储设备回收利用技术导则
- T/TMAC 277-2025高精度智能电能计量箱通用技术规范
- T/GDMDMA 0041-2025三维硬性光学内窥镜三维视觉性能检测方法
- T/CI 534-2024承插型盘扣式钢管脚手架及托梁支撑体系
- T/CACE 0179-2025铝电解废耐火材料基霞石粉(砂)
- T/CRRA 0304-2022废塑料交易规范
- AI在西班牙语领域的应用
- 2025-2026学年河北省迁安市初中政治七年级期末上册自我评估黑金试题附答案
- 2026学年河南省辉县市四年级语文期末自测模拟思维拓展题(详细参考解析)详细答案和解析
- Photoshop期末考试试题及详细答案解析
- 2026中国数字员工技术应用报告 -多智能体大脑场景实践研究
- 2026重庆三峰环境集团股份有限公司招聘82人考试模拟试题及答案解析
- T/CI 878-2025钠离子电池用生物质硬炭负极材料技术要求
- 2026年期权开户考试题库及答案
- 《人民当家作主》教学课件 - 2026-2027 学年统编版(新教材)小学道德与法治五年级上册
- 2026年04月自考03200预防医学(二)试题及答案
- 2026年法治思想试题库及答案
- 2026海南中考考前冲刺 英语考纲核心词汇与书面表达高级句型速览
- 大学英语四级词汇表 (完美打印版)
- 2026年四川省党政领导干部政治理论水平(理论测试)考试考前模拟试题及答案
- 私募股权投资基金基础知识全解析
评论
0/150
提交评论