<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了C語言實現餐飲管理系統的具體程式碼,供大家參考,具體內容如下
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <conio.h> #include <windows.h> #define N sizeof(user) #define M sizeof(table) #define T sizeof(order) #define S sizeof(menu) typedef struct User{ char username[12];//賬號 char password[18];//密碼 int vip;//1為會員 0不是 int adm;//administrator同上 //或將以上的採用資料域的方式儲存 struct User* next; }user; //注意初始化 ,可以寫一個初始化函數 借鑑7月9號的筆記中的「初始化」 typedef struct Menu{ int num;//1~10為熱菜 11~20為冷菜 21~25為飲料 char name[20]; int price; struct Menu* next; }menu; typedef struct Table{ int number; int is_blank; int peoplenum; struct Order* ordert;//接該桌的訂單的頭結點 int price;//該桌的總價 struct Table* next; }table; typedef struct Order{ int number;//菜的編號 char name[20]; int copies;//菜的份數 int price; int xiaoji; struct Order* next; }order; //以下為自定義函數 void welcome(); int ORDER(order* head);//點菜函數 //void reg();//註冊函數 void login(); void logon(); void show();//顯示選單函數 void client();//客戶函數 void look_amend();//檢視修改函數 void add();//加菜函數 void cancel();//取消菜函數 int priceall();//計算總價函數 void getpassword(char password[18],char againpassword[18]); int is_password_same(char password[18],char againpassword[18]); void save_user(user* p); menu* ffmenuhot(); menu* ffmenucold(); menu* ffmenudrink(); table* fftable(); void resave_table(table* head); table* fftable() { FILE *fp1; //檔案指標 int n = 0; table* head = NULL; table* q; table* p; //system("md E:\canyin\table"); fp1 = fopen("E:\canyin\table\table.txt","a+"); //以唯讀的方式開啟檔案 if(fp1 == NULL) { printf("檔案開啟失敗n"); //getchar(); //exit(0); } else { while(!feof(fp1)) //判斷檔案位置標誌是否移動到檔案末尾 { n ++; p = (table*)malloc(sizeof(table)); //向記憶體申請一段空間 //fread(p, N, 1, fp1); //將fp所指向的檔案中的內容賦給p fscanf(fp1,"%d %d %d %d %d", &p->number , &p->is_blank , &p->peoplenum , &p->price , &p->ordert ); if(n == 1) { head = p; q = p; } else //建立連結串列 { q->next = p; q = p; } } q->next = NULL; } fclose(fp1); //關閉檔案 return head; //返回頭指標 } void resave_table(table* head) { table* p; p = head; //system("md E:\canyin\table"); FILE *file; //檔案指標 file = fopen("E:\canyin\table\table.txt","wb+"); //以追加的方式開啟檔案 if(file == NULL) { printf("檔案開啟失敗n"); } ///if(fwrite(p, N, 1, fp)!=1) //將p所指向的1個大小為N的資料結構寫入fp所指向的檔案中 //{ //printf("檔案寫入失敗n"); while(p->next != NULL) { fprintf( file ,"%d %d %d %d %d n", p->number, p->is_blank , p->peoplenum , p->price , p->ordert); p=p->next; } //} fclose(file); //關閉檔案 } void client() { order* orderh; orderh=(order*)malloc(sizeof(order)); int tablenum; printf("當前可選擇的桌位有:n"); table* head; table* p; head = (table*)malloc(sizeof(table)); p = (table*)malloc(sizeof(table)); head = fftable(); p = head; while(p->next != NULL) { if(p->is_blank==0) printf("%d號t",p->number); } printf("請選擇你的桌位號:"); scanf("%d",&tablenum); p = head; while(p->number == tablenum) { p->is_blank = 1; p->ordert = orderh; break; } //確定座位號 //char a; /* printf("1.點菜"); printf("2.檢視已點的菜"); scanf("%s",&a); switch(a) { case'1':order();break;//呼叫點菜函數 case'2':look_amend();break;//呼叫檢視函數 default:printf("請輸入正確的選項!");break; } */ printf("請點菜:n"); p->price = ORDER(orderh); resave_table(head); } int ORDER(order* head) { menu* hot; menu* cold; menu* drink; int copies; int i=1; int priceall = 0; hot = ffmenuhot(); cold = ffmenucold(); drink = ffmenudrink(); menu *h , *c , *d; show();//顯示選單函數 int numo; printf("n請輸入你要點的菜的序號:(以#結束)"); //將要點的菜加入訂單連結串列中 //order* head; order* p; order* q; head = (order*)malloc(sizeof(order)); p = head; while(getch()!='#') { printf("%d:",i); scanf("%d",&numo); printf("份數:"); scanf("%d",&copies); h = hot; c = cold; d = drink; while(h->next != NULL) { if(h->num==numo) { //p = (order*)malloc(sizeof(order)); q = (order*)malloc(sizeof(order)); q->next = NULL; p->number = h->num; strcmp(p->name , h->name ); p->price = h->price; p->copies = copies; p->next = q; q = p; priceall = priceall + copies*(h->price); break; } } while(c->next != NULL) { if(c->num==numo) { //p = (order*)malloc(sizeof(order)); q = (order*)malloc(sizeof(order)); q->next = NULL; p->number = c->num; strcmp(p->name , c->name ); p->price = c->price; p->copies = copies; p->next = q; q = p; priceall = priceall + copies*(h->price); break; } } while(d->next != NULL) { if(d->num==numo) { //p = (order*)malloc(sizeof(order)); q = (order*)malloc(sizeof(order)); q->next = NULL; p->number = d->num; strcmp(p->name , d->name ); p->price = d->price; p->copies = copies; p->next = q; q = p; priceall = priceall + copies*(h->price); break; } } i++; } printf("n點菜成功!"); printf("您的訂單總價是:%d",priceall); Sleep(10000); system("cls"); return priceall; //look_amend(); } void look_amend() { char a; printf("你點的菜是:n"); //將訂單連結串列中的菜逐個輸出 printf("1.新增菜品n"); printf("2.刪除菜品n"); printf("3.確定n"); scanf("%s",&a); switch(a) { case'1':add();break;//呼叫加菜函數 case'2':cancel();break;//呼叫減菜函數 case'3':priceall();break; default:printf("請輸入正確的選項!");break; } } void add() { show(); printf("請輸入你要加入的菜的序號:"); //將菜加入訂單連結串列 printf("n加菜成功!"); Sleep(2000); system("cls"); look_amend(); } void cancel() { printf("你點的菜是:"); printf("n請輸入你要刪除的菜的序號:"); //將菜從訂單連結串列中刪除 printf("n取消成功!"); Sleep(2000); system("cls"); look_amend(); } /* void enter()//登入 { printf("賬號:n"); printf("密碼:"); //呼叫判斷登入函數; printf("n登入成功!"); Sleep(2000); printf("n歡迎您!");//判斷普通客戶 會員 管理員 client(); }*/ /* void login() { printf("賬號:n"); printf("密碼:"); //呼叫判斷登入函數; printf("n登入成功!"); Sleep(2000); printf("n歡迎您!");//判斷普通客戶 會員 管理員 client(); }*/ /* void reg()//註冊函數 { //註冊賬戶 printf("註冊成功!"); Sleep(2000); system("cls"); order();//呼叫點菜函數 } */ void show()//顯示 { menu* p1; menu* p2; menu* p3; menu* headhot; menu* headcold; menu* headdrink; headhot = ffmenuhot(); headcold = ffmenucold(); headdrink = ffmenudrink(); p1 = headhot; p2 = headcold; p3 = headdrink; printf("熱菜:n"); printf("序號 菜名 價格n"); printf("%d %s %d n", p1->num, p1->name , p1->price); while(p1->next != NULL) { printf("%d %s %d n", p1->num, p1->name , p1->price); p1=p1->next; } printf("冷菜:n"); printf("序號 菜名 價格n"); while(p2->next!=NULL) { printf("%d %s %d n", p2->num, p2->name , p2->price); p2=p2->next; } printf("飲料:n"); printf("序號 菜名 價格n"); while(p3->next!=NULL) { printf("%d %s %d n", p3->num, p3->name , p3->price); p3=p3->next; } } int priceall()//合計價格 { //計算總價並輸出 printf("您訂單的總價是:"); printf("n請等待服務員為你上菜(如需修改請和服務員聯絡)"); } void welcome() { system("cls"); system("color 3E"); printf("===============歡迎來到贛味客家餐館管理系統===============nnnn"); printf("t 1.登入n"); printf("t 2.註冊n"); printf("請選擇[1 2] : [ ]bbb"); int n; while(1) { scanf("%d",&n); switch(n) { case 1: login();//登入 break; case 2: logon();//註冊 break; default: break; } } } user* ff1() //將存賬號的檔案裡的內容輸出到連結串列中 { FILE *fp1; //檔案指標 int n = 0; user* head = NULL; user* q; user* p; system("md E:\canyin\zhanghu"); fp1 = fopen("E:\canyin\zhanghu\zhanghu.txt","a+"); //以唯讀的方式開啟檔案 if(fp1 == NULL) { printf("檔案開啟失敗n"); //getchar(); //exit(0); } else { while(!feof(fp1)) //判斷檔案位置標誌是否移動到檔案末尾 { n ++; p = (user*)malloc(N); //向記憶體申請一段空間 //fread(p, N, 1, fp1); //將fp所指向的檔案中的內容賦給p fscanf(fp1,"%s %s %d %d",p->username ,p->password ,&p->vip ,&p->adm); if(n == 1) { head = p; q = p; } else //建立連結串列 { q->next = p; q = p; } } q->next = NULL; } fclose(fp1); //關閉檔案 return head; //返回頭指標 } //從選單檔案中讀取選單 menu* ffmenuhot() { FILE *fp1; //檔案指標 int n = 0; menu* head = NULL; menu* q; menu* p; system("md E:\canyin\menu"); fp1 = fopen("E:\canyin\menu\hotcai.txt","a+"); //以唯讀的方式開啟檔案 if(fp1 == NULL) { printf("檔案開啟失敗n"); //getchar(); //exit(0); } else { while(!feof(fp1)) //判斷檔案位置標誌是否移動到檔案末尾 { n ++; p = (menu*)malloc(sizeof(menu)); //向記憶體申請一段空間 //fread(p, N, 1, fp1); //將fp所指向的檔案中的內容賦給p fscanf(fp1,"%d %s %d",&p->num ,p->name ,&p->price); if(n == 1) { head = p; q = p; } else //建立連結串列 { q->next = p; q = p; } } q->next = NULL; } fclose(fp1); //關閉檔案 return head; //返回頭指標 } menu* ffmenucold() { FILE *fp1; //檔案指標 int n = 0; menu* head = NULL; menu* q; menu* p; system("md E:\canyin\menu"); fp1 = fopen("E:\canyin\menu\coldcai.txt","a+"); //以唯讀的方式開啟檔案 if(fp1 == NULL) { printf("檔案開啟失敗n"); //getchar(); //exit(0); } else { while(!feof(fp1)) //判斷檔案位置標誌是否移動到檔案末尾 { n ++; p = (menu*)malloc(sizeof(menu)); //向記憶體申請一段空間 //fread(p, N, 1, fp1); //將fp所指向的檔案中的內容賦給p fscanf(fp1,"%d %s %d",&p->num ,p->name ,&p->price); if(n == 1) { head = p; q = p; } else //建立連結串列 { q->next = p; q = p; } } q->next = NULL; } fclose(fp1); //關閉檔案 return head; //返回頭指標 } menu* ffmenudrink() { FILE *fp1; //檔案指標 int n = 0; menu* head = NULL; menu* q; menu* p; system("md E:\canyin\menu"); fp1 = fopen("E:\canyin\menu\drink.txt","a+"); //以唯讀的方式開啟檔案 if(fp1 == NULL) { printf("檔案開啟失敗n"); //getchar(); //exit(0); } else { while(!feof(fp1)) //判斷檔案位置標誌是否移動到檔案末尾 { n ++; p = (menu*)malloc(sizeof(menu)); //向記憶體申請一段空間 //fread(p, N, 1, fp1); //將fp所指向的檔案中的內容賦給p fscanf(fp1,"%d %s %d",&p->num ,p->name ,&p->price); if(n == 1) { head = p; q = p; } else //建立連結串列 { q->next = p; q = p; } } q->next = NULL; } fclose(fp1); //關閉檔案 return head; //返回頭指標 } void login() // 賬號登陸 { system("cls"); //清屏 user* p; user* head; head = ff1(); p = head; //呼叫函數 ,返回值為頭結點的指標 /* p = head; while(p->next!=NULL) { printf("%s %s %d %dn", p->username ,p->password , p->vip, p->adm); p=p->next; }*/ do{ char t, c, k, name1[12], password1[18]; int i = 0; printf("***************************nnnn"); printf("tt 登陸狀態 "); printf("請輸入您的賬號:"); scanf("%s", name1); printf("請輸入您的密碼:"); for(;;) //此處為輸入密碼不回顯操作 { k = getch(); //輸入k if(k == 'r') //如果輸入k為回車,則跳出迴圈 { break; } else if(k == 'b') //如果輸入k為刪除鍵 { if(i > 0) //如若密碼還沒完全刪除 { printf("b"); printf(" "); printf("b"); i--; } } else //如果輸入的k既不是刪除鍵,也不是確認鍵 { password1[i] = k; //把k的值賦給_password[i]; printf("*"); //輸出*號,保護使用者隱私 i ++; //密碼位數加1 } } password1[i] = ' '; while( (p != NULL) && (strcmp(p->username, name1) != 0) ) //遍歷連結串列,尋找當前輸入的賬戶的賬號 { p = p->next; } if(p != NULL) //如果p不為空 { if(strcmp(p->password, password1) == 0) //如果輸入的密碼正確 { printf("正在登陸....n"); Sleep(500); //暫停0.5秒 system("cls"); printf("登陸成功!n"); break; //跳出迴圈 } else //如果輸入的密碼錯誤 { printf("正在登陸....n"); Sleep(500); system("cls"); printf("-------------------------n"); printf("| |n"); printf("| 密碼錯誤!是否繼續? |n"); printf("| 1.是 2.否 |n"); printf("| |n"); printf("-------------------------n"); while(1) { t = getch(); //輸入t if(t == '1') { system("cls"); //清屏 break; } else if(t == '2') //如果輸入t為n,進入開始介面 { welcome(); break; } } } } else //如果p為空,即輸入的賬號不正確 { printf("正在登陸....n"); Sleep(500); system("cls"); printf("-------------------------n"); printf("| |n"); printf("| 賬號錯誤!是否繼續? |n"); printf("| |n"); printf("| 1.是 2.否 |n"); printf("| |n"); printf("-------------------------n"); while(1) //死迴圈防止其他按鍵干擾 { c = getch(); if(c == '1') { system("cls"); break; } else if(c == '2') { welcome(); break; } } } }while(1); //永遠為真 Sleep(500); //暫停0.5秒 client(); //menu(); //賬號密碼均正確,進入主選單 } void logon() //註冊賬號 { //system("md E:\canyin\zhanghu"); system("cls"); user* p; p = (user*)malloc(N); //向記憶體申請一段空間 p->next==NULL; //do //{ char name[12],password[18],againpassword[18],c,k; int i = 0; printf("贛味客家餐飲管理系統n"); printf("**************************n"); printf("請輸入賬號(手機號):n"); scanf("%s",name); //printf("請輸入密碼:n"); for(;;) //此處為輸入密碼不回顯操作 { getpassword(password,againpassword); if(is_password_same(password,againpassword)==1); //if(strcmp(password, againpassword) == 0) //如果輸入的兩次密碼均正確 { strcpy(p->username, name); strcpy(p->password, password); printf("n是否註冊為會員(0.否,1.是)"); scanf("%d", &p->vip); printf("n是否註冊為管理員(0.否,1.是)"); scanf("%d", &p->adm); printf("正在註冊....n"); save_user(p); Sleep(500); system("cls"); printf("註冊成功!n"); Sleep(500); //暫停0.5秒 break; //跳出迴圈 } /* else //如果輸入的兩次密碼不同 { printf("正在註冊....n"); Sleep(500); system("cls"); printf("-----------------------------"); printf("| |"); printf("| 註冊失敗!兩次密碼不統一,是否繼續註冊? |"); printf("| |"); printf("| 1.是 2.否 |"); printf("| |"); printf("-----------------------------"); while(1) { c = getch(); if(c == '1') { system("cls"); //logon(); break; } else if(c == '2') { welcome(); break; } } }*/ } //}while(1); //永遠為真 printf("正在自動為您登陸....n"); Sleep(500); printf("n登入成功!"); Sleep(2000); printf("n歡迎您!");//判斷普通客戶 會員 管理員 client(); //login(); } void getpassword(char password[18],char againpassword[18]) { char k; int i=0; printf("請輸入密碼:n"); for(;;) //此處為輸入密碼不回顯操作 { k = getch(); //輸入k if(k == 'r') //如果輸入k為回車,則跳出迴圈 { break; } else if(k == 'b') //如果輸入k為刪除鍵 { if(i > 0) //如若密碼還沒完全刪除 { printf("b"); printf(" "); printf("b"); i --; } } else //如果輸入的k既不是刪除鍵,也不是確認鍵 { password[i] = k; //把k的值賦給_password[i]; printf("*"); //輸出*號,保護使用者隱私 i ++; //密碼位數加1 } } password[i] = ' '; i = 0; printf("n請確認您的密碼:n"); for(;;) //此處為輸入密碼不回顯操作 { k = getch(); //輸入k if(k == 'r') //如果輸入k為回車,則跳出迴圈 { break; } else if(k == 'b') //如果輸入k為刪除鍵 { if(i > 0) //如若密碼還沒完全刪除 { printf("b"); printf(" "); printf("b"); i --; } } else //如果輸入的k既不是刪除鍵,也不是確認鍵 { againpassword[i] = k; //把k的值賦給_password[i]; printf("*"); //輸出*號,保護使用者隱私 i++; //密碼位數加1 } } againpassword[i] = ' '; } int is_password_same(char password[18],char againpassword[18]) { char c; if(strcmp(password, againpassword) != 0) { { printf("正在註冊....n"); Sleep(500); system("cls"); printf("-----------------------------"); printf("| |"); printf("| 註冊失敗!兩次密碼不統一,是否繼續註冊? |"); printf("| |"); printf("| 1.是 2.否 |"); printf("| |"); printf("-----------------------------"); while(1) { c = getch(); if(c == '1') { system("cls"); //logon(); getpassword(password,againpassword); break; } else if(c == '2') { return 0; welcome(); //break; } } } } else return 1; } void save_user(user* p) { system("md E:\canyin\zhanghu"); FILE *file; //檔案指標 file = fopen("E:\canyin\zhanghu\zhanghu.txt","a"); //以追加的方式開啟檔案 if(file == NULL) { printf("檔案開啟失敗n"); } ///if(fwrite(p, N, 1, fp)!=1) //將p所指向的1個大小為N的資料結構寫入fp所指向的檔案中 //{ //printf("檔案寫入失敗n"); fprintf( file ,"%s %s %d %dn", p->username , p->password , p->vip , p->adm ); //}
這是以前寫的餐飲管理系統,和大佬們沒得比,可以參考一下,因為是以前寫的所以檔案找不到了,可以自己把檔案部分修改一下重新建立即可
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45