《计算机基础实验课程》实验三小小图书馆.docx
- 文档编号:29791081
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:22
- 大小:129.85KB
《计算机基础实验课程》实验三小小图书馆.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;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)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机基础实验课程 计算机基础实验课程实验三 小小图书馆 计算机 基础 实验 课程 小小 图书馆
![提示](https://static.bdocx.com/images/bang_tan.gif)