C语言实现图书管理系统:从文件存储到借阅功能
C语言实现图书管理系统:从文件存储到借阅功能
这篇文章将介绍如何使用C语言实现一个简单的图书管理系统,并重点讲解如何将图书数据存储到文件中,以及如何实现借阅和归还功能。
1. 数据结构设计
首先,我们需要定义一个结构体来表示每一条图书信息:ctypedef struct Node { char bookCode[20]; // 图书编号 char bookName[50]; // 书名 char author[50]; // 作者 char publisher[50]; // 出版社 char bookkind[50]; // 图书种类 char bookkinds[50]; // 图书种类编号 float price; // 价格 (修改为浮点型) int quantity; // 数量 int borrowed; // 借阅状态,0表示未借出,1表示已借出 struct Node *next; // 指向下一本书的指针} BookNode;
BookNode *head = NULL; // 定义头指针,初始为空
2. 功能实现
2.1 从文件加载图书数据cvoid 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, '%f', &newNode->price); // 修改为%f读取浮点数 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);}
2.2 保存图书数据到文件cvoid saveBookData() { FILE *file = fopen('book_storage.txt', 'w'); if (file == NULL) { printf('无法保存图书信息!
'); return; }
BookNode *current = head; while (current != NULL) { fprintf(file, '%s
', current->bookCode); fprintf(file, '%s ', current->bookName); fprintf(file, '%s ', current->author); fprintf(file, '%s ', current->publisher); fprintf(file, '%s ', current->bookkind); fprintf(file, '%s ', current->bookkinds); fprintf(file, '%.2f ', current->price); // 使用%.2f控制输出两位小数 fprintf(file, '%d ', current->quantity); fprintf(file, '%d ', current->borrowed);
current = current->next; }
fclose(file);}
2.3 添加图书信息cvoid 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('%f', &newNode->price); // 使用%f读取浮点数 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('添加成功!
');}
2.4 删除图书信息cvoid deleteBook() { char bookCode[20]; printf('请输入要删除的图书编号:'); scanf('%s', bookCode);
if (head == NULL) { printf('没有找到相关图书!
'); return; }
if (strcmp(head->bookCode, bookCode) == 0) { BookNode *temp = head; head = head->next; free(temp); printf('删除成功!
'); return; }
BookNode *current = head; while (current->next != NULL) { if (strcmp(current->next->bookCode, bookCode) == 0) { BookNode *temp = current->next; current->next = temp->next; free(temp); printf('删除成功!
'); return; } current = current->next; }
printf('没有找到相关图书!
');}
2.5 修改图书信息cvoid modifyBook() { char bookCode[20]; printf('请输入要修改的图书编号:'); scanf('%s', bookCode);
if (head == NULL) { printf('没有找到相关图书!
'); return; }
BookNode *current = head; while (current != NULL) { if (strcmp(current->bookCode, bookCode) == 0) { printf('请输入新的书名:'); scanf('%s', current->bookName); printf('请输入新的作者:'); scanf('%s', current->author); printf('请输入新的出版社:'); scanf('%s', current->publisher); printf('请输入新的图书种类:'); scanf('%s', current->bookkind); printf('请输入新的图书种类编号:'); scanf('%s', current->bookkinds); printf('请输入新的价格:'); scanf('%f', ¤t->price); // 使用%f读取浮点数 printf('请输入新的数量:'); scanf('%d', ¤t->quantity); printf('修改成功!
'); return; } current = current->next; }
printf('没有找到相关图书!
');}
2.6 查找图书信息cvoid searchBook() { char bookName[50]; printf('请输入要查找的书名:'); scanf('%s', bookName);
if (head == NULL) { printf('没有找到相关图书!
'); return; }
BookNode *current = head; int found = 0; while (current != NULL) { if (strcmp(current->bookName, bookName) == 0) { printf('图书编号:%s
', current->bookCode); printf('书名:%s ', current->bookName); printf('作者:%s ', current->author); printf('出版社:%s ', current->publisher); printf('图书种类:%s ', current->bookkind); printf('图书种类编号:%s ', current->bookkinds); printf('价格:%.2f ', current->price); // 使用%.2f控制输出两位小数 printf('数量:%d ', current->quantity); printf('借阅状态:%s ', current->borrowed ? '已借出' : '未借出'); found = 1; } current = current->next; }
if (!found) { printf('没有找到相关图书!
'); }}
2.7 借阅图书cvoid borrowBook() { char bookCode[20]; printf('请输入要借阅的图书编号:'); scanf('%s', bookCode);
if (head == NULL) { printf('没有找到相关图书!
'); return; }
BookNode *current = head; while (current != NULL) { if (strcmp(current->bookCode, bookCode) == 0) { if (current->borrowed) { printf('该图书已借出!
'); } else { current->borrowed = 1; printf('借阅成功! '); } return; } current = current->next; }
printf('没有找到相关图书!
');}
2.8 归还图书cvoid returnBook() { char bookCode[20]; printf('请输入要归还的图书编号:'); scanf('%s', bookCode);
if (head == NULL) { printf('没有找到相关图书!
'); return; }
BookNode *current = head; while (current != NULL) { if (strcmp(current->bookCode, bookCode) == 0) { if (current->borrowed) { current->borrowed = 0; printf('归还成功!
'); } else { printf('该图书未借出! '); } return; } current = current->next; }
printf('没有找到相关图书!
');}
2.9 显示所有图书信息cvoid displayBook() { if (head == NULL) { printf('图书列表为空!
'); return; }
BookNode *current = head; while (current != NULL) { printf('图书编号:%s
', current->bookCode); printf('书名:%s ', current->bookName); printf('作者:%s ', current->author); printf('出版社:%s ', current->publisher); printf('图书种类:%s ', current->bookkind); printf('图书种类编号:%s ', current->bookkinds); printf('价格:%.2f ', current->price); // 使用%.2f控制输出两位小数 printf('数量:%d ', current->quantity); printf('借阅状态:%s ', current->borrowed ? '已借出' : '未借出'); printf(' ');
current = current->next; }}
2.10 释放链表内存cvoid freeBookList() { BookNode *current = head; while (current != NULL) { BookNode *temp = current; current = current->next; free(temp); } head = NULL;}
3. 主函数cint main() { loadBookData(); // 加载图书数据
while (1) { printf('*****欢迎使用图书管理系统*****
'); printf('1. 添加图书信息 '); printf('2. 删除图书信息 '); printf('3. 修改图书信息 '); printf('4. 查找图书信息 '); printf('5. 借阅图书 '); printf('6. 归还图书 '); printf('7. 显示图书信息 '); printf('0. 退出程序 '); printf('请输入您的选择:');
int choice; scanf('%d', &choice);
switch (choice) { case 1: addBook(); break; case 2: deleteBook(); break; case 3: modifyBook(); break; case 4: searchBook(); break; case 5: borrowBook(); break; case 6: returnBook(); break; case 7: displayBook(); break; case 0: saveBookData(); // 保存图书数据 freeBookList(); // 释放链表内存 printf('感谢使用图书管理系统,再见!
'); return 0; default: printf('无效的选择,请重新输入! '); } }}
4. 总结
本文介绍了如何使用C语言实现一个简单的图书管理系统,并实现了文件存储、借阅和归还等功能。你可以根据自己的需求对程序进行修改和完善。
注意:
- 在实际应用中,应该使用更安全的输入输出函数,例如
fgets和sscanf,以避免缓冲区溢出等安全问题。* 本文代码只提供了一个简单的框架,你可以根据需要添加更多功能,例如用户管理、借阅记录等。* 记得在程序退出前保存数据到文件,并在程序启动时加载数据
原文地址: https://www.cveoy.top/t/topic/fv2q 著作权归作者所有。请勿转载和采集!