求一个只用c语言编写的仓库管理系统

邮箱地址 614565370@qq.com
1. 题目描述
编写一个程序来管理仓库的货物,系统能实现以下功能:
输入信息:产品信息的输入;
修改信息:对产品信息进行修改;
增加信息:添加新产品信息;
插入信息:在指定位置插入新产品信息;
查询:能够根据产品号或产品名查询某个产品的信息;根据产地查询某地的产品信息;根据供应商查询某供应商供应的产品信息;
排序:根据产品号对产品信息进行排序;
统计:根据产品名统计同类商品的数量;根据产地统计某地产品种类;
输出:输出所有产品信息或查询产品信息的结果。
报表输出:根据库存数据产生月报表。
要求每个功能模块用一个函数实现。结构体数组或者单链表头指针在main函数中定义。
2. 设计提示
1)先确定仓库中产品信息的数据结构。如产品的信息:产品号、产品名、产地、单价、数量、供应商、入库时间、出库时间…… 等,每个数据项各用什么数据类型;
2)划分实现仓库管理的功能模块:如主菜单、输入数据、修改、查询、输出等功能,并确定各功能模块的实现算法。
3)画出各模块的流程图;
4)选择C语言的技术:普通数组、结构体数组、函数、指针、单链表或文件等。
5)编写程序代码。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
#define max 32
int ifempty=0;//标志,判断链表是无否为空

typedef struct dnode /* 定义双向链表结构体 */ 
{
int number; /* 货物编号 */
char name[max]; /* 货物名称 */ 
int counter; /* 货物数量 */
struct dnode *prior, *next;
/* 定义两指针,分别指向其前驱和后继 */
}dlnode; 

dlnode *create(dlnode *L);
dlnode *input(dlnode *L);
dlnode *output(dlnode *L);
dlnode * outnum(dlnode *L);
dlnode * outname(dlnode *L);
dlnode *current(dlnode *L);
void search(dlnode *L);
void print(dlnode *L);
void searchnum(dlnode *L);
void searchname(dlnode *L);
void display(dlnode *L) ;

void main()
{
int x;
dlnode *L;
if(!(L=(dlnode *)malloc(sizeof(dlnode)))) //分配空间
{
printf("\n");
exit(1);
}
create(L);///调用函数,创建头节点
while(1)
{////////////////////////主菜单///////////////////////////
printf(" ============================\n");
printf(" 1. 货物出库和入库\n");
printf(" 2. 查找货物表\n"); 
printf(" 3. 显示仓库货物表\n");
printf(" 4. 输出到文件\n");
printf(" 0. 退出\n");
printf(" =============================\n");
printf(" 选择0--3:");
scanf("%d",&x);
switch(x)
{
case 2:search(L);break;//调用查找函数
case 1:current(L);break;//调用入库出库函数
case 3:display(L);break;//调用显示输出函数
case 4:print(L);break;//调用打印函数
case 0:printf("\n bye!see you!\n");
getchar();getchar();exit(0);//退出程序
default:printf("\n Enter erreor!please input 0--4!"); 
getchar();getchar();
}
}
}
dlnode *create(dlnode *L)//创建链表头节点
{
printf(" 欢迎使用我的仓库管理系统");
getchar(); 
ifempty=0;
///////初始化头节点的值////////
L->next=NULL;L->prior=NULL;
L->number=L->counter=0;
strcpy(L->name," "); 
return L;
}

