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  [程序主入口]

#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();		
}

2.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);//形参  光标定位

/*
函数功能:字符串输入控制
函数参数:
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

3.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};
	// 光标的起始位(第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("┘");	
		}
	}
}

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

#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

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

#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;	
	}
}

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

#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

7.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("经理\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;
}

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

#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

9.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];//引入外部变量 结构体数组定义时做全局变量
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 title={19,7,10,2,0,0,0,LABEL,"点菜系统"};
	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(参数1:控件结构体(控件) 参数2:控件数组 参数3:控件个数);	
	//通过下标将控件ctrl放到控件数组ctrlArr[20]当中  在登录窗口界面中添加控件
    //数组作为实参时直接写数组名ctrlArr即可,数组名(起始地址)
	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("控件个数,%d\n",loginWin.ctrlCount);//ctrlCount控件个数
	
	//展示窗口和每一个控件 
    showWindow(loginWin);
    
	//窗口执行函数 告知当前回车的按钮的下标是多少
	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;		
	}
}

/*  
函数名: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[])
{
	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;	
}

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

#ifndef ADMIN_H
#define ADMIN_H

//管理员窗口的初始化
int adminInit();

#endif

11.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;//窗口对应宽高
	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;		
	}		
}

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

#ifndef MANAGER_H
#define MANAGER_H

//经理窗口的初始化
int managerInit();

#endif

13.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;//窗口对应宽高
	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;	
	}
}

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

#ifndef WAITER_H
#define WAITER_H

//服务员窗口的初始化
int waiterInit();

#endif

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

#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;		
	}
}
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenruhan_QAQ_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值