使用链表实现一个仓库管理系统,仓库商品的属性包括(商品编号,商品名称,商品数量),借助计算机来完成如下功能:
(1)入库:可以录入商品信息,包括:商品编号,商品名称,商品数量,商品价格;
(2)出库:可以删除一定数量的指定商品名称的商品,商品不够给出提示。
(3)修改:修改指定商品编号或者商品名称的价格。
(4)删除:可以删除指定商品编号、商品名称的商品记录。
(5)查询:可以查询所有商品信息;或指定商品编号、商品名称的商品信息。
(6)排序:可以根据价格或数量对商品进行排序,并显示排序结果。#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#define max 33
int u=0;//用来控制输出元素个数
typedef struct g
{
long No; /*物品编号*/
char name[15]; /*物品名称*/
int num; /*物品数量*/
char price[5]; /*物品价格*/
struct g *next;
}good,*Goods;
Goods InitList()
{
Goods head;
head=new good;
head->next=NULL;
return head;
}
void queryList(good k[max],int n);
void reviseList(good k[max],int j);
void sortList(good k[max],int j);
void in(Goods &s)//入库,每次有一个元素插入
{
Goods r,q;
s=r=InitList();
q=new good;
printf("商品编号:");
scanf("%d",&(q->No));
printf("商品名称:");
scanf("%s",q->name);
printf("商品数量:");
scanf("%d",&(q->num));
printf("商品价格:");
scanf("%s",q->price);
if(s==NULL) {s=q;r=q;}
else{r->next=q;r=q;}
r->next=NULL;
}
void out(good k[max],int j)//出库
{
int i,num2;
char name2[10];
printf("输入你要出库的商品名称:");
scanf("%s",name2);
for(i=0;i<j-u;i++)
{
if(strcmp(k[i].name,name2)==0)
{
printf("输入你要出库的商品数量");
scanf("%d",&num2);
if(k[i].num>num2) k[i].num=k[i].num-num2;
else if(k[i].num<num2) printf("该种商品的库存数量不够!");
}
}
}
void deletList(good k[max],int j)//删除库存记录
{
int i,t,v=0;
char name2[10];
long No2;
printf("要删除的商品编号:");
scanf("%d",&No2);
printf("要删除的商品名称:");
scanf("%s",name2);
for(i=0;i<j;i++)
{
if(No2==k[i].No&&strcmp(k[i].name,name2)==0)
{
v++;
for(t=i+1;t<j;t++)
{
k[t-1]=k[t];
}
u++;
j=j-1;
}
}
if(v==0) printf("该仓库中不存在这种商品!");
}
void main()
{
int i=0;
int c;
Goods h,m;
good j[max];//结构体数组保存每一个链表数据
system("cls");
system("color F0");
printf("******************************仓库管理*******************************\n");
printf("* 1. 入库操作 *\n");
printf("* 2. 出库操作 *\n");
printf("* 3. 删除仓库记录 *\n");
printf("* 4. 修改仓库记录 *\n");
printf("* 5. 指定商品编号、名称查询 *\n");
printf("* 6. 按仓库商品价格或数量排序 *\n");
printf("* 0. 退出 *\n");
printf("*********************************************************************\n");
printf("\n输入您想要进行的操作选项键(0-6):");
scanf("%d",&c);
while(c>-1)
{
if(c==0) exit(0);
else if(c==1) {in(h);system("cls");m=h->next;j[i++]=*m;}
else if(c==2) out(j,i);
else if(c==3) deletList(j,i);
else if(c==4) reviseList(j,i);
else if(c==5) queryList(j,i);
else if(c==6) sortList(j,i);
printf("******************************仓库管理*******************************\n");
printf("* 1. 入库操作 *\n");
printf("* 2. 出库操作 *\n");
printf("* 3. 删除仓库记录 *\n");
printf("* 4. 修改仓库记录 *\n");
printf("* 5. 指定商品编号、名称查询 *\n");
printf("* 6. 按仓库商品价格或数量排序 *\n");
printf("* 0. 退出 *\n");
printf("*********************************************************************\n");
printf("\n输入您想要进行的操作选项键(0-6):");
scanf("%d",&c);
}
}
void printf1(good p[max],int w)//显示所有商品信息、
{
int i;
system("cls");
printf("商品编号 商品名称 商品数量 商品价格\n");
for(i=0;i<w-u;i++)
{
printf(" %d \t",p[i].No);
printf(" %s \t",p[i].name);
printf(" %d \t",p[i].num);
printf(" %s ",p[i].price);
printf("\n");
}
}
void printf2(good p[max],int w)//指定编号、名称查询
{
int k=0,i;
char name2[10];
long No2;
system("cls");
printf("商品名称:");
scanf("%s",name2);
printf("商品编号:");
scanf("%d",&No2);
printf("商品编号 商品名称 商品数量 商品价格\n");
for(i=0;i<w;i++)
{
if(strcmp(p[i].name,name2)==0&&No2==p[i].No)
{
k++;
printf(" %d \t",p[i].No);
printf(" %s \t",p[i].name);
printf(" %d \t",p[i].num);
printf(" %s ",p[i].price);
}
}
if(k==0) printf("该系统中不存在该商品的信息!");
}
void queryList(good k[max],int n)
{
system("cls");
int select;
printf("1.所有商品信息、\n");
printf("2.指定编号、名称查询\n");
printf("3.退出\n");
scanf("%d",&select);
while(select>-1)
{
if(select==0) exit(0);
if(select==1) printf1(k,n);
else if(select==2) printf2(k,n);
else if(select==3) main();
scanf("%d",&select);
}
}
void reviseList(good k[max],int j)//修改商品记录
{
int select,i;
char name2[10];
printf("输入要修改的名称:");
scanf("%s",name2);
for(i=0;i<j;i++)
if(strcmp(k[i].name,name2)==0)
{
system("cls");
printf("1.按编号修改\n");
printf("2.按数量修改\n");
printf("0.返回上一级\n");
scanf("%d",&select);
if(select==0) main();
else if(select==1)
{
long No2;
system("cls");
printf("请输入编号:");
scanf("%d",&No2);k[i].No=k[i].No+No2;}//按编号修改
else if(select==2)
{
long num2;
system("cls");
printf("请输入数量:");
scanf("%d",&num2);k[i].num=k[i].num+num2;}//按数量修改
system("cls");
}
}
void priceSort(good p[max],int w)//按价格从低往高排序
{
int i,j=0;
good r;
printf("商品编号 商品名称 商品数量 商品价格\n");
for(i=0;i<w-u;i++)
for(j=i+1;j<w-u;j++)
{
if(p[i].price>p[j].price)
{
r=p[i];
p[i]=p[j];
p[j]=r;
}
}
for(i=0;i<w-u;i++)
{
printf(" %d",p[i].No);
printf("\t %s",p[i].name);
printf("\t %d",p[i].num);
printf("\t %s",p[i].price);
printf("\n");
}
}
void numSort(good p[max],int w)//按数量从低往高排序
{
int i,j=0;
good r;
printf("商品编号 商品名称 商品数量 商品价格\n");
for(i=0;i<w-u;i++)
for(j=i+1;j<w-u;j++)
{
if(p[i].num>p[j].num)
{
r=p[i];
p[i]=p[j];
p[j]=r;
}
}
for(i=0;i<w-u;i++)
{
printf(" %d",p[i].No);
printf("\t %s",p[i].name);
printf("\t %d",p[i].num);
printf("\t %s",p[i].price);
printf("\n");
}
}
void sortList(good k[max],int j)//商品价格或数量排序
{
int select;
printf("1.按价格从低往高排序\n");
printf("2.按商品数量从低往高排序\n");
printf("3.返回上一级\n");
scanf("%d",&select);
while(select>-1)
{
if(select==3) main();
else if(select==1) priceSort(k,j);
else if(select==2) numSort(k,j);
scanf("%d",&select);
}
}