#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;
}
}
}
我把错误都修改并在注释中说明了,可以运行。不懂的地方追问,加油!
#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;
}
}
}
错误很多
...
scanf("%d",&m);
fflush(stdin);
p->date.number;
...
这里缺少赋值
printf("=>卖出商品及型号:\n");
scanf("%s",&m);
字符串怎么赋值给int型的m
char riqi;
日期用一个char能表示?
你连基本的C语言的类型都不懂,先找本书看看吧。
如果你完全不懂,不要指望光模仿一个人家的程序能改写成功。反之,如果你学会了,也没必要去参考别人的程序。网上的程序大多写得不规范。根本不值得你模仿。
模仿是一个很好的学习方法,但是前提是你有一定的语法基础。建议你还是先看看C语言的书,把基本的语法知识掌握了,再去解决实际问题。
网上程序太零散,知识没结构体系。既然是初学,看样子,也不是赶项目。拿本C语言书,边看边敲代码,一周通关。这时,再进行针对性学习,就快了。加油!