Eajiang 2024-01-06 19:48 采纳率: 50%
浏览 2

C语言信息管理系统问题


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_BOOKS 100

typedef struct
{
    int id;
    char title[50];
    char type[20];
    char author[50];
    char publisher[50];
    char isbn[20];
    int quantity;
} Book;

// 全局变量
Book books[MAX_BOOKS];
int bookCount = 0;

// 函数声明
void addBook();
void deleteBook();
void updateBook();
void findBook();
void listBooks();
void sortBooks();
void saveBooks();
void loadBooks();

int main()
{
    // 主菜单
    int choice;
    do
    {
        printf("\n 图书管理系统\n\n");
        printf("1. 录入图书信息\n");
        printf("2. 查找图书信息\n");
        printf("3. 增加图书信息\n");
        printf("4. 修改图书信息\n");
        printf("5. 删除图书信息\n");
        printf("6. 排序图书信息\n");
        printf("7. 显示图书信息\n");
        printf("8. 读取图书信息\n");
        printf("9. 保存图书信息\n");
        printf("0. 退出\n\n");
        printf("请选择操作:");
        scanf_s("%d", &choice);

        switch (choice)
        {
        case 1:
            addBook();
            break;
        case 2:
            findBook();
            break;
        case 3:
            addBook();
            break;
        case 4:
            updateBook();
            break;
        case 5:
            deleteBook();
            break;
        case 6:
            sortBooks();
            break;
        case 7:
            listBooks();
            break;
        case 8:
            loadBooks();
            break;
        case 9:
            saveBooks();
            break;
        case 0:
            break;
        default:
            printf("无效选择,请重新输入。\n");
        }
    } while (choice != 0);

    return 0;
}

// 录入图书信息
void addBook()
{
    Book book;

    printf("图书编号:");
    scanf_s("%d", &book.id);

    printf("图书名称:");
    scanf_s("%s", book.title);

    printf("图书类型:");
    scanf_s("%s", book.type);

    printf("作者:");
    scanf_s("%s", book.author);

    printf("出版社:");
    scanf_s("%s", book.publisher);

    printf("ISBN 号:");
    scanf_s("%s", book.isbn);

    printf("库存数量:");
    scanf_s("%d", &book.quantity);

    books[bookCount] = book;
    bookCount++;
}

// 查找图书信息
void findBook()
{
    int id;
    printf("请输入图书编号:");
    scanf_s("%d", &id);
    for (int i = 0; i < bookCount; i++)
    {
        if (books[i].id == id)
        {
            printf("图书编号:%d\n", books[i].id);
            printf("图书名称:%s\n", books[i].title);
            printf("图书类型:%s\n", books[i].type);
            printf("作者:%s\n", books[i].author);
            printf("出版社:%s\n", books[i].publisher);
            printf("ISBN 号:%s\n", books[i].isbn);
            printf("库存数量:%d\n", books[i].quantity);
            return;
        }
    }
    printf("未找到相关图书信息。\n");
}

// 增加图书信息
void updateBook()
{
    int id;
    printf("请输入图书编号:");
    scanf_s("%d", &id);
    for (int i = 0; i < bookCount; i++)
    {
        if (books[i].id == id)
        {
            printf("图书编号:");
            scanf_s("%d", &books[i].id);

            printf("图书名称:");
            scanf_s("%s", books[i].title);

            printf("图书类型:");
            scanf_s("%s", books[i].type);

            printf("作者:");
            scanf_s("%s", books[i].author);

            printf("出版社:");
            scanf_s("%s", books[i].publisher);

            printf("ISBN 号:");
            scanf_s("%s", books[i].isbn);

            printf("库存数量:");
            scanf_s("%d", &books[i].quantity);

            return;
        }
    }
    printf("未找到相关图书信息。\n");
}

// 修改图书信息
void deleteBook()
{
    int id;
    printf("请输入图书编号:");
    scanf_s("%d", &id);
    for (int i = 0; i < bookCount; i++)
    {
        if (books[i].id == id)
        {
            for (int j = i; j < bookCount - 1; j++)
            {
                books[j] = books[j + 1];
            }
            bookCount--;
            return;
        }
    }
    printf("未找到相关图书信息。\n");
}

// 排序图书信息
void sortBooks()
{
    for (int i = 0; i < bookCount - 1; i++)
    {
        for (int j = 0; j < bookCount - i - 1; j++)
        {
            if (books[j].id > books[j + 1].id)
            {
                Book temp = books[j];
                books[j] = books[j + 1];
                books[j + 1] = temp;
            }
        }
    }
}

// 显示图书信息
void listBooks()
{
    printf("图书编号\t图书名称\t图书类型\t作者\t出版社\tISBN 号\t库存数量\n");
    for (int i = 0; i < bookCount; i++)
    {
        printf("%d\t%s\t%s\t%s\t%s\t%s\t%d\n", books[i].id, books[i].title, books[i].type, books[i].author, books[i].publisher, books[i].isbn, books[i].quantity);
    }
}

// 读取图书信息
#
void loadBooks()
{
    FILE* file = fopen_s("book.txt", "r");
    if (file == NULL)
    {
        printf("无法打开文件。\n");
        return;
    }
    while (!feof(file))
    {
        Book book;
        fscanf_s(file, "%d %s %s %s %s %s %d", &book.id, book.title, book.type, book.author, book.publisher, book.isbn, &book.quantity);
        books[bookCount] = book;
        bookCount++;
    }
    fclose(file);
}

// 保存图书信息
void saveBooks()
{
    FILE* file = fopen_s("book.txt", "w");
    if (file == NULL)
    {
        printf("无法打开文件。\n");
        return;
    }
    for (int i = 0; i < bookCount; i++)
    {
        fprintf(file, "%d %s %s %s %s %s %d\n", books[i].id, books[i].title, books[i].type, books[i].author, books[i].publisher, books[i].isbn, books[i].quantity);
    }
    fclose(file);
}

img

这个问题怎么解决啊,有人帮我看看吗

  • 写回答

2条回答 默认 最新

  • Soulic 2024-01-06 20:16
    关注

    fopen_s的原型是errno_t fopen_s( FILE** pFile, const char *filename, const char *mode );

    FILE* file;
    errno_t err = fopen_s(&file, "book.txt", "w");
    if (err != 0) {
      printf("无法打开文件。\n");
      return;
    }
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 1月6日

悬赏问题

  • ¥15 Opencv(C++)异常
  • ¥15 VScode上配置C语言环境
  • ¥15 汇编语言没有主程序吗?
  • ¥15 这个函数为什么会爆内存
  • ¥15 无法装系统,grub成了顽固拦路虎
  • ¥15 springboot aop 应用启动异常
  • ¥15 matlab有关债券凸性久期的代码
  • ¥15 lvgl v8.2定时器提前到来
  • ¥15 qtcp 发送数据时偶尔会遇到发送数据失败?用的MSVC编译器(标签-qt|关键词-tcp)
  • ¥15 cam_lidar_calibration报错