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;
- }
复制代码
【必读】版权免责声明
1、本主题所有言论和内容纯属会员个人意见,与本论坛立场无关。2、本站对所发内容真实性、客观性、可用性不做任何保证也不负任何责任,网友之间仅出于学习目的进行交流。3、对提供的数字内容不拥有任何权利,其版权归原著者拥有。请勿将该数字内容进行商业交易、转载等行为,该内容只为学习所提供,使用后发生的一切问题与本站无关。 4、本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。 5、本网站所有软件和资料均为网友推荐收集整理而来,仅供学习用途使用,请务必下载后两小时内删除,禁止商用。6、如有侵犯你版权的,请及时联系我们(电子邮箱1370723259@qq.com)指出,本站将立即改正。
|