《计算机基础实验课程》实验三小小图书馆.docx
《《计算机基础实验课程》实验三小小图书馆.docx》由会员分享,可在线阅读,更多相关《《计算机基础实验课程》实验三小小图书馆.docx(22页珍藏版)》请在冰豆网上搜索。
《计算机基础实验课程》实验三小小图书馆
院系:
计算机学院
实验课程:
计算机基础实验课程
实验项目:
小小图书馆
指导老师:
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;iborbook[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;iif(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)