《计算机基础实验课程》实验三小小图书馆.docx

上传人:b****8 文档编号:29791081 上传时间:2023-07-27 格式:DOCX 页数:22 大小:129.85KB
下载 相关 举报
《计算机基础实验课程》实验三小小图书馆.docx_第1页
第1页 / 共22页
《计算机基础实验课程》实验三小小图书馆.docx_第2页
第2页 / 共22页
《计算机基础实验课程》实验三小小图书馆.docx_第3页
第3页 / 共22页
《计算机基础实验课程》实验三小小图书馆.docx_第4页
第4页 / 共22页
《计算机基础实验课程》实验三小小图书馆.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

《计算机基础实验课程》实验三小小图书馆.docx

《《计算机基础实验课程》实验三小小图书馆.docx》由会员分享,可在线阅读,更多相关《《计算机基础实验课程》实验三小小图书馆.docx(22页珍藏版)》请在冰豆网上搜索。

《计算机基础实验课程》实验三小小图书馆.docx

《计算机基础实验课程》实验三小小图书馆

 

院系:

计算机学院

 

实验课程:

计算机基础实验课程

实验项目:

小小图书馆

指导老师:

XXX

开课时间:

XXXX~XXXX年度第2学期

专业:

XXXX

班级:

XXXX级本XX班

学生:

XXX

学号:

XXXX

 

一、实验题目:

在社区中有一个小小图书馆,居民可以来阅读或借阅图书,现在要帮助图书管理员管理读者和图书,编写程序完成图书和读者信息的自动管理。

二、实验目标与要求:

要求程序是一个简单的图书馆管理系统,主要完成的工作有:

借书

还书

图书管理

读者维护

其中,图书管理和读者维护功能中可以进行日常的数据添加、删除、查找、显示等功能,使日常图书借阅工作能正常进行。

读者信息记录在reader.dat文件中,图书信息在book.dat文件中。

编程基于字符界面的的控制台应用程序来实现。

(一)修改后的程序清单:

1.stdafx.h

2.book.h

#ifndef_book_h_

#define_book_h_

#include

usingnamespacestd;

classBook//图书类

{

private:

intnote;//删除标记(1:

已删,0:

未删)

intnumber;//图书编号

charname[10];//书名

intonshelf;//上架标志

public:

Book(){}

char*getname();//获得书名

intgetnote();//获得删除标记

intgetnumber();//获得图书编号

voidsetname(charna[]);//设置书名

voiddelbook();//删除图书

voidaddbook(intn,char*na);//添加图书

intborrowbook();//借书操作

voidretbook();//还书操作

voidlist();//输出图书

voidalborrow();//借书后归零处理

};

#endif

3.book.cpp

#include"stdafx.h"

#include

#include"book.h"

char*Book:

:

getname()

{returnname;}

intBook:

:

getnote()

{returnnote;}

intBook:

:

getnumber()

{returnnumber;}

voidBook:

:

setname(charna[])

{strcpy(name,na);}

voidBook:

:

addbook(intn,char*na)

{note=0;

number=n;

strcpy(name,na);

onshelf=1;}

voidBook:

:

delbook()

{note=1;}

intBook:

:

borrowbook()

{returnonshelf;}

voidBook:

:

retbook()

{onshelf=1;}

voidBook:

:

list()

{cout<

voidBook:

:

alborrow()

{onshelf=0;}

4.reader.h

#ifndef_reader_h_

#define_reader_h_

#include

usingnamespacestd;

constintMaxbor=5;//最大借阅量

classReader//读者类

{

private:

intnote;//删除标记(1:

已删,0:

未删)

intnumber;//读者编号

charname[10];//读者姓名

intborbook[Maxbor];//所借图书

public:

Reader(){}

char*getname();//获得姓名

intgetnote();//获得删除标记

intgetnumber();//获得读者编号

voidsetname(charna[]);//设置姓名

voiddelbook();//设置删除标记

voidaddreader(intn,char*na);//添加读者

voidborrowbook(intbookid);//借书操作

intretbook(intbookid);//还书操作

voidlist();//输出读者信息

};

#endif

5.reader.cpp

#include"stdafx.h"

#include

#include"reader.h"

char*Reader:

:

getname()

{returnname;}

intReader:

:

getnote()

{returnnote;}

intReader:

:

getnumber()

{returnnumber;}

voidReader:

:

setname(charna[])

{strcpy(name,na);}

voidReader:

:

addreader(intn,char*na)

