題目:超市管理系統(tǒng)
要求:實現(xiàn)簡單的超市商品信息管理,系統(tǒng)要求以菜單方式工作,因而根據(jù)題目要求,提供鍵盤式選擇菜單實現(xiàn)功能選擇,商品包括編號、名稱、進價、年售價、庫存址等(商品名稱和編號不重復)。商品信息采用手動輸入保存,所以應提供商品信息的輸入、輸出等操作;在程序中需要顯示商品的信息,應提供顯示等操作;要實現(xiàn)商品的進貨和退貨,應提供添加和刪除商品信息(包括名稱、編號、進價、售價、庫存)等操作;要實現(xiàn)商品信息的銷售,則要提供計算應收金額和實收金額以及對商品庫存量進行改變的功能;要實現(xiàn)商品信息的查詢(包括通過編號查詢和名稱查詢兩種方式),則要提供查找功能;要實現(xiàn)商品的排序(包括通過編號從小到大或售價從低到高,兩種方式),則需要提供排序的功能。
系統(tǒng)以菜單方式工作。
商品信息錄入功能。
商品信息顯示功能。
商品進貨功能。
商品退貨功能。
商品銷售功能。
商品查詢方式:
? ? ? ? ?(1)按商品編號查詢;
? ? ? ? ?(2)按商品名稱查詢。
? ? ? ? 8.商品排序方式:
? ? ? ? ? (1)按商品編號從小到大排;
? ? ? ? ? (2)按商品售價從低到高排。
總體設計
根據(jù)上面的需求分析,可以將這個系統(tǒng)設計分為以下模塊:商品信息建立模塊、商品信息顯示模塊、商品進貨模塊、商品退貨模塊、商品銷售模塊、商品查詢模塊、商品排序模塊。
詳細設計
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1.數(shù)據(jù)信息
編號、名稱、進價、售價、庫存。
建立商品信息結構體,結構體成員包括:編號、名稱、進價、售價、庫存。
struct shangpin//商品信息的結構題庫存
{
? ? char bianhao[10];
? ? char mingcheng[10];
? ? int jinjia;
? ? int shoujia;
? ? int kucun;
}num[N+2];
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.模塊設計
1)建立模塊:輸入商品的編號、名稱、進價、售價、庫存的相關信息,通過自己定義的 void Jianlishangpinku();函數(shù)來實現(xiàn)。
void Jianlishangpinku()//建立商品庫
{
int i;
printf("請依次輸入貨物信息: \n");
for (i = O;i < N; i++)
{//向文件中寫入信息
printf("------------------------------------\n");
printf("第%d個商品: \n",i + 1);
printf("編號:");
scanf("%s",num[i].bianhao);//輸入編號
printf("名稱:");
scanf("%s",num[i].mingcheng);/輸入名稱
printf("進價:");
scanf("%d", &num[i].jinjia);/輸入進價
printf("售價:");
scanf("%d", &num[i].shoujia);//輸入售價
printf("庫存:");
scanf("%d", &num[i].kucun);/輸入庫存
printf("------------------------------------\n");
}
return;
}
?
通過for循環(huán)對N個商品信息進行輸入。
-
2)顯示模塊:瀏覽所有商品的相關信息,通過自己定義的void Xianshiquanbushangpinxinxi();函數(shù)來實現(xiàn)。
void Xianshiquanbushangpinxinxi()//顯示全部商品信息 { int i; for (i = O; i <= N; i++) { printf("---------------------------------\n"); printf("編號:%s\n", num[i].bianhao); printf("名稱:%s\n", num[i].mingcheng); printf("進價:%d\n", num[i].jinjia); printf("售價:%d\n", num[i].shoujia); printf("庫存:%d\n", num[i].kucun); printf("---------------------------------\n"); } return; }
同樣采用for循環(huán)對所有商品信息進行輸出。
-
3)進貨模塊:可以通過輸入的商品名稱先檢測是否有該商品,如果有則改變庫存量,如果沒有就建立新的商品信息,通過自己定義的void Jinhuo();函數(shù)來實現(xiàn)。
void Jinhuo()//進貨 { int i; printf("輸入進貨商品:"); scanf("%s",jiance.mingcheng); for (i = 0; i < N; i++) { if (strcmp(num[i].mingcheng, jiance.mingcheng) == 0)/檢測是否存在該商品 { printf("存在該商品,輸入庫存量:"); scanf("%d", &num[i].kucun); break; } if (i == N-1)/檢測到第5件商品后發(fā)現(xiàn)無該商品則新建該商品 { printf("-------------------------------------\n"); printf("編號:"); scanf("%s",num[i+1].bianhao);/輸入編號 printf("名稱:"); scanf("%s",num[i+1].mingcheng);/輸入名稱 printf("進價:"); scanf("%d", &num[i+1].jinjia);/輸入進價 printf("售價:"); scanf("%d", &num[i+1].shoujia);//輸入售價 printf("庫存:"); scanf("%d", &num[i+1].kucun);/輸入庫存 printf("--------------------------------------\n");
通過strcmp對輸入的商品與商品庫中的商品進行比較,為0是即找到該商品,便對該商品庫存量進行重新賦值,若不存在為0的情況則是因為商品庫中無該商品,則建立新的商品信息。
4)退貨模塊:退貨方式有兩種情況,一種是人為選擇刪除某項商品信息,通過輸入商品名稱實現(xiàn),一種是檢測庫存量為零的商品再選擇是否刪除商品信息。該模塊通過自己定義的void Tuihuo();函數(shù)來實現(xiàn)。
?void Tuihuo0//退貨 { int i,j,x,k=0; printf("輸入退貨商品名稱:"); scanf("%s",tui.name); for(i=0;i<=N;i++)/循環(huán)進行檢測要退貨的商品 if (strcmp(num[i].mingcheng, tui.name) == 0) for(j=i;j<=N+1;j++)/對退的貨物進行從后向前覆蓋 { strcpy(num[j].bianhao,num[j+1].bianhao); strcpy(num[j].mingcheng,num[j+1].mingcheng); num[j].jinjia=num[j+1].jinjia; num[j].shoujia=num[j+1].shoujia; num[j].kucun=num[j+1].kucun; } for(i=0;i<=N;i++)//檢測是否有庫存為0的商品 { if(num[i].kucun==0) { k++;/如果有庫存為0的商品則k不為0,如果有商品為0的商品則輸出該商品 printf("------------------------------\n"); printf("編號:%s\n", num[i].bianhao); printf("名稱:%s\n", num[i].mingcheng); printf("進價:%d\n", num[i].jinjia); printf("售價:%d\n", num[i].shoujia); printf("庫存:%d\n", num[i].kucun); printf("------------------------------\n"); printf("是否刪除該商品信息\n1:是\n2:否\n請選擇:“); scanf("%d", &x); if(x==1) for(j=i;j<=N;j++)/若要刪除該商品,則將該商品進行從后往前覆蓋 { strcpy(num[j].bianhao,num[j+1].bianhao); strcpy(num[j].mingcheng,num[j+1].mingcheng); num[j].jinjia=num[j+1].jinjia; num[j].shoujia=num[j+1].shoujia; num[j].kucun=num[j+1].kucun; } } } if(k==0) printf("無庫存為0的商品\n"); }
退貨同樣采用strcmp進行比較,但不同的是退貨時并不是以刪除信息的方式進行,而是通過strcpy將該商品以后的商品信息進行向前覆蓋,以此達到刪除該商品信息的作用。
5)銷售模塊:輸入想要購買的商品編號以及想要購買的商品數(shù)量后進行應付金額計算,若實際付款金額小于應付金額,則顯示交易失敗,若交易成功,則將該商品的庫存量減去銷售量。通過自己定義的void Xiaoshou();函數(shù)來實現(xiàn)。
?void Xiaoshou()//商品銷售 { int i,n,p,q; printf("請輸入購買商品的編號:"); scanf("%s",sell.bianhao); printf("請輸入購買商品的數(shù)量:"); scanf("%d", &n); for(i=0;i<=N;i++)//循環(huán)檢測要銷售的商品 { if (strcmp(num[i].bianhao, sell.bianhao) == 0) break; } if(n>num[i].kucun)/檢測庫存是否充足 { scanf("庫存不足"); return; } p=num[i].shoujia; printf("應收金額:%d\n",n*p);/商品數(shù)量乘以售價 printf("實際收款:"); scanf("%d", &q); if(q<n*p)//檢測實際收款是否與應收款相符 { printf("交易失敗"); return; } else num[i].kucun=(num[i].kucun-n);/將庫存減去銷售量 }
采用for循環(huán)進行商品查找,再采用結構體中的庫存成員對庫存進行改變。
-
6)查詢模塊:輸入想要查詢的商品名稱,然后顯示所輸入商品的信息(包括:編號、名稱、進價、售價、庫存)。通過自己定義的void Chaxun();來實現(xiàn)。
void Chaxun()//查詢輸入的商品信息 { int c,i; printf("請選擇查詢方式\n1:編號查詢\n2:名稱查詢\n請選擇:"); scanf("%d", &c); if(c==1)/選擇編號查詢 { printf("請輸入商品編號:"); scanf("%s",cha.bianhao); for(i=0;i<=N;i++)/循環(huán)查詢到輸入的編號信息 { if(strcmp(num[i].bianhao,cha.bianhao)==0) break; } printf("------------------------------\n"); printf("編號:%s\n", num[i].bianhao); printf("名稱:%s\n", num[i].mingcheng); printf("進價:%d\n", num[i].jinjia); printf("售價:%d\n", num[i].shoujia); printf("庫存:%d\n", num[i].kucun); printf("------------------------------\n"); } if(c==2)/選擇名稱查詢 { printf("請輸入商品名稱:"); scanf("%s",cha.mingcheng); for(i=0;i<=N;i++)/循環(huán)查詢到輸入的名稱信息 { if(strcmp(num[i].mingcheng,cha.mingcheng)==0) break; } printf("-------------------------------\n"); printf("編號:%s\n", num[i].bianhao); printf("名稱:%s\n", num[i].mingcheng); printf("進價:%d\n", num[i].jinjia); printf("售價:%d\n", num[i].shoujia); printf("庫存:%d\n", num[i].kucun); printf("--------------------------------\n"); }
先采用if對想要查詢的方式進行選擇,再直接引用結構中的成員進行輸出。
-
7)排序模塊:輸入想要查詢的方式(包括通過編號查詢和名稱查詢兩種方式),然后根據(jù)所選方式進入相應的排序程序(選擇排序法)。通過自己定義的void Pa
上圖為按商品編號排序的程序,采用的是選擇排序法,引用了程序開頭定義的結構變量。if(x==1)/按商品編號排序(選擇排序) { for(j=0;j<N+1;j++) { for(i=j+1;i<=N+1;i++) { if(strcmp(num[j].bianhao,num[i].bianhao)>0) { strcpy(pai.bianhao,num[i].bianhao); strcpy(num[i].bianhao,num[j].bianhao); strcpy(num[j].bianhao,pai.bianhao); strcpy(pai.mingcheng,num[i].mingcheng); strcpy(num[i].mingcheng,num[j].mingcheng); strcpy(num[j].mingcheng,pai.mingcheng); jinjia=num[i].jinjia; num[i].jinjia=num[j].jinjia; num[j].jinjia=jinjia; shoujia=num[i].shoujia; num[i].shoujia=num[i].shoujia; num[i].shoujia=shoujia; kucun=num[i].kucun; num[i].kucun=num[i].kucun; num[j].kucun=kucun; } } } }
- 1)商品庫的初始化:
for(i=0;i<=N+1;i++)//初始化商品數(shù)據(jù)庫 { strcpy(num[i].bianhao,"88888");/編號 strcpy(num[i].mingcheng, "88888");/名稱 num[i].jinjia=88888;//進價 num[i].shoujia=88888;/售價 num[i].kucun=88888;/庫存 }
2)主菜單的顯示和功能的選擇:
while(1)//主菜單顯示和功能的循環(huán) { printf("歡迎使用超市管理系統(tǒng)\n"); printf("\n**************\n"); printf("1 建立數(shù)據(jù)庫\n"); printf("2顯示部商品信息\n"); printf("3 進貨\n"); printf("4 退貨\n"); printf("5商品銷售\n"); printf("6商品查詢\n"); printf("7商品排序\n"); printf("************\n"); printf("\n請選擇: "); scanf("%d", &choice); while(1)/檢驗輸入功能數(shù)字是否正確 { if (choice < 1 | choice>7) printf("輸入錯誤,請重新輸入。"); break; } else break; } switch (choice)/功能選擇 { case 1: Jianlishangpinku(); break; case 2: Xianshiquanbushangpinxinxi(0; break; case 3:Jinhuo0); break; case 4:Tuihuo(); break; case 5:Xiaoshou0; break; case 6:Chaxun(); break; case 7: Paixu0; break; } } return 0;
采用while(1){};對菜單進行重復打?。疵窟\行完一個函數(shù)就顯示主菜單)并且每運行一個函數(shù)后都可以對下個要運行的函數(shù)進行選擇(通過switch(choice){};實現(xiàn)),即每選擇一次,程序就進入到相應的函數(shù),函數(shù)運行完成后便跳出函數(shù),進入到主函數(shù)進行再次選擇。文章來源:http://www.zghlxwxcb.cn/news/detail-787454.html
-
完整代碼如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-787454.html
#include<stdio.h> #include<string.h> #define N 5 struct shangpin//商品信息的結構題庫存 { char bianhao[10]; char mingcheng[10]; int jinjia; int shoujia; int kucun; }num[N+2]; struct jianceshangpin//檢測時引用的商品名稱 { char mingcheng[10]; }jiance; struct tuihuo//退貨時引用的商品名稱 { char name[10]; }tui; struct xiaoshou//銷售時引用的商品編號 { char bianhao[10]; }sell; struct chaxun//查詢時引用的商品信息 { char bianhao[10]; char mingcheng[10]; }cha; struct paixu//排序時引用的中間變量 { char bianhao[10]; char mingcheng[10]; }pai; //聲明函數(shù) void Jianlishangpinku(); void Xianshiquanbushangpinxinxi(); void Jinhuo(); void Tuihuo(); void Xiaoshou(); void Chaxun(); void Paixu(); int main() { int choice,i; for(i=0;i<=N+1;i++)//初始化商品數(shù)據(jù)庫 { strcpy(num[i].bianhao,"88888");//編號 strcpy(num[i].mingcheng,"88888");//名稱 num[i].jinjia=88888;//進價 num[i].shoujia=88888;//售價 num[i].kucun=88888;//庫存 } while (1)//主菜單顯示和功能的循環(huán) { printf("歡迎使用超市管理系統(tǒng)\n"); printf("\n*****************************************\n"); printf("1 建立數(shù)據(jù)庫\n"); printf("2 顯示全部商品信息\n"); printf("3 進貨\n"); printf("4 退貨\n"); printf("5 商品銷售\n"); printf("6 商品查詢\n"); printf("7 商品排序\n"); printf("*****************************************\n"); printf("\n請選擇:"); scanf("%d", &choice); while (1)//檢驗輸入功能數(shù)字是否正確 { if (choice < 1 || choice>7) { printf("輸入錯誤,請重新輸入。"); break; } else break; } switch (choice)//功能選擇 { case 1:Jianlishangpinku(); break; case 2:Xianshiquanbushangpinxinxi(); break; case 3:Jinhuo(); break; case 4:Tuihuo(); break; case 5:Xiaoshou(); break; case 6:Chaxun(); break; case 7:Paixu(); break; } } return 0; } void Jianlishangpinku()//建立商品庫 { int i; printf("請依次輸入貨物信息:\n"); for (i = 0; i < N; i++) {//向文件中寫入信息 printf("--------------------------------------------------\n"); printf("第%d個商品:\n", i + 1); printf("編號:"); scanf("%s",num[i].bianhao);//輸入編號 printf("名稱:"); scanf("%s",num[i].mingcheng);//輸入名稱 printf("進價:"); scanf("%d", &num[i].jinjia);//輸入進價 printf("售價:"); scanf("%d", &num[i].shoujia);//輸入售價 printf("庫存:"); scanf("%d", &num[i].kucun);//輸入庫存 printf("---------------------------------------------------\n"); } return; } void Xianshiquanbushangpinxinxi()//顯示全部商品信息 { int i; for (i = 0; i <= N; i++) { printf("-------------------------------------------\n"); printf("編號:%s\n", num[i].bianhao); printf("名稱:%s\n", num[i].mingcheng); printf("進價:%d\n", num[i].jinjia); printf("售價:%d\n", num[i].shoujia); printf("庫存:%d\n", num[i].kucun); printf("-------------------------------------------\n"); } return; } void Jinhuo()//進貨 { int i; printf("輸入進貨商品:"); scanf("%s",jiance.mingcheng); for (i = 0; i < N; i++) { if (strcmp(num[i].mingcheng, jiance.mingcheng) == 0)//檢測是否存在該商品 { printf("存在該商品,輸入庫存量:"); scanf("%d", &num[i].kucun); break; } if (i == N-1)//檢測到第5件商品后發(fā)現(xiàn)無該商品則新建該商品 { printf("--------------------------------------------------\n"); printf("編號:"); scanf("%s",num[i+1].bianhao);//輸入編號 printf("名稱:"); scanf("%s",num[i+1].mingcheng);//輸入名稱 printf("進價:"); scanf("%d", &num[i+1].jinjia);//輸入進價 printf("售價:"); scanf("%d", &num[i+1].shoujia);//輸入售價 printf("庫存:"); scanf("%d", &num[i+1].kucun);//輸入庫存 printf("---------------------------------------------------\n"); } } } void Tuihuo()//退貨 { int i,j,x,k=0; printf("輸入退貨商品名稱:"); scanf("%s",tui.name); for(i=0;i<=N;i++) //循環(huán)進行檢測要退貨的商品 { if (strcmp(num[i].mingcheng, tui.name) == 0) for(j=i;j<=N+1;j++)//對退的貨物進行從后向前覆蓋 { strcpy(num[j].bianhao,num[j+1].bianhao); strcpy(num[j].mingcheng,num[j+1].mingcheng); num[j].jinjia=num[j+1].jinjia; num[j].shoujia=num[j+1].shoujia; num[j].kucun=num[j+1].kucun; } } for(i=0;i<=N;i++)//檢測是否有庫存為0的商品 { if(num[i].kucun==0) { k++;//如果有庫存為0的商品則k不為0,如果有商品為0的商品則輸出該商品 printf("-------------------------------------------\n"); printf("編號:%s\n", num[i].bianhao); printf("名稱:%s\n", num[i].mingcheng); printf("進價:%d\n", num[i].jinjia); printf("售價:%d\n", num[i].shoujia); printf("庫存:%d\n", num[i].kucun); printf("-------------------------------------------\n"); printf("是否刪除該商品信息\n1:是\n2:否\n請選擇:"); scanf("%d",&x); if(x==1) for(j=i;j<=N;j++)//若要刪除該商品,則將該商品進行從后往前覆蓋 { strcpy(num[j].bianhao,num[j+1].bianhao); strcpy(num[j].mingcheng,num[j+1].mingcheng); num[j].jinjia=num[j+1].jinjia; num[j].shoujia=num[j+1].shoujia; num[j].kucun=num[j+1].kucun; } } } if(k==0) printf("無庫存為0的商品\n"); } void Xiaoshou()//商品銷售 { int i,n,p,q; printf("請輸入購買商品的編號:"); scanf("%s",sell.bianhao); printf("請輸入購買商品的數(shù)量:"); scanf("%d",&n); for(i=0;i<=N;i++)//循環(huán)檢測要銷售的商品 { if (strcmp(num[i].bianhao, sell.bianhao) == 0) break; } if(n>num[i].kucun)//檢測庫存是否充足 { scanf("庫存不足"); return; } p=num[i].shoujia; printf("應收金額:%d\n",n*p);//商品數(shù)量乘以售價 printf("實際收款:"); scanf("%d",&q); if(q<n*p)//檢測實際收款是否與應收款相符 { printf("交易失敗"); return; } else num[i].kucun=(num[i].kucun-n);//將庫存減去銷售量 } void Chaxun()//查詢輸入的商品信息 { int c,i; printf("請選擇查詢方式\n1:編號查詢\n2:名稱查詢\n請選擇:"); scanf("%d",&c); if(c==1)//選擇編號查詢 { printf("請輸入商品編號:"); scanf("%s",cha.bianhao); for(i=0;i<=N;i++)//循環(huán)查詢到輸入的編號信息 { if(strcmp(num[i].bianhao,cha.bianhao)==0) break; } printf("-------------------------------------------\n"); printf("編號:%s\n", num[i].bianhao); printf("名稱:%s\n", num[i].mingcheng); printf("進價:%d\n", num[i].jinjia); printf("售價:%d\n", num[i].shoujia); printf("庫存:%d\n", num[i].kucun); printf("-------------------------------------------\n"); } if(c==2)//選擇名稱查詢 { printf("請輸入商品名稱:"); scanf("%s",cha.mingcheng); for(i=0;i<=N;i++)//循環(huán)查詢到輸入的名稱信息 { if(strcmp(num[i].mingcheng,cha.mingcheng)==0) break; } printf("-------------------------------------------\n"); printf("編號:%s\n", num[i].bianhao); printf("名稱:%s\n", num[i].mingcheng); printf("進價:%d\n", num[i].jinjia); printf("售價:%d\n", num[i].shoujia); printf("庫存:%d\n", num[i].kucun); printf("-------------------------------------------\n"); } } void Paixu()//商品排序 { int x,i,j,jinjia,shoujia,kucun; printf("請選擇排序的方法:\n1:按商品編號排序\n2:按商品價格排序\n請選擇:"); scanf("%d",&x); if(x==1)//按商品編號排序(選擇排序) { for(j=0;j<N+1;j++) { for(i=j+1;i<=N+1;i++) { if(strcmp(num[j].bianhao,num[i].bianhao)>0) { strcpy(pai.bianhao,num[i].bianhao); strcpy(num[i].bianhao,num[j].bianhao); strcpy(num[j].bianhao,pai.bianhao); strcpy(pai.mingcheng,num[i].mingcheng); strcpy(num[i].mingcheng,num[j].mingcheng); strcpy(num[j].mingcheng,pai.mingcheng); jinjia=num[i].jinjia; num[i].jinjia=num[j].jinjia; num[j].jinjia=jinjia; shoujia=num[i].shoujia; num[i].shoujia=num[j].shoujia; num[j].shoujia=shoujia; kucun=num[i].kucun; num[i].kucun=num[j].kucun; num[j].kucun=kucun; } } } } if(x==2)//按商品售價排序(選擇排序法) { for(j=0;j<N+1;j++) { for(i=j+1;i<=N+1;i++) { if(num[j].shoujia>num[i].shoujia) { strcpy(pai.bianhao,num[i].bianhao); strcpy(num[i].bianhao,num[j].bianhao); strcpy(num[j].bianhao,pai.bianhao); strcpy(pai.mingcheng,num[i].mingcheng); strcpy(num[i].mingcheng,num[j].mingcheng); strcpy(num[j].mingcheng,pai.mingcheng); jinjia=num[i].jinjia; num[i].jinjia=num[j].jinjia; num[j].jinjia=jinjia; shoujia=num[i].shoujia; num[i].shoujia=num[j].shoujia; num[j].shoujia=shoujia; kucun=num[i].kucun; num[i].kucun=num[j].kucun; num[j].kucun=kucun; } } } } }
到了這里,關于C語言超市管理系統(tǒng)設計的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!