目录
运行效果:
1、book.h的代码:
#ifndef __book_h__
#define __book_h__
#include<iostream>
using namespace std;
class Book
{
private:
int note;
int number;
char name[20];
int onshelf;
public:
Book(){}
char* getname();
int getnumber();
int getnote();
void setname(char na[]);
void delbook();
void addbook(int n, char *na);
int borrowbook();
void retbook();
void list();
};
2、Book.cpp代码
#include"book.h"
#include <iomanip>
#include <cstring>
// 获取书名
char* Book::getname(){
return name;
}
// 返回书本的状态
int Book::getnote(){
return note;
}
// 返回书本的编码
int Book::getnumber(){
return number;
}
// 设置书名
void Book::setname(char na[]){
strcpy(name,na);
}
void Book::delbook(){
note = 1;
onshelf = 0;
}
void Book::addbook(int n,char *na){
note = 0;
onshelf = 1;
number = n;
strcpy(name,na);
}
int Book::borrowbook(){
if(onshelf == 0){
return 0;
}
else
onshelf = 0;
return 1;}
void Book::retbook(){
onshelf = 1;
}
void Book::list(){
cout<<" "<<"书本编号:"<<number<<" "<<"书名:"<<name<<" "<<"在架:"<<onshelf<<"(0:不在,1:在)"<<endl;
cout<<"----------------------------------------------------------------------------------------"<<endl;}
3、reader.h
#ifndef __reader_h__
#define __reader_h__
#include <iostream>
using namespace std;
const int Maxbor = 5; // 最大借阅数量
class Reader{
private:
int note; // 删除标志 1删 0未删
int number; // 读者编号
char name[20]; // 读者姓名
int borbook[Maxbor]; // 借阅的图书
int password;
public:
Reader(){}
char *getname();
int getpassword();
int getnote(); // 获取删除标志
int getnumber(); // 获取读者编号
void setname(char na[]); //设置读者名字
void delbook(); // 设置删除标志
void addreader(int n,char *na,int pa); // 添加读者
void borrowbook(int bookid); // 借书操作
int retbook(int bookid); // 还书操作
void setpassword(int pa);
void list(); // 输出读者信息
};
#endif
4、reader.cpp
#include <iomanip>
#include <cstring>
#include"reader.h"
char* Reader::getname(){
return name;}
int Reader::getpassword(){
return password;}
void Reader::setpassword(int pa){
password = pa;}
int Reader::getnote(){
return note;
}
int Reader::getnumber(){
return number;
}
void Reader::setname(char na[]){
strcpy(name,na);
}
void Reader::delbook(){
note = 1;}
void Reader::addreader(int n,char *na,int okpassword){
note = 0;
number = n;
password = okpassword;
strcpy(name,na);
for(int i =0;i<Maxbor;i++){
borbook[i]=0; }}|
void Reader::borrowbook(int bookid){
for(int i =0;i<Maxbor;i++){
if(borbook[i]==0){
borbook[i] = bookid;
return;
}
}
}
int Reader::retbook(int bookid){
for (int i=0;i<Maxbor;i++){
if(borbook[i]==bookid){
borbook[i] = 0;
return 1;
}
}
return 0;
}
void Reader::list(){
cout<<" "<<"读者编号:"<<number<<" "<<"姓名:"<<name<<" "<<"借书本的编号:[";
for(int i = 0;i<Maxbor;i++){
if(borbook[i]!=0)
cout<<borbook[i]<<" |";
}
cout<<"]"<<endl;
cout<<"----------------------------------------------------------------------------------------"<<endl;}
5、BDatabase.h 的代码
#ifndef __bdatabase_h__
#define __bdatabase_h__
#include<iostream>
#include"book.h"
using namespace std;
const int Maxb=100;
class BDatabase
{
private:
int top;
Book book[Maxb];
public:
BDatabase();
void clear();
int addbook(int n, char * na);
Book*query(int bookid);
void bookdata();
void list();
~BDatabase();
void Bmenu();
};
#endif
6、BDatabase.cpp的代码:
#include <fstream>
#include "bdatabase.h"
using namespace std;
BDatabase::BDatabase()
{
Book b;
top = -1;
fstream file("book.txt",ios::in);
while(1)
{
file.read((char *)&b,sizeof(b));
if(!file) break;
top++;
book[top] = b;
}
file.close();
}
void BDatabase::clear()
{
top =-1;
}
int BDatabase::addbook(int n,char *na)
{
Book * s = query(n);
if(s==NULL)
{
top++;
book[top].addbook(n,na);
return 1;
}
return 0;
}
Book * BDatabase::query(int bookid)
{
for(int i = 0;i<=top;i++)
if(book[i].getnumber()==bookid && book[i].getnote()==0){
return &book[i];
}
return NULL;
}
void BDatabase::list(){
for(int i = 0;i<=top;i++)
book[i].list();
}
BDatabase::~BDatabase()
{
fstream file("book.txt",ios::out);
for(int i=0;i<=top;i++)
if(book[i].getnote()==0)
file.write((char *)&book[i],sizeof(book[i]));
file.close();
}
void BDatabase::Bmenu(){
system("cls");
cout<<"###############################################################################################"<<endl;
cout<<"▓ * 欢迎进入图书管理界面 * ▓"<<endl;
cout<<"###############################################################################################"<<endl;
cout<<" ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl;
cout<<" |◆|******|◆| |◆|******|◆|"<<endl;
cout<<" |◆|******|◆| ☆ 退出界面 请按 0 |◆|******|◆|"<<endl;
cout<<" |◆|******|◆| ☆ 新增书本 请按 1 |◆|******|◆|"<<endl;
cout<<" |◆|******|◆| ☆ 更改信息 请按 2 |◆|******|◆|"<<endl;
cout<<" |◆|******|◆| ☆ 删除书本 请按 3 |◆|******|◆|"<<endl;
cout<<" |◆|******|◆| ☆ 查找信息 请按 4 |◆|******|◆|"<<endl;
cout<<" |◆|******|◆| ☆ 显示信息 请按 5 |◆|******|◆|"<<endl;
cout<<" |◆|******|◆| ☆ 删除所有 请按 6 |◆|******|◆|"<<endl;
cout<<" |◆|******|◆| |◆|******|◆|"<<endl;
cout<<" ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl;
cout<<"##############################################################################################"<<endl;
}
void BDatabase::bookdata(){
int choice=1,checknum = 0;
char bookname[20];
int bookid;
Book* b;
while(choice!=0){
Bmenu();
cin>>choice;
switch(choice)
{
case 1:
system("cls");
cout<<"############################################################################################"<<endl;
cout<<"▓ * 进入图书管理的添加书本界面 * ▓"<<endl;
cout<<"############################################################################################"<<endl;
cout<<" ☆ 输入书本编号:";
cin>>bookid;
cout<<" ☆ 输入书名:";
cin>>bookname;
addbook(bookid,bookname);
cout<<" 添加成功!"<<endl;
system("pause");
break;
case 2:
system("cls");
cout<<"############################################################################################"<<endl;
cout<<"▓ * 进入图书管理的修改信息界面 * ▓"<<endl;
cout<<"############################################################################################"<<endl;
cout<<" ☆输入书本编号:";
cin>>bookid;
b=query(bookid);
if(b==NULL){
cout<<" 该书本不存在!"<<endl;
system("pause");
break;
}
cout<<" 输入新的书名:";
cin>>bookname;
b->setname(bookname);
cout<<" 修改成功!";
system("pause");
break;
case 3:
system("cls");
cout<<"############################################################################################"<<endl;
cout<<"▓ * 进入图书管理的删除信息界面 * ▓"<<endl;
cout<<"############################################################################################"<<endl;
cout<<" ☆输入书本编号:";
cin>>bookid;
b=query(bookid);
if(b==NULL){
cout<<" 该书本不存在!"<<endl;
system("pause");
break;
}
b->delbook();
cout<<" 删除成功!"<<endl;
system("pause");
break;
case 4:
system("cls");
cout<<"############################################################################################"<<endl;
cout<<"▓ * 进入图书管理的查找信息界面 * ▓"<<endl;
cout<<"############################################################################################"<<endl;
cout<<" 输入书本编号:";
cin>>bookid;
b=query(bookid);
if(b==NULL){
cout<<" 该书本不存在!"<<endl;
system("pause");
break;
}
b->list();
system("pause");
break;
case 5:
system("cls");
cout<<"############################################################################################"<<endl;
cout<<"▓ * 进入图书管理的显示信息界面 * ▓"<<endl;
cout<<"############################################################################################"<<endl;
cout<<" 书本信息表如下:"<<endl;
cout<<"----------------------------------------------------------------------------------------"<<endl;
list();
system("pause");
break;
case 6:
system("cls");
cout<<"############################################################################################"<<endl;
cout<<"▓ * 进入图书管理的删除所有界面 * ▓"<<endl;
cout<<"############################################################################################"<<endl;
cout<<" 您确定要删除所有书本信息吗?(1是,0否)";
cout<<" ";
cin>>checknum;
if(checknum == 1){
system("cls");
clear();
cout<<" 书本信息已经全部删除!"<<endl;
}else
cout<<" 书本信息删除失败!"<<endl;
system("pause");
break; }}}
7、rdatabase.h的代码:
#ifndef __rdatabase_h__
#define __rdatabase_h__
#include <iostream>
#include "reader.h"
using namespace std;
const int Maxr = 100; // 100个读者
class RDatabase
{
private:
Reader read[Maxr]; // 读者数组
int top; // 读者记录指针
public:
RDatabase();
void clear(); // 删除所有的读者信息
int addreader(int n,char *na,int password); // 添加读者
Reader *query(int Readerid); // 查询读者编号
void list(); // 输出所有读者信息
void readerdata(); // 读者库的维护
void Rmenu();
~RDatabase(); // 析构函数 写数据文件
};
#endif
8、rdatabase.cpp的代码:
#include <fstream>
#include "rdatabase.h"
#include <string.h>
using namespace std;
// 构造器 读入数据文件
RDatabase::RDatabase()
{
Reader s;
top = -1;
fstream file("reader.txt",ios::in);
while(1)
{
file.read((char *)&s,sizeof(s));
if(!file) break;
top++;
read[top] = s;
}
file.close();
}
// 删除所有读者信息
void RDatabase::clear()
{
top =-1;
}
// 添加新读者
int RDatabase::addreader(int n,char *na,int password)
{
Reader * p = query(n);
if(p==NULL)
{
top++;
read[top].addreader(n,na,password);
return 1;
}
return 0;
}
// 查询是否有该读者
Reader * RDatabase::query(int readerid)
{
for(int i = 0;i<=top;i++)
if(read[i].getnumber()==readerid && read[i].getnote()==0){
return &read[i];
}
return NULL;
}
// 显示所有读者信息
void RDatabase::list(){
for(int i = 0;i<=top;i++)
read[i].list();
}
void RDatabase::Rmenu(){
cout<<"##############################################################################################"<<endl;
cout<<"▓ * 欢迎进入读者维护界面 * ▓"<<endl;
cout<<"##############################################################################################"<<endl;
cout<<" ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl;
cout<<" |◆|******|◆| |◆|******|◆|"<<endl;
cout<<" |◆|******|◆| ☆ 退出界面 请按 0 |◆|******|◆|"<<endl;
cout<<" |◆|******|◆| ☆ 新增读者 请按 1 |◆|******|◆|"<<endl;
cout<<" |◆|******|◆| ☆ 更改信息 请按 2 |◆|******|◆|"<<endl;
cout<<" |◆|******|◆| ☆ 账号注销 请按 3 |◆|******|◆|"<<endl;
cout<<" |◆|******|◆| ☆ 查找信息 请按 4 |◆|******|◆|"<<endl;
cout<<" |◆|******|◆| ☆ 显示信息 请按 5 |◆|******|◆|"<<endl;
cout<<" |◆|******|◆| ☆ 删除所有 请按 6 |◆|******|◆|"<<endl;
cout<<" |◆|******|◆| ☆ 忘记密码 请按 7 |◆|******|◆|"<<endl;
cout<<" |◆|******|◆| |◆|******|◆|"<<endl;
cout<<" ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl;
cout<<"##############################################################################################"<<endl;
cout<<"请输入您的选择:";
}
// 写文件 12456
RDatabase::~RDatabase()
{
fstream file("reader.txt",ios::out);
for(int i=0;i<=top;i++)
if(read[i].getnote()==0)
file.write((char *)&read[i],sizeof(read[i]));
file.close();
}
// 读者数据库的维护
void RDatabase::readerdata(){
int checknum = 0,password;
int choice=1;
char readername[20];
int readerid;
int ch=9;
Reader* r;
while(choice!=0){
system("cls");
Rmenu();
cin>>choice;
switch(choice)
{
case 1:
system("cls");
cout<<"############################################################################################"<<endl;
cout<<"▓ * 进入读者维护的新增读者界面 * ▓"<<endl;
cout<<"############################################################################################"<<endl;
cout<<" ☆ 输入读者编号:";
cin>>readerid;
cout<<" ☆ 输入读者姓名:";
cin>>readername;
cout<<" ☆ 输入密码:";
cin>>password;
addreader(readerid,readername,password);
cout<<" 添加成功!"<<endl;
system("pause");
break;
case 2:
system("cls");
cout<<"############################################################################################"<<endl;
cout<<"▓ * 进入读者维护的更改信息界面 * ▓"<<endl;
cout<<"############################################################################################"<<endl;
cout<<" ☆ 输入读者编号:";
cin>>readerid;
r=query(readerid);
if(r==NULL){
cout<<" 该读者不存在!"<<endl;
system("pause");
break;
}
cout<<" ☆ 返回上个界面 请按0"<<endl;
cout<<" ☆ 修改密码 请按1"<<endl;
cout<<" ☆ 修改名称 请按2"<<endl;
cout<<" ☆ 都修改 请按3"<<endl;
cout<<" ☆ 请输入您的选择:";
cin>>ch;
if(ch==0) break;
else if(ch == 1){
cout<<" 输入新的密码:";
cin>>password;
r->setpassword(password);
}
else if(ch==2){
cout<<" 输入新的名称:";
cin>>readername;
r->setname(readername);
}else{
cout<<" 输入新的名称:";
cin>>readername;
r->setname(readername);
cout<<" 输入新的密码:";
cin>>password;
r->setpassword(password);
}
cout<<" 修改成功!";
system("pause");
break;
case 3:
system("cls");
cout<<"############################################################################################"<<endl;
cout<<"▓ * 进入读者维护的注销账号界面 * ▓"<<endl;
cout<<"############################################################################################"<<endl;
cout<<" ☆ 输入读者编号:";
cin>>readerid;
r=query(readerid);
if(r==NULL){
cout<<" 该读者不存在!"<<endl;
system("pause");
break;
}
r->delbook();
cout<<" 注销成功!" <<endl;
system("pause");
break;
case 4:
system("cls");
cout<<"############################################################################################"<<endl;
cout<<"▓ * 进入读者维护的查找信息界面 * ▓"<<endl;
cout<<"############################################################################################"<<endl;
cout<<" ☆ 输入读者编号:";
cin>>readerid;
r=query(readerid);
if(r==NULL){
cout<<" 该读者不存在!"<<endl;
system("pause");
break;
}
r->list();
system("pause");
break;
case 5:
system("cls");
cout<<"############################################################################################"<<endl;
cout<<"▓ * 进入读者维护的信息显示界面 * ▓"<<endl;
cout<<"############################################################################################"<<endl;
cout<<" 读者信息表如下:"<<endl;
cout<<"----------------------------------------------------------------------------------------"<<endl;
list();
system("pause");
break;
case 6:
system("cls");
cout<<"################################################################################################"<<endl;
cout<<"▓ * 进入读者维护的删除所有信息界面 * ▓"<<endl;
cout<<"################################################################################################"<<endl;
cout<<" ☆ 您确定要删除所有读者信息吗?(1是,0否)";
cin>>checknum;
if(checknum == 1){
clear();
cout<<" 读者信息已经全部删除!"<<endl;
}else
cout<<" 读者信息删除失败!"<<endl;
system("pause");
break;
case 7:
system("cls");
cout<<"############################################################################################"<<endl;
cout<<"▓ * 进入读者维护的忘记密码界面 * ▓"<<endl;
cout<<"############################################################################################"<<endl;
cout<<" ☆ 输入读者编号:";
cin>>readerid;
r=query(readerid);
if(r==NULL){
cout<<" 该读者不存在!"<<endl;
system("pause");
break;
}
cout<<" ☆ 请输入账号名称:";
cin>>readername;
if(!strcmp(readername,r->getname())){
cout<<" ☆ 请输入新的密码:";
cin>>password;
r->setpassword(password);
cout<<" 密码修改成功!";
} else cout<<" 输入的名称与编号不匹配!";
system("pause");
break;
}
}}
9、Main.cpp中的代码:
#include<iostream>
#include"reader.h"
#include"rdatabase.h"
#include"book.h"
#include"bdatabase.h"
#include <ctime>
using namespace std;
int choice=1, bookid, readerid,password;
Reader *r;
RDatabase ReaderDB;
BDatabase BookDB;
Book *b;
time_t now = time(0);
char* dt = ctime(&now);
void menu(){
cout << "当前时间:" << dt << endl;
cout<<"##########################################################################################"<<endl;
cout<<"▓ * 欢迎进入小小图书馆 * ▓"<<endl;
cout<<"##########################################################################################"<<endl;
cout<<" ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl;
cout<<" |◆|******|◆| |◆|******|◆|"<<endl;
cout<<" |◆|******|◆| ☆ 退出 请按 0 |◆|******|◆|"<<endl;
cout<<" |◆|******|◆| ☆ 借书 请按 1 |◆|******|◆|"<<endl;
cout<<" |◆|******|◆| ☆ 还书 请按 2 |◆|******|◆|"<<endl;
cout<<" |◆|******|◆| ☆ 图书管理 请按 3 |◆|******|◆|"<<endl;
cout<<" |◆|******|◆| ☆ 读者维护 请按 4 |◆|******|◆|"<<endl;
cout<<" |◆|******|◆| |◆|******|◆|"<<endl;
cout<<" ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl;
cout<<"##########################################################################################"<<endl;
cout<<"请输入您的选择:";
}
void returnbook(){
system("cls");
cout << "当前时间:" << dt << endl;
cout<<"##########################################################################################"<<endl;
cout<<"▓ * 进入小小图书馆的借书界面 * ▓"<<endl;
cout<<"##########################################################################################"<<endl;
cout<<" ☆ 输入读者编号:";
cin>>readerid;
cout<<" ☆ 输入密码:";
cin>>password;
r=ReaderDB.query(readerid);
if(r==NULL){
cout<<" 不存在该读者,不能还书!"<<endl;
system("pause");
return;
}
if(password == r->getpassword()){
cout<<" ☆ 输入还书编号:";
cin>>bookid;
b=BookDB.query(bookid);
if(b==NULL){
cout<<" 不存在该图书,不能还书!"<<endl;
system("pause");
return;
}
b->retbook();
r->retbook(b->getnumber());
cout<<" 还书完成!"<<endl;}
else{
cout<<" 密码错误!";
system("pause");
return;
}
system("pause");
}
void BorrowBook(){
system("cls");
cout << "当前时间:" << dt << endl;
cout<<"##########################################################################################"<<endl;
cout<<"▓ * 进入小小图书馆的还书界面 * ▓"<<endl;
cout<<"##########################################################################################"<<endl;
cout<<" ☆ 输入借书读者编号:";
cin>>readerid;
cout<<" ☆ 输入图书编号:";
cin>>bookid;
r=ReaderDB.query(readerid);
if(r==NULL){
cout<<" 不存在该读者,不能借书!"<<endl;
system("pause");
return;}
cout<<" ☆ 输入密码:";
cin>>password;
if(password == r->getpassword()){
b=BookDB.query(bookid);
if(b==NULL){
cout<<" 不存在该图书,不能借书!"<<endl;
system("pause");
return; }
if(b->borrowbook()==0){
cout<<" 该图书已借出,不能借书!"<<endl;
system("pause");
return;}
r->borrowbook(b->getnumber());
cout<<" 借书完成!"<<endl;
system("pause"); }
else {
cout<<" 密码错误!";
system("pause");
return; }
}
int main(){
system("COLOR 0A");
while(choice!=0){
system("cls");
menu();
cin>>choice;
switch(choice)
{
case 1:
BorrowBook();
break;
case 2:
returnbook();
break;
case 3:
system("cls");
BookDB.bookdata();
break;
case 4:
system("cls");
ReaderDB.readerdata();
break;
}
}
}