利用C语言简单的实现库存管理系统(本地文件生成形式存储)

问题描述:

库存管理系统是厂家、商城、商场等的管理商品信息不可缺少的部分,利用这个系统,可以更好地管理商品的信息。

本系统的功能:

  1. 添加、修改、删除库存商品信息,商品信息包括:编号、名称、类别、数量、产地等;

  2. 进货或售出商品后,相应的库存商品数量应该有所改变;

  3. 当某种商品库存少于一定数量时,应该提醒进货;

  4. 可以按商品名称模糊查询商品信息

关键词:库存;商品信息;数量变化;

(如果只是单纯需要完整代码程序请直接看文章结尾附录)

基础设计:

1.数据结构设计

struct repertory
{
	 char id[10], 定义编号
  name[10], 	定义商品名称
  list[10], 	定义商品类别
  production[10];	定义商品产地
	int num;		定义商品数量
} per[N]; 

2.菜单设计

1. 一级菜单:即主菜单。其中包括:1.新建;2.查询;3.修删;4.售出或进货;5.退出。

2.二级菜单

a:新建菜单:包括:1、新建信息库;2、添加商品;3、返回。

b:查询菜单:包括:1、查看信息库;2、查找商品号;3、返回。

c:修删菜单:包括:1、修改商品信息;2、删除商品信息;3返回。

d:售出或进货菜单:包括1、售出;2、进货;3、返回。

3.函数设计

void menu();                主菜单

void add_menu();        新建菜单

void seek_menu();       查找菜单

void change_menu();         修删菜单

void add();                  新建信息库

void print();      输出商品信息                                      

void seek();   查找商品信息

void del();         删除商品信息                                 

void charu();      添加商品信息                                     

void change();     修改商品信息

void jinchu();        售出或进货

void load():     读取信息

void save();     保存信息

详细设计

(1)添加商品模块

先建立商品信息,定义整型变量i和n以及m,并且在本地文件当中读取出当前文件里所存在的结构体数据个数及m=load(),利用for循环在原有m数量上增加i个商品数量,完后进行一次保存。随后进行输出当前数据库的全部商品信息。返回主函数菜单。

(2)删除商品模块

定义整型变量i,输入商品号i,判断是否有此商品strcmp(per[i].id,num)==0,如果有,for(k=i;k<m-1;k++){per[k]=per[k+1];} m--;save(m);在匹配与输入相同的商品,使结构体变量当中的数据进行往前移并让总商品数量m减少1,则删除成功回到主函数。

(3)修改商品模块

定义字符型变量na、整型变量na1,如果读取出来的m值为0则信息库为空,否则输入要修改的商品,通过strcmp(per[i].id,c)==0判断商品存在,否则进入后不修改,按‘-’返回,否则继续输入商品信息然后可按‘-’号结束,返回目录。

(4)商品查询管理模块

建立输出函数,当m=load()等于0,输出“该信息库为空!!!”,返回主函数。当m不等于0,输出信息库信息,再判断if(per[i].num < 3),如果是则输出“数量太少请进货”返回主函数

调试与测试

系统测试是系统开发的一个重要阶段,是系统保证质量的关键。如果在测试中不认真检查,在后期维护过程中将会非常麻烦。
本系统测试数据过程如下。
先进入运行程序
输入“1”,进入新建菜单,再输入“1”进入新建信息库。
请输入用第个1商品信息:
商品号:1
商品名称:三星
商品类别:电子产品
数量:2
产地:沈阳
是否继续输入:(1)是   (2)否     输入“2”。
返回到主函数。  
输入“2”,进入查看菜单。再输入“1”,进入查看信息库,屏幕输出
                 1   三星  电子产品  2  1沈阳  数量太少请进货
             
返回到主菜单。
输入“4”,进入售出或进货菜单。输入“2”,按提示输入商品号“1”,按提示依次输入
数量:5
屏幕输出
                   进货成功!!!
返回到主菜单。
输入“2”,进入查看菜单。再输入“1”,进入查看信息库,屏幕输出
                 1   三星  电子产品  2  1沈阳 
返回到主菜单。
输入“5”,进入退出程序。屏幕输出
                 BYE BYE!!!
退出程序。
多次运行程序后,发现各个菜单功能都可执行,在输入错误商品号时,给出该商品不存在的提示,因此,该程序无错误可正确执行。

 

附录  完整代码程序 

