c++实现图书馆管理系统
时间: 2023-07-30 20:07:05 浏览: 57
好的,图书馆管理系统是一个比较典型的管理系统,可以用C++来实现,以下是一个简单的实现方案,供参考:
1. 确定需要的数据结构和功能模块,如图书、借阅信息、读者等,可以使用类或结构体来表示。
2. 设计主界面,包括菜单、输入输出等功能。
3. 实现各个功能模块的具体操作,如添加图书、查询图书、借阅图书等。
4. 在输入输出时进行输入检查,防止输入错误或非法数据。
5. 实现数据的存储和读取,可以使用文件来保存数据,也可以使用数据库等方式。
6. 进行测试和调试,确保系统的稳定性和正确性。
以下是一个简单的代码示例,仅供参考:
```c++
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
using namespace std;
// 图书类
class Book {
public:
string name; // 书名
string author; // 作者
string publisher; // 出版社
string ISBN; // ISBN编号
int totalNum; // 总数量
int availableNum; // 可借数量
// 构造函数
Book(string n, string a, string p, string i, int t, int av) {
name = n;
author = a;
publisher = p;
ISBN = i;
totalNum = t;
availableNum = av;
}
// 显示图书信息
void display() {
cout << "书名:" << name << endl;
cout << "作者:" << author << endl;
cout << "出版社:" << publisher << endl;
cout << "ISBN编号:" << ISBN << endl;
cout << "总数量:" << totalNum << endl;
cout << "可借数量:" << availableNum << endl;
}
};
// 借阅信息类
class BorrowInfo {
public:
string readerName; // 读者姓名
string bookName; // 书名
string borrowDate; // 借阅日期
string dueDate; // 到期日期
bool returned; // 是否已归还
// 构造函数
BorrowInfo(string r, string b, string bd, string dd, bool rt) {
readerName = r;
bookName = b;
borrowDate = bd;
dueDate = dd;
returned = rt;
}
// 显示借阅信息
void display() {
cout << "读者姓名:" << readerName << endl;
cout << "书名:" << bookName << endl;
cout << "借阅日期:" << borrowDate << endl;
cout << "到期日期:" << dueDate << endl;
cout << "是否已归还:" << (returned ? "是" : "否") << endl;
}
};
// 读者类
class Reader {
public:
string name; // 姓名
string ID; // 学号或工号
string type; // 类型(学生或教师)
vector<BorrowInfo> borrowInfo; // 借阅信息
// 构造函数
Reader(string n, string i, string t) {
name = n;
ID = i;
type = t;
}
// 显示读者信息
void display() {
cout << "姓名:" << name << endl;
cout << "学号或工号:" << ID << endl;
cout << "类型:" << type << endl;
cout << "借阅信息:" << endl;
for (int i = 0; i < borrowInfo.size(); i++) {
borrowInfo[i].display();
}
}
};
// 图书馆类
class Library {
public:
vector<Book> books; // 图书信息
vector<Reader> readers; // 读者信息
// 添加图书
void addBook() {
string name, author, publisher, ISBN;
int totalNum, availableNum;
cout << "请输入书名:" << endl;
cin >> name;
cout << "请输入作者:" << endl;
cin >> author;
cout << "请输入出版社:" << endl;
cin >> publisher;
cout << "请输入ISBN编号:" << endl;
cin >> ISBN;
cout << "请输入总数量:" << endl;
cin >> totalNum;
cout << "请输入可借数量:" << endl;
cin >> availableNum;
Book book(name, author, publisher, ISBN, totalNum, availableNum);
books.push_back(book);
cout << "添加成功!" << endl;
}
// 查询图书
void queryBook() {
string name;
cout << "请输入要查询的书名:" << endl;
cin >> name;
bool found = false;
for (int i = 0; i < books.size(); i++) {
if (books[i].name == name) {
books[i].display();
found = true;
break;
}
}
if (!found) {
cout << "没有找到该书!" << endl;
}
}
// 借阅图书
void borrowBook() {
string readerName, bookName;
cout << "请输入读者姓名:" << endl;
cin >> readerName;
cout << "请输入书名:" << endl;
cin >> bookName;
Book* book = NULL;
for (int i = 0; i < books.size(); i++) {
if (books[i].name == bookName) {
book = &books[i];
break;
}
}
if (book == NULL) {
cout << "没有找到该书!" << endl;
return;
}
if (book->availableNum <= 0) {
cout << "该书已全部借出!" << endl;
return;
}
string borrowDate, dueDate;
cout << "请输入借阅日期(格式:YYYY-MM-DD):" << endl;
cin >> borrowDate;
cout << "请输入到期日期(格式:YYYY-MM-DD):" << endl;
cin >> dueDate;
book->availableNum--;
BorrowInfo borrowInfo(readerName, bookName, borrowDate, dueDate, false);
for (int i = 0; i < readers.size(); i++) {
if (readers[i].name == readerName) {
readers[i].borrowInfo.push_back(borrowInfo);
break;
}
}
cout << "借阅成功!" << endl;
}
// 归还图书
void returnBook() {
string readerName, bookName;
cout << "请输入读者姓名:" << endl;
cin >> readerName;
cout << "请输入书名:" << endl;
cin >> bookName;
Book* book = NULL;
BorrowInfo* borrowInfo = NULL;
for (int i = 0; i < books.size(); i++) {
if (books[i].name == bookName) {
book = &books[i];
break;
}
}
if (book == NULL) {
cout << "没有找到该书!" << endl;
return;
}
bool found = false;
for (int i = 0; i < readers.size(); i++) {
if (readers[i].name == readerName) {
for (int j = 0; j < readers[i].borrowInfo.size(); j++) {
if (readers[i].borrowInfo[j].bookName == bookName && !readers[i].borrowInfo[j].returned) {
borrowInfo = &readers[i].borrowInfo[j];
found = true;
break;
}
}
if (found) {
break;
}
}
}
if (borrowInfo == NULL) {
cout << "没有找到该借阅记录!" << endl;
return;
}
string returnDate;
cout << "请输入归还日期(格式:YYYY-MM-DD):" << endl;
cin >> returnDate;
borrowInfo->returned = true;
book->availableNum++;
cout << "归还成功!" << endl;
}
// 添加读者
void addReader() {
string name, ID, type;
cout << "请输入姓名:" << endl;
cin >> name;
cout << "请输入学号或工号:" << endl;
cin >> ID;
cout << "请输入类型(学生或教师):" << endl;
cin >> type;
Reader reader(name, ID, type);
readers.push_back(reader);
cout << "添加成功!" << endl;
}
// 查询读者
void queryReader() {
string name;
cout << "请输入要查询的读者姓名:" << endl;
cin >> name;
bool found = false;
for (int i = 0; i < readers.size(); i++) {
if (readers[i].name == name) {
readers[i].display();
found = true;
break;
}
}
if (!found) {
cout << "没有找到该读者!" << endl;
}
}
// 保存数据
void saveData() {
ofstream out("data.txt");
out << "图书信息:" << endl;
for (int i = 0; i < books.size(); i++) {
out << books[i].name << " " << books[i].author << " " << books[i].publisher << " " << books[i].ISBN << " " << books[i].totalNum << " " << books[i].availableNum << endl;
}
out << "读者信息:" << endl;
for (int i = 0; i < readers.size(); i++) {
out << readers[i].name << " " << readers[i].ID << " " << readers[i].type << endl;
out << readers[i].borrowInfo.size() << endl;
for (int j = 0; j < readers[i].borrowInfo.size(); j++) {
out << readers[i].borrowInfo[j].readerName << " " << readers[i].borrowInfo[j].bookName << " " << readers[i].borrowInfo[j].borrowDate << " " << readers[i].borrowInfo[j].dueDate << " " << readers[i].borrowInfo[j].returned << endl;
}
}
out.close();
}
// 读取数据
void loadData() {
ifstream in("data.txt");
string line;
while (getline(in, line)) {
if (line == "图书信息:") {
while (getline(in, line) && line != "读者信息:") {
string name, author, publisher, ISBN;
int totalNum, availableNum;
stringstream ss(line);
ss >> name >> author >> publisher >> ISBN >> totalNum >> availableNum;
Book book(name, author, publisher, ISBN, totalNum, availableNum);
books.push_back(book);
}
}
else if (line == "读者信息:") {
while (getline(in, line)) {
string name, ID, type;
stringstream ss(line);
ss >> name >> ID >> type;
Reader reader(name, ID, type);
int num;
getline(in, line);
stringstream ss2(line);
ss2 >> num;
for (int i = 0; i < num; i++) {
string readerName, bookName, borrowDate, dueDate;
bool returned;
getline(in, line);
stringstream ss3(line);
ss3 >> readerName >> bookName >> borrowDate >> dueDate >> returned;
BorrowInfo borrowInfo(readerName, bookName, borrowDate, dueDate, returned);
reader.borrowInfo.push_back(borrowInfo);
}
readers.push_back(reader);
}
}
}
in.close();
}
};
// 主函数
int main() {
Library library;
library.loadData();
while (true) {
cout << "********************************" << endl;
cout << "欢迎使用图书馆管理系统!" << endl;
cout << "1. 添加图书" << endl;
cout << "2. 查询图书" << endl;
cout << "3. 借阅图书" << endl;
cout << "4. 归还图书" << endl;
cout << "5. 添加读者" << endl;
cout << "6. 查询读者" << endl;
cout << "7. 退出系统" << endl;
cout << "********************************" << endl;
int choice;
cin >> choice;
switch (choice) {
case 1:
library.addBook();
break;
case 2:
library.queryBook();
break;
case 3:
library.borrowBook();
break;
case 4:
library.returnBook();
break;
case 5:
library.addReader();
break;
case 6:
library.queryReader();
break;
case 7:
library.saveData();
cout << "感谢使用图书馆管理系统!" << endl;
return 0;
default:
cout << "请输入正确的选项!" << endl;
break;
}
}
return 0;
}
```