qq_31055913 2016-02-20 17:52 采纳率: 100%
浏览 1647
已采纳

本人初学C语言仿照网上的程序自行写了点,可是存在一些错误,还望大神指点!

#include
#include
#include

typedef struct store//定义商品
{

int number; //商品序号
char name[10]; //商品名称及型号
int shuliang; //商品数量
int jiage; //商品价格
int kucun; //商品库存
int zonge; //销售总额
char riqi; //销售日期
}store;

typedef struct unit
{
store date;
struct unit*next;
}unit;

unit* build()
{

unit p;

if((p=(unit
)malloc(sizeof(unit)))==NULL)

{
printf("=>初始化失败!");

return 0;

}

else

{
p->next=NULL;

p->date.number=0;//头结点存放商品数量

printf("初始化成功!\n");

return p;

}
}

void sole(unit head)//卖出商品
{

unit *p,*q;

int m,n=0;
q=head->next;

p=(unit
)malloc(sizeof(unit));

printf("=>商品编号:\n");
scanf("%d",&m);
fflush(stdin);
p->date.number;
printf("=>卖出商品及型号:\n");

scanf("%s",&m);
fflush(stdin);
p->date.number=m;
printf("=>请输入数量!\n");
scanf("%d",&m);
fflush(stdin);
p->date.shuliang=m;

printf("=>请输入价格!\n");

scanf("%d",&m);
fflush(stdin);

p->date.jiage=m;

printf("=>请输入库存!\n");

scanf("%d",&m);
fflush(stdin);

p->date.kucun=m;
printf("=>请输入日期!\n");

scanf("%s",&m);
fflush(stdin);

p->date.riqi=m;

p->date.zonge=((p->date.shuliang)*(p->date.jiage));

q=head->next;

head->next=p;
p->next=q;

head->date.number++;
}
void deletion(unit *head)//删除订单
{

unit *p=head->next,*q=head;

char N[10];

printf("=>请输入你想删除订单!\n");

gets(N);
fflush(stdin);

if(p==NULL)

printf("=>系统无订单可删除!\n");

while(p)

{

if(strcmp(p->date.name,N)==0)

{

q->next=p->next;

head->date.number--;

printf("=>删除%s成功!\n",p->date.name);

free(p);

break;

}
else

{

p=p->next;

q=q->next;

if(p==NULL)

printf("=>你要删除的订单不存在,删除失败!\n");

}

}

}
int display(unit *head)//显示商品订单信息
{

unit *p=head->next;

int m,n=0;

if(p==NULL)

{

printf("=>系统无订单!\n");

return 0;
}

while(n==0)

{
printf("=>请选择你的操作!\n");

printf("=>\t\t\t1.显示所有\t2.按编号查找\t3.返回主菜单\n");
scanf("%d",&m);

fflush(stdin);
switch(m)

{

case 1:printf("\n=>该系统拥有%d份订单!\n\n",head->date.number);

p=head->next;

printf("\t商品名称及型号\t数量\t价格\t总额\t日期\n\n");

while(p)

{
printf("\t%s\t%d\t%d\t%d\t%s\n",p->date.name,p->date.shuliang,p->date.jiage,p->date.zonge,p->date.riqi);

p=p->next;

}

break;
case 2:printf("=>请输入查找编号!\n");

scanf("%d",&m);

fflush(stdin);

p=head->next;

while(p)

{

if(p->date.number==m)

{

printf("\t商品名称及型号\t数量\t价格\t总额\t日期\n\n");

printf("\t%s\t%d\t%d\t%d\t%s\n",p->date.name,p->date.shuliang,p->date.jiage,p->date.zonge,p->date.riqi);
break;

}
else

{

p=p->next;

if(p==NULL)

printf("=>你要查的订单不存在!\n");

}

}

break;

case 3:n=1;break;

}

}

return 1;
}
void menu()
{
printf("\t\t\t1.新建系统\t2.添加订单\n\t\t\t3.删除订单\t4.查看信息\n\t\t\t5.退出系统\n");

printf("=>请选择你的操作!\n");
}

