发布时间:2023-03-07 12:30
本文实例为大家分享了C语言实现简易订餐系统的具体代码,供大家参考,具体内容如下
(1)菜单维护(餐厅管理人员使用)采用顺序表实现
1、添加新菜
2、删除菜品
3、修改菜品信息
4、打印现有的菜品信息
(2)点餐(客户使用) 采用链表实现
1、订单菜品添加、删除、显示
2、计算显示订单总价.........
对此我们可以创建一个结构体类型,并将其重命名为ElemType,结构体里面存放有id,name,price分别表示菜品的id号,菜名和价格。接着分别定义一个顺序表和链表。接着我们就可以开始实现代码啦!
这里我采用的是多文件编程的方式,总共包含七个文件,三个.h文件,四个.c文件。
你只需要创建一个工程,然后分别创建下列七个文件并命名好就可以啦。
main.c文件中代码如下:
#include\"run.h\" int main() { run_init(); return 0; }
main函数里只调用了一个run_init()函数
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------>创建菜单表------******\\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------>开始点餐(创建链表)------******\\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\" //创建链表 Link_Node *Create_Link(Link_Node * Head) { Head = (Link_Node*)malloc(sizeof(Link_Node)); if(Head == NULL) printf(\"申请空间失败!\\n\"); else { Head->next = NULL; printf(\"订单申请成功,您现在可以开始点餐啦!\\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\" //创建顺序表并初始化 SqList * Create_List() { int num; SqList * List; List = (SqList*)malloc(sizeof(SqList)); if(List == NULL) { printf(\"申请空间失败!\\n\"); return 0; } printf(\"请输入你要初始化的菜品个数:\"); scanf(\"%d\",&num); if(num == 0) { printf(\"初始化错误!\\n\"); free(List); return 0; } for(int i=0;ilength = 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 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 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 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 length;i++) { if(strcmp( (List->data[i]).name, name_input1) == 0 ) { ret = i; //找到返回下标 break; } } return ret; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。