C语言实现简易订餐系统

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现简单餐饮管理与点餐系统

    本文实例为大家分享了C语言实现餐饮管理与点餐系统的具体代码,供大家参考,具体内容如下 /*     项目名称:南航餐饮管理系统     组员:梁文新,刘青林,刘艺,施瑞文(组长) */     //当注册用户名为:root,密码为:root的账号时,系统默认为初始管理员   //头文件  #include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<wi

  • C语言实现餐饮管理与点餐系统

    本文实例为大家分享了C语言实现餐饮管理与点餐系统的具体代码,供大家参考,具体内容如下 一.项目简介 1.本程序实现了用户的点餐功能,共包含五类菜品:凉菜.热菜.锅仔.主食.饮品.还有查看所点菜品与结束等功能. 2.后台管理员:按a可进入,主页面并未提示. 3.合理运用getch函数,清屏与暂停函数,页面整洁清爽. 4.菜品与txt文件对应,可实现对程序与txt的同步增删改查等功能. 5.使用了C语言很多基础语法:函数.指针.结构体.文件等. 二.程序说明 程序运行后在主页面按a进入后台管理页面,

  • C语言实现餐厅管理系统

    本文实例为大家分享了C语言实现餐厅管理系统的具体代码,供大家参考,具体内容如下 在学习完C语言之后,写了一个小程序,涉及到单链表,文件,排序,等内容. 这个对新手指针,函数等方面的掌握有一定的要求. 一.程序开始界面 1.输入不同的数字,选择你要的操作,进行点菜,修改账单,结算等功能 2.热卖推荐中会默认打印当前餐厅热卖的各类食物排行前三位(可以自己选择查看前几位,因为懒,就没加这个功能,要加入这个功能,简单改一下就行) 3.输入0结算,系统会打印出菜单,并将数据以xls表格形式存到后台 二.点

  • C语言实现点餐系统

    本文实例为大家分享了C语言点餐系统的具体代码,供大家参考,具体内容如下 #include<iostream> #include<fstream> #include<string> #include<conio.h> using namespace std; class shiwu { public: string mingzi; int price; shiwu(){} shiwu(string n,int p):mingzi(n),price(p){} }

  • 基于C语言实现点餐系统

    这是一个很简单的点餐系统,用到的知识也不复杂,所以对新手学习还是很有作用,贴上来给大家参考下. 完成了如下功能: 1.显示餐厅提示语: 2.打印菜单(输出菜品分类:主食.甜点.饮料.主菜.开胃菜): 3.选择ID进入菜品分类子目录: 4.进行具体选择(可重复选择同一样菜): 5.返回上级菜单(进行其他分类的选择): 6.完成点餐: 7.打印点餐信息(菜名.单价.数量.价格). 代码如下: #include <stdio.h> void main_munu(){ //打印主菜单 char a[6

  • 餐馆点菜系统C语言源代码

    餐馆点菜系统c语言的源代码,一些封装的函数,对链表的操作,还有文件的存取,供大家参考,具体内容如下 #include "public.h" struct NODE *myhead; struct NODE *orderhead; struct NODE *ashead; char waiter_ID[4+1]; /*******************************设置输入框颜色******************************************* 名称:设置

  • C语言实现电话订餐管理系统

    本文实例为大家分享了C语言实现电话订餐管理系统的具体代码,供大家参考,具体内容如下 这是我C语言课程设计的题目.非常奇怪啊,下面的代码能在C-Free中跑起来,却没办法在vc++6.0中跑起来.可能是编译器支持的标准不一样.不管他,反正老师不会把我的代码打一遍,然后放到vc中去运行. 实现了4个功能:添加.查找.修改.删除,同时会把信息写入到同一目录下的customer.dat文件中.(这个文件需要手动建立,没有建立的话程序会不运行.).能力有限,错误在所难免,欢迎指出. 代码: /*  * 电

  • C语言实现餐饮点餐管理系统

    本文实例为大家分享了C语言实现餐饮点餐管理系统的具体代码,供大家参考,具体内容如下 具体代码如下 /* 项目名称:南航餐饮管理系统 组员:梁文新,刘青林,刘艺,施瑞文(组长) */ //当注册用户名为:root,密码为:root的账号时,系统默认为初始管理员 //头文件 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<windows.h&g

  • C语言实现餐饮结账管理系统

    本文实例为大家分享了C语言餐饮结账管理系统的具体代码,供大家参考,具体内容如下 使用C语言编写餐饮结账管理系统课程设计,包含设计报告,源代码. #include<stdio.h> #include<string.h> #include<stdlib.h> #define M 30 struct bill { int num; //编号 int time[4]; //时间 int table; //台面号 int count; //顾客数量 char name[20];

  • C语言代码实现点餐系统

    本文实例为大家分享了C语言实现点餐系统的具体代码,供大家参考,具体内容如下 #include<iostream> #include<cstring> #include<stdio.h> #include<string.h> #include<stdlib.h> #include<cstring> #include<conio.h> using namespace std; typedef struct member { c

随机推荐