void main()
{

int m=0,n, i;

unit head;
printf("\t\t\t
欢迎使用商品订单管理系统 * \n");
//if((head=read())==0)

//{

printf("=>是否新建?\n");

printf("\t\t\t是(1)\t\t否(2)\n");

scanf("%d",&i);

fflush(stdin);

if(i==1)

head=build();

else if(i==2)

exit(1);

//}

else

printf("=>信息导入成功!");
while(m==0)

{

menu();

scanf("%d",&n);

fflush(stdin);

switch(n)

{

case 1:head=build();
break;

case 2:sole(head);
break;

case 3:deletion(head);
break;

case 4:display(head);
break;

case 5:m=1;
break;

}

}
}

  • 写回答

5条回答

  • hyb1996 2016-02-21 13:48
    关注

    我把错误都修改并在注释中说明了,可以运行。不懂的地方追问,加油!
    图片说明

     #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     typedef struct store //定义商品 
    {
    
        int number; //商品序号
        char name[10]; //商品名称及型号
        int shuliang; //商品数量
        int jiage; //商品价格
        int kucun; //商品库存
        int zonge; //销售总额
        //日期应该是一个字符串,即char数组 
        char riqi[10]; //销售日期
    }
    store;
    typedef struct unit {
        store date;
        struct unit * next;
    }
    unit;
    unit * build() {
        //这里要返回的是指针,所以要加*,即unit *p 
        unit *p;
        //注意,malloc返回的是void指针
        //这里把(unit)改为(unit*) 
        if ((p = (unit*) malloc(sizeof(unit))) == NULL)
    
        {
            printf("=>初始化失败!");
            //初始化失败应该返回空指针NULL而不是0 
            return NULL;
    
        }
    
        else
    
        {
            p ->next = NULL;
    
            p ->date.number = 0; //头结点存放商品数量
            printf("初始化成功!\n");
    
            return p;
    
        }
    }
    //传入的head改为指针,即*head,原因在后面 
    void sole(unit *head) //卖出商品
    {
    
        unit * p,
        *q;
    
        int m,
        n = 0;
        //注意,->运算符是对指针进行的 ,因此head必须是指针,否则要改为head.next 
        q = head->next;
    
        p = (unit*) malloc(sizeof(unit));
    
        printf("=>商品编号:\n");
        scanf("%d", &m);
        fflush(stdin);
        p->date.number;
        printf("=>卖出商品及型号:\n");
    
        //m是一个int整数,而%s是对字符串的输入,要输入名称型号,可以用以下语句 
        scanf("%s", p->date.name);
        fflush(stdin);
        p->date.number = m;
        printf("=>请输入数量!\n");
        scanf("%d", &m);
        fflush(stdin);
        p->date.shuliang = m;
    
        printf("=>请输入价格!\n");
    
        scanf("%d", &m);
        fflush(stdin);
    
        p->date.jiage = m;
    
        printf("=>请输入库存!\n");
    
        scanf("%d", &m);
        fflush(stdin);
    
        p->date.kucun = m;
        printf("=>请输入日期!\n");
    
        //m是一个int整数,而%s是对字符串的输入,不能再这里用&m,可以直接用下面的语句输入日期 
        scanf("%s", p->date.riqi);
        fflush(stdin);
    
    
        p->date.zonge = ((p->date.shuliang) * (p->date.jiage));
    
        q = head->next;
    
        head->next = p;
        p->next = q;
    
        head->date.number++;
    }
    void deletion(unit * head) //删除订单
    {
    
        unit * p = head->next,
        *q = head;
    
        char N[10];
    
        printf("=>请输入你想删除订单!\n");
    
        gets(N);
        fflush(stdin);
    
        if (p == NULL)
    
        printf("=>系统无订单可删除!\n");
    
        while (p)
    
        {
    
            if (strcmp(p->date.name, N) == 0)
    
            {
    
                q->next = p->next;
    
                head->date.number--;
    
                printf("=>删除%s成功!\n", p->date.name);
    
                free(p);
    
                break;
    
            } else
    
            {
    
                p = p->next;
    
                q = q->next;
    
                if (p == NULL)
    
                printf("=>你要删除的订单不存在,删除失败!\n");
    
            }
    
        }
    
    }
    int display(unit * head) //显示商品订单信息
    {
    
        unit * p = head->next;
    
        int m,
        n = 0;
    
        if (p == NULL)
    
        {
    
            printf("=>系统无订单!\n");
    
            return 0;
        }
    
        while (n == 0)
    
        {
            printf("=>请选择你的操作!\n");
    
            printf("=>\t\t\t1.显示所有\t2.按编号查找\t3.返回主菜单\n");
            scanf("%d", &m);
    
            fflush(stdin);
            switch (m)
    
            {
    
            case 1:
                printf("\n=>该系统拥有%d份订单!\n\n", head->date.number);
    
                p = head->next;
    
                printf("\t商品名称及型号\t数量\t价格\t总额\t日期\n\n");
    
                while (p)
    
                {
                    printf("\t%s\t%d\t%d\t%d\t%s\n", p->date.name, p->date.shuliang, p->date.jiage, p->date.zonge, p->date.riqi);
    
                    p = p->next;
    
                }
    
                break;
            case 2:
                printf("=>请输入查找编号!\n");
    
                scanf("%d", &m);
    
                fflush(stdin);
    
                p = head->next;
    
                while (p)
    
                {
    
                    if (p->date.number == m)
    
                    {
    
                        printf("\t商品名称及型号\t数量\t价格\t总额\t日期\n\n");
    
                        printf("\t%s\t%d\t%d\t%d\t%s\n", p->date.name, p->date.shuliang, p->date.jiage, p->date.zonge, p->date.riqi);
                        break;
    
                    } else
    
                    {
    
                        p = p->next;
    
                        if (p == NULL)
    
                        printf("=>你要查的订单不存在!\n");
    
                    }
    
                }
    
                break;
    
            case 3:
                n = 1;
                break;
    
            }
    
        }
    
        return 1;
    }
    void menu() {
        printf("\t\t\t1.新建系统\t2.添加订单\n\t\t\t3.删除订单\t4.查看信息\n\t\t\t5.退出系统\n");
    
        printf("=>请选择你的操作!\n");
    }
    int main() {
    
        int m = 0,
        n,
        i;
    
        unit *head;
        printf("\t\t\t 欢迎使用商品订单管理系统 * \n");
        //if((head=read())==0)
        //{
        printf("=>是否新建?\n");
    
        printf("\t\t\t是(1)\t\t否(2)\n");
    
        scanf("%d", &i);
    
        fflush(stdin);
    
        if (i == 1)
    
        head = build();
    
        else if (i == 2)
    
        exit(1);
    
        //}
        else
    
        printf("=>信息导入成功!");
        while (m == 0)
    
        {
    
            menu();
    
            scanf("%d", &n);
    
            fflush(stdin);
    
            switch (n)
    
            {
    
            case 1:
                head = build();
                break;
    
            case 2:
                sole(head);
                break;
    
            case 3:
                deletion(head);
                break;
    
            case 4:
                display(head);
                break;
    
            case 5:
                m = 1;
                break;
    
            }
    
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