ડꫀꫀ ꪗꪮꪊ. 2022-12-22 21:20 采纳率: 88.6%
浏览 29
已结题

C语言 图书管理系统 BUG

img


在输入一种图书之后 他就直接跳过了 “判断是否继续输入”和“输入书号” 这两个选项直接来到了输入书名的选项,我调试了之后也没发现问题~ 望高人指点!


#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; //库存
    char leibie[30];//类别
}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);
        printf("\t 请输入该书的类别:");
        scanf("%f", &library.book[library.count].leibie);
        library.count++;
        fflush(stdin);
        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 图书剩余量\t 图书种类\n");
    for (i = 0; i < library.count; i++)
    {
        printf("%s\t%s\t%s\t%s\t%s\t%6.2f\t%s\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, library.book[i].leibie);
    }
    fflush(stdin);
    getchar();
    system("pause");
}
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 图书剩余量\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\\t%s\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, library.book[i].leibie);
        }
    if (flag)
    {
        printf("cannot found!");
    }
    fflush(stdin);
    getchar();
    system("pause");
}
void search_by_author() /*定义按作者名查询*/
{
    int i;
    char s3[20];
    int flag = 1;
    printf("请输入要查询的书的作者: ");
    fflush(stdin);
    scanf("%s", s3);
    printf("图书号\t 图书名\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\\t%s\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, library.book[i].leibie);
        }
    if (flag)
    {
        printf("cannot found!");
    }
    fflush(stdin);
    getchar();
    system("pause");
}
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);
            strcpy(library.book[i].leibie, library.book[i + 1].leibie);
            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 图书剩余量\t 图书种类\n");
            printf("%s\t%s\t%s\t%s\t%s\t%6.2f\\t%s\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, library.book[i].leibie);
            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);
        printf("\t 请输入该书的种类:");
        scanf("%s", book.leibie);

        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);
        strcpy(library.book[i].leibie, book.leibie);
        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条回答 默认 最新

  • 会修bug的猫 2022-12-22 22:04
    关注

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月30日
  • 已采纳回答 12月22日
  • 创建了问题 12月22日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改