m0_73740280 2023-03-05 18:15 采纳率: 86.8%
浏览 25
已结题

请问这个顺序表管理系统怎么修改

请问这个顺序表写的图书信息管理系统怎么修改,目前调试出来问题在insert

//////////////////////////////////////////////////////////////////////////
//(1)编译预处理命令
#include "stdio.h"
#include "stdlib.h"//分配内存 
#include "conio.h"
#include "string.h"
//////////////////////////////////////////////////////////////////////////
//(2)自定义数据类型(typedef)
//先定义图书数据的数据类型
typedef struct {
   int no;//number
   char name[32];//name
   float price;//price
}STD;
//再定义顺序表数据类型:
typedef  struct {
STD *data; //data是一个指向STD类型的指针变量
int  listSize;//表容量 
int  length;//实际数据个数 
}SQList;
//////////////////////////////////////////////////////////////////////////
//(3)各个函数的声明
int menu();
int initSqList(SQList *L,int max);//初始化 
int dispSqList(SQList L);
int insertSqList(SQList *L, int i, STD x);
int deleteSqList(SQList *L, int i, STD *x);
int locateSqList(SQList L, STD x);
int updateSqList(SQList L, int i, STD x);
int createSqList(SQList *L,int max,STD x);
//////////////////////////////////////////////////////////////////////////
//(4)主函数的定义
int main()
{
    int t=1,n, maxSize;// float fs=.0f;有时候不做这个浮点初始化操作程序会报错
    SQList L;STD s;


    while(t){
        n=menu( );//显示主菜单 
        switch(n){
        //初始化图书数据
        case 1:
            printf("请输入需要创建的图书数量:");
            scanf("%d",&maxSize);
            initSqList(&L, maxSize);

            break;

        //插入图书数据
        case 2:
            printf("请输入需要插入图书的编号、书名、价格,用空格隔开:\n");
            scanf("%d%s%f",&s.no,s.name, &s.price);
            int pos;
            printf("请输入插入位置:\n");
            scanf("%d",&pos);
            insertSqList(&L,pos,s);
            break;

        //删除图书数据
        case 3:
            printf("请输入删除图书书名:\n");
            scanf("%s",s.name);
            pos=locateSqList(L,s);
            if(pos==L.length+1) 
                printf("不存在该图书数据\n");
            else
            {
                deleteSqList(&L, pos, &s);
                printf("删除的图书数据为:%d %10s %7.2f\n", s.no,s.name, s.price);
            }

            break;

        //显示图书数据
        case 4:
            dispSqList(L);
            break;

        //更新图书数据
        case 5:
            printf("请输入需要修改的图书编号、名称、价格,用空格隔开:\n");
            scanf("%d%s%f",&s.no,s.name,&s.price);
            n=locateSqList(L,s);
            updateSqList(L,n,s);
        
            break;
        case 6:
            createSqList(&L,maxSize,s);
            break;

        //退出
        case 0:
            t = 0;
            break;

        //错误处理
        default: 
            printf("输入有误!\n");

        }
    }

}
//////////////////////////////////////////////////////////////////////////
//(5)各个函数的定义
int menu(){
    int n;
    //system("cls");//清屏
    printf("****welcome to book management system****\n");
    printf("   1、initialize    2、insert\n");
    printf("   3、delete        4、display\n");
    printf("   5、update        6、create\n");
    printf("   7、exit\n");
    printf("*****************************************\n");
    printf("choose function(0-6):");
    scanf("%d",&n);
    return n;
}

//初始化操作:1.分配内存 2.给结构体变量赋值(length,listsize) 
 
