1. 程式人生 > >利用C語言簡單的實現庫存管理系統(本地檔案生成形式儲存)

利用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);
}