迷你图书管理系统

迷你图书管理系统

1 功能描述

模拟一个图书馆的日常工作流程,包括:
  1. 新用户的注册,图书的注册(同样的书籍可以有多本);
  2. 借、还书功能;
    3) 查询特定用户(姓名关键字,用户ID)的借书情况,查询特定的再册书籍(书名关键字(支持非完整匹配));
    4) 查询所有用户及所有再册书籍;
    5) 查询某本书的所有借阅记录;
    6) 查询某书是否可借;
    7) 查询某用户的所有借阅记录;

以上为基本功能,必须实现。你可以额外实现你认为必要且合理的其他功能。

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<fstream>
#include<cstring>
#include<string>
#include<iomanip>
using namespace std;

const int MAXNUM = 50;

class Book
{
public:
	char no[20];//书号
	char book_name[20];//书名
	char writer_name[20];//作者
	int count;//数量
	friend ostream& operator <<(ostream& out,const Book& b)
	{
		cout<<setw(20)<<b.no;
		cout<<setw(20)<<b.book_name;
		cout<<setw(20)<<b.writer_name;
		cout<<setw(20)<<b.count<<endl;
		return out;
	}
};

class User
{
public:
	char id[20];//id
	char name[20];//姓名
	Book book[20];//已借图书
	int num;//数量
	friend ostream& operator <<(ostream& out,const User& u)
	{
		int j;
		cout<<setw(20)<<u.id;
		cout<<setw(20)<<u<<endl;
		if (u.num > 0)
		{
			cout<<setw(20)<<"书号";
			cout<<setw(20)<<"书名";
			cout<<setw(20)<<"作者"<<endl;
		}
		for (j = 0; j < u.num; j++)
		{
			cout<<setw(20)<<u.book[j].no;
			cout<<setw(20)<<u.book[j].book_name;
			cout<<setw(20)<<u.book[j].writer_name<<endl;
		}
		return out;
	}
};

class Rec
{
public:
	char id[20];//id
	char name[20];//姓名
	char no[20];//书号
	char book_name[20];//书名
	char writer_name[20];//作者
	char op[10];//借还是还
};

class Admin
{
private:
	string choice;
	User user[MAXNUM];
	int unum;
	Book book[MAXNUM];
	int bnum;
	Rec rec[MAXNUM];
	int rnum;
	void AddUser();
	void menu();
	void SaveUser();
	void LoadUser();
	void SelectBook();
	void AddBook();
	void SaveBook();
	void LoadBook();
	void SelectBookName();
	void BorrowBook();
	void SaveRec();
	void LoadRec();
	void PrintAllUserBook();
	void PrintUser();
	void PrintUser2();
	void BackBook();
	void PrintBookRec();
	void PrintUserRec();
public:
	void Run();
	Admin();
	~Admin();
};
Admin::~Admin()
{
	SaveUser();
	SaveBook();
	SaveRec();
}
Admin::Admin()
{
	unum = 0;
	bnum = 0;
	rnum = 0;
	LoadUser();
	LoadBook();
	LoadRec();
}

void Admin::PrintUserRec()
{
	int i, flag;
	string id;
	system("cls");
	cout << "请输入要查询的用户ID:";
	cin >> id;
	for (i = 0, flag = 0; i < rnum; i++)
	{
		if (id == rec[i].id)
		{
			if (flag == 0)
			{
				flag = 1;
				cout<<setw(10)<<"ID";
				cout<<setw(10)<<"姓名";
				cout<<setw(20)<<"书号";
				cout<<setw(20)<<"书名";
				cout<<setw(10)<<"作者";
				cout<<setw(10)<<"操作"<<endl;
			}
			cout<<setw(10)<<rec[i].id;
			cout<<setw(10)<<rec[i].name;
			cout<<setw(20)<<rec[i].no;
			cout<<setw(20)<<rec[i].book_name;
			cout<<setw(10)<<rec[i].writer_name;
			cout<<setw(10)<<rec[i].op<<endl;
		}
	}
	if (flag == 0)
		cout << "该用户无借阅记录" << endl;
	system("pause");
}

