商品库存管理系统(c语言)
c語言商品庫存管理系統(tǒng)
- 一、項(xiàng)目背景
- 二、設(shè)計目的
- 三、項(xiàng)目功能需求
- 1、商品入庫
- 2、商品出庫
- 3、刪除商品信息
- 4、修改商品信息
- 5、查詢商品信息
- 四、系統(tǒng)的功能結(jié)構(gòu)圖
- 五、功能模塊介紹
- 1、商品入庫模塊
- 2、商品出庫模塊
- 3、刪除商品模塊
- 4、修改商品模塊
- 5、查詢商品模塊
- 6、顯示商品模塊
- 六、詳細(xì)設(shè)計
- 1、主函數(shù)
- 2、商品入庫模塊
- 3、商品出庫模塊
- 4、刪除商品模塊
- 5、修改商品模塊
- 6、查詢商品模塊
- 7、顯示商品模塊
- 七、代碼
一、項(xiàng)目背景
? 為了解決商品庫存信息在日常生活中易于丟失、遺忘,不易保存和管理的問題,我們設(shè)計商品庫存管理系統(tǒng),來幫助商家方便地對商品信息進(jìn)行增加、刪除、修改等日常維護(hù),并且能進(jìn)行商品信息的查詢,從而能更全面直觀地了解到商品庫存信息。
二、設(shè)計目的
三、項(xiàng)目功能需求
1、商品入庫
能夠錄入商品編號、名稱、數(shù)量、價格、生產(chǎn)日期、供貨商等信息,并支持連續(xù)輸入多個商品信息
2、商品出庫
根據(jù)用戶輸入要進(jìn)行出庫操作的商品編號,如果存在該商品,則可以輸入要出庫的商品數(shù)量,實(shí)現(xiàn)出庫操作
3、刪除商品信息
根據(jù)用戶輸入要進(jìn)行刪除的商品編號,如果找到該商品,則將該編號所對應(yīng)的商品名稱等各項(xiàng)信息均刪除
4、修改商品信息
根據(jù)用戶輸入的商品編號找到該商品,若該商品存在,則可以修改商品的各項(xiàng)信息
5、查詢商品信息
可以顯示所有商品的信息,也可以輸入商品編號,查詢某一個商品的信息
四、系統(tǒng)的功能結(jié)構(gòu)圖
五、功能模塊介紹
1、商品入庫模塊
- 自動顯示系統(tǒng)中已有的商品信息,如果還沒有商品,顯示沒有記錄。提示用戶是否需要入庫
- 用戶輸入需要入庫的商品編號,系統(tǒng)自動判斷該商品是否已經(jīng)存在,若存在則無法入庫;若不存在,則提示用戶輸入商品的相關(guān)信息
- 一條商品的所有信息均輸入完成之后,系統(tǒng)還會詢問是否繼續(xù)進(jìn)行其他商品的入庫操作
2、商品出庫模塊
- 自動顯示系統(tǒng)中已有的商品信息,并提示用戶輸入需要出庫的商品編號
- 系統(tǒng)自動判斷該商品是否已經(jīng)存在,若存在則提示用戶輸入出庫的數(shù)量;若不存在,則提示用戶找不到該商品,無法進(jìn)行出庫操作
3、刪除商品模塊
- 自動顯示系統(tǒng)中已有的商品信息,并提示用戶輸入需要刪除的商品編號
- 系統(tǒng)自動判斷該商品是否已經(jīng)存在,若存在則提示用戶是否刪除該商品;若不存在則提示無法找到該商品
4、修改商品模塊
- 自動顯示系統(tǒng)中已有的商品信息,并提示用戶輸入需要修改的商品編號
- 系統(tǒng)自動判斷該商品是否已經(jīng)存在,若存在則提示用戶輸入新的商品信息;若不存在則提示無法找到該商品
5、查詢商品模塊
- 通過用戶輸入的商品編號來查找商品,若存在則提示用戶是否顯示商品所有信息,若不存在則提示無法找到該商品
6、顯示商品模塊
- 負(fù)責(zé)將所有商品的信息列表顯示出來
六、詳細(xì)設(shè)計
1、主函數(shù)
主函數(shù)運(yùn)行后,首先調(diào)用菜單響應(yīng)函數(shù)ShowMenu實(shí)現(xiàn)菜單的顯示。
程序流程圖如下所示。
2、商品入庫模塊
函數(shù)功能設(shè)計
- 在主菜單的界面中輸入“1”,即可進(jìn)入商品入庫模塊。
- 首先展示系統(tǒng)中的商品信息,并提示用戶是否錄入,用戶輸入字符y或者字符Y,則可以進(jìn)行數(shù)據(jù)錄入。
- 首先錄入商品編號,如果輸入的商品編號已經(jīng)存在,系統(tǒng)會提示用戶該商品已經(jīng)存在;若商品是第一次入庫,用戶則需陸續(xù)輸入商品的名稱、生產(chǎn)商、生產(chǎn)日期、價格和數(shù)量信息。
3、商品出庫模塊
函數(shù)功能設(shè)計
- 在主菜單的界面中輸入“2”,即可進(jìn)入商品出庫模塊。
- 首先也展示系統(tǒng)中所有商品信息,并提示用戶輸入要出庫的商品編號。
- 一旦商品編號確實(shí)是系統(tǒng)中已有的商品編號,則可以對該商品的數(shù)量進(jìn)行修改。
- 用戶可以輸入要出庫的商品數(shù)量,如果用戶輸入的數(shù)量比商品的實(shí)際庫存還要大,則自動將商品庫存變成0。
- 最后顯示出庫操作后所有商品的信息列表。
4、刪除商品模塊
函數(shù)功能設(shè)計
- 在主菜單的界面中輸入“3”,即可進(jìn)入刪除商品模塊。
- 同樣先顯示所有商品信息,若文件不存在或者沒有記錄,則不能進(jìn)行刪除操作。
- 程序提示用戶輸入要刪除的商品編號,系統(tǒng)會自動將該編號對應(yīng)的商品條目徹底從文件中刪除,最后會顯示刪除后的商品信息列表。
5、修改商品模塊
函數(shù)功能設(shè)計
- 在主菜單的界面中輸入“4”,即可進(jìn)入修改商品模塊。
- 和商品出庫模塊的不同之處在于,商品出庫僅修改商品庫存量,而修改商品模塊可以修改商品信息的各個字段的數(shù)據(jù)。
- 程序提示用戶輸入要修改的商品編號,如果此編號的商品存在,系統(tǒng)會自動提示用戶輸入要修改的各項(xiàng)商品信息。
- 最后顯示修改后的所有商品信息。
6、查詢商品模塊
函數(shù)功能設(shè)計
- 在主菜單的界面中輸入“5”,即可進(jìn)入查詢商品模塊。
- 查詢時根據(jù)用戶輸入的商品編號進(jìn)行查詢,若查詢的商品存在,則會提示用戶找到該商品,是否查看詳細(xì)信息顯示。
- 用戶選擇是,則顯示商品的各種信息。如果查不到該商品,則提示用戶找不到商品信息。
7、顯示商品模塊
函數(shù)功能設(shè)計
- 在主菜單的界面中輸入“6”,即可顯示所有商品信息。
- 通過列表的方式,顯示商品的各個屬性,以及每一條商品記錄。
七、代碼
/*商品庫存管理系統(tǒng)*/ #include<stdio.h> #include<conio.h> /*getch()函數(shù)用到的頭文件*/ #include<stdlib.h> /*system(cls)函數(shù)用到的頭文件*/#define PRODUCT_LEN sizeof(struct Product) #define FORMAT "%-8d%-15s%-15s%-15s%-12.1lf%-8d\n" #define DATA astPro[i].iId,astPro[i].acName,astPro[i].acProducer,astPro[i].acDate,astPro[i].dPrice,astPro[i].iAmount struct Product /*定義商品結(jié)構(gòu)體*/ {int iId; /*商品代碼*/char acName[15]; /*商品名稱*/char acProducer[15]; /*商品生產(chǎn)商*/char acDate[15]; /*商品生產(chǎn)日期*/double dPrice; /*商品價格*/int iAmount; /*商品數(shù)量*/ }; struct Product astPro[100]; /*定義結(jié)構(gòu)體數(shù)組*/ /*******************************************************************************/ void ShowMenu(); /*顯示主菜單*/ void InputProduct(); /*商品入庫*/ void OutputProduct(); /*商品出庫*/ void DeleteProduct(); /*刪除商品*/ void ModifyProduct(); /*修改商品*/ void SearchProduct(); /*商品查詢*/ int ShowProduct(); /*顯示商品*//*******************************************************************************/void main() /*主函數(shù)*/ {int iItem;ShowMenu();scanf("%d", &iItem); /*輸入菜單項(xiàng)*/while (iItem){switch (iItem){case 1:InputProduct(); break; /*商品入庫*/case 2:OutputProduct(); break; /*商品出庫*/case 3:DeleteProduct(); break; /*刪除商品*/case 4:ModifyProduct(); break; /*修改商品*/case 5:SearchProduct(); break; /*搜索商品*/case 6:ShowProduct(); break; /*顯示商品*/default:printf("input wrong number"); /*錯誤輸入*/}getch(); /*讀取鍵盤輸入的任意字符*/ShowMenu(); /*執(zhí)行完功能再次顯示菜單功能*/scanf("%d", &iItem); /*輸入菜單項(xiàng)*/} } /*******************************************************************************/ void ShowMenu() /*自定義函數(shù)實(shí)現(xiàn)菜單功能*/ {system("cls");printf("\n\n\n\n\n");printf("\t\t|---------------------PRODUCT-------------------|\n");printf("\t\t|\t 1. input record |\n");printf("\t\t|\t 2. output record |\n");printf("\t\t|\t 3. delete record |\n");printf("\t\t|\t 4. modify record |\n");printf("\t\t|\t 5. search record |\n");printf("\t\t|\t 6. show record |\n");printf("\t\t|\t 0. exit |\n");printf("\t\t|-----------------------------------------------|\n\n");printf("\t\t\tchoose(0-6):"); } /*******************************************************************************/void InputProduct() /*商品入庫函數(shù)*/ {int i, iMax = 0; /*iMax記錄文件中的商品記錄條數(shù)*/char cDecide; /*存儲用戶輸入的是否入庫的判斷字符*/FILE *fp; /*定義文件指針*/iMax = ShowProduct();if ((fp = fopen("product.txt", "ab")) == NULL) /*追加方式打開一個二進(jìn)制文件*/{printf("can not open file\n"); /*提示無法打開文件*/return;}printf("press y/Y to input:");getchar(); /*把選擇1之后輸入的回車符取走*/cDecide = getchar(); /*讀一個字符*/while (cDecide == 'y' || cDecide == 'Y') /*判斷是否要錄入新信息*/{printf("Id:"); /*輸入商品編號*/scanf("%d", &astPro[iMax].iId);for (i = 0; i<iMax; i++)if (astPro[i].iId == astPro[iMax].iId) /*若該商品已存在*/{printf("the id is existing,press any key to continue!");getch();fclose(fp); /*關(guān)閉文件,結(jié)束input操作*/return;}printf("Name:"); /*輸入商品名稱*/scanf("%s", &astPro[iMax].acName);printf("Producer:"); /*輸入商品生產(chǎn)商*/scanf("%s", &astPro[iMax].acProducer);printf("Date(Example 15-5-1):"); /*輸入商品生產(chǎn)日期*/scanf("%s", &astPro[iMax].acDate);printf("Price:"); /*輸入商品價格*/scanf("%lf", &astPro[iMax].dPrice);printf("Amount:"); /*輸入商品數(shù)量*/scanf("%d", &astPro[iMax].iAmount);if (fwrite(&astPro[iMax], PRODUCT_LEN, 1, fp) != 1) /*在文件末尾添加該商品記錄*/{printf("can not save!\n");getch(); /*等待敲鍵盤,為了顯示上一句話*/}else{printf("product Id %d is saved!\n", astPro[iMax].iId);/*成功入庫提示*/iMax++;}printf("press y/Y to continue input:"); /*詢問是否繼續(xù)*/getchar(); /*把輸入商品數(shù)量之后的回車符取走*/cDecide = getchar(); /*判斷是否為y/Y,繼續(xù)循環(huán)*/}fclose(fp); /*不再繼續(xù)錄入,關(guān)閉文件*/printf("Input is over!\n"); }void OutputProduct() /*商品出庫函數(shù)*/ {FILE *fp;int iId, i, iMax = 0, iOut = 0; /*iId表示商品編號,iOut表示要出庫的商品數(shù)量*/char cDecide; /*存儲用戶輸入的是否出庫的判斷字符*/iMax = ShowProduct();if (iMax <= -1) /*若文件不存在,或者沒有記錄,不能進(jìn)行出庫操作*/{printf("please input first!");return;}printf("please input the id:");scanf("%d", &iId); /*輸入要出庫的商品編號*/for (i = 0; i < iMax; i++){if (iId == astPro[i].iId) /*如果找到該商品*/{printf("find the product,press y/Y to output:");getchar();cDecide = getchar();if (cDecide == 'y' || cDecide == 'Y') /*判斷是否要進(jìn)行出庫*/{printf("input the amount to output:");scanf("%d", &iOut);astPro[i].iAmount = astPro[i].iAmount - iOut;if (astPro[i].iAmount < 0) /*要出庫的數(shù)量比實(shí)際庫存量還小*/{printf("the amount is less than your input and the amount is 0 now!\n");astPro[i].iAmount = 0; /*出庫后的庫存量置為0*/}if ((fp = fopen("product.txt", "rb+")) == NULL) /*讀寫方式打開一個二進(jìn)制文件,文件必須存在*/{printf("can not open file\n"); /*提示無法打開文件*/return;}fseek(fp, i*PRODUCT_LEN, 0); /*文件指針移動到要出庫的商品記錄位置*/if (fwrite(&astPro[i], PRODUCT_LEN, 1, fp) != 1) /*寫入該商品出庫后的信息*/{printf("can not save file!\n");getch();}fclose(fp);printf("output successfully!\n");ShowProduct(); /*顯示出庫后的所有商品信息*/}return;}}printf("can not find the product!\n"); /*如果沒有找到該商品,提示用戶*/ }void DeleteProduct() /*刪除商品函數(shù)*/ {FILE *fp;int i, j, iMax = 0, iId;iMax = ShowProduct();if (iMax <= -1) /*若文件不存在,或者沒有記錄,不能進(jìn)行出庫操作*/{printf("please input first!");return;}printf("please input the id to delete:");scanf("%d", &iId);for (i = 0; i<iMax; i++){if (iId == astPro[i].iId) /*檢索是否存在要刪除的商品*/{for (j = i; j < iMax; j++)astPro[j] = astPro[j + 1];iMax--;if ((fp = fopen("product.txt", "wb")) == NULL) /*只寫方式打開文件,文件存在則先刪除并創(chuàng)建一個新文件*/{printf("can not open file\n");return;}for (j = 0; j<iMax; j++) /*將新修改的信息寫入指定的磁盤文件中*/if (fwrite(&astPro[j], PRODUCT_LEN, 1, fp) != 1){printf("can not save!");getch();}fclose(fp);printf("delete successfully!\n");ShowProduct(); /*顯示刪除后的所有商品信息*/return;}}printf("can not find the product!\n"); }void ModifyProduct() /*修改商品函數(shù)*/ {FILE *fp;int i, iMax = 0, iId;iMax = ShowProduct();if (iMax <= -1) /*若文件不存在,或者沒有記錄,不能進(jìn)行出庫操作*/{printf("please input first!");return;}printf("please input the id to modify:");scanf("%d", &iId);for (i = 0; i<iMax; i++){if (iId == astPro[i].iId) /*檢索記錄中是否有要修改的商品*/{printf("find the product, you can modify!\n");printf("id:");scanf("%d", &astPro[i].iId);printf("Name:");scanf("%s", &astPro[i].acName);printf("Producer:");scanf("%s", &astPro[i].acProducer);printf("Date:");scanf("%s", &astPro[i].acDate);printf("Price:");scanf("%lf", &astPro[i].dPrice);printf("Amount:");scanf("%d", &astPro[i].iAmount);if ((fp = fopen("product.txt", "rb+")) == NULL){printf("can not open\n");return;}fseek(fp, i*PRODUCT_LEN, 0); /*將新修改的信息寫入指定的磁盤文件中*/if (fwrite(&astPro[i], PRODUCT_LEN, 1, fp) != 1){printf("can not save!");getch();}fclose(fp);printf("modify successful!\n");ShowProduct(); /*顯示修改后的所有商品信息*/return;}}printf("can not find information!\n"); }void SearchProduct() /*查找商品函數(shù)*/ {//FILE *fp;int iId, i, iMax = 0;char cDecide;iMax = ShowProduct();if (iMax <= -1) /*若文件不存在,或者沒有記錄,不能進(jìn)行出庫操作*/{printf("please input first!");return;}printf("please input the id:");scanf("%d", &iId);for (i = 0; i<iMax; i++)if (iId == astPro[i].iId) /*查找輸入的編號是否在記錄中*/{printf("find the product,press y/Y to show:");getchar();cDecide = getchar();if (cDecide == 'y' || cDecide == 'Y'){printf("id name producer date price amount\n");printf(FORMAT, DATA); /*將查找出的結(jié)果按指定格式輸出*/return;}}printf("can not find the product"); /*未找到要查找的信息*/ }int ShowProduct() /*顯示所有商品信息*/ {int i, iMax = 0;FILE *fp;if ((fp = fopen("product.txt", "rb")) == NULL) /*只讀方式打開一個二進(jìn)制文件*/{printf("can not open file\n"); /*提示無法打開文件*/return -1;}while (!feof(fp)) /*判斷文件是否結(jié)束*/if (fread(&astPro[iMax], PRODUCT_LEN, 1, fp) == 1)iMax++; /*統(tǒng)計文件中記錄條數(shù)*/fclose(fp); /*讀完后及時關(guān)閉文件*/if (iMax == 0) /*文件中沒有記錄時提示用戶*/printf("No record in file!\n");else /*文件中有記錄時顯示所有商品信息*/{printf("id name producer date price amount\n");for (i = 0; i < iMax; i++){printf(FORMAT, DATA); /*將信息按指定格式打印*/}}return iMax;fclose(fp); /*讀完后及時關(guān)閉文件*/if (iMax == 0) /*文件中沒有記錄時提示用戶*/printf("No record in file!\n");else /*文件中有記錄時顯示所有商品信息*/{printf("id name producer date price amount\n");for (i = 0; i < iMax; i++){printf(FORMAT, DATA); /*將信息按指定格式打印*/}}return iMax; }總結(jié)
以上是生活随笔為你收集整理的商品库存管理系统(c语言)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数字孪生可视化开发技术(ThingJS)
- 下一篇: 搭建iOS开发环境