#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<fstream>
#include<windows.h>
#include<iomanip>
using namespace std;
class Book
{
public:
Book(){ borrow_flag = false; } //无参构造函数
Book(string name, string num, string auther)
:name(name), num(num), auther(auther){
borrow_flag = false;
} //有参构造函数
void setReader(string reader, int lcn, string data); //设置读者
void setInfo(string name, string num, string auther); //设置书籍信息
string getName(){
return name;
}
string getNum(){ return num; }
string getAuther(){
return auther;
}
bool getBorrow_flag(){
return borrow_flag;
}
string getReader(){
return reader;
}
int getLcn(){
return lcn;
}
string getData(){
return data;
}
bool isBorrow(){ return borrow_flag; } //判断书籍是否借出
void setBorrow_flag(bool b){ borrow_flag = b; }
void showInfo(); //显示数据信息
private:
string name; //书名
string num; //编号(唯一标示)
string auther; //作者
bool borrow_flag;
string reader; //读者
int lcn; //借书证号
string data; //借书日期
};
void Book::setReader(string reader, int lcn, string data)
{
borrow_flag = true;
this->reader.assign(reader);
this->lcn = lcn;
this->data.assign(data);
}
void Book::setInfo(string name, string num, string auther)
{
this->name.assign(name);
this->num.assign(num);
this->auther.assign(auther);
}
void Book::showInfo()
{
cout<< "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓" << endl;
cout<< "┃书籍名称:" << setiosflags(ios_base::left)<<setw(56)<<name <<"┃"<< endl
<< "┃书籍编号:" << setw(56) << num << "┃" << endl
<< "┃书籍作者:" << setw(56) << auther << "┃" << endl;
if (borrow_flag)
{
cout <<"┃书籍被借出。 ┃\n"
<< "┃读者姓名:" << setw(56) << reader << "┃" << endl
<< "┃借书证号:" << setw(56) << lcn << "┃" << endl
<< "┃借书日期:" << setw(56) << data << "┃" << endl
<< "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n";
}
else{
cout << "┃书籍未被借出。 ┃\n";
cout << "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n";
}
}
class Library
{
public:
Library(){ currentNum = 0; brrowNum = 0; }
void addBook(); //向图书馆里加书籍
void addBook(string name, string num, string auther);
void deleteBook(); //删除无用书籍
void brrowBook(); //借书,之前先判断书籍是否存在
void returnBook(); //还书
void getReader(); //查询某编号的书是谁借了
int indexOfNum(string num); //根据编号得到书在数组中的下标
vector<Book> getBooks(){
return books;
}
friend void read();
void showInfo();
int getTotalBooks(){ return currentNum + brrowNum; }
private:
vector<Book> books;//所有书籍
map<string, int> readers; //存储读者及其所借的书籍数目
int currentNum; //库存书籍数目(不包括借出的)
int brrowNum; //借出书籍数目
};
void Library::showInfo()
{
cout << " ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n";
cout << " ┃***************************所有图书信息***************************┃\n";
cout << " ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n";
for (int i = 0; i<books.size(); i++)
{
cout << "第"<<i+1<<"本书籍的信息。" << endl;
books[i].showInfo();
}
system("pause");
system("cls");
}
int Library::indexOfNum(string num)
{
int i;
for (i = 0; i<books.size(); i++)
{
if (books[i].getNum() == num)
return i;
}
return -1;
}
void Library::addBook()
{
Book b;
int temp;
string name, num, auther;
cout<<" ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n";
cout<<" ┃*****************************增加界面*****************************┃\n";
cout<<" ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n";
do{
cout << "输入书籍名称,编号,作者:";
cin >> name >> num >> auther;
b.setInfo(name, num, auther);
if (indexOfNum(num) == -1){
books.push_back(b);
currentNum++;
cout << "\n添加成功。" << endl;
cout << "输入1继续增加:";
cin >> temp;
}
else{
cout << "已存在该编号的书籍,添加失败。" << endl;
cout << "输入1继续重新增加:";
cin >> temp;
}
} while (temp==1);
system("pause");
system("cls");
}
void Library::addBook(string name, string num, string auther)
{
Book b;
b.setInfo(name, num, auther);
books.push_back(b);
}
void Library::deleteBook()
{
int index,temp;
string num;
cout << " ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n";
cout << " ┃*****************************删除界面*****************************┃\n";
cout << " ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n";
do{
cout << "输入要删除的书籍的编号:";
cin >> num;
index = indexOfNum(num);
if (index != -1){
if (!books[index].getBorrow_flag()){
cout << "删除的书籍的信息:\n";
books[index].showInfo();
books.erase(books.begin() + index);
currentNum--;
cout << "删除成功。" << endl;
cout << "输入1继续继续删除:";
cin >> temp;
}
else{
cout << "删除失败!书籍已经被借出。" << endl;
cout << "输入1继续继续删除:";
cin >> temp;
}
}
else
{
cout << "删除失败。未找到编号为" << num << "的书籍。\n";
cout << "输入1继续继续删除:";
cin >> temp;
}
} while (temp==1);
system("pause");
system("cls");
}
void Library::brrowBook()
{
string num;
int index;
cout << " ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n";
cout << " ┃*****************************借阅界面*****************************┃\n";
cout << " ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n";
cout << "输入要借阅的书籍的编号:";
cin >> num;
index = indexOfNum(num);
if (index != -1){
if (books[index].isBorrow()){
cout << "借阅失败,书籍以及被借出。\n";
system("pause");
system("cls");
}
else
{
cout << "要借的书籍的信息:\n";
books[index].showInfo();
string reader, data;
int lcn;
cout << "输入读者姓名,借书证号,借书日期:";
cin >> reader >> lcn >> data;
if (readers[reader] != 2){
books[index].setReader(reader, lcn, data);
cout << "借书完成。\n";
currentNum--;
brrowNum++;
readers[reader]++;
system("pause");
system("cls");
}
else
{
cout << "借书失败,该读者以借超过两本书籍。\n";
system("pause");
system("cls");
}
}
}
else
{
cout << "借书失败。未找到编号为" << num << "的书籍.\n";
system("pause");
system("cls");
}
}
void Library::returnBook()
{
string num;
cout << " ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n";
cout << " ┃*****************************还书界面*****************************┃\n";
cout << " ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n";
cout << "输入要还的书籍的编号:";
cin >> num;
int index;
index = indexOfNum(num);
if (index != -1)
{
cout << "要还的书籍的信息为:\n";
books[index].showInfo();
books[index].setBorrow_flag(false);
readers[books[index].getReader()]--;
cout << "还书成功。\n";
system("pause");
system("cls");
}
else
{
cout << "还书失败,请检查书籍编号是否输入错误!\n";
system("pause");
system("cls");
}
}
void Library::getReader()
{
string num;
cout << " ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n";
cout << " ┃*****************************查询界面*****************************┃\n";
cout << " ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n\n";
cout << "输入要查找的书籍编号:";
cin >> num;
int index;
index = indexOfNum(num);
if (index != -1)
{
if (books[index].getBorrow_flag())
cout << "读者为:" << books[index].getReader() << endl;
else{
cout << "无读者。" << endl;
}
system("pause");
system("cls");
}
else
{
cout << "查询失败,请检查书籍编号是否输入错误!\n";
system("pause");
system("cls");
}
}
Library l;
void read()
{
int i, temp;
ifstream my1("num.txt");
my1 >> temp;
ifstream my("book.txt");
for (i = 0; i<temp; i++)
{
string name, num, auther, reader, data;
int lcn;
bool borrow_flag;
my >> name >> num >> auther >> borrow_flag;
l.addBook(name, num, auther);
if (borrow_flag)
{
my >> reader >> lcn >> data;
l.books[i].setReader(reader, lcn, data);
}
}
}
void save()
{
ofstream my("book.txt");
int i;
for (i = 0; i<l.getBooks().size(); i++){
Book b;
b = l.getBooks()[i];
if (b.getBorrow_flag())
my << b.getName() << "\t" << b.getNum() << "\t" << b.getAuther() << "\t" << b.getBorrow_flag()
<< "\t" << b.getReader() << "\t" << b.getLcn() << "\t" << b.getData() << "\n";
else
my << b.getName() << "\t" << b.getNum() << "\t" << b.getAuther() << "\t" << b.getBorrow_flag() << "\n";
}
ofstream my1("num.txt");
my1 << l.getBooks().size();
}
void menu()
{
int temp;
cout << "■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n";
cout << "■ ■\n";
cout << "■ ■\n";
cout << "■ ┏━━━━━━━━━━━━━━━━━━━━━━━┓ ■\n";
cout << "■ ┃ ┃ ■\n";
cout << "■ ┃ 制作者:马文龙 ┃ ■\n";
cout << "■ ┃ ┃ ■\n";
cout << "■ ┃ 制作日期:2015.06 ┃ ■\n";
cout << "■ ┃ ┃ ■\n";
cout << "■ ┃ 学校:江南大学 ┃ ■\n";
cout << "■ ┃ ┃ ■\n";
cout << "■ ┃ 班级:计科1402 ┃ ■\n";
cout << "■ ┃ ┃ ■\n";
cout << "■ ┃ 版本:图书馆管理系统3.0 ┃ ■\n";
cout << "■ ┃ ┃ ■\n";
cout << "■ ┃ Weclome to use it! ┃ ■\n";
cout << "■ ┃ ┃ ■\n";
cout << "■ ┃ All Ringhts Reserved! ┃ ■\n";
cout << "■ ┃ ┃ ■\n";
cout << "■ ┗━━━━━━━━━━━━━━━━━━━━━━━┛ ■\n";
cout << "■ ■\n";
cout << "■ ■\n";
cout << "■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n";
// system("pause");
Sleep(2000);
system("cls");
while (1)
{
cout << "■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n";
cout << "■___________________________ 图书馆管理系统______________________________■\n";
cout << "■ ┏━━━━━━━━━━━━━━┓ ■\n";
cout << "■ ┃ ●[0]退出系统。 ┃ ■\n";
cout << "■ ┣━━━━━━━━━━━━━━┫ ■\n";
cout << "■ ┃ ●[1]增加图书。 ┃ ■\n";
cout << "■ ┣━━━━━━━━━━━━━━┫ ■\n";
cout << "■ ┃ ●[2]删除图书。 ┃ ■\n";
cout << "■ ┣━━━━━━━━━━━━━━┫ ■\n";
cout << "■ ┃ ●[3]借阅图书。 ┃ ■\n";
cout << "■ ┣━━━━━━━━━━━━━━┫ ■\n";
cout << "■ ┃ ●[4]归还图书。 ┃ ■\n";
cout << "■ ┣━━━━━━━━━━━━━━┫ ■\n";
cout << "■ ┃ ●[5]显示图书信息。 ┃ ■\n";
cout << "■ ┣━━━━━━━━━━━━━━┫ ■\n";
cout << "■ ┃ ●[6]查询图书。 ┃ ■\n";
cout << "■ ┗━━━━━━━━━━━━━━┛ ■\n";
cout << "■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n";
cout << "输入要进行的操作:" ;
cin >> temp;
switch (temp){
case 1:
system("cls");
l.addBook(); save();
break;
case 2:system("cls");
l.deleteBook(); save();
break;
case 3:system("cls");
l.brrowBook(); save();
break;
case 4:system("cls");
l.returnBook(); save();
break;
case 5:system("cls");
l.showInfo();
break;
case 6:system("cls");
l.getReader();
break;
case 0:
save();
exit(1);
break;
default:
cout << "输入错误!" << endl;
system("pause");
system("cls");
}
}
}
int main()
{
read();
system("color b0");
menu();
return 0;
}
图书馆管理系统(C++课程设计)
最新推荐文章于 2024-08-18 22:37:30 发布