void Admin::PrintBookRec()
{
	int i,flag;
	string no;
	system("cls");
	cout << "请输入要查询的书号:";
	cin >> no;
	for (i = 0,flag=0; i < rnum; i++)
	{
		if (no == rec[i].no)
		{
			if (flag == 0)
			{
				flag = 1;
				cout<<setw(10)<<"ID";
				cout<<setw(10)<<"姓名";
				cout<<setw(20)<<"书号";
				cout<<setw(20)<<"书名";
				cout<<setw(10)<<"作者";
				cout<<setw(10)<<"操作"<<endl;
			}
			cout<<setw(10)<<rec[i].id;
			cout<<setw(10)<<rec[i].name;
			cout<<setw(20)<<rec[i].no;
			cout<<setw(20)<<rec[i].book_name;
			cout<<setw(10)<<rec[i].writer_name;
			cout<<setw(10)<<rec[i].op<<endl;
		}
	}
	if (flag == 0)
		cout << "该书籍无借阅记录" << endl;
	system("pause");
}

void Admin::BackBook()
{
	int i, flag, j,k;
	string id;
	string no;

	system("cls");
	cout << "请输入要还书的用户ID:";
	cin >> id;
	for (i = 0, flag = 0; i < unum; i++)
	{
		if (id == user[i].id)
		{
			flag = 1;
			break;
		}
	}
	if (flag == 0)
	{
		cout << "无该用户!" << endl;
		system("pause");
		return;
	}
	else
	{
		cout<<setw(20)<<"ID";
		cout<<setw(20)<<"姓名"<<endl;
		cout<<user[i];
	}
	if (user[i].num <= 0)
	{
		cout << "该用户未借书" << endl;
		system("pause");
		return;
	}
	cout << "请输入要还的书籍书号:";
	cin >> no;
	for (j = 0, flag = 0; j < user[i].num; j++)
	{
		if (no == user[i].book[j].no)
		{
			flag = 1;
			strcpy(rec[rnum].id, user[i].id);
			strcpy(rec[rnum].name, user[i].name);
			for (k = j; k < user[i].num; k++)
				user[i].book[k] = user[i].book[k + 1];
			user[i].num--;
			break;
		}
	}
	if (flag == 0)
	{
		cout << "无该书籍!" << endl;
		system("pause");
		return;
	}
	for (k = 0; k < bnum; k++)
	{
		if (no == book[k].no)
		{
			book[k].count++;
			strcpy(rec[rnum].book_name, book[j].book_name);
			strcpy(rec[rnum].no, book[j].no);
			strcpy(rec[rnum].writer_name, book[j].writer_name);
			strcpy(rec[rnum].op, "还书");
			rnum++;
			break;
		}
	}
	cout << "还书成功!" << endl;
	system("pause");
}

void Admin::PrintUser()
{
	int i, flag;
	string id;
	string no;

	system("cls");
	cout << "请输入要查询的用户ID:";
	cin >> id;
	for (i = 0, flag = 0; i < unum; i++)
	{
		if (id == user[i].id)
		{
			flag = 1;
			break;
		}
	}
	if (flag == 0)
	{
		cout << "无该用户!" << endl;
		system("pause");
		return;
	}
	cout<<setw(20)<<"ID";
	cout<<setw(20)<<"姓名"<<endl;
	cout<<user[i];
	system("pause");
}

void Admin::PrintUser2()
{
	int i, flag;
	string id;
	string no;

	system("cls");
	cout << "请输入要查询的用户姓名:";
	cin >> id;
	for (i = 0, flag = 0; i < unum; i++)
	{
		if (id == user[i].name)
		{
			flag = 1;
			cout<<setw(20)<<"ID";
			cout<<setw(20)<<"姓名"<<endl;
			cout<<user[i];
		}
	}
	if (flag == 0)
	{
		cout << "无该用户!" << endl;
		system("pause");
		return;
	}
	system("pause");
}

