C語言實現(xiàn)超市管理系統(tǒng)
本文實例為大家分享了C語言實現(xiàn)超市管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
超市管理系統(tǒng)
1.包括管理員和顧客
2.管理員有登入,錄入商品信息,顯示所有商品信息功能
3.顧客有購物車和結(jié)算功能
4.購物車具有顯示商品列表,顯示購物車商品,往購物車添加商品的功能




函數(shù)
void UpdateKu();//更新購物車信息函數(shù) void calculate();//計算所購商品價格并修改保存int menu1();//打印主菜單函數(shù) int menu2();//打印管理員菜單函數(shù) int menu3();//打印顧客函數(shù) void CreateGoods();//錄入商品信息函數(shù) void ShowGoods();//顯示庫存信息函數(shù) void ShopCart();//對購物車進行操作 int ShopCartMenu();//打印購物車菜單 void ShowCart();//顯示購物列表 void add();//在購物車里添加商品
建立庫存函數(shù)
void CreateGoods()
{//手動建立庫存信息
FILE *fp;//定義文件指針
int i;
printf("請輸入需要錄入的商品個數(shù):\n");
scanf("%d",&n);//輸入數(shù)量
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("保質(zhì)期:");
fflush(stdin);//清空輸入流
gets(goods[i].date);//輸入貨號
printf("\n");
}
if((fp=fopen("kucun.txt","w"))==NULL)
{//判斷文件是否創(chuàng)建失敗
printf("創(chuàng)建文件失敗。\n");
return ;
}
//fprintf(fp,"貨號 品名 單價 庫存量 保質(zhì)期\n");
for(i=0;i<n;i++)
{//把貨物信息寫進文件
fprintf(fp,"%-11s%-15s%-8.3f%-8.3f%-11d%-11s\n",goods[i].ID,goods[i].brand,goods[i].inprice,goods[i].outprice,goods[i].storage,goods[i].date);
}
//fwrite(goods,sizeof(struct mar),N,cun);二進制文件輸出
fclose(fp);//關(guān)閉文件
printf("信息導(dǎo)入成功\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,goods[i].date);//輸出所需物品信息
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 ;
}
計算所購商品價格并修改保存
void calculate()
{//計算所購商品價格并修改保存
struct node *p;
p=cart;//把購物車(cart)鏈表賦給p
double sum=0;//購買商品應(yīng)付錢數(shù)
double pay;//購買商品實付錢數(shù)
FILE *fp;//定義文件指針
int i;
printf("以下是購物清單:\n");
ShowCart();//調(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)
{//當(dāng)鏈表不為空時
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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++實操之內(nèi)聯(lián)成員函數(shù)介紹
大家好,本篇文章主要講的是C++實操之內(nèi)聯(lián)成員函數(shù)介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12
C++實現(xiàn)LeetCode(149.共線點個數(shù))
這篇文章主要介紹了C++實現(xiàn)LeetCode(149.共線點個數(shù)),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07
C語言 strftime 格式化顯示日期時間的實現(xiàn)
下面小編就為大家?guī)硪黄狢語言 strftime 格式化顯示日期時間的實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12

