紫熙462 2022-01-03 11:12 采纳率: 50%
浏览 160
已结题

书店存货清单用结构体链表文件

书店通常使用个人电脑设置一个清单来管理书籍的存货情况,该清单记录每本书籍的书名,作者,出版社,在清单中的位置等信息。当顾客想要买某本书时,只要输入书籍的名称和作者,系统就会显示该书籍是否在清单中,如果书籍在清单中,系统会显示书籍的详细信息以及库存数量,如果不在清单中,也会显示相应的提示信息。如果顾客想买的书籍数量在库存的范围内,系统会计算总价格并显示出来,否则,会提示:所需数量不在库存范围内,现在该书籍的数量。
根据以上的分析,编程要求:
1.用结构体自行定义几本书籍,要求包括书籍名称,作者,出版社,出版日期,价格,在目录中的位置;并将书籍信息保存至文件。
2.使用链表实现书籍信息修改、删除操作,并将更新后的信息保存至文件;
3.当从键盘输入某本书的名称和作者姓名,如果能查询到则显示该书籍的所有信息,并提示“请输入所需数量”,如果所需数量在库存范围内,则显示总价,否则,显示“所需数量不在库存范围内”,接着继续提示顾客是否还想买其他书籍,如果输入“y”或“Y”表示继续输入下一本书的名称和作者姓名,进行下一轮查询;如果不能查询到该书籍,则显示“谢谢,再见!”,依次类推,不断循环。
4.最后要显示顾客想购买 的书籍的信息及总价。

  • 写回答

