C语言实现简易订餐系统

Chloe ·
更新时间:2024-11-10
· 469 次阅读

本文实例为大家分享了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;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; }



系统 C语言

需要 登录 后方可回复, 如果你还没有账号请 注册新账号