C语言图书管理系统:数据保存与加载功能实现
C语言图书管理系统:数据保存与加载功能实现
本示例代码展示了使用 C 语言实现图书管理系统中数据保存与加载功能的代码片段。该代码片段包含三个函数:saveBookData()、loadBookData() 和 addBook()。
1. saveBookData() 函数
void saveBookData() {
FILE *file = fopen("book_storage.txt", "w");
if (file == NULL) {
printf("无法保存图书信息!\n");
}
BookNode *current = head;
while (current != NULL) {
fprintf(file, "%s\n", current->bookCode);
fprintf(file, "%s\n", current->bookName);
fprintf(file, "%s\n", current->author);
fprintf(file, "%s\n", current->publisher);
fprintf(file, "%s\n", current->bookkind);
fprintf(file, "%s\n", current->bookkinds);
fprintf(file, "%d\n", current->quantity);
fprintf(file, "%d\n", current->borrowed);
current = current->next;
}
fclose(file);
}
该函数用于将图书数据保存到名为 book_storage.txt 的文件中。首先打开文件,如果打开失败则打印错误信息。然后遍历链表,将每个节点的图书信息写入文件。最后关闭文件。
2. loadBookData() 函数
void loadBookData() {
FILE *file = fopen("book_storage.txt", "r");
if (file == NULL) {
return;
}
while (!feof(file)) {
BookNode *newNode = (BookNode *)malloc(sizeof(BookNode));
fscanf(file, "%s ", newNode->bookCode);
fscanf(file, "%s ", newNode->bookName);
fscanf(file, "%s ", newNode->author);
fscanf(file, "%s ", newNode->publisher);
fscanf(file, "%s ", newNode->bookkind);
fscanf(file, "%s ", newNode->bookkinds);
fscanf(file, "%d ", &newNode->quantity);
fscanf(file, "%d ", &newNode->borrowed);
newNode->next = NULL;
if (head == NULL) {
head = newNode;
} else {
BookNode *current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
}
fclose(file);
}
该函数用于从 book_storage.txt 文件中加载图书数据。首先打开文件,如果打开失败则返回。然后逐行读取文件内容,将每行信息存储为一个新的节点,并将其添加到链表中。最后关闭文件。
3. addBook() 函数
void addBook() {
BookNode *newNode = (BookNode *)malloc(sizeof(BookNode));
printf("请输入图书编号:");
scanf("%s", newNode->bookCode);
printf("请输入书名:");
scanf("%s", newNode->bookName);
printf("请输入作者:");
scanf("%s", newNode->author);
printf("请输入出版社:");
scanf("%s", newNode->publisher);
printf("请输入图书种类:");
scanf("%s", newNode->bookkind);
printf("请输入图书种类编号:");
scanf("%s", newNode->bookkinds);
printf("请输入数量:");
scanf("%d", &newNode->quantity);
newNode->borrowed = 0;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
} else {
BookNode *current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
printf("添加成功!\n");
}
该函数用于添加新图书信息。首先分配内存空间创建一个新节点,然后提示用户输入图书信息并存储到节点中。最后将新节点添加到链表的末尾。
时间复杂度分析
-
saveBookData():时间复杂度为 O(n),其中 n 为图书链表中的节点数目。需要遍历整个链表,将每个节点的信息写入文件。 -
loadBookData():时间复杂度为 O(n),其中 n 为文件中图书信息的行数。需要读取文件中的每一行信息,并将其存储为节点。 -
addBook():时间复杂度为 O(1)。只需要在链表末尾添加一个新的节点。
流程图
saveBookData()
└─ 打开文件
└─ 遍历链表
└─ 写入节点信息到文件
└─ 关闭文件
loadBookData()
└─ 打开文件
└─ 读取文件中的每一行信息
└─ 将信息存储为节点
└─ 关闭文件
addBook()
└─ 创建新节点
└─ 输入图书信息
└─ 将节点添加到链表末尾
总结
本代码片段展示了使用 C 语言实现图书管理系统中数据保存与加载功能的代码示例,包含 saveBookData()、loadBookData() 和 addBook() 函数的实现,并分析了每个函数的时间复杂度和流程图。该代码可以作为学习 C 语言编程和实现数据保存与加载功能的参考。
原文地址: https://www.cveoy.top/t/topic/fx8k 著作权归作者所有。请勿转载和采集!