void Admin::PrintAllUserBook()
{
	int i;
	system("cls");
	if (unum > 0)
	{
		cout<<setw(20)<<"ID";
		cout<<setw(20)<<"姓名"<<endl;
	}
	for (i = 0; i < unum; i++)
	{
		cout<<setw(20)<<user[i].id;
		cout<<setw(20)<<user[i].name<<endl;
	}
	if (bnum > 0)
	{
		cout<<setw(20)<<"书号";
		cout<<setw(20)<<"书名";
		cout<<setw(20)<<"作者";
		cout<<setw(20)<<"数量"<<endl;
	}
	for (i = 0; i < bnum; i++)
	{
		cout<<setw(20)<<book[i].no;
		cout<<setw(20)<<book[i].book_name;
		cout<<setw(20)<<book[i].writer_name;
		cout<<setw(20)<<book[i].count<<endl;
	}
	system("pause");
}

void Admin::SaveRec()
{
	int i;
	ofstream fp("record.txt");
	for (i = 0; i < rnum; i++)
	{
		fp.write((char*)&rec[i], sizeof(Rec));
	}
	fp.close();
}

void Admin::LoadRec()
{
	int i;
	ifstream fp("record.txt");
	if (fp.is_open() == false)return;
	for (i = 0; !fp.eof(); i++)
	{
		fp.read((char*)&rec[i], sizeof(Rec));
	}
	fp.close();
	rnum = i-1;
}

void Admin::BorrowBook()
{
	int i, flag,j;
	string id;
	string no;

	system("cls");
	cout << "请输入要借书的用户ID:";
	cin >> id;
	for (i = 0, flag = 0; i < unum; i++)
	{
		if (id==user[i].id)
		{
			flag = 1;
			break;
		}
	}
	if (flag == 0)
	{
		cout << "无该用户!" << endl;
		system("pause");
		return;
	}
	cout << "请输入要借的书籍书号:";
	cin >> no;
	for (j = 0, flag = 0; j < unum; j++)
	{
		if (no == book[j].no)
		{
			flag = 1;
			break;
		}
	}
	if (flag == 0)
	{
		cout << "无该书籍!" << endl;
		system("pause");
		return;
	}
	if (book[j].count <= 0)
	{
		cout << "书籍余量不足,无法借阅!" << endl;
		system("pause");
		return;
	}
	user[i].book[user[i].num] = book[j];
	user[i].num++;
	book[j].count--;
	cout<<"借阅成功!"<<endl;
	strcpy(rec[rnum].book_name, book[j].book_name);
	strcpy(rec[rnum].no, book[j].no);
	strcpy(rec[rnum].writer_name, book[j].writer_name);
	strcpy(rec[rnum].id, user[i].id);
	strcpy(rec[rnum].name, user[i].name);
	strcpy(rec[rnum].op, "借书");
	rnum++;
	system("pause");
}

void Admin::SelectBook()
{
	int i,flag;
	string bookno;
	system("cls");
	cout << "请输入要查询的书籍书号:";
	cin >> bookno;
	for (i = 0,flag=0; i < bnum; i++)
	{
		if (book[i].no == bookno)
		{
			if (flag == 0)
			{
				flag = 1;
				cout<<setw(20)<<"书号";
				cout<<setw(20)<<"书名";
				cout<<setw(20)<<"作者";
				cout<<setw(20)<<"数量";
				cout<<setw(20)<<"是否可借"<<endl;
			}
			if(book[i].count>0)
			{
				cout<<setw(20)<<book[i].no;
				cout<<setw(20)<<book[i].book_name;
				cout<<setw(20)<<book[i].writer_name;
				cout<<setw(20)<<book[i].count;
				cout<<setw(20)<<"是"<<endl;
			}
			else
			{
				cout<<setw(20)<<book[i].no;
				cout<<setw(20)<<book[i].book_name;
				cout<<setw(20)<<book[i].writer_name;
				cout<<setw(20)<<book[i].count;
				cout<<setw(20)<<"否"<<endl;
			}
		}
	}
	if (flag == 0)
		cout << "无该书号信息!" << endl;
	system("pause");
}

