求大佬写下c语言仓库管理系统中的两个功能 50

求大佬写下c语言仓库管理系统中的两个功能●题目15仓库管理系统的设计与实现问题描述:已知一工厂有5个仓库(仓库标号、仓库名称、负责人),用于保存公司生产的10个产品(产品... 求大佬写下c语言仓库管理系统中的两个功能● 题目15 仓库管理系统的设计与实现
问题描述:
已知一工厂有5个仓库(仓库标号、仓库名称、负责人),用于保存公司生产的10个产品(产品编号、产品名称、产品规格),任何一种产品可以保存在该5个仓库中,编写一程序完成以下功能:
1) 能从指定文件中导入产品的入库信息,格式如下:
仓库编号、产品编号,入库时间,入库数量
2) 能从键盘输入产品的入库信息
3) 能从键盘录入产品的出库信息
4) 能根据产品编号、入库日期修改入库数量
5) 能根据产品编号、入库日期删除入库记录
6) 查询指定产品编号的入库记录
7) 查询指定产品编号的出库记录

写一下4和5
4) 能根据产品编号、入库日期修改入库数量
5) 能根据产品编号、入库日期删除入库记录
展开
 我来答
匿名用户
2018-07-21
展开全部

思路:

职工信息可以存入一个结构体数组中,此结构体元素包含有货物编号(unsigned int cargo_number;);货物名称(char cargo_name[10];);货物价格(unsigned int cargo_price;);货物数量(unsigned int cargo_price;)。。。其他元素,题主根据要求添加元素。

然后,构建函数用来添加货物名称:void add_cargo_info(...)(形参元素为结构体数组名),即手动添加货物信息,完事后记得要将信息写入磁盘文件中;

然后,构建函数显示信息,这个简单,void display_cargo_info(...)(形参为结构体数组名),用一个while循环输出即可;

然后,查询函数,void cargo_info_search(...)(形参可为多种,名字,编号。。。),同样用while循环搞定;

然后,修改信息,void cargo_info_update(...)(形参同为结构体数组),调用查找函数,找到要修改的货物,然后在此信息中修改即可;

然后,删除信息,void cargo_info_delete(...)(形参同为结构体数组),也是首先找到要删除的信息,然后要调用保存函数。

解答:

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

}

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
archmageee4
2018-07-18 · TA获得超过1516个赞
知道大有可为答主
回答量:1581
采纳率:78%
帮助的人:922万
展开全部
这个只能付费编写吧,目测不便宜.功能太杂了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式