软件17级第二学期程序设计基础实训——餐馆点菜管理系统

版权声明:版权问题请加微信:17165380098 备注 版权问题 https://blog.csdn.net/qq_30277453/article/details/81057069

话不多说 先上图

 

三天时间照着课本打出来的~略有改进。

实训答辩能保证运行操作稳过。

底层模块调用链表读模块与链表写模块,各模块内部运行多以链表来实现。

整个系统核心思想为组建多个模块,以模块调用的形式构成整个系统。

(类似于搭积木)

目前我本人做的三界面基本完善,但是有以下几点希望后继者帮忙改进:

程序在进入增删改等底层界面操作完成后或者误入时,可以按任意键返回

结合实际,增加完善经理界面的功能

程序模块结构如下:

扫描二维码关注公众号,回复: 3402371 查看本文章

1.台桌界面功能选项

void addtab();void delettab();voidaltertab();void looktab();void alltab();

2.人员界面功能选项

void addstaff();voiddeletstaff();void alterstaff();void lookstaff();

void allstaff();

3.菜目界面功能选项

void adddish();voiddeletdish();void alterdish();void lookdish();

void alldish();

4.服务员可操作的功能选项

void seeorder();void seedish();voidpayoff();void starttab();

void startdish();void seetab();

5.经理操作功能项

void dishcharge();voidtabcharge();void staffcharge();

6.主管操作功能项

void countsell();

7.三种账户开始界面及初始化与登录界面

voidmanagerinter();void serverinter();void chargeinter();

voiduserenter();void systementer();

重点来了!代码部分!

#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
/*台桌界面功能选项*/
void addtab();
void delettab();
void altertab();
void looktab();
void alltab();
//人员界面功能选项
void addstaff();
void deletstaff();
void alterstaff();
void lookstaff();
void allstaff();
//菜单界面功能选项
void adddish();
void deletdish();
void alterdish();
void lookdish();
void alldish();
//服务员可操作的功能选项
void seeorder();
void seedish();
void payoff();
void starttab();
void startdish();
void seetab();
//经理操作功能项
void dishcharge();
void tabcharge();
void staffcharge();
//主管操作功能项
void countsell();
//三种账户开始界面
void managerinter();
void serverinter();
void chargeinter();
void userenter();
void systementer();

char entername[20];

