C语言图书管理系统:图书编码消失的原因及解决方案
"#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 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 \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->borrowed);\n\n current = current->next;\n }\n\n fclose(file);\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->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 // 添加图书编码验证\n if (strlen(newNode->bookCode) == 0) {\n printf("图书编码不能为空,请重新输入!\n");\n return;\n }\n printf("请输入书名:");\n scanf("%s", newNode->bookName);\n printf("请输入作者:");\n scanf("%s", newNode->author);\n printf("请输入出版社:");\n scanf("%s", newNode->publisher);\n printf("请输入图书种类:");\nscanf("%s", newNode->bookkind);\nprintf("请输入图书种类编号:");\nscanf("%s", newNode->bookkinds);\n printf("请输入价格:");\n scanf("%d", &newNode->quantity);\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", ¤t->quantity);\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("借阅状态:%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("借阅状态:%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
原文地址: https://www.cveoy.top/t/topic/ptCL 著作权归作者所有。请勿转载和采集!