C语言图书管理系统:添加、删除、修改、查找、显示图书信息
#include <stdio.h> #include <stdlib.h> #include <string.h>
#define MAX_SIZE 1000
typedef struct { char bookCode[20]; char bookName[50]; char author[50]; char publisher[50]; char bookkind[50]; char bookkinds[50]; int quantity; } Book;
Book bookList[MAX_SIZE]; int count = 0;
void loadBookData() { FILE *file = fopen('book_storage.txt', 'r'); if (file == NULL) { return; }
while (fscanf(file, '%s', bookList[count].bookCode) != EOF) {
fscanf(file, '%s', bookList[count].bookName);
fscanf(file, '%s', bookList[count].author);
fscanf(file, '%s', bookList[count].publisher);
fscanf(file, '%s', bookList[count].bookkind);
fscanf(file, '%s', bookList[count].bookkinds);
fscanf(file, '%d', &bookList[count].quantity);
count++;
}
fclose(file);
} void saveBookData() { FILE *file = fopen('book_storage.txt', 'w'); if (file == NULL) { printf('无法保存图书信息!\n'); return; }
int i;
for (i = 0; i < count; i++) {
fprintf(file, '%s\n', bookList[i].bookCode);
fprintf(file, '%s\n', bookList[i].bookName);
fprintf(file, '%s\n', bookList[i].author);
fprintf(file, '%s\n', bookList[i].publisher);
fprintf(file, '%s\n', bookList[i].bookkind);
fprintf(file, '%s\n', bookList[i].bookkinds);
fprintf(file, '%d\n', bookList[i].quantity);
}
fclose(file);
} void addBook() { Book newBook; printf('请输入图书编号:'); scanf('%s', newBook.bookCode); printf('请输入书名:'); scanf('%s', newBook.bookName); printf('请输入作者:'); scanf('%s', newBook.author); printf('请输入出版社:'); scanf('%s', newBook.publisher); printf('请输入图书种类:'); scanf('%s', newBook.bookkind); printf('请输入图书种类编号:'); scanf('%s', newBook.bookkinds); printf('请输入价格:'); scanf('%d', &newBook.quantity);
bookList[count++] = newBook;
printf('添加成功!\n');
}
void deleteBook() { char bookCode[20]; printf('请输入要删除的图书编号:'); scanf('%s', bookCode);
int i, j;
for (i = 0; i < count; i++) {
if (strcmp(bookList[i].bookCode, bookCode) == 0) {
for (j = i; j < count - 1; j++) {
bookList[j] = bookList[j + 1];
}
count--;
printf('删除成功!\n');
return;
}
}
printf('没有找到相关图书!\n');
}
void modifyBook() { char bookCode[20]; printf('请输入要修改的图书编号:'); scanf('%s', bookCode);
FILE *file = fopen('book_storage.txt', 'r');
if (file == NULL) {
printf('无法打开图书信息文件!\n');
return;
}
int found = 0;
Book book;
FILE *tempFile = fopen('temp.txt', 'w');
if (tempFile == NULL) {
printf('无法创建临时文件!\n');
fclose(file);
return;
}
while (fscanf(file, '%s', book.bookCode) != EOF) {
fscanf(file, '%s', book.bookName);
fscanf(file, '%s', book.author);
fscanf(file, '%s', book.publisher);
fscanf(file, '%s', book.bookkind);
fscanf(file, '%s', book.bookkinds);
fscanf(file, '%d', &book.quantity);
if (strcmp(book.bookCode, bookCode) == 0) {
printf('请输入新的书名:');
scanf('%s', book.bookName);
printf('请输入新的作者:');
scanf('%s', book.author);
printf('请输入新的出版社:');
scanf('%s', book.publisher);
printf('请输入新的图书种类:');
scanf('%s', book.bookkind);
printf('请输入新的图书种类编号:');
scanf('%s', book.bookkinds);
printf('请输入新的价格:');
scanf('%d', &book.quantity);
found = 1;
}
fprintf(tempFile, '%s\n', book.bookCode);
fprintf(tempFile, '%s\n', book.bookName);
fprintf(tempFile, '%s\n', book.author);
fprintf(tempFile, '%s\n', book.publisher);
fprintf(tempFile, '%s\n', book.bookkind);
fprintf(tempFile, '%s\n', book.bookkinds);
fprintf(tempFile, '%d\n', book.quantity);
}
fclose(file);
fclose(tempFile);
if (!found) {
printf('没有找到相关图书!\n');
remove('temp.txt');
return;
}
remove('book_storage.txt');
rename('temp.txt', 'book_storage.txt');
printf('修改成功!\n');
}
void searchBook() { char bookName[50]; printf('请输入要查找的书名:'); scanf('%s', bookName);
FILE *file = fopen('book_storage.txt', 'r');
if (file == NULL) {
printf('无法打开图书信息文件!\n');
return;
}
int found = 0;
Book book;
while (fscanf(file, '%s', book.bookCode) != EOF) {
fscanf(file, '%s', book.bookName);
fscanf(file, '%s', book.author);
fscanf(file, '%s', book.publisher);
fscanf(file, '%s', book.bookkind);
fscanf(file, '%s', book.bookkinds);
fscanf(file, '%d', &book.quantity);
if (strcmp(book.bookName, bookName) == 0) {
printf('图书编号:%s\n', book.bookCode);
printf('书名:%s\n', book.bookName);
printf('作者:%s\n', book.author);
printf('出版社:%s\n', book.publisher);
printf('图书种类:%s\n', book.bookkind);
printf('图书种类编号:%s\n', book.bookkinds);
printf('价格:%d\n', book.quantity);
found = 1;
}
}
fclose(file);
if (!found) {
printf('没有找到相关图书!\n');
}
}
void displayBook() { int i; for (i = 0; i < count; i++) { printf('图书编号:%s\n', bookList[i].bookCode); printf('书名:%s\n', bookList[i].bookName); printf('作者:%s\n', bookList[i].author); printf('出版社:%s\n', bookList[i].publisher); printf('图书种类:%s\n', bookList[i].bookkind); printf('图书种类编号:%s\n', bookList[i].bookkinds); printf('价格:%d\n', bookList[i].quantity);
printf('\n');
}
printf('图书种数:%d\n', count);
}
int main() { loadBookData();
while (1) {
printf('*****欢迎使用图书管理系统*****\n');
printf('1. 添加图书信息\n');
printf('2. 删除图书信息\n');
printf('3. 修改图书信息\n');
printf('4. 查找图书信息\n');
printf('5. 显示图书信息\n');
printf('0. 退出程序\n');
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:
displayBook();
break;
case 0:
saveBookData();
printf('感谢使用,再见!\n');
exit(0);
default:
printf('输入有误,请重新输入!\n');
break;
}
}
return 0;
} 分析以上代码内容:该代码是一个简单的图书管理系统,主要实现了以下功能:
- 从文件中读取图书信息到内存中。
- 将内存中的图书信息保存到文件中。
- 添加图书信息。
- 删除图书信息。
- 修改图书信息。
- 查找图书信息。
- 显示图书信息。
代码中使用了一个Book结构体来表示图书信息,包含图书编号、书名、作者、出版社、图书种类、图书种类编号和价格等字段。bookList是一个Book类型的数组,用于存储图书信息。count变量用于记录图书数量。
loadBookData函数用于从文件中读取图书信息到内存中。首先打开文件,然后使用fscanf函数逐行读取文件内容,并将读取到的数据存储到bookList数组中。最后关闭文件。
saveBookData函数用于将内存中的图书信息保存到文件中。首先打开文件,然后使用fprintf函数逐行将内存中的图书信息写入文件。最后关闭文件。
addBook函数用于添加图书信息。首先创建一个新的Book结构体,然后通过用户输入设置其各个字段的值。将新的图书信息添加到bookList数组中,并将count加1。
deleteBook函数用于删除图书信息。首先通过用户输入获取要删除的图书编号,然后遍历bookList数组,找到对应的图书信息并删除。删除操作是通过将后面的图书信息依次向前移动一个位置实现的。
modifyBook函数用于修改图书信息。首先通过用户输入获取要修改的图书编号,然后打开文件,并创建一个临时文件用于存储修改后的图书信息。遍历文件中的每一行,如果找到要修改的图书信息,则通过用户输入更新图书信息,并将更新后的信息写入临时文件中。最后关闭文件,并将临时文件重命名为原文件名,完成修改操作。
searchBook函数用于查找图书信息。首先通过用户输入获取要查找的书名,然后打开文件,遍历文件中的每一行,如果找到匹配的图书信息,则将其打印出来。最后关闭文件。
displayBook函数用于显示图书信息。遍历bookList数组,将每本图书的信息打印出来。
在main函数中,首先调用loadBookData函数加载图书信息。然后进入一个循环,根据用户的选择执行相应的操作。用户选择0时,调用saveBookData函数保存图书信息,并退出程序。
该代码的主要问题是没有对用户的输入进行合法性检查,容易导致程序崩溃或产生错误结果。另外,图书信息的存储方式比较简单,不支持图书信息的检索和排序等功能。可以考虑使用链表或树等数据结构来存储和管理图书信息,以提高程序的效率和功能。
原文地址: https://www.cveoy.top/t/topic/fvQl 著作权归作者所有。请勿转载和采集!