"C语言程序子函数功能分析:图书管理系统"\n\n本文对一个使用C语言编写的图书管理系统程序中的关键子函数进行功能分析,包括入栈(push)、出栈(pop)、快速排序(quick_sort)等函数的详细说明。\n\n1. push函数\n\n该函数负责向栈中添加图书的功能。如果栈已满,则打印提示信息,否则将图书添加到栈中。\n\n2. pop函数\n\n该函数负责从栈中删除图书的功能。如果栈为空,则打印提示信息并返回一个空的图书结构体。否则,将栈顶的图书弹出并返回。\n\n3. quick_sort函数\n\n该函数实现快速排序算法,用于对图书数组进行排序,按照图书的价格从小到大进行排序。\n\n4. main函数\n\n该函数是主程序的入口。它负责打开存储图书信息的文件,创建4个栈用于存储不同分类的图书,依次读取文件中的图书信息,按照图书的分类将图书添加到相应的栈中。然后,对每个栈中的图书进行排序,并将排序后的图书信息分别写入4个文件中。最后,清空栈中的图书信息。\n\n代码示例:\n\nc\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}\n\n\n总结:\n\n该程序利用栈和快速排序算法实现了对图书信息的分类存储和排序功能。程序逻辑清晰,易于理解,并包含了基本的错误处理机制。\n

C语言程序子函数功能分析:图书管理系统

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

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