void search(dlnode *L) ///查找的主要菜单
{
int y;
if(ifempty==0)
{
printf("没有输入货物!\n");
getchar();getchar();
return;
}
else
{
while(1)
{
printf("=====================\n");
printf("1.按编号查询\n");
printf("2.按货物名称查询\n");
printf("0.返回上一层\n");
printf("====================\n");
printf("选择0--2:");
scanf("%d",&y);
switch(y)
{
case 1:searchnum(L);break;//调用按编号查找的函数
case 2:searchname(L);break;//调用按名称查找的函数
case 0:return;//返回
default:printf("enter error!Please input 0--2!\n\n");
getchar();getchar();printf("\n\n");
}
}
}
}
void searchnum(dlnode *L)///按编号查找的函数
{
int num,flag=0;//flag为是否找到的标志
dlnode *head=L;
if(ifempty==0)
{
printf("没有货物被输入\n");
getchar();getchar();
return;
}
printf("输入你要查找的货物编号:\n");
scanf("%d",&num);
while((L=L->next)!=head)
{
if(L->number==num)
{ flag=1;//flag为1时表示找到
printf("找到指定编号货物 \n"); 
printf("\n编号:%d\n",L->number);
printf("名称:%s\n",L->name) ;
printf("数量:%d\n\n",L->counter); 

}
if(flag==0)//flag为0时表示没有找到
printf("没有找到指定编号货物,请查看是否还有货物。\n");
getchar();getchar();
}

void searchname(dlnode *L)//按名称查找的函数
{
int flag=0;//flag为是否找到的标志
char na[32];
dlnode *head=L;
if(ifempty==0)
{
printf("没有货物被输入\n");
getchar();getchar();
return;
}
printf("输入你要查找的货物名称\n");
scanf("%s",&na);
while((L=L->next)!=head)
{
if(strcmp(L->name,na)==0)
{ flag=1;//flag为1时表示找到
printf("找到指定名称货物 \n"); 
printf("\n编号:%d\n",L->number);
printf("名称:%s\n",L->name) ;
printf("数量:%d\n\n",L->counter); 

}

if(flag==0)//flag为0时表示没有找到
printf("没有找到指定编号货物,请查看是否还有货物。\n\n");
getchar();getchar();
}

dlnode *current(dlnode *L)//货物出库入库函数
{
int y;
while(1)
{
printf("========================\n");
printf(" 1.货物入库\n");
printf(" 2.货物出库\n");
printf(" 0.返回上一层\n");
printf("========================\n");
printf(" 选择0--2:");
scanf("%d",&y);
switch(y)
{
case 1:input(L);break;//调用入库函数
case 2:output(L);break;//调用出库函数
case 0:return(L);//返回上一层
default:printf("enter error!Please input 0--2!");
getchar();getchar();
printf("\n\n");
}
}
}

dlnode *input(dlnode *L)//定义入库函数
{
dlnode *in,*head;
head=in=(dlnode *)malloc(sizeof(dlnode));//分配空间
head=L;

printf("\n请输入货物数据:\n");
printf("编号:");scanf("%d",&in->number);
printf("名称:");scanf("%s",&in->name);
printf("数量:");scanf("%d",&in->counter);

if(L->next==NULL) //如果只有头节点,
{ //把刚输入的in节点
L->next=in; //跟在头节点后面
L->prior=in; //
in->next=L; //
in->prior=L; //
ifempty++; //ifempty加1
}
else
{//如果当前L的下一个节点不是头节点
while((L=L->next)!=head)
{//如果输入的数大于L->number,则插到L的前面
if(L->number<in->number)
{
in->next=L;
in->prior=L->prior; 
L->prior->next=in;
L->prior=in;
ifempty++; //ifempty加1
return(head);

}
//输入的编号比其它编号都小,则插到最后个节点,并首尾相连
head->prior->next=in;
in->prior=head->prior;
head->prior=in;
in->next=head;
ifempty++; //ifempty加1

return head;
}

dlnode *output(dlnode *L)//出库的函数
{
int y;
dlnode *head=L;
if(ifempty==0)//检测是否有货物输入
{
printf("没有货物输入系统\n");
getchar();getchar();
return(head);

while(1)
{
printf("=============\n");
printf("1.按编号出库\n");
printf("2.按名称出库\n");
printf("0.返回上一层\n");
printf("==============\n");
printf("选择0--2:");scanf("%d",&y);
switch(y)
{
case 1:outnum(L);break;//调用按编号出库函数
case 2:outname(L);break;//调用按名称出库函数
case 0:return(L);
default:printf("enter error!Please input 0--2!");
getchar();getchar();printf("\n\n");
}
}

dlnode *outnum(dlnode *L)//按编号出库函数

int num;
dlnode *head=L;

printf("请输入出库货物的编号:");
scanf("%d",&num);
while((L=L->next)!=head)
{//如果找到就删除节点
if(L->number==num)
{
L->prior->next=L->next;
L->next->prior=L->prior;
ifempty--; //ifempty减1 
printf("编号为%d的货物成功出库",num); 
getchar();getchar();
return head; 

}
printf("没有此编号的货物,请查看是否还有货物。\n\n");
getchar();getchar();
return (head);
}

dlnode *outname(dlnode *L)//按名称出库函数
{
char na[32];
dlnode *head=L;

printf("请输入出库货物的名称:");
scanf("%s",&na);
while((L=L->next)!=head)
{//如果找到就删除节点
if(strcmp(L->name,na)==0)
{
L->prior->next=L->next;
L->next->prior=L->prior;
ifempty--; //ifempty减1 
printf("名称为%s的货物成功出库",na);
getchar();getchar();
return (head);
}
}
printf("没有此名称的货物,请查看是否还有货物。\n\n");
getchar();getchar();
return(head);


void display(dlnode *L)//显示货物清单
{
dlnode *head=L;
if(ifempty==0)
{
printf("没有货物可显示\n");
getchar();getchar();
return;
}
L=L->next;
do

printf("\n编号:%d\n",L->number);
printf("名称:%s\n",L->name) ;
printf("数量:%d\n\n",L->counter);
}while((L=L->next)!=head);
getchar();getchar(); 
}
void print(dlnode *L)
{
dlnode *head=L;
L=L->next;
char filename[max];
FILE *out;
if(ifempty==0)
{
printf("没有货物可输出\n");
getchar();getchar();
return;
}
printf("请输入文件名称:");
scanf("%s",filename);
if((out=fopen(filename,"w"))==NULL)
{
printf("打开文件失败!\n");
getchar();getchar();
return;
}
do{ 
fprintf(out,"编号:%d\n名称:%s\n数量:%d\n\n",L->number,L->name,L->counter);
}while((L=L->next)!=head);
printf("输出成功\n");getchar();getchar();
fclose(out);
}

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答