{

note=0;

number=n;

strcpy(name,na);

for(inti=0;i

borbook[i]=0;

}

voidReader:

:

delbook()

{note=1;}

voidReader:

:

borrowbook(intbookid)

{

for(inti=0;i

{

if(borbook[i]==0)

{borbook[i]=bookid;return;}

}

}

intReader:

:

retbook(intbookid)

{

for(inti=0;i

{

if(borbook[i]==bookid)

{borbook[i]=0;return1;}

}

return0;

}

voidReader:

:

list()

{

cout<

[";

for(inti=0;i

if(borbook[i]==0)cout<

cout<<"]"<

}

6.bdatabase.h

#ifndef_bdatadase_h_

#define_bdatabase_h_

#include"book.h"

#include

usingnamespacestd;

constintMaxb=100;//最大图书数量

classBDatabase//图书库类

{

private:

inttop;//图书记录指针

Bookbook[Maxb];//图书记录

public:

BDatabase();//构造函数初始化:

读文件

voidclear();//全部删除

intaddbook(intn,char*na);//添加图书

Book*query(intbookid);//查找图书

voidlist();//输出图书信息

voidbookdata();//图书库维护

~BDatabase();//析构函数:

写文件

};

#endif

7.bdatabase.cpp

#include"stdafx.h"

#include

#include"bdatabase.h"

BDatabase:

:

BDatabase()

{

Books;

top=-1;

fstreamfile;

file.open("book.dat",ios:

:

in|ios:

:

binary);

while

(1)

{

file.read((char*)&s,sizeof(s));

if(!

file)break;

top++;

book[top]=s;

}

file.close();

}

voidBDatabase:

:

clear()

{top=-1;}

Book*BDatabase:

:

query(intbookid)

{

for(inti=0;i<=top;i++)

if(book[i].getnumber()==bookid&&book[i].getnote()==0)

return&book[i];

returnNULL;

}

intBDatabase:

:

addbook(intn,char*na)

{

Book*p=query(n);

if(p==NULL)

{

top++;

book[top].addbook(n,na);

return1;

}

return0;

}

voidBDatabase:

:

list()

{for(inti=0;i<=top;i++)

book[i].list();

}

BDatabase:

:

~BDatabase()

{

fstreamfile;

file.open("book.dat",ios:

:

out|ios:

:

binary);

for(inti=0;i<=top;i++)

if(book[i].getnote()==0)

file.write((char*)&book[i],sizeof(book[i]));

file.close();

}

voidBDatabase:

:

bookdata()

{

intchoice=1;

charbookname[20];

intbookid;

Book*b;

while(choice!

=0)

{

cout<<"图书维护:

"<

cout<<"--------------------------------------------------------"<

cout<<"1:

新增2:

更改3:

删除4:

查找5:

显示6:

全删0:

退出"<

cout<<"--------------------------------------------------------"<

cout<<"请选择:

";

cin>>choice;

switch(choice)

{

case1:

cout<<"输入图书编号:

";

cin>>bookid;

cout<<"输入图书名:

";

cin>>bookname;

addbook(bookid,bookname);break;

case2:

cout<<"输入图书编号:

";

cin>>bookid;

b=query(bookid);

if(b==NULL)

{cout<<"该图书不存在!

"<

break;}

cout<<"输入新的图书名:

";

cin>>bookname;

b->setname(bookname);break;

case3:

cout<<"输入图书编号:

";

cin>>bookid;

b=query(bookid);

if(b==NULL)

{cout<<"该图书不存在!

"<

break;}

case4:

cout<<"输入图书编号:

";

cin>>bookid;

b=query(bookid);

if(b==NULL)

{cout<<"该图书不存在!

"<

break;}

b->list();break;

case5:

list();break;

case6:

break;

}//endswitch

}//endwhile

}

8.rdatabase.h

#ifndef_rdatadase_h_

#define_rdatabase_h_

#include"reader.h"

#include

usingnamespacestd;

constintMaxr=100;//最大读者数

classRDatabase//读者库类

{

private:

inttop;//读者记录指针

Readerread[Maxr];//读者记录

public:

RDatabase();//构造函数初始化:

读文件

voidclear();//删除所有读者信息

intaddreader(intn,char*na);//添加读者记录时,先确定他//是否已经存在

Reader*query(intreaderid);//按编号查找

voidlist();//输出所有读者信息

voidreaderdata();//读者库维护

~RDatabase();//析构函数:

写文件

};

#endif

9.rdatabase.cpp

#include"stdafx.h"

#include

#include"rdatabase.h"

RDatabase:

:

RDatabase()

{

Readers;

top=-1;

ifstreamfile;

file.open("reader.dat",ios:

:

in|ios:

:

binary);

while

(1)

{file.read((char*)&s,sizeof(s));

if(!

file)break;

top++;

read[top]=s;

}

file.close();

}

voidRDatabase:

:

clear()

{top=-1;}

Reader*RDatabase:

:

query(intreaderid)

{

for(inti=0;i<=top;i++)

if(read[i].getnumber()==readerid&&read[i].getnote()==0)return&read[i];

returnNULL;

}

intRDatabase:

:

addreader(intn,char*na)

{

Reader*p=query(n);

if(p==NULL)

{

top++;

read[top].addreader(n,na);

return1;

}

return0;

}

voidRDatabase:

:

list()

{for(inti=0;i<=top;i++)

read[i].list();

}

RDatabase:

:

~RDatabase()

{fstreamfile;

file.open("reader.dat",ios:

:

out|ios:

:

binary);

for(inti=0;i<=top;i++)

if(read[i].getnote()==0)

file.write((char*)&read[i],sizeof(read[i]));

file.close();

}

voidRDatabase:

:

readerdata()

{intchoice=1;

charreadername[20];

intreaderid;

Reader*r;

while(choice!

=0)

{

cout<<"读者维护:

"<

cout<<"--------------------------------------------------------"<

cout<<"1:

新增2:

更改3:

删除4:

查找5:

显示6:

全删0:

退出"<

cout<<"--------------------------------------------------------"<

cout<<"请选择:

";

cin>>choice;

switch(choice)

{

case1:

cout<<"输入读者编号:

";

cin>>readerid;

cout<<"输入读者姓名:

";

cin>>readername;

addreader(readerid,readername);break;

case2:

cout<<"输入读者编号:

";

cin>>readerid;

r=query(readerid);

if(r==NULL)

{cout<<"该读者不存在!

"<

break;}

cout<<"输入新的姓名:

";

cin>>readername;

r->setname(readername);break;

case3:

cout<<"输入读者编号:

";

cin>>readerid;

r=query(readerid);

if(r==NULL)

{cout<<"该读者不存在!

"<

break;}

case4:

cout<<"输入读者编号:

";

cin>>readerid;

r=query(readerid);

if(r==NULL)

{cout<<"该读者不存在!

"<

break;}

r->list();break;

case5:

list();break;

case6:

break;

}//endswitch

}//endwhile

}

10.library.cpp

#include"stdafx.h"

#include"reader.h"

#include"rdatabase.h"

#include"book.h"

#include"bdatabase.h"

#include

usingnamespacestd;

intmain(intargc,char*argv[])

{

intchoice=1,bookid,readerid;

RDatabaseReaderDB;

BDatabaseBookDB;

Reader*r;

Book*b;

cout<<"欢迎进入“小小图书馆”管理软件"<

cout<<"-------------------------------"<

while(choice!

=0)

{

cout<<"-----------------------------------------------------"<

cout<<"1:

借书2还书3:

图书维护4:

读者维护0:

离开"<

cout<<"-----------------------------------------------------"<

cout<<"请选择:

";

cin>>choice;

switch(choice)

{

case1:

cout<<"输入借书读者编号:

";

cin>>readerid;

cout<<"输入图书编号:

";

cin>>bookid;

r=ReaderDB.query(readerid);

if(r==NULL)

{

cout<<"该读者不存在,不能借书!

"<

break;

}

b=BookDB.query(bookid);

if(b==NULL)

{

cout<<"该图书不存在,不能借书!

"<

break;

}

if(b->borrowbook()==0)

{

cout<<"该图书已借出,不能借书!

"<

break;

}

r->borrowbook(b->getnumber());

b->alborrow();break;

case2:

cout<<"输入还书读者编号:

";

cin>>readerid;

cout<<"输入图书编号:

";

cin>>bookid;

r=ReaderDB.query(readerid);

if(r==NULL)

{

cout<<"该读者不存在,不能还书!

"<

break;

}

b=BookDB.query(bookid);

if(b==NULL)

{

cout<<"该图书不存在,不能还书!

"<

break;

}

b->retbook();

r->retbook(b->getnumber());break;

case3:

BookDB.bookdata();break;

case4:

ReaderDB.readerdata();break;

}//endswitch

}//endwhile

return0;

}

(二)程序运行结果:

1.开始时界面

 

2.读者维护

3.图书维护

4.借书

5.还书

 

三、实验小结:

1.出现问题分析:

(1)刚开始的时候,编译一直出错,先是未定义头文件stdafx.h。

(2)在编译时,出现拼写错误的,如Maxbor(误写成Maxbar),iomanip(误写成iomainip)。

还有一些出现重定义了。

(3)在执行借书操作时,编译不了,检查源程序,发现语句if(b=Null)有问题。

(4)在进行还书时,进行不了,检查源程序发现onshelf是代表书是否借出,但执行完时没进行归零处理。

2.解决方法:

(1)定义了头文件stdafx.h。

(2)将Maxbar改为Maxbor;将iomainip改为iomanip;将其他一些小错误改正,并删去重定义的部分。

(3)将library.cpp文件中的if(b=Null)改为if(b==Null)

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

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1