#include <stdio.h>\n#include <string.h>\n\n#define MAX_NUM 1000\n\nstruct Book {\n int id; // 序号\n char name[20]; // 书名\n char author[20]; // 作者\n char publisher[20]; // 出版社\n char type[20]; // 图书类型\n char code[20]; // 图书分类编码\n double price; // 价格\n};\n\nstruct BorrowRecord {\n int student_id;\n char student_name[20];\n int book_id;\n char borrow_date[20];\n};\n\nint binary_search(struct Book books[], int count, int key) {\n int low = 0, high = count - 1;\n\n while (low <= high) {\n int mid = (low + high) / 2;\n if (books[mid].id == key) {\n return mid;\n } else if (books[mid].id < key) {\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n return -1;\n}\n\nvoid display_book(struct Book book) {\n printf("序号:%d\n书名:%s\n作者:%s\n出版社:%s\n图书类型:%s\n图书分类编码:%s\n价格:%.2f\n",\n book.id, book.name, book.author, book.publisher, book.type, book.code, book.price);\n}\n\nint main() {\n struct Book books[MAX_NUM];\n int count = 0;\n\n // 读取图书信息\n FILE *fp = fopen("book_storages.txt", "r");\n while (fscanf(fp, "%d\n%s\n%s\n%s\n%s\n%s\n%lf", &books[count].id, books[count].name, books[count].author, books[count].publisher, books[count].type, books[count].code, &books[count].price) != EOF) {\n count++;\n }\n\n fclose(fp);\n\n struct BorrowRecord records[MAX_NUM];\n int record_count = 0;\n\n int choice;\n do {\n printf("1. 读取图书信息\n");\n printf("2. 折半查找图书信息\n");\n printf("3. 借阅图书\n");\n printf("4. 保存借阅记录\n");\n printf("5. 读取借阅记录\n");\n printf("6. 显示图书信息\n");\n printf("0. 退出程序\n");\n printf("请输入您的选择:");\n scanf("%d", &choice);\n\n switch (choice) {\n case 1:\n // 读取图书信息,已在上方实现\n printf("以成功录入\n");\n break;\n case 2: {\n // 折半查找图书信息\n int key;\n printf("请输入要查找的图书序号:");\n scanf("%d", &key);\n\n int idx = binary_search(books, count, key);\n if (idx == -1) {\n printf("未找到序号为%d的图书\n", key);\n } else {\n display_book(books[idx]);\n }\n break;\n }\n case 3: {\n // 借阅图书\n int student_id, book_id;\n char student_name[20];\n printf("请输入借阅者的学号和姓名:");\n scanf("%d %s", &student_id, student_name);\n printf("请输入要借阅的图书序号:");\n scanf("%d", &book_id);\n\n int book_idx = binary_search(books, count, book_id);\n if (book_idx == -1) {\n printf("未找到序号为%d的图书\n", book_id);\n } else {\n strcpy(records[record_count].student_name, student_name);\n records[record_count].student_id = student_id;\n records[record_count].book_id = book_id;\n strcpy(records[record_count].borrow_date, "2022-01-01");\n record_count++;\n printf("借阅成功\n");\n }\n break;\n }\n case 4: {\n // 保存借阅记录\n FILE *fp = fopen("borrow_records.txt", "w");\n for (int i = 0; i < record_count; i++) {\n fprintf(fp, "%d %s %d %s\n", records[i].student_id, records[i].student_name, records[i].book_id, records[i].borrow_date);\n }\n fclose(fp);\n printf("借阅记录已保存到文件borrow_records.txt\n");\n break;\n }\n case 5: {\n // 读取借阅记录\n FILE *fp = fopen("borrow_records.txt", "r");\n struct BorrowRecord records[MAX_NUM];\n int count = 0;\n\n while (fscanf(fp, "%d %s %d %s", &records[count].student_id, records[count].student_name, &records[count].book_id, records[count].borrow_date) != EOF) {\n count++;\n }\n\n fclose(fp);\n\n printf("读取到%d条借阅记录\n", count);\n printf("借阅记录如下:\n");\n for (int i = 0; i < count; i++) {\n printf("学号:%d\n姓名:%s\n图书序号:%d\n借阅日期:%s\n", records[i].student_id, records[i].student_name, records[i].book_id, records[i].borrow_date);\n }\n break;\n }\n case 6: {\n // 显示图书信息\n for (int i = 0; i < count; i++) {\n display_book(books[i]);\n printf("---------------------\n");\n }\n break;\n }\n case 0:\n // 退出程序\n printf("程序已退出\n");\n break;\n default:\n printf("无效的选择,请重新输入\n");\n break;\n }\n } while (choice != 0);\n\n return 0;\n}

C语言图书管理系统:图书信息查询、借阅、记录管理

原文地址: https://www.cveoy.top/t/topic/pn61 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录