您好,登錄后才能下訂單哦!
這篇文章主要介紹了如何使用C語言實現超市信息管理系統,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
具體內容如下
設計要求:設計一個超市信息管理系統,利用結構體存儲貨物信息和所購買商品的信息,并使用鏈表保存購物車信息,
能夠完成建立庫存信息以及文件自動建立庫存信息,對購物車添加商品、結算并修改庫存等操作,可以將庫存信息保存在文件中,并且可以對文件中的庫存信息進行讀取與顯示。
程序代碼如下:
/*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//該結構體為存儲貨物信息 { char ID[10];//貨號 char brand[20];//品名 double inprice;//進價 double outprice;//售價 int storage;//存儲量 }; struct node//該結構體為存儲購物車中的信息 { struct mar buy;//貨物信息 int number;//購物的數量 struct node *next; //指向下一個購物節點 }; struct mar goods[N];//結構體數組 struct node *cart;//購物車頭結點 int menu();//打印主菜單函數 void WenJianKucun();//文件建立庫存信息 void ShouJianKucun();//手動建立庫存信息 void DisKucun();//顯示庫存信息函數 void ShopCart();//對購物車進行操作 int ShopCartMenu();//打印購物車菜單 void XianShi();//顯示購物列表 void add();//在購物車里添加商品 void UpdateKu();//更新購物車信息函數 void calculate();//計算所購商品價格并修改保存 #endif int main() {//主函數 printf("*********************************************************\n"); printf(" 歡迎進入超市信息管理系統\n"); printf("*********************************************************\n"); int find=0; while(1) { switch(menu()) {//menu()函數為輸入選項 case 1: WenJianKucun(); find=1; break;//選項1 文件建立庫存信息 case 2: if(find==0) ShouJianKucun(); else printf("庫存信息已存在\n"); break;//選項2 手動建立庫存信息 case 3: DisKucun(); break;//選項3 顯示庫存信息函數 case 4: ShopCart(); break;//選項4 對購物車進行操作 case 5: calculate(); break;//選項5 計算所購商品價格并修改保存 case 6: system("cls"); printf("感謝您的使用,再見!\n"); Sleep(2000); exit(0); } } return 0; } int menu() {//打印主菜單函數 char s[5];//輸入的選項 int n;//選項為整數 printf("\n\n請選擇下面的數字進行操作:\n"); printf("--------------------------------------------\n"); printf("1. 文件建立庫存信息\n"); printf("2. 手動建立庫存信息\n"); printf("3. 顯示所有商品信息\n"); printf("4. 購物車\n"); printf("5. 結算\n"); printf("6. 退出程序\n"); printf("--------------------------------------------\n"); printf("請選擇對應數字1~6(1,2選其一)\n"); printf("本程序制作人: 2017物聯網工程 胡斌、劉萌欣、陳俊飛\n"); while(1) { fflush(stdin);//清空輸入流 gets(s);//輸入一串字符串 n=atoi(s);//字符串轉化為整數 if(n<1||n>6)//判斷輸入的選項是否正確 printf("輸入錯誤,請重新輸入:\n"); else//輸入正確,結束循環 break; } return n;//返回輸入選項 } void WenJianKucun() {//文件建立庫存信息 FILE *fp;//定義文件指針 if((fp=fopen("kucun.txt","w"))==NULL) {//創建文件 printf("創建文件失敗\n"); return ; } //向文件中寫入信息 fprintf(fp,"69011111 飄柔日常護理 12.00 15.00 30\n"); fprintf(fp,"69021111 優酸乳 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 胡醫生面膜 12.00 16.50 100\n"); fclose(fp);//關閉文件 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("數量:"); fflush(stdin);//清空輸入流 scanf("%d",&goods[i].storage);//輸入數量 printf("\n"); } if((fp=fopen("kucun.txt","w"))==NULL) {//判斷文件是否創建失敗 printf("創建文件失敗。\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);//關閉文件 printf("信息導入成功\n"); return ; } void DisKucun() {//顯示庫存信息函數 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);//關閉文件 } 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;//為整數 char s[5];//輸入一串字符串 printf("\n\n請選擇操作:\n"); printf("--------------------------------------------\n"); printf("1. 顯示當前可以購物列表\n"); printf("2. 在購物車里添加商品\n"); //printf("3. 刪除購物車商品\n"); printf("3. 退出\n"); printf("--------------------------------------------\n"); printf("請選擇對應數字1~3\n"); while(1) { fflush(stdin);//清空輸入流 gets(s);//輸入一串字符串 n=atoi(s);//字符串轉化為整數 if(n<1||n>3)//判斷輸入的選項是否正確 printf("輸入錯誤,請重新輸入: \n"); else//輸入正確,結束循環 break; } return n;//返回輸入選項 } void XianShi() {//顯示購物列表 struct node *p; //定義節點指針 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("貨號 品名 單價 數量\n"); printf("%-11s%-15s%-8.3f%-7d\n",p->buy.ID,p->buy.brand,p->buy.outprice,p->number); //輸出物品信息 p=p->next; } } fclose(fp1);//關閉文件 return ; } void add() {//在購物車里添加商品 FILE *fp,*fp1;//fp表示kucun文件,fp1表示cart文件 struct node *p1,*p,*p2;//定義節點指針 int i,n;//n表示商品數量 char s[20];//表示貨號或者品名 char choice1[20],choice2[20];//選擇項(y繼續,n繼續) do{ printf("輸入所需物品的名稱或貨號:\n"); fflush(stdin);//清空輸入流 gets(s);//輸入貨號或者品名 if((fp=fopen("kucun.txt","r"))==NULL) {//打開文件 printf("打開文件失敗\n"); continue; } for(i=0;i<N;i++) {//循環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)//找輸入對應的商品 { printf("已找到所需商品:\n"); printf("--------------------------------------------\n"); printf("貨號 品名 單價 數量\n"); printf("%-11s%-15s%-8.3f%-7d\n",goods[i].ID,goods[i].brand,goods[i].outprice,goods[i].storage);//輸出所需物品信息 printf("請輸入所需商品數量: "); scanf("%d",&n);//商品數量 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;//生成新節點 if(p==NULL) {//分配內存失敗 printf("內存申請失敗!\n"); exit(1);//退出 } p->number=n;//商品數量 p->buy=goods[i];//貨物信息 p->next=NULL; p1=cart;//把頭結點賦給p1 if(cart==NULL)//頭結點為空 cart=p;//把節點賦值給頭結點 else { while(p1->next!=NULL) p1=p1->next;//把鏈表循環到尾部 p->next=p1->next; p1->next=p;//把新節點p掛在鏈表尾部 } } else printf("輸入錯誤\n"); break;//找到商品結束循環 } } if(i==N)//循環完畢還沒找到對應商品 printf("未找到所需物品\n"); fclose(fp);//關閉文件 UpdateKu();//更新庫存信息函數 printf("是否繼續購物?(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繼續循環 return ; } //更新購物車信息函數 void UpdateKu() { FILE *fp; struct node *p; if((fp=fopen("cart.txt","w"))==NULL) {//判斷文件是否創建失敗 printf("創建文件失敗。\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;//指向下一個節點 } fclose(fp);//關閉文件 return ; } void calculate() {//計算所購商品價格并修改保存 struct node *p; p=cart;//把購物車(cart)鏈表賦給p double sum=0;//購買商品應付錢數 double pay;//購買商品實付錢數 FILE *fp;//定義文件指針 int i; printf("以下是購物清單:\n"); XianShi();//調用函數顯示購物列表信息 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);//關閉文件 while(p!=NULL) {//當鏈表不為空時 sum=sum+p->buy.outprice*p->number;//計算應付錢數 for(i=0;i<N;i++) {//找出對應商品庫存量 if(strcmp(goods[i].ID,p->buy.ID)==0) {//找到對應商品 goods[i].storage=goods[i].storage-p->number;//庫存量變化 break; } } p=p->next;//指向下一個節點 } 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);//關閉文件 return ; }
感謝你能夠認真閱讀完這篇文章,希望小編分享的“如何使用C語言實現超市信息管理系統”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。