1条回答 默认 最新

  • 关注

    参考:

    #include<stdio.h> //预处理
    #include<string.h>
    #include<stdlib.h>
    #include<conio.h>//定义了通过控制台进行数据输入和数据输出的函数
    //定义结构体
    struct book
    {
    int id;
    char name[31]; //书名
    char author[27]; //作者
    char publish[31];//出版社
    int store; //库存
    int total; //总数
    int user[10];
    int days[10];
    }books[100];
    int count=0;
    //显示整体标题标题函数
    void page_title(char *menu_item)
    {
    printf("\t\t使用图书馆管理系统\n\n-%s-\n\n",menu_item);
    }
    //等待返回函数
    void return_confirm()
    {
    printf("\n请按任意键返回……\n");
    getch();
    }
    void book_add()
    {
        int i;
        int n;
        system("cls"); //清屏
        page_title("注册新书");
        for(i=count;i<12;i++)
        {
            printf("序号:");
            scanf("%d",&books[count].id);
            printf("书名:");
            scanf("%s",&books[count].name);
            printf("作者:");
            scanf("%s",&books[count].author);
            printf("出版社:");
            scanf("%s",&books[count].publish);
            printf("数量:");
            scanf("%d",&books[count].total);
            books[i].store=books[count].total;
            printf("\n");
            count++;
            printf("输入0退出,非零继续新增:");
            scanf("%d",&n);
            if(n==0)
                break;
        
        }
    }
    
    book_show()
    {
    int i,flag=0;
    system("cls");
    for(i=0;i<100;i++)
    {
    if(strlen(books[i].publish)!=0)
    {
    printf("编号:%d\t ",books[i].id);
    printf("书名:%s\t ",books[i].name);
    printf("作者:%s\t ",books[i].author);
    printf("出版社:%s\t ",books[i].publish);
    printf("库存:%d\t",books[i].store);
    printf("总数:%d\n\n",books[i].total);
    flag=1;
    }
    }
    if(flag==0)
    {
    printf("没有找到相关书籍\n");
    }
    getch();
    return i; }
    int book_search()
    {
        int n,i,flag=0;
        char nam[30];
        system("cls");
        printf("请输入书名:");
        scanf("%s",&nam);
        for(i=0;i<100;i++)
        {
            if(strcmp(books[i].name,nam)==0)
            {
                printf("序号:%d\t ",books[i].id);
                printf("书名:%s\t ",books[i].name);
                printf("作者:%s\t ",books[i].author);
                printf("出版社:%s\t ",books[i].publish);
                printf("存数:%d\t",books[i].store);
                printf("总数:%d\n",books[i].total);
                n=i;
                flag=1;
                getch();
                break;
            }
        }
        
        if(flag==0)
        {
        printf("\n没有找到相关书籍\n");
        getch();
        return -1;
        }
        return n;
    }
    
    book_edit()
    {
    int i,id_change;
    system("cls");
    page_title("修改图书信息:");
    printf("输入要修改的图书id:");
    scanf("%d",&id_change);
    for(i=0;i<100;i++)
    {
    if(books[i].id==id_change)
    {
    printf("修改书名:");
    scanf("%s",&books[i].name);
    printf("修改作者:");
    scanf("%s",&books[i].author);
    printf("修改出版社:");
    scanf("%s",&books[i].publish);
    printf("修改数量:");
    scanf("%d",&books[i].total);
    printf("修改图书信息成功\n");
    books[i].store=books[i].total;
    return i;
    }
    }
    
    printf("\n没有找到相关信息\n");
    getch();
    return -1;
    }
    
    int book_del()
    {
    int i,num,j;
    system("cls");
    page_title("删除图书");
    printf("输入所要删除的书的id:");
    scanf("%d",&num);
    for(i=0;i<100;i++)
    {
    if(books[i].id==num)
    {
    for(j=i;j<100;j++)
    {
    books[j].id=books[j+1].id;
    strcpy(books[j].name,books[j+1].name);
    strcpy(books[j].publish,books[j+1].publish);
    printf("该书已经删除了!\n");
    getch();
    return i;
    }
    }
    }
    printf("未找到相关记录\n");
    getch();//暂停程序运行,等待键盘IO输入
    return -1;
    }
    
    //借书
    book_out()
    {
    int n,s,i,d;
    system("cls");
    page_title("借阅图书");
    n=book_search();
    if(n!=-1&&books[n].store>0)
    {
    //赋初值,全为零
    for(i=0;i<10;i++)
    {
    books[n].user[i]=0;
    books[n].days[i]=0;
    }
    printf("借书证序号:");
    scanf("%d",&s);
    printf("输入可借天数:");
    scanf("%d",&d);
    books[n].user[0]=s;
    books[n].days[0]=d;
    books[n].store--;
    
    // 书上这有何意义
    // for(i=0;i<10;i++)
    // {
    // if(books[n].user[i]==0)
    // {
    // books[n].user[i]=0;
    // books[n].days[i]=0;
    // break;
    // }
    // books[n].store--;
    // }
    
    }
    
    else if(n!=-1&&books[n].store==0)
    {
    printf("此书已经完全借完\n\n");
    getch();
    }
    else;
    return_confirm();
    }
    
    //归还图书
    void book_in()
    {
    int n,s,i;
    page_title("归还图书");
    n=book_search();
    printf("%d",n);
    if(n!=-1&&books[n].store<books[n].total)
    {
    printf("借阅图书证列表\n");
    for(i=0;i<10;i++)
    {
    if(books[n].user!=0)
    {
    printf("[%d]--%d天\n",books[n].user[i],books[n].days[i]);
    }
    printf("输入借书证号:");
    scanf("%d",&s);
    for(i=0;i<10;i++)
    {
    if(books[n].user[i]==s)
    {
    books[n].store++;
    }
    }
    }
    }
    
    if(n!=-1&&books[n].store==books[n].total)
    {
    printf("全部归还\n");
    }
    else if(n!=-1&&books[n].store<books[n].total)
    {
    printf("归还成功\n");
    }
    else
    ;
    return_confirm();
    }
    
    main()
    {
    menu:page_title("操作选单");
    printf("用数字选择操作\n\n");
    printf("\t\t1注册新书\t\t2显示图书\n");
    printf("\t\t3查询图书信息\t\t4修改图书信息\n");
    printf("\t\t5删除图书\t\t6借阅图书\n");
    printf("\t\t7归还图书\t\t8退出系统\n");
    printf("请按数字键:\n");
    switch(getchar())
    {
    case'1': book_add();break;
    case'2': book_show();break;
    case'3': book_search();break;
    case'4': book_edit();break;
    case'5': book_del();break;
    case'6': book_out();break;
    case'7': book_in();break;
    case'8': exit(0);
    }
    fflush(stdin);
    goto menu;//goto跳转语句
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月12日
  • 已采纳回答 1月4日
  • 创建了问题 1月3日

悬赏问题

  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答