#include<stdio.h>
#define N 20
#define PRESS_ANYKEY printf("请输入任意键继续……");getchar();getchar();
#include<string.h>
struct repertory
{
        char id[10],name[10],list[10],production[10];
        int num;
}per[N];
void menu()
{
        printf("\t\t***************************************\n");
        printf("\t\t*          库存信息管理系统           *\n");
        printf("\t\t*              1、新建                *\n");
        printf("\t\t*              2、查询                *\n");
        printf("\t\t*              3、修删                *\n");
        printf("\t\t*          4、售出或进货              *\n");
        printf("\t\t*              5、退出                *\n");
        printf("\t\t***************************************\n");
}
void add_menu()
{
        printf("\t\t<<<<<<<<<<<<<<新建>>>>>>>>>>>>>>>\n");
        printf("\t\t         1、新建信息库           \n");
        printf("\t\t         2、添加商品             \n");
        printf("\t\t         3、返回                 \n");
        printf("\t\t<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>\n");
}
void seek_menu()
{
        printf("\t\t<<<<<<<<<<<<<<查看>>>>>>>>>>>>>>>\n");
        printf("\t\t         1、查看信息库           \n");
        printf("\t\t         2、查找商品号           \n");
        printf("\t\t         3、返回                 \n");
        printf("\t\t<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>\n");
}
void change_menu()
{
        printf("\t\t<<<<<<<<<<<<修改或删除>>>>>>>>>>>>\n");
        printf("\t\t         1、修改商品信息          \n");
        printf("\t\t         2、删除商品信息          \n");
        printf("\t\t         3、返回                  \n");
        printf("\t\t<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>\n");
}
void jinchu_menu()
{
        printf("\t\t<<<<<<<<<<<<进货或出售>>>>>>>>>>>>\n");
        printf("\t\t         1、出售                  \n");
        printf("\t\t         2、进货                  \n");
        printf("\t\t         3、返回                  \n");
        printf("\t\t<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>\n");
}
char load();
void save(char m);
void add();
void charu();
void print();
void seek();
void change();
void del();
void jinchu();
char load()
{
        int m=0;
        FILE *fp;
        if((fp = fopen("mchar","r"))==NULL)
        {
                fclose(fp);
        }
        else
        {
                m = fgetc(fp);
                if(m<=0)
                {
                        fclose(fp);
                }
                else
                {
                        return (m);
                        fclose(fp);
                        
                }
        }
}
void save(char m)
{
        FILE*fp;
        if((fp = fopen("mchar","w"))==NULL)
        {
                m=0;
                fputc(m,fp);
                fclose(fp);
        }
        else
        {
                fputc(m,fp);
                fclose(fp);
                fp=fopen("repertory_list","w");
                fwrite(per,sizeof(struct repertory),m,fp);
                fclose(fp);
        }
}
void add()
{
        char m = load();
        int i,n,count=0;
        char M;
        printf("请输入你需要增加的数量:");
        scanf("%d",&n);
        for(i=m;i<(m+n);i++)
        {
                count++;
                printf("请输入第%d个商品信息",count);
                printf("商品号:");
                scanf("%s",&per[i].id);
                printf("商品名称:");
                scanf("%s",&per[i].name);
                printf("商品类别:");
                scanf("%s",&per[i].list);
                printf("商品数量:");
                scanf("%d",&per[i].num);
                printf("产地:");
                scanf("%s",&per[i].production);
        }
        M=n+m;
        save(M);
}
void charu()
{
        char m=load();
        int i;
        i = m;
        printf("商品号:");
        scanf("%s",&per[i].id);
        printf("商品名称:");
        scanf("%s",&per[i].name);
        printf("商品类别:");
        scanf("%s",&per[i].list);
        printf("商品数量:");
        scanf("%d",&per[i].num);
        printf("产地:");
        scanf("%s",&per[i].production);
        m = m+1;
        save(m);
}
void print()
{
        char m=load();
        int i;
        if(m>0)
        {
                printf("编号\t名称\t类别\t数量\t产地\t提醒\n");
                for(i=0;i<m;i++)
                {
                        printf("%s\t%s\t%s\t%d\t%s\t",per[i].id,per[i].name,per[i].list,per[i].num,per[i].production);
                        if(per[i].num < 3)
                        {
                                printf("数量太少\n");
                        }
                        else
                        {
                                printf("\n");
                        }
                }
        }
        else
                printf("库存没有商品\n");
}
void seek()
{
        char j[5],m=load();int i;
        printf("请输入要查询的名称:");
        scanf("%s",&j);
        if(m<=0)
                printf("当前数据库没有商品信息\n");
        else
                for(i=0;i<m;i++)
                {
                        if(strcmp(j,per[i].name)==0)
                        {
                                printf("编号\t名称\t类别\t数量\t产地\n");
                                printf("%s\t%s\t%s\t%d\t%s\t\n", per[i].id,per[i].name,per[i].list,per[i].num,per[i].production);
                        }
                }
}
void change()
{
        char m =load();
        char c[10];int c1;
        int i,j=0;
        if(m<=0)
                printf("当前数据库没有数据");
        else
                printf("请输入需要修改商品编号");
                scanf("%s",&c);
                for(i=0;i<m;i++)
                {
                        if(strcmp(per[i].id,c)==0)
                        {
                                printf("查找到的商品信息如下\n");
                                printf("编号\t名称\t类别\t数量\t产地\n");
                                printf("%s\t%s\t%s\t%d\t%s\t\n", per[i].id,per[i].name,per[i].list,per[i].num,per[i].production);
                                printf("如果某项信息不想改动可以直接输入-");
                                printf("把这件商品的名称改为:");
                                scanf("%s",&c);
                                if (strcmp(c, "-"))
                                        strcpy(per[i].name, c);
                                printf("把这件商品的商品类别改为:");
                                scanf("%s", &c);
                                if (strcmp(c, "-"))
                                        strcpy(per[i].list, c);
                                printf("把这件商品的数量改为:");
                                scanf("%d", &c1);
                                if (strcmp(c, "-"))
                                        per[i].num=c1;
                                printf("把这件商品的产地改为:");
                                scanf("%s", &c);
                                if (strcmp(c, "-"))
                                        strcpy(per[i].production, c);
                                save(m);
                                break;
                        }
                        else
                                j++;
                }
                if(j>0)
                        printf("找不到该商品");
}
void del()
{
        char num[5],m=load();int i,k;
        if(m<0)
                printf("当前数据库没有商品信息");
        else
                printf("请输入删除的商品编号:");
                scanf("%s",&num);
                for(i=0;i<m;i++)
                        if(strcmp(per[i].id,num)==0)
                        {
                                for(k=i;k<m-1;k++)
                                {
                                        per[k]=per[k+1];
                                }
                                m--;
                                save(m);
                                printf("数据已删除");
                                break;
                        }
}
void jinchu()
{
        char na[5],m=load();
        int yu1,i,j,k;
        jinchu_menu();
        printf("请输入序号:");
        scanf("%d", &i);
        switch(i)
        {
        case 1:
                {
                        if(m<=0)
                                printf("\t\t该信息库为空!!!\n");
                        else
                                printf("请输入要定的商品号:");
                                scanf("%s",&na);
                                for(j=0;j<m;j++)
                                {
                                        if(strcmp(na,per[j].id)==0)
                                        {
                                                printf("已找到商品,请输入要售出的商品数量:");
                                                scanf("%d",&yu1);
                                                if(yu1 <= 0)
                                                {
                                                        printf("输入的数量有误");
                                                }
                                                else
                                                        if(per[i].num>=yu1)
                                                        {
                                                                per[i].num = per[i].num - yu1;
                                                                printf("\t\t出售成功\n");
                                                                save(m);
                                                        }
                                                        else
                                                        {
                                                                printf("商品数量不足");
                                                        }
                                                        break;
                                        }
                                        else
                                                k++;
                                        
                                }
                                printf("商品不存在\n");
                                break;
                }
        case 2:
                {
                        if(m<=0)
                        {
                                printf("\t\t该信息库为空!!!\n");
                        }
                        printf("请输入要定的商品号:");
                        scanf("%s", &na);
                        for(j=0;j<m;j++)
                        {
                                if(strcmp(na,per[j].id)==0)
                                {
                                                printf("已找到商品,请输入要进货商品数量:");
                                                scanf("%d",&yu1);
                                                if(yu1 <= 0)
                                                {
                                                        printf("输入的数量有误");
                                                }
                                                else
                                                        per[i].num = per[i].num + yu1;
                                                        printf("\t\t进货成功\n");
                                                        save(m);
                                                        break;
                                }
                                else
                                        printf("商品不存在\n");
                                        break;
                        }
                }
        }
}


                        

        
void main()
{
        register int i;
        char m=0;
        FILE *fp;
        m=load();
        if(m>0)
        {
                fp=fopen("repertory_list","r");
                fread(per,sizeof(struct repertory),m,fp);
                fclose(fp);
        }
        do
        {
                m = load();
                menu();
                printf("请选择你需要操作的序号:");
                scanf("%d",&i);
                switch(i)
                {
                case 1:
                        add_menu();
                        printf("请选择你需要操作的序号:");
                        scanf("%d",&i);
                        switch(i)
                        {
                        case 1:
                                add();
                                continue;
                        case 2:
                                charu();
                                print();
                                PRESS_ANYKEY
                                continue;
                        case 3:
                                break;
                        }continue;
                case 2:
                        seek_menu();
                        printf("请选择你需要操作的序号:");
                        scanf("%d",&i);
                        switch(i)
                        {
                        case 1:
                                print();
                                PRESS_ANYKEY
                                        continue;
                        case 2:
                                seek();
                        case 3:
                                break;
                        }continue;
                case 3:
                        change_menu();
                        printf("请选择你需要操作的序号:");
                        scanf("%d",&i);
                        switch(i)
                        {
                        case 1:
                                change();
                                print();
                                PRESS_ANYKEY
                                        continue;
                        case 2:
                                del();
                                print();
                                continue;
                        case 3:
                                break;
                        }continue;
                case 4:
                        jinchu();
                        continue;
                case 5:
                        printf("BYE BYE!\n");
                        PRESS_ANYKEY
                }break;
        }while(1);
}

 

展开阅读全文

没有更多推荐了,返回首页