服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言实现点菜系统

C语言实现点菜系统

2022-12-25 16:10想吃读研的苦 C/C++

这篇文章主要为大家详细介绍了C语言实现点菜系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言实现点菜系统的具体代码,供大家参考,具体内容如下

一、main.c

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#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"//经理界面使用
#include"Waiter.h"//服务员界面使用
#include"guanRen.h"//人员管理窗口使用
#include"xinZeng.h"//新增用户窗口使用
#include"daYin.h"//打印查询窗口使用
#include"xiuGai.h"//修改密码窗口使用
 
int count =3;  //初始化两个用户  全局变量
   //初始化用户结构体数组  做全局变量 其他.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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#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);//形参  光标定位
 
/*
函数功能:字符串输入控制
函数参数:
int maxLen 允许输入最大长度
int inputType 允许输入的字符类型  0:数字 1:字母 2:字母+数字
int ips 数据显示格式  0:密文  1:明文
char str[] 存储输入字符
函数返回值:无
char str[]    char str[20]    char*str
*/
void glb_string(int maxLen,int inputType,int ips,char str[]); 
 
/*
函数名:int getkey()
函数功能:获取用户输入的任意键盘值
函数参数:无
函数返回:ascii  
*/
int getkey();
 
//打印用户信息表格
void daYinBiao(int x,int y,int lie,int hang);
 
#endif

三、Ctool.c

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
#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};
    // 光标的起始位(第1列,第3行) 0是第1列 2是第3行
    hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hOut, pos);
    //printf("定位光标位置搜索(%d,%d)\n",pos.X,pos.Y);
}
 
void paintWindow(int startX,int startY,int width,int height)  
{
    int i=0;
    //打印顶部   
    //光标定位 找规律 ┗  ┛ ┏ ┓ ┃ ━
    //顶部 y不变 x 在变 (x-x+w)
    gotoxy(startX,startY);
    printf("┏");
    for(i=0;i<width-2;i++)  //控制循环次数width-2次
    {        
        printf("━ ");
    }
    printf("┓");
 
    //左边 x不变 y在变 (y到y+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)//换行结束输入
           {
               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;
            }   
       }        
}
 
/*
函数名:int getkey()
函数功能:获取用户输入的任意键盘值
函数参数:无
函数返回: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 --表格列数-- 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)   //数据行
            {
                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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#ifndef CWINDOW_H
#define CWINDOW_H
//描述窗口相关的
#define LABEL 1 //控件使用宏定义  标签文本
#define EDIT 2  //                编辑框
#define BUTTON 3//                按钮   
 
//标签结构体的声明
typedef struct label_t
{
    int startx; //标签文本所放位置
    int starty;
    int width;//标签文本自身宽高
    int height;
    char content[20];//标签文本中输入对应的内容 字符数组
};
 
//编辑框结构体的声明
typedef struct edit_t
{
    int startx;//编辑框所放位置
    int starty;
    int width;//编辑框自身宽高
    int height;
    char content[20];//编辑框中输入的内容  字符数组的使用
    int inputType;//输入类型 0-数字 1-字母 2-数字+字母
    int ips;//显示类型 0-密文 1-明文
    int maxLen;  //最大长度    
};
 
//按钮结构体的声明
typedef struct button_t
{
    int startx;//按钮所放位置
    int starty;
    int width;//按钮自身宽高
    int height;
    char content[20];//按钮中输入的内容    
};
 
//以编辑框为标准统一管控(编辑框要求最多) 
//控件结构体的声明--编辑框 标签 按钮
typedef struct control_t
{
    int startx;//控件所放位置
    int starty;
    int width;//控件自身宽高
    int height;
    int maxLen;//最大长度
    int inputType;//输入类型 0-数字 1-字母 2-数字+字母
    int ips;//显示类型 0-密文 1-明文
    int ctrlType;  //控件类型 1-label 2-edit 3-button  区分控件的使用
    char content[20];//控件中输入的内容    
}CONTROL_T;//typedef重命名
 
//窗口结构体的声明 控件是要放入窗口当中的
typedef struct win_t
{
    int startx;//窗口所放位置
    int starty;
    int width;//窗口对应宽高
    int height;
    CONTROL_T ctrlArr[20];//存放控件结构体数组  窗口中有多个控件
    int ctrlCount;   //记录控件总个数 初始化为0 用于添加控件函数中
    int foucsIndex;  //winRun在按钮回车时记录当前控件的下标
}WIN_T;
 
//添加控件 void addControl(参数1:控件结构体 参数2:控件结构体数组 参数3:控件个数);
//把控件放进控件结构体数组中 ctrlCount控件个数 预留出下一个控件结构体下标
//int addControl(CONTROL_T ctrl,CONTROL_T ctrlArr[20] , int ctrlCount);//添加控件到对应窗口中
void addControl(CONTROL_T ctrl,CONTROL_T ctrlArr[20] , int *ctrlCount);
 
//窗口显示函数可以绘制整个窗口以及每一个控件 而paintWindow只能画大框 不能显示里面的内容    
void showWindow(WIN_T win);
 
/*
函数名称:void winRun(WIN_T *win);
函数作用:窗口运行函数 光标定位 找到edit(输入) button控件(回车,做对应操作)
函数参数:参数 WIN_T *win  窗口结构体指针
函数返回:无
*/
void winRun(WIN_T *win);
 
