溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C語言如何實(shí)現(xiàn)點(diǎn)菜系統(tǒng)

發(fā)布時間:2022-06-16 13:41:05 來源:億速云 閱讀:236 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“C語言如何實(shí)現(xiàn)點(diǎn)菜系統(tǒng)”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“C語言如何實(shí)現(xiàn)點(diǎn)菜系統(tǒng)”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

一、main.c

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>//Sleep
#include"user.h"
#include"loginWin.h"//登錄界面使用
#include"Admin.h"//管理員界面使用
#include"Manager.h"//經(jīng)理界面使用
#include"Waiter.h"//服務(wù)員界面使用
#include"guanRen.h"//人員管理窗口使用
#include"xinZeng.h"//新增用戶窗口使用
#include"daYin.h"//打印查詢窗口使用
#include"xiuGai.h"//修改密碼窗口使用
 
int count =3;  //初始化兩個用戶  全局變量
   //初始化用戶結(jié)構(gòu)體數(shù)組  做全局變量 其他.c中extern外部引用
    USER_T userArr[10]={    
        {1001,"admin","123456",1},//0 ADMIN
        {1002,"manager","123456",2},//1  MANAGER
        {1003,"waiter","123456",3}//2  WAITER
    };
 
void proRun()
{
    int(*win_funs[30])()={loginInit,adminInit,managerInit,waiterInit,guanrenInit,xinZengInit
        ,daYinInit,xiuGaiInit};
    int winIndex = 0; //0-loginInit 1-adminInit 2-managerInit 3-waiterInit
    while(1)
    {
        Sleep(1500);
        system("cls");
        winIndex=win_funs[winIndex]();    
    }
}    
 
int main()
{
    proRun();        
}

二、Ctool.h

#ifndef CTOOL_H
#define CTOOL_H
#define KEY_UP 72
#define KEY_DOWN 80
#define KEY_LEFT 75
#define KEY_RIGHT 77
#define KEY_ESC 27
#define KEY_ENTER 13
 
void paintWindow(int startX,int startY,int width,int height);//打印窗口
 
void gotoxy(int x,int y);//形參  光標(biāo)定位
 
/*
函數(shù)功能:字符串輸入控制
函數(shù)參數(shù):
int maxLen 允許輸入最大長度
int inputType 允許輸入的字符類型  0:數(shù)字 1:字母 2:字母+數(shù)字
int ips 數(shù)據(jù)顯示格式  0:密文  1:明文
char str[] 存儲輸入字符
函數(shù)返回值:無
char str[]    char str[20]    char*str
*/
void glb_string(int maxLen,int inputType,int ips,char str[]); 
 
/*
函數(shù)名:int getkey()
函數(shù)功能:獲取用戶輸入的任意鍵盤值
函數(shù)參數(shù):無
函數(shù)返回:ascii  
*/
int getkey();
 
//打印用戶信息表格
void daYinBiao(int x,int y,int lie,int hang);
 
#endif

三、Ctool.c

#include "Ctool.h"
#include <windows.h>//gotoxy
#include<stdio.h>
#include<conio.h>
 
void gotoxy(int x,int y)//形參
{
    HANDLE hOut;
    COORD pos= {x,y};
    // 光標(biāo)的起始位(第1列,第3行) 0是第1列 2是第3行
    hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hOut, pos);
    //printf("定位光標(biāo)位置搜索(%d,%d)\n",pos.X,pos.Y);
}
 
void paintWindow(int startX,int startY,int width,int height)  
{
    int i=0;
    //打印頂部   
    //光標(biāo)定位 找規(guī)律 ┗  ┛ ┏ ┓ ┃ ━
    //頂部 y不變 x 在變 (x-x+w)
    gotoxy(startX,startY);
    printf("┏");
    for(i=0;i<width-2;i++)  //控制循環(huán)次數(shù)width-2次
    {        
        printf("━ ");
    }
    printf("┓");
 
    //左邊 x不變 y在變 (y到y(tǒng)+height)    
    for(i=1;i<=height-1;i++)
    {
        gotoxy(startX,startY+i);
        printf("┃");
    }
    //右邊 x不變 =startx+width-1  y在變 y 到 y+height
    for(i=1;i<=height-1;i++)
    {
        gotoxy(startX+width*2-3,startY+i);
        printf("┃");
    }
 
    //底部 x在變化    y不變 (x到x+width) ━ 
    gotoxy(startX,startY+height-1);
    printf("┗");
    for(i=0;i<width-2;i++)
    {
        printf("━ ");
    }
    printf("┛");
 
    gotoxy(startX,startX+height);    
}
 
