该编码描述了一个图书管理系统的功能。它读取一个文本文件中的图书信息,将图书按照分类编号分别存入不同的栈中,然后对每个栈中的图书按照价格进行快速排序,并将排序后的图书信息分别输出到不同的文本文件中。最后,清空所有栈的内容。问题可能包括:无法打开文件、无法创建文件、图书分类编号错误、栈已满或为空时无法添加或删除图书。\n\n#include "stdio.h"\n#include "stdlib.h"\n#include "string.h"\n\n#define MAX_SIZE 1000\n\ntypedef struct {\n int index;\n char name[100];\n char author[100];\n char press[100];\n char type[100];\n int code;\n int price;\n} Book;\n\ntypedef struct {\n Book books[MAX_SIZE];\n int top;\n} Stack;\n\nvoid push(Stack *stack, Book book) {\n if (stack->top == MAX_SIZE - 1) {\n printf("栈已满,无法添加图书!\n");\n return;\n }\n stack->top++;\n stack->books[stack->top] = book;\n}\n\nBook pop(Stack *stack) {\n if (stack->top == -1) {\n printf("栈为空,无法删除图书!\n");\n Book empty_book = {0, "", "", "", "", 0, 0.0};\n return empty_book;\n }\n Book book = stack->books[stack->top];\n stack->top--;\n return book;\n}\n\nvoid quick_sort(Book *books, int left, int right) {\n if (left >= right) {\n return;\n }\n int i = left;\n int j = right;\n Book pivot = books[left];\n while (i < j) {\n while (i < j && books[j].price >= pivot.price) {\n j--;\n }\n books[i] = books[j];\n while (i < j && books[i].price <= pivot.price) {\n i++;\n }\n books[j] = books[i];\n }\n books[i] = pivot;\n quick_sort(books, left, i - 1);\n quick_sort(books, i + 1, right);\n}\n\nint main() {\n FILE *fp;\n fp = fopen("book_storages.txt", "r");\n if (fp == NULL) {\n printf("无法打开文件!\n");\n return 0;\n }\n \n Stack stacks[4] = {{{0, "", "", "", "", 0, 0.0}, -1}, {{0, "", "", "", "", 0, 0.0}, -1}, {{0, "", "", "", "", 0, 0.0}, -1}, {{0, "", "", "", "", 0, 0.0}, -1}};\n \n while (!feof(fp)) {\n Book book;\n book.index = 0;\n strcpy(book.name, "");\n strcpy(book.author, "");\n strcpy(book.press, "");\n strcpy(book.type, "");\n book.code = 0;\n book.price = 0.0;\n \n fscanf(fp, "%d\n%s\n%s\n%s\n%s\n%d\n%d\n", &book.index, book.name, book.author, book.press, book.type, &book.code, &book.price);\n if (book.code < 1 || book.code > 4) {\n printf("图书分类编号错误!\n");\n continue;\n }\n \n push(&stacks[book.code - 1], book);\n }\n \n fclose(fp);\n \n for (int i = 0; i < 4; i++) {\n quick_sort(stacks[i].books, 0, stacks[i].top);\n }\n \n for (int i = 0; i < 4; i++) {\n char filename[20];\n sprintf(filename, "sorted_books_%d.txt", i + 1);\n \n fp = fopen(filename, "w");\n if (fp == NULL) {\n printf("无法创建文件!\n");\n return 0;\n }\n \n printf("图书分类 %d 的信息如下:\n", i + 1);\n printf("索引号\t书名\t作者\t出版社\t种类\t分类编号\t价格\n");\n \n for (int j = 0; j <= stacks[i].top; j++) {\n Book book = stacks[i].books[j];\n printf("%d\t%s\t%s\t%s\t%s\t%d\t%d\n", book.index, book.name, book.author, book.press, book.type, book.code, book.price);\n fprintf(fp, "%d\n%s\n%s\n%s\n%s\n%d\n%d\n", book.index, book.name, book.author, book.press, book.type, book.code, book.price);\n }\n \n fclose(fp);\n }\n \n for (int i = 0; i < 4; i++) {\n stacks[i].top = -1;\n }\n \n return 0;\n}

C语言图书管理系统:读取、分类、排序、输出图书信息

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

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