#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;
}
}
}