C語言實現(xiàn)點菜系統(tǒng)
更新時間:2022年06月16日 16:39:43 作者:想吃讀研的苦
這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)點菜系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了C語言實現(xiàn)點菜系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
一、main.c
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<windows.h>//Sleep #include"user.h" #include"loginWin.h"http://登錄界面使用 #include"Admin.h"http://管理員界面使用 #include"Manager.h"http://經(jīng)理界面使用 #include"Waiter.h"http://服務(wù)員界面使用 #include"guanRen.h"http://人員管理窗口使用 #include"xinZeng.h"http://新增用戶窗口使用 #include"daYin.h"http://打印查詢窗口使用 #include"xiuGai.h"http://修改密碼窗口使用 ? int count =3; ?//初始化兩個用戶 ?全局變量 ? ?//初始化用戶結(jié)構(gòu)體數(shù)組 ?做全局變量 其他.c中extern外部引用 ?? ?USER_T userArr[10]={?? ? ?? ??? ?{1001,"admin","123456",1},//0 ADMIN ?? ??? ?{1002,"manager","123456",2},//1 ?MANAGER ?? ??? ?{1003,"waiter","123456",3}//2 ?WAITER ?? ?}; ? void proRun() { ?? ?int(*win_funs[30])()={loginInit,adminInit,managerInit,waiterInit,guanrenInit,xinZengInit ?? ??? ?,daYinInit,xiuGaiInit}; ?? ?int winIndex = 0; //0-loginInit 1-adminInit 2-managerInit 3-waiterInit ?? ?while(1) ?? ?{ ? ? ? ? Sleep(1500); ?? ??? ?system("cls"); ?? ??? ?winIndex=win_funs[winIndex]();?? ? ?? ?} }?? ? ? int main() { ?? ?proRun();?? ??? ? }
二、Ctool.h
#ifndef CTOOL_H #define CTOOL_H #define KEY_UP 72 #define KEY_DOWN 80 #define KEY_LEFT 75 #define KEY_RIGHT 77 #define KEY_ESC 27 #define KEY_ENTER 13 ? void paintWindow(int startX,int startY,int width,int height);//打印窗口 ? void gotoxy(int x,int y);//形參 ?光標(biāo)定位 ? /* 函數(shù)功能:字符串輸入控制 函數(shù)參數(shù): int maxLen 允許輸入最大長度 int inputType 允許輸入的字符類型 ?0:數(shù)字 1:字母 2:字母+數(shù)字 int ips 數(shù)據(jù)顯示格式 ?0:密文 ?1:明文 char str[] 存儲輸入字符 函數(shù)返回值:無 char str[] ? ?char str[20] ? ?char*str */ void glb_string(int maxLen,int inputType,int ips,char str[]);? ? /* 函數(shù)名:int getkey() 函數(shù)功能:獲取用戶輸入的任意鍵盤值 函數(shù)參數(shù):無 函數(shù)返回:ascii ? */ int getkey(); ? //打印用戶信息表格 void daYinBiao(int x,int y,int lie,int hang); ? #endif
三、Ctool.c
#include "Ctool.h" #include <windows.h>//gotoxy #include<stdio.h> #include<conio.h> ? void gotoxy(int x,int y)//形參 { ?? ?HANDLE hOut; ?? ?COORD pos= {x,y}; ?? ?// 光標(biāo)的起始位(第1列,第3行) 0是第1列 2是第3行 ?? ?hOut = GetStdHandle(STD_OUTPUT_HANDLE); ?? ?SetConsoleCursorPosition(hOut, pos); ?? ?//printf("定位光標(biāo)位置搜索(%d,%d)\n",pos.X,pos.Y); } ? void paintWindow(int startX,int startY,int width,int height) ? { ?? ?int i=0; ?? ?//打印頂部 ?? ?? ?//光標(biāo)定位 找規(guī)律 ┗ ?┛ ┏ ┓ ┃ ━ ?? ?//頂部 y不變 x 在變 (x-x+w) ?? ?gotoxy(startX,startY); ?? ?printf("┏"); ?? ?for(i=0;i<width-2;i++) ?//控制循環(huán)次數(shù)width-2次 ?? ?{?? ??? ? ?? ??? ?printf("━ "); ?? ?} ?? ?printf("┓"); ? ?? ?//左邊 x不變 y在變 (y到y(tǒng)+height)?? ? ?? ?for(i=1;i<=height-1;i++) ?? ?{ ?? ??? ?gotoxy(startX,startY+i); ?? ??? ?printf("┃"); ?? ?} ?? ?//右邊 x不變 =startx+width-1 ?y在變 y 到 y+height ?? ?for(i=1;i<=height-1;i++) ?? ?{ ?? ??? ?gotoxy(startX+width*2-3,startY+i); ?? ??? ?printf("┃"); ?? ?} ? ?? ?//底部 x在變化 ? ?y不變 (x到x+width) ━? ?? ?gotoxy(startX,startY+height-1); ?? ?printf("┗"); ?? ?for(i=0;i<width-2;i++) ?? ?{ ?? ??? ?printf("━ "); ?? ?} ?? ?printf("┛"); ? ?? ?gotoxy(startX,startX+height);?? ? } ? void glb_string(int maxLen,int inputType,int ips,char str[]) { ?? ? ? char ch=0; ?? ? ? int i=0; ?? ? ? while(1) ?? ? ? { ?? ??? ? ? ch=getch(); ?? ??? ? ? if(ch=='\r'&&i>0)//換行結(jié)束輸入 ?? ??? ? ? { ?? ??? ??? ? ? break;?? ??? ??? ? ?? ?? ??? ? ? } ?? ??? ? ? switch(inputType) ?? ??? ? ? { ?? ??? ? ? case 0: ?? ??? ??? ? ? if(ch>='0'&&ch<='9'&&i<maxLen) ?? ??? ??? ? ? { ?? ??? ??? ??? ? ? if(ips==0) ?? ??? ??? ??? ? ? { ?? ??? ??? ??? ??? ? ? putch('*');?? ??? ??? ??? ? ?? ?? ??? ??? ??? ? ? } ?? ??? ??? ??? ? ? else{?? ??? ??? ??? ? ?? ?? ??? ??? ??? ??? ? ? putch(ch); ?? ??? ??? ??? ? ? } ?? ??? ??? ??? ? ? str[i++]=ch;?? ??? ??? ? ?? ?? ??? ??? ? ? } ?? ??? ??? ? ? break; ?? ??? ? ? case 1: ?? ??? ??? ? ? if(i<maxLen&&(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) ?? ??? ??? ? ? { ?? ??? ??? ??? ? ? if(ips==0) ?? ??? ??? ??? ? ? { ?? ??? ??? ??? ??? ? ? putch('*');?? ??? ? ?? ?? ??? ??? ??? ? ? } ?? ??? ??? ??? ? ? else{?? ??? ? ?? ?? ??? ??? ??? ??? ? ? putch(ch); ?? ??? ??? ??? ? ? } ?? ??? ??? ??? ? ? str[i++]=ch;?? ? ?? ?? ??? ??? ? ? } ?? ??? ??? ? ? break; ?? ??? ? ?case 2: ?? ??? ??? ? ? if(i<maxLen&&(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')||(ch>='0'&&ch<='9')) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?if(ips==0) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?putch('*');?? ??? ??? ??? ??? ??? ??? ??? ?? ?? ??? ??? ??? ??? ?} ?? ??? ??? ? ? ?else{ ?? ??? ??? ??? ? ? ?putch(ch); ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?str[i++]=ch; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?break; ?? ??? ?default: ?? ??? ??? ??? ? break; ?? ??? ??? ?} ?? ?? ? ? }?? ? ? ? } ? /* 函數(shù)名:int getkey() 函數(shù)功能:獲取用戶輸入的任意鍵盤值 函數(shù)參數(shù):無 函數(shù)返回:ascii ? */ int getkey() { ?? ?char key=0; ?? ?key=getch(); ?? ?if(key==-32)//方向按鍵 第一個值都是32 ?? ?{ ?? ??? ?key=getch(); ?? ??? ?switch(key){ ?? ??? ?case 72: ?? ??? ??? ?return KEY_UP; ?? ??? ?case 80: ?? ??? ??? ?return KEY_DOWN; ?? ??? ?case 75: ?? ??? ??? ?return KEY_LEFT; ?? ??? ?case 77: ?? ??? ??? ?return KEY_RIGHT;?? ? ?? ??? ?}?? ? ?? ?} ?? ?else if(key==13) ?? ?{ ?? ??? ?return KEY_ENTER; ?? ?} ?? ?else if(key==27) ?? ?{ ?? ??? ?return KEY_ESC; ?? ?} ?? ?return key;?? ? } ? ? void daYinBiao(int x,int y,int lie,int hang) ? { ?? ?//lie --表格列數(shù)-- 3--7 ?? ?int i,j,m,z=0; ?? ?int count=0; ?? ?gotoxy(x,y); ?? ?for(i=0;i<2*hang+1;i++) ?? ?{ ?? ??? ?if(i==0)//第一行 ?? ??? ?{ ?? ??? ??? ?printf("┌ "); ? //第一列 ?? ??? ??? ?for(j=0;j<lie-1;j++)//2 - n-1列---┬ ?? ??? ??? ?{ ?? ??? ??? ??? ?for(m=0;m<7;m++) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?printf("━ ");?? ??? ? ?? ??? ??? ??? ?} ?? ??? ??? ??? ?printf("┬ ");//每個單元格之間的分割?? ??? ? ?? ??? ??? ?} ?? ??? ??? ?for(m=0;m<7;m++) ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("━ "); ?? ??? ??? ?} ?? ??? ??? ?printf("┐"); ?? ??? ?} ?? ??? ?if(i>0&&i<2*hang)//1-6行 ?? ??? ?{ ?? ??? ??? ?if(i%2==1) ? //數(shù)據(jù)行 ?? ??? ??? ?{ ?? ??? ??? ??? ?gotoxy(x,i+y); ?? ??? ??? ??? ?printf("┃"); ?? ??? ??? ??? ?for(j=0;j<lie;j++) //0-3 ?? ??? ??? ??? ?{ ?? ??? ??? ??? ? ?for(m=0;m<7;m++) ?? ??? ??? ??? ? ?{ ?? ??? ??? ??? ??? ? ?printf(" ?");?? ? ? ?? ??? ??? ??? ? ?} ?? ??? ??? ??? ? ?printf(" ┃"); ?? ??? ??? ??? ?}?? ??? ??? ? ?? ??? ??? ?} ?? ??? ??? ?else ?//單元格邊界 ?? ??? ??? ?{ ?? ??? ??? ??? ?gotoxy(x,i+y); ?? ??? ??? ??? ?printf("├ "); ?? ??? ??? ??? ?for(j=0;j<lie-1;j++) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?for(m=0;m<7;m++) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?printf("━ "); ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?printf("┼ "); ?? ??? ??? ??? ?} ?? ??? ??? ??? ?for(m=0;m<7;m++) ?? ??? ??? ??? ?{ ? ? ? ? ? ? ? ? ? ? printf("━ ");?? ? ?? ??? ??? ??? ?} ?? ??? ??? ??? ?printf("┤");?? ??? ??? ? ?? ??? ??? ?}?? ??? ? ?? ??? ?} ?? ??? ?//最后一行 ? ?// ┌ ━ ┬ ┐┃ ┼ ├ ┤ └ ┘ ┴ ?? ??? ?if(i==2*hang)? ?? ??? ?{ ?? ??? ??? ?gotoxy(x,y+2*hang); ?? ??? ??? ?printf("└ "); ? ? ? ?? ??? ??? ?for(j=0;j<lie-1;j++)//2 - n-1列---┴ ?? ??? ??? ?{ ?? ??? ??? ??? ?for(m=0;m<7;m++) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?printf("━ "); ?? ??? ??? ??? ?} ?? ??? ??? ??? ?printf("┴ ");//每個單元格之間的分割 ?? ??? ??? ?} ?? ??? ??? ?for(m=0;m<7;m++) ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("━ "); ?? ??? ??? ?} ?? ??? ??? ?printf("┘");?? ? ?? ??? ?} ?? ?} }
四、Cwindow.h
#ifndef CWINDOW_H #define CWINDOW_H //描述窗口相關(guān)的 #define LABEL 1 //控件使用宏定義 ?標(biāo)簽文本 #define EDIT 2 ?// ? ? ? ? ? ? ? ?編輯框 #define BUTTON 3// ? ? ? ? ? ? ? ?按鈕 ?? ? //標(biāo)簽結(jié)構(gòu)體的聲明 typedef struct label_t { ?? ?int startx; //標(biāo)簽文本所放位置 ?? ?int starty; ?? ?int width;//標(biāo)簽文本自身寬高 ?? ?int height; ?? ?char content[20];//標(biāo)簽文本中輸入對應(yīng)的內(nèi)容 字符數(shù)組 }; ? //編輯框結(jié)構(gòu)體的聲明 typedef struct edit_t { ?? ?int startx;//編輯框所放位置 ?? ?int starty; ?? ?int width;//編輯框自身寬高 ?? ?int height; ?? ?char content[20];//編輯框中輸入的內(nèi)容 ?字符數(shù)組的使用 ?? ?int inputType;//輸入類型 0-數(shù)字 1-字母 2-數(shù)字+字母 ?? ?int ips;//顯示類型 0-密文 1-明文 ?? ?int maxLen; ?//最大長度?? ? }; ? //按鈕結(jié)構(gòu)體的聲明 typedef struct button_t { ?? ?int startx;//按鈕所放位置 ?? ?int starty; ?? ?int width;//按鈕自身寬高 ?? ?int height; ?? ?char content[20];//按鈕中輸入的內(nèi)容?? ? }; ? //以編輯框為標(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ù)作用:窗口運行函數(shù) 光標(biāo)定位 找到edit(輸入) button控件(回車,做對應(yīng)操作) 函數(shù)參數(shù):參數(shù) WIN_T *win ?窗口結(jié)構(gòu)體指針 函數(shù)返回:無 */ void winRun(WIN_T *win); ? /* 函數(shù)名稱:void editKeyListen() 函數(shù)作用:編輯框輸入控制函數(shù) 函數(shù)參數(shù):參數(shù)1:CONTROL_T ctrl 監(jiān)聽的控件 ? ? ? ? ? 參數(shù)2:char ch 輸入的字符 ?? ??? ? ?參數(shù)3:char content[] 存儲的字符串 函數(shù)返回:無 */ void editKeyListen(CONTROL_T ctrl,char ch,char content[]); ? #endif
五、Cwindow.c
#include "Cwindow.h" #include "Ctool.h" #include<conio.h>// getch() #include<string.h>//strlen ? //添加控件 void addControl(參數(shù)1:控件結(jié)構(gòu)體 參數(shù)2:控件結(jié)構(gòu)體數(shù)組 參數(shù)3:控件個數(shù)); //把控件放進(jìn)控件結(jié)構(gòu)體數(shù)組中 ctrlCount控件個數(shù) 預(yù)留出下一個控件結(jié)構(gòu)體下標(biāo) void addControl(CONTROL_T ctrl,CONTROL_T ctrlArr[20] , int *ctrlCount) { ?? ?ctrlArr[(*ctrlCount)++]=ctrl;//按地址傳遞 } ? //窗口顯示函數(shù) 繪制整個窗口以及每一個控件 void showWindow(WIN_T win) { ?? ?int i=0; ?? ?//首先顯示大框 ?? ?paintWindow(win.startx,win.starty,win.width,win.height);//結(jié)構(gòu)體變量名.屬性 ?? ?//顯示每一個控件 ?? ?for(i=0;i<win.ctrlCount;i++)//遍歷ctrlArr[]數(shù)組 長度ctrlCount一個一個獲取 控件在窗口里 ?? ?{ ?? ??? ?//類型 label ?edit ? button ?? ??? ?//如果是label ? ?直接顯示內(nèi)容即可 ?? ??? ?//如果是edit ? ? 畫框(paintWindow) 顯示內(nèi)容 ?? ??? ?//如果是button ? ? 畫框 顯示內(nèi)容 ?? ??? ?if(win.ctrlArr[i].ctrlType==LABEL) ?? ??? ?{ ?? ??? ??? ?gotoxy(win.ctrlArr[i].startx,win.ctrlArr[i].starty);//光標(biāo)定位放入內(nèi)容 ?? ??? ??? ?puts(win.ctrlArr[i].content); ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?//畫編輯框 按鈕框(小框) ?避免小框和放入的內(nèi)容鑲嵌 ?? ??? ??? ?paintWindow(win.ctrlArr[i].startx-2,win.ctrlArr[i].starty-1,win.ctrlArr[i].width,win.ctrlArr[i].height); ?? ??? ??? ?gotoxy(win.ctrlArr[i].startx,win.ctrlArr[i].starty);//光標(biāo)定位放入內(nèi)容 ?? ??? ??? ?puts(win.ctrlArr[i].content);? ?? ??? ?}?? ? ?? ?} ?? ?gotoxy(0,29);//優(yōu)化顯示 } ? /* 函數(shù)名稱:void winRun(WIN_T *win); 函數(shù)作用:窗口運行函數(shù) 光標(biāo)定位 找到edit(輸入) button控件(回車,做對應(yīng)操作) 函數(shù)參數(shù):參數(shù) WIN_T *win ?窗口結(jié)構(gòu)體指針 函數(shù)返回:無 */ void winRun(WIN_T *win) { ?? ?int i=0,key=0; ?? ?for(i=0;i<win->ctrlCount;i++) ?? ?{ ?? ??? ?if(win->ctrlArr[i].ctrlType==EDIT||win->ctrlArr[i].ctrlType==BUTTON) ?? ??? ?{ ?? ??? ??? ?gotoxy(win->ctrlArr[i].startx,win->ctrlArr[i].starty); ?? ??? ??? ?break; ?? ??? ?} ?? ?} ?? ?while(1) ?? ?{ ?? ??? ?key=getkey(); ?? ??? ?switch(key){ ?? ??? ?case KEY_DOWN://向下按鍵 ?查找下一個編輯框 按鈕 ?? ??? ??? ?i++;//按鍵數(shù)組下標(biāo)越界 ?? ??? ??? ?if(i==win->ctrlCount) ?? ??? ??? ?{ ?? ??? ??? ??? ?i=0;//為了避免下標(biāo)越界 從頭開始對控件結(jié)構(gòu)體數(shù)組找編輯框 按鈕 ?? ??? ??? ?} ?? ??? ??? ?for(;i<win->ctrlCount;i++) ?? ??? ??? ?{ ?? ??? ??? ??? ?if(win->ctrlArr[i].ctrlType==EDIT||win->ctrlArr[i].ctrlType==BUTTON)//如果找到編輯框 按鈕 ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?gotoxy(win->ctrlArr[i].startx,win->ctrlArr[i].starty);//光標(biāo)目標(biāo)定位 ?? ??? ??? ??? ??? ?break;//停止 ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?break; ?? ??? ?case KEY_UP: ?? ??? ??? ?i--; ?? ??? ??? ?if(i==-1) ?//從后往前找 數(shù)組起始0 i--為-1 數(shù)組下標(biāo)由大到小 (控件數(shù)組下標(biāo)0位置) ?? ??? ??? ?{ ?? ??? ??? ??? ?i=win->ctrlCount-1; ?//控件個數(shù)(控件結(jié)構(gòu)體數(shù)組下標(biāo)最大)-1 (控件數(shù)組下標(biāo)ctrlCount位置) ?? ??? ??? ?} ?? ??? ??? ?for(;i>0;i--) ?? ??? ??? ?{ ?? ??? ??? ??? ?if(win->ctrlArr[i].ctrlType==EDIT||win->ctrlArr[i].ctrlType==BUTTON)//如果找到編輯框 按鈕 ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?gotoxy(win->ctrlArr[i].startx,win->ctrlArr[i].starty);//光標(biāo)目標(biāo)定位 ?? ??? ??? ??? ??? ?break;//停止 ?? ??? ??? ??? ?} ?? ??? ??? ??? ?if(i==0) ?//第一個 若第一個不是編輯框 按鈕 ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?i=win->ctrlCount; ?//就從最后一個往前查找 for循環(huán)中有i--,不用再-1?? ??? ??? ? ?? ??? ??? ??? ?}?? ??? ? ?? ??? ??? ?} ?? ??? ??? ?break; ?? ??? ?case KEY_ENTER: ?? ??? ??? ?if(win->ctrlArr[i].ctrlType==BUTTON) ?? ??? ??? ?{ ?? ??? ??? ??? ?win->foucsIndex=i; ?? ??? ??? ??? ?return ;//獲取winRun中輸入的編輯框的值 ?? ??? ??? ?} ?? ??? ??? ?break; ?? ??? ?default: ? //其他字符(不是按鍵)并且當(dāng)前控件是編輯框 ?? ??? ??? ?if(win->ctrlArr[i].ctrlType==EDIT) ?? ??? ??? ?{ ?? ??? ??? ??? ?editKeyListen(win->ctrlArr[i],key,win->ctrlArr[i].content);?? ??? ? ?? ??? ??? ?} ?? ??? ??? ?break; ?? ??? ?} ?? ?} } ? /* 函數(shù)名稱:void editKeyListen() 函數(shù)作用:編輯框輸入控制函數(shù) 函數(shù)參數(shù):參數(shù)1:CONTROL_T ctrl 監(jiān)聽的控件 ? ? ? ? ? 參數(shù)2:char ch 輸入的字符 ? ? ? ? ? 參數(shù)3:char content[] 存儲的字符串 函數(shù)返回:無 */ void editKeyListen(CONTROL_T ctrl,char ch,char content[]) { ?? ?int i=strlen(content);//從字符串原來的長度開始存儲 ?? ?switch(ctrl.inputType) ?? ?{ ?? ?case 0: //數(shù)字 ?? ??? ?if(ch>='0'&&ch<='9'&&i<ctrl.maxLen) ?? ??? ?{ ?? ??? ??? ?if(ctrl.ips==0) ?? ??? ??? ?{ ?? ??? ??? ??? ?putch('*');?? ??? ??? ? ?? ??? ??? ?} ?? ??? ??? ?else{?? ??? ??? ? ?? ??? ??? ??? ?putch(ch); ?? ??? ??? ?} ?? ??? ??? ?content[i++]=ch;?? ? ?? ??? ?} ?? ??? ?break; ?? ?case 1: ?? ??? ?if(i<ctrl.maxLen&&(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) ?? ??? ?{ ?? ??? ??? ?if(ctrl.ips==0) ?? ??? ??? ?{ ?? ??? ??? ??? ?putch('*');?? ? ?? ??? ??? ?} ?? ??? ??? ?else{?? ??? ? ?? ??? ??? ??? ?putch(ch); ?? ??? ??? ?} ?? ??? ??? ?content[i++]=ch;?? ? ?? ??? ?} ?? ??? ?break; ?? ?case 2: ?? ??? ?if(i<ctrl.maxLen&&(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')||(ch>='0'&&ch<='9')) ?? ??? ?{ ?? ??? ??? ?if(ctrl.ips==0) ?? ??? ??? ?{ ?? ??? ??? ??? ?putch('*');?? ? ?? ??? ??? ?} ?? ??? ??? ?else{?? ? ?? ??? ??? ??? ?putch(ch); ?? ??? ??? ?} ?? ??? ??? ?content[i++]=ch;?? ? ?? ??? ?} ?? ??? ?break; ?? ?default: ?? ??? ?break;?? ? ?? ?} }
六、user.h
#ifndef USER_H #define USER_H #define ADMIN 1 #define MANAGER 2 #define WAITER 3 ? //用戶結(jié)構(gòu)體聲明 typedef struct user_t { ?? ?int ID; ?? ?char name[20]; ?? ?char pwd[20]; ?? ?int role; ?//數(shù)字表示角色 1是admin ?2是 manager 3 是waiter }USER_T; ? //打印用戶信息 ? ? 三種寫法 userArr[10] ?userArr[ ] ? userArr* void printUserInfo(USER_T userArr[10]); ? //用戶添加 用戶結(jié)構(gòu)體添加到用戶結(jié)構(gòu)體數(shù)組 void addUser(USER_T newuser , USER_T userArr[10]);//把新用戶添加到userArr[10]數(shù)組當(dāng)中 ? /* 函數(shù)作用:查看用戶名是否存在 函數(shù)參數(shù):用戶名 用戶結(jié)構(gòu)體數(shù)組 函數(shù)返回 返回下標(biāo) ?不存在返回-1 */ int userCheck(char name[],USER_T userArr[10]); ? #endif
七、user.c
#include"user.h" #include<stdio.h> #include<string.h>//memcpy ? extern count; ?//外部引用 引入main.c中的count(全局變量) ? //打印用戶信息 void printUserInfo(USER_T userArr[10]) { ?? ?int i=0; ?? ?printf("%d\n",count); ?? ?for(i=0;i<count;i++) ?? ?{ ?? ??? ?printf("%d\t%s\t%s\t",userArr[i].ID,userArr[i].name,userArr[i].pwd); ?? ??? ?switch(userArr[i].role) ?? ??? ?{ ?? ??? ?case ADMIN: ?? ??? ??? ?printf("管理員\n"); ?? ??? ??? ?break; ?? ??? ?case MANAGER: ?? ??? ??? ?printf("經(jīng)理\n"); ?? ??? ??? ?break; ?? ??? ?case WAITER: ?? ??? ??? ?printf("服務(wù)員\n"); ?? ??? ??? ?break; ?? ??? ?default : ?? ??? ??? ?break;?? ??? ??? ? ?? ??? ?}?? ? ?? ?}?? ? } ? //用戶添加 用戶結(jié)構(gòu)體添加到用戶結(jié)構(gòu)體數(shù)組 void addUser(USER_T newuser , USER_T userArr[10]) { ?? ?//userArr[count++]=newuser; ?? ?memcpy(&userArr[count++],&newuser,sizeof(USER_T));//地址內(nèi)存拷貝賦值 取地址 數(shù)組 變量名 長度 } ? /* 函數(shù)作用:查看用戶名是否存在 函數(shù)參數(shù):用戶名 用戶結(jié)構(gòu)體數(shù)組 函數(shù)返回:返回下標(biāo) ?不存在返回-1 */ int userCheck(char name[],USER_T userArr[10]) { ?? ?int i=0; ?? ?for(i=0;i<count;i++) ?? ?{ ?? ??? ?if(strcmp(userArr[i].name,name)==0) ?? ??? ?{ ?? ??? ??? ?return i;?? ? ?? ??? ?}?? ? ?? ?} ?? ?return -1; }
八、loginWin.h
#ifndef LOGINWIN_H #define LOGINWIN_H #include"user.h" ? //登錄的初始化--登錄窗口的展示 int loginInit(); ? /* ? 函數(shù)名:doLogin() 函數(shù)作用:執(zhí)行登錄操作 函數(shù)參數(shù):參數(shù)1:char name[]用戶名 ? ? ? ? ? 參數(shù)2:char pwd[7]密碼 函數(shù)返回:角色 1是admin ?2是 manager 3 是waiter -1表示沒登錄成功 */ int doLogin(char name[],char pwd[]);//登錄輸入用戶名密碼 ?函數(shù)返回:角色role是int? ? /* ? 函數(shù)名:Jude( ) 函數(shù)作用:執(zhí)行登錄操作 函數(shù)參數(shù):參數(shù)1:char name[]用戶名 ? ? ? ? ? 參數(shù)2:char pwd[7]密碼 ?? ??? ? ?參數(shù)3:USER_T userArr[] 用戶結(jié)構(gòu)體數(shù)組 函數(shù)返回:角色 1是admin ?2是 manager 3 是waiter ? ? ?-1表示沒登錄成功 */ int Jude(char *name,char *pwd,USER_T userArr[]); ? #endif
九、loginWin.c
#include"loginWin.h" #include"Cwindow.h" #include "Ctool.h" #include"user.h"http://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,"點菜系統(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ù)組名ctrlArr即可,數(shù)組名(起始地址) ?? ?addControl(title,loginWin.ctrlArr,&loginWin.ctrlCount); ?? ?addControl(labName,loginWin.ctrlArr,&loginWin.ctrlCount); ?? ?addControl(labPwd,loginWin.ctrlArr,&loginWin.ctrlCount); ?? ?addControl(editName,loginWin.ctrlArr,&loginWin.ctrlCount); ?? ?addControl(editPwd,loginWin.ctrlArr,&loginWin.ctrlCount); ?? ?addControl(btnok,loginWin.ctrlArr,&loginWin.ctrlCount); ?? ?addControl(btncancle,loginWin.ctrlArr,&loginWin.ctrlCount); ?? ? ?? ?printf("控件個數(shù),%d\n",loginWin.ctrlCount);//ctrlCount控件個數(shù) ?? ? ?? ?//展示窗口和每一個控件? ? ? showWindow(loginWin); ? ?? ?? ?//窗口執(zhí)行函數(shù) 告知當(dāng)前回車的按鈕的下標(biāo)是多少 ?? ?winRun(&loginWin);?? ? ? ?? ?switch(loginWin.foucsIndex){ ?? ?case 5: ?? ??? ?role ?= ?Jude(loginWin.ctrlArr[3].content,loginWin.ctrlArr[4].content,userArr); ?? ??? ?gotoxy(27,17); ?? ??? ?if(role==-1)//失敗 ?? ??? ?{ ?? ??? ??? ?printf("登錄失敗\n"); ?? ??? ??? ?// return 0;//0 -- 登錄界面?? ? 有bug登錄失敗第二次的才正常 ?? ??? ??? ?Sleep(2000); ?? ??? ??? ?system("cls"); ? ? ? ? ? ? loginInit(); ?? ??? ?} ?? ??? ?else{ ?? ??? ??? ?printf("登錄成功\n"); ?? ??? ??? ?Sleep(1000); ?? ??? ??? ?system("cls"); ?? ??? ??? ? ?? ??? ??? ?switch(role){ ?? ??? ??? ?case ADMIN: ?? ??? ??? ??? ??? ?adminInit(); ?? ??? ??? ??? ??? ?return 1;//ADMIN?? ??? ? ?? ??? ??? ?case MANAGER: ?? ??? ??? ??? ??? ?managerInit(); ? ? ? ? ? ? ? ? ? ? ?return 2;//MANAGER?? ??? ??? ? ?? ??? ??? ?case WAITER: ?? ??? ??? ??? ??? ?waiterInit(); ? ? ? ? ? ? ? ? ? ? ? return 3;//WAITER?? ??? ? ?? ??? ??? ?} ??? ??? ? ?? ??? ?} ?? ??? ?break; ?? ?case 6: ?? ??? ?printf("返回\n"); ? ? ? ? ? ?return -1; ?? ?default: ?? ??? ?break;?? ??? ? ?? ?} } ? /* ? 函數(shù)名:Jude( ) 函數(shù)作用:執(zhí)行登錄操作 函數(shù)參數(shù):參數(shù)1:char name[]用戶名 ? ? ? ? ? 參數(shù)2:char pwd[7]密碼 ? ? ? ? ? 參數(shù)3:USER_T userArr[] 用戶結(jié)構(gòu)體數(shù)組 函數(shù)返回:角色 1是admin ?2是 manager 3 是waiter ? ? ?-1表示沒登錄成功 */ int Jude(char *name,char *pwd,USER_T userArr[]) { ?? ?int i=0; ?? ?for(;i<count;i++)? ?? ?{ ?? ??? ?//對比用戶名和密碼都要相等 ? ?? ??? ?if(strcmp(name,userArr[i].name)==0&&strcmp(pwd,userArr[i].pwd)==0) ?? ??? ?{ ?? ??? ??? ?// 用戶名密碼相等表示登錄成功 登錄成功返回角色? ?? ??? ??? ?return userArr[i].role; ?? ??? ?}?? ? ?? ?} ?? ?//登錄失敗 ?? ?return -1;?? ? }
十、Admin.h
#ifndef ADMIN_H #define ADMIN_H ? //管理員窗口的初始化 int adminInit(); ? #endif
十一、Admin.c
#include"Admin.h" #include"Cwindow.h" #include "Ctool.h" #include<stdio.h> #include<stdlib.h> ? int adminInit() {?? ? /* ?int startx;//窗口所放位置 ?? ?int starty; ?? ?int width;//窗口對應(yīng)寬高 ?? ?int height; ?? ?CONTROL_T ctrlArr[20];//存放控件結(jié)構(gòu)體數(shù)組 ?窗口中有多個控件 ? ? int ctrlCount; ? //記錄控件總個數(shù) 初始化為0 用于添加控件函數(shù)中 */ ?? ?WIN_T Admin={3,3,25,23}; ?? ? /*?? ?int maxLen;//最大長度 ?? ?int inputType;//輸入類型 0-數(shù)字 1-字母 2-數(shù)字+字母 ?? ?int ips;//顯示類型 0-密文 1-明文 ? ? ?? ?? ?int ctrlType; ?//控件類型 1-label 2-edit 3-button ?區(qū)分控件的使用 ?? ?char content[20];//控件中輸入的內(nèi)容 ? ? ?共填9個參數(shù) ?*/ ?? ?CONTROL_T titleguan={19,5,10,2,0,0,0,LABEL,"管理員界面"}; ?? ? ?? ?CONTROL_T btntaizhuo={19,9,8,3,0,0,0,BUTTON,"臺桌管理"}; ?? ?CONTROL_T btncaipu={19,12,8,3,0,0,0,BUTTON,"菜譜管理"}; ?? ?CONTROL_T btnrenyuan={19,15,8,3,0,0,0,BUTTON,"人員管理"}; ?? ?CONTROL_T btnzhuxiao={19,18,8,3,0,0,0,BUTTON,"注銷"}; ?? ?CONTROL_T btntuichu={19,21,8,3,0,0,0,BUTTON,"退出"}; ?? ? //添加控件 void addControl(參數(shù)1:控件結(jié)構(gòu)體(控件) 參數(shù)2:控件數(shù)組 參數(shù)3:控件個數(shù));?? ? ?? ?addControl(titleguan,Admin.ctrlArr,&Admin.ctrlCount); ? ? addControl(btntaizhuo,Admin.ctrlArr,&Admin.ctrlCount); ?? ?addControl(btncaipu,Admin.ctrlArr,&Admin.ctrlCount); ?? ?addControl(btnrenyuan,Admin.ctrlArr,&Admin.ctrlCount); ?? ?addControl(btnzhuxiao,Admin.ctrlArr,&Admin.ctrlCount); ?? ?addControl(btntuichu,Admin.ctrlArr,&Admin.ctrlCount); ?? ? ?? ?printf("控件個數(shù),%d\n",Admin.ctrlCount); ? ? showWindow(Admin); ? ?? ?winRun(&Admin); ? ?? ?switch(Admin.foucsIndex){ ?? ?case 3: ? ? ? ? ? ?? ?system("cls"); ?? ??? ? ? ?guanrenInit(); ?? ??? ??? ?//return 4; ?bug 刷新第二次才可以 ?? ??? ?break; ?? ?case 5: ? ? ? ? ? ?? ?system("cls"); ?? ??? ? ? ?loginInit(); ??? ??? ?break; ?? ?default: ?? ??? ?break;?? ??? ? ?? ?}?? ??? ? }
十二、Manager.h
#ifndef MANAGER_H #define MANAGER_H ? //經(jīng)理窗口的初始化 int managerInit(); ? #endif
十三、Manager.c
#include"Manager.h" #include"Cwindow.h" #include "Ctool.h" #include<stdio.h> #include<stdlib.h> ? int managerInit() { /* ?int startx;//窗口所放位置 ?? ?int starty; ?? ?int width;//窗口對應(yīng)寬高 ?? ?int height; ?? ?CONTROL_T ctrlArr[20];//存放控件結(jié)構(gòu)體數(shù)組 ?窗口中有多個控件 ? ? int ctrlCount; ? //記錄控件總個數(shù) 初始化為0 用于添加控件函數(shù)中 */ ?? ?WIN_T Manager={3,3,25,23};//部分初始化 控件結(jié)構(gòu)體數(shù)組{0} ?ctrlCount=0 ?? ? /* ?int maxLen;//最大長度 ?? ?int inputType;//輸入類型 0-數(shù)字 1-字母 2-數(shù)字+字母 ?? ?int ips;//顯示類型 0-密文 1-明文 ? ? ?? ?? ?int ctrlType; ?//控件類型 1-label 2-edit 3-button ?區(qū)分控件的使用 ?? ?char content[20];//控件中輸入的內(nèi)容 ? ? ?共填9個參數(shù)*/ ?? ?CONTROL_T titlejingli={19,5,10,2,0,0,0,LABEL,"經(jīng)理功能界面"}; ?? ? ?? ?CONTROL_T btnyingshou={19,9,8,3,0,0,0,BUTTON,"營收匯總"}; ?? ?CONTROL_T btnzhuxiao={19,12,8,3,0,0,0,BUTTON,"注銷"}; ?? ?CONTROL_T btntuichu={19,15,8,3,0,0,0,BUTTON,"退出"}; ? ?? ?//添加控件 void addControl(參數(shù)1:控件結(jié)構(gòu)體(控件) 參數(shù)2:控件數(shù)組 參數(shù)3:控件個數(shù));?? ? ? ? addControl(titlejingli,Manager.ctrlArr,&Manager.ctrlCount);?? ? ?? ?addControl(btnyingshou,Manager.ctrlArr,&Manager.ctrlCount); ?? ?addControl(btnzhuxiao,Manager.ctrlArr,&Manager.ctrlCount); ?? ?addControl(btntuichu,Manager.ctrlArr,&Manager.ctrlCount); ?? ? ?? ?printf("控件個數(shù),%d\n",Manager.ctrlCount); ? ?? ?? ?showWindow(Manager); ? ?? ?winRun(&Manager);?? ? ? ?? ?switch(Manager.foucsIndex){ ? ? ?case 3: ? ? ? ? ? ?? ?system("cls"); ?? ??? ? ? ?loginInit(); ?? ??? ?break; ?? ?default: ?? ??? ?break;?? ? ?? ?} }
十四、Waiter.h
#ifndef WAITER_H #define WAITER_H ? //服務(wù)員窗口的初始化 int waiterInit(); ? #endif
十五、Waiter.c
#include"Waiter.h" #include"Cwindow.h" #include "Ctool.h" #include<stdio.h> ? int waiterInit() { /* ?int startx;//窗口所放位置 ?? ?int starty; ?? ?int width;//窗口對應(yīng)寬高 ?? ?int height; ?? ?CONTROL_T ctrlArr[20];//存放控件結(jié)構(gòu)體數(shù)組 ?窗口中有多個控件 ? ? int ctrlCount; ? //記錄控件總個數(shù) 初始化為0 用于添加控件函數(shù)中 */ ?? ?WIN_T Waiter={3,3,25,25};//部分初始化 控件結(jié)構(gòu)體數(shù)組{0} ?ctrlCount=0 ? /*?? ?int maxLen;//最大長度 ?? ?int inputType;//輸入類型 0-數(shù)字 1-字母 2-數(shù)字+字母 ?? ?int ips;//顯示類型 0-密文 1-明文 ? ? ?? ?? ?int ctrlType; ?//控件類型 1-label 2-edit 3-button ?區(qū)分控件的使用 ?? ?char content[20];//控件中輸入的內(nèi)容 ? ? ?共填9個參數(shù)*/ ?? ?CONTROL_T titlefuwu={19,5,10,2,0,0,0,LABEL,"服務(wù)員功能界面"}; ?? ? ?? ?CONTROL_T btnkaizhuo={19,9,10,3,0,0,0,BUTTON,"開桌"}; ?? ?CONTROL_T btndiancai={19,12,10,3,0,0,0,BUTTON,"點菜"}; ?? ?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;?? ??? ? ?? ?} }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
輕松實現(xiàn)C/C++各種常見進(jìn)制相互轉(zhuǎn)換
這篇文章主要介紹了輕松實現(xiàn)C/C++各種常見進(jìn)制相互轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11C語言詳解用char實現(xiàn)大小寫字母的轉(zhuǎn)換
這篇文章主要給大家介紹了關(guān)于C語言實現(xiàn)大小寫字母轉(zhuǎn)換的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05解析C++編程中異常相關(guān)的堆棧展開和throw()異常規(guī)范
這篇文章主要介紹了C++編程中異常相關(guān)的堆棧展開和throw()異常規(guī)范,throw()規(guī)范部分文中結(jié)合了C++11標(biāo)準(zhǔn)的新特性來講,需要的朋友可以參考下2016-01-01C++中的不規(guī)則二維數(shù)組實現(xiàn)代碼
本文介紹了一個在C++中保存不定長二維數(shù)組的數(shù)據(jù)結(jié)構(gòu),在這個結(jié)構(gòu)中,我們使用了一個含有指針和數(shù)組長度的結(jié)構(gòu)體,用這樣的一個結(jié)構(gòu)體構(gòu)造一個結(jié)構(gòu)體數(shù)組,用于存儲每一個不定長的數(shù)組,感興趣的朋友一起看看吧2024-03-03