1. 定义图书类Book,包括如下属性:
- 书名
- 作者
- 出版社
- 出版日期
- ISBN号
- 借出状态
2. 定义读者类Reader,包括如下属性:
- 姓名
- 学号/工号
- 借阅书籍数量
- 借阅历史
3. 定义图书馆类Library,包括如下属性:
- 图书馆名称
- 图书总量
- 已借出图书数量
- 图书列表
4. 定义如下函数进行图书管理:
- add_book():添加书籍
- remove_book():删除书籍
- borrow_book():借阅书籍
- return_book():归还书籍
- check_book_status():检查书籍借出状态
- search_book():查找书籍
- add_reader():添加读者
- remove_reader():删除读者
- borrow_history():查看借阅历史
- check_reader_status():检查读者借书状态
- search_reader():查找读者
5. 根据以上函数实现一个完整的图书馆管理系统。
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- // 图书类
- typedef struct book_struct {
- char name[100];
- char author[50];
- char publisher[50];
- char publish_date[20];
- char isbn[50];
- int borrowed;
- } Book;
- // 读者类
- typedef struct reader_struct {
- char name[50];
- char id[50];
- int borrow_amount;
- Book *borrow_list[10]; // 保存借阅记录
- } Reader;
- // 图书馆类
- typedef struct library_struct {
- char name[50];
- int total_books;
- int borrowed_books;
- Book *book_list[10000]; // 最多保存10000本书
- Reader *reader_list[1000]; // 最多保存1000名读者
- } Library;
- // 函数声明
- void add_book(Library *lib, Book *book);
- void remove_book(Library *lib, Book *book);
- void borrow_book(Library *lib, Reader *reader, Book *book);
- void return_book(Library *lib, Reader *reader, Book *book);
- void check_book_status(Book *book);
- Book* search_book(Library *lib, char *name);
- void add_reader(Library *lib, Reader *reader);
- void remove_reader(Library *lib, Reader *reader);
- void borrow_history(Reader *reader);
- void check_reader_status(Reader *reader);
- Reader* search_reader(Library *lib, char *name);
- int main() {
- // 初始化图书馆
- Library lib = {"XX大学图书馆", 0, 0, {NULL}, {NULL}};
- // 初始化几本书
- Book b1 = {"算法导论", "Thomas H. Cormen", "机械工业出版社", "2006-8-1", "9787111187776", 0};
- Book b2 = {"UNIX编程艺术", "Eric S. Raymond", "人民邮电出版社", "2004-1-1", "9787115120024", 0};
- Book b3 = {"信息简史", "James Gleick", "中信出版社", "2002-7-1", "9787508600987", 0};
- // 添加几本书到图书馆
- add_book(&lib, &b1);
- add_book(&lib, &b2);
- add_book(&lib, &b3);
- // 初始化读者
- Reader r1 = {"张三", "2018001", 0, {NULL}};
- // 添加读者
- add_reader(&lib, &r1);
- // 借一本书
- borrow_book(&lib, &r1, &b1);
- // 返还一本书
- return_book(&lib, &r1, &b1);
- return 0;
- }
- // 添加书籍
- void add_book(Library *lib, Book *book) {
- if(lib->total_books >= 10000) {
- printf("Error: 图书馆容量已满,无法添加新书!\n");
- return;
- }
- lib->book_list[lib->total_books] = book;
- lib->total_books++;
- printf("添加 \"%s\" 成功!\n", book->name);
- }
- // 删除书籍
- void remove_book(Library *lib, Book *book) {
- for(int i=0; i<lib->total_books; i++) {
- if(strcmp(lib->book_list[i]->name, book->name)==0) {
- // 如果这本书借出去了,不允许删除
- if(lib->book_list[i]->borrowed) {
- printf("Error: 书籍 \"%s\" 已借出,无法删除!\n", book->name);
- return;
- }
- lib->total_books--;
- for(int j=i; j<lib->total_books; j++) {
- lib->book_list[j] = lib->book_list[j+1];
- }
- printf("删除 \"%s\" 成功!\n", book->name);
- return;
- }
- }
- printf("Error: 没有找到要删除的书籍!\n");
- }
- // 借阅书籍
- void borrow_book(Library *lib, Reader *reader, Book *book) {
- // 判断读者已经借了多少本书了
- if(reader->borrow_amount >= 10) {
- printf("Error: 读者 \"%s\" 借书已达上限!\n", reader->name);
- return;
- }
- // 判断这本书是否已经借出去了
- if(book->borrowed) {
- printf("Error: 书籍 \"%s\" 已被借出!\n", book->name);
- return;
- }
- reader->borrow_list[reader->borrow_amount] = book;
- reader->borrow_amount++;
- book->borrowed = 1;
- lib->borrowed_books++;
- printf("\"%s\" 已被 \"%s\" 借阅!\n", book->name, reader->name);
- }
- // 归还书籍
- void return_book(Library *lib, Reader *reader, Book *book) {
- // 查找这本书是否由该读者借阅
- int found = 0;
- for(int i=0; i<reader->borrow_amount; i++) {
- if(reader->borrow_list[i] == book) {
- found = 1;
- for(int j=i; j<reader->borrow_amount-1; j++) {
- reader->borrow_list[j] = reader->borrow_list[j+1];
- }
- reader->borrow_list[reader->borrow_amount-1] = NULL;
- reader->borrow_amount--;
- book->borrowed = 0;
- lib->borrowed_books--;
- printf("\"%s\" 已被 \"%s\" 归还!\n", book->name, reader->name);
- break;
- }
- }
- if(!found) {
- printf("Error: \"%s\" 并没有借阅 \"%s\"!\n", reader->name, book->name);
- }
- }
- // 检查书籍的借出状态
- void check_book_status(Book *book) {
- if(book->borrowed) {
- printf("\"%s\" 已经被借出了!\n", book->name);
- } else {
- printf("\"%s\" 目前还没被借出!\n", book->name);
- }
- }
- // 查找书籍
- Book* search_book(Library *lib, char *name) {
- for(int i=0; i<lib->total_books; i++) {
- if(strcmp(lib->book_list[i]->name, name)==0) {
- return lib->book_list[i];
- }
- }
- printf("Error: 没有找到书籍 \"%s\"!\n", name);
- return NULL;
- }
- // 添加读者
- void add_reader(Library *lib, Reader *reader) {
- if(lib->total_books >= 1000) {
- printf("Error: 图书馆读者容量已满,无法添加新读者!\n");
- return;
- }
- lib->reader_list[lib->total_books] = reader;
- lib->total_books++;
- printf("添加读者 \"%s\" 成功!\n", reader->name);
- }
- // 删除读者
- void remove_reader(Library *lib, Reader *reader) {
- for(int i=0; i<lib->total_books; i++) {
- if(lib->reader_list[i] == reader) {
- // 如果这个读者还有未归还的书,不允许删除
- if(reader->borrow_amount > 0) {
- printf("Error: 读者 \"%s\" 还有未归还的书籍,无法删除!\n", reader->name);
- return;
- }
- lib->total_books--;
- for(int j=i; j<lib->total_books; j++) {
- lib->reader_list[j] = lib->reader_list[j+1];
- }
- printf("删除读者 \"%s\" 成功!\n", reader->name);
- return;
- }
- }
- printf("Error: 没有找到要删除的读者!\n");
- }
- // 查看读者借阅记录
- void borrow_history(Reader *reader) {
- printf("%s 的借阅历史:\n", reader->name);
- for(int i=0; i<reader->borrow_amount; i++) {
- printf("%d. %s (%s)\n", i+1, reader->borrow_list[i]->name, reader->borrow_list[i]->author);
- }
- }
- // 检查读者是否有借书超期未归还的情况
- void check_reader_status(Reader *reader) {
- if(reader->borrow_amount == 0) {
- return;
- }
- printf("检查 %s 是否有超期未归还的书籍...\n", reader->name);
- // 模拟检查过程,假设借阅期限为14天,超过14天就算超期
- for(int i=0; i<reader->borrow_amount; i++) {
- if(reader->borrow_list[i]->borrowed == 1) {
- printf("警告:\"%s\" 已经超期未归还 %d 天!\n", reader->borrow_list[i]->name, 28);
- }
- }
- }
- // 查找读者
- Reader* search_reader(Library *lib, char *name) {
- for(int i=0; i<lib->total_books; i++) {
- if(strcmp(lib->reader_list[i]->name, name)==0) {
- return lib->reader_list[i];
- }
- }
- printf("Error: 没有找到读者 \"%s\"!\n", name);
- return NULL;
- }
复制代码
|