int initSqList(SQList *L,int max){
    L->data=(STD*)malloc(max*sizeof(STD));
    if(L->data=NULL){
        printf("申请内存失败!");
        exit(0);
    }
    L->listSize=max;
    L->length=0;
    return 1;
}
int dispSqList(SQList L){
    if(L.data=0){
        printf("没有信息!");
    }
    printf("编号 书名 价格\n ");
    printf("%d",L.length);
    for(int i=0;i<L.length;i++){
        printf("%d %s %f\n",L.data[i].no,L.data[i].name,L.data[i].price);
    }
    return 1;
}
int insertSqList(SQList *L, int i, STD x){
    if(i<1){
        printf("1error");
        return 0;
    }
    if(L->length>=L->listSize){
        printf("2error");
        return 0;
    }
    if(L->length=0){
        L->data[L->length]=x;
        ++L->length;
        return 1;
    }
    printf("%d",L->length);
    /*else {
        for(int k=L->length;k>=i-1;k--){
        L->data[k+1]=L->data[k];
    }
    L->data[i-1]=x;
    ++L->length;
    return 1;
    }*/
}
int deleteSqList(SQList *L, int i, STD *x){
    if(i<1||i>L->length)return 0;
    if(L->listSize>=L->length)return 0;
    *x=L->data[i-1];
    for(int k=i-1;k<L->length;k++){
        L->data[k]=L->data[k+1];        
    }
    L->length=L->length-1;
    return 1;
}

int locateSqList(SQList L, STD x){
    if(L.length==0)return 0;
    for(int i=0;i<L.length-1;i++){
        if(strcmp(L.data[i].name,x.name)==0&&L.data[i].no==x.no&&L.data[i].price==x.price)return i+1;
    }
}
int updateSqList(SQList L, int i, STD x){
    if(i<1||i>L.length-1)return 0;
    if(L.length==0)return 0;
    L.data[i-1]=x;
    return 1;
}
int createSqList(SQList *L,int maxSize,STD x){
    int n=0;
    char c;
    initSqList(L, maxSize);
    for(int i=0;i<maxSize;){
        printf("input %d\n",i+1);
        scanf("%d%s%f",&x.no,x.name,&x.price);
        getchar();
        insertSqList(L,++i,x);
    }
    return 1;
}


  • 写回答