void Admin::SelectBookName()
{
	int i, flag;
	char bookname[20];
	system("cls");
	cout << "请输入要查询的书籍名称:";
	cin >> bookname;
	for (i = 0, flag = 0; i < bnum; i++)
	{
		if (strstr(book[i].book_name,bookname)!=NULL)
		{
			if (flag == 0)
			{
				flag = 1;
				cout<<setw(20)<<"书号";
				cout<<setw(20)<<"书名";
				cout<<setw(20)<<"作者";
				cout<<setw(20)<<"数量"<<endl;
			}
			cout<<book[i];
		}
	}
	if (flag == 0)
		cout << "无该书名信息!" << endl;
	system("pause");
}

void Admin::SaveBook()
{
	int i;
	ofstream fp("book.txt");
	for (i = 0; i < bnum; i++)
	{
		fp.write((char*)&book[i], sizeof(Book));
	}
	fp.close();
}

void Admin::LoadBook()
{
	int i;
	ifstream fp("book.txt");
	if (fp.is_open() == false)return;
	for (i = 0; !fp.eof(); i++)
	{
		fp.read((char*)&book[i], sizeof(Book));
	}
	fp.close();
	bnum = i-1;
}


void Admin::AddBook()
{
	system("cls");
	cout << "请输入新增图书书号:";
	cin >> book[bnum].no;
	cout << "请输入新增图书书名:";
	cin >> book[bnum].book_name;
	cout << "请输入新增图书作者:";
	cin >> book[bnum].writer_name;
	cout << "请输入新增图书数量:";
	cin >> book[bnum].count;
	cout << "添加成功!" << endl;
	bnum++;
	system("pause");
}

void Admin::SaveUser()
{
	int i;
	ofstream fp("user.txt");
	for (i = 0; i < unum; i++)
	{
		fp.write((char*)&user[i], sizeof(User));
	}
	fp.close();
}

void Admin::LoadUser()
{
	int i;
	ifstream fp("user.txt");
	if (fp.is_open() == false)return;
	for (i = 0; !fp.eof(); i++)
	{
		fp.read((char*)&user[i], sizeof(User));
	}
	fp.close();
	unum = i-1;
}


void Admin::AddUser()
{
	system("cls");
	cout << "请输入新增用户ID:";
	cin >> user[unum].id;
	cout << "请输入新增用户姓名:";
	cin >> user[unum].name;
	user[unum].num = 0;
	cout << "注册成功!" << endl;
	unum++;
	system("pause");
}

void Admin::Run()
{
	do
	{
		menu();
		if (choice == "A" || choice == "a")
		{
			AddUser();
		}
		if (choice == "B" || choice == "b")
		{
			AddBook();
		}
		if (choice == "C" || choice == "c")
		{
			BorrowBook();
		}
		if (choice == "D" || choice == "d")
		{
			BackBook();
		}
		if (choice == "E" || choice == "e")
		{
			PrintUser();
		}
		if (choice == "F" || choice == "f")
		{
			SelectBookName();
		}
		if (choice == "G" || choice == "g")
		{
			PrintAllUserBook();
		}
		if (choice == "H" || choice == "h")
		{
			PrintBookRec();
		}
		if (choice == "I" || choice == "i")
		{
			SelectBook();
		}
		if (choice == "J" || choice == "j")
		{
			PrintUserRec();
		}
		if (choice == "K" || choice == "k")
		{
			PrintUser2();
		}
	} while (choice != "Q" && choice != "q");
}

void Admin::menu()
{
	system("cls");
	cout << "A:新增用户" << endl;
	cout << "B:新增图书" << endl;
	cout << "C:用户借书" << endl;
	cout << "D:用户还书" << endl;
	cout << "E:查询用户" << endl;
	cout << "F:查询书籍" << endl;
	cout << "G:显示所有用户及书籍" << endl;
	cout << "H:查询某书借阅记录" << endl;
	cout << "I:查询某书是否可借" << endl;
	cout << "J:查询用户借阅记录" << endl;
	cout << "K:按姓名查询用户" << endl;
	cout << "Q:退出" << endl;
	cout << "请输入选择:";
	cin >> choice;
}

int main()
{
	Admin* admin= new Admin;
	admin->Run();
	admin->~Admin();
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值