m0_60672151 2023-03-30 18:31 采纳率: 0%
浏览 105

基于链式存储的图书管理系统

基于链式存储的图书管理系统
6和7无法出现正确的结果
不知道哪里出错了

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
void menu()
{
    printf("|====================================|\n");
    printf("|======欢迎使用图书管理系统==========|\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("\n");
}
typedef struct
{
    char no[20];
    char name[50];
    float price;
}book;
typedef struct Book
{
    book data;
    struct Book *next;
}Book;
typedef struct
{
    Book* head;
    Book* tail;
    int length;
}SqList;
//初始化
int InitList_Sq(SqList *L)
{
    L->head=(Book*)malloc(sizeof(Book));
    L->head->next=NULL;
    L->tail=L->head;
    L->length=0;
    return 0;
}
//图书信息的输入
int Input_Sq(SqList *L)
{
    Book* p;
    while(1)
    {
        p=(Book*)malloc(sizeof(Book));
        if(!p)exit(-1);
        scanf("%s",p->data.no);
        scanf("%s",p->data.name);
        scanf("%f",&p->data.price);
        if(!strcmp(p->data.no,"0")&&!strcmp(p->data.name,"0")&&p->data.price==0)
        {
            break;
        }
        L->tail->next=p;
        L->tail=p;
        L->length++;
    }
    L->tail->next=NULL;
    return 0;
}
//图书信息的输出
int Output_Sq(SqList *L)
{
    Book* p;
    if(L->length==0)
    {
        printf("库中没有图书\n");
        return -1;
    }
    p=L->head->next;
    printf("%d\n",L->length);
    while(p!=NULL)
    {
        printf("%s ",p->data.no);
        printf("%s ",p->data.name);
        printf("%.02f\n",p->data.price);
        p=p->next;
    }
    return 0;
}
//按价格降序
int Sort_Sq(SqList *L)
{
    Book *p;
    for(int i=0;i<L->length;i++)
    {
        p=L->head->next;
        int j=0;
        while(p&&j<L->length-1-i)
        {
            if(p->data.price<p->next->data.price)
            {
                book t=p->data;
                p->data=p->next->data;
                p->next->data=t;
            }
            p=p->next;
            j++;
        }
    }
    return 0;
}
//图书信息的修改
int RevisePrice_Sq(SqList *L)
{
    int num=0;
    float Avg_price=0;
    Book *p,*q;
    p=L->head->next;
    q=L->head->next;
    while(p)
    {
        Avg_price+=p->data.price;
        num++;
        p=p->next;
    }
    Avg_price/=num;
    while(q)
    {
        if(q->data.price>=Avg_price)
        {
            q->data.price*=1.2;
        }
        else
        {
            q->data.price*=1.1;
        }
        q=q->next;
    }
    return 0;
}
//图书的逆序存储
int Reversed_Sq(SqList *L)
{
    Book* p;
    p=L->head->next;
    L->head->next=NULL;
    while(p)
    {
        Book* q;
        q=p->next;
        p->next=L->head->next;
        L->head->next=p;
        p=q;
    }
    return 0;
}
//查找最贵图书
int Expensive_Sq(SqList *L)
{
    Book *p;
    p=L->head->next;
    Book* max=p;
    Book* maxs[3];
    while(p)
    {
        if(p->data.price>max->data.price)
        {
            max=p;
        }
        p=p->next;
    }
    p=L->head->next;
    int k=0;
    while(p)
    {
        if(p->data.price==max->data.price)
        {
            maxs[k]=p;
            k++;
        }
        p=p->next;
    }
    printf("%d\n",k);
    int i=0;
    while(maxs[i]&&i<k)
    {
        printf("%s ",maxs[i]->data.no);
        printf("%s ",maxs[i]->data.name);
        printf("%.02f\n",maxs[i]->data.price);
        i++;
    }
    return 0;
}
//查找最爱图书
int Favour_Sq(SqList *L)
{
    Book* Fbook[5];
    int n;
    scanf("%d",&n);
    book Fbookname[n];
    for(int i=0;i<n;i++)
    {
        scanf("%s",Fbookname[i].name);
    }
    Book* p;
    int k=0;
    for(int j=0;j<n;j++)
    {
        k=0;
        p=L->head->next;
        while(p)
        {
            if(p->data.name==Fbookname[j].name)
            {
                Fbook[k]=p;
                k++;
            }
            p=p->next;
        }
        if(k==0)
        {
            printf("抱歉,没有找到您要的书!\n");
        }
        else
        {
            printf("%d\n",k);
            for(int i=0;i<k;i++)
            {
                printf("%s ",Fbook[i]->data.no);
                printf("%s ",Fbook[i]->data.name);
                printf("%.02f\n",Fbook[i]->data.price);
            }
        }
    }
    return 0;
}
//图书的按位置查找
int Select_Sq(SqList *L)
{
    int num;
    scanf("%d",&num);
    int add[num];
    int flag=0;
    Book *p,*Found;
    for(int i=0;i<num;i++)
    {
        scanf("%d",add+i);
    }
    for(int i=0;i<num;i++)
    {
        flag=0;
        p=L->head->next;
        while(p)
        {
            if(add[i]>0&&add[i]<L->length)
            {
                Found=p;
                flag=1;
            }
            p=p->next;
        }
        if(flag==0)
        {
            printf("查无此书!\n");
        }
        else
        {
            printf("%s ",Found->data.no);
            printf("%s ",Found->data.name);
            printf("%.02f\n",Found->data.price);
        }
    }
    return 0;
}
//新图书入库
int Insert_Sq(SqList *L)
{
    int n;
    scanf("%d",&n);
    book Ibook;
    scanf("%s",Ibook.no);
    scanf("%s",Ibook.name);
    scanf("%f",&Ibook.price);
    if(n<1||n>L->length)
    {
        printf("插入位置错误,请重新输入:\n");
    }
    else
    {
        Book *p;
        p=L->head;
        int j=0;
        while(p&&(j<n-1))
        {
            p=p->next;
            j++;
        }
        Book *s;
        s=(Book *)malloc(sizeof(Book));
        s->data=Ibook;
        s->next=p->next;
        p->next=s;
        L->length++;
    }
    return 0;
}
//旧图书出库
int Delete_Sq(SqList *L)
{
    int num;
    scanf("%d",&num);
    if(num>L->length||num<1)
    {
        printf("输入位置错误,请重新输入:\n");
    }
    else
    {
        Book* p;
        p=L->head;
        Book* q;
        int j=0;
        while(p&&(j<num-1))
        {
            p=p->next;
            j++;
        }
        q=p->next;
        p->next=q->next;
        free(q);
        L->length--;
    }
    return 0;
}
int main()
{
    menu();
    SqList *L;
    L=(SqList*)malloc(sizeof(SqList));
    InitList_Sq(L);
    int choice;
    scanf("%d",&choice);
    switch(choice)
    {
        case 1:Input_Sq(L);
        Output_Sq(L);
        break;
        case 2:Input_Sq(L);
        Sort_Sq(L);
        Output_Sq(L);
        break;
        case 3:Input_Sq(L);
        RevisePrice_Sq(L);
        Output_Sq(L);
        break;
        case 4:Input_Sq(L);
        Reversed_Sq(L);
        Output_Sq(L);
        break;
        case 5:Input_Sq(L);
        Expensive_Sq(L);
        break;
        case 6:Input_Sq(L);
        Favour_Sq(L);
        break;
        case 7:Input_Sq(L);
        Select_Sq(L);
        break;
        case 8:Input_Sq(L);
        Insert_Sq(L);
        Output_Sq(L);
        break;
        case 9:Input_Sq(L);
        Delete_Sq(L);
        Output_Sq(L);
        break;
        default:printf("输入有误,请重新输入\n");
    }
    return 0;
}

  • 写回答

2条回答 默认 最新

  • threenewbee 2023-03-30 19:34
    关注

    写了这么多才想起来找错误啊。
    要记住,写一点调试对了,再接着写。因为这样错误的范围就局限在你刚写的那些里面。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月30日

悬赏问题

  • ¥15 elementui上传结合oss接口断点续传,现在只差停止上传和继续上传,各大精英看下
  • ¥100 单片机hardfaulr
  • ¥20 手机截图相片分辨率降低一半
  • ¥50 求一段sql语句,遇到小难题了,可以50米解决
  • ¥15 速求,对多种商品的购买力优化问题(用遗传算法、枚举法、粒子群算法、模拟退火算法等方法求解)
  • ¥100 速求!商品购买力最优化问题(用遗传算法求解,给出python代码)
  • ¥15 虚拟机检测,可以是封装好的DLL,可付费
  • ¥15 kafka无法正常启动(只启动了一瞬间会然后挂了)
  • ¥15 Workbench中材料库无法更新,如何解决?
  • ¥20 如何推断此服务器配置