{"title":"C语言图书管理系统:图书编码丢失问题解决方法","description":"本文介绍了在C语言图书管理系统中,添加第二本图书时,第一本图书的图书编码丢失的原因,并提供了详细的解决方案。主要问题在于程序设计中混淆了价格和数量变量,导致数据覆盖。文章详细阐述了修改代码的步骤,并附带了修改后的代码示例。","keywords":"C语言, 图书管理系统, 编码丢失, 解决方法, 代码修改, 价格, 数量, BookNode结构体","content":"程序中的问题是在添加图书信息时,只有一个quantity变量用于保存价格,而不是保存图书数量。因此,当程序运行时,第二本图书的价格会覆盖掉第一本图书的数量,导致第二本图书的图书编码不见了。\n\n解决方法:\n1. 在BookNode结构体中添加一个新的变量bookQuantity,用于保存图书数量。\n2. 在addBook函数中,修改代码,将输入的价格保存到newNode->quantity,将输入的数量保存到newNode->bookQuantity。\n3. 在displayBook函数中,将打印图书数量的代码修改为打印bookQuantity的代码。\n\n以下是修改后的代码:\n\nc\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\ntypedef struct Node {\n char bookCode[50];\n char bookName[50];\n char author[50];\n char publisher[50];\n char bookkind[50];\n char bookkinds[50];\n int quantity;\n int bookQuantity;\n int borrowed;\n struct Node *next;\n} BookNode;\n\nBookNode *head = NULL;\n\nvoid saveBookData() {\n FILE *file = fopen(\"book_storage.txt\", \"w\");\n if (file == NULL) {\n printf(\"无法保存图书信息!\n\");\n return;\n }\n\n BookNode *current = head;\n while (current != NULL) {\n fprintf(file, \"%s\n\", current->bookCode);\n fprintf(file, \"%s\n\", current->bookName);\n fprintf(file, \"%s\n\", current->author);\n fprintf(file, \"%s\n\", current->publisher);\n fprintf(file, \"%s\n\", current->bookkind);\n fprintf(file, \"%s\n\", current->bookkinds);\n fprintf(file, \"%d\n\", current->quantity);\n fprintf(file, \"%d\n\", current->bookQuantity);\n fprintf(file, \"%d\n\", current->borrowed);\n\n current = current->next;\n }\n\n fclose(file);\n}\n\nvoid loadBookData() {\n FILE *file = fopen(\"book_storage.txt\", \"r\");\n if (file == NULL) {\n return;\n }\n\n while (!feof(file)) {\n BookNode *newNode = (BookNode *)malloc(sizeof(BookNode));\n fscanf(file, \"%s \", newNode->bookCode);\n fscanf(file, \"%s \", newNode->bookName);\n fscanf(file, \"%s \", newNode->author);\n fscanf(file, \"%s \", newNode->publisher);\n fscanf(file, \"%s \", newNode->bookkind);\n fscanf(file, \"%s \", newNode->bookkinds);\n fscanf(file, \"%d \", &newNode->quantity);\n fscanf(file, \"%d \", &newNode->bookQuantity);\n fscanf(file, \"%d \", &newNode->borrowed);\n newNode->next = NULL;\n\n if (head == NULL) {\n head = newNode;\n } else {\n BookNode *current = head;\n while (current->next != NULL) {\n current = current->next;\n }\n current->next = newNode;\n }\n }\n\n fclose(file);\n}\n\nvoid addBook() {\n BookNode *newNode = (BookNode *)malloc(sizeof(BookNode));\n printf(\"请输入图书编号:\");\n scanf(\"%s\", newNode->bookCode);\n printf(\"请输入书名:\");\n scanf(\"%s\", newNode->bookName);\n printf(\"请输入作者:\");\n scanf(\"%s\", newNode->author);\n printf(\"请输入出版社:\");\n scanf(\"%s\", newNode->publisher);\n printf(\"请输入图书种类:\");\n scanf(\"%s\", newNode->bookkind);\n printf(\"请输入图书种类编号:\");\n scanf(\"%s\", newNode->bookkinds);\n printf(\"请输入价格:\");\n scanf(\"%d\", &newNode->quantity);\n printf(\"请输入数量:\");\n scanf(\"%d\", &newNode->bookQuantity);\n newNode->borrowed = 0;\n newNode->next = NULL;\n\n if (head == NULL) {\n head = newNode;\n } else {\n BookNode *current = head;\n while (current->next != NULL) {\n current = current->next;\n }\n current->next = newNode;\n }\n\n printf(\"添加成功!\n\");\n}\n\nvoid deleteBook() {\n char bookCode[20];\n printf(\"请输入要删除的图书编号:\");\n scanf(\"%s\", bookCode);\n\n if (head == NULL) {\n printf(\"没有找到相关图书!\n\");\n return;\n }\n\n if (strcmp(head->bookCode, bookCode) == 0) {\n BookNode *temp = head;\n head = head->next;\n free(temp);\n printf(\"删除成功!\n\");\n return;\n }\n\n BookNode *current = head;\n while (current->next != NULL) {\n if (strcmp(current->next->bookCode, bookCode) == 0) {\n BookNode *temp = current->next;\n current->next = temp->next;\n free(temp);\n printf(\"删除成功!\n\");\n return;\n }\n current = current->next;\n }\n\n printf(\"没有找到相关图书!\n\");\n}\n\nvoid modifyBook() {\n char bookCode[20];\n printf(\"请输入要修改的图书编号:\");\n scanf(\"%s\", bookCode);\n\n if (head == NULL) {\n printf(\"没有找到相关图书!\n\");\n return;\n }\n\n BookNode *current = head;\n while (current != NULL) {\n if (strcmp(current->bookCode, bookCode) == 0) {\n printf(\"请输入新的书名:\");\n scanf(\"%s\", current->bookName);\n printf(\"请输入新的作者:\");\n scanf(\"%s\", current->author);\n printf(\"请输入新的出版社:\");\n scanf(\"%s\", current->publisher);\n printf(\"请输入新的图书种类:\");\n scanf(\"%s\", current->bookkind);\n printf(\"请输入新的图书种类编号:\");\n scanf(\"%s\", current->bookkinds);\n printf(\"请输入新的价格:\");\n scanf(\"%d\", &current->quantity);\n printf(\"请输入新的数量:\");\n scanf(\"%d\", &current->bookQuantity);\n printf(\"修改成功!\n\");\n return;\n }\n current = current->next;\n }\n\n printf(\"没有找到相关图书!\n\");\n}\n\nvoid searchBook() {\n char bookName[50];\n printf(\"请输入要查找的书名:\");\n scanf(\"%s\", bookName);\n\n if (head == NULL) {\n printf(\"没有找到相关图书!\n\");\n return;\n }\n\n BookNode *current = head;\n int found = 0;\n while (current != NULL) {\n if (strcmp(current->bookName, bookName) == 0) {\n printf(\"图书编号:%s\n\", current->bookCode);\n printf(\"书名:%s\n\", current->bookName);\n printf(\"作者:%s\n\", current->author);\n printf(\"出版社:%s\n\", current->publisher);\n printf(\"图书种类:%s\n\", current->bookkind);\n printf(\"图书种类编号:%s\n\", current->bookkinds);\n printf(\"价格:%d\n\", current->quantity);\n printf(\"数量:%d\n\", current->bookQuantity);\n printf(\"借阅状态:%s\n\", current->borrowed ? \"已借出\" : \"未借出\");\n found = 1;\n }\n current = current->next;\n }\n\n if (!found) {\n printf(\"没有找到相关图书!\n\");\n }\n}\n\nvoid borrowBook() {\n char bookCode[20];\n printf(\"请输入要借阅的图书编号:\");\n scanf(\"%s\", bookCode);\n\n if (head == NULL) {\n printf(\"没有找到相关图书!\n\");\n return;\n }\n\n BookNode *current = head;\n while (current != NULL) {\n if (strcmp(current->bookCode, bookCode) == 0) {\n if (current->borrowed) {\n printf(\"该图书已借出!\n\");\n } else {\n current->borrowed = 1;\n printf(\"借阅成功!\n\");\n }\n return;\n }\n current = current->next;\n }\n\n printf(\"没有找到相关图书!\n\");\n}\n\nvoid returnBook() {\n char bookCode[20];\n printf(\"请输入要归还的图书编号:\");\n scanf(\"%s\", bookCode);\n\n if (head == NULL) {\n printf(\"没有找到相关图书!\n\");\n return;\n }\n\n BookNode *current = head;\n while (current != NULL) {\n if (strcmp(current->bookCode, bookCode) == 0) {\n if (current->borrowed) {\n current->borrowed = 0;\n printf(\"归还成功!\n\");\n } else {\n printf(\"该图书未借出!\n\");\n }\n return;\n }\n current = current->next;\n }\n\n printf(\"没有找到相关图书!\n\");\n}\n\nvoid displayBook() {\n if (head == NULL) {\n printf(\"图书列表为空!\n\");\n return;\n }\n\n BookNode *current = head;\n while (current != NULL) {\n printf(\"图书编号:%s\n\", current->bookCode);\n printf(\"书名:%s\n\", current->bookName);\n printf(\"作者:%s\n\", current->author);\n printf(\"出版社:%s\n\", current->publisher);\n printf(\"图书种类:%s\n\", current->bookkind);\n printf(\"图书种类编号:%s\n\", current->bookkinds);\n printf(\"价格:%d\n\", current->quantity);\n printf(\"数量:%d\n\", current->bookQuantity);\n printf(\"借阅状态:%s\n\", current->borrowed ? \"已借出\" : \"未借出\");\n printf(\"\n\");\n\n if (current->next != NULL) {\n printf(\"\n\");\n }\n\n current = current->next;\n }\n}\n\nvoid freeBookList() {\n BookNode *current = head;\n while (current != NULL) {\n BookNode *temp = current;\n current = current->next;\n free(temp);\n }\n head = NULL;\n}\n\nint main() {\n loadBookData();\n\n while (1) {\n printf(\"*****欢迎使用图书管理系统*****\n\");\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(\"7. 显示图书信息\n\");\n printf(\"0. 退出程序\n\");\n printf(\"请输入您的选择:\");\n\n int choice;\n scanf(\"%d\", &choice);\n\n switch (choice) {\n case 1:\n addBook();\n break;\n case 2:\n deleteBook();\n break;\n case 3:\n modifyBook();\n break;\n case 4:\n searchBook();\n break;\n case 5:\n borrowBook();\n break;\n case 6:\n returnBook();\n break;\n case 7:\n displayBook();\n break;\n case 0:\n saveBookData();\n freeBookList();\n printf(\"感谢使用图书管理系统,再见!\n\");\n return 0;\n default:\n printf(\"无效的选择,请重新输入!\n\");\n }\n \n }\n}\n\n\n

C语言图书管理系统:图书编码丢失问题解决方法

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

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