ડꫀꫀ ꪗꪮꪊ. 2022-12-16 16:46 采纳率: 88.6%
浏览 16
已结题

录入信息之后 调用其他功能就会闪退 不知道为什么 他的信息是会存入文件的


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#pragma warning(disable:4996)
typedef struct
{
    char number[10];//书号
    char name[20];//书名
    char author[20];//作者
    char publish[50];//出版社
    char time[20];//出版时间
    float price;
}mbook;
typedef struct
{
    int count;//书的本数
    mbook book[100];//最大可有 100 本书
}mlibrary;
mlibrary library;
void save()//保存图书信息。
{
    FILE* fp;
    if ((fp = fopen("library.doc", "w")) == NULL)
    {
        printf("\n 不能保存图书信息\n");
        return;
    }
    fwrite(&library.count, sizeof(int), 1, fp);
    fwrite(library.book, sizeof(library.book[0]), library.count, fp);
}
void putin() /*定义录入函数*/
{
    int y = 1;
    system("cls");
    while (y)
    {
        printf("\t 请输入您的书籍的书号:");
        scanf("%s", library.book[library.count].number);
        printf("\t 请输入书名:");
        scanf("%s", library.book[library.count].name);
        printf("\t 请输入作者名:");
        scanf("%s", library.book[library.count].author);
        printf("\t 请输入出版社:");
        scanf("%s", library.book[library.count].publish);
        printf("\t 请输入出版时间:");
        scanf("%s", library.book[library.count].time);
        printf("\t 请输入该书的价格:");
        fflush(stdin);
        scanf("%f", &library.book[library.count].price);
        library.count++;
        printf("\n 是否继续录入(1.继续;0,退出录入):");
        fflush(stdin);
        scanf("%d", &y);
        if (y != 1)
        {
            y = 0;
            break;
        }
    }
    save();
}
void lookup()
{
    int i;
    system("cls");
    printf("图书号\t 图书名\t 作者名\t 出版社\t 出版日期\t 图书价格\n");
    for (i = 0; i < library.count; i++)
    {
        printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n", library.book[i].number, library.book[i].name, library.book[i].author, library.book[i].publish, library.book[i].time, library.book[i].price);
    }
    fflush(stdin);
    getchar();
}
void search_by_name() /*定义按书名查询*/
{
    int i;
    char s2[20];
    int flag = 1;
    printf("\n 请输入要查询的书名: ");
    fflush(stdin);
    scanf("%s", s2);
    printf("图书号\t 图书名\t 作者名\t 出版社\t 出版日期\t 图书价格\n");
    for (i = 0; i < library.count; i++)
        if (strcmp(s2, library.book[i].name) == 0)
        {
            flag = 0;
            printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n", library.book[i].number, library.book[i].name, library.book[i].author, library.book[i].publish, library.book[i].time, library.book[i].price);
        }
    if (flag)
    {
        printf("cannot found!");
    }
    fflush(stdin);
    getchar();
}
void search_by_author() /*定义按作者名查询*/
{
    int i;
    char s3[20];
    int flag = 1;
    printf("请输入要查询的书的作者: ");
    fflush(stdin);
    scanf("%s", s3);
    printf("图书号\t 图书名\t 作者名\t 出版社\t 出版日期\t 图书价格\n");
    for (i = 0; i < library.count; i++)
        if (strcmp(s3, library.book[i].author) == 0)
        {
            flag = 0;
            printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n", library.book[i].number, library.book[i].name, library.book[i].author, library.book[i].publish, library.book[i].time, library.book[i].price);
        }
    if (flag)
    {
        printf("cannot found!");
    }
    fflush(stdin);
    getchar();
}
void search() /*定义查询函数*/
{
    int a;
    system("cls"); /*进行清屏*/
    printf("\t\t******************************\n");
    printf("开始查询\n");
    printf("\t\t\t1---------------search_by_name\n");
    printf("\t\t\t2---------------search_by_writer\n");
    printf("\t\t\t0---------------exit\n");
    printf("\t\t******************************\n");
    printf("\t\t 请选择你想要的查询方式:");
    fflush(stdin);
    scanf("%d", &a);
    switch (a)
    {
    case 1:
        search_by_name();
        break;
    case 2:
        search_by_author();
        break;
    case 0:
        return;
    }
}
void del() /*定义删除函数*/
{
    int i;
    char number[10];
    system("cls"); /*清屏*/
    printf("\n Please type in the number of the book you want to delete:");
        fflush(stdin);
    scanf("%s", number);
    for (i = 0; i < library.count; i++)
    {
        if (strcmp(number, library.book[i].number) == 0)break;
    }
    if (i != library.count)
    {
        for (; i < library.count - 1; i++)
        {
            strcpy(library.book[i].name, library.book[i + 1].name);
            strcpy(library.book[i].number, library.book[i + 1].number);
            strcpy(library.book[i].publish, library.book[i + 1].publish);
            strcpy(library.book[i].author, library.book[i + 1].author);
            strcpy(library.book[i].time, library.book[i + 1].time);
            library.book[i].price = library.book[i + 1].price;
        }
        library.count--;
    }
    else
        printf("\n cannot found!\n");
    save();
    fflush(stdin);
    getchar();
}
void update()//修改图书信息
{
    int i;
    char number[10];
    system("cls"); /*清屏*/
    printf("\n Please type in the number of the book you want to delete:");
    fflush(stdin);
    scanf("%s", number);
    for (i = 0; i < library.count; i++)
    {
        if (strcmp(number, library.book[i].number) == 0)
        {
            printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n");
            printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n", library.book[i].number, library.book[i].name, library.book[i].author, library.book[i].publish, library.book[i].time, library.book[i].price);
            break;
        }
    }
    if (i != library.count)
    {
        mbook book;
        printf("\n\t\t 请输入修改后此图书的信息\n");
        printf("\t 请输入图书号:");
        scanf("%s", book.number);
        printf("\t 请输入图书名:");
        scanf("%s", book.name);
        printf("\t 请输入作者名:");
        scanf("%s", book.author);
        printf("\t 请输入出版社:");
        scanf("%s", book.publish);
        printf("\t 请输入出版时间:");
        scanf("%s", book.time);
        printf("\t 请输入该书的价格:");
        fflush(stdin);
        scanf("%f", &book.price);
        strcpy(library.book[i].name, book.name);
        strcpy(library.book[i].number, book.number);
        strcpy(library.book[i].publish, book.publish);
        strcpy(library.book[i].author, book.author);
        strcpy(library.book[i].time, book.time);
        library.book[i].price = book.price;
        save();
    }
    else
        printf("\n cannot found!\n");
    fflush(stdin);
    getchar();
}
void main()
{
    int a;
    FILE* fp;
    if ((fp = fopen("library.doc", "r")) == NULL)
    {
        printf("\n 不能打开图书信息库\n");
        fp = fopen("library.doc", "w+");
        printf("\n 初始化图书信息库,初始化之后要重启程序\n");
        library.count = 0;
        fwrite(&library.count, sizeof(int), 1, fp);
        fclose(fp);
        return;
    }
    fread(&library.count, sizeof(int), 1, fp);
    fread(library.book, sizeof(library.book[0]), library.count, fp);
    fclose(fp);
    do
    {
        system("cls");
        printf("\n\n\n\n\n\t\t\t\t 图书信息管理系统\t\t\t\t\n");
        printf("\t\t*********************************************\n");
        printf("\t\t\t1 ------------------图书信息录入\n");
        printf("\t\t\t2 ------------------图书信息浏览\n");
        printf("\t\t\t3 ------------------图书信息查询\n");
        printf("\t\t\t4 ------------------图书信息删除\n");
        printf("\t\t\t5 ------------------图书信息修改\n");
        printf("\t\t\t0 -----------------退出图书管理系统\n");
        printf("\t\t*********************************************\n");
        printf("\t\tPlease Enter Choose: ");
        fflush(stdin);
        scanf("%d", &a);
        switch (a)
        {
        case 1:
            putin();
            break;
        case 2:
            lookup();
            break;
        case 3:
            search();
            break;
        case 4:
            del();
            break;
        case 5:
            update();
            break;
        case 0:
            printf("\n\n 退出\n\n");
            break;
        default:
            printf("\n 序号不对\n");
        }
    } while (a != 0);
    save();
}

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-12-16 18:43
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月2日
  • 已采纳回答 12月25日
  • 创建了问题 12月16日

悬赏问题

  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图