/*
函数名称:void editKeyListen()
函数作用:编辑框输入控制函数
函数参数:参数1:CONTROL_T ctrl 监听的控件
          参数2:char ch 输入的字符
          参数3:char content[] 存储的字符串
函数返回:无
*/
void editKeyListen(CONTROL_T ctrl,char ch,char content[]);
 
#endif

五、Cwindow.c

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#include "Cwindow.h"
#include "Ctool.h"
#include<conio.h>// getch()
#include<string.h>//strlen
 
//添加控件 void addControl(参数1:控件结构体 参数2:控件结构体数组 参数3:控件个数);
//把控件放进控件结构体数组中 ctrlCount控件个数 预留出下一个控件结构体下标
void addControl(CONTROL_T ctrl,CONTROL_T ctrlArr[20] , int *ctrlCount)
{
    ctrlArr[(*ctrlCount)++]=ctrl;//按地址传递
}
 
//窗口显示函数 绘制整个窗口以及每一个控件
void showWindow(WIN_T win)
{
    int i=0;
    //首先显示大框
    paintWindow(win.startx,win.starty,win.width,win.height);//结构体变量名.属性
    //显示每一个控件
    for(i=0;i<win.ctrlCount;i++)//遍历ctrlArr[]数组 长度ctrlCount一个一个获取 控件在窗口里
    {
        //类型 label  edit   button
        //如果是label    直接显示内容即可
        //如果是edit     画框(paintWindow) 显示内容
        //如果是button     画框 显示内容
        if(win.ctrlArr[i].ctrlType==LABEL)
        {
            gotoxy(win.ctrlArr[i].startx,win.ctrlArr[i].starty);//光标定位放入内容
            puts(win.ctrlArr[i].content);
        }
        else
        {
            //画编辑框 按钮框(小框)  避免小框和放入的内容镶嵌
            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);//光标定位放入内容
            puts(win.ctrlArr[i].content); 
        }    
    }
    gotoxy(0,29);//优化显示
}
 
