c++面向对象程序设计:设计一个小型的图书借阅管理系统,其中涉及到两个主体:学生和图书。学生需要借阅图书。图书对象都具有相同的属性:图书条形码、图书名称、图书被借次数、是否在架;并具有相同的操作:初始化属性值、修改属性值、显示属性值。对所有图书对象抽象成一个图书类。所有的学生具有相同的属性:学号、姓名、性别、借阅册数限制、在借册数;并具有相同的操作:初始化属性值、修改属性值、显示属性值。对所有学生对象抽象成一个学生类。 学生需要借阅图书,其涉及的属性有:读者编号(即学号)、图书条形码、借出时间、归还时间;其涉及的操作有:借书、还书。假定所有图书只有1本,一旦借出,该图书就不在架,只有等到还书之后才在架,允许再借;给出相应代码并用main函数进行测试。
时间: 2023-07-10 10:43:19 浏览: 105
下面是一个简单的图书借阅管理系统的C++代码,包括了图书类和学生类的定义以及其相应的方法实现,以及借书和还书的操作:
```cpp
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Book {
public:
Book(string barcode, string name) : m_barcode(barcode), m_name(name), m_borrowedTimes(0), m_onShelf(true) {}
void display() const {
cout << "Barcode: " << m_barcode << "\tName: " << m_name << "\tBorrowed times: " << m_borrowedTimes << "\tOn shelf: " << (m_onShelf ? "yes" : "no") << endl;
}
void borrow() {
m_borrowedTimes++;
m_onShelf = false;
}
void returnBook() {
m_onShelf = true;
}
string getBarcode() const {
return m_barcode;
}
private:
string m_barcode;
string m_name;
int m_borrowedTimes;
bool m_onShelf;
};
class Student {
public:
Student(string id, string name, string gender) : m_id(id), m_name(name), m_gender(gender), m_maxBorrow(5), m_borrowedCount(0) {}
void display() const {
cout << "Student ID: " << m_id << "\tName: " << m_name << "\tGender: " << m_gender << "\tMax borrow: " << m_maxBorrow << "\tBorrowed count: " << m_borrowedCount << endl;
}
bool canBorrow() const {
return m_borrowedCount < m_maxBorrow;
}
void borrowBook(Book& book) {
if (canBorrow()) {
book.borrow();
m_borrowedBooks.push_back(book.getBarcode());
m_borrowedCount++;
cout << "Borrow success!" << endl;
}
else {
cout << "Exceed max borrow count!" << endl;
}
}
void returnBook(Book& book) {
vector<string>::iterator it = find(m_borrowedBooks.begin(), m_borrowedBooks.end(), book.getBarcode());
if (it != m_borrowedBooks.end()) {
book.returnBook();
m_borrowedBooks.erase(it);
m_borrowedCount--;
cout << "Return success!" << endl;
}
else {
cout << "Book not borrowed by this student!" << endl;
}
}
private:
string m_id;
string m_name;
string m_gender;
int m_maxBorrow;
int m_borrowedCount;
vector<string> m_borrowedBooks;
};
int main() {
Book book1("001", "C++ Primer Plus");
Book book2("002", "Effective C++");
Book book3("003", "Thinking in Java");
book1.display();
book2.display();
book3.display();
Student student1("101", "Tom", "Male");
Student student2("102", "Lily", "Female");
student1.display();
student2.display();
student1.borrowBook(book1);
student1.borrowBook(book2);
student1.borrowBook(book3);
student1.borrowBook(book1);
student2.borrowBook(book1);
student2.borrowBook(book2);
book1.display();
book2.display();
book3.display();
student1.display();
student2.display();
student1.returnBook(book2);
student2.returnBook(book3);
book1.display();
book2.display();
book3.display();
student1.display();
student2.display();
return 0;
}
```
在上述代码中,图书类`Book`具有属性`m_barcode`、`m_name`、`m_borrowedTimes`和`m_onShelf`,分别表示图书条形码、图书名称、图书被借次数和是否在架。学生类`Student`具有属性`m_id`、`m_name`、`m_gender`、`m_maxBorrow`和`m_borrowedCount`,分别表示学号、姓名、性别、借阅册数限制和在借册数,以及一个存储已借图书条形码的`vector`类型成员变量`m_borrowedBooks`。两个类都包含了相应的构造函数、显示属性值的方法`display`,以及修改属性值的方法。其中,学生类还包含了`canBorrow`方法用于判断当前学生是否能够借书,以及`borrowBook`和`returnBook`方法用于借书和还书操作。在主函数中,我们创建了3本图书和2个学生,并且进行了相应的借书和还书操作,最后输出相应的结果。
注意,在实际应用中,我们需要将数据保存到文件中,以便下次使用时能够恢复之前的状态。此处只是提供了一个简单的实现。
阅读全文