C語言實現(xiàn)簡易訂餐系統(tǒng)
本文實例為大家分享了C語言實現(xiàn)簡易訂餐系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
主要功能:
(1)菜單維護(餐廳管理人員使用)采用順序表實現(xiàn)
1、添加新菜
2、刪除菜品
3、修改菜品信息
4、打印現(xiàn)有的菜品信息
(2)點餐(客戶使用) 采用鏈表實現(xiàn)
1、訂單菜品添加、刪除、顯示
2、計算顯示訂單總價.........
對此我們可以創(chuàng)建一個結構體類型,并將其重命名為ElemType,結構體里面存放有id,name,price分別表示菜品的id號,菜名和價格。接著分別定義一個順序表和鏈表。接著我們就可以開始實現(xiàn)代碼啦!
這里我采用的是多文件編程的方式,總共包含七個文件,三個.h文件,四個.c文件。
你只需要創(chuàng)建一個工程,然后分別創(chuàng)建下列七個文件并命名好就可以啦。
main.c文件中代碼如下:
#include"run.h" ? int main() { ? ? run_init(); ? ? return 0; }
main函數(shù)里只調(diào)用了一個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進入菜單維護模式****\n\t\t****輸入2進入點餐模式****\n"); ? ? ? ? printf("\t\t****輸入3退出程序****\n"); ? ? ? ? printf("請進行模式選擇:\n"); ? ? ? ? scanf("%d",&a); ? ? ? ? switch(a) ? ? ? ? { ? ? ? ? ? ? case 1: List = menu_mt(List);break; ? ? ? ? ? ? case 2: Head = order_mt(Head,List);break; ? ? ? ? ? ? ? case 3: printf("謝謝使用本程序!期待下次與你會見!\n"); ? ? ? ? ? ? if(List != NULL) free(List);return ; ?//結束程序 ? ? ? ? ? ? default:printf("error,沒有這個選項!請重新選擇!\n");break; ? ? ? ? } ? ? } } ? SqList * menu_mt(SqList * List) { ? ? int flag = 1,a;//flag為退出標志 ? ? while(flag) ? ? { ? ? ? ? menu_help(); ? ? ? ? printf("請進行模式選擇:"); ? ? ? ? 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,沒有這個選項,請重新選擇!\n");break; ? ? ? ? } ? ? } ? ? printf("已成功退出菜單維護模式!\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------> 返回上級 ------******\n"); } ? void order_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------> ? 計算訂單價格 ? ------******\n"); ? ? printf("\t\t******7------> ? ? 返回上級 ? ? ------******\n"); } ? Link_Node * order_mt(Link_Node *Head,SqList *List) { ? ? int flag = 1,a;//flag為退出標志 ? ? while(flag) ? ? { ? ? ? ? order_help(); ? ? ? ? printf("請進行模式選擇:"); ? ? ? ? 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,沒有這個選項,請重新選擇!\n");break; ? ? ? ? } ? ? } ? ? Destory_Link(Head); ? ? printf("已成功退出點餐模式!\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("申請空間失??!\n"); ? ? else? ? ? { ? ? ? ? Head->next = NULL; ? ? ? ? printf("訂單申請成功,您現(xiàn)在可以開始點餐啦!\n"); ? ? } ? ? return Head; } ? //添加結點 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("申請空間失?。n"); ? ? else ? ? { ? ? ? ? printf("輸入你想添加菜品的id:"); ? ? ? ? scanf("%d",&id_input); ? ? ? ? a = Searchid_List(List,id_input); ? ? ? ? if(a == -1) ? ? ? ? { ? ? ? ? ? ? printf("暫時還沒有這個菜呀,請您重新選擇。\n"); ? ? ? ? } ? ? ? ? else ? ? ? ? { ? ? ? ? ? ? ?Ptemp->data = List->data[a]; ? ? ? ? ? ? Ptemp->next = Head->next; ? ? ? ? ? ? Head->next = Ptemp; ? ? ? ? ? ? printf("菜品已成功添加到您的訂單!\n"); ? ? ? ? } ? ? } ? ? return Head; } ? //刪除結點 Link_Node *Delete_Link(Link_Node *Head) { ? ? int id_input; ? ? Link_Node *Pt=Head->next,*Pq=Head; ? ? printf("請輸入你想刪除菜品的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("刪除失敗,您的訂單中沒有這個菜喔.\n"); ? ? } ? ? return Head; } ? //打印訂單 void Display_Link(Link_Node *Head) { ? ? Link_Node *Pt=Head->next; ? ? printf("已點菜品如下:\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; ? ? } ? } ? //計算訂單總價 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("您的訂單總價格為:%d元\n",sum); } ? //銷毀鏈表 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("申請空間失敗!\n"); ? ? ? ? return 0; ? ? } ? ? printf("請輸入你要初始化的菜品個數(shù):"); ? ? scanf("%d",&num); ? ? if(num == 0) ? ? { ? ? ? ? printf("初始化錯誤!\n"); ? ? ? ? free(List); ? ? ? ? return 0; ? ? } ? ? for(int i=0;i<num;i++) ? ? { ? ? ? ?input_one(List, i); ? ? } ? ? List->length = num; ? ? return List; } ? //輸入一個菜品信息 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已被占用,請重新輸入!\n"); ? ? ? ? ? ? flag = 1; ? ? ? ? ? ? printf("請輸入第%d個菜品的id:",i+1); ? ? ? ? ? ? scanf("%d",&id_temp); ? ? ? ? ? }while( Searchid_List(List,id_temp) != -1); //沒找到返回-1 ? ? ? ? ? (List->data[i]).id = id_temp; ? ? ? ? flag = 0; //flag=0表示第一次輸入id、name ? ? ? ? ?do{ ? ? ? ? ? ? if(flag) ? ? ? ? ? ? ? ? printf("輸入的name已被占用,請重新輸入!\n"); ? ? ? ? ? ? flag = 1; ? ? ? ? ? ? ?printf("請輸入第%d個菜品的名字:",i+1); ? ? ? ? ? ? ?scanf("%s",name_temp); ? ? ? ? }while( Searchname_List(List,name_temp) != -1); ?//沒找到返回-1 ? ? ? ? ? strcpy((List->data[i]).name, name_temp); ? ? ? ? printf("請輸入第%d個菜品的價格:",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); ? ? } } ? //添加一個新菜品 SqList * ?Add_List(SqList *List) { ? ? int i = List->length; ? ? if(i==MaxSize) ? ? { ? ? ? ? printf("空間已滿,正在返回上級\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("請進行模式選擇:"); ? ? ? ? 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,沒有這個選項請重新選擇!\n");break; ? ? ? ? } ? ? } ? ? return -2; ?//取消刪除/修改 返回上級 } ? //刪除一個菜品 SqList * Delete_List(SqList *List) { ? ? int a; //用來保存找到的下標 ? ? a = mode_choose(List); ? ? if(a == -1) ? ? { ? ? ? ? printf("沒有查詢到這個id/name!\n"); ? ? } ? ? else if(a == -2) ? ? { ? ? ? ? printf("正在返回上一級!\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; //用來保存找到的下標 ? ? a = mode_choose(List); ? ? if(a == -1) ? ? { ? ? ? ? printf("沒有查詢到這個id/name!\n"); ? ? } ? ? else if(a == -2) ? ? { ? ? ? ? printf("正在返回上一級!\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("請輸入你想查詢并修改/刪除的id:"); ? ? ? ? scanf("%d",&id_input); ? ? } ? ? for(int i=0;i<List->length;i++) ? ? { ? ? ? ? if((List->data[i]).id == id_input) ? ? ? ? { ? ? ? ? ? ? ret = i; ? //找到返回下標 ? ? ? ? ? ? break; ? ? ? ? } ? ? } ? ? return ret; //沒找到 } ? //按菜名查找 int Searchname_List(SqList *List,char *name_input0) { ? ? int ret = -1; ? ? char name_input1[50]; ? ? if(strcmp(name_input0,"-1")==0) ? ? { ? ? ? ? printf("請輸入你想查找并修改/刪除的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; ? //找到返回下標 ? ? ? ? ? ? break; ? ? ? ? } ? ? } ? ? return ret; }
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
C語言中字符型數(shù)據(jù)和浮點型數(shù)據(jù)介紹
大家好,本篇文章主要講的是C語言中字符型數(shù)據(jù)和浮點型數(shù)據(jù)介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽2022-01-01深入理解C語言 static、extern與指針函數(shù)
這篇文章主要介紹了C語言 static、extern與指針函數(shù),有需要的朋友可以參考一下2013-12-12C++自定義API函數(shù)實現(xiàn)大數(shù)相乘算法
這篇文章主要為大家詳細介紹了C++自定義API函數(shù)實現(xiàn)大數(shù)相乘算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-09-09C++ 虛函數(shù)與純虛函數(shù)的使用與區(qū)別
本文主要介紹了C++ 虛函數(shù)與純虛函數(shù)的使用與區(qū)別,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08