C語言實現(xiàn)超市信息管理系統(tǒng)
更新時間:2022年03月22日 12:02:07 作者:bingongzi
這篇文章主要為大家詳細介紹了C語言實現(xiàn)超市信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了C語言實現(xiàn)超市信息管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
設(shè)計要求:設(shè)計一個超市信息管理系統(tǒng),利用結(jié)構(gòu)體存儲貨物信息和所購買商品的信息,并使用鏈表保存購物車信息,
能夠完成建立庫存信息以及文件自動建立庫存信息,對購物車添加商品、結(jié)算并修改庫存等操作,可以將庫存信息保存在文件中,并且可以對文件中的庫存信息進行讀取與顯示。
程序代碼如下:
/*ifndef/define/endif”主要目的是防止頭文件的重復包含和編譯*/ #ifndef MARKET_H #define MARKET_H ? #include<stdio.h> #include<string.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<windows.h> #define N 5 ? struct mar//該結(jié)構(gòu)體為存儲貨物信息? {? ?? ?char ID[10];//貨號? ?? ?char brand[20];//品名 ?? ?double inprice;//進價 ?? ?double outprice;//售價 ?? ?int storage;//存儲量? }; ? struct node//該結(jié)構(gòu)體為存儲購物車中的信息? { ?? ?struct mar buy;//貨物信息? ?? ?int number;//購物的數(shù)量? ?? ?struct node *next; //指向下一個購物節(jié)點? }; ? struct mar goods[N];//結(jié)構(gòu)體數(shù)組? struct node *cart;//購物車頭結(jié)點? ? int menu();//打印主菜單函數(shù)? void WenJianKucun();//文件建立庫存信息? void ShouJianKucun();//手動建立庫存信息 void DisKucun();//顯示庫存信息函數(shù) void ShopCart();//對購物車進行操作 int ShopCartMenu();//打印購物車菜單 void XianShi();//顯示購物列表 void add();//在購物車里添加商品? void UpdateKu();//更新購物車信息函數(shù)? void ?calculate();//計算所購商品價格并修改保存? ? #endif ? ? int main() {//主函數(shù)? ?? ?printf("*********************************************************\n"); ?? ?printf(" ? ? ? ? ? ? ? ?歡迎進入超市信息管理系統(tǒng)\n"); ?? ?printf("*********************************************************\n"); ?? ?int find=0; ?? ? ?? ?while(1) ?? ?{ ?? ??? ?switch(menu())? ?? ??? ?{//menu()函數(shù)為輸入選項 ?? ??? ??? ?case 1: WenJianKucun(); ?? ??? ??? ??? ??? ?find=1;?? ??? ?? ?? ??? ??? ??? ??? ?break;//選項1 文件建立庫存信息 ?? ??? ??? ??? ??? ?? ?? ??? ??? ?case 2:?? ?if(find==0) ?? ??? ??? ??? ??? ?ShouJianKucun(); ?? ??? ??? ??? ??? ?else ?? ??? ??? ??? ??? ?printf("庫存信息已存在\n"); ?? ??? ??? ??? ??? ?break;//選項2 手動建立庫存信息 ?? ??? ??? ??? ??? ? ?? ??? ??? ?case 3: DisKucun();? ?? ??? ??? ??? ??? ?break;//選項3 顯示庫存信息函數(shù) ?? ??? ??? ??? ??? ? ?? ??? ??? ?case 4: ShopCart();? ?? ??? ??? ??? ??? ?break;//選項4 對購物車進行操作 ?? ??? ??? ??? ??? ? ?? ??? ??? ?case 5: calculate();? ?? ??? ??? ??? ??? ?break;//選項5 計算所購商品價格并修改保存? ?? ??? ??? ??? ??? ? ?? ??? ??? ?case 6: system("cls"); ?? ??? ??? ??? ??? ?printf("感謝您的使用,再見!\n"); ?? ??? ??? ??? ??? ?Sleep(2000); ?? ??? ??? ??? ??? ?exit(0); ?? ??? ?} ?? ?} ?? ?return 0; } ? ? int menu() {//打印主菜單函數(shù) ?? ?char s[5];//輸入的選項? ?? ?int n;//選項為整數(shù)? ?? ?printf("\n\n請選擇下面的數(shù)字進行操作:\n"); ?? ?printf("--------------------------------------------\n");? ?? ?printf("1. 文件建立庫存信息\n"); ?? ?printf("2. 手動建立庫存信息\n"); ?? ?printf("3. 顯示所有商品信息\n"); ?? ?printf("4. 購物車\n"); ?? ?printf("5. 結(jié)算\n"); ?? ?printf("6. 退出程序\n");? ?? ?printf("--------------------------------------------\n"); ?? ?printf("請選擇對應(yīng)數(shù)字1~6(1,2選其一)\n"); ?? ?printf("本程序制作人: 2017物聯(lián)網(wǎng)工程 胡斌、劉萌欣、陳俊飛\n"); ?? ? ?? ? ?? ?while(1) ?? ?{ ?? ??? ?fflush(stdin);//清空輸入流 ?? ??? ?gets(s);//輸入一串字符串? ?? ??? ?n=atoi(s);//字符串轉(zhuǎn)化為整數(shù)? ?? ??? ? ?? ??? ? ?? ??? ?if(n<1||n>6)//判斷輸入的選項是否正確 ?? ??? ?printf("輸入錯誤,請重新輸入:\n"); ?? ??? ?else//輸入正確,結(jié)束循環(huán)? ?? ??? ?break;? ?? ?} ?? ?return n;//返回輸入選項? }? ? ? void WenJianKucun() {//文件建立庫存信息 ?? ?FILE *fp;//定義文件指針? ?? ?if((fp=fopen("kucun.txt","w"))==NULL)? ?? ?{//創(chuàng)建文件 ?? ??? ?printf("創(chuàng)建文件失敗\n"); ?? ??? ?return ; ?? ?} ?? ?//向文件中寫入信息? ?? ?fprintf(fp,"69011111 飄柔日常護理 12.00 15.00 30\n"); ?? ?fprintf(fp,"69021111 優(yōu)酸乳 1.50 2.00 200\n"); ?? ?fprintf(fp,"69031111 紅富士蘋果 2.50 3.50 300\n"); ?? ?fprintf(fp,"69041111 晨光筆芯 0.70 1.00 150\n"); ?? ?fprintf(fp,"69051111 胡醫(yī)生面膜 12.00 16.50 100\n"); ?? ?fclose(fp);//關(guān)閉文件? ?? ?printf("成功導入信息\n");? ?? ?return ; } ? ? void ShouJianKucun() {//手動建立庫存信息 ?? ?FILE *fp;//定義文件指針? ?? ?int i; ?? ?printf("請依次輸入貨物信息:\n"); ? ? printf("--------------------------------------------\n"); ?? ?for(i=0;i<N;i++)? ?? ?{//向文件中寫入信息 ?? ??? ?printf("第%d個商品:\n",i+1); ?? ??? ?printf("貨號:");? ?? ??? ?fflush(stdin);//清空輸入流 ?? ??? ?gets(goods[i].ID);//輸入貨號 ?? ??? ? ?? ??? ?printf("品名:"); ?? ??? ?fflush(stdin);//清空輸入流 ?? ??? ?gets(goods[i].brand);//輸入品名? ?? ??? ? ?? ??? ?printf("進價: "); ?? ??? ?fflush(stdin);//清空輸入流 ?? ??? ?scanf("%lf",&goods[i].inprice);//輸入進價? ?? ??? ? ?? ??? ?printf("售價:"); ?? ??? ?fflush(stdin);//清空輸入流 ?? ??? ?scanf("%lf",&goods[i].outprice);//輸入售價? ?? ??? ? ?? ??? ?printf("數(shù)量:"); ?? ??? ?fflush(stdin);//清空輸入流 ?? ??? ?scanf("%d",&goods[i].storage);//輸入數(shù)量? ?? ??? ?printf("\n"); ?? ?} ?? ?if((fp=fopen("kucun.txt","w"))==NULL)? ?? ?{//判斷文件是否創(chuàng)建失敗 ?? ??? ?printf("創(chuàng)建文件失敗。\n"); ?? ??? ?return ; ?? ?} ?? ?//fprintf(fp,"貨號 ? ? ? 品名 ? ? ?單價 ? ?庫存量\n"); ?? ?for(i=0;i<N;i++) ?? ?{//把貨物信息寫進文件 ?? ??? ?fprintf(fp,"%-11s%-15s%-8.3f%-8.3f%-7d\n",goods[i].ID,goods[i].brand,goods[i].inprice,goods[i].outprice,goods[i].storage); ?? ?} ?? ?//fwrite(goods,sizeof(struct mar),N,cun);二進制文件輸出? ?? ?fclose(fp);//關(guān)閉文件? ?? ?printf("信息導入成功\n"); ?? ?return ; } ? ? void DisKucun() {//顯示庫存信息函數(shù) ?? ?FILE *fp;//定義文件指針? ?? ?int i; ?? ?if((fp=fopen("kucun.txt","r"))==NULL)? ?? ?{//判斷是否打開了文件 ?? ??? ?printf("打開文件失敗\n"); ?? ??? ?return ; ?? ?} ?? ??? ? ?? ?for(i=0;i<N;i++)? ?? ?{//輸出物品信息 ?? ??? ?//讀取文件信息? ?? ??? ?fscanf(fp,"%s%s%lf%lf%d",goods[i].ID,goods[i].brand,&goods[i].inprice,&goods[i].outprice,&goods[i].storage); ?? ??? ?printf("--------------------------------------------\n"); ?? ??? ?//輸出文件信息? ?? ??? ?printf("貨號 ? ? ? 品名 ? ? ? ? ? 單價 ? ?庫存量\n"); ?? ??? ?printf("%-11s%-15s%-8.3f%-7d\n",goods[i].ID,goods[i].brand,goods[i].outprice,goods[i].storage); ?? ?} ?? ?fclose(fp);//關(guān)閉文件? } ? ? void ?ShopCart() {//對購物車進行操作 ?? ?while(1) ?? ?{ ?? ??? ?switch(ShopCartMenu())? ?? ??? ?{//ShopCartMenu()為輸入選項 ?? ??? ??? ?case 1: XianShi(); ?? ??? ??? ??? ??? ?break;//選項1 顯示購物車物品信息 ?? ??? ??? ?case 2: add(); ?? ??? ??? ??? ??? ?break;//選項2 添加購物車物品 ?? ??? ??? ?//case 3: deleteitem();//刪除購物車中的某項商品 ?? ??? ??? ?//?? ??? ?break; ?? ??? ??? ?case 3: return ;//選項3 退出? ?? ??? ?} ?? ?} } ? ? int ShopCartMenu() {//打印購物車菜單 ?? ?int n;//為整數(shù)? ?? ?char s[5];//輸入一串字符串? ?? ?printf("\n\n請選擇操作:\n"); ?? ?printf("--------------------------------------------\n"); ?? ?printf("1. 顯示當前可以購物列表\n"); ?? ?printf("2. 在購物車里添加商品\n"); ?? ?//printf("3. 刪除購物車商品\n");? ?? ?printf("3. 退出\n"); ?? ?printf("--------------------------------------------\n"); ?? ?printf("請選擇對應(yīng)數(shù)字1~3\n"); ?? ? ?? ? ?? ?while(1) ?? ?{ ?? ??? ?fflush(stdin);//清空輸入流 ?? ??? ?gets(s);//輸入一串字符串? ?? ??? ?n=atoi(s);//字符串轉(zhuǎn)化為整數(shù)? ?? ??? ?if(n<1||n>3)//判斷輸入的選項是否正確? ?? ??? ?printf("輸入錯誤,請重新輸入: \n"); ?? ??? ?else//輸入正確,結(jié)束循環(huán)? ?? ??? ?break; ?? ?} ?? ?return n;//返回輸入選項? } ? ? void XianShi() {//顯示購物列表 ?? ?struct node *p; //定義節(jié)點指針? ?? ?p=cart;//把購物車鏈表賦給p? ?? ?FILE *fp1;//定義文件指針? ?? ?if((fp1=fopen("cart.txt","r"))==NULL) ?? ?{//判斷是否打開了文件? ?? ??? ?printf("打開文件失敗\n"); ?? ??? ?//return ; ?? ?} ?? ? ?? ?if(p==NULL) ?? ?{//購物車為空? ?? ??? ?printf("目前購物車為空:"); ?? ??? ?return ; ?? ?} ?? ?else ?? ?{//購物車不為空? ?? ??? ?while(p!=NULL)? ?? ??? ?{//把購物車物品不斷減一,直到為空 ?? ??? ??? ?printf("--------------------------------------------\n"); ?? ??? ??? ?printf("貨號 ? ? ? 品名 ? ? ? ? ? 單價 ? ?數(shù)量\n"); ?? ??? ??? ?printf("%-11s%-15s%-8.3f%-7d\n",p->buy.ID,p->buy.brand,p->buy.outprice,p->number);?? ?//輸出物品信息? ?? ??? ??? ?p=p->next;? ?? ??? ?} ?? ?} ?? ?fclose(fp1);//關(guān)閉文件? ?? ?return ; } ? ? void add() {//在購物車里添加商品? ?? ?FILE *fp,*fp1;//fp表示kucun文件,fp1表示cart文件? ?? ?struct node *p1,*p,*p2;//定義節(jié)點指針? ?? ?int i,n;//n表示商品數(shù)量? ?? ?char s[20];//表示貨號或者品名? ?? ?char choice1[20],choice2[20];//選擇項(y繼續(xù),n繼續(xù))? ?? ? ?? ? ?? ?do{ ?? ??? ?printf("輸入所需物品的名稱或貨號:\n"); ?? ??? ?fflush(stdin);//清空輸入流? ?? ??? ?gets(s);//輸入貨號或者品名 ?? ? ?? ??? ?if((fp=fopen("kucun.txt","r"))==NULL) ?? ??? ?{//打開文件? ?? ??? ??? ?printf("打開文件失敗\n"); ?? ??? ??? ?continue; ?? ??? ?} ?? ??? ?for(i=0;i<N;i++) ?? ??? ?{//循環(huán)N次? ?? ??? ??? ?fscanf(fp,"%s%s%*lf%lf%d",goods[i].ID,goods[i].brand,&goods[i].outprice,&goods[i].storage);//從文件中讀取貨物信息? ?? ??? ??? ? ?? ??? ??? ?if((strcmp(goods[i].ID,s)==0||strcmp(goods[i].brand,s)==0)&&goods[i].storage>0)//找輸入對應(yīng)的商品? ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("已找到所需商品:\n"); ?? ??? ??? ??? ?printf("--------------------------------------------\n"); ?? ??? ??? ??? ?printf("貨號 ? ? ? 品名 ? ? ? ? ? 單價 ? ?數(shù)量\n"); ?? ??? ??? ??? ?printf("%-11s%-15s%-8.3f%-7d\n",goods[i].ID,goods[i].brand,goods[i].outprice,goods[i].storage);//輸出所需物品信息? ?? ??? ??? ??? ? ?? ??? ??? ??? ?printf("請輸入所需商品數(shù)量: "); ?? ??? ??? ??? ?scanf("%d",&n);//商品數(shù)量? ?? ??? ??? ??? ?if(n>goods[i].storage) ?? ??? ??? ??? ?{//判斷是否還可以購買不? ?? ??? ??? ??? ??? ?printf("該商品庫存不足\n"); ?? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?printf("\n是否購買此商品?(Y/N)\n"); ?? ??? ??? ??? ?fflush(stdin);//清空輸入流? ?? ??? ??? ??? ?scanf("%s",choice1);//輸入一個選項? ?? ??? ??? ??? ?if(strcmp(choice1,"Y")==0||strcmp(choice1,"y")==0) ?? ??? ??? ??? ?{//輸入y/Y表示購買此商品? ?? ??? ??? ??? ??? ?p=new node;//生成新節(jié)點? ?? ??? ??? ??? ??? ?if(p==NULL) ?? ??? ??? ??? ??? ?{//分配內(nèi)存失敗? ?? ??? ??? ??? ??? ??? ?printf("內(nèi)存申請失??!\n"); ?? ??? ??? ??? ??? ??? ?exit(1);//退出? ?? ??? ??? ??? ??? ?}?? ? ?? ??? ??? ??? ??? ?p->number=n;//商品數(shù)量? ?? ??? ??? ??? ??? ?p->buy=goods[i];//貨物信息? ?? ??? ??? ??? ??? ?p->next=NULL; ?? ??? ??? ??? ??? ?p1=cart;//把頭結(jié)點賦給p1 ?? ? ?? ??? ??? ??? ??? ?if(cart==NULL)//頭結(jié)點為空? ?? ??? ??? ??? ??? ?cart=p;//把節(jié)點賦值給頭結(jié)點? ?? ??? ??? ??? ??? ?else ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?while(p1->next!=NULL) ?? ??? ??? ??? ??? ??? ?p1=p1->next;//把鏈表循環(huán)到尾部? ?? ??? ??? ??? ??? ??? ?p->next=p1->next;? ?? ??? ??? ??? ??? ??? ?p1->next=p;//把新節(jié)點p掛在鏈表尾部? ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ??? ?else ?? ??? ??? ??? ?printf("輸入錯誤\n"); ?? ??? ??? ??? ?break;//找到商品結(jié)束循環(huán)? ?? ??? ??? ?} ?? ??? ?}?? ? ?? ??? ?if(i==N)//循環(huán)完畢還沒找到對應(yīng)商品? ?? ??? ?printf("未找到所需物品\n"); ?? ??? ?fclose(fp);//關(guān)閉文件? ?? ? ?? ??? ?UpdateKu();//更新庫存信息函數(shù)? ?? ??? ?printf("是否繼續(xù)購物?(Y/N)\n"); ?? ??? ?fflush(stdin);//清空輸入流? ?? ??? ?scanf("%s",choice2);//輸入選項 ?? ??? ?if(strcmp(choice2,"y")!=0&&strcmp(choice2,"Y")!=0) ?? ??? ?printf("放棄購買,返回菜單!\n"); ?? ??? ? ?? ?}while(strcmp(choice2,"y")==0||strcmp(choice2,"Y")==0);//y/Y繼續(xù)循環(huán)? ?? ?return ; }? ? ? //更新購物車信息函數(shù)? void UpdateKu() { ?? ?FILE *fp; ?? ?struct node *p; ?? ?if((fp=fopen("cart.txt","w"))==NULL)? ?? ?{//判斷文件是否創(chuàng)建失敗 ?? ??? ?printf("創(chuàng)建文件失敗。\n"); ?? ??? ?return ; ?? ?} ?? ? ?? ?p=cart;//把購物車鏈表賦給p2? ?? ?while(p!=NULL) ?? ?{?? ? ?? ?//?? ?fprintf(fp1,"貨號 ? ? ? 品名 ? ? ?單價 ? ?庫存量\n"); ?? ??? ?//把貨物信息寫進文件 ?? ??? ?fprintf(fp,"%-11s%-15s%-8.3f%-7d\n",p->buy.ID,p->buy.brand,p->buy.outprice,p->number); ?? ??? ?p=p->next;//指向下一個節(jié)點? ?? ?}?? ? ?? ?fclose(fp);//關(guān)閉文件? ?? ? ?? ?return ;? } ? ? void calculate() {//計算所購商品價格并修改保存 ?? ?struct node *p; ?? ?p=cart;//把購物車(cart)鏈表賦給p? ?? ?double sum=0;//購買商品應(yīng)付錢數(shù)? ?? ?double pay;//購買商品實付錢數(shù)? ?? ?FILE *fp;//定義文件指針? ?? ?int i; ?? ?printf("以下是購物清單:\n"); ?? ?XianShi();//調(diào)用函數(shù)顯示購物列表信息? ?? ? ?? ? ?? ?if((fp=fopen("kucun.txt","r"))==NULL) ?? ?{//打開文件 ? ?? ??? ?printf("打開文件失敗\n"); ?? ??? ?return ; ?? ?} ?? ? ?? ?for(i=0;i<N;i++) ?? ?{//從文件中讀取信息? ?? ??? ?fscanf(fp,"%s%s%*lf%lf%d",goods[i].ID,goods[i].brand,&goods[i].outprice,&goods[i].storage); ?? ?} ?? ?fclose(fp);//關(guān)閉文件? ?? ? ?? ?while(p!=NULL) ?? ?{//當鏈表不為空時? ?? ??? ?sum=sum+p->buy.outprice*p->number;//計算應(yīng)付錢數(shù)? ?? ??? ?for(i=0;i<N;i++) ?? ??? ?{//找出對應(yīng)商品庫存量? ?? ??? ??? ?if(strcmp(goods[i].ID,p->buy.ID)==0) ?? ??? ??? ?{//找到對應(yīng)商品? ?? ??? ??? ??? ?goods[i].storage=goods[i].storage-p->number;//庫存量變化? ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ?}? ?? ??? ?p=p->next;//指向下一個節(jié)點? ?? ?} ?? ? ?? ?printf("總計:%-8.3f\n",sum);//輸出購買物品共需多少錢? ?? ?printf("輸入實付金額:"); ?? ?scanf("%lf",&pay); ?? ?printf("實付: ?%-8.3f ? ?找零: ? ?%8.3f\n",pay,pay-sum); ?? ? ?? ?if((fp=fopen("kucun.txt","w"))==NULL) ?? ?{//打開文件? ?? ??? ?printf("寫入文件失敗\n"); ?? ??? ?return ; ?? ?} ?? ?for(i=0;i<N;i++) ?? ?{//向文件中寫入信息? ?? ??? ?fprintf(fp,"%-11s%-15s%-8.3f%-8.3f%-7d\n",goods[i].ID,goods[i].brand,goods[i].inprice,goods[i].outprice,goods[i].storage); ?? ?} ?? ?fclose(fp);//關(guān)閉文件? ?? ? ?? ?return ; }
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
相關(guān)文章
C++11中l(wèi)ambda、std::function和std:bind詳解
大家都知道C++11中增加了許多的新特性,下面在這篇文中我們就來聊一下lambda表達式,閉包,std::function以及std::bind。文中介紹的很詳細,相信對大家具有一定的參考價值,有需要的朋友們下面來一起看看吧。2017-01-01