通过C加加实现一个图书馆查询系统,查询时有两类读者:学生读者、教师读者需要选择。每位读者信息包括卡号,姓名、单位、已借阅数量、已借阅记录。
时间: 2023-11-27 10:55:41 浏览: 153
好的,这个任务可以分为以下几个步骤来实现:
1. 设计数据结构,包括读者信息和图书信息的存储方式。
2. 实现读者选择功能,让用户选择学生或教师读者。
3. 实现查询功能,允许用户输入相关信息来查询图书信息。
4. 实现借阅功能,允许读者借阅图书并更新借阅记录。
下面我们来逐步实现这些步骤。
1. 数据结构设计
对于读者信息,我们可以定义一个结构体来存储:
```c++
struct Reader {
int cardNo; // 卡号
string name; // 姓名
string unit; // 单位
int borrowedNum; // 已借阅数量
vector<string> borrowedRecords; // 已借阅记录
};
```
对于图书信息,我们也可以定义一个结构体来存储:
```c++
struct Book {
string name; // 书名
string author; // 作者
string publisher; // 出版社
int totalNum; // 总数量
int borrowedNum; // 已借数量
};
```
我们可以使用一个数组来存储所有的读者信息和图书信息:
```c++
const int MAX_READER_NUM = 1000;
const int MAX_BOOK_NUM = 10000;
Reader readers[MAX_READER_NUM];
Book books[MAX_BOOK_NUM];
int readerNum = 0;
int bookNum = 0;
```
2. 读者选择功能
我们可以打印一个菜单,让用户选择学生或教师读者:
```c++
void showReaderTypeMenu() {
cout << "请选择读者类型:" << endl;
cout << "1. 学生读者" << endl;
cout << "2. 教师读者" << endl;
cout << "请输入选项编号:";
}
int getReaderType() {
int type;
showReaderTypeMenu();
cin >> type;
while (type != 1 && type != 2) {
cout << "无效选项,请重新输入:";
cin >> type;
}
return type;
}
```
3. 查询功能
我们可以让用户输入相关信息来查询图书信息。对于每本书,我们可以使用一个标志位来表示该书是否已被借出:
```c++
bool borrowed[MAX_BOOK_NUM] = {false};
```
然后,我们可以实现一个函数来根据书名、作者、出版社等信息来查询图书:
```c++
void searchBook() {
string keyword;
cout << "请输入要查询的关键字:";
cin >> keyword;
for (int i = 0; i < bookNum; i++) {
if (books[i].name.find(keyword) != string::npos ||
books[i].author.find(keyword) != string::npos ||
books[i].publisher.find(keyword) != string::npos) {
cout << "书名:" << books[i].name << endl;
cout << "作者:" << books[i].author << endl;
cout << "出版社:" << books[i].publisher << endl;
cout << "总数量:" << books[i].totalNum << endl;
cout << "已借数量:" << books[i].borrowedNum << endl;
if (!borrowed[i]) { // 未被借出
cout << "状态:未借出" << endl;
} else {
cout << "状态:已借出" << endl;
}
cout << endl;
}
}
}
```
4. 借阅功能
我们可以实现一个函数来让读者借阅图书。首先,我们需要找到该读者的信息:
```c++
Reader* findReader(int cardNo) {
for (int i = 0; i < readerNum; i++) {
if (readers[i].cardNo == cardNo) {
return &readers[i];
}
}
return nullptr;
}
```
然后,我们可以让用户输入要借阅的书名和作者,找到对应的图书:
```c++
Book* findBook(string name, string author) {
for (int i = 0; i < bookNum; i++) {
if (books[i].name == name && books[i].author == author) {
return &books[i];
}
}
return nullptr;
}
Book* chooseBook() {
string name, author;
cout << "请输入要借阅的书名:";
cin >> name;
cout << "请输入作者名称:";
cin >> author;
Book* book = findBook(name, author);
if (book == nullptr) {
cout << "未找到该图书,请重新输入!" << endl;
return nullptr;
}
if (book->borrowedNum >= book->totalNum) {
cout << "该图书已全部借出!" << endl;
return nullptr;
}
return book;
}
```
最后,我们可以实现借阅函数,让读者借阅图书并更新借阅记录:
```c++
void borrowBook(int cardNo) {
Reader* reader = findReader(cardNo);
if (reader == nullptr) {
cout << "未找到该读者,请重新输入!" << endl;
return;
}
Book* book = chooseBook();
if (book == nullptr) {
return;
}
book->borrowedNum++;
borrowed[book - books] = true;
reader->borrowedNum++;
reader->borrowedRecords.push_back(book->name);
cout << "借阅成功!" << endl;
}
```
完整代码如下:
阅读全文