您好,登錄后才能下訂單哦!
本文小編為大家詳細(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í)新知識吧。
#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(); }
#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
#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("┘"); } } }
#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
#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; } }
#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
#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; }
#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
#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; }
#ifndef ADMIN_H #define ADMIN_H //管理員窗口的初始化 int adminInit(); #endif
#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; } }
#ifndef MANAGER_H #define MANAGER_H //經(jīng)理窗口的初始化 int managerInit(); #endif
#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; } }
#ifndef WAITER_H #define WAITER_H //服務(wù)員窗口的初始化 int waiterInit(); #endif
#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è)資訊頻道。
免責(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)容。