C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易訂餐系統(tǒng)
本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易訂餐系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
主要功能:
(1)菜單維護(hù)(餐廳管理人員使用)采用順序表實(shí)現(xiàn)
1、添加新菜
2、刪除菜品
3、修改菜品信息
4、打印現(xiàn)有的菜品信息
(2)點(diǎn)餐(客戶使用) 采用鏈表實(shí)現(xiàn)
1、訂單菜品添加、刪除、顯示
2、計(jì)算顯示訂單總價(jià).........
對(duì)此我們可以創(chuàng)建一個(gè)結(jié)構(gòu)體類(lèi)型,并將其重命名為ElemType,結(jié)構(gòu)體里面存放有id,name,price分別表示菜品的id號(hào),菜名和價(jià)格。接著分別定義一個(gè)順序表和鏈表。接著我們就可以開(kāi)始實(shí)現(xiàn)代碼啦!
這里我采用的是多文件編程的方式,總共包含七個(gè)文件,三個(gè).h文件,四個(gè).c文件。
你只需要?jiǎng)?chuàng)建一個(gè)工程,然后分別創(chuàng)建下列七個(gè)文件并命名好就可以啦。
main.c文件中代碼如下:
#include"run.h" ? int main() { ? ? run_init(); ? ? return 0; }
main函數(shù)里只調(diào)用了一個(gè)run_init()函數(shù)
run.h文件代碼如下:
#ifndef __RUN_H #define __RUN_H ? #include"list.h" #include"link.h" ? void run_init(); SqList * menu_mt(SqList * List); void menu_help(); Link_Node * order_mt(Link_Node *Head,SqList *List); void order_help(); ? #endif
run.c文件代碼:
#include"run.h" #include"stdlib.h" void run_init() { ? ? int a; ? ? SqList * List; ? ? Link_Node * Head; ? ? while(1) ? ? { ? ? ? ? printf("\t\t****輸入1進(jìn)入菜單維護(hù)模式****\n\t\t****輸入2進(jìn)入點(diǎn)餐模式****\n"); ? ? ? ? printf("\t\t****輸入3退出程序****\n"); ? ? ? ? printf("請(qǐng)進(jìn)行模式選擇:\n"); ? ? ? ? scanf("%d",&a); ? ? ? ? switch(a) ? ? ? ? { ? ? ? ? ? ? case 1: List = menu_mt(List);break; ? ? ? ? ? ? case 2: Head = order_mt(Head,List);break; ? ? ? ? ? ? ? case 3: printf("謝謝使用本程序!期待下次與你會(huì)見(jiàn)!\n"); ? ? ? ? ? ? if(List != NULL) free(List);return ; ?//結(jié)束程序 ? ? ? ? ? ? default:printf("error,沒(méi)有這個(gè)選項(xiàng)!請(qǐng)重新選擇!\n");break; ? ? ? ? } ? ? } } ? SqList * menu_mt(SqList * List) { ? ? int flag = 1,a;//flag為退出標(biāo)志 ? ? while(flag) ? ? { ? ? ? ? menu_help(); ? ? ? ? printf("請(qǐng)進(jìn)行模式選擇:"); ? ? ? ? scanf("%d",&a); ? ? ? ? switch(a) ? ? ? ? { ? ? ? ? ? ? case 1:List = Create_List();break; ? ? ? ? ? ? case 2: ? ? ? Display_List(List);break; ? ? ? ? ? ? case 3:List = Add_List(List);break; ? ? ? ? ? ? case 4:List = Delete_List(List);break; ? ? ? ? ? ? case 5:List = Updata_List(List);break; ? ? ? ? ? ? case 6:flag = 0;break; ? ? ? ? ? ? default:printf("error,沒(méi)有這個(gè)選項(xiàng),請(qǐng)重新選擇!\n");break; ? ? ? ? } ? ? } ? ? printf("已成功退出菜單維護(hù)模式!\n"); ? ? return List; } ? void menu_help() { ? ? printf("\t\t******1------>創(chuàng)建菜單表------******\n"); ? ? printf("\t\t******2------>打印菜單表------******\n"); ? ? printf("\t\t******3------> 添加菜品 ------******\n"); ? ? printf("\t\t******4------> 刪除菜品 ------******\n"); ? ? printf("\t\t******5------> 修改菜品 ------******\n"); ? ? printf("\t\t******6------> 返回上級(jí) ------******\n"); } ? void order_help() { ? ? printf("\t\t******1------>開(kāi)始點(diǎn)餐(創(chuàng)建鏈表)------******\n"); ? ? printf("\t\t******2------> 顯示所有菜品信息 ------******\n"); ? ? printf("\t\t******3------> ? 訂單菜品添加 ? ------******\n"); ? ? printf("\t\t******4------> ? 訂單菜品刪除 ? ------******\n"); ? ? printf("\t\t******5------> 顯示已點(diǎn)菜品信息 ------******\n"); ? ? printf("\t\t******6------> ? 計(jì)算訂單價(jià)格 ? ------******\n"); ? ? printf("\t\t******7------> ? ? 返回上級(jí) ? ? ------******\n"); } ? Link_Node * order_mt(Link_Node *Head,SqList *List) { ? ? int flag = 1,a;//flag為退出標(biāo)志 ? ? while(flag) ? ? { ? ? ? ? order_help(); ? ? ? ? printf("請(qǐng)進(jìn)行模式選擇:"); ? ? ? ? scanf("%d",&a); ? ? ? ? switch(a) ? ? ? ? { ? ? ? ? ? ? case 1:Head = Create_Link(Head);break; ? ? ? ? ? ? case 2: ? ? ? Display_List(List);break; ? ? ? ? ? ? case 3:Head = Add_Link(Head,List);break; ? ? ? ? ? ? case 4:Head = Delete_Link(Head);break; ? ? ? ? ? ? case 5: ? ? ? Display_Link(Head);break; ? ? ? ? ? ? case 6: ? ? ? Count_Link(Head);break; ? ? ? ? ? ? case 7:flag = 0;break; ? ? ? ? ? ? default:printf("error,沒(méi)有這個(gè)選項(xiàng),請(qǐng)重新選擇!\n");break; ? ? ? ? } ? ? } ? ? Destory_Link(Head); ? ? printf("已成功退出點(diǎn)餐模式!\n"); ? ? return Head; }
link.h代碼如下:
#ifndef __LINK_H #define __LINK_H ? #include "list.h" ? typedef struct LNode { ? ? ElemType data; ? ? struct LNode *next; }Link_Node; ? Link_Node *Create_Link(Link_Node * Head); Link_Node *Add_Link(Link_Node *Head,SqList *List); Link_Node *Delete_Link(Link_Node *Head); void Count_Link(Link_Node *Head); void Display_Link(Link_Node *Head); void Destory_Link(Link_Node *Head); #endif
link.c代碼如下:
#include"link.h" #include "stdlib.h" ? //創(chuàng)建鏈表 Link_Node *Create_Link(Link_Node * Head) { ? ? Head = (Link_Node*)malloc(sizeof(Link_Node)); ? ? if(Head == NULL) ? ? ? ? printf("申請(qǐng)空間失敗!\n"); ? ? else? ? ? { ? ? ? ? Head->next = NULL; ? ? ? ? printf("訂單申請(qǐng)成功,您現(xiàn)在可以開(kāi)始點(diǎn)餐啦!\n"); ? ? } ? ? return Head; } ? //添加結(jié)點(diǎn) Link_Node *Add_Link(Link_Node *Head,SqList *List) { ? ? int id_input,a; ? ? Link_Node *Ptemp = NULL; ? ? Ptemp = (Link_Node*)malloc(sizeof(Link_Node)); ? ? if(Ptemp == NULL) ? ? ? ? printf("申請(qǐng)空間失??!\n"); ? ? else ? ? { ? ? ? ? printf("輸入你想添加菜品的id:"); ? ? ? ? scanf("%d",&id_input); ? ? ? ? a = Searchid_List(List,id_input); ? ? ? ? if(a == -1) ? ? ? ? { ? ? ? ? ? ? printf("暫時(shí)還沒(méi)有這個(gè)菜呀,請(qǐng)您重新選擇。\n"); ? ? ? ? } ? ? ? ? else ? ? ? ? { ? ? ? ? ? ? ?Ptemp->data = List->data[a]; ? ? ? ? ? ? Ptemp->next = Head->next; ? ? ? ? ? ? Head->next = Ptemp; ? ? ? ? ? ? printf("菜品已成功添加到您的訂單!\n"); ? ? ? ? } ? ? } ? ? return Head; } ? //刪除結(jié)點(diǎn) Link_Node *Delete_Link(Link_Node *Head) { ? ? int id_input; ? ? Link_Node *Pt=Head->next,*Pq=Head; ? ? printf("請(qǐng)輸入你想刪除菜品的id:"); ? ? scanf("%d",&id_input); ? ? while (Pt!=NULL) ? ? { ? ? ? ? if(id_input == (Pt->data).id) //找到便刪除 ? ? ? ? { ? ? ? ? ? ? Pq->next = Pt->next; ? ? ? ? ? ? free(Pt); ? ? ? ? ? ? printf("已成功刪除!\n"); ? ? ? ? ? ? break; ? ? ? ? } ? ? ? ? Pt = Pt->next; ? ? ? ? Pq = Pq->next;//向后走鏈 ? ? } ? ? if(Pt==NULL) ? ? { ? ? ? ? printf("刪除失敗,您的訂單中沒(méi)有這個(gè)菜喔.\n"); ? ? } ? ? return Head; } ? //打印訂單 void Display_Link(Link_Node *Head) { ? ? Link_Node *Pt=Head->next; ? ? printf("已點(diǎn)菜品如下:\n"); ? ? while (Pt!=NULL) ? ? { ? ? ? ? printf("id:%d\t",(Pt->data).id); ? ? ? ? printf("name:%s\t",(Pt->data).name); ? ? ? ? printf("price:%d\n",(Pt->data).price); ? ? ? ? Pt = Pt->next; ? ? } ? } ? //計(jì)算訂單總價(jià) void Count_Link(Link_Node *Head) { ? ? int sum = 0; ? ? Link_Node *Pt=Head->next; ? ? while (Pt!=NULL) ? ? { ? ? ? ? sum += (Pt->data).price; ? ? ? ? Pt = Pt->next; ? ? } ? ? printf("您的訂單總價(jià)格為:%d元\n",sum); } ? //銷(xiāo)毀鏈表 void Destory_Link(Link_Node *Head) { ? ? ?Link_Node *Pt=Head; ? ? ?while(Head!=NULL) ? ? ?{ ? ? ? ? Head = Head->next; ? ? ? ? free(Pt); ? ? ? ? Pt = Head; ? ? ?} ? ? ?printf("鏈表空間已釋放!\n"); }
list.h文件代碼如下:
#ifndef __LIST_H #define __LIST_H ? #include "stdio.h" #define MaxSize 100 typedef struct { ? ? int id; ? ? char name[50]; ? ? int price; }ElemType; ? typedef struct? { ? ? ElemType data[MaxSize]; ? ? int length; }SqList; ? SqList * Create_List(); void input_one(SqList *List,int i); void Display_List(SqList *List); SqList * ?Add_List(SqList *List); SqList * Delete_List(SqList *List); SqList * Updata_List(SqList *List); int Searchid_List(SqList *List,int id_input); int Searchname_List(SqList *List,char *name_input); int mode_choose(SqList *List); ? #endif
list.c文件代碼如下:
#include "list.h" #include "stdlib.h" #include "string.h" ? //創(chuàng)建順序表并初始化 SqList * Create_List() { ? ? int num; ? ? SqList * List; ? ? List = (SqList*)malloc(sizeof(SqList)); ? ? if(List == NULL) ? ? { ? ? ? ? printf("申請(qǐng)空間失敗!\n"); ? ? ? ? return 0; ? ? } ? ? printf("請(qǐng)輸入你要初始化的菜品個(gè)數(shù):"); ? ? scanf("%d",&num); ? ? if(num == 0) ? ? { ? ? ? ? printf("初始化錯(cuò)誤!\n"); ? ? ? ? free(List); ? ? ? ? return 0; ? ? } ? ? for(int i=0;i<num;i++) ? ? { ? ? ? ?input_one(List, i); ? ? } ? ? List->length = num; ? ? return List; } ? //輸入一個(gè)菜品信息 void input_one(SqList *List,int i) { ? ? int flag = 0;//flag=0表示第一次輸入id、name ? ? int id_temp; ? ? char name_temp[50]; ? ? ?do{ ? ? ? ? ? ? if(flag) ? ? ? ? ? ? ? ? printf("輸入的id已被占用,請(qǐng)重新輸入!\n"); ? ? ? ? ? ? flag = 1; ? ? ? ? ? ? printf("請(qǐng)輸入第%d個(gè)菜品的id:",i+1); ? ? ? ? ? ? scanf("%d",&id_temp); ? ? ? ? ? }while( Searchid_List(List,id_temp) != -1); //沒(méi)找到返回-1 ? ? ? ? ? (List->data[i]).id = id_temp; ? ? ? ? flag = 0; //flag=0表示第一次輸入id、name ? ? ? ? ?do{ ? ? ? ? ? ? if(flag) ? ? ? ? ? ? ? ? printf("輸入的name已被占用,請(qǐng)重新輸入!\n"); ? ? ? ? ? ? flag = 1; ? ? ? ? ? ? ?printf("請(qǐng)輸入第%d個(gè)菜品的名字:",i+1); ? ? ? ? ? ? ?scanf("%s",name_temp); ? ? ? ? }while( Searchname_List(List,name_temp) != -1); ?//沒(méi)找到返回-1 ? ? ? ? ? strcpy((List->data[i]).name, name_temp); ? ? ? ? printf("請(qǐng)輸入第%d個(gè)菜品的價(jià)格:",i+1); ? ? ? ? scanf("%d",&(List->data[i]).price); } //打印順序表中所有信息 void Display_List(SqList *List) { ? ? int len = List->length; ? ? printf("已有如下菜品:\n"); ? ? for(int i=0;i<len;i++) ? ? { ? ? ? ? printf("id:%d\t",(List->data[i]).id); ? ? ? ? printf("name:%s\t",(List->data[i]).name); ? ? ? ? printf("price:%d\n",(List->data[i]).price); ? ? } } ? //添加一個(gè)新菜品 SqList * ?Add_List(SqList *List) { ? ? int i = List->length; ? ? if(i==MaxSize) ? ? { ? ? ? ? printf("空間已滿,正在返回上級(jí)\n"); ? ? ? ? return List; ? ? } ? ? Display_List(List); ? ? input_one(List, i); ? ? (List->length)++; ? ? return List; } ? int mode_choose(SqList *List) { ? ? int a,flag = 1; ? ? while(flag) ? ? { ? ? ? ? printf("******1----> ?按id刪除/修改 ?----******\n"); ? ? ? ? printf("******2----> 按name刪除/修改 ----******\n"); ? ? ? ? printf("******3----> ?退出刪除/修改 ?----******\n"); ? ? ? ? printf("請(qǐng)進(jìn)行模式選擇:"); ? ? ? ? scanf("%d",&a); ? ? ? ? switch(a) ? ? ? ? { ? ? ? ? ? ? case 1: return Searchid_List(List,-1);break; ? ? ? ? ? ? case 2: return Searchname_List(List,"-1");break; ? ? ? ? ? ? case 3:flag = 0;break; ? ? ? ? ? ? default:printf("error,沒(méi)有這個(gè)選項(xiàng)請(qǐng)重新選擇!\n");break; ? ? ? ? } ? ? } ? ? return -2; ?//取消刪除/修改 返回上級(jí) } ? //刪除一個(gè)菜品 SqList * Delete_List(SqList *List) { ? ? int a; //用來(lái)保存找到的下標(biāo) ? ? a = mode_choose(List); ? ? if(a == -1) ? ? { ? ? ? ? printf("沒(méi)有查詢到這個(gè)id/name!\n"); ? ? } ? ? else if(a == -2) ? ? { ? ? ? ? printf("正在返回上一級(jí)!\n"); ? ? } ? ? else ? ? { ? ? ? ? for(int i=a;i<List->length - 1;i++) ?//前移刪除 ? ? ? ? { ? ? ? ? ? ? List->data[i] = List->data[i+1]; ? ? ? ? } ? ? ? ? (List->length)-- ; ? ? ? ? printf("刪除成功!\n"); ? ? } ? ? return List; } ? //修該菜品 SqList * Updata_List(SqList *List) { ? ? int a,flag = 0; //用來(lái)保存找到的下標(biāo) ? ? a = mode_choose(List); ? ? if(a == -1) ? ? { ? ? ? ? printf("沒(méi)有查詢到這個(gè)id/name!\n"); ? ? } ? ? else if(a == -2) ? ? { ? ? ? ? printf("正在返回上一級(jí)!\n"); ? ? } ? ? else ? ? { ? ? ? ? printf("原菜品信息為:"); ? ? ? ? printf("id:%d\t",(List->data[a]).id); ? ? ? ? printf("name:%s\t",(List->data[a]).name); ? ? ? ? printf("price:%d\n",(List->data[a]).price); ? ? ? ? input_one(List, a); ? ? } ? ? return List; } ? //按id查找 ?id_input == -1為輸入查找 ?否則為傳參查找 int Searchid_List(SqList *List,int id_input) { ? ? int ret = -1; ? ? if(id_input == -1) ? ? { ? ? ? ? printf("請(qǐng)輸入你想查詢并修改/刪除的id:"); ? ? ? ? scanf("%d",&id_input); ? ? } ? ? for(int i=0;i<List->length;i++) ? ? { ? ? ? ? if((List->data[i]).id == id_input) ? ? ? ? { ? ? ? ? ? ? ret = i; ? //找到返回下標(biāo) ? ? ? ? ? ? break; ? ? ? ? } ? ? } ? ? return ret; //沒(méi)找到 } ? //按菜名查找 int Searchname_List(SqList *List,char *name_input0) { ? ? int ret = -1; ? ? char name_input1[50]; ? ? if(strcmp(name_input0,"-1")==0) ? ? { ? ? ? ? printf("請(qǐng)輸入你想查找并修改/刪除的name:"); ? ? ? ? scanf("%s",name_input1); ? ? } ? ? else ? ? { ? ? ? ? strcpy(name_input1,name_input0); ? ? } ? ? for(int i=0;i<List->length;i++) ? ? { ? ? ? ? if(strcmp( (List->data[i]).name, name_input1) == 0 ) ? ? ? ? { ? ? ? ? ? ? ret = i; ? //找到返回下標(biāo) ? ? ? ? ? ? break; ? ? ? ? } ? ? } ? ? return ret; }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C語(yǔ)言實(shí)現(xiàn)餐廳管理系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單餐飲管理與點(diǎn)餐系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)電話訂餐管理系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)餐飲管理與點(diǎn)餐系統(tǒng)
- C語(yǔ)言代碼實(shí)現(xiàn)點(diǎn)餐系統(tǒng)
- 基于C語(yǔ)言實(shí)現(xiàn)點(diǎn)餐系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)餐飲結(jié)賬管理系統(tǒng)
- 餐館點(diǎn)菜系統(tǒng)C語(yǔ)言源代碼
- C語(yǔ)言實(shí)現(xiàn)點(diǎn)餐系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)餐飲點(diǎn)餐管理系統(tǒng)
相關(guān)文章
從匯編看c++函數(shù)的默認(rèn)參數(shù)的使用說(shuō)明
本篇文章介紹了,在c++中函數(shù)的默認(rèn)參數(shù)的使用說(shuō)明分析。需要的朋友參考下2013-05-05C語(yǔ)言實(shí)現(xiàn)推箱子游戲的代碼示例
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)推箱子游戲的代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09C語(yǔ)言中字符型數(shù)據(jù)和浮點(diǎn)型數(shù)據(jù)介紹
大家好,本篇文章主要講的是C語(yǔ)言中字符型數(shù)據(jù)和浮點(diǎn)型數(shù)據(jù)介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2022-01-01Opencv基于文字檢測(cè)去圖片水印的實(shí)現(xiàn)示例
去水印是個(gè)麻煩事,本文就來(lái)介紹一種方法Opencv基于文字檢測(cè)去圖片水印的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09C語(yǔ)言模擬實(shí)現(xiàn)庫(kù)函數(shù)詳解
C語(yǔ)言庫(kù)函數(shù)是把自定義函數(shù)放到庫(kù)里,是別人把一些常用到的函數(shù)編完放到一個(gè)文件里,供程序員使用,下面讓我們一起來(lái)詳細(xì)了解它2022-07-07深入理解C語(yǔ)言 static、extern與指針函數(shù)
這篇文章主要介紹了C語(yǔ)言 static、extern與指針函數(shù),有需要的朋友可以參考一下2013-12-12C++自定義API函數(shù)實(shí)現(xiàn)大數(shù)相乘算法
這篇文章主要為大家詳細(xì)介紹了C++自定義API函數(shù)實(shí)現(xiàn)大數(shù)相乘算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09C++ 虛函數(shù)與純虛函數(shù)的使用與區(qū)別
本文主要介紹了C++ 虛函數(shù)與純虛函數(shù)的使用與區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08