| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 361 人关注过本帖
标题:求助:数据结构中顺序表编程问题·
只看楼主 加入收藏
inopp111
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-10-14
收藏
 问题点数:0 回复次数:1 
求助:数据结构中顺序表编程问题·
要编一个简略的仓库信息管理  包含货品编号 名称 数量  用顺序表实现   我很纠结啊~~~~~~~~~
这是我的程序  但运行后 入库操作总有问题  哪位能帮忙看下·能解决的我将万分感激

#include"stdio.h"                                                             //包含头文件声明
#include"malloc.h"
#include"string.h"

#define MAXSIZE 100  

typedef struct                                                                 //数据类型定义
{
    int number,amount;
    char name[20];
}datatype;
                                                         
typedef struct                                                                 //顺序表类型定义
{
    datatype data[MAXSIZE];   
    int last;                  
}SqList;



void menu();                                                                   //函数原型声明
SqList *Init_SqList();
void Input(SqList *L);
void Output(SqList *L);
int Locate_SqList(SqList *L,datatype element);
int Insert_SqList(SqList *L,int i,datatype element);
int Delete_SqList(SqList *L,int i);
void Ruku(SqList *L,datatype element);
void Chuku(SqList *L,datatype element);


main()                                                                          //主函数
{
    int i,sel;
    SqList *L;
    datatype element;
    menu();
    printf("输入您的选择,按0退出:\n");
    scanf("%d",&sel);
    while(sel)     /*当sel不为0*/
    { switch(sel)
    {
        case 1: L=Init_SqList();
                Input(L);
                break;
        case 2: printf("请输入您要添加的货品信息:\n");
                printf("请依次输入产品货号,名称,数量,以空格键隔开:\n");
                scanf("%d%s%d",&element.number,element.name,&element.amount);
                Ruku(L,element);
                Output(L);
                break;
        case 3: printf("请输入您要删除的货品信息:\n");
                printf("请依次输入产品货号,名称,以空格键隔开:\n");
                scanf("%d%s",&element.number,element.name);
                Chuku(L,element);
                Output(L);
                break;
        case 4: printf("请输入您要查询的货品名称:\n");
                scanf("%s",element.name);
                i=Locate_SqList(L,element);
                if(i==0)
                    printf("您要查找的货品信息不存在!\n");
                else
                {
                    printf("您要查找的货品信息如下:\n");
                    printf("货品编号   名称   数量\n");
                    printf("%d%10s%10d",L->data[i-1].number,L->data[i-1].name,L->data[i-1].amount);
                }
                break;
        case 5: Output(L);
                break;
    }
    menu();
    printf("输入您的选择,按0退出:\n");
    scanf("%d",&sel);
    }
}

void menu()                                                                   //菜单输出
{
        printf("\n   仓库货品信息管理系统 by bluemeteor  \n");
        printf("\n----主菜单----\n");
        printf("(1) 初始化及信息录入...\n");
        printf("(2) 货品入库(amount正增负减)...\n");
        printf("(3) 删除货品信息...\n");
        printf("(4) 查询货品信息...\n");
        printf("(5) 显示货品信息... \n");
        printf("(0) 退出系统...\n");
        
}

SqList *Init_SqList()                                                          //初始化...
{
    SqList *L;
    L=(SqList*)malloc(sizeof(SqList));
    L->last=-1;
    return L;
}

void Input(SqList *L)                                                        //信息录入...
{
    int n,i;
    printf("请输入要输入的货品种数:\n");
    scanf("%d",&n);
    printf("请依次输入产品货号,名称,数量,以空格键隔开:\n");
    for(i=0;i<n;i++)
    {scanf("%d%s%d",&L->data[i].number,L->data[i].name,&L->data[i].amount);}
    L->last=n-1;
}

void Output(SqList *L)                                                      //显示货品信息...                                   
{
    int i;
    for(i=0;i<=L->last;i++)
    {
        printf("%d%10s%10d\n",L->data[i].number,L->data[i].name,L->data[i].amount);
    }
}

int Locate_SqList(SqList *L,datatype element)                                //查询货品信息...
{
    int i=0;
    if(L->last<0)
    {printf("顺序表为空表,无法进行查找操作!\n");return(-1);}
    while(i<=L->last&&L->data[i].number!=element.number&&strcmp(L->data[i].name,element.name)!=0)
        i++;
    if(i>L->last)
        return(0);
    else return(i+1);
}

int Insert_SqList(SqList *L,int i,datatype element)                           //插入函数
{
    int j;
    if(L->last==MAXSIZE-1)
    {printf("表满无法插入新元素!\n");return(-1);}
    if(i<1||i>L->last+1)
    {printf("插入位置错误!\n");return(0);}
    for(j=L->last;j>=i-1;j--)
    {
        L->data[j+1].number=L->data[j].number;
        L->data[j+1].amount=L->data[j].amount;
        strcpy(L->data[j+1].name,L->data[j].name);
    }
    L->data[i-1].number=element.number;
    L->data[i-1].amount=element.amount;
    strcpy(L->data[i-1].name,element.name);
    L->last++;
    return(1);
}

void Ruku(SqList *L,datatype element)                            //货品入库(amount正增负减)...                              
{
    int i,j;
    i=Locate_SqList(L,element);//调用查找函数
    if(i==0)
    {
     while(i<=L->last&&L->data[i].number<element.number)
       i++;
     j=Insert_SqList(L,i+1,element);//调用插入函数
    }
    else L->data[i-1].amount+=element.amount;
}

int Delete_SqList(SqList *L,int i)                                              //删除函数
{
    int j;
    if(L->last<0)
    {printf("顺序表为空表,无法进行删除操作!\n");return(-1);}
    if(i<1||i>L->last+1)
    {printf("删除位置有误!\n");return(0);}
    for(j=i;j<=L->last;j++)
        L->data[j-1]=L->data[j];
    L->last--;
    return(1);
}

void Chuku(SqList *L,datatype element)                                    //删除货品信息...
{                                 
    int i;
    i=Locate_SqList(L,element);//调用查找函数
    Delete_SqList(L,i);//调用删除函数
}

搜索更多相关主题的帖子: 顺序 数据结构 
2009-10-14 11:35
快速回复:求助:数据结构中顺序表编程问题·
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018688 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved