#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;

} 分析以上代码内容:该代码是一个简单的图书管理系统,主要实现了以下功能:

  1. 从文件中读取图书信息到内存中。
  2. 将内存中的图书信息保存到文件中。
  3. 添加图书信息。
  4. 删除图书信息。
  5. 修改图书信息。
  6. 查找图书信息。
  7. 显示图书信息。

代码中使用了一个Book结构体来表示图书信息,包含图书编号、书名、作者、出版社、图书种类、图书种类编号和价格等字段。bookList是一个Book类型的数组,用于存储图书信息。count变量用于记录图书数量。

loadBookData函数用于从文件中读取图书信息到内存中。首先打开文件,然后使用fscanf函数逐行读取文件内容,并将读取到的数据存储到bookList数组中。最后关闭文件。

saveBookData函数用于将内存中的图书信息保存到文件中。首先打开文件,然后使用fprintf函数逐行将内存中的图书信息写入文件。最后关闭文件。

addBook函数用于添加图书信息。首先创建一个新的Book结构体,然后通过用户输入设置其各个字段的值。将新的图书信息添加到bookList数组中,并将count加1。

deleteBook函数用于删除图书信息。首先通过用户输入获取要删除的图书编号,然后遍历bookList数组,找到对应的图书信息并删除。删除操作是通过将后面的图书信息依次向前移动一个位置实现的。

modifyBook函数用于修改图书信息。首先通过用户输入获取要修改的图书编号,然后打开文件,并创建一个临时文件用于存储修改后的图书信息。遍历文件中的每一行,如果找到要修改的图书信息,则通过用户输入更新图书信息,并将更新后的信息写入临时文件中。最后关闭文件,并将临时文件重命名为原文件名,完成修改操作。

searchBook函数用于查找图书信息。首先通过用户输入获取要查找的书名,然后打开文件,遍历文件中的每一行,如果找到匹配的图书信息,则将其打印出来。最后关闭文件。

displayBook函数用于显示图书信息。遍历bookList数组,将每本图书的信息打印出来。

在main函数中,首先调用loadBookData函数加载图书信息。然后进入一个循环,根据用户的选择执行相应的操作。用户选择0时,调用saveBookData函数保存图书信息,并退出程序。

该代码的主要问题是没有对用户的输入进行合法性检查,容易导致程序崩溃或产生错误结果。另外,图书信息的存储方式比较简单,不支持图书信息的检索和排序等功能。可以考虑使用链表或树等数据结构来存储和管理图书信息,以提高程序的效率和功能。

C语言图书管理系统:添加、删除、修改、查找、显示图书信息

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

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