C++程序设计基础实验报告.docx

上传人:b****1 文档编号:14325396 上传时间:2023-06-22 格式:DOCX 页数:18 大小:169.14KB
下载 相关 举报
C++程序设计基础实验报告.docx_第1页
第1页 / 共18页
C++程序设计基础实验报告.docx_第2页
第2页 / 共18页
C++程序设计基础实验报告.docx_第3页
第3页 / 共18页
C++程序设计基础实验报告.docx_第4页
第4页 / 共18页
C++程序设计基础实验报告.docx_第5页
第5页 / 共18页
C++程序设计基础实验报告.docx_第6页
第6页 / 共18页
C++程序设计基础实验报告.docx_第7页
第7页 / 共18页
C++程序设计基础实验报告.docx_第8页
第8页 / 共18页
C++程序设计基础实验报告.docx_第9页
第9页 / 共18页
C++程序设计基础实验报告.docx_第10页
第10页 / 共18页
C++程序设计基础实验报告.docx_第11页
第11页 / 共18页
C++程序设计基础实验报告.docx_第12页
第12页 / 共18页
C++程序设计基础实验报告.docx_第13页
第13页 / 共18页
C++程序设计基础实验报告.docx_第14页
第14页 / 共18页
C++程序设计基础实验报告.docx_第15页
第15页 / 共18页
C++程序设计基础实验报告.docx_第16页
第16页 / 共18页
C++程序设计基础实验报告.docx_第17页
第17页 / 共18页
C++程序设计基础实验报告.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C++程序设计基础实验报告.docx

《C++程序设计基础实验报告.docx》由会员分享,可在线阅读,更多相关《C++程序设计基础实验报告.docx(18页珍藏版)》请在冰点文库上搜索。

C++程序设计基础实验报告.docx

C++程序设计基础实验报告

广州大学学生实验报告

开课学院及实验室:

计算机科学与工程实验室2012年月日

学院

计算机科学与教育软件学院

年级/专业/班

姓名

学号

实验课程名称

C++程序设计基础实验报告

成绩

实验项目名称

I/O流与文件

指导老师

(***报告只能为文字和图片,老师评语将添加到此处,学生请勿作答***)

一、实验目的与要求

(1)掌握流的概念。

(2)掌握文本文件和二进制文件的使用方法。

二、实验设备与平台

1、硬件环境:

微型计算机,2、软件环境:

VisualC++6.0;

三、实验内容与步骤:

(1)建立一个文本文件“textfile.txt”(内容由读者选定),然后显示该文件,并且统计该文件的行数和字符数。

#include

#include

#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())//浏览问文件的函数

{

inf.getline(s,80);

cout<

}

inf.close();

}

voidstatistics(char*filename,int&line,int&charnum)

{

line=0;

charnum=0;

chars;

ifstreamoutf(filename,ios:

:

out);//

while(!

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<<"统计结果:

\n";

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

#include

usingnamespacestd;

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";

else

cout<<"没有此记录!

\n";

f.close();

}

运行结果:

实验总结:

C++将文件看成一个个字符在磁盘上的有序集合,用流来实现文件的读写操作

C++中用来建立流对象的类有ifstream,ofstream,fstream,这些流类都是从ioslei派生来的,能够直接访问ios流类定义的各种操作。

文本文件操作的是字符流,二进制文件则是操作字节流。

C++I/O系统管理两个与一个文件相联系的指针。

一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。

每次执行输入或输出时,相应的指针自动变化。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2