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;
- }
復制代碼
|