当前位置:   article > 正文

C语言项目实战 人员管理系统(框架搭建)_建工程的c语言管理系统

建工程的c语言管理系统

目录

效果展示

源码分享 

1.main.c  [程序主入口]

2.Ctool.h  [工具类 头文件]

3.Ctool.c  [工具类 源文件]

4.Cwindow.h  [窗体类 头文件]

5.Cwindow.c  [窗体类 源文件]

6.user.h  [用户结构体及相关功能 头文件]

7.user.c  [用户结构体及相关功能 源文件]

8.loginWin.h  [登录窗及功能实现 头文件]

9.loginWin.c  [登录窗及功能实现 源文件]

10.Admin.h  [管理员窗 头文件]

11.Admin.c  [管理员窗 源文件]

12.Manager.h  [经理窗 头文件]

13.Manager.c  [经理窗 源文件]

14.Waiter.h  [服务员窗 头文件]

15.Waiter.c  [服务员窗 源文件]


效果展示

根据初始化用户数据,实现登录

如 编号1001 的用户 其用户名为admin  密码为123456  角色为1 [1代表管理员角色]

输入管理员的账号密码,登录成功后,即可进入到管理员角色界面

管理员角色【可以进行人员管理】,包括有:新增用户,查询用户,修改用户

本次点菜系统-人员管理

分两篇文章,源码分享,欢迎学习!

另外一篇如下:

C语言做一个点菜系统(人员管理2)

源码分享 

1.main.c  [程序主入口]

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include<windows.h>//Sleep
  5. #include"user.h"
  6. #include"loginWin.h"//登录界面使用
  7. #include"Admin.h"//管理员界面使用
  8. #include"Manager.h"//经理界面使用
  9. #include"Waiter.h"//服务员界面使用
  10. #include"guanRen.h"//人员管理窗口使用
  11. #include"xinZeng.h"//新增用户窗口使用
  12. #include"daYin.h"//打印查询窗口使用
  13. #include"xiuGai.h"//修改密码窗口使用
  14. int count =3; //初始化两个用户 全局变量
  15. //初始化用户结构体数组 做全局变量 其他.c中extern外部引用
  16. USER_T userArr[10]={
  17. {1001,"admin","123456",1},//0 ADMIN
  18. {1002,"manager","123456",2},//1 MANAGER
  19. {1003,"waiter","123456",3}//2 WAITER
  20. };
  21. void proRun()
  22. {
  23. int(*win_funs[30])()={loginInit,adminInit,managerInit,waiterInit,guanrenInit,xinZengInit
  24. ,daYinInit,xiuGaiInit};
  25. int winIndex = 0; //0-loginInit 1-adminInit 2-managerInit 3-waiterInit
  26. while(1)
  27. {
  28. Sleep(1500);
  29. system("cls");
  30. winIndex=win_funs[winIndex]();
  31. }
  32. }
  33. int main()
  34. {
  35. proRun();
  36. }

2.Ctool.h  [工具类 头文件]

  1. #ifndef CTOOL_H
  2. #define CTOOL_H
  3. #define KEY_UP 72
  4. #define KEY_DOWN 80
  5. #define KEY_LEFT 75
  6. #define KEY_RIGHT 77
  7. #define KEY_ESC 27
  8. #define KEY_ENTER 13
  9. void paintWindow(int startX,int startY,int width,int height);//打印窗口
  10. void gotoxy(int x,int y);//形参 光标定位
  11. /*
  12. 函数功能:字符串输入控制
  13. 函数参数:
  14. int maxLen 允许输入最大长度
  15. int inputType 允许输入的字符类型 0:数字 1:字母 2:字母+数字
  16. int ips 数据显示格式 0:密文 1:明文
  17. char str[] 存储输入字符
  18. 函数返回值:无
  19. char str[] char str[20] char*str
  20. */
  21. void glb_string(int maxLen,int inputType,int ips,char str[]);
  22. /*
  23. 函数名:int getkey()
  24. 函数功能:获取用户输入的任意键盘值
  25. 函数参数:无
  26. 函数返回:ascii
  27. */
  28. int getkey();
  29. //打印用户信息表格
  30. void daYinBiao(int x,int y,int lie,int hang);
  31. #endif