struct dp//定义结构体储存各类信息
{
    char name[20];//订单号+用户名
    char num[20];//桌号
    double price;//金额
    char sta[20];//状态
    char act[20];//活动
    char pay;//付账状态
    int dishname;//菜名
    int type;//
    struct dp *next;
}*tab,*dish,*user,*order;
//链表读取
struct dp *readlink(int num,struct dp *head)
{
    FILE *fp;
    if(num == 1)
        fp = fopen("d:\\user.dat","rb");
    else if(num == 2)
        fp = fopen("d:\\dish.dat","rb");
    else if(num == 3)
        fp = fopen("d:\\tab.dat","rb");
    else if(num == 4)
    {
        if((fp = fopen("d:\\order.dat","rb"))==NULL)
        {
            printf("没有订单信息!");
            char ch;
            ch = getch();
            if(ch == 27)
                serverinter();
        }
    }
    struct dp *p,*t;
    t = head;
    p = (struct dp*)malloc(sizeof(struct dp));
    fread(p,sizeof(struct dp),1,fp);
    while(!feof(fp))
    {
        t->next = p;
        t = t->next;
        p = (struct dp*)malloc(sizeof(struct dp));
        fread(p,sizeof(struct dp),1,fp);
    }
    fclose(fp);
    return head;
};
//链表写入
void writelink(int num,struct dp *head)
{
    FILE *in;
    struct dp *p;
    if(num == 1)
        in = fopen("d:\\user.dat","wb+");
    else if(num == 2)
        in = fopen("d:\\dish.dat","wb+");
    else if(num == 3)
        in = fopen("d:\\tab.dat","wb+");
    else if(num == 4)
        in = fopen("d:\\order.dat","wb+");
    p=head->next;
    while(p)
    {
        fwrite(p,sizeof(struct dp),1,in);
        p=p->next;
    }
    fclose(in);
}
//账号检测
int checkpassword()
{
    char name[20];
    printf("请输入用户账户\n");
    scanf("%s",name);
    char password[20];
    printf("请输入用户密码\n");
    scanf("%s",password);
    FILE *fp;
    struct dp *q,*p,*t,*head;
    head = (struct dp*)malloc(sizeof(struct dp));
    t = head;
    p =(struct dp*)malloc(sizeof(struct dp));
    fp = fopen("d:\\user.dat","rb");
    fread(p,sizeof(struct dp),1,fp);
    while(!feof(fp))
    {
        t->next = p;
        t =t->next;
        p = (struct dp*)malloc(sizeof(struct dp));
        fread(p,sizeof(struct dp),1,fp);
    }
    fclose(fp);
    q= head->next;
    while(q)
    {
        if((strcmp(name,q->name)==0)&&(strcmp(password,q->num)==0))
        {
            if(q->type == 2)
            {
                strcpy(entername,q->name);
            }
            return q->type;
        }
        else
        {
            q=q->next;
        }
    }
    return 0;
}
int main()
{
    systementer();
    return 0;
}
void closesystem()
{
    printf("+----------------------+\n");
    printf("+------         -------+\n");
    printf("+-------       --------+\n");
    printf("+----             -----+\n");
    printf("+--- 欢迎您下次使用 ---+\n");
    printf("+----  Copyright  -----+\n");
    printf("+-----  @Fawkes  ------+\n");
    printf("+-------       --------+\n");
    printf("+----------------------+\n");
    exit(1);
}
//菜单桌单订单
void ordermenu()
{
    system("cls");
    printf("单号    桌号    已买单    活动\n");
    struct dp *head,*p;
    head = (struct dp*)malloc(sizeof(struct dp));
    head = readlink(4,head);
    p=head->next;
    while(p)
    {
        printf("%s    %10s    %10s    %10s\n",p->num,p->num,p->sta,p->act);
        p=p->next;
    }
    char ch;
    ch = getch();
    if(ch == 27)
        serverinter();
}
void dishmenu()
{
    system("cls");
    printf("菜目号        名称        价格        状态        是否活动\n");
    struct dp *q,*head;
    head = (struct dp*)malloc(sizeof(struct dp));
    head = readlink(2,head);
    q=head->next;
    while(q!=NULL)
    {
        printf("%s    %10s    %10.2lf    %10s    %10s\n",q->num,q->name,q->price,q->sta,q->act);
        q=q->next;
    }
}
//桌单
void tabmenu()
{
    system("cls");
    printf("桌号    状态    活动\n");
    struct dp *q,*head;
    head = (struct dp*)malloc(sizeof(struct dp));
    head = readlink(3,head);
    q= head->next;
    while(q)
    {
        printf("%s    %10s    %10s\n",q->num,q->sta,q->act);
        q=q->next;
    }
}
//系统初始化建立台桌文件 用户文件 菜单文件
//台桌文件
struct dp *creattab()
{
    FILE *ff;
    if((ff=fopen("d:\\tab.dat","rb"))==NULL)
    {
        int i;
        struct dp *p,*t,*head;
        head = (struct dp*)malloc(sizeof(struct dp));
        head->next = NULL;
        t = head;
        for(i=0; i<1; i++)
        {
            p=(struct dp*)malloc(sizeof(struct dp));
            strcpy(p->num,"001");
            strcpy(p->sta,"Y");
            strcpy(p->act,"Y");
            p->type = 0;
            t->next= p;
            p->next = NULL;
            t= p;
        }
        tab = head;
        FILE *in = fopen("d:\\tab.dat","wb+");
        p=head->next;
        while(p)
        {
            fwrite(p,sizeof(struct dp),1,in);
            p=p->next;
        }
        fclose(in);
    }
};
//菜单文件
struct dp *creatdish()
{
    FILE *ff;
    if((ff = fopen("d:\\dish.dat","rb"))==NULL)
    {
        int i;
        struct dp *p,*t,*head;
        head = (struct dp*)malloc(sizeof(struct dp));
        head->next = NULL;
        t = head;
        for(i=0; i<1; i++)
        {
            p=(struct dp*)malloc(sizeof(struct dp));
            strcpy(p->num,"001");
            strcpy(p->sta,"Y");
            strcpy(p->name,"土豆丝");
            strcpy(p->act,"N");
            p->price = 20;
            t->next = p;
            p->next = NULL;
            t=p;
        }
        dish = head;
        FILE *in = fopen("d:\\dish.dat","wb+");
        p=head->next;
        while(p)
        {
            fwrite(p,sizeof(struct dp),1,in);
            p=p->next;
        }
        fclose(in);
    }
};
//用户文件
struct dp *creatuser()
{
    FILE *ff;
    if((ff = fopen("d:\\user.dat","rb"))==NULL)
    {
        int i;
        struct dp *p,*t,*head;
        head = (struct dp*)malloc(sizeof(struct dp));
        head->next = NULL;
        t = head;
        for(i=0; i<1; i++)
        {
            p = (struct dp*)malloc(sizeof(struct dp));
            strcpy(p->name,"111");
            strcpy(p->num,"111");
            p->type = 1;
            t->next = p;
            p->next = NULL;
            t= p;
        }
        user = head;
        FILE *in = fopen("d:\\user.dat","wb+");
        p= head->next;
        while(p)
        {
            fwrite(p,sizeof(struct dp),1,in);
            p=p->next;
        }
        fclose(in);
    }
}
//订单文件
struct dp *creatorder()
{
    FILE *ff;
    if((ff=fopen("d:\\order.dat","rb"))==NULL)
    {
        int i;
        struct dp *p,*t,*head;
        head = (struct dp*)malloc(sizeof(struct dp));
        head->next = NULL;
        t= head;
        for(i=0; i<1; i++)
        {
            p=(struct dp*)malloc(sizeof(struct dp));
            strcpy(p->name,"001");
            strcpy(p->num,"001");
            p->price = 0.00;
            t->next = p;
            p->next = NULL;
            t= p;
        }
        user = head;
        FILE *in = fopen("d:\\order.dat","wb+");
        p=head->next;
        while(p)
        {
            fwrite(p,sizeof(struct dp),1,in);
            p=p->next;
        }
        fclose(in);
    }
};
//加菜目
void adddish()
{
    system("cls");
    FILE *fp;
    struct dp *p;
    p = (struct dp*)malloc(sizeof(struct dp));
    p->next = NULL;
    printf("输入菜目编号: ");
    scanf("%s",p->num);
    struct dp *head,*q;
    head = (struct dp*)malloc(sizeof(struct dp));
    head = readlink(2,head);
    q = head->next;
    while(q)
    {
        if(strcmp(p->num,q->num)==0)
        {
            printf("已存在本菜目!\n请重新输入!\n");
            Sleep(1000);
            adddish();
        }
        else
        {
            q=q->next;
        }
    }
    printf("输入菜目名称: ");
    scanf("%s",p->name);
    q = head->next;
    while(q)
    {
        if(strcmp(p->name,q->name)==0)
        {
            printf("已存在本菜目!\n请重新输入!\n");
            Sleep(1000);
            adddish();
        }
        else
        {
            q=q->next;
        }
    }
    printf("输入菜目价格: ");
    scanf("%lf",&p->price);
    printf("输入菜目状态: ");
    scanf("%s",p->sta);
    printf("输入菜目活动: ");
    scanf("%s",p->act);
    if((fp = fopen("d:\\dish.dat","ab+"))==NULL)
    {
        printf("No file in there!");
    }
    fwrite(p,sizeof(struct dp),1,fp);
    free(p);
    fclose(fp);
    char cc[1];
    printf("是否继续添加<Y/N>>");
    scanf("%s",cc);
    if(strcmp(cc,"Y")==0)
    {
        adddish();
    }
    else if(strcmp(cc,"N")==0)
    {
        dishcharge();
    }
}
//去掉菜目
void deletdish()
{
    system("cls");
    char s[20];
    char ch;
    struct dp *head,*p,*q;
    head = (struct dp*)malloc(sizeof(struct dp));
    head = readlink(2,head);
    printf("请输入要删除的菜目号: ");
    scanf("%s",s);
    p = head;
    q =p->next;
    while(q)
    {
        if(strcmp(s,q->num)==0)
        {

            p->next = q->next;
            free(q);
            break;
        }
        else
        {
            p=p->next;
            q=q->next;
        }
    }
    if(q==NULL)
    {
        printf("该桌号不存在");
        ch = getch();
        if(ch == 27)
        {
            dishcharge();
        }
    }
    else
    {
        writelink(2,head);
        printf("修改成功!");
    }
    ch = getch();
    if(ch == 27)
    {
        dishcharge();
    }
}
//更改菜目
void alterdish()
{
    system("cls");
    struct dp *q,*head;
    head = (struct dp*)malloc(sizeof(struct dp));
    char s[20];
    char ch;
    head = readlink(2,head);
    q= head->next;
    printf("请输入要修改的菜目号: ");
    scanf("%s",s);
    while(q)
    {
        if(strcmp(s,q->num)==0)
        {
            printf("请输入新菜目:");
            scanf("%s",q->num);
            printf("输入菜目状态:");
            scanf("%s",q->sta);
            printf("输入活动状态: ");
            scanf("%s",q->act);
            break;
        }
        else
        {
            q=q->next;
        }
    }
    if(q==NULL)
    {
        printf("该菜目不存在");
        ch = getch();
        if(ch == 27)
        {
            dishcharge();
        }
    }
    else
    {
        writelink(2,head);
        printf("修改成功!\n请按ESC键返回");
    }
    ch = getch();
    if(ch == 27)
    {
        dishcharge();
    }
}
//查询菜目
void lookdish()
{
    system("cls");
    struct dp *head,*q;
    char s[20];
    printf("请输入要查询的菜目编号:");
    scanf("%s",s);
    head = (struct dp*)malloc(sizeof(struct dp));
    head = readlink(2,head);
    q = head->next;
    while(q)
    {
        if(strcmp(s,q->num)==0)
        {
            printf("菜目编号:%s\n菜目名称:%s\n菜目价格:%.2lf\n菜目状态:%s\n菜目活动:%s\n",q->num,q->name,q->price,q->sta,q->act);
            Sleep(4000);
            dishcharge();
        }
        else
            q=q->next;
    }
    if(q == NULL)
    {
        printf("无此菜目信息!");
        Sleep(2000);
        dishcharge();

    }
}
//列出所有菜目
void alldish()
{
    dishmenu();
    char ch;
    ch = getch();
    if(ch == 27)
    {
        dishcharge();
    }
}
//员工管理
void staffcharge()
{
    system("cls");
    printf("+------------------+\n");
    printf("+----         -----+\n");
    printf("+---  员工管理  ---+\n");
    printf("+----         -----+\n");
    printf("+------------------+\n");
    printf("\n");
    printf("   1 -> 聘用员工\n");
    printf("   2 -> 解雇员工\n");
    printf("   3 -> 更改员工\n");
    printf("   4 -> 查询员工\n");
    printf("   5 -> 所有员工\n");
    printf("   q -> 返    回\n");
    printf("\n");
    printf("   输入你的选择 > ");
    char s[1];
    scanf("%s",s);
    if(strcmp(s,"q")==0)
    {
        system("cls");
        managerinter();
    }
    else if(strcmp(s,"1")==0)
    {
        addstaff();
    }
    else if(strcmp(s,"2")==0)
    {
        deletstaff();
    }
    else if(strcmp(s,"3")==0)
    {
        alterstaff();
    }
    else if(strcmp(s,"4")==0)
    {
        lookstaff();
    }
    else if(strcmp(s,"5")==0)
    {
        allstaff();
    }
}
//聘用员工
void addstaff()
{
    system("cls");
    FILE *fp;
    struct dp *p,*t;
    p = (struct dp*)malloc(sizeof(struct dp));
    p->next = NULL;
    p->price = 0.00;//新用户工资
    printf("请输入用户名: ");
    scanf("%s",p->name);
    struct dp *head;
    head = (struct dp*)malloc(sizeof(struct dp));
    head = readlink(1,head);
    t= head->next;
    while(t)
    {
        if(strcmp(p->name,t->name)==0)
        {
            printf("该用户名已存在!");
            Sleep(1000);
            addstaff();
        }
        t=t->next;
    }
    printf("请输入用户密码:");
    scanf("%s",p->num);
    printf("请输入用户类型: <1(经理)/2(服务员)/3(主管)>");
    scanf("%d",&p->type);
    if(p->type == 2)
    {
        printf("请输入员工薪资: ");
        scanf("%lf",&p->price);
    }
    if((fp = fopen("d:\\user.dat","ab+"))==NULL)
        printf("No file in there!");
    fwrite(p,sizeof(struct dp),1,fp);
    free(p);
    fclose(fp);
    char cc[1];
    printf("是否继续添加<Y/N>");
    scanf("%s",cc);
    if(strcmp(cc,"N")==0)
    {
        staffcharge();
    }
    else if(strcmp(cc,"Y")==0)
    {
        addstaff();
    }
}
//辞退员工
void deletstaff()
{
    system("cls");
    char s[20];
    char ch;
    struct dp *head,*p,*q;
    head = (struct dp*)malloc(sizeof(struct dp));
    head  = readlink(1,head);
    printf("请输入要删除的员工姓名: ");
    scanf("%s",s);
    p = head;
    q = p->next;
    while(q)
    {
        if(strcmp(s,q->name)==0)
        {
            p=q->next;
            free(q);
            break;
        }
        else
        {
            p=p->next;
            q=q->next;
        }
    }
    if(q==NULL)
    {
        printf("该用户不存在");
        ch = getch();
        if(ch == 27)
        {
            staffcharge();
        }
    }
    else
    {
        writelink(1,head);
        printf("员工已辞退!");
    }
    ch = getch();
    if(ch == 27)
    {
        staffcharge();
    }
}
//换人
void alterstaff()
{
    system("cls");
    struct dp *q,*head;
    head = (struct dp*)malloc(sizeof(struct dp));
    char s[20];
    char ch;
    head = readlink(1,head);
    q= head->next;
    printf("请输入用户名:");
    scanf("%s",s);
    while(q)
    {
        if(strcmp(s,q->name)==0)
        {
            printf("请输入新员工姓名:");
            scanf("%s",q->name);
            printf("请输入新员工密码:");
            scanf("%s",q->num);
            printf("请输入新员工类型:<1(经理)/2(服务员)/3(主管)>");
            scanf("%d",&q->type);
            break;
        }
        else
        {
            q=q->next;
        }
    }
    if(q==NULL)
    {
        printf("该用户不存在!");
        ch =getch();
        if(ch == 27)
            staffcharge();
    }
    else
    {
        writelink(1,head);
        printf("修改成功!请按ESC返回");
    }
    ch = getch();
    if(ch == 27)
    {
        staffcharge();
    }
}
//所有员工
void allstaff()
{
    system("cls");
    printf("用户名   密码   类型\n");
    struct dp *head,*q;
    head = (struct dp*)malloc(sizeof(struct dp));
    head = readlink(1,head);
    q=head->next;
    while(q)
    {
        printf("%s   %10s   %10d\n",q->num,q->name,q->type);
        q=q->next;
    }
    printf("请按ESC键返回上一级菜单");
    char ch;
    ch =getch();
    if(ch ==27)
    {
        staffcharge();
    }
}
//查询员工
void lookstaff()
{
    system("cls");
    struct dp *head,*q;
    char s[20];
    printf("请输入要查询的员工用户名:");
    scanf("%s",s);
    head = (struct dp*)malloc(sizeof(struct dp));
    head = readlink(1,head);
    q = head->next;
    while(q)
    {
        if(strcmp(s,q->name)==0)
        {
            printf("用户名:%s\n类型:%d\n",q->num,q->type);
            Sleep(5000);
            staffcharge();
        }
        else
        {
            q=q->next;
        }
    }
    if(q == NULL)
    {
        printf("无此员工信息!\n");
        Sleep(2000);
        staffcharge();
    }
}
//台桌管理
void tabcharge()
{
    system("cls");
    printf("+------------------+\n");
    printf("+----         -----+\n");
    printf("+---  餐桌管理  ---+\n");
    printf("+----         -----+\n");
    printf("+------------------+\n");
    printf("\n");
    printf("   1 -> 增加餐桌\n");
    printf("   2 -> 移除餐桌\n");
    printf("   3 -> 修改餐桌\n");
    printf("   4 -> 查询餐桌\n");
    printf("   5 -> 所有餐桌\n");
    printf("   q -> 返    回\n");
    printf("\n");
    printf("   输入你的选择 > ");
    char s[1];
    scanf("%s",s);
    if(strcmp(s,"q")==0)
    {
        system("cls");
        managerinter();
    }
    else if(strcmp(s,"1")==0)
    {
        addtab();
    }
    else if(strcmp(s,"2")==0)
    {
        delettab();
    }
    else if(strcmp(s,"3")==0)
    {
        altertab();
    }
    else if(strcmp(s,"4")==0)
    {
        looktab();
    }
    else if(strcmp(s,"5")==0)
    {
        alltab();
    }
}
//加桌
void addtab()
{
    system("cls");
    FILE *fp;
    struct dp *p;
    p = (struct dp*)malloc(sizeof(struct dp));
    p->next = NULL;
    printf("输入桌号: ");
    scanf("%s",p->num);
    struct dp *head,*q;
    head = (struct dp*)malloc(sizeof(struct dp));
    head = readlink(3,head);
    q = head->next;
    while(q)
    {
        if(strcmp(p->num,q->num)==0)
        {
            printf("已存在此桌!\n请重新输入!\n");
            Sleep(1000);
            addtab();
        }
        else
        {
            q=q->next;
        }
    }
    printf("输入状态: ");
    scanf("%s",p->sta);
    printf("输入活动: ");
    scanf("%s",p->act);
    if((fp = fopen("d:\\tab.dat","ab+"))==NULL)
    {
        printf("No file in there!");
    }
    fwrite(p,sizeof(struct dp),1,fp);
    free(p);
    fclose(fp);
    char cc[1];
    printf("是否继续添加<Y/N>>");
    scanf("%s",cc);
    if(strcmp(cc,"Y")==0)
    {
        addtab();
    }
    else if(strcmp(cc,"N")==0)
    {
        tabcharge();
    }
}
//删桌
void delettab()
{
    system("cls");
    char s[20];
    char ch;
    struct dp *head,*p,*q;
    head = (struct dp*)malloc(sizeof(struct dp));
    head = readlink(3,head);
    printf("请输入要删除的桌号: ");
    scanf("%s",s);
    p = head;
    q =p->next;
    while(q)
    {
        if(strcmp(s,q->num)==0)
        {

            p->next = q->next;
            free(q);
            break;
        }
        else
        {
            p=p->next;
            q=q->next;
        }
    }
    if(q==NULL)
    {
        printf("该桌号不存在");
        ch = getch();
        if(ch == 27)
        {
            tabcharge();
        }
    }
    else
    {
        writelink(3,head);
        printf("修改成功!");
    }
    ch = getch();
    if(ch == 27)
    {
        tabcharge();
    }
}
//改桌
void altertab()
{
    system("cls");
    struct dp *q,*head;
    head = (struct dp*)malloc(sizeof(struct dp));
    char s[20];
    char ch;
    head = readlink(3,head);
    q= head->next;
    printf("请输入要修改的桌号: ");
    scanf("%s",s);
    while(q)
    {
        if(strcmp(s,q->num)==0)
        {
            printf("请输入新桌号:");
            scanf("%s",q->num);
            printf("输入桌号状态:");
            scanf("%s",q->sta);
            printf("请输入新活动: ");
            scanf("%s",q->act);
            break;
        }
        else
        {
            q=q->next;
        }
    }
    if(q==NULL)
    {
        printf("该餐桌不存在");
        ch = getch();
        if(ch == 27)
        {
            tabcharge();
        }
    }
    else
    {
        writelink(3,head);
        printf("修改成功!\n请按ESC键返回\n");
    }
    ch = getch();
    if(ch == 27)
    {
        tabcharge();
    }
}
//看桌
void alltab()
{
    tabmenu();
    char ch;
    ch = getch();
    if(ch == 27)
    {
        tabcharge();
    }
}
//查桌子
void looktab()
{
    system("cls");
    struct dp *head,*q;
    char s[20];
    printf("请输入要查询的台桌编号:");
    scanf("%s",s);
    head = (struct dp*)malloc(sizeof(struct dp));
    head = readlink(3,head);
    q = head->next;
    while(q)
    {
        if(strcmp(s,q->num)==0)
        {
            printf("台桌编号:%s\n台桌状态:%s\n台桌活动:%s\n",q->num,q->sta,q->act);
            Sleep(5000);
            tabcharge();
        }
        else
            q=q->next;
    }
    if(q== NULL)
    {
        printf("无此台桌信息!\n");
        Sleep(2000);
        tabcharge();
    }
}
//菜单管理
void dishcharge()
{
    system("cls");
    printf("+------------------+\n");
    printf("+----         -----+\n");
    printf("+---  菜单管理  ---+\n");
    printf("+----         -----+\n");
    printf("+------------------+\n");
    printf("\n");
    printf("   1 -> 增加菜目\n");
    printf("   2 -> 删除菜目\n");
    printf("   3 -> 修改菜目\n");
    printf("   4 -> 查询菜目\n");
    printf("   5 -> 所有菜目\n");
    printf("   q -> 返    回\n");
    printf("\n");
    printf("   输入你的选择 > ");
    char s[1];
    scanf("%s",s);
    if(strcmp(s,"q")==0)
    {
        system("cls");
        managerinter();
    }
    else if(strcmp(s,"1")==0)
    {
        adddish();
    }
    else if(strcmp(s,"2")==0)
    {
        deletdish();
    }
    else if(strcmp(s,"3")==0)
    {
        alterdish();
    }
    else if(strcmp(s,"4")==0)
    {
        lookdish();
    }
    else if(strcmp(s,"5")==0)
    {
        alldish();
    }
}
//销售统计
void countsell()
{
    system("cls");
    double allm = 0.00;
    printf("员工编号   营业额\n");
    struct dp *head,*t;
    head = (struct dp*)malloc(sizeof(struct dp));
    head = readlink(1,head);
    t = head->next;
    while(t)
    {
        if(t->type == 2)
        {
            printf("%s %10.2lf\n",t->name,t->price);
            allm+=t->price;
            t=t->next;
        }
    }
    printf("总计   %.2lf\n",allm);
    printf("请按ESC键返回\n");
    char ch;
    ch = getch();
    if(ch == 27)
    {
        chargeinter();
    }
}
//看订单
void seeorder()
{
    ordermenu();
}
//看菜单
void seedish()
{
    system("cls");
    ordermenu();
    char ch;
    ch = getch();
    if(ch == 27)
    {
        serverinter();
    }
}
//付账
void payoff()
{
    system("cls");
    ordermenu();
    printf("请输入要付款的订单号:");
    char num[20];
    scanf("%s",num);
    struct dp *head,*p;
    head = (struct dp*)malloc(sizeof(struct dp));
    head = readlink(4,head);
    p=head->next;
    while(p)
    {
        if(strcmp(p->num,num)==0&&strcmp(p->sta,"N")==0)
        {
            printf("是否确认付账<Y/N>>");
            char s[1];
            scanf("%s",s);
            if(strcmp(s,"Y")==0)
            {
                printf("结账成功");
                strcpy(p->sta,"Y");
                writelink(4,head);
                struct dp *head2,*t2;
                head2 = (struct dp*)malloc(sizeof(struct dp));
                head2 = readlink(3,head);
                t2 =head2->next;
                while(t2)
                {
                    if(strcmp(t2->num,p->num)==0)
                    {
                        strcpy(t2->sta,"Y");
                        writelink(3,head2);
                        break;
                    }
                    else
                    {
                        t2=t2->next;
                    }
                }
                struct dp *head,*t;
                head = (struct dp*)malloc(sizeof(struct dp));
                head= readlink(1,head);
                t= head->next;
                while(t)
                {
                    if(strcmp(t->name,entername)==0)
                    {
                        t->price+=p->price;
                        writelink(1,head);
                        printf("已将销售金额写入该用户!");
                        Sleep(1000);
                        break;
                    }
                    else
                    {
                        t=t->next;
                    }
                }
                break;
            }


            else if(strcmp(s,"N")==0)
            {
                payoff();
            }
        }
        if(p==NULL)
        {
            printf("没有此订单!");
            Sleep(1000);
            payoff();
        }
        char ch;
        ch = getch();
        if(ch == 27)
            serverinter();
    }
}
//查询台桌
void seetab()
{
    system("cls");
    tabmenu();
    char ch;
    ch = getch();
    if(ch == 27)
        serverinter();
}
//订菜
void startdish()
{
    system("cls");
    printf("请输入要点菜的订单号:");
    char ordernum[20];
    scanf("%s",ordernum);
    struct dp *t,*head2;
    head2 = (struct dp*)malloc(sizeof(struct dp));
    t= head2->next;
    while(t)
    {
        if(strcmp(ordernum,t->num)==0)
        {
            printf("这是菜单\n");
            dishmenu();
            printf("请输入菜号:");
            char num1[20];
            int num2;
            scanf("%s",num1);
            printf("是否确认点菜<Y/N>");
            char s[1];
            scanf("%s",s);
            if(strcmp(s,"Y")==0)
            {
                struct dp *p,*head1;
                head1 = (struct dp*)malloc(sizeof(struct dp));
                head1 = readlink(2,head1);
                p=p->next;
                while(p)
                {
                    if(strcmp(num1,p->num)==0)
                    {
                        printf("请输入份数:");
                        scanf("%d",&num2);
                        t->price+=num2*p->price;
                        strcpy(t->sta,"N");
                        strcpy(t->act,"Y");
                        writelink(4,head2);
                        printf("是否继续点菜<Y/N>");
                        scanf("%s",s);
                        if(strcmp(s,"Y")==0)
                            startdish();
                        else
                            serverinter();
                    }
                    else
                    {
                        p=p->next;
                    }
                }
                if(p==NULL)
                {
                    printf("没有此菜!");
                }
                Sleep(1000);
                startdish();

            }
        }
        else
        {
            t=t->next;
        }
        if(t==NULL)
        {
            printf("没有此订单或该订单已付款!");
            Sleep(1000);
            startdish();
        }
    }
};
//开桌
void starttab()
{
    system("cls");
    tabmenu();
    FILE *fp;
    struct dp *p,*head,*t;
    p=(struct dp*)malloc(sizeof(struct dp));
    p->next = NULL;
    printf("输入桌号:");
    scanf("%s",p->num);
    head = (struct dp*)malloc(sizeof(struct dp));
    head  =readlink(3,head);
    t = head->next;
    while(t)
    {
        if((strcmp(t->num,p->num)==0)&&(strcmp(t->sta,"Y")==0))
        {
            strcpy(t->sta,"N");
            if((fp = fopen("c:\\order.dat","rb"))==NULL)
            {
                fp =fopen("c:\\order.dat","wb+");
                fwrite(p,sizeof(struct dp),1,fp);
                free(p);
                writelink(3,head);
                char cc[1];
                printf("是否继续添加<Y/N>");
                scanf("%s",cc);
                if(strcmp(cc,"Y")==0)
                {
                    starttab();
                }
                else if(strcmp(cc,"N")==0)
                {
                    serverinter();
                }
                break;
            }
            else
            {
                fp = fopen("c:\\order.dat","ab+");
                fwrite(p,sizeof(struct dp),1,fp);
                free(p);
                fclose(fp);
                writelink(3,head);
                char cc[1];
                printf("是否继续添加<Y/N>");
                scanf("%s",cc);
                if(strcmp(cc,"Y")==0)
                {
                    starttab();
                }
                else if(strcmp(cc,"N")==0)
                {
                    serverinter();
                }
                break;
            }

        }
        else
        {
            t=t->next;
        }
    }
    if(t==NULL)
    {
        printf("不能添加此桌!");
        Sleep(2000);
        starttab();
    }
}
//服务员界面
void serverinter()
{
    system("cls");
    printf("+------------------+\n");
    printf("+----         -----+\n");
    printf("+---  服务界面  ---+\n");
    printf("+----         -----+\n");
    printf("+------------------+\n");
    printf("\n");
    printf("   1:开    桌\n\n");
    printf("   2:点    菜\n\n");
    printf("   3:查询台桌\n\n");
    printf("   4:点菜记录\n\n");
    printf("   5:查询订单\n\n");
    printf("   6:买    单\n\n");
    printf("   c:切换用户\n\n");
    printf("   q:退出系统\n\n");
    printf("\n");
    printf("   输入你的选择 > ");
    char s[1];
    scanf("%s",s);
    if(strcmp(s,"c")==0)
    {
        system("cls");
        Sleep(200);
        userenter();
    }
    else if(strcmp(s,"1")==0)
    {
        starttab();
    }
    else if(strcmp(s,"2")==0)
    {
        startdish();
    }
    else if(strcmp(s,"3")==0)
    {
        seetab();
    }
    else if(strcmp(s,"4")==0)
    {
        seedish();
    }
    else if(strcmp(s,"5")==0)
    {
        seeorder();
    }
    else if(strcmp(s,"6")==0)
    {
        payoff();
    }
    else if(strcmp(s,"q")==0)
    {
        closesystem();
    }
}
//主管操作界面
void chargeinter()
{
    system("cls");
    printf("+------------------+\n");
    printf("+----         -----+\n");
    printf("+---  主管界面  ---+\n");
    printf("+----         -----+\n");
    printf("+------------------+\n");
    printf("\n");
    printf("   1: 销售统计\n\n");
    printf("   2:         \n\n");
    printf("   3:         \n\n");
    printf("   c: 切换用户\n\n");
    printf("   q: 退出系统\n\n");
    printf("\n");
    printf("   输入你的选择 > ");
    char s[1];
    scanf("%s",s);

    if(strcmp(s,"c")==0)
    {
        system("cls");
        Sleep(200);
        userenter();
    }
    else if(strcmp(s,"1")==0)
    {
        countsell();
    }
    else if(strcmp(s,"q")==0)
    {
        closesystem();
    }
}
//经理界面
void managerinter()
{
    system("cls");
    printf("+------------------+\n");
    printf("+----         -----+\n");
    printf("+---  管理界面  ---+\n");
    printf("+----         -----+\n");
    printf("+------------------+\n");
    printf("\n");
    printf("   1: 菜谱管理\n\n");
    printf("   2: 餐桌管理\n\n");
    printf("   3: 人员管理\n\n");
    printf("   c: 切换用户\n\n");
    printf("   q: 退出系统\n\n");
    printf("\n");
    printf("   输入你的选择 > ");
    char s[1];
    scanf("%s",s);
    if(strcmp(s,"c")==0)
    {
        system("cls");
        Sleep(200);
        userenter();
    }
    else if(strcmp(s,"1")==0)
    {
        dishcharge();
    }
    else if(strcmp(s,"2")==0)
    {
        tabcharge();
    }
    else if(strcmp(s,"3")==0)
    {
        staffcharge();
    }
    else if(strcmp(s,"q")==0)
    {
        closesystem();
    }
};
//登陆界面
void userenter()
{
    printf("+----------------------+\n");
    printf("+------         -------+\n");
    printf("+-------       --------+\n");
    printf("+----             -----+\n");
    printf("+---  小米点菜系统  ---+\n");
    printf("+----  Copyright  -----+\n");
    printf("+-----  @Fawkes  ------+\n");
    printf("+-------       --------+\n");
    printf("+----------------------+\n");
    int s;
    s = checkpassword();
    if(s == 2)
    {
        printf("\n     正在进入系统请稍后~\n");
        for(int j = 0; j<17; j++)
        {
            printf(" ");
            Sleep(50);
        }
        system("cls");
        serverinter();
    }
    else if(s==3)
    {
        printf("\n     正在进入系统请稍后~\n");
        for(int j = 0; j<17; j++)
        {
            printf(" ");
            Sleep(50);
        }
        system("cls");
        chargeinter();
    }
    else if(s==1)
    {
        printf("\n     正在进入系统请稍后~\n");
        for(int j = 0; j<17; j++)
        {
            printf(" ");
            Sleep(50);
        }
        system("cls");
        managerinter();
    }
    else
    {
        printf("对不起 密码错误 请重试\n");
        Sleep(1000);
        system("cls");
        userenter();
    }
}
//初始化界面
void systementer()
{
    printf("系统初始化\n初始化完成\n请输入任意键继续\n");
    creatuser();
    creatdish();
    creattab();
    creatorder();
    getch();
    printf("\n    系统启动中,请稍等\n");
    for(int j = 0; j<17; j++)
    {
        printf(" ");
        Sleep(50);
    }
    system("cls");
    userenter();
}

其他资料欢迎下载 https://pan.baidu.com/s/1GRgOC7yMkrQfQMgImcMaVA

猜你喜欢

转载自blog.csdn.net/qq_30277453/article/details/81057069