C++ library management system

1. Experiment name
Library management system
2. Purpose of the experiment
Design and develop a small library management system simulation program using C++ language, with the following functions: exit the system, add books, delete books, borrow books, return books, display book information, Query functions such as books. In the experiment, you should master the inheritance structure, and master the use of objects, classes, and linked lists, as well as the definition and call of member functions and constructors, and master the skills and skills of using experimental equipment and program debugging methods.
3. Experiment platform
Operating environment: VC++6.0
4. Problem analysis
The library management system simulation program can be divided into 7 modules: exit module, add books module, delete books module, borrow books module, return books module, display book information module, query book module. There are more or less connections between each module, for example: the module of borrowing books, the module of displaying book information, and the module of querying books need to be carried out after adding the module of books. Understanding the main relationship between each module is beneficial to the design and completion of the program, making the hierarchical structure of the program clear and convenient for program writing, reading and debugging. The following is the project structure diagram of this experiment:
insert image description here
This experiment defines three classes: Item class, Person class, and Library class.
There are public functions in the Item class: name, item_type, bool Register (the output value of the bool function is only true and force, Used to determine whether to register).

Public functions in the Person class: Name (), Adress (), Regist_items.

The public functions in the Library class: addBook() adds books to the library, deleteBook() deletes useless books, browBook() borrows books, before judging whether the book exists, returnBook() returns the book, getReader() queries the number of the book Who borrowed, indexOfNum(string num) Obtain the subscript of the book in the array according to the number;
private function: vector books all books, map<string, int> readers store readers and the number of books they borrowed, currentNum number of books in stock, browNum The number of books borrowed.

Appendix:
Program source code:

#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<iomanip>
#include <list>
using namespace std;


class item
{
    
    
	public:
	string name;
	string item_type;

	bool Register;


};

//杂志类
class magazine :public item
{
    
    
	string Type;
	string Writer;
};
//MusicCd类
class MusicCd :public item
{
    
    
	string Singer;
};
//电影类
class Movie :public item
{
    
    
	string Type;
	string Director;
	string Actor;
};

//书籍类
class Book : public item
{
    
    
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;   //借书日期
};
//DVD电影类
class DVD :public Movie
{
    
    

};
//蓝光电影类
class Blue_ligh :public Movie
{
    
    

};

//用户
class Person
{
    
    
public:
	string Name;
	string Adress;
	list<item> Regist_items;
};



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 << "书籍名称:" << 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;
	}
	else {
    
    
		cout << "书籍未被借出。                                                    \n";
	}
}
class Library
{
    
    
public:
	//书籍库
	list<item> itemList;
	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;
	}
	void showInfo();
	int getTotalBooks() {
    
     return currentNum + brrowNum; }
private:
	vector<Book> books;//所有书籍
	map<string, int> readers;  //存储读者及其所借的书籍数目 
	int currentNum;   //库存书籍数目(不包括借出的)
	int brrowNum;     //借出书籍数目
};
void Library::showInfo()
{
    
    
	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\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继续增加,返回上一层输入2:";
			cin >> temp;
		}
		else {
    
    
			cout << "已存在该编号的书籍,添加失败。" << endl;
			cout << "输入1继续重新增加,返回上一层输入2:";
			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\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继续继续删除,返回上一层输入2:";
				cin >> temp;
			}
			else {
    
    
				cout << "删除失败!书籍已经被借出。" << endl;
				cout << "输入1继续继续删除,返回上一层输入2:";
				cin >> temp;
			}
		}
		else
		{
    
    
			cout << "删除失败。未找到编号为" << num << "的书籍。\n";
			cout << "输入1继续继续删除,返回上一层输入2:";
			cin >> temp;
		}
	} while (temp == 1);
	system("pause");
	system("cls");
}
void Library::brrowBook()
{
    
    
	string num;
	int index;
	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\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\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 menu()
{
    
    
	int temp;
	
	while (1)
	{
    
    
		cout << "___________________________ 图书馆管理系统____________________________\n";
	    cout << "                  ┏━━━━━━━━━━━━━┓                      \n";
		cout << "                  ┃ [0]退出系统。            ┃                      \n";
		cout << "                  ┃ [1]增加图书。            ┃                      \n";
		cout << "                  ┃ [2]删除图书。            ┃                      \n";
		cout << "                  ┃ [3]借阅图书。            ┃                      \n";
		cout << "                  ┃ [4]归还图书。            ┃                      \n";
		cout << "                  ┃ [5]显示图书信息。        ┃                      \n";
		cout << "                  ┃ [6]查询图书。            ┃                      \n";
		cout << "                  ┗━━━━━━━━━━━━━┛                      \n";
		cout << "输入要进行的操作:";
		cin >> temp;
		switch (temp) {
    
    
		case 1:
			system("cls");
			l.addBook(); 
			break;
		case 2:system("cls");
			l.deleteBook(); 
			break;
		case 3:system("cls");
			l.brrowBook(); 
			break;
		case 4:system("cls");
			l.returnBook(); 
			break;
		case 5:system("cls");
			l.showInfo();
			break;
		case 6:system("cls");
			l.getReader();
			break;
		case 0:
			
			exit(1);
			break;
		default:
			cout << "输入错误!" << endl;
			system("pause");
			system("cls");
		}
	}
}
int main()
{
    
    
	menu();
	return 0;
}

Guess you like

Origin blog.csdn.net/qq_45742383/article/details/113726474