3.Ctool.c  [工具类 源文件]

  1. #include "Ctool.h"
  2. #include <windows.h>//gotoxy
  3. #include<stdio.h>
  4. #include<conio.h>
  5. void gotoxy(int x,int y)//形参
  6. {
  7. HANDLE hOut;
  8. COORD pos= {x,y};
  9. // 光标的起始位(第1列,第3行) 0是第1列 2是第3行
  10. hOut = GetStdHandle(STD_OUTPUT_HANDLE);
  11. SetConsoleCursorPosition(hOut, pos);
  12. //printf("定位光标位置搜索(%d,%d)\n",pos.X,pos.Y);
  13. }
  14. void paintWindow(int startX,int startY,int width,int height)
  15. {
  16. int i=0;
  17. //打印顶部
  18. //光标定位 找规律 ┗ ┛ ┏ ┓ ┃ ━
  19. //顶部 y不变 x 在变 (x-x+w)
  20. gotoxy(startX,startY);
  21. printf("┏");
  22. for(i=0;i<width-2;i++) //控制循环次数width-2次
  23. {
  24. printf("━ ");
  25. }
  26. printf("┓");
  27. //左边 x不变 y在变 (y到y+height)
  28. for(i=1;i<=height-1;i++)
  29. {
  30. gotoxy(startX,startY+i);
  31. printf("┃");
  32. }
  33. //右边 x不变 =startx+width-1 y在变 y 到 y+height
  34. for(i=1;i<=height-1;i++)
  35. {
  36. gotoxy(startX+width*2-3,startY+i);
  37. printf("┃");
  38. }
  39. //底部 x在变化 y不变 (x到x+width) ━
  40. gotoxy(startX,startY+height-1);
  41. printf("┗");
  42. for(i=0;i<width-2;i++)
  43. {
  44. printf("━ ");
  45. }
  46. printf("┛");
  47. gotoxy(startX,startX+height);
  48. }
  49. void glb_string(int maxLen,int inputType,int ips,char str[])
  50. {
  51. char ch=0;
  52. int i=0;
  53. while(1)
  54. {
  55. ch=getch();
  56. if(ch=='\r'&&i>0)//换行结束输入
  57. {
  58. break;
  59. }
  60. switch(inputType)
  61. {
  62. case 0:
  63. if(ch>='0'&&ch<='9'&&i<maxLen)
  64. {
  65. if(ips==0)
  66. {
  67. putch('*');
  68. }
  69. else{
  70. putch(ch);
  71. }
  72. str[i++]=ch;
  73. }
  74. break;
  75. case 1:
  76. if(i<maxLen&&(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
  77. {
  78. if(ips==0)
  79. {
  80. putch('*');
  81. }
  82. else{
  83. putch(ch);
  84. }
  85. str[i++]=ch;
  86. }
  87. break;
  88. case 2:
  89. if(i<maxLen&&(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')||(ch>='0'&&ch<='9'))
  90. {
  91. if(ips==0)
  92. {
  93. putch('*');
  94. }
  95. else{
  96. putch(ch);
  97. }
  98. str[i++]=ch;
  99. }
  100. break;
  101. default:
  102. break;
  103. }
  104. }
  105. }
  106. /*
  107. 函数名:int getkey()
  108. 函数功能:获取用户输入的任意键盘值
  109. 函数参数:无
  110. 函数返回:ascii
  111. */
  112. int getkey()
  113. {
  114. char key=0;
  115. key=getch();
  116. if(key==-32)//方向按键 第一个值都是32
  117. {
  118. key=getch();
  119. switch(key){
  120. case 72:
  121. return KEY_UP;
  122. case 80:
  123. return KEY_DOWN;
  124. case 75:
  125. return KEY_LEFT;
  126. case 77:
  127. return KEY_RIGHT;
  128. }
  129. }
  130. else if(key==13)
  131. {
  132. return KEY_ENTER;
  133. }
  134. else if(key==27)
  135. {
  136. return KEY_ESC;
  137. }
  138. return key;
  139. }
  140. void daYinBiao(int x,int y,int lie,int hang)
  141. {
  142. //lie --表格列数-- 3--7
  143. int i,j,m,z=0;
  144. int count=0;
  145. gotoxy(x,y);
  146. for(i=0;i<2*hang+1;i++)
  147. {
  148. if(i==0)//第一行
  149. {
  150. printf("┌ "); //第一列
  151. for(j=0;j<lie-1;j++)//2 - n-1列---┬
  152. {
  153. for(m=0;m<7;m++)
  154. {
  155. printf("━ ");
  156. }
  157. printf("┬ ");//每个单元格之间的分割
  158. }
  159. for(m=0;m<7;m++)
  160. {
  161. printf("━ ");
  162. }
  163. printf("┐");
  164. }
  165. if(i>0&&i<2*hang)//1-6行
  166. {
  167. if(i%2==1) //数据行
  168. {
  169. gotoxy(x,i+y);
  170. printf("┃");
  171. for(j=0;j<lie;j++) //0-3
  172. {
  173. for(m=0;m<7;m++)
  174. {
  175. printf(" ");
  176. }
  177. printf(" ┃");
  178. }
  179. }
  180. else //单元格边界
  181. {
  182. gotoxy(x,i+y);
  183. printf("├ ");
  184. for(j=0;j<lie-1;j++)
  185. {
  186. for(m=0;m<7;m++)
  187. {
  188. printf("━ ");
  189. }
  190. printf("┼ ");
  191. }
  192. for(m=0;m<7;m++)
  193. {
  194. printf("━ ");
  195. }
  196. printf("┤");
  197. }
  198. }
  199. //最后一行 // ┌ ━ ┬ ┐┃ ┼ ├ ┤ └ ┘ ┴
  200. if(i==2*hang)
  201. {
  202. gotoxy(x,y+2*hang);
  203. printf("└ ");
  204. for(j=0;j<lie-1;j++)//2 - n-1列---┴
  205. {
  206. for(m=0;m<7;m++)
  207. {
  208. printf("━ ");
  209. }
  210. printf("┴ ");//每个单元格之间的分割
  211. }
  212. for(m=0;m<7;m++)
  213. {
  214. printf("━ ");
  215. }
  216. printf("┘");
  217. }
  218. }
  219. }

4.Cwindow.h  [窗体类 头文件]

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

5.Cwindow.c  [窗体类 源文件]

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

6.user.h  [用户结构体及相关功能 头文件]

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

7.user.c  [用户结构体及相关功能 源文件]

  1. #include"user.h"
  2. #include<stdio.h>
  3. #include<string.h>//memcpy
  4. extern count; //外部引用 引入main.c中的count(全局变量)
  5. //打印用户信息
  6. void printUserInfo(USER_T userArr[10])
  7. {
  8. int i=0;
  9. printf("%d\n",count);
  10. for(i=0;i<count;i++)
  11. {
  12. printf("%d\t%s\t%s\t",userArr[i].ID,userArr[i].name,userArr[i].pwd);
  13. switch(userArr[i].role)
  14. {
  15. case ADMIN:
  16. printf("管理员\n");
  17. break;
  18. case MANAGER:
  19. printf("经理\n");
  20. break;
  21. case WAITER:
  22. printf("服务员\n");
  23. break;
  24. default :
  25. break;
  26. }
  27. }
  28. }
  29. //用户添加 用户结构体添加到用户结构体数组
  30. void addUser(USER_T newuser , USER_T userArr[10])
  31. {
  32. //userArr[count++]=newuser;
  33. memcpy(&userArr[count++],&newuser,sizeof(USER_T));//地址内存拷贝赋值 取地址 数组 变量名 长度
  34. }
  35. /*
  36. 函数作用:查看用户名是否存在
  37. 函数参数:用户名 用户结构体数组
  38. 函数返回:返回下标 不存在返回-1
  39. */
  40. int userCheck(char name[],USER_T userArr[10])
  41. {
  42. int i=0;
  43. for(i=0;i<count;i++)
  44. {
  45. if(strcmp(userArr[i].name,name)==0)
  46. {
  47. return i;
  48. }
  49. }
  50. return -1;
  51. }

8.loginWin.h  [登录窗及功能实现 头文件]

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

9.loginWin.c  [登录窗及功能实现 源文件]

  1. #include"loginWin.h"
  2. #include"Cwindow.h"
  3. #include "Ctool.h"
  4. #include"user.h"//userArr[10] 1是admin 2是 manager 3 是waiter
  5. #include<stdio.h>//printf
  6. #include<string.h>//strcmp
  7. #include<windows.h>
  8. #include<stdlib.h>
  9. extern USER_T userArr[10];//引入外部变量 结构体数组定义时做全局变量
  10. extern count;//count在main.c中是全局变量
  11. int loginInit()
  12. {
  13. char name[9]={0};//定义用户名
  14. char pwd[7]={0};//定义密码
  15. int role= -2;//初始化登录返回的结果 不能0 1 2 -1(有含义)
  16. /* int startx;//窗口所放位置
  17. int starty;
  18. int width;//窗口对应宽高
  19. int height;
  20. CONTROL_T ctrlArr[20];//存放控件结构体数组 窗口中有多个控件
  21. int ctrlCount; //记录控件总个数 初始化为0 用于添加控件函数中 */
  22. WIN_T loginWin={5,5,24,16};//有两个没填 部分初始化 控件结构体数组{0} ctrlCount=0
  23. /* int maxLen;//最大长度
  24. int inputType;//输入类型 0-数字 1-字母 2-数字+字母
  25. int ips;//显示类型 0-密文 1-明文
  26. int ctrlType; //控件类型 1-label 2-edit 3-button 区分控件的使用
  27. char content[20];//控件中输入的内容 共填9个参数*/
  28. //标签文本控件
  29. CONTROL_T title={19,7,10,2,0,0,0,LABEL,"点菜系统"};
  30. CONTROL_T labName={10,9,10,3,0,0,0,LABEL,"请输入账号:"};
  31. CONTROL_T labPwd={10,12,10,3,0,0,0,LABEL,"请输入密码:"};
  32. //编辑器控件
  33. CONTROL_T editName={25,9,10,3,10,2,1,EDIT,""};
  34. CONTROL_T editPwd={25,12,10,3,8,0,0,EDIT,""};
  35. //按钮控件
  36. CONTROL_T btnok={10,15,8,3,0,0,0,BUTTON,"登录"};
  37. CONTROL_T btncancle={26,15,8,3,0,0,0,BUTTON,"返回"};
  38. //添加控件 void addControl(参数1:控件结构体(控件) 参数2:控件数组 参数3:控件个数);
  39. //通过下标将控件ctrl放到控件数组ctrlArr[20]当中 在登录窗口界面中添加控件
  40. //数组作为实参时直接写数组名ctrlArr即可,数组名(起始地址)
  41. addControl(title,loginWin.ctrlArr,&loginWin.ctrlCount);
  42. addControl(labName,loginWin.ctrlArr,&loginWin.ctrlCount);
  43. addControl(labPwd,loginWin.ctrlArr,&loginWin.ctrlCount);
  44. addControl(editName,loginWin.ctrlArr,&loginWin.ctrlCount);
  45. addControl(editPwd,loginWin.ctrlArr,&loginWin.ctrlCount);
  46. addControl(btnok,loginWin.ctrlArr,&loginWin.ctrlCount);
  47. addControl(btncancle,loginWin.ctrlArr,&loginWin.ctrlCount);
  48. printf("控件个数,%d\n",loginWin.ctrlCount);//ctrlCount控件个数
  49. //展示窗口和每一个控件
  50. showWindow(loginWin);
  51. //窗口执行函数 告知当前回车的按钮的下标是多少
  52. winRun(&loginWin);
  53. switch(loginWin.foucsIndex){
  54. case 5:
  55. role = Jude(loginWin.ctrlArr[3].content,loginWin.ctrlArr[4].content,userArr);
  56. gotoxy(27,17);
  57. if(role==-1)//失败
  58. {
  59. printf("登录失败\n");
  60. // return 0;//0 -- 登录界面 有bug登录失败第二次的才正常
  61. Sleep(2000);
  62. system("cls");
  63. loginInit();
  64. }
  65. else{
  66. printf("登录成功\n");
  67. Sleep(1000);
  68. system("cls");
  69. switch(role){
  70. case ADMIN:
  71. adminInit();
  72. return 1;//ADMIN
  73. case MANAGER:
  74. managerInit();
  75. return 2;//MANAGER
  76. case WAITER:
  77. waiterInit();
  78. return 3;//WAITER
  79. }
  80. }
  81. break;
  82. case 6:
  83. printf("返回\n");
  84. return -1;
  85. default:
  86. break;
  87. }
  88. }
  89. /*
  90. 函数名:Jude( )
  91. 函数作用:执行登录操作
  92. 函数参数:参数1:char name[]用户名
  93. 参数2:char pwd[7]密码
  94. 参数3:USER_T userArr[] 用户结构体数组
  95. 函数返回:角色 1是admin 2是 manager 3 是waiter -1表示没登录成功
  96. */
  97. int Jude(char *name,char *pwd,USER_T userArr[])
  98. {
  99. int i=0;
  100. for(;i<count;i++)
  101. {
  102. //对比用户名和密码都要相等
  103. if(strcmp(name,userArr[i].name)==0&&strcmp(pwd,userArr[i].pwd)==0)
  104. {
  105. // 用户名密码相等表示登录成功 登录成功返回角色
  106. return userArr[i].role;
  107. }
  108. }
  109. //登录失败
  110. return -1;
  111. }

10.Admin.h  [管理员窗 头文件]

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

11.Admin.c  [管理员窗 源文件]

  1. #include"Admin.h"
  2. #include"Cwindow.h"
  3. #include "Ctool.h"
  4. #include<stdio.h>
  5. #include<stdlib.h>
  6. int adminInit()
  7. {
  8. /* int startx;//窗口所放位置
  9. int starty;
  10. int width;//窗口对应宽高
  11. int height;
  12. CONTROL_T ctrlArr[20];//存放控件结构体数组 窗口中有多个控件
  13. int ctrlCount; //记录控件总个数 初始化为0 用于添加控件函数中 */
  14. WIN_T Admin={3,3,25,23};
  15. /* int maxLen;//最大长度
  16. int inputType;//输入类型 0-数字 1-字母 2-数字+字母
  17. int ips;//显示类型 0-密文 1-明文
  18. int ctrlType; //控件类型 1-label 2-edit 3-button 区分控件的使用
  19. char content[20];//控件中输入的内容 共填9个参数 */
  20. CONTROL_T titleguan={19,5,10,2,0,0,0,LABEL,"管理员界面"};
  21. CONTROL_T btntaizhuo={19,9,8,3,0,0,0,BUTTON,"台桌管理"};
  22. CONTROL_T btncaipu={19,12,8,3,0,0,0,BUTTON,"菜谱管理"};
  23. CONTROL_T btnrenyuan={19,15,8,3,0,0,0,BUTTON,"人员管理"};
  24. CONTROL_T btnzhuxiao={19,18,8,3,0,0,0,BUTTON,"注销"};
  25. CONTROL_T btntuichu={19,21,8,3,0,0,0,BUTTON,"退出"};
  26. //添加控件 void addControl(参数1:控件结构体(控件) 参数2:控件数组 参数3:控件个数);
  27. addControl(titleguan,Admin.ctrlArr,&Admin.ctrlCount);
  28. addControl(btntaizhuo,Admin.ctrlArr,&Admin.ctrlCount);
  29. addControl(btncaipu,Admin.ctrlArr,&Admin.ctrlCount);
  30. addControl(btnrenyuan,Admin.ctrlArr,&Admin.ctrlCount);
  31. addControl(btnzhuxiao,Admin.ctrlArr,&Admin.ctrlCount);
  32. addControl(btntuichu,Admin.ctrlArr,&Admin.ctrlCount);
  33. printf("控件个数,%d\n",Admin.ctrlCount);
  34. showWindow(Admin);
  35. winRun(&Admin);
  36. switch(Admin.foucsIndex){
  37. case 3:
  38. system("cls");
  39. guanrenInit();
  40. //return 4; bug 刷新第二次才可以
  41. break;
  42. case 5:
  43. system("cls");
  44. loginInit();
  45. break;
  46. default:
  47. break;
  48. }
  49. }

12.Manager.h  [经理窗 头文件]

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

13.Manager.c  [经理窗 源文件]

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

14.Waiter.h  [服务员窗 头文件]

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

15.Waiter.c  [服务员窗 源文件]

  1. #include"Waiter.h"
  2. #include"Cwindow.h"
  3. #include "Ctool.h"
  4. #include<stdio.h>
  5. int waiterInit()
  6. {
  7. /* int startx;//窗口所放位置
  8. int starty;
  9. int width;//窗口对应宽高
  10. int height;
  11. CONTROL_T ctrlArr[20];//存放控件结构体数组 窗口中有多个控件
  12. int ctrlCount; //记录控件总个数 初始化为0 用于添加控件函数中 */
  13. WIN_T Waiter={3,3,25,25};//部分初始化 控件结构体数组{0} ctrlCount=0
  14. /* int maxLen;//最大长度
  15. int inputType;//输入类型 0-数字 1-字母 2-数字+字母
  16. int ips;//显示类型 0-密文 1-明文
  17. int ctrlType; //控件类型 1-label 2-edit 3-button 区分控件的使用
  18. char content[20];//控件中输入的内容 共填9个参数*/
  19. CONTROL_T titlefuwu={19,5,10,2,0,0,0,LABEL,"服务员功能界面"};
  20. CONTROL_T btnkaizhuo={19,9,10,3,0,0,0,BUTTON,"开桌"};
  21. CONTROL_T btndiancai={19,12,10,3,0,0,0,BUTTON,"点菜"};
  22. CONTROL_T btnyingyee={19,15,10,3,0,0,0,BUTTON,"营业额查询"};
  23. CONTROL_T btnyi={19,18,10,3,0,0,0,BUTTON,"已买/未买单查询"};
  24. CONTROL_T btnzhuxiao={19,21,10,3,0,0,0,BUTTON,"注销"};
  25. CONTROL_T btntuichu={19,24,10,3,0,0,0,BUTTON,"退出"};
  26. //添加控件 void addControl(参数1:控件结构体(控件) 参数2:控件数组 参数3:控件个数);
  27. addControl(titlefuwu,Waiter.ctrlArr,&Waiter.ctrlCount);
  28. addControl(btnkaizhuo,Waiter.ctrlArr,&Waiter.ctrlCount);
  29. addControl(btndiancai,Waiter.ctrlArr,&Waiter.ctrlCount);
  30. addControl(btnyingyee,Waiter.ctrlArr,&Waiter.ctrlCount);
  31. addControl(btnyi,Waiter.ctrlArr,&Waiter.ctrlCount);
  32. addControl(btnzhuxiao,Waiter.ctrlArr,&Waiter.ctrlCount);
  33. addControl(btntuichu,Waiter.ctrlArr,&Waiter.ctrlCount);
  34. printf("控件个数,%d\n",Waiter.ctrlCount);
  35. showWindow(Waiter);
  36. winRun(&Waiter);
  37. switch(Waiter.foucsIndex){
  38. case 6:
  39. system("cls");
  40. loginInit();
  41. break;
  42. default:
  43. break;
  44. }
  45. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/1009126
推荐阅读
相关标签
  

闽ICP备14008679号