3条回答 默认 最新

  • qzjhjxj 2023-03-06 00:40
    关注

    修改完善如下,供参考:

    //////////////////////////////////////////////////////////////////////////
    //1)编译预处理命令
    #include "stdio.h"
    #include "stdlib.h"//分配内存
    #include "conio.h"
    #include "string.h"
    #define  MaxSize  100     // 修改
    //////////////////////////////////////////////////////////////////////////
    //2)自定义数据类型(typedef)
    //先定义图书数据的数据类型
    typedef struct {
        int   no;//number
        char  name[32];//name
        float price;//price
    }STD;
    //再定义顺序表数据类型:
    typedef  struct {
        STD  *data; //data是一个指向STD类型的指针变量
        int  listSize;//表容量
        int  length;//实际数据个数
    }SQList;
    //////////////////////////////////////////////////////////////////////////
    
    //3)各个函数的声明
    int menu();
    int initSqList(SQList *L);//初始化 int initSqList(SQList *L,int max); 修改
    int dispSqList(SQList L);
    int insertSqList(SQList *L, int i, STD x);
    int deleteSqList(SQList *L, int i);
    int locateSqList(SQList L, STD x);
    int updateSqList(SQList L, int i,  STD x);
    int createSqList(SQList *L);//int createSqList(SQList *L,int max,STD x); 修改
    //////////////////////////////////////////////////////////////////////////
    
    //4)主函数的定义
    int main()
    {
        int t=1,n, maxSize;// float fs=.0f;有时候不做这个浮点初始化操作程序会报错
        SQList L; STD s;
        initSqList(&L);    //修改 初始化图书数据表
        while(t){
            n=menu( );//显示主菜单
            switch(n){
            case 1:
                createSqList(&L);  //修改
                break;
    
            //插入图书数据
            case 2:
                printf("请输入需要插入图书的编号、书名、价格,用空格隔开:\n");
                scanf("%d%s%f",&s.no,s.name, &s.price);
                int pos;
                printf("请输入插入位置:\n");
                scanf("%d",&pos);
                insertSqList(&L,pos,s);
                break;
    
            //删除图书数据
            case 3:
                printf("请输入删除图书书名:\n");
                scanf("%s",s.name);
                s.no = -1;
                pos=locateSqList(L,s);
                if(pos == -1)  //if(pos==L.length+1)
                    printf("不存在该图书数据\n");
                else
                {
                    printf("删除的图书数据为:%d %10s %7.2f\n",
                           L.data[pos].no,L.data[pos].name,L.data[pos].price);
                    deleteSqList(&L, pos);
                }
                break;
    
            //显示图书数据
            case 4:
                dispSqList(L);
                break;
     
            //更新图书数据
            case 5:
                do{
                    printf("请输入需要修改的图书 1.编号 或 2.名称\n");
                    scanf("%d", &maxSize);
                    switch(maxSize){
                        case 1:
                           printf("请输入编号:");
                           scanf("%d", &s.no);
                           strcpy(s.name,"\0");
                           break;
                        case 2:
                           printf("请输入书名:");
                           scanf("%s", s.name);
                           s.no = -1;
                           break;
                        default: break;
                    }
                }while (maxSize != 1 && maxSize != 2);
    
                n=locateSqList(L,s);
                if (n == -1)
                    printf("不存在该图书\n");
                else{
                    printf("请输入新的图书编号 名称 价格\n");
                    scanf("%d%s%f",&s.no,s.name,&s.price);
                    updateSqList(L,n,s);
                }
                break;
    
             //退出
            case 6:
                t = 0;
                break;
    
            //错误处理
            default: 
                printf("输入有误!\n");
            }
        }
    }
    //////////////////////////////////////////////////////////////////////////
    
    //5)各个函数的定义
    int menu(){
        int n;
        //system("cls");//清屏
        printf("****welcome to book management system****\n");
        printf("   1、create        2、insert\n");                //修改
        printf("   3、delete        4、display\n");
        printf("   5、update        6、exit\n");                  //修改
        //printf("   7、exit\n");                                 //修改
        printf("*****************************************\n");
        printf("choose function(1-6):");
        scanf("%d",&n);
        return n;
    }
     
    //初始化操作:1.分配内存 2.给结构体变量赋值(length,listsize)
    int initSqList(SQList *L){
        L->data=(STD*)malloc(MaxSize*sizeof(STD));
        if(L->data == NULL){   //if(L->data=NULL) 修改
            printf("申请内存失败!");
            exit(0);
        }
        L->listSize=MaxSize; // 修改
        L->length=0;
        return 1;
    }
    int dispSqList(SQList L){
        if(L.length == 0){ //if(L.data=0) 修改
            printf("没有信息!");
            return 0;      //修改 
        }
        printf("编号 书名 价格\n ");
        printf("%d\n",L.length);
        for(int i=0;i<L.length;i++){
            printf("%d %s %f\n",L.data[i].no,L.data[i].name,L.data[i].price);
        }
        return 1;
    }
    int insertSqList(SQList *L, int i, STD x){
        if(i < 1 || i > L->length + 1){
            printf("1error\n");
            return 0;
        }
        if(L->length>=L->listSize){
            printf("2error\n");
            return -1;
        }
        for(int k=L->length;k > i-1;k--)
            L->data[k]=L->data[k-1];
        L->data[i-1]=x;
        ++L->length;
        return 1;
    }
    int deleteSqList(SQList *L, int i){
        for(int k = i;k < L->length - 1;k++){
            L->data[k]=L->data[k+1];
        }
        L->length--;
        return 1;
    }
     
    int locateSqList(SQList L, STD x){
        int i;
        if(L.length == 0)
            return -1;    //return 0;
        for(i=0;i<L.length;i++){
            if(strcmp(L.data[i].name,x.name)==0||L.data[i].no==x.no)
            //if(strcmp(L.data[i].name,x.name)==0&&L.data[i].no==x.no&&L.data[i].price==x.price)
                return i; //i+1;
        }
        if (i >= L.length)
            return -1;
    }
    int updateSqList(SQList L, int i, STD x){
        L.data[i]=x;
        return 1;
    }
    int createSqList(SQList *L){  //修改
        int n = L->length, maxSize;
        STD x;
        if (L->length >= L->listSize){
            printf("表已满!\n");
            return 0;
        }
        else{
            printf("请输入需要创建的图书数量:");
            scanf("%d",&maxSize);
            for(int i = n;i < n + maxSize;i++){
                printf("input %d\n",i+1);
                scanf("%d%s%f",&x.no,x.name,&x.price);
                getchar();
                if (insertSqList(L,i+1,x) == -1) {
                   printf("表已满!\n");
                   break;
                }
            }
        }
        return 1;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月14日
  • 已采纳回答 3月6日
  • 创建了问题 3月5日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么