基于文档视图的程序设计,利用c++语言写一个图书系统,并可以显示用户借的书
时间: 2023-06-13 15:08:44 浏览: 207
好的,让我们来设计一个基于文档视图的图书系统。
首先,我们需要定义一些类来表示图书系统中的不同实体:
1. 书籍(Book):包含书名、作者、出版日期、ISBN 等信息。
2. 用户(User):包含姓名、借阅记录等信息。
3. 借阅记录(BorrowRecord):包含借阅日期、归还日期等信息。
接下来,我们需要设计程序的基本功能:
1. 添加书籍。
2. 删除书籍。
3. 添加用户。
4. 删除用户。
5. 借出图书。
6. 归还图书。
为了实现这些功能,我们可以定义一个管理类(Library)来管理所有的书籍、用户和借阅记录。该类需要提供以下功能:
1. 添加书籍。
2. 删除书籍。
3. 添加用户。
4. 删除用户。
5. 借出图书。
6. 归还图书。
7. 显示所有的书籍。
8. 显示所有的用户。
9. 显示某个用户借阅的书籍。
下面是一个简单的实现:
```cpp
#include <iostream>
#include <vector>
#include <string>
#include <ctime>
using namespace std;
// 书籍类
class Book {
public:
Book(string title, string author, string isbn, string publishDate) :
m_title(title), m_author(author), m_isbn(isbn), m_publishDate(publishDate) {}
string getTitle() const { return m_title; }
string getAuthor() const { return m_author; }
string getISBN() const { return m_isbn; }
string getPublishDate() const { return m_publishDate; }
private:
string m_title;
string m_author;
string m_isbn;
string m_publishDate;
};
// 用户类
class User {
public:
User(string name) : m_name(name) {}
string getName() const { return m_name; }
void addBorrowRecord(Book* book) {
time_t borrowTime = time(NULL);
m_borrowRecords.push_back(make_pair(book, borrowTime));
}
void returnBook(Book* book) {
time_t returnTime = time(NULL);
for (auto& record : m_borrowRecords) {
if (record.first == book) {
record.second = returnTime;
break;
}
}
}
void showBorrowRecords() const {
cout << "Borrow records for user " << m_name << ":" << endl;
for (auto& record : m_borrowRecords) {
cout << "Title: " << record.first->getTitle()
<< ", Borrow time: " << asctime(localtime(&record.second));
}
}
private:
string m_name;
vector<pair<Book*, time_t>> m_borrowRecords;
};
// 借阅记录类
class BorrowRecord {
public:
BorrowRecord(User* user, Book* book) :
m_user(user), m_book(book), m_borrowTime(time(NULL)) {}
User* getUser() const { return m_user; }
Book* getBook() const { return m_book; }
time_t getBorrowTime() const { return m_borrowTime; }
private:
User* m_user;
Book* m_book;
time_t m_borrowTime;
};
// 管理类
class Library {
public:
// 添加书籍
void addBook(Book* book) {
m_books.push_back(book);
}
// 删除书籍
void removeBook(Book* book) {
auto it = find(m_books.begin(), m_books.end(), book);
if (it != m_books.end()) {
m_books.erase(it);
}
}
// 添加用户
void addUser(User* user) {
m_users.push_back(user);
}
// 删除用户
void removeUser(User* user) {
auto it = find(m_users.begin(), m_users.end(), user);
if (it != m_users.end()) {
m_users.erase(it);
}
}
// 借出图书
void borrowBook(User* user, Book* book) {
BorrowRecord record(user, book);
m_borrowRecords.push_back(record);
user->addBorrowRecord(book);
}
// 归还图书
void returnBook(User* user, Book* book) {
for (auto& record : m_borrowRecords) {
if (record.getUser() == user && record.getBook() == book) {
record.getUser()->returnBook(book);
m_borrowRecords.remove(record);
break;
}
}
}
// 显示所有的书籍
void showAllBooks() const {
cout << "All books in the library:" << endl;
for (auto& book : m_books) {
cout << "Title: " << book->getTitle()
<< ", Author: " << book->getAuthor()
<< ", ISBN: " << book->getISBN()
<< ", Publish date: " << book->getPublishDate() << endl;
}
}
// 显示所有的用户
void showAllUsers() const {
cout << "All users in the library:" << endl;
for (auto& user : m_users) {
cout << "Name: " << user->getName() << endl;
}
}
// 显示某个用户借阅的书籍
void showBorrowRecords(User* user) const {
user->showBorrowRecords();
}
private:
vector<Book*> m_books;
vector<User*> m_users;
list<BorrowRecord> m_borrowRecords;
};
int main() {
// 创建几本书
Book* book1 = new Book("The C++ Programming Language", "Bjarne Stroustrup", "9780321958327", "2013-05-19");
Book* book2 = new Book("Effective C++", "Scott Meyers", "9780321334879", "2005-05-15");
Book* book3 = new Book("Design Patterns", "Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides", "9780201633610", "1994-10-21");
// 创建几个用户
User* user1 = new User("Alice");
User* user2 = new User("Bob");
// 创建图书馆
Library library;
// 添加书籍
library.addBook(book1);
library.addBook(book2);
library.addBook(book3);
// 添加用户
library.addUser(user1);
library.addUser(user2);
// Alice 借出两本书
library.borrowBook(user1, book1);
library.borrowBook(user1, book2);
// Bob 借出一本书
library.borrowBook(user2, book3);
// 显示 Alice 借阅的书籍
library.showBorrowRecords(user1);
// Bob 归还一本书
library.returnBook(user2, book3);
// 显示所有的书籍和用户
library.showAllBooks();
library.showAllUsers();
// 释放资源
delete book1;
delete book2;
delete book3;
delete user1;
delete user2;
return 0;
}
```
以上代码实现了一个基本的图书系统,可以显示用户借的书籍。需要注意的是,该实现还有很多不足之处,比如没有对输入进行检查,没有处理异常等。在实际应用中需要根据实际需求进行改进。