void glb_string(int maxLen,int inputType,int ips,char str[])
{
       char ch=0;
       int i=0;
       while(1)
       {
           ch=getch();
           if(ch=='\r'&&i>0)//換行結(jié)束輸入
           {
               break;               
           }
           switch(inputType)
           {
           case 0:
               if(ch>='0'&&ch<='9'&&i<maxLen)
               {
                   if(ips==0)
                   {
                       putch('*');                   
                   }
                   else{                   
                       putch(ch);
                   }
                   str[i++]=ch;               
               }
               break;
           case 1:
               if(i<maxLen&&(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
               {
                   if(ips==0)
                   {
                       putch('*');           
                   }
                   else{           
                       putch(ch);
                   }
                   str[i++]=ch;       
               }
               break;
          case 2:
               if(i<maxLen&&(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')||(ch>='0'&&ch<='9'))
                    {
                    if(ips==0)
                    {
                    putch('*');                                 
                    }
                else{
                    putch(ch);
                    }
                    str[i++]=ch;
                    }
                break;
        default:
                 break;
            }   
       }        
}
 
/*
函數(shù)名:int getkey()
函數(shù)功能:獲取用戶輸入的任意鍵盤值
函數(shù)參數(shù):無
函數(shù)返回:ascii  
*/
int getkey()
{
    char key=0;
    key=getch();
    if(key==-32)//方向按鍵 第一個值都是32
    {
        key=getch();
        switch(key){
        case 72:
            return KEY_UP;
        case 80:
            return KEY_DOWN;
        case 75:
            return KEY_LEFT;
        case 77:
            return KEY_RIGHT;    
        }    
    }
    else if(key==13)
    {
        return KEY_ENTER;
    }
    else if(key==27)
    {
        return KEY_ESC;
    }
    return key;    
}
 
 
void daYinBiao(int x,int y,int lie,int hang)  
{
    //lie --表格列數(shù)-- 3--7
    int i,j,m,z=0;
    int count=0;
    gotoxy(x,y);
    for(i=0;i<2*hang+1;i++)
    {
        if(i==0)//第一行
        {
            printf("┌ ");   //第一列
            for(j=0;j<lie-1;j++)//2 - n-1列---┬
            {
                for(m=0;m<7;m++)
                {
                    printf("━ ");        
                }
                printf("┬ ");//每個單元格之間的分割        
            }
            for(m=0;m<7;m++)
            {
                printf("━ ");
            }
            printf("┐");
        }
        if(i>0&&i<2*hang)//1-6行
        {
            if(i%2==1)   //數(shù)據(jù)行
            {
                gotoxy(x,i+y);
                printf("┃");
                for(j=0;j<lie;j++) //0-3
                {
                  for(m=0;m<7;m++)
                  {
                      printf("  ");      
                  }
                  printf(" ┃");
                }            
            }
            else  //單元格邊界
            {
                gotoxy(x,i+y);
                printf("├ ");
                for(j=0;j<lie-1;j++)
                {
                    for(m=0;m<7;m++)
                    {
                        printf("━ ");
                    }
                    printf("┼ ");
                }
                for(m=0;m<7;m++)
                {
                    printf("━ ");    
                }
                printf("┤");            
            }        
        }
        //最后一行    // ┌ ━ ┬ ┐┃ ┼ ├ ┤ └ ┘ ┴
        if(i==2*hang) 
        {
            gotoxy(x,y+2*hang);
            printf("└ ");      
            for(j=0;j<lie-1;j++)//2 - n-1列---┴
            {
                for(m=0;m<7;m++)
                {
                    printf("━ ");
                }
                printf("┴ ");//每個單元格之間的分割
            }
            for(m=0;m<7;m++)
            {
                printf("━ ");
            }
            printf("┘");    
        }
    }
}

四、Cwindow.h

#ifndef CWINDOW_H
#define CWINDOW_H
//描述窗口相關(guān)的
#define LABEL 1 //控件使用宏定義  標(biāo)簽文本
#define EDIT 2  //                編輯框
#define BUTTON 3//                按鈕   
 
//標(biāo)簽結(jié)構(gòu)體的聲明
typedef struct label_t
{
    int startx; //標(biāo)簽文本所放位置
    int starty;
    int width;//標(biāo)簽文本自身寬高
    int height;
    char content[20];//標(biāo)簽文本中輸入對應(yīng)的內(nèi)容 字符數(shù)組
};
 
//編輯框結(jié)構(gòu)體的聲明
typedef struct edit_t
{
    int startx;//編輯框所放位置
    int starty;
    int width;//編輯框自身寬高
    int height;
    char content[20];//編輯框中輸入的內(nèi)容  字符數(shù)組的使用
    int inputType;//輸入類型 0-數(shù)字 1-字母 2-數(shù)字+字母
    int ips;//顯示類型 0-密文 1-明文
    int maxLen;  //最大長度    
};
 
//按鈕結(jié)構(gòu)體的聲明
typedef struct button_t
{
    int startx;//按鈕所放位置
    int starty;
    int width;//按鈕自身寬高
    int height;
    char content[20];//按鈕中輸入的內(nèi)容    
};
 
//以編輯框?yàn)闃?biāo)準(zhǔn)統(tǒng)一管控(編輯框要求最多) 
//控件結(jié)構(gòu)體的聲明--編輯框 標(biāo)簽 按鈕
typedef struct control_t
{
    int startx;//控件所放位置
    int starty;
    int width;//控件自身寬高
    int height;
    int maxLen;//最大長度
    int inputType;//輸入類型 0-數(shù)字 1-字母 2-數(shù)字+字母
    int ips;//顯示類型 0-密文 1-明文
    int ctrlType;  //控件類型 1-label 2-edit 3-button  區(qū)分控件的使用
    char content[20];//控件中輸入的內(nèi)容    
}CONTROL_T;//typedef重命名
 
//窗口結(jié)構(gòu)體的聲明 控件是要放入窗口當(dāng)中的
typedef struct win_t
{
    int startx;//窗口所放位置
    int starty;
    int width;//窗口對應(yīng)寬高
    int height;
    CONTROL_T ctrlArr[20];//存放控件結(jié)構(gòu)體數(shù)組  窗口中有多個控件
    int ctrlCount;   //記錄控件總個數(shù) 初始化為0 用于添加控件函數(shù)中
    int foucsIndex;  //winRun在按鈕回車時記錄當(dāng)前控件的下標(biāo)
}WIN_T;
 
//添加控件 void addControl(參數(shù)1:控件結(jié)構(gòu)體 參數(shù)2:控件結(jié)構(gòu)體數(shù)組 參數(shù)3:控件個數(shù));
//把控件放進(jìn)控件結(jié)構(gòu)體數(shù)組中 ctrlCount控件個數(shù) 預(yù)留出下一個控件結(jié)構(gòu)體下標(biāo)
//int addControl(CONTROL_T ctrl,CONTROL_T ctrlArr[20] , int ctrlCount);//添加控件到對應(yīng)窗口中
void addControl(CONTROL_T ctrl,CONTROL_T ctrlArr[20] , int *ctrlCount);
 
//窗口顯示函數(shù)可以繪制整個窗口以及每一個控件 而paintWindow只能畫大框 不能顯示里面的內(nèi)容    
void showWindow(WIN_T win);
 
/*
函數(shù)名稱:void winRun(WIN_T *win);
函數(shù)作用:窗口運(yùn)行函數(shù) 光標(biāo)定位 找到edit(輸入) button控件(回車,做對應(yīng)操作)
函數(shù)參數(shù):參數(shù) WIN_T *win  窗口結(jié)構(gòu)體指針
函數(shù)返回:無
*/
void winRun(WIN_T *win);
 
/*
函數(shù)名稱:void editKeyListen()
函數(shù)作用:編輯框輸入控制函數(shù)
函數(shù)參數(shù):參數(shù)1:CONTROL_T ctrl 監(jiān)聽的控件
          參數(shù)2:char ch 輸入的字符
          參數(shù)3:char content[] 存儲的字符串
函數(shù)返回:無
*/
void editKeyListen(CONTROL_T ctrl,char ch,char content[]);
 
#endif

五、Cwindow.c

#include "Cwindow.h"
#include "Ctool.h"
#include<conio.h>// getch()
#include<string.h>//strlen
 
//添加控件 void addControl(參數(shù)1:控件結(jié)構(gòu)體 參數(shù)2:控件結(jié)構(gòu)體數(shù)組 參數(shù)3:控件個數(shù));
//把控件放進(jìn)控件結(jié)構(gòu)體數(shù)組中 ctrlCount控件個數(shù) 預(yù)留出下一個控件結(jié)構(gòu)體下標(biāo)
void addControl(CONTROL_T ctrl,CONTROL_T ctrlArr[20] , int *ctrlCount)
{
    ctrlArr[(*ctrlCount)++]=ctrl;//按地址傳遞
}
 
//窗口顯示函數(shù) 繪制整個窗口以及每一個控件
void showWindow(WIN_T win)
{
    int i=0;
    //首先顯示大框
    paintWindow(win.startx,win.starty,win.width,win.height);//結(jié)構(gòu)體變量名.屬性
    //顯示每一個控件
    for(i=0;i<win.ctrlCount;i++)//遍歷ctrlArr[]數(shù)組 長度ctrlCount一個一個獲取 控件在窗口里
    {
        //類型 label  edit   button
        //如果是label    直接顯示內(nèi)容即可
        //如果是edit     畫框(paintWindow) 顯示內(nèi)容
        //如果是button     畫框 顯示內(nèi)容
        if(win.ctrlArr[i].ctrlType==LABEL)
        {
            gotoxy(win.ctrlArr[i].startx,win.ctrlArr[i].starty);//光標(biāo)定位放入內(nèi)容
            puts(win.ctrlArr[i].content);
        }
        else
        {
            //畫編輯框 按鈕框(小框)  避免小框和放入的內(nèi)容鑲嵌
            paintWindow(win.ctrlArr[i].startx-2,win.ctrlArr[i].starty-1,win.ctrlArr[i].width,win.ctrlArr[i].height);
            gotoxy(win.ctrlArr[i].startx,win.ctrlArr[i].starty);//光標(biāo)定位放入內(nèi)容
            puts(win.ctrlArr[i].content); 
        }    
    }
    gotoxy(0,29);//優(yōu)化顯示
}
 
/*
函數(shù)名稱:void winRun(WIN_T *win);
函數(shù)作用:窗口運(yùn)行函數(shù) 光標(biāo)定位 找到edit(輸入) button控件(回車,做對應(yīng)操作)
函數(shù)參數(shù):參數(shù) WIN_T *win  窗口結(jié)構(gòu)體指針
函數(shù)返回:無
*/
void winRun(WIN_T *win)
{
    int i=0,key=0;
    for(i=0;i<win->ctrlCount;i++)
    {
        if(win->ctrlArr[i].ctrlType==EDIT||win->ctrlArr[i].ctrlType==BUTTON)
        {
            gotoxy(win->ctrlArr[i].startx,win->ctrlArr[i].starty);
            break;
        }
    }
    while(1)
    {
        key=getkey();
        switch(key){
        case KEY_DOWN://向下按鍵  查找下一個編輯框 按鈕
            i++;//按鍵數(shù)組下標(biāo)越界
            if(i==win->ctrlCount)
            {
                i=0;//為了避免下標(biāo)越界 從頭開始對控件結(jié)構(gòu)體數(shù)組找編輯框 按鈕
            }
            for(;i<win->ctrlCount;i++)
            {
                if(win->ctrlArr[i].ctrlType==EDIT||win->ctrlArr[i].ctrlType==BUTTON)//如果找到編輯框 按鈕
                {
                    gotoxy(win->ctrlArr[i].startx,win->ctrlArr[i].starty);//光標(biāo)目標(biāo)定位
                    break;//停止
                }
            }
            break;
        case KEY_UP:
            i--;
            if(i==-1)  //從后往前找 數(shù)組起始0 i--為-1 數(shù)組下標(biāo)由大到小 (控件數(shù)組下標(biāo)0位置)
            {
                i=win->ctrlCount-1;  //控件個數(shù)(控件結(jié)構(gòu)體數(shù)組下標(biāo)最大)-1 (控件數(shù)組下標(biāo)ctrlCount位置)
            }
            for(;i>0;i--)
            {
                if(win->ctrlArr[i].ctrlType==EDIT||win->ctrlArr[i].ctrlType==BUTTON)//如果找到編輯框 按鈕
                {
                    gotoxy(win->ctrlArr[i].startx,win->ctrlArr[i].starty);//光標(biāo)目標(biāo)定位
                    break;//停止
                }
                if(i==0)  //第一個 若第一個不是編輯框 按鈕
                {
                    i=win->ctrlCount;  //就從最后一個往前查找 for循環(huán)中有i--,不用再-1            
                }        
            }
            break;
        case KEY_ENTER:
            if(win->ctrlArr[i].ctrlType==BUTTON)
            {
                win->foucsIndex=i;
                return ;//獲取winRun中輸入的編輯框的值
            }
            break;
        default:   //其他字符(不是按鍵)并且當(dāng)前控件是編輯框
            if(win->ctrlArr[i].ctrlType==EDIT)
            {
                editKeyListen(win->ctrlArr[i],key,win->ctrlArr[i].content);        
            }
            break;
        }
    }
}
 
/*
函數(shù)名稱:void editKeyListen()
函數(shù)作用:編輯框輸入控制函數(shù)
函數(shù)參數(shù):參數(shù)1:CONTROL_T ctrl 監(jiān)聽的控件
          參數(shù)2:char ch 輸入的字符
          參數(shù)3:char content[] 存儲的字符串
函數(shù)返回:無
*/
void editKeyListen(CONTROL_T ctrl,char ch,char content[])
{
    int i=strlen(content);//從字符串原來的長度開始存儲
    switch(ctrl.inputType)
    {
    case 0: //數(shù)字
        if(ch>='0'&&ch<='9'&&i<ctrl.maxLen)
        {
            if(ctrl.ips==0)
            {
                putch('*');            
            }
            else{            
                putch(ch);
            }
            content[i++]=ch;    
        }
        break;
    case 1:
        if(i<ctrl.maxLen&&(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
        {
            if(ctrl.ips==0)
            {
                putch('*');    
            }
            else{        
                putch(ch);
            }
            content[i++]=ch;    
        }
        break;
    case 2:
        if(i<ctrl.maxLen&&(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')||(ch>='0'&&ch<='9'))
        {
            if(ctrl.ips==0)
            {
                putch('*');    
            }
            else{    
                putch(ch);
            }
            content[i++]=ch;    
        }
        break;
    default:
        break;    
    }
}

六、user.h

#ifndef USER_H
#define USER_H
#define ADMIN 1
#define MANAGER 2
#define WAITER 3
 
//用戶結(jié)構(gòu)體聲明
typedef struct user_t
{
    int ID;
    char name[20];
    char pwd[20];
    int role;  //數(shù)字表示角色 1是admin  2是 manager 3 是waiter
}USER_T;
 
//打印用戶信息     三種寫法 userArr[10]  userArr[ ]   userArr*
void printUserInfo(USER_T userArr[10]);
 
//用戶添加 用戶結(jié)構(gòu)體添加到用戶結(jié)構(gòu)體數(shù)組
void addUser(USER_T newuser , USER_T userArr[10]);//把新用戶添加到userArr[10]數(shù)組當(dāng)中
 
/*
函數(shù)作用:查看用戶名是否存在
函數(shù)參數(shù):用戶名 用戶結(jié)構(gòu)體數(shù)組
函數(shù)返回 返回下標(biāo)  不存在返回-1
*/
int userCheck(char name[],USER_T userArr[10]);
 
#endif

七、user.c

#include"user.h"
#include<stdio.h>
#include<string.h>//memcpy
 
extern count;  //外部引用 引入main.c中的count(全局變量)
 
//打印用戶信息
void printUserInfo(USER_T userArr[10])
{
    int i=0;
    printf("%d\n",count);
    for(i=0;i<count;i++)
    {
        printf("%d\t%s\t%s\t",userArr[i].ID,userArr[i].name,userArr[i].pwd);
        switch(userArr[i].role)
        {
        case ADMIN:
            printf("管理員\n");
            break;
        case MANAGER:
            printf("經(jīng)理\n");
            break;
        case WAITER:
            printf("服務(wù)員\n");
            break;
        default :
            break;            
        }    
    }    
}
 
//用戶添加 用戶結(jié)構(gòu)體添加到用戶結(jié)構(gòu)體數(shù)組
void addUser(USER_T newuser , USER_T userArr[10])
{
    //userArr[count++]=newuser;
    memcpy(&userArr[count++],&newuser,sizeof(USER_T));//地址內(nèi)存拷貝賦值 取地址 數(shù)組 變量名 長度
}
 
/*
函數(shù)作用:查看用戶名是否存在
函數(shù)參數(shù):用戶名 用戶結(jié)構(gòu)體數(shù)組
函數(shù)返回:返回下標(biāo)  不存在返回-1
*/
int userCheck(char name[],USER_T userArr[10])
{
    int i=0;
    for(i=0;i<count;i++)
    {
        if(strcmp(userArr[i].name,name)==0)
        {
            return i;    
        }    
    }
    return -1;
}

八、loginWin.h

#ifndef LOGINWIN_H
#define LOGINWIN_H
#include"user.h"
 
//登錄的初始化--登錄窗口的展示
int loginInit();
 
/*  
函數(shù)名:doLogin()
函數(shù)作用:執(zhí)行登錄操作
函數(shù)參數(shù):參數(shù)1:char name[]用戶名
          參數(shù)2:char pwd[7]密碼
函數(shù)返回:角色 1是admin  2是 manager 3 是waiter -1表示沒登錄成功
*/
int doLogin(char name[],char pwd[]);//登錄輸入用戶名密碼  函數(shù)返回:角色role是int 
 
/*  
函數(shù)名:Jude( )
函數(shù)作用:執(zhí)行登錄操作
函數(shù)參數(shù):參數(shù)1:char name[]用戶名
          參數(shù)2:char pwd[7]密碼
          參數(shù)3:USER_T userArr[] 用戶結(jié)構(gòu)體數(shù)組
函數(shù)返回:角色 1是admin  2是 manager 3 是waiter      -1表示沒登錄成功
*/
int Jude(char *name,char *pwd,USER_T userArr[]);
 
#endif

九、loginWin.c

#include"loginWin.h"
#include"Cwindow.h"
#include "Ctool.h"
#include"user.h"//userArr[10] 1是admin  2是 manager 3 是waiter
#include<stdio.h>//printf
#include<string.h>//strcmp
#include<windows.h> 
#include<stdlib.h>
 
extern USER_T userArr[10];//引入外部變量 結(jié)構(gòu)體數(shù)組定義時做全局變量
extern count;//count在main.c中是全局變量
 
int loginInit()
{
    char name[9]={0};//定義用戶名
    char pwd[7]={0};//定義密碼
    int role= -2;//初始化登錄返回的結(jié)果 不能0 1 2 -1(有含義)
 
/*  int startx;//窗口所放位置
    int starty;
    int width;//窗口對應(yīng)寬高
    int height;
    CONTROL_T ctrlArr[20];//存放控件結(jié)構(gòu)體數(shù)組  窗口中有多個控件
    int ctrlCount;   //記錄控件總個數(shù) 初始化為0 用于添加控件函數(shù)中 */
    WIN_T loginWin={5,5,24,16};//有兩個沒填 部分初始化 控件結(jié)構(gòu)體數(shù)組{0}  ctrlCount=0
    
/*    int maxLen;//最大長度
    int inputType;//輸入類型 0-數(shù)字 1-字母 2-數(shù)字+字母
    int ips;//顯示類型 0-密文 1-明文       
    int ctrlType;  //控件類型 1-label 2-edit 3-button  區(qū)分控件的使用
    char content[20];//控件中輸入的內(nèi)容      共填9個參數(shù)*/
    //標(biāo)簽文本控件
    CONTROL_T title={19,7,10,2,0,0,0,LABEL,"點(diǎn)菜系統(tǒng)"};
    CONTROL_T labName={10,9,10,3,0,0,0,LABEL,"請輸入賬號:"};
    CONTROL_T labPwd={10,12,10,3,0,0,0,LABEL,"請輸入密碼:"};
    //編輯器控件
    CONTROL_T editName={25,9,10,3,10,2,1,EDIT,""};
    CONTROL_T editPwd={25,12,10,3,8,0,0,EDIT,""};
    //按鈕控件
    CONTROL_T btnok={10,15,8,3,0,0,0,BUTTON,"登錄"};
    CONTROL_T btncancle={26,15,8,3,0,0,0,BUTTON,"返回"};
    
    //添加控件 void addControl(參數(shù)1:控件結(jié)構(gòu)體(控件) 參數(shù)2:控件數(shù)組 參數(shù)3:控件個數(shù));    
    //通過下標(biāo)將控件ctrl放到控件數(shù)組ctrlArr[20]當(dāng)中  在登錄窗口界面中添加控件
    //數(shù)組作為實(shí)參時直接寫數(shù)組名ctrlArr即可,數(shù)組名(起始地址)
    addControl(title,loginWin.ctrlArr,&loginWin.ctrlCount);
    addControl(labName,loginWin.ctrlArr,&loginWin.ctrlCount);
    addControl(labPwd,loginWin.ctrlArr,&loginWin.ctrlCount);
    addControl(editName,loginWin.ctrlArr,&loginWin.ctrlCount);
    addControl(editPwd,loginWin.ctrlArr,&loginWin.ctrlCount);
    addControl(btnok,loginWin.ctrlArr,&loginWin.ctrlCount);
    addControl(btncancle,loginWin.ctrlArr,&loginWin.ctrlCount);
    
    printf("控件個數(shù),%d\n",loginWin.ctrlCount);//ctrlCount控件個數(shù)
    
    //展示窗口和每一個控件 
    showWindow(loginWin);
    
    //窗口執(zhí)行函數(shù) 告知當(dāng)前回車的按鈕的下標(biāo)是多少
    winRun(&loginWin);    
 
    switch(loginWin.foucsIndex){
    case 5:
        role  =  Jude(loginWin.ctrlArr[3].content,loginWin.ctrlArr[4].content,userArr);
        gotoxy(27,17);
        if(role==-1)//失敗
        {
            printf("登錄失敗\n");
            // return 0;//0 -- 登錄界面     有bug登錄失敗第二次的才正常
            Sleep(2000);
            system("cls");
            loginInit();
        }
        else{
            printf("登錄成功\n");
            Sleep(1000);
            system("cls");
            
            switch(role){
            case ADMIN:
                    adminInit();
                    return 1;//ADMIN        
            case MANAGER:
                    managerInit();
                     return 2;//MANAGER            
            case WAITER:
                    waiterInit();
                      return 3;//WAITER        
            }          
        }
        break;
    case 6:
        printf("返回\n");
           return -1;
    default:
        break;        
    }
}
 
/*  
函數(shù)名:Jude( )
函數(shù)作用:執(zhí)行登錄操作
函數(shù)參數(shù):參數(shù)1:char name[]用戶名
          參數(shù)2:char pwd[7]密碼
          參數(shù)3:USER_T userArr[] 用戶結(jié)構(gòu)體數(shù)組
函數(shù)返回:角色 1是admin  2是 manager 3 是waiter      -1表示沒登錄成功
*/
int Jude(char *name,char *pwd,USER_T userArr[])
{
    int i=0;
    for(;i<count;i++) 
    {
        //對比用戶名和密碼都要相等  
        if(strcmp(name,userArr[i].name)==0&&strcmp(pwd,userArr[i].pwd)==0)
        {
            // 用戶名密碼相等表示登錄成功 登錄成功返回角色 
            return userArr[i].role;
        }    
    }
    //登錄失敗
    return -1;    
}

十、Admin.h

#ifndef ADMIN_H
#define ADMIN_H
 
//管理員窗口的初始化
int adminInit();
 
#endif

十一、Admin.c

#include"Admin.h"
#include"Cwindow.h"
#include "Ctool.h"
#include<stdio.h>
#include<stdlib.h>
 
int adminInit()
{    
/*  int startx;//窗口所放位置
    int starty;
    int width;//窗口對應(yīng)寬高
    int height;
    CONTROL_T ctrlArr[20];//存放控件結(jié)構(gòu)體數(shù)組  窗口中有多個控件
    int ctrlCount;   //記錄控件總個數(shù) 初始化為0 用于添加控件函數(shù)中 */
    WIN_T Admin={3,3,25,23};
    
/*    int maxLen;//最大長度
    int inputType;//輸入類型 0-數(shù)字 1-字母 2-數(shù)字+字母
    int ips;//顯示類型 0-密文 1-明文       
    int ctrlType;  //控件類型 1-label 2-edit 3-button  區(qū)分控件的使用
    char content[20];//控件中輸入的內(nèi)容      共填9個參數(shù)  */
    CONTROL_T titleguan={19,5,10,2,0,0,0,LABEL,"管理員界面"};
    
    CONTROL_T btntaizhuo={19,9,8,3,0,0,0,BUTTON,"臺桌管理"};
    CONTROL_T btncaipu={19,12,8,3,0,0,0,BUTTON,"菜譜管理"};
    CONTROL_T btnrenyuan={19,15,8,3,0,0,0,BUTTON,"人員管理"};
    CONTROL_T btnzhuxiao={19,18,8,3,0,0,0,BUTTON,"注銷"};
    CONTROL_T btntuichu={19,21,8,3,0,0,0,BUTTON,"退出"};
    
//添加控件 void addControl(參數(shù)1:控件結(jié)構(gòu)體(控件) 參數(shù)2:控件數(shù)組 參數(shù)3:控件個數(shù));    
    addControl(titleguan,Admin.ctrlArr,&Admin.ctrlCount);
    addControl(btntaizhuo,Admin.ctrlArr,&Admin.ctrlCount);
    addControl(btncaipu,Admin.ctrlArr,&Admin.ctrlCount);
    addControl(btnrenyuan,Admin.ctrlArr,&Admin.ctrlCount);
    addControl(btnzhuxiao,Admin.ctrlArr,&Admin.ctrlCount);
    addControl(btntuichu,Admin.ctrlArr,&Admin.ctrlCount);
    
    printf("控件個數(shù),%d\n",Admin.ctrlCount);
    showWindow(Admin);
 
    winRun(&Admin);
 
    switch(Admin.foucsIndex){
    case 3:
              system("cls");
            guanrenInit();
            //return 4;  bug 刷新第二次才可以
        break;
    case 5:
              system("cls");
            loginInit();
         break;
    default:
        break;        
    }        
}

十二、Manager.h

#ifndef MANAGER_H
#define MANAGER_H
 
//經(jīng)理窗口的初始化
int managerInit();
 
#endif

十三、Manager.c

#include"Manager.h"
#include"Cwindow.h"
#include "Ctool.h"
#include<stdio.h>
#include<stdlib.h>
 
int managerInit()
{
/*  int startx;//窗口所放位置
    int starty;
    int width;//窗口對應(yīng)寬高
    int height;
    CONTROL_T ctrlArr[20];//存放控件結(jié)構(gòu)體數(shù)組  窗口中有多個控件
    int ctrlCount;   //記錄控件總個數(shù) 初始化為0 用于添加控件函數(shù)中 */
    WIN_T Manager={3,3,25,23};//部分初始化 控件結(jié)構(gòu)體數(shù)組{0}  ctrlCount=0
    
/*  int maxLen;//最大長度
    int inputType;//輸入類型 0-數(shù)字 1-字母 2-數(shù)字+字母
    int ips;//顯示類型 0-密文 1-明文       
    int ctrlType;  //控件類型 1-label 2-edit 3-button  區(qū)分控件的使用
    char content[20];//控件中輸入的內(nèi)容      共填9個參數(shù)*/
    CONTROL_T titlejingli={19,5,10,2,0,0,0,LABEL,"經(jīng)理功能界面"};
    
    CONTROL_T btnyingshou={19,9,8,3,0,0,0,BUTTON,"營收匯總"};
    CONTROL_T btnzhuxiao={19,12,8,3,0,0,0,BUTTON,"注銷"};
    CONTROL_T btntuichu={19,15,8,3,0,0,0,BUTTON,"退出"};
 
    //添加控件 void addControl(參數(shù)1:控件結(jié)構(gòu)體(控件) 參數(shù)2:控件數(shù)組 參數(shù)3:控件個數(shù));    
    addControl(titlejingli,Manager.ctrlArr,&Manager.ctrlCount);    
    addControl(btnyingshou,Manager.ctrlArr,&Manager.ctrlCount);
    addControl(btnzhuxiao,Manager.ctrlArr,&Manager.ctrlCount);
    addControl(btntuichu,Manager.ctrlArr,&Manager.ctrlCount);
    
    printf("控件個數(shù),%d\n",Manager.ctrlCount);
    
    showWindow(Manager);
 
    winRun(&Manager);    
 
    switch(Manager.foucsIndex){
     case 3:
              system("cls");
            loginInit();
        break;
    default:
        break;    
    }
}

十四、Waiter.h

#ifndef WAITER_H
#define WAITER_H
 
//服務(wù)員窗口的初始化
int waiterInit();
 
#endif

十五、Waiter.c

#include"Waiter.h"
#include"Cwindow.h"
#include "Ctool.h"
#include<stdio.h>
 
int waiterInit()
{
/*  int startx;//窗口所放位置
    int starty;
    int width;//窗口對應(yīng)寬高
    int height;
    CONTROL_T ctrlArr[20];//存放控件結(jié)構(gòu)體數(shù)組  窗口中有多個控件
    int ctrlCount;   //記錄控件總個數(shù) 初始化為0 用于添加控件函數(shù)中 */
    WIN_T Waiter={3,3,25,25};//部分初始化 控件結(jié)構(gòu)體數(shù)組{0}  ctrlCount=0
 
/*    int maxLen;//最大長度
    int inputType;//輸入類型 0-數(shù)字 1-字母 2-數(shù)字+字母
    int ips;//顯示類型 0-密文 1-明文       
    int ctrlType;  //控件類型 1-label 2-edit 3-button  區(qū)分控件的使用
    char content[20];//控件中輸入的內(nèi)容      共填9個參數(shù)*/
    CONTROL_T titlefuwu={19,5,10,2,0,0,0,LABEL,"服務(wù)員功能界面"};
    
    CONTROL_T btnkaizhuo={19,9,10,3,0,0,0,BUTTON,"開桌"};
    CONTROL_T btndiancai={19,12,10,3,0,0,0,BUTTON,"點(diǎn)菜"};
    CONTROL_T btnyingyee={19,15,10,3,0,0,0,BUTTON,"營業(yè)額查詢"};
    CONTROL_T btnyi={19,18,10,3,0,0,0,BUTTON,"已買/未買單查詢"};
    CONTROL_T btnzhuxiao={19,21,10,3,0,0,0,BUTTON,"注銷"};
    CONTROL_T btntuichu={19,24,10,3,0,0,0,BUTTON,"退出"};
 
//添加控件 void addControl(參數(shù)1:控件結(jié)構(gòu)體(控件) 參數(shù)2:控件數(shù)組 參數(shù)3:控件個數(shù));    
    addControl(titlefuwu,Waiter.ctrlArr,&Waiter.ctrlCount);
    addControl(btnkaizhuo,Waiter.ctrlArr,&Waiter.ctrlCount);
    addControl(btndiancai,Waiter.ctrlArr,&Waiter.ctrlCount);
    addControl(btnyingyee,Waiter.ctrlArr,&Waiter.ctrlCount);
    addControl(btnyi,Waiter.ctrlArr,&Waiter.ctrlCount);
    addControl(btnzhuxiao,Waiter.ctrlArr,&Waiter.ctrlCount);
    addControl(btntuichu,Waiter.ctrlArr,&Waiter.ctrlCount);
    
    printf("控件個數(shù),%d\n",Waiter.ctrlCount);
    showWindow(Waiter);
    
    winRun(&Waiter);
 
    switch(Waiter.foucsIndex){
    case 6:
              system("cls");
            loginInit();
        break;
    default:
        break;        
    }
}

讀到這里,這篇“C語言如何實(shí)現(xiàn)點(diǎn)菜系統(tǒng)”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點(diǎn)還需要大家自己動手實(shí)踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI