C++程序设计基础实验报告.docx
《C++程序设计基础实验报告.docx》由会员分享,可在线阅读,更多相关《C++程序设计基础实验报告.docx(18页珍藏版)》请在冰点文库上搜索。
C++程序设计基础实验报告
广州大学学生实验报告
开课学院及实验室:
计算机科学与工程实验室2012年月日
学院
计算机科学与教育软件学院
年级/专业/班
姓名
学号
实验课程名称
成绩
实验项目名称
I/O流与文件
指导老师
(***报告只能为文字和图片,老师评语将添加到此处,学生请勿作答***)
一、实验目的与要求
(1)掌握流的概念。
(2)掌握文本文件和二进制文件的使用方法。
二、实验设备与平台
1、硬件环境:
微型计算机,2、软件环境:
VisualC++6.0;
三、实验内容与步骤:
(1)建立一个文本文件“textfile.txt”(内容由读者选定),然后显示该文件,并且统计该文件的行数和字符数。
#include
usingnamespacestd;
voidbrowseFile(char*fileName,intdelLine)
{ifstreaminf(fileName,ios:
:
in);
chars[80];
for(inti=1;i<=delLine;i++)
inf.getline(s,80);
while(!
inf.eof())//浏览问文件的函数
{
cout<
}
inf.close();
voidstatistics(char*filename,int&line,int&charnum)
line=0;
charnum=0;
chars;
ifstreamoutf(filename,ios:
out);//
outf.eof())
outf.get(s);
if(s=='\n')line++;
charnum++;
charnum--;//去掉文件结束符
outf.close();
intmain()
intline,charnum;//记录行数和字符数
ofstreamoutfile;
outfile.open("d:
\\textfile.txt",ios:
out);
outfile<<"Thisisatestfile\n"
<<"1\n"<<"12\n"<<"123\n"<<"12345\n"<<"123456\n";//写入文件
outfile.close();
cout<<"显示文档文件:
\n";
browseFile("d:
\\textfile.txt",0);
statistics("d:
\\textfile.txt",line,charnum);
cout<<"统计结果:
cout<<"行数:
"<cout<<"字符数:"<return1;}运行结果:(2)编写程序上机完成如下工作:①建立一个存放图书信息的二进制文件“bookf.dat”,在该文件中,使每个记录包括图书编号、图书名、出版社、作者和价格。②浏览文件“bookf.dat”。③用键盘输入某本图书的编号,在文件“bookf.dat”中查找该图书的图书名、出版社、作者和价格。④在文件“bookf.dat”的末尾添加新记录。⑤按给定编号删除相应的记录。要求分别编写函数来完成上述各项工作,并在main函数中使用菜单来选择某项功能。实验指导对本实验第(2)题,需要定义一个book结构来描述每本图书的有关信息,并把每本图书的有关信息作为一个记录写到文件bookf.dat中。实验中可以编写函数create(),browse(),inquire(),append()和del()来完成各项工作。按给定编号删除相应记录的函数可以编写为:voiddel(fstreamf){if(f.is_open()==0){cout<<"未创建或读入文件,请选择1创建或读入..."<return;}book*a;intn,i,bh,flag=0;f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);a=newbook[n];f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(f.tellp()!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>bh;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}i=0;do{if(a[i].num==bh){cout<<"该记录为:"<cout<<"编号:"<cout<<"书名:"<cout<<"出版社:"<cout<<"作者:"<cout<<"价格:"<flag=1;gotoL;}f.write((char*)&a[i],sizeof(book));L:i++;}while(i!=n);f.close();if(flag==0){cout<<"\t找不到需删除记录!"<f.open(fname,ios::binary|ios::in|ios::out);if(!f){cerr<<"文件不能打开!"<return;}i=0;do{f.write((char*)&a[i],sizeof(book));i++;}while(i!=n);}else{cout<<"\t该记录已被删除!"<f.open(fname,ios::binary|ios::in|ios::out);}f.open(fname,ios::binary|ios::in|ios::out);delete[]a;}由于不能直接删除二进制文件bookf.dat中的记录,所以在这个函数中,按给定编号删除相应记录可使用的方法为:先把bookf.dat中的记录读到一个动态的结构数组a中,然后重写该文件,在重写时忽略被删除记录。因为事先不知道文件bookf.dat中记录的个数,因而把结构数组a定义为动态数组。按题目要求,可在main函数中使用菜单来选择功能,即main函数可以编写为:voidmain(){fstreamf;strcpy(fname,"book.dat");f.open(fname,ios::binary|ios::in|ios::out);L:intchoice;cout<<"\n\t\t-请键入操作选择\n"<cout<<"\t1-建立图书文件"<cout<<"\t2-浏览图书文件"<cout<<"\t3-按编号查询图书信息"<cout<<"\t4-在图书文件尾部添加记录"<cout<<"\t5-按编号删除记录"<cout<<"\t0-退出"<cout<<"\t\t";cin>>choice;switch(choice){case1:create(f);gotoL;case2:browse(f);gotoL;case3:inquire(f);gotoL;case4:append(f);gotoL;case5:del(f);gotoL;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}} 实验代码://sys5.2.cpp#include#includeusingnamespacestd;structbook{intnum;//编号charname[20];//书名charauthor[20];//作者charpublish[20];//出版社doubleprice;//价格}b;constbookend={0,"NUll","NUll","NUll",0.0};charfname[]="d:\\book.dat";voidcreate();//创建和初始化文件voidbrowse();//浏览文件voidinquire();//查找文件voidappend();//添加记录voiddel();//删除记录intmain(){intchoice;while(1){cout<<"\t-请键入操作选择\n"<cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
cout<<"字符数:
"<return1;}运行结果:(2)编写程序上机完成如下工作:①建立一个存放图书信息的二进制文件“bookf.dat”,在该文件中,使每个记录包括图书编号、图书名、出版社、作者和价格。②浏览文件“bookf.dat”。③用键盘输入某本图书的编号,在文件“bookf.dat”中查找该图书的图书名、出版社、作者和价格。④在文件“bookf.dat”的末尾添加新记录。⑤按给定编号删除相应的记录。要求分别编写函数来完成上述各项工作,并在main函数中使用菜单来选择某项功能。实验指导对本实验第(2)题,需要定义一个book结构来描述每本图书的有关信息,并把每本图书的有关信息作为一个记录写到文件bookf.dat中。实验中可以编写函数create(),browse(),inquire(),append()和del()来完成各项工作。按给定编号删除相应记录的函数可以编写为:voiddel(fstreamf){if(f.is_open()==0){cout<<"未创建或读入文件,请选择1创建或读入..."<return;}book*a;intn,i,bh,flag=0;f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);a=newbook[n];f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(f.tellp()!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>bh;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}i=0;do{if(a[i].num==bh){cout<<"该记录为:"<cout<<"编号:"<cout<<"书名:"<cout<<"出版社:"<cout<<"作者:"<cout<<"价格:"<flag=1;gotoL;}f.write((char*)&a[i],sizeof(book));L:i++;}while(i!=n);f.close();if(flag==0){cout<<"\t找不到需删除记录!"<f.open(fname,ios::binary|ios::in|ios::out);if(!f){cerr<<"文件不能打开!"<return;}i=0;do{f.write((char*)&a[i],sizeof(book));i++;}while(i!=n);}else{cout<<"\t该记录已被删除!"<f.open(fname,ios::binary|ios::in|ios::out);}f.open(fname,ios::binary|ios::in|ios::out);delete[]a;}由于不能直接删除二进制文件bookf.dat中的记录,所以在这个函数中,按给定编号删除相应记录可使用的方法为:先把bookf.dat中的记录读到一个动态的结构数组a中,然后重写该文件,在重写时忽略被删除记录。因为事先不知道文件bookf.dat中记录的个数,因而把结构数组a定义为动态数组。按题目要求,可在main函数中使用菜单来选择功能,即main函数可以编写为:voidmain(){fstreamf;strcpy(fname,"book.dat");f.open(fname,ios::binary|ios::in|ios::out);L:intchoice;cout<<"\n\t\t-请键入操作选择\n"<cout<<"\t1-建立图书文件"<cout<<"\t2-浏览图书文件"<cout<<"\t3-按编号查询图书信息"<cout<<"\t4-在图书文件尾部添加记录"<cout<<"\t5-按编号删除记录"<cout<<"\t0-退出"<cout<<"\t\t";cin>>choice;switch(choice){case1:create(f);gotoL;case2:browse(f);gotoL;case3:inquire(f);gotoL;case4:append(f);gotoL;case5:del(f);gotoL;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}} 实验代码://sys5.2.cpp#include#includeusingnamespacestd;structbook{intnum;//编号charname[20];//书名charauthor[20];//作者charpublish[20];//出版社doubleprice;//价格}b;constbookend={0,"NUll","NUll","NUll",0.0};charfname[]="d:\\book.dat";voidcreate();//创建和初始化文件voidbrowse();//浏览文件voidinquire();//查找文件voidappend();//添加记录voiddel();//删除记录intmain(){intchoice;while(1){cout<<"\t-请键入操作选择\n"<cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
return1;
运行结果:
(2)编写程序上机完成如下工作:
①建立一个存放图书信息的二进制文件“bookf.dat”,在该文件中,使每个记录包括图书编号、图书名、出版社、作者和价格。
②浏览文件“bookf.dat”。
③用键盘输入某本图书的编号,在文件“bookf.dat”中查找该图书的图书名、出版社、作者和价格。
④在文件“bookf.dat”的末尾添加新记录。
⑤按给定编号删除相应的记录。
要求分别编写函数来完成上述各项工作,并在main函数中使用菜单来选择某项功能。
实验指导
对本实验第
(2)题,需要定义一个book结构来描述每本图书的有关信息,并把每本图书的有关信息作为一个记录写到文件bookf.dat中。
实验中可以编写函数create(),browse(),inquire(),append()和del()来完成各项工作。
按给定编号删除相应记录的函数可以编写为:
voiddel(fstreamf)
if(f.is_open()==0)
{cout<<"未创建或读入文件,请选择1创建或读入..."<return;}book*a;intn,i,bh,flag=0;f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);a=newbook[n];f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(f.tellp()!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>bh;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}i=0;do{if(a[i].num==bh){cout<<"该记录为:"<cout<<"编号:"<cout<<"书名:"<cout<<"出版社:"<cout<<"作者:"<cout<<"价格:"<flag=1;gotoL;}f.write((char*)&a[i],sizeof(book));L:i++;}while(i!=n);f.close();if(flag==0){cout<<"\t找不到需删除记录!"<f.open(fname,ios::binary|ios::in|ios::out);if(!f){cerr<<"文件不能打开!"<return;}i=0;do{f.write((char*)&a[i],sizeof(book));i++;}while(i!=n);}else{cout<<"\t该记录已被删除!"<f.open(fname,ios::binary|ios::in|ios::out);}f.open(fname,ios::binary|ios::in|ios::out);delete[]a;}由于不能直接删除二进制文件bookf.dat中的记录,所以在这个函数中,按给定编号删除相应记录可使用的方法为:先把bookf.dat中的记录读到一个动态的结构数组a中,然后重写该文件,在重写时忽略被删除记录。因为事先不知道文件bookf.dat中记录的个数,因而把结构数组a定义为动态数组。按题目要求,可在main函数中使用菜单来选择功能,即main函数可以编写为:voidmain(){fstreamf;strcpy(fname,"book.dat");f.open(fname,ios::binary|ios::in|ios::out);L:intchoice;cout<<"\n\t\t-请键入操作选择\n"<cout<<"\t1-建立图书文件"<cout<<"\t2-浏览图书文件"<cout<<"\t3-按编号查询图书信息"<cout<<"\t4-在图书文件尾部添加记录"<cout<<"\t5-按编号删除记录"<cout<<"\t0-退出"<cout<<"\t\t";cin>>choice;switch(choice){case1:create(f);gotoL;case2:browse(f);gotoL;case3:inquire(f);gotoL;case4:append(f);gotoL;case5:del(f);gotoL;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}} 实验代码://sys5.2.cpp#include#includeusingnamespacestd;structbook{intnum;//编号charname[20];//书名charauthor[20];//作者charpublish[20];//出版社doubleprice;//价格}b;constbookend={0,"NUll","NUll","NUll",0.0};charfname[]="d:\\book.dat";voidcreate();//创建和初始化文件voidbrowse();//浏览文件voidinquire();//查找文件voidappend();//添加记录voiddel();//删除记录intmain(){intchoice;while(1){cout<<"\t-请键入操作选择\n"<cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
return;
book*a;
intn,i,bh,flag=0;
f.seekg(0,ios:
end);
longposend=f.tellg();
n=posend/sizeof(book);
a=newbook[n];
beg);
i=0;
do
f.read((char*)&a[i],sizeof(book));
i++;
}while(f.tellp()!
=posend);
f.close();
cout<<"请输入需删除记录编号:
";
cin>>bh;
f.open(fname,ios:
binary|ios:
trunc|ios:
if(!
f)
{cerr<<"文件不能打开!
"<return;}i=0;do{if(a[i].num==bh){cout<<"该记录为:"<cout<<"编号:"<cout<<"书名:"<cout<<"出版社:"<cout<<"作者:"<cout<<"价格:"<flag=1;gotoL;}f.write((char*)&a[i],sizeof(book));L:i++;}while(i!=n);f.close();if(flag==0){cout<<"\t找不到需删除记录!"<f.open(fname,ios::binary|ios::in|ios::out);if(!f){cerr<<"文件不能打开!"<return;}i=0;do{f.write((char*)&a[i],sizeof(book));i++;}while(i!=n);}else{cout<<"\t该记录已被删除!"<f.open(fname,ios::binary|ios::in|ios::out);}f.open(fname,ios::binary|ios::in|ios::out);delete[]a;}由于不能直接删除二进制文件bookf.dat中的记录,所以在这个函数中,按给定编号删除相应记录可使用的方法为:先把bookf.dat中的记录读到一个动态的结构数组a中,然后重写该文件,在重写时忽略被删除记录。因为事先不知道文件bookf.dat中记录的个数,因而把结构数组a定义为动态数组。按题目要求,可在main函数中使用菜单来选择功能,即main函数可以编写为:voidmain(){fstreamf;strcpy(fname,"book.dat");f.open(fname,ios::binary|ios::in|ios::out);L:intchoice;cout<<"\n\t\t-请键入操作选择\n"<cout<<"\t1-建立图书文件"<cout<<"\t2-浏览图书文件"<cout<<"\t3-按编号查询图书信息"<cout<<"\t4-在图书文件尾部添加记录"<cout<<"\t5-按编号删除记录"<cout<<"\t0-退出"<cout<<"\t\t";cin>>choice;switch(choice){case1:create(f);gotoL;case2:browse(f);gotoL;case3:inquire(f);gotoL;case4:append(f);gotoL;case5:del(f);gotoL;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}} 实验代码://sys5.2.cpp#include#includeusingnamespacestd;structbook{intnum;//编号charname[20];//书名charauthor[20];//作者charpublish[20];//出版社doubleprice;//价格}b;constbookend={0,"NUll","NUll","NUll",0.0};charfname[]="d:\\book.dat";voidcreate();//创建和初始化文件voidbrowse();//浏览文件voidinquire();//查找文件voidappend();//添加记录voiddel();//删除记录intmain(){intchoice;while(1){cout<<"\t-请键入操作选择\n"<cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
if(a[i].num==bh)
{cout<<"该记录为:
"<cout<<"编号:"<cout<<"书名:"<cout<<"出版社:"<cout<<"作者:"<cout<<"价格:"<flag=1;gotoL;}f.write((char*)&a[i],sizeof(book));L:i++;}while(i!=n);f.close();if(flag==0){cout<<"\t找不到需删除记录!"<f.open(fname,ios::binary|ios::in|ios::out);if(!f){cerr<<"文件不能打开!"<return;}i=0;do{f.write((char*)&a[i],sizeof(book));i++;}while(i!=n);}else{cout<<"\t该记录已被删除!"<f.open(fname,ios::binary|ios::in|ios::out);}f.open(fname,ios::binary|ios::in|ios::out);delete[]a;}由于不能直接删除二进制文件bookf.dat中的记录,所以在这个函数中,按给定编号删除相应记录可使用的方法为:先把bookf.dat中的记录读到一个动态的结构数组a中,然后重写该文件,在重写时忽略被删除记录。因为事先不知道文件bookf.dat中记录的个数,因而把结构数组a定义为动态数组。按题目要求,可在main函数中使用菜单来选择功能,即main函数可以编写为:voidmain(){fstreamf;strcpy(fname,"book.dat");f.open(fname,ios::binary|ios::in|ios::out);L:intchoice;cout<<"\n\t\t-请键入操作选择\n"<cout<<"\t1-建立图书文件"<cout<<"\t2-浏览图书文件"<cout<<"\t3-按编号查询图书信息"<cout<<"\t4-在图书文件尾部添加记录"<cout<<"\t5-按编号删除记录"<cout<<"\t0-退出"<cout<<"\t\t";cin>>choice;switch(choice){case1:create(f);gotoL;case2:browse(f);gotoL;case3:inquire(f);gotoL;case4:append(f);gotoL;case5:del(f);gotoL;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}} 实验代码://sys5.2.cpp#include#includeusingnamespacestd;structbook{intnum;//编号charname[20];//书名charauthor[20];//作者charpublish[20];//出版社doubleprice;//价格}b;constbookend={0,"NUll","NUll","NUll",0.0};charfname[]="d:\\book.dat";voidcreate();//创建和初始化文件voidbrowse();//浏览文件voidinquire();//查找文件voidappend();//添加记录voiddel();//删除记录intmain(){intchoice;while(1){cout<<"\t-请键入操作选择\n"<cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
cout<<"编号:
"<cout<<"书名:"<cout<<"出版社:"<cout<<"作者:"<cout<<"价格:"<flag=1;gotoL;}f.write((char*)&a[i],sizeof(book));L:i++;}while(i!=n);f.close();if(flag==0){cout<<"\t找不到需删除记录!"<f.open(fname,ios::binary|ios::in|ios::out);if(!f){cerr<<"文件不能打开!"<return;}i=0;do{f.write((char*)&a[i],sizeof(book));i++;}while(i!=n);}else{cout<<"\t该记录已被删除!"<f.open(fname,ios::binary|ios::in|ios::out);}f.open(fname,ios::binary|ios::in|ios::out);delete[]a;}由于不能直接删除二进制文件bookf.dat中的记录,所以在这个函数中,按给定编号删除相应记录可使用的方法为:先把bookf.dat中的记录读到一个动态的结构数组a中,然后重写该文件,在重写时忽略被删除记录。因为事先不知道文件bookf.dat中记录的个数,因而把结构数组a定义为动态数组。按题目要求,可在main函数中使用菜单来选择功能,即main函数可以编写为:voidmain(){fstreamf;strcpy(fname,"book.dat");f.open(fname,ios::binary|ios::in|ios::out);L:intchoice;cout<<"\n\t\t-请键入操作选择\n"<cout<<"\t1-建立图书文件"<cout<<"\t2-浏览图书文件"<cout<<"\t3-按编号查询图书信息"<cout<<"\t4-在图书文件尾部添加记录"<cout<<"\t5-按编号删除记录"<cout<<"\t0-退出"<cout<<"\t\t";cin>>choice;switch(choice){case1:create(f);gotoL;case2:browse(f);gotoL;case3:inquire(f);gotoL;case4:append(f);gotoL;case5:del(f);gotoL;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}} 实验代码://sys5.2.cpp#include#includeusingnamespacestd;structbook{intnum;//编号charname[20];//书名charauthor[20];//作者charpublish[20];//出版社doubleprice;//价格}b;constbookend={0,"NUll","NUll","NUll",0.0};charfname[]="d:\\book.dat";voidcreate();//创建和初始化文件voidbrowse();//浏览文件voidinquire();//查找文件voidappend();//添加记录voiddel();//删除记录intmain(){intchoice;while(1){cout<<"\t-请键入操作选择\n"<cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
cout<<"书名:
"<cout<<"出版社:"<cout<<"作者:"<cout<<"价格:"<flag=1;gotoL;}f.write((char*)&a[i],sizeof(book));L:i++;}while(i!=n);f.close();if(flag==0){cout<<"\t找不到需删除记录!"<f.open(fname,ios::binary|ios::in|ios::out);if(!f){cerr<<"文件不能打开!"<return;}i=0;do{f.write((char*)&a[i],sizeof(book));i++;}while(i!=n);}else{cout<<"\t该记录已被删除!"<f.open(fname,ios::binary|ios::in|ios::out);}f.open(fname,ios::binary|ios::in|ios::out);delete[]a;}由于不能直接删除二进制文件bookf.dat中的记录,所以在这个函数中,按给定编号删除相应记录可使用的方法为:先把bookf.dat中的记录读到一个动态的结构数组a中,然后重写该文件,在重写时忽略被删除记录。因为事先不知道文件bookf.dat中记录的个数,因而把结构数组a定义为动态数组。按题目要求,可在main函数中使用菜单来选择功能,即main函数可以编写为:voidmain(){fstreamf;strcpy(fname,"book.dat");f.open(fname,ios::binary|ios::in|ios::out);L:intchoice;cout<<"\n\t\t-请键入操作选择\n"<cout<<"\t1-建立图书文件"<cout<<"\t2-浏览图书文件"<cout<<"\t3-按编号查询图书信息"<cout<<"\t4-在图书文件尾部添加记录"<cout<<"\t5-按编号删除记录"<cout<<"\t0-退出"<cout<<"\t\t";cin>>choice;switch(choice){case1:create(f);gotoL;case2:browse(f);gotoL;case3:inquire(f);gotoL;case4:append(f);gotoL;case5:del(f);gotoL;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}} 实验代码://sys5.2.cpp#include#includeusingnamespacestd;structbook{intnum;//编号charname[20];//书名charauthor[20];//作者charpublish[20];//出版社doubleprice;//价格}b;constbookend={0,"NUll","NUll","NUll",0.0};charfname[]="d:\\book.dat";voidcreate();//创建和初始化文件voidbrowse();//浏览文件voidinquire();//查找文件voidappend();//添加记录voiddel();//删除记录intmain(){intchoice;while(1){cout<<"\t-请键入操作选择\n"<cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
cout<<"出版社:
"<cout<<"作者:"<cout<<"价格:"<flag=1;gotoL;}f.write((char*)&a[i],sizeof(book));L:i++;}while(i!=n);f.close();if(flag==0){cout<<"\t找不到需删除记录!"<f.open(fname,ios::binary|ios::in|ios::out);if(!f){cerr<<"文件不能打开!"<return;}i=0;do{f.write((char*)&a[i],sizeof(book));i++;}while(i!=n);}else{cout<<"\t该记录已被删除!"<f.open(fname,ios::binary|ios::in|ios::out);}f.open(fname,ios::binary|ios::in|ios::out);delete[]a;}由于不能直接删除二进制文件bookf.dat中的记录,所以在这个函数中,按给定编号删除相应记录可使用的方法为:先把bookf.dat中的记录读到一个动态的结构数组a中,然后重写该文件,在重写时忽略被删除记录。因为事先不知道文件bookf.dat中记录的个数,因而把结构数组a定义为动态数组。按题目要求,可在main函数中使用菜单来选择功能,即main函数可以编写为:voidmain(){fstreamf;strcpy(fname,"book.dat");f.open(fname,ios::binary|ios::in|ios::out);L:intchoice;cout<<"\n\t\t-请键入操作选择\n"<cout<<"\t1-建立图书文件"<cout<<"\t2-浏览图书文件"<cout<<"\t3-按编号查询图书信息"<cout<<"\t4-在图书文件尾部添加记录"<cout<<"\t5-按编号删除记录"<cout<<"\t0-退出"<cout<<"\t\t";cin>>choice;switch(choice){case1:create(f);gotoL;case2:browse(f);gotoL;case3:inquire(f);gotoL;case4:append(f);gotoL;case5:del(f);gotoL;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}} 实验代码://sys5.2.cpp#include#includeusingnamespacestd;structbook{intnum;//编号charname[20];//书名charauthor[20];//作者charpublish[20];//出版社doubleprice;//价格}b;constbookend={0,"NUll","NUll","NUll",0.0};charfname[]="d:\\book.dat";voidcreate();//创建和初始化文件voidbrowse();//浏览文件voidinquire();//查找文件voidappend();//添加记录voiddel();//删除记录intmain(){intchoice;while(1){cout<<"\t-请键入操作选择\n"<cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
cout<<"作者:
"<cout<<"价格:"<flag=1;gotoL;}f.write((char*)&a[i],sizeof(book));L:i++;}while(i!=n);f.close();if(flag==0){cout<<"\t找不到需删除记录!"<f.open(fname,ios::binary|ios::in|ios::out);if(!f){cerr<<"文件不能打开!"<return;}i=0;do{f.write((char*)&a[i],sizeof(book));i++;}while(i!=n);}else{cout<<"\t该记录已被删除!"<f.open(fname,ios::binary|ios::in|ios::out);}f.open(fname,ios::binary|ios::in|ios::out);delete[]a;}由于不能直接删除二进制文件bookf.dat中的记录,所以在这个函数中,按给定编号删除相应记录可使用的方法为:先把bookf.dat中的记录读到一个动态的结构数组a中,然后重写该文件,在重写时忽略被删除记录。因为事先不知道文件bookf.dat中记录的个数,因而把结构数组a定义为动态数组。按题目要求,可在main函数中使用菜单来选择功能,即main函数可以编写为:voidmain(){fstreamf;strcpy(fname,"book.dat");f.open(fname,ios::binary|ios::in|ios::out);L:intchoice;cout<<"\n\t\t-请键入操作选择\n"<cout<<"\t1-建立图书文件"<cout<<"\t2-浏览图书文件"<cout<<"\t3-按编号查询图书信息"<cout<<"\t4-在图书文件尾部添加记录"<cout<<"\t5-按编号删除记录"<cout<<"\t0-退出"<cout<<"\t\t";cin>>choice;switch(choice){case1:create(f);gotoL;case2:browse(f);gotoL;case3:inquire(f);gotoL;case4:append(f);gotoL;case5:del(f);gotoL;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}} 实验代码://sys5.2.cpp#include#includeusingnamespacestd;structbook{intnum;//编号charname[20];//书名charauthor[20];//作者charpublish[20];//出版社doubleprice;//价格}b;constbookend={0,"NUll","NUll","NUll",0.0};charfname[]="d:\\book.dat";voidcreate();//创建和初始化文件voidbrowse();//浏览文件voidinquire();//查找文件voidappend();//添加记录voiddel();//删除记录intmain(){intchoice;while(1){cout<<"\t-请键入操作选择\n"<cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
cout<<"价格:
"<flag=1;gotoL;}f.write((char*)&a[i],sizeof(book));L:i++;}while(i!=n);f.close();if(flag==0){cout<<"\t找不到需删除记录!"<f.open(fname,ios::binary|ios::in|ios::out);if(!f){cerr<<"文件不能打开!"<return;}i=0;do{f.write((char*)&a[i],sizeof(book));i++;}while(i!=n);}else{cout<<"\t该记录已被删除!"<f.open(fname,ios::binary|ios::in|ios::out);}f.open(fname,ios::binary|ios::in|ios::out);delete[]a;}由于不能直接删除二进制文件bookf.dat中的记录,所以在这个函数中,按给定编号删除相应记录可使用的方法为:先把bookf.dat中的记录读到一个动态的结构数组a中,然后重写该文件,在重写时忽略被删除记录。因为事先不知道文件bookf.dat中记录的个数,因而把结构数组a定义为动态数组。按题目要求,可在main函数中使用菜单来选择功能,即main函数可以编写为:voidmain(){fstreamf;strcpy(fname,"book.dat");f.open(fname,ios::binary|ios::in|ios::out);L:intchoice;cout<<"\n\t\t-请键入操作选择\n"<cout<<"\t1-建立图书文件"<cout<<"\t2-浏览图书文件"<cout<<"\t3-按编号查询图书信息"<cout<<"\t4-在图书文件尾部添加记录"<cout<<"\t5-按编号删除记录"<cout<<"\t0-退出"<cout<<"\t\t";cin>>choice;switch(choice){case1:create(f);gotoL;case2:browse(f);gotoL;case3:inquire(f);gotoL;case4:append(f);gotoL;case5:del(f);gotoL;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}} 实验代码://sys5.2.cpp#include#includeusingnamespacestd;structbook{intnum;//编号charname[20];//书名charauthor[20];//作者charpublish[20];//出版社doubleprice;//价格}b;constbookend={0,"NUll","NUll","NUll",0.0};charfname[]="d:\\book.dat";voidcreate();//创建和初始化文件voidbrowse();//浏览文件voidinquire();//查找文件voidappend();//添加记录voiddel();//删除记录intmain(){intchoice;while(1){cout<<"\t-请键入操作选择\n"<cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
flag=1;
gotoL;
f.write((char*)&a[i],sizeof(book));
L:
}while(i!
=n);
if(flag==0)
cout<<"\t找不到需删除记录!
"<f.open(fname,ios::binary|ios::in|ios::out);if(!f){cerr<<"文件不能打开!"<return;}i=0;do{f.write((char*)&a[i],sizeof(book));i++;}while(i!=n);}else{cout<<"\t该记录已被删除!"<f.open(fname,ios::binary|ios::in|ios::out);}f.open(fname,ios::binary|ios::in|ios::out);delete[]a;}由于不能直接删除二进制文件bookf.dat中的记录,所以在这个函数中,按给定编号删除相应记录可使用的方法为:先把bookf.dat中的记录读到一个动态的结构数组a中,然后重写该文件,在重写时忽略被删除记录。因为事先不知道文件bookf.dat中记录的个数,因而把结构数组a定义为动态数组。按题目要求,可在main函数中使用菜单来选择功能,即main函数可以编写为:voidmain(){fstreamf;strcpy(fname,"book.dat");f.open(fname,ios::binary|ios::in|ios::out);L:intchoice;cout<<"\n\t\t-请键入操作选择\n"<cout<<"\t1-建立图书文件"<cout<<"\t2-浏览图书文件"<cout<<"\t3-按编号查询图书信息"<cout<<"\t4-在图书文件尾部添加记录"<cout<<"\t5-按编号删除记录"<cout<<"\t0-退出"<cout<<"\t\t";cin>>choice;switch(choice){case1:create(f);gotoL;case2:browse(f);gotoL;case3:inquire(f);gotoL;case4:append(f);gotoL;case5:del(f);gotoL;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}} 实验代码://sys5.2.cpp#include#includeusingnamespacestd;structbook{intnum;//编号charname[20];//书名charauthor[20];//作者charpublish[20];//出版社doubleprice;//价格}b;constbookend={0,"NUll","NUll","NUll",0.0};charfname[]="d:\\book.dat";voidcreate();//创建和初始化文件voidbrowse();//浏览文件voidinquire();//查找文件voidappend();//添加记录voiddel();//删除记录intmain(){intchoice;while(1){cout<<"\t-请键入操作选择\n"<cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
in|ios:
cerr<<"文件不能打开!
"<return;}i=0;do{f.write((char*)&a[i],sizeof(book));i++;}while(i!=n);}else{cout<<"\t该记录已被删除!"<f.open(fname,ios::binary|ios::in|ios::out);}f.open(fname,ios::binary|ios::in|ios::out);delete[]a;}由于不能直接删除二进制文件bookf.dat中的记录,所以在这个函数中,按给定编号删除相应记录可使用的方法为:先把bookf.dat中的记录读到一个动态的结构数组a中,然后重写该文件,在重写时忽略被删除记录。因为事先不知道文件bookf.dat中记录的个数,因而把结构数组a定义为动态数组。按题目要求,可在main函数中使用菜单来选择功能,即main函数可以编写为:voidmain(){fstreamf;strcpy(fname,"book.dat");f.open(fname,ios::binary|ios::in|ios::out);L:intchoice;cout<<"\n\t\t-请键入操作选择\n"<cout<<"\t1-建立图书文件"<cout<<"\t2-浏览图书文件"<cout<<"\t3-按编号查询图书信息"<cout<<"\t4-在图书文件尾部添加记录"<cout<<"\t5-按编号删除记录"<cout<<"\t0-退出"<cout<<"\t\t";cin>>choice;switch(choice){case1:create(f);gotoL;case2:browse(f);gotoL;case3:inquire(f);gotoL;case4:append(f);gotoL;case5:del(f);gotoL;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}} 实验代码://sys5.2.cpp#include#includeusingnamespacestd;structbook{intnum;//编号charname[20];//书名charauthor[20];//作者charpublish[20];//出版社doubleprice;//价格}b;constbookend={0,"NUll","NUll","NUll",0.0};charfname[]="d:\\book.dat";voidcreate();//创建和初始化文件voidbrowse();//浏览文件voidinquire();//查找文件voidappend();//添加记录voiddel();//删除记录intmain(){intchoice;while(1){cout<<"\t-请键入操作选择\n"<cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
else
{cout<<"\t该记录已被删除!
"<f.open(fname,ios::binary|ios::in|ios::out);}f.open(fname,ios::binary|ios::in|ios::out);delete[]a;}由于不能直接删除二进制文件bookf.dat中的记录,所以在这个函数中,按给定编号删除相应记录可使用的方法为:先把bookf.dat中的记录读到一个动态的结构数组a中,然后重写该文件,在重写时忽略被删除记录。因为事先不知道文件bookf.dat中记录的个数,因而把结构数组a定义为动态数组。按题目要求,可在main函数中使用菜单来选择功能,即main函数可以编写为:voidmain(){fstreamf;strcpy(fname,"book.dat");f.open(fname,ios::binary|ios::in|ios::out);L:intchoice;cout<<"\n\t\t-请键入操作选择\n"<cout<<"\t1-建立图书文件"<cout<<"\t2-浏览图书文件"<cout<<"\t3-按编号查询图书信息"<cout<<"\t4-在图书文件尾部添加记录"<cout<<"\t5-按编号删除记录"<cout<<"\t0-退出"<cout<<"\t\t";cin>>choice;switch(choice){case1:create(f);gotoL;case2:browse(f);gotoL;case3:inquire(f);gotoL;case4:append(f);gotoL;case5:del(f);gotoL;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}} 实验代码://sys5.2.cpp#include#includeusingnamespacestd;structbook{intnum;//编号charname[20];//书名charauthor[20];//作者charpublish[20];//出版社doubleprice;//价格}b;constbookend={0,"NUll","NUll","NUll",0.0};charfname[]="d:\\book.dat";voidcreate();//创建和初始化文件voidbrowse();//浏览文件voidinquire();//查找文件voidappend();//添加记录voiddel();//删除记录intmain(){intchoice;while(1){cout<<"\t-请键入操作选择\n"<cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
delete[]a;
由于不能直接删除二进制文件bookf.dat中的记录,所以在这个函数中,按给定编号删除相应记录可使用的方法为:
先把bookf.dat中的记录读到一个动态的结构数组a中,然后重写该文件,在重写时忽略被删除记录。
因为事先不知道文件bookf.dat中记录的个数,因而把结构数组a定义为动态数组。
按题目要求,可在main函数中使用菜单来选择功能,即main函数可以编写为:
voidmain()
fstreamf;
strcpy(fname,"book.dat");
intchoice;
cout<<"\n\t\t-请键入操作选择\n"<cout<<"\t1-建立图书文件"<cout<<"\t2-浏览图书文件"<cout<<"\t3-按编号查询图书信息"<cout<<"\t4-在图书文件尾部添加记录"<cout<<"\t5-按编号删除记录"<cout<<"\t0-退出"<cout<<"\t\t";cin>>choice;switch(choice){case1:create(f);gotoL;case2:browse(f);gotoL;case3:inquire(f);gotoL;case4:append(f);gotoL;case5:del(f);gotoL;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}} 实验代码://sys5.2.cpp#include#includeusingnamespacestd;structbook{intnum;//编号charname[20];//书名charauthor[20];//作者charpublish[20];//出版社doubleprice;//价格}b;constbookend={0,"NUll","NUll","NUll",0.0};charfname[]="d:\\book.dat";voidcreate();//创建和初始化文件voidbrowse();//浏览文件voidinquire();//查找文件voidappend();//添加记录voiddel();//删除记录intmain(){intchoice;while(1){cout<<"\t-请键入操作选择\n"<cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
cout<<"\t1-建立图书文件"<cout<<"\t2-浏览图书文件"<cout<<"\t3-按编号查询图书信息"<cout<<"\t4-在图书文件尾部添加记录"<cout<<"\t5-按编号删除记录"<cout<<"\t0-退出"<cout<<"\t\t";cin>>choice;switch(choice){case1:create(f);gotoL;case2:browse(f);gotoL;case3:inquire(f);gotoL;case4:append(f);gotoL;case5:del(f);gotoL;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}} 实验代码://sys5.2.cpp#include#includeusingnamespacestd;structbook{intnum;//编号charname[20];//书名charauthor[20];//作者charpublish[20];//出版社doubleprice;//价格}b;constbookend={0,"NUll","NUll","NUll",0.0};charfname[]="d:\\book.dat";voidcreate();//创建和初始化文件voidbrowse();//浏览文件voidinquire();//查找文件voidappend();//添加记录voiddel();//删除记录intmain(){intchoice;while(1){cout<<"\t-请键入操作选择\n"<cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
cout<<"\t2-浏览图书文件"<cout<<"\t3-按编号查询图书信息"<cout<<"\t4-在图书文件尾部添加记录"<cout<<"\t5-按编号删除记录"<cout<<"\t0-退出"<cout<<"\t\t";cin>>choice;switch(choice){case1:create(f);gotoL;case2:browse(f);gotoL;case3:inquire(f);gotoL;case4:append(f);gotoL;case5:del(f);gotoL;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}} 实验代码://sys5.2.cpp#include#includeusingnamespacestd;structbook{intnum;//编号charname[20];//书名charauthor[20];//作者charpublish[20];//出版社doubleprice;//价格}b;constbookend={0,"NUll","NUll","NUll",0.0};charfname[]="d:\\book.dat";voidcreate();//创建和初始化文件voidbrowse();//浏览文件voidinquire();//查找文件voidappend();//添加记录voiddel();//删除记录intmain(){intchoice;while(1){cout<<"\t-请键入操作选择\n"<cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
cout<<"\t3-按编号查询图书信息"<cout<<"\t4-在图书文件尾部添加记录"<cout<<"\t5-按编号删除记录"<cout<<"\t0-退出"<cout<<"\t\t";cin>>choice;switch(choice){case1:create(f);gotoL;case2:browse(f);gotoL;case3:inquire(f);gotoL;case4:append(f);gotoL;case5:del(f);gotoL;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}} 实验代码://sys5.2.cpp#include#includeusingnamespacestd;structbook{intnum;//编号charname[20];//书名charauthor[20];//作者charpublish[20];//出版社doubleprice;//价格}b;constbookend={0,"NUll","NUll","NUll",0.0};charfname[]="d:\\book.dat";voidcreate();//创建和初始化文件voidbrowse();//浏览文件voidinquire();//查找文件voidappend();//添加记录voiddel();//删除记录intmain(){intchoice;while(1){cout<<"\t-请键入操作选择\n"<cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
cout<<"\t4-在图书文件尾部添加记录"<cout<<"\t5-按编号删除记录"<cout<<"\t0-退出"<cout<<"\t\t";cin>>choice;switch(choice){case1:create(f);gotoL;case2:browse(f);gotoL;case3:inquire(f);gotoL;case4:append(f);gotoL;case5:del(f);gotoL;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}} 实验代码://sys5.2.cpp#include#includeusingnamespacestd;structbook{intnum;//编号charname[20];//书名charauthor[20];//作者charpublish[20];//出版社doubleprice;//价格}b;constbookend={0,"NUll","NUll","NUll",0.0};charfname[]="d:\\book.dat";voidcreate();//创建和初始化文件voidbrowse();//浏览文件voidinquire();//查找文件voidappend();//添加记录voiddel();//删除记录intmain(){intchoice;while(1){cout<<"\t-请键入操作选择\n"<cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
cout<<"\t5-按编号删除记录"<cout<<"\t0-退出"<cout<<"\t\t";cin>>choice;switch(choice){case1:create(f);gotoL;case2:browse(f);gotoL;case3:inquire(f);gotoL;case4:append(f);gotoL;case5:del(f);gotoL;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}} 实验代码://sys5.2.cpp#include#includeusingnamespacestd;structbook{intnum;//编号charname[20];//书名charauthor[20];//作者charpublish[20];//出版社doubleprice;//价格}b;constbookend={0,"NUll","NUll","NUll",0.0};charfname[]="d:\\book.dat";voidcreate();//创建和初始化文件voidbrowse();//浏览文件voidinquire();//查找文件voidappend();//添加记录voiddel();//删除记录intmain(){intchoice;while(1){cout<<"\t-请键入操作选择\n"<cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
cout<<"\t0-退出"<cout<<"\t\t";cin>>choice;switch(choice){case1:create(f);gotoL;case2:browse(f);gotoL;case3:inquire(f);gotoL;case4:append(f);gotoL;case5:del(f);gotoL;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}} 实验代码://sys5.2.cpp#include#includeusingnamespacestd;structbook{intnum;//编号charname[20];//书名charauthor[20];//作者charpublish[20];//出版社doubleprice;//价格}b;constbookend={0,"NUll","NUll","NUll",0.0};charfname[]="d:\\book.dat";voidcreate();//创建和初始化文件voidbrowse();//浏览文件voidinquire();//查找文件voidappend();//添加记录voiddel();//删除记录intmain(){intchoice;while(1){cout<<"\t-请键入操作选择\n"<cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
cout<<"\t\t";
cin>>choice;
switch(choice)
{case1:
create(f);gotoL;
case2:
browse(f);gotoL;
case3:
inquire(f);gotoL;
case4:
append(f);gotoL;
case5:
del(f);gotoL;
case0:
cout<<"\t-退出程序的运行!
\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}} 实验代码://sys5.2.cpp#include#includeusingnamespacestd;structbook{intnum;//编号charname[20];//书名charauthor[20];//作者charpublish[20];//出版社doubleprice;//价格}b;constbookend={0,"NUll","NUll","NUll",0.0};charfname[]="d:\\book.dat";voidcreate();//创建和初始化文件voidbrowse();//浏览文件voidinquire();//查找文件voidappend();//添加记录voiddel();//删除记录intmain(){intchoice;while(1){cout<<"\t-请键入操作选择\n"<cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
default:
cout<<"\t-输入错误,请重新输入!
\n"<}} 实验代码://sys5.2.cpp#include#includeusingnamespacestd;structbook{intnum;//编号charname[20];//书名charauthor[20];//作者charpublish[20];//出版社doubleprice;//价格}b;constbookend={0,"NUll","NUll","NUll",0.0};charfname[]="d:\\book.dat";voidcreate();//创建和初始化文件voidbrowse();//浏览文件voidinquire();//查找文件voidappend();//添加记录voiddel();//删除记录intmain(){intchoice;while(1){cout<<"\t-请键入操作选择\n"<cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
实验代码:
//sys5.2.cpp
structbook
intnum;//编号
charname[20];//书名
charauthor[20];//作者
charpublish[20];//出版社
doubleprice;//价格
}b;
constbookend={0,"NUll","NUll","NUll",0.0};
charfname[]="d:
\\book.dat";
voidcreate();//创建和初始化文件
voidbrowse();//浏览文件
voidinquire();//查找文件
voidappend();//添加记录
voiddel();//删除记录
while
(1)
cout<<"\t-请键入操作选择\n"<cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
cout<<"1-建立图书文件"<cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
cout<<"2-在结尾添加文件"<cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
cout<<"3-按编号查询图书信息"<cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
cout<<"4-浏览图书文件"<cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
cout<<"5-按编号删除记录"<cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
cout<<"0-退出"<cin>>choice;if(choice==0)break;else{switch(choice){case1:create();break;case2:append();break;case3:inquire();break;case4:browse();break;case5:del();break;case0:cout<<"\t-退出程序的运行!\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
if(choice==0)break;
else{
create();break;
append();break;
inquire();break;
browse();break;
del();break;
\n"<default:cout<<"\t-输入错误,请重新输入!\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
\n"<}}}return1;}voidcreate()//建立文件{fstreamf;f.open(fname,ios::binary|ios::out);f.seekp(0,ios::beg);f.write((char*)&end,long(sizeof(book)));cout<<"文件已经建立\n";f.close();}voidappend()//在结尾添加记录{inti;fstreamf;booktemp;f.open(fname,ios::in|ios::out|ios::binary);cout<<"开始添加记录!\n";cout<<"输入添加的记录数:";cin>>i;do{f.read((char*)&temp,sizeof(book));}while(temp.num!=0);f.seekp(-long(sizeof(book)),ios::cur);while(i--){cout<<"请输入书编号、书名、作者、出版社、价格:\n";cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录f.write((char*)&b,sizeof(b));}f.write((char*)&end,sizeof(end));f.close();}voidbrowse(){fstreamf;f.open(fname,ios::in|ios::binary);cout<<"浏览文件:\n";while(1){f.read((char*)&b,sizeof(book));if(b.num==0){cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
voidcreate()//建立文件
f.seekp(0,ios:
f.write((char*)&end,long(sizeof(book)));
cout<<"文件已经建立\n";
voidappend()//在结尾添加记录
inti;
booktemp;
out|ios:
binary);
cout<<"开始添加记录!
cout<<"输入添加的记录数:
cin>>i;
do{
f.read((char*)&temp,sizeof(book));
}while(temp.num!
=0);
f.seekp(-long(sizeof(book)),ios:
cur);
while(i--)
cout<<"请输入书编号、书名、作者、出版社、价格:
cin>>b.num>>b.name>>b.author>>b.publish>>b.price;//添加记录
f.write((char*)&b,sizeof(b));
f.write((char*)&end,sizeof(end));
voidbrowse()
cout<<"浏览文件:
f.read((char*)&b,sizeof(book));
if(b.num==0)
cout<<"浏览结束"<break;}cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
break;
"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
<<"作者:
"<<<"出版社:"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
<<"出版社:
"<<<"价格:"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
<<"价格:
"<}f.close();}voidinquire(){fstreamf;intnum;cout<<"查找!"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
voidinquire()
intnum;
cout<<"查找!
"<f.open(fname,ios::in|ios::out|ios::binary);cout<<"请输入要查找的书的编号:";cin>>num;cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
cout<<"请输入要查找的书的编号:
cin>>num;
cout<while(1){f.read((char*)&b,sizeof(book));if(b.num==num){cout<<"已查找到记录!\n";cout<<"编号:"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
if(b.num==num)
cout<<"已查找到记录!
"<<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
<<"书名"<<<"作者:"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
"<<<"出版社:"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
"<<<"价格:"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
"<break;}elseif(b.num==0){cout<<"查找不到!\n";break;}}f.close();}voiddel(){fstreamf;inti,n,num,flag=0;book*a;f.open(fname,ios::binary|ios::in|ios::out);f.seekg(0,ios::end);longposend=f.tellg();n=posend/sizeof(book);//记录文件数a=newbook[n];//申请空间f.seekg(0,ios::beg);i=0;do{f.read((char*)&a[i],sizeof(book));i++;}while(long(f.tellp())!=posend);f.close();cout<<"请输入需删除记录编号:";cin>>num;f.open(fname,ios::binary|ios::trunc|ios::out);if(!f){cerr<<"文件不能打开!"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
elseif(b.num==0)
cout<<"查找不到!
voiddel()
inti,n,num,flag=0;
n=posend/sizeof(book);//记录文件数
a=newbook[n];//申请空间
}while(long(f.tellp())!
"<return;}for(i=0;i<=n;i++){if(a[i].num==num){flag=1;continue;}f.write((char*)&a[i],sizeof(book));}if(flag==1)cout<<"已删除记录!\n";elsecout<<"没有此记录!\n";f.close();}运行结果:实验总结:C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。文本文件操作的是字符流,二进制文件则是操作字节流。C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。
for(i=0;i<=n;i++)
if(a[i].num==num)
continue;
if(flag==1)
cout<<"已删除记录!
cout<<"没有此记录!
实验总结:
C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作
C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。
文本文件操作的是字符流,二进制文件则是操作字节流。
C++I/O系统管理两个与一个文件相联系的指针。
一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。
每次执行输入或输出时,相应的指针自动变化。
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2