/*
函数名称:void winRun(WIN_T *win);
函数作用:窗口运行函数 光标定位 找到edit(输入) button控件(回车,做对应操作)
函数参数:参数 WIN_T *win  窗口结构体指针
函数返回:无
*/
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++;//按键数组下标越界
            if(i==win->ctrlCount)
            {
                i=0;//为了避免下标越界 从头开始对控件结构体数组找编辑框 按钮
            }
            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);//光标目标定位
                    break;//停止
                }
            }
            break;
        case KEY_UP:
            i--;
            if(i==-1)  //从后往前找 数组起始0 i--为-1 数组下标由大到小 (控件数组下标0位置)
            {
                i=win->ctrlCount-1;  //控件个数(控件结构体数组下标最大)-1 (控件数组下标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);//光标目标定位
                    break;//停止
                }
                if(i==0)  //第一个 若第一个不是编辑框 按钮
                {
                    i=win->ctrlCount;  //就从最后一个往前查找 for循环中有i--,不用再-1            
                }        
            }
            break;
        case KEY_ENTER:
            if(win->ctrlArr[i].ctrlType==BUTTON)
            {
                win->foucsIndex=i;
                return ;//获取winRun中输入的编辑框的值
            }
            break;
        default:   //其他字符(不是按键)并且当前控件是编辑框
            if(win->ctrlArr[i].ctrlType==EDIT)
            {
                editKeyListen(win->ctrlArr[i],key,win->ctrlArr[i].content);        
            }
            break;
        }
    }
}
 
/*
函数名称:void editKeyListen()
函数作用:编辑框输入控制函数
函数参数:参数1:CONTROL_T ctrl 监听的控件
          参数2:char ch 输入的字符
          参数3:char content[] 存储的字符串
函数返回:无
*/
void editKeyListen(CONTROL_T ctrl,char ch,char content[])
{
    int i=strlen(content);//从字符串原来的长度开始存储
    switch(ctrl.inputType)
    {
    case 0: //数字
        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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#ifndef USER_H
#define USER_H
#define ADMIN 1
#define MANAGER 2
#define WAITER 3
 
//用户结构体声明
typedef struct user_t
{
    int ID;
    char name[20];
    char pwd[20];
    int role;  //数字表示角色 1是admin  2是 manager 3 是waiter
}USER_T;
 
//打印用户信息     三种写法 userArr[10]  userArr[ ]   userArr*
void printUserInfo(USER_T userArr[10]);
 
//用户添加 用户结构体添加到用户结构体数组
void addUser(USER_T newuser , USER_T userArr[10]);//把新用户添加到userArr[10]数组当中
 
/*
函数作用:查看用户名是否存在
函数参数:用户名 用户结构体数组
函数返回 返回下标  不存在返回-1
*/
int userCheck(char name[],USER_T userArr[10]);
 
#endif

七、user.c

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#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("经理\n");
            break;
        case WAITER:
            printf("服务员\n");
            break;
        default :
            break;            
        }    
    }    
}
 
//用户添加 用户结构体添加到用户结构体数组
void addUser(USER_T newuser , USER_T userArr[10])
{
    //userArr[count++]=newuser;
    memcpy(&userArr[count++],&newuser,sizeof(USER_T));//地址内存拷贝赋值 取地址 数组 变量名 长度
}
 
/*
函数作用:查看用户名是否存在
函数参数:用户名 用户结构体数组
函数返回:返回下标  不存在返回-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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#ifndef LOGINWIN_H
#define LOGINWIN_H
#include"user.h"
 
//登录的初始化--登录窗口的展示
int loginInit();
 
/*  
函数名:doLogin()
函数作用:执行登录操作
函数参数:参数1:char name[]用户名
          参数2:char pwd[7]密码
函数返回:角色 1是admin  2是 manager 3 是waiter -1表示没登录成功
*/
int doLogin(char name[],char pwd[]);//登录输入用户名密码  函数返回:角色role是int 
 
/*  
函数名:Jude( )
函数作用:执行登录操作
函数参数:参数1:char name[]用户名
          参数2:char pwd[7]密码
          参数3:USER_T userArr[] 用户结构体数组
函数返回:角色 1是admin  2是 manager 3 是waiter      -1表示没登录成功
*/
int Jude(char *name,char *pwd,USER_T userArr[]);
 
#endif

九、loginWin.c

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#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];//引入外部变量 结构体数组定义时做全局变量
extern count;//count在main.c中是全局变量
 
