题目:图书信息管理系统
内容及主要功能描述: 该系统用于管理图书信息,包括图书的增加、删除、查找、修改、浏览、按出版社统计图书数量等功能。具体功能包括:
- 增加图书:输入图书信息并添加到系统中。
- 删除图书:按照图书的ISBN号删除特定的图书。
- 查找图书:支持按类别、出版社、书名、作者等关键字查找图书。
- 修改图书:按照图书的ISBN号修改图书的信息。
- 浏览全部图书:列出系统中所有图书的详细信息。
- 统计每个出版社出版的图书数量并保存:按照出版社统计其出版的图书数量,并将结果保存到文件中。
三、总体设计
1、存储结构及数据类型定义
(采用了什么存储结构、被处理数据定义的数据类型,数据类型定义中要有注释说明)
存储结构:采用数组存储图书信息,每本图书使用结构体 Book 表示。
typedef struct {
char title[100]; // 书名
char author[100]; // 作者
char publisher[100]; // 出版社
char isbn[20]; // ISBN
char pub_date[20]; // 出版时间
float price; // 价格
char category[50]; // 类别
} Book;
2、程序结构
(程序整体的模块结构图)
3、所实现的功能函数
(每个功能对应的函数名、函数形参及返回值说明)
· 增加图书:void add_book()
参数:无
返回值:void
· 删除图书:void delete_book()
参数:无
返回值:void
· 查找图书:void search_books()
参数:无
返回值:void
· 修改图书:void update_book()
参数:无
返回值:void
· 浏览全部图书:void list_books()
参数:无
返回值:void
· 统计每个出版社出版的图书数量并保存:void count_books_by_publisher(const char* filename)
参数:保存结果的文件名
返回值:void
· 排序图书:void sort_books()
参数:无
返回值:void
四、小组成员及分工
(组长、组员及每人承担的具体模块任务或其他)
· 组长:(姓名)
· 组员:(姓名1、姓名2、姓名3)
· 具体模块任务分工:
- 组长:负责系统总体设计、代码整合及测试。
- 组员1:负责增加图书、删除图书功能实现。
- 组员2:负责查找图书、修改图书功能实现。
- 组员3:负责统计图书数量、浏览图书功能实现。
详 细 设 计 及 实 施 | 1、算法设计 增加图书模块:
删除图书模块:
2、代码设计 增加图书功能实现: void add_book() { if (book_count >= MAX_BOOKS) { printf("书库已满,无法增加新书。\n"); return; } Book book; printf("输入书名: "); scanf("%s", book.title); printf("输入作者: "); scanf("%s", book.author); printf("输入出版社: "); scanf("%s", book.publisher); printf("输入ISBN: "); scanf("%s", book.isbn); printf("输入出版时间: "); scanf("%s", book.pub_date); printf("输入价格: "); scanf("%f", &book.price); printf("输入类别: "); scanf("%s", book.category); books[book_count++] = book; sort_books(); printf("图书添加成功。\n"); } 删除图书功能实现: void delete_book() { char isbn[20]; printf("输入要删除的图书ISBN: "); scanf("%s", isbn); for (int i = 0; i < book_count; i++) { if (strcmp(books[i].isbn, isbn) == 0) { for (int j = i; j < book_count - 1; j++) { books[j] = books[j + 1]; } book_count--; printf("图书删除成功。\n"); return; } } printf("未找到该ISBN的图书。\n"); } | |||||||
实 践 总 结 | 在本课题中,我负责了增加图书和删除图书两个功能模块的实现。 工作内容:
完成的功能及改进空间:
调试过程及解决措施:
收获与建议:
这些工作经历让我意识到,团队合作和模块化开发在大型项目中的重要性,同时也帮助我提升了编程能力和团队协作能力 | |||||||
学号 | 姓名 | |||||||
详 细 设 计 及 实 施 | 1、算法设计 查找图书模块:
修改图书模块:
2、代码设计 查找图书功能实现: void search_books() { int choice; char keyword[100]; printf("选择查找方式:\n"); printf("1. 按类别查找\n"); printf("2. 按出版社查找\n"); printf("3. 按书名查找\n"); printf("4. 按作者查找\n"); printf("选择操作: "); scanf("%d", &choice); printf("输入查找关键字: "); scanf("%s", keyword); for (int i = 0; i < book_count; i++) { if ((choice == 1 && strcmp(books[i].category, keyword) == 0) || (choice == 2 && strcmp(books[i].publisher, keyword) == 0) || (choice == 3 && strcmp(books[i].title, keyword) == 0) || (choice == 4 && strcmp(books[i].author, keyword) == 0)) { printf("书名: %s, 作者: %s, 出版社: %s, ISBN: %s, 出版时间: %s, 价格: %.2f, 类别: %s\n", books[i].title, books[i].author, books[i].publisher, books[i].isbn, books[i].pub_date, books[i].price, books[i].category); } } } 修改图书功能实现: void update_book() { char isbn[20]; printf("输入要修改的图书ISBN: "); scanf("%s", isbn); for (int i = 0; i < book_count; i++) { if (strcmp(books[i].isbn, isbn) == 0) { printf("输入新的书名: "); scanf("%s", books[i].title); printf("输入新的作者: "); scanf("%s", books[i].author); printf("输入新的出版社: "); scanf("%s", books[i].publisher); printf("输入新的出版时间: "); scanf("%s", books[i].pub_date); printf("输入新的价格: "); scanf("%f", &books[i].price); printf("输入新的类别: "); scanf("%s", books[i].category); sort_books(); printf("图书修改成功。\n"); return; } } printf("未找到该ISBN的图书。\n"); } | |||||||
实 践 总 结 | 在本课题中,我负责了查找图书和修改图书两个功能模块的实现。 工作内容:
完成的功能及改进空间:
调试过程及解决措施:
收获与建议:
这些工作经验让我意识到,编程不仅仅是语法和算法的应用,更重要的是如何将其应用于实际项目中,并通过团队合作实现更高效的开发和更优秀的产品。 | |||||||
学号 | 姓名 | |||||||
1、算法设计 统计图书数量模块:
浏览图书模块:
2、代码设计 统计图书数量功能实现: void count_books_by_publisher(const char* filename) { FILE *file = fopen(filename, "w"); if (file == NULL) { printf("无法打开文件\n"); return; } char current_publisher[100] = ""; int count = 0; sort_books(); // 调用排序函数,确保按出版社排序 for (int i = 0; i < book_count; i++) { if (strcmp(current_publisher, books[i].publisher) != 0) { if (count > 0) { fprintf(file, "出版社: %s, 图书数量: %d\n", current_publisher, count); } strcpy(current_publisher, books[i].publisher); count = 1; } else { count++; } } if (count > 0) { fprintf(file, "出版社: %s, 图书数量: %d\n", current_publisher, count); } fclose(file); printf("图书统计结果已保存到%s文件中。\n", filename); } 浏览图书功能实现: void list_books() { for (int i = 0; i < book_count; i++) { printf("书名: %s, 作者: %s, 出版社: %s, ISBN: %s, 出版时间: %s, 价格: %.2f, 类别: %s\n", books[i].title, books[i].author, books[i].publisher, books[i].isbn, books[i].pub_date, books[i].price, books[i].category); } } | ||||||||
在本课题中,我负责了统计图书数量和浏览图书两个功能模块的实现。 工作内容:
完成的功能及改进空间:
调试过程及解决措施:
收获与建议:
这些工作经验不仅让我在编程技能上有了进一步的提升,也使我更加意识到团队合作和项目管理的重要性,希望能在未来的项目中继续发挥所长,为团队的成功贡献自己的力量。 |
源代码 189088817