您好,登錄后才能下訂單哦!
這篇文章主要介紹了如何使用C語(yǔ)言實(shí)現(xiàn)超市信息管理系統(tǒng),具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
具體內(nèi)容如下
設(shè)計(jì)要求:設(shè)計(jì)一個(gè)超市信息管理系統(tǒng),利用結(jié)構(gòu)體存儲(chǔ)貨物信息和所購(gòu)買商品的信息,并使用鏈表保存購(gòu)物車信息,
能夠完成建立庫(kù)存信息以及文件自動(dòng)建立庫(kù)存信息,對(duì)購(gòu)物車添加商品、結(jié)算并修改庫(kù)存等操作,可以將庫(kù)存信息保存在文件中,并且可以對(duì)文件中的庫(kù)存信息進(jìn)行讀取與顯示。
程序代碼如下:
/*ifndef/define/endif”主要目的是防止頭文件的重復(fù)包含和編譯*/ #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)體為存儲(chǔ)貨物信息 { char ID[10];//貨號(hào) char brand[20];//品名 double inprice;//進(jìn)價(jià) double outprice;//售價(jià) int storage;//存儲(chǔ)量 }; struct node//該結(jié)構(gòu)體為存儲(chǔ)購(gòu)物車中的信息 { struct mar buy;//貨物信息 int number;//購(gòu)物的數(shù)量 struct node *next; //指向下一個(gè)購(gòu)物節(jié)點(diǎn) }; struct mar goods[N];//結(jié)構(gòu)體數(shù)組 struct node *cart;//購(gòu)物車頭結(jié)點(diǎn) int menu();//打印主菜單函數(shù) void WenJianKucun();//文件建立庫(kù)存信息 void ShouJianKucun();//手動(dòng)建立庫(kù)存信息 void DisKucun();//顯示庫(kù)存信息函數(shù) void ShopCart();//對(duì)購(gòu)物車進(jìn)行操作 int ShopCartMenu();//打印購(gòu)物車菜單 void XianShi();//顯示購(gòu)物列表 void add();//在購(gòu)物車?yán)锾砑由唐?nbsp; void UpdateKu();//更新購(gòu)物車信息函數(shù) void calculate();//計(jì)算所購(gòu)商品價(jià)格并修改保存 #endif int main() {//主函數(shù) printf("*********************************************************\n"); printf(" 歡迎進(jìn)入超市信息管理系統(tǒng)\n"); printf("*********************************************************\n"); int find=0; while(1) { switch(menu()) {//menu()函數(shù)為輸入選項(xiàng) case 1: WenJianKucun(); find=1; break;//選項(xiàng)1 文件建立庫(kù)存信息 case 2: if(find==0) ShouJianKucun(); else printf("庫(kù)存信息已存在\n"); break;//選項(xiàng)2 手動(dòng)建立庫(kù)存信息 case 3: DisKucun(); break;//選項(xiàng)3 顯示庫(kù)存信息函數(shù) case 4: ShopCart(); break;//選項(xiàng)4 對(duì)購(gòu)物車進(jìn)行操作 case 5: calculate(); break;//選項(xiàng)5 計(jì)算所購(gòu)商品價(jià)格并修改保存 case 6: system("cls"); printf("感謝您的使用,再見(jiàn)!\n"); Sleep(2000); exit(0); } } return 0; } int menu() {//打印主菜單函數(shù) char s[5];//輸入的選項(xiàng) int n;//選項(xiàng)為整數(shù) printf("\n\n請(qǐng)選擇下面的數(shù)字進(jìn)行操作:\n"); printf("--------------------------------------------\n"); printf("1. 文件建立庫(kù)存信息\n"); printf("2. 手動(dòng)建立庫(kù)存信息\n"); printf("3. 顯示所有商品信息\n"); printf("4. 購(gòu)物車\n"); printf("5. 結(jié)算\n"); printf("6. 退出程序\n"); printf("--------------------------------------------\n"); printf("請(qǐng)選擇對(duì)應(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)//判斷輸入的選項(xiàng)是否正確 printf("輸入錯(cuò)誤,請(qǐng)重新輸入:\n"); else//輸入正確,結(jié)束循環(huán) break; } return n;//返回輸入選項(xiàng) } void WenJianKucun() {//文件建立庫(kù)存信息 FILE *fp;//定義文件指針 if((fp=fopen("kucun.txt","w"))==NULL) {//創(chuàng)建文件 printf("創(chuàng)建文件失敗\n"); return ; } //向文件中寫(xiě)入信息 fprintf(fp,"69011111 飄柔日常護(hù)理 12.00 15.00 30\n"); fprintf(fp,"69021111 優(yōu)酸乳 1.50 2.00 200\n"); fprintf(fp,"69031111 紅富士蘋(píng)果 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("成功導(dǎo)入信息\n"); return ; } void ShouJianKucun() {//手動(dòng)建立庫(kù)存信息 FILE *fp;//定義文件指針 int i; printf("請(qǐng)依次輸入貨物信息:\n"); printf("--------------------------------------------\n"); for(i=0;i<N;i++) {//向文件中寫(xiě)入信息 printf("第%d個(gè)商品:\n",i+1); printf("貨號(hào):"); fflush(stdin);//清空輸入流 gets(goods[i].ID);//輸入貨號(hào) printf("品名:"); fflush(stdin);//清空輸入流 gets(goods[i].brand);//輸入品名 printf("進(jìn)價(jià): "); fflush(stdin);//清空輸入流 scanf("%lf",&goods[i].inprice);//輸入進(jìn)價(jià) printf("售價(jià):"); fflush(stdin);//清空輸入流 scanf("%lf",&goods[i].outprice);//輸入售價(jià) 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,"貨號(hào) 品名 單價(jià) 庫(kù)存量\n"); for(i=0;i<N;i++) {//把貨物信息寫(xiě)進(jìn)文件 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);二進(jìn)制文件輸出 fclose(fp);//關(guān)閉文件 printf("信息導(dǎo)入成功\n"); return ; } void DisKucun() {//顯示庫(kù)存信息函數(shù) FILE *fp;//定義文件指針 int i; if((fp=fopen("kucun.txt","r"))==NULL) {//判斷是否打開(kāi)了文件 printf("打開(kāi)文件失敗\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("貨號(hào) 品名 單價(jià) 庫(kù)存量\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() {//對(duì)購(gòu)物車進(jìn)行操作 while(1) { switch(ShopCartMenu()) {//ShopCartMenu()為輸入選項(xiàng) case 1: XianShi(); break;//選項(xiàng)1 顯示購(gòu)物車物品信息 case 2: add(); break;//選項(xiàng)2 添加購(gòu)物車物品 //case 3: deleteitem();//刪除購(gòu)物車中的某項(xiàng)商品 // break; case 3: return ;//選項(xiàng)3 退出 } } } int ShopCartMenu() {//打印購(gòu)物車菜單 int n;//為整數(shù) char s[5];//輸入一串字符串 printf("\n\n請(qǐng)選擇操作:\n"); printf("--------------------------------------------\n"); printf("1. 顯示當(dāng)前可以購(gòu)物列表\n"); printf("2. 在購(gòu)物車?yán)锾砑由唐穃n"); //printf("3. 刪除購(gòu)物車商品\n"); printf("3. 退出\n"); printf("--------------------------------------------\n"); printf("請(qǐng)選擇對(duì)應(yīng)數(shù)字1~3\n"); while(1) { fflush(stdin);//清空輸入流 gets(s);//輸入一串字符串 n=atoi(s);//字符串轉(zhuǎn)化為整數(shù) if(n<1||n>3)//判斷輸入的選項(xiàng)是否正確 printf("輸入錯(cuò)誤,請(qǐng)重新輸入: \n"); else//輸入正確,結(jié)束循環(huán) break; } return n;//返回輸入選項(xiàng) } void XianShi() {//顯示購(gòu)物列表 struct node *p; //定義節(jié)點(diǎn)指針 p=cart;//把購(gòu)物車鏈表賦給p FILE *fp1;//定義文件指針 if((fp1=fopen("cart.txt","r"))==NULL) {//判斷是否打開(kāi)了文件 printf("打開(kāi)文件失敗\n"); //return ; } if(p==NULL) {//購(gòu)物車為空 printf("目前購(gòu)物車為空:"); return ; } else {//購(gòu)物車不為空 while(p!=NULL) {//把購(gòu)物車物品不斷減一,直到為空 printf("--------------------------------------------\n"); printf("貨號(hào) 品名 單價(jià) 數(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() {//在購(gòu)物車?yán)锾砑由唐?nbsp; FILE *fp,*fp1;//fp表示kucun文件,fp1表示cart文件 struct node *p1,*p,*p2;//定義節(jié)點(diǎn)指針 int i,n;//n表示商品數(shù)量 char s[20];//表示貨號(hào)或者品名 char choice1[20],choice2[20];//選擇項(xiàng)(y繼續(xù),n繼續(xù)) do{ printf("輸入所需物品的名稱或貨號(hào):\n"); fflush(stdin);//清空輸入流 gets(s);//輸入貨號(hào)或者品名 if((fp=fopen("kucun.txt","r"))==NULL) {//打開(kāi)文件 printf("打開(kāi)文件失敗\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)//找輸入對(duì)應(yīng)的商品 { printf("已找到所需商品:\n"); printf("--------------------------------------------\n"); printf("貨號(hào) 品名 單價(jià) 數(shù)量\n"); printf("%-11s%-15s%-8.3f%-7d\n",goods[i].ID,goods[i].brand,goods[i].outprice,goods[i].storage);//輸出所需物品信息 printf("請(qǐng)輸入所需商品數(shù)量: "); scanf("%d",&n);//商品數(shù)量 if(n>goods[i].storage) {//判斷是否還可以購(gòu)買不 printf("該商品庫(kù)存不足\n"); break; } printf("\n是否購(gòu)買此商品?(Y/N)\n"); fflush(stdin);//清空輸入流 scanf("%s",choice1);//輸入一個(gè)選項(xiàng) if(strcmp(choice1,"Y")==0||strcmp(choice1,"y")==0) {//輸入y/Y表示購(gòu)買此商品 p=new node;//生成新節(jié)點(diǎn) if(p==NULL) {//分配內(nèi)存失敗 printf("內(nèi)存申請(qǐng)失??!\n"); exit(1);//退出 } p->number=n;//商品數(shù)量 p->buy=goods[i];//貨物信息 p->next=NULL; p1=cart;//把頭結(jié)點(diǎn)賦給p1 if(cart==NULL)//頭結(jié)點(diǎn)為空 cart=p;//把節(jié)點(diǎn)賦值給頭結(jié)點(diǎn) else { while(p1->next!=NULL) p1=p1->next;//把鏈表循環(huán)到尾部 p->next=p1->next; p1->next=p;//把新節(jié)點(diǎn)p掛在鏈表尾部 } } else printf("輸入錯(cuò)誤\n"); break;//找到商品結(jié)束循環(huán) } } if(i==N)//循環(huán)完畢還沒(méi)找到對(duì)應(yīng)商品 printf("未找到所需物品\n"); fclose(fp);//關(guān)閉文件 UpdateKu();//更新庫(kù)存信息函數(shù) printf("是否繼續(xù)購(gòu)物?(Y/N)\n"); fflush(stdin);//清空輸入流 scanf("%s",choice2);//輸入選項(xiàng) if(strcmp(choice2,"y")!=0&&strcmp(choice2,"Y")!=0) printf("放棄購(gòu)買,返回菜單!\n"); }while(strcmp(choice2,"y")==0||strcmp(choice2,"Y")==0);//y/Y繼續(xù)循環(huán) return ; } //更新購(gòu)物車信息函數(shù) void UpdateKu() { FILE *fp; struct node *p; if((fp=fopen("cart.txt","w"))==NULL) {//判斷文件是否創(chuàng)建失敗 printf("創(chuàng)建文件失敗。\n"); return ; } p=cart;//把購(gòu)物車鏈表賦給p2 while(p!=NULL) { // fprintf(fp1,"貨號(hào) 品名 單價(jià) 庫(kù)存量\n"); //把貨物信息寫(xiě)進(jìn)文件 fprintf(fp,"%-11s%-15s%-8.3f%-7d\n",p->buy.ID,p->buy.brand,p->buy.outprice,p->number); p=p->next;//指向下一個(gè)節(jié)點(diǎn) } fclose(fp);//關(guān)閉文件 return ; } void calculate() {//計(jì)算所購(gòu)商品價(jià)格并修改保存 struct node *p; p=cart;//把購(gòu)物車(cart)鏈表賦給p double sum=0;//購(gòu)買商品應(yīng)付錢(qián)數(shù) double pay;//購(gòu)買商品實(shí)付錢(qián)數(shù) FILE *fp;//定義文件指針 int i; printf("以下是購(gòu)物清單:\n"); XianShi();//調(diào)用函數(shù)顯示購(gòu)物列表信息 if((fp=fopen("kucun.txt","r"))==NULL) {//打開(kāi)文件 printf("打開(kāi)文件失敗\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)鏈表不為空時(shí) sum=sum+p->buy.outprice*p->number;//計(jì)算應(yīng)付錢(qián)數(shù) for(i=0;i<N;i++) {//找出對(duì)應(yīng)商品庫(kù)存量 if(strcmp(goods[i].ID,p->buy.ID)==0) {//找到對(duì)應(yīng)商品 goods[i].storage=goods[i].storage-p->number;//庫(kù)存量變化 break; } } p=p->next;//指向下一個(gè)節(jié)點(diǎn) } printf("總計(jì):%-8.3f\n",sum);//輸出購(gòu)買物品共需多少錢(qián) printf("輸入實(shí)付金額:"); scanf("%lf",&pay); printf("實(shí)付: %-8.3f 找零: %8.3f\n",pay,pay-sum); if((fp=fopen("kucun.txt","w"))==NULL) {//打開(kāi)文件 printf("寫(xiě)入文件失敗\n"); return ; } for(i=0;i<N;i++) {//向文件中寫(xiě)入信息 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 ; }
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何使用C語(yǔ)言實(shí)現(xiàn)超市信息管理系統(tǒng)”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。
億速云公眾號(hào)
手機(jī)網(wǎng)站二維碼
Copyright ? Yisu Cloud Ltd. All Rights Reserved. 2018 版權(quán)所有
廣州億速云計(jì)算有限公司粵ICP備17096448號(hào)-1 粵公網(wǎng)安備 44010402001142號(hào)增值電信業(yè)務(wù)經(jīng)營(yíng)許可證編號(hào):B1-20181529