int loginInit()
{
    char name[9]={0};//定义用户名
    char pwd[7]={0};//定义密码
    int role= -2;//初始化登录返回的结果 不能0 1 2 -1(有含义)
 
/*  int startx;//窗口所放位置
    int starty;
    int width;//窗口对应宽高
    int height;
    CONTROL_T ctrlArr[20];//存放控件结构体数组  窗口中有多个控件
    int ctrlCount;   //记录控件总个数 初始化为0 用于添加控件函数中 */
    WIN_T loginWin={5,5,24,16};//有两个没填 部分初始化 控件结构体数组{0}  ctrlCount=0
    
/*    int maxLen;//最大长度
    int inputType;//输入类型 0-数字 1-字母 2-数字+字母
    int ips;//显示类型 0-密文 1-明文       
    int ctrlType;  //控件类型 1-label 2-edit 3-button  区分控件的使用
    char content[20];//控件中输入的内容      共填9个参数*/
    //标签文本控件
    CONTROL_T id="codetool">

十、Admin.h

?
1
2
3
4
5
6
7
#ifndef ADMIN_H
#define ADMIN_H
 
//管理员窗口的初始化
int adminInit();
 
#endif

十一、Admin.c

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include"Admin.h"
#include"Cwindow.h"
#include "Ctool.h"
#include<stdio.h>
#include<stdlib.h>
 
int adminInit()
{    
/*  int startx;//窗口所放位置
    int starty;
    int width;//窗口对应宽高
    int height;
    CONTROL_T ctrlArr[20];//存放控件结构体数组  窗口中有多个控件
    int ctrlCount;   //记录控件总个数 初始化为0 用于添加控件函数中 */
    WIN_T Admin={3,3,25,23};
    
/*    int maxLen;//最大长度
    int inputType;//输入类型 0-数字 1-字母 2-数字+字母
    int ips;//显示类型 0-密文 1-明文       
    int ctrlType;  //控件类型 1-label 2-edit 3-button  区分控件的使用
    char content[20];//控件中输入的内容      共填9个参数  */
    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(参数1:控件结构体(控件) 参数2:控件数组 参数3:控件个数);    
    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("控件个数,%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

?
1
2
3
4
5
6
7
#ifndef MANAGER_H
#define MANAGER_H
 
//经理窗口的初始化
int managerInit();
 
#endif

十三、Manager.c

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include"Manager.h"
#include"Cwindow.h"
#include "Ctool.h"
#include<stdio.h>
#include<stdlib.h>
 
int managerInit()
{
/*  int startx;//窗口所放位置
    int starty;
    int width;//窗口对应宽高
    int height;
    CONTROL_T ctrlArr[20];//存放控件结构体数组  窗口中有多个控件
    int ctrlCount;   //记录控件总个数 初始化为0 用于添加控件函数中 */
    WIN_T Manager={3,3,25,23};//部分初始化 控件结构体数组{0}  ctrlCount=0
    
/*  int maxLen;//最大长度
    int inputType;//输入类型 0-数字 1-字母 2-数字+字母
    int ips;//显示类型 0-密文 1-明文       
    int ctrlType;  //控件类型 1-label 2-edit 3-button  区分控件的使用
    char content[20];//控件中输入的内容      共填9个参数*/
    CONTROL_T titlejingli={19,5,10,2,0,0,0,LABEL,"经理功能界面"};
    
    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(参数1:控件结构体(控件) 参数2:控件数组 参数3:控件个数);    
    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("控件个数,%d\n",Manager.ctrlCount);
    
    showWindow(Manager);
 
    winRun(&Manager);    
 
    switch(Manager.foucsIndex){
     case 3:
              system("cls");
            loginInit();
        break;
    default:
        break;    
    }
}

十四、Waiter.h

?
1
2
3
4
5
6
7
#ifndef WAITER_H
#define WAITER_H
 
//服务员窗口的初始化
int waiterInit();
 
#endif

十五、Waiter.c

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include"Waiter.h"
#include"Cwindow.h"
#include "Ctool.h"
#include<stdio.h>
 
int waiterInit()
{
/*  int startx;//窗口所放位置
    int starty;
    int width;//窗口对应宽高
    int height;
    CONTROL_T ctrlArr[20];//存放控件结构体数组  窗口中有多个控件
    int ctrlCount;   //记录控件总个数 初始化为0 用于添加控件函数中 */
    WIN_T Waiter={3,3,25,25};//部分初始化 控件结构体数组{0}  ctrlCount=0
 
/*    int maxLen;//最大长度
    int inputType;//输入类型 0-数字 1-字母 2-数字+字母
    int ips;//显示类型 0-密文 1-明文       
    int ctrlType;  //控件类型 1-label 2-edit 3-button  区分控件的使用
    char content[20];//控件中输入的内容      共填9个参数*/
    CONTROL_T titlefuwu={19,5,10,2,0,0,0,LABEL,"服务员功能界面"};
    
    CONTROL_T btnkaizhuo={19,9,10,3,0,0,0,BUTTON,"开桌"};
    CONTROL_T btndiancai={19,12,10,3,0,0,0,BUTTON,"点菜"};
    CONTROL_T btnyingyee={19,15,10,3,0,0,0,BUTTON,"营业额查询"};
    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(参数1:控件结构体(控件) 参数2:控件数组 参数3:控件个数);    
    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("控件个数,%d\n",Waiter.ctrlCount);
    showWindow(Waiter);
    
    winRun(&Waiter);
 
    switch(Waiter.foucsIndex){
    case 6:
              system("cls");
            loginInit();
        break;
    default:
        break;        
    }
}

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

原文链接:https://blog.csdn.net/m0_56051805/article/details/124261901

延伸 · 阅读

精彩推荐
  • C/C++C语言实现静态链表的方法

    C语言实现静态链表的方法

    分享一段代码,一个静态链表的C语言实现,其中包含着一种简单的内存管理策略:固定大小的链式管理。...

    C语言教程网4392020-11-18
  • C/C++C++ 再识类和对象

    C++ 再识类和对象

    类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例(...

    蓝乐11782022-02-12
  • C/C++北邮计算机考研复试题的C语言解答精选

    北邮计算机考研复试题的C语言解答精选

    这篇文章主要介绍了北邮计算机考研复试题目的C语言解答精选,选自2012年的一些基础的上机题目,需要的朋友可以参考下...

    低调小一11762021-03-06
  • C/C++使用C语言实现学生成绩管理系统

    使用C语言实现学生成绩管理系统

    这篇文章主要介绍了使用C语言实现学生成绩管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    机智蛋蛋12562021-12-31
  • C/C++解析C++无锁队列的实现代码

    解析C++无锁队列的实现代码

    本篇文章是对C++无锁队列的实现进行了详细的分析介绍,需要的朋友参考下...

    C++教程网4962020-12-01
  • C/C++c++ 队列相关知识总结

    c++ 队列相关知识总结

    这篇文章主要介绍了c++ 队列相关知识总结,帮助大家更好的理解和学习使用c++,感兴趣的朋友可以了解下...

    hedzr10282021-10-26
  • C/C++C++嵌入式内存管理详情

    C++嵌入式内存管理详情

    这篇文章主要介绍了C++嵌入式内存管理,是对上一篇内存的一个补充,主要讲解Linux中的内存;这部分对于一些端侧部署的伙伴来说比较重要,推荐针对不...

    一个热爱学习的深度渣渣7002022-03-10
  • C/C++C++封装常用正则表达式的用法

    C++封装常用正则表达式的用法

    这篇文章主要介绍了使用C++封装常用正则表达式的用法,方便以后直接使用,最后还给出了测试代码,大家可运行测试使用...

    C++教程网4732021-01-16