餐館點(diǎn)菜系統(tǒng)C語(yǔ)言源代碼
餐館點(diǎn)菜系統(tǒng)c語(yǔ)言的源代碼,一些封裝的函數(shù),對(duì)鏈表的操作,還有文件的存取,供大家參考,具體內(nèi)容如下
#include "public.h"
struct NODE *myhead;
struct NODE *orderhead;
struct NODE *ashead;
char waiter_ID[4+1];
/*******************************設(shè)置輸入框顏色*******************************************
名稱(chēng):設(shè)置輸入框顏色
參數(shù):
iNum 表示: 編輯框的長(zhǎng)度
功能:
*************************************************************************************/
void SetColorEdit(int iNum)
{
SetColor(4,14);
while (iNum--)
{
putchar(' ');
}
}
void SetColor(unsigned short ForeColor,unsigned short BackGroundColor)
{
HANDLE hCon=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hCon,(ForeColor%16)|(BackGroundColor%16*16));
}
/*******************************編輯框aUI函數(shù)*******************************************
名稱(chēng):編輯框aUI函數(shù)
參數(shù):
iLong 表示: 編輯框的長(zhǎng)度
iWide 表示: 編輯框的寬度
x 表示: 編輯框起始行位置
y 表示: 編輯框起始列位置
acBuffer
表示: 編輯框顯示的內(nèi)容
功能:
在x行y列制作一個(gè)長(zhǎng)為iLong寬為iWide的編輯框,框中文本顯示acBuffer字符串的內(nèi)容
*************************************************************************************/
void UI_EditBox(int iLong,int iWide,int x,int y,char acBuffer[30])
{
int i; /*寬*/
int j; /*長(zhǎng)*/
Gotoxy(x,y);
for(i = 0; i <= iWide; i++)
{
Gotoxy(x+i,y);
if(i == 0 || i == iWide)
{
for(j = 0; j <= iLong; j++)
{
if(i == 0 && j == 0)
{
printf("┏");
}
else if(i == 0 && j == iLong)
{
printf("┓");
}
else if(i == iWide && j == 0)
{
printf("┗");
}
else if(i == iWide && j == iLong)
{
printf("┛");
}
else
{
printf("┅");
}
}
}
else
{
Gotoxy(x+i,y);
printf ("┇");
Gotoxy(x+i,y+2*iLong);
printf ("┇");
}
putchar ('\n');
}
Gotoxy(x + 1,y + 2);
printf ("%s",acBuffer);
}
/*******************************文本框UI函數(shù)*******************************************
名稱(chēng):編輯框UI函數(shù)
參數(shù):
x 表示: 文本框起始行位置
y 表示: 文本框起始列位置
acBuffer
表示: 文本框顯示的內(nèi)容
功能:
在x行y列顯示acBuffer字符串的內(nèi)容
*************************************************************************************/
void UI_TestBox(int x,int y,char acBuffer[30])
{
Gotoxy(x,y);
printf ("%s",acBuffer);
}
/*******************************光標(biāo)移動(dòng)函數(shù)********************************
名稱(chēng):光標(biāo)移動(dòng)函數(shù)
參數(shù):
x 表示:行
y 表示:列
功能:
將光標(biāo)移動(dòng)至x行y列位置
**************************************************************************/
void Gotoxy(int x,int y)
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
HANDLE hConsoleOut;
hConsoleOut = GetStdHandle (STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);
csbiInfo.dwCursorPosition.X = y;
csbiInfo.dwCursorPosition.Y = x;
SetConsoleCursorPosition (hConsoleOut,csbiInfo.dwCursorPosition);
}
/*******************************控制輸入函數(shù)封裝************************************
名稱(chēng):允許輸入字母和數(shù)字的函數(shù)
參數(shù):
acStr 表示: 保存的數(shù)組
iMaxLen表示: 最大輸入字符數(shù)
iPutType表示:
0 (無(wú)控制) 1(只能輸入數(shù)字) 2(只能輸入字母)
3 (只能輸入數(shù)字和字母)
isPlaintext表示是否顯示明文 1表示明文
iTmp 表示:為1(第一位不為空就能按回車(chē)鍵)
為2(達(dá)到最大位數(shù)才能回車(chē))
為3(無(wú)控制)
**********************************************************************************/
int Glb_putString(char acStr[], int iMaxLen, int iPutType, int isPlaintext,int iTmp)
{
char Tmp;
int i = 0;
int j;
int flg;
for(j = 0;j < iMaxLen; j++)
{
acStr[j] = '\0';
}
while(1)
{
Tmp=getch();
//printf("%d",Tmp);
if(Tmp==27)
{
//printf("%d",Tmp);
return 1;
}
flg = 0;
if(Tmp == 13)
{
if(iTmp == 1) /*****第一位不為空就能按回車(chē)鍵*****/
{
if(acStr[0] != 0)
{
break;
}
}
else if(iTmp == 2) /******達(dá)到最大位數(shù)才能回車(chē)*****/
{
j = 0;
while(j < iMaxLen)
{
if(acStr[j] == '\0')
{
break;
}
j++;
}
if((j == iMaxLen))
{
flg = 1;
}
}
else if(iTmp == 3) /*******無(wú)控制*******/
{
break;
}
}
else if(Tmp == 8)
{
if(i > 0)
{
printf("\b \b");
acStr[--i] = '\0';
}
}
else
{
if(i < iMaxLen)
{
switch(iPutType)/****0(無(wú)控制) 1(只能輸入數(shù)字) 2(只能輸入字母) 3(只能輸入數(shù)字和字母)*****/
{
case Not:
{
if(isPlaintext == NotPwd)
{
putchar(Tmp);
}
else
{
putchar('*');
}
acStr[i++] = Tmp;
}break;
case Int:
{
if(Tmp >= '0' && Tmp <= '9')
{
if(isPlaintext == NotPwd)
{
putchar(Tmp);
}
else
{
putchar('*');
}
acStr[i++] = Tmp;
}
}break;
case Char:
{
if((Tmp >= 'A' && Tmp <= 'Z') || (Tmp >='a' && Tmp <='z'))
{
if(isPlaintext == NotPwd)
{
putchar(Tmp);
}
else
{
putchar('*');
}
acStr[i++] = Tmp;
}
}break;
case IntOrChar:
{
if((Tmp >= 'A' && Tmp <= 'Z') || (Tmp >='a' && Tmp <='z') || (Tmp >= '0' && Tmp <= '9'))
{
if(isPlaintext == NotPwd)
{
putchar(Tmp);
}
else
{
putchar('*');
}
acStr[i++] = Tmp;
}
}break;
}
}
}
if(flg == 1) break;
}
acStr[i] = '\0';
return 0;
}
/*******************************鏈表初始化函數(shù)********************************
名稱(chēng):鏈表初始化函數(shù)
參數(shù):
data:數(shù)據(jù)
head:鏈表頭指針
功能:
鏈表初始化
**************************************************************************/
void* LinkInit(void *data)
{
struct NODE *head;
head = (struct NODE*)malloc(sizeof(struct NODE));
if(head == NULL)
{
perror("linkinit error");
return NULL;
}
head->data = data;
head->NEXT = NULL;
return head;
}
/*******************************增加鏈表節(jié)點(diǎn)函數(shù)********************************
名稱(chēng):增加鏈表節(jié)點(diǎn)函數(shù)
參數(shù):
phead:鏈表頭節(jié)點(diǎn)
data:數(shù)據(jù)
len:要操作的鏈表節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)的大小
功能:
增加鏈表節(jié)點(diǎn)
**************************************************************************/
void LinkAddNode(struct NODE *phead, void *data, int len)
{
struct NODE *pNew;
struct NODE *pTemp;
pTemp = phead;
while(pTemp->NEXT != NULL)
{
pTemp = pTemp->NEXT;
}
pNew = (struct NODE *)malloc(sizeof(struct NODE));
if(pNew == NULL)
{
perror("LindAddNode error");
return;
}
else
{
pNew->data = malloc(len);
if(pNew->data == NULL)
{
perror("LindAddNode error");
return;
}
}
memcpy(pNew->data, data, len);
pNew->NEXT = NULL;
pTemp->NEXT = pNew;
return;
}
/*int DataInit()
{
int i;
struct MAN m[] =
{
{"1001", "admin", "123456", 0, 1},
{"1002", "manager", "123456", 1, 1},
{"1003", "waiter", "123456", 2, 1}
};
i = 0;
myhead = (struct NODE*)LinkInit(NULL);
for(i = 0; i < 3; i++)
{
LinkAddNode(myhead, &m[i], sizeof(m[i]));
}
return 0;
}*/
/*******************************釋放鏈表函數(shù)********************************
名稱(chēng):釋放鏈表函數(shù)
參數(shù):
phead:鏈表頭節(jié)點(diǎn)
功能:
釋放鏈表
**************************************************************************/
void LinkFreeNode(struct NODE *phead)
{
struct NODE *pTemp = phead;
//static int aaa = 0;
while(pTemp != NULL)
{
phead = phead->NEXT;
free(pTemp->data);
free(pTemp);
pTemp = phead;
//printf("釋放次數(shù)=%d\n", ++aaa);
}
return;
}
/*******************************打印鏈表函數(shù)********************************
名稱(chēng):打印鏈表函數(shù)
參數(shù):
phead:鏈表頭節(jié)點(diǎn)
myprint:函數(shù)指針
data:要打印的數(shù)據(jù)
f:要打印的位置的行數(shù)
功能:
打印鏈表
**************************************************************************/
void LinkPrint(struct NODE *phead, void(*myprint)(void* data,int f))
{
int i=5;
struct NODE *pTemp = phead->NEXT;
while(pTemp != NULL)
{
Gotoxy(i++, 3);
myprint(pTemp->data,i); //在第i行打印數(shù)據(jù)
pTemp = pTemp->NEXT;
}
}
/*******************************只打印在職人員信息節(jié)點(diǎn)函數(shù)********************************
名稱(chēng):只打印在職人員信息節(jié)點(diǎn)函數(shù)
參數(shù):
phead:鏈表頭節(jié)點(diǎn)
myprint:函數(shù)指針
data:要打印的數(shù)據(jù)
f:要打印的位置的行數(shù)
功能:
只打印在職人員信息節(jié)點(diǎn)
**************************************************************************/
void Man_Half_Print(struct NODE *phead, void(*myprint)(void* data,int f))
{
int i=5;
struct NODE *pTemp = phead->NEXT;
while(pTemp != NULL)
{
if(((struct MAN*)(pTemp->data))->flag==49) //判斷flag是否為1,若為1則為在職,將其打印
{
Gotoxy(i++, 3);
myprint(pTemp->data,i);
}
pTemp = pTemp->NEXT;
}
}
/*******************************只打印在用會(huì)員信息節(jié)點(diǎn)函數(shù)********************************
名稱(chēng):只打印在用會(huì)員信息節(jié)點(diǎn)函數(shù)
參數(shù):
phead:鏈表頭節(jié)點(diǎn)
myprint:函數(shù)指針
data:要打印的數(shù)據(jù)
f:要打印的位置的行數(shù)
功能:
只打印在用會(huì)員信息節(jié)點(diǎn)
**************************************************************************/
void As_Half_Print(struct NODE *phead, void(*myprint)(void* data,int f))
{
int i=5;
struct NODE *pTemp = phead->NEXT;
while(pTemp != NULL)
{
if(((struct ASSOCIATOR*)(pTemp->data))->flag==49)
{
Gotoxy(i++, 3);
myprint(pTemp->data,i);
}
pTemp = pTemp->NEXT;
}
}
/*******************************只打印在用臺(tái)桌信息節(jié)點(diǎn)函數(shù)********************************
名稱(chēng):只打印在用臺(tái)桌信息節(jié)點(diǎn)函數(shù)
參數(shù):
phead:鏈表頭節(jié)點(diǎn)
myprint:函數(shù)指針
data:要打印的數(shù)據(jù)
f:要打印的位置的行數(shù)
功能:
只打印在用臺(tái)桌信息節(jié)點(diǎn)
**************************************************************************/
void Table_Half_Print(struct NODE *phead, void(*myprint)(void* data,int f))
{
int i=5;
struct NODE *pTemp = phead->NEXT;
while(pTemp != NULL)
{
if(((struct TABLE*)(pTemp->data))->role==49)
{
Gotoxy(i++, 3);
myprint(pTemp->data,i);
}
pTemp = pTemp->NEXT;
}
}
/*******************************只打印在用菜譜信息節(jié)點(diǎn)函數(shù)********************************
名稱(chēng):只打印在用菜譜信息節(jié)點(diǎn)函數(shù)
參數(shù):
phead:鏈表頭節(jié)點(diǎn)
myprint:函數(shù)指針
data:要打印的數(shù)據(jù)
f:要打印的位置的行數(shù)
功能:
只打印在用菜譜信息節(jié)點(diǎn)
**************************************************************************/
void Dish_Half_Print(struct NODE *phead, void(*myprint)(void* data,int f))
{
int i=4;
struct NODE *pTemp = phead->NEXT;
while(pTemp != NULL)
{
if(((struct DISH*)(pTemp->data))->flag==49)
{
Gotoxy(i++, 3);
myprint(pTemp->data,i);
}
pTemp = pTemp->NEXT;
}
}
/*******************************打印每個(gè)員工信息節(jié)點(diǎn)函數(shù)********************************
名稱(chēng):打印每個(gè)員工信息節(jié)點(diǎn)函數(shù)
參數(shù):
data:要打印的數(shù)據(jù)
i:在第i行打印
功能:
打印每個(gè)員工信息節(jié)點(diǎn)
**************************************************************************/
void ManPrint(void *data,int i)
{
Gotoxy(i, 3);
printf("%s",((struct MAN*)data)->id);
Gotoxy(i, 19);
printf("%s",((struct MAN*)data)->name);
Gotoxy(i, 35);
printf("*******");
Gotoxy(i, 51);
if(((struct MAN*)data)->role==48)
printf("管理員");
if(((struct MAN*)data)->role==49)
printf("經(jīng)理");
if(((struct MAN*)data)->role==50)
printf("服務(wù)員");
Gotoxy(i, 67);
if(((struct MAN*)data)->flag==48)
printf("離職");
if(((struct MAN*)data)->flag==49)
printf("在職");
}
/*******************************打印每會(huì)員信息節(jié)點(diǎn)函數(shù)********************************
名稱(chēng):打印每個(gè)會(huì)員信息節(jié)點(diǎn)函數(shù)
參數(shù):
data:要打印的數(shù)據(jù)
i:在第i行打印
功能:
打印每個(gè)會(huì)員信息節(jié)點(diǎn)
**************************************************************************/
void AsPrint(void *data,int i)
{
Gotoxy(i, 3);
printf("%s",((struct ASSOCIATOR*)data)->no);
Gotoxy(i, 19);
printf("%s",((struct ASSOCIATOR*)data)->name);
Gotoxy(i, 35);
printf("%s",((struct ASSOCIATOR*)data)->score);
Gotoxy(i, 51);
printf("%c",((struct ASSOCIATOR*)data)->flag);
}
/*******************************打印每個(gè)臺(tái)桌信息節(jié)點(diǎn)函數(shù)********************************
名稱(chēng):打印每個(gè)臺(tái)桌信息節(jié)點(diǎn)函數(shù)
參數(shù):
data:要打印的數(shù)據(jù)
i:在第i行打印
功能:
打印每個(gè)臺(tái)桌信息節(jié)點(diǎn)
**************************************************************************/
void TablePrint(void *data,int i)
{
Gotoxy(i, 3);
printf("%s",((struct TABLE*)data)->no);
Gotoxy(i, 24);
printf("%s",((struct TABLE*)data)->flag);
Gotoxy(i, 45);
printf("%s",((struct TABLE*)data)->des);
}
/*******************************打印每個(gè)菜品信息節(jié)點(diǎn)函數(shù)********************************
名稱(chēng):打印每個(gè)菜品信息節(jié)點(diǎn)函數(shù)
參數(shù):
data:要打印的數(shù)據(jù)
i:在第i行打印
功能:
打印每個(gè)菜品信息節(jié)點(diǎn)
**************************************************************************/
void DishPrint(void *data,int i)
{
Gotoxy(i, 3);
printf("%s",((struct DISH*)data)->no);
Gotoxy(i, 24);
printf("%s",((struct DISH*)data)->name);
Gotoxy(i, 45);
printf("¥%s",((struct DISH*)data)->price);
}
/*******************************點(diǎn)菜并顯示函數(shù)********************************
名稱(chēng):點(diǎn)菜并顯示函數(shù)
參數(shù):
phead:鏈表頭結(jié)點(diǎn)
data:訂單中點(diǎn)的菜的節(jié)點(diǎn)數(shù)據(jù)
pTmp:指向菜譜節(jié)點(diǎn)的指針
money:點(diǎn)的菜的單價(jià)的合計(jì)
f:標(biāo)志位
n:份數(shù)
功能:
點(diǎn)菜并顯示
**************************************************************************/
void Link_Dish_Print(struct NODE *phead,void *data)
{
int i=5,j,n=0,money=0,f;
struct NODE *pTemp = phead->NEXT;
while(pTemp != NULL)
{
f=0;
Gotoxy(i, 3);
for(j=0;j<11;j++)
{
if(strcmp((((struct ORDER*)data)->x[j]).no,((struct DISH*)(pTemp->data))->no)==0) //找到訂單對(duì)應(yīng)的 點(diǎn)的菜 的節(jié)點(diǎn),并從菜譜中獲取該菜的單價(jià)
{
n=number_change((((struct ORDER*)data)->x[j]).num)+n;
money=number_change(((struct DISH*)(pTemp->data))->price)*number_change((((struct ORDER*)data)->x[j]).num)+money;
order_dish_difprint(pTemp->data,i++,number_change((((struct ORDER*)data)->x[j]).num)); //有“*”號(hào)的打印函數(shù)
f=1;
}
}
if(f==0 && ((struct DISH*)(pTemp->data))->flag==49)
order_dish_print(pTemp->data,i++); //無(wú)“*”號(hào)的打印函數(shù)
pTemp = pTemp->NEXT;
//i++;
}
char_change(money,((struct ORDER*)data)->money); //將char類(lèi)型轉(zhuǎn)換為int類(lèi)型的函數(shù)
Gotoxy(18, 44);
printf("%d",money);
Gotoxy(18, 66);
printf("%d",n);
}
/*******************************打印點(diǎn)菜界面中每個(gè)菜品信息節(jié)點(diǎn)函數(shù)********************************
名稱(chēng):打印點(diǎn)菜界面中每個(gè)菜品信息節(jié)點(diǎn)函數(shù)
參數(shù):
data:要打印的數(shù)據(jù)
i:在第i行打印
功能:
打印點(diǎn)菜界面中每個(gè)菜品信息節(jié)點(diǎn)
**************************************************************************/
void order_dish_print(void *data,int i)
{
Gotoxy(i, 4);
printf("%s",((struct DISH*)data)->no);
Gotoxy(i, 24);
printf("%s",((struct DISH*)data)->name);
Gotoxy(i, 45);
printf("¥%s",((struct DISH*)data)->price);
Gotoxy(i, 66);
printf("%s",((struct DISH*)data)->num);
}
/*******************************打印點(diǎn)菜界面中帶“*”的每個(gè)菜品信息節(jié)點(diǎn)函數(shù)********************************
名稱(chēng):打印點(diǎn)菜界面中帶“*”的每個(gè)菜品信息節(jié)點(diǎn)函數(shù)
參數(shù):
data:要打印的數(shù)據(jù)
i:在第i行打印
功能:
打印點(diǎn)菜界面中帶“*”的每個(gè)菜品信息節(jié)點(diǎn)
**************************************************************************/
void order_dish_difprint(void *data,int i,int num)
{
Gotoxy(i, 3);
putchar('*');
Gotoxy(i, 4);
printf("%s",((struct DISH*)data)->no);
Gotoxy(i, 24);
printf("%s",((struct DISH*)data)->name);
Gotoxy(i, 45);
printf("¥%s",((struct DISH*)data)->price);
Gotoxy(i, 66);
printf("%d",num);
}
/*******************************打印買(mǎi)單界面中每個(gè)訂單節(jié)點(diǎn)信息函數(shù)********************************
名稱(chēng):打印買(mǎi)單界面中每個(gè)訂單節(jié)點(diǎn)信息函數(shù)
參數(shù):
data:要打印的數(shù)據(jù)
i:在第i行打印
功能:
打印買(mǎi)單界面中每個(gè)訂單節(jié)點(diǎn)信息
**************************************************************************/
void Order_Checkout_Print(void *data,int i)
{
Gotoxy(i, 3);
printf("%s",((struct ORDER*)data)->order_no);
Gotoxy(i, 24);
printf("¥%s",((struct ORDER*)data)->money);
Gotoxy(i, 45);
printf("%s",((struct ORDER*)data)->order_flag);
}
/*******************************打印營(yíng)業(yè)額查詢(xún)界面中每個(gè)已買(mǎi)單訂單節(jié)點(diǎn)信息函數(shù)********************************
名稱(chēng):打印營(yíng)業(yè)額查詢(xún)界面中每個(gè)已買(mǎi)單訂單節(jié)點(diǎn)信息函數(shù)
參數(shù):
data:要打印的數(shù)據(jù)
i:在第i行打印
功能:
打印營(yíng)業(yè)額查詢(xún)界面中每個(gè)已買(mǎi)單訂單節(jié)點(diǎn)信息
**************************************************************************/
void Order_Checkouted_Print(void *data,int i)
{
Gotoxy(i, 3);
printf("%s",((struct ORDER*)data)->order_no);
Gotoxy(i, 24);
printf("%s",((struct ORDER*)data)->time);
Gotoxy(i, 45);
printf("¥%s",((struct ORDER*)data)->money);
}
/*******************************打印訂單查詢(xún)界面中每個(gè)訂單節(jié)點(diǎn)信息函數(shù)********************************
名稱(chēng):打印訂單查詢(xún)界面中每個(gè)訂單節(jié)點(diǎn)信息函數(shù)
參數(shù):
data:要打印的數(shù)據(jù)
i:在第i行打印
功能:
打印訂單查詢(xún)界面中每個(gè)訂單節(jié)點(diǎn)信息
**************************************************************************/
void Check_Order_id(void *data,int i)
{
Gotoxy(i, 3);
printf("%s",((struct ORDER*)data)->order_no);
Gotoxy(i, 18);
printf("%s",((struct ORDER*)data)->time);
Gotoxy(i, 33);
printf("¥%s",((struct ORDER*)data)->money);
Gotoxy(i, 48);
printf("%s",((struct ORDER*)data)->order_flag);
}
/*******************************從鏈表寫(xiě)入數(shù)據(jù)到文件函數(shù)********************************
名稱(chēng):從鏈表寫(xiě)入數(shù)據(jù)到文件函數(shù)
參數(shù):
phead:鏈表頭指針
datalen:?jiǎn)蝹€(gè)節(jié)點(diǎn)的大小
f:標(biāo)志位,判斷要寫(xiě)入哪個(gè)的文件
功能:
從鏈表寫(xiě)入數(shù)據(jù)到文件
**************************************************************************/
int linktofile(struct NODE *phead, int datalen,int f)
{
FILE *fp;
struct NODE *pTemp = phead->NEXT;
if(f==1)
fp = fopen("./maninfo.txt", "wb+"); //寫(xiě)入人員文件
else if(f==2)
fp = fopen("./tableinfo.txt", "wb+"); //寫(xiě)入臺(tái)桌文件
else if(f==3)
fp = fopen("./dishinfo.txt", "wb+"); //寫(xiě)入菜譜文件
else if(f==4)
fp = fopen("./orderinfo.txt", "wb+"); //寫(xiě)入訂單文件
else if(f==5)
fp = fopen("./associatorinfo.txt", "wb+"); //寫(xiě)入會(huì)員文件
if(fp == NULL)
{
perror("open file(man)");
return -1;
}
while(pTemp != NULL)
{
fwrite(pTemp->data, 1, datalen, fp);
pTemp = pTemp->NEXT;
}
LinkFreeNode(phead);
if(f==4) //釋放內(nèi)存中的鏈表
orderhead = (struct NODE*)LinkInit(NULL);
if(f==5)
ashead = (struct NODE*)LinkInit(NULL);
if(f!=4 && f!=5)
myhead = (struct NODE*)LinkInit(NULL);
fclose(fp);
return 0;
}
/*******************************從文件中讀出數(shù)據(jù)到鏈表函數(shù)********************************
名稱(chēng):從文件中讀出數(shù)據(jù)到鏈表函數(shù)
參數(shù):
phead:鏈表頭指針
datalen:?jiǎn)蝹€(gè)節(jié)點(diǎn)的大小
f:標(biāo)志位,判斷要寫(xiě)入哪個(gè)的文件
功能:
從文件中讀出數(shù)據(jù)到鏈表
**************************************************************************/
void linkfromfile(struct NODE *phead,int datalen,int f)
{
int x,i;
FILE *fp;
void *q;
q=(void *)malloc(datalen);
//struct MAN *q;
//q=new MAN;
memset(q, 0, sizeof(datalen));
if(f==1)
fp = fopen("./maninfo.txt", "rb+");
else if(f==2)
fp = fopen("./tableinfo.txt", "rb+");
else if(f==3)
fp = fopen("./dishinfo.txt", "rb+");
else if(f==4)
fp = fopen("./orderinfo.txt", "rb+");
else if(f==5)
fp = fopen("./associatorinfo.txt", "rb+");
if(fp == NULL)
{
return ;
}
fseek(fp,0,SEEK_END);
x=ftell(fp);
rewind(fp);
//printf("%d\n",(x/datalen));
for(i=0;i<(x/datalen);i++)
{
fread(q,1,datalen,fp);
if(q==NULL)
{
printf("無(wú)數(shù)據(jù)記錄\n");
}
LinkAddNode(phead,q,datalen);
}
free(q);
q=NULL;
fclose(fp);
}
/*******************************從鏈表中獲取指定節(jié)點(diǎn)函數(shù)********************************
名稱(chēng):從鏈表中獲取指定節(jié)點(diǎn)函數(shù)
參數(shù):
iIndex:指定位置的參數(shù)
phead:鏈表頭指針
f:標(biāo)志位,判斷是對(duì)哪種鏈表的操作
功能:
從鏈表中獲取指定節(jié)點(diǎn)
**************************************************************************/
NODE* LIST_GetNode(int iIndex,struct NODE *phead,int f)
{
int n;
struct NODE *tmp=NULL;
tmp=phead->NEXT;
while(tmp!=NULL)
{
if(f==1)
n=number_change(((struct MAN *)(tmp->data))->id);
else if(f==2)
n=number_change(((struct TABLE *)(tmp->data))->no);
else if(f==3)
n=number_change(((struct DISH *)(tmp->data))->no);
else if(f==4)
n=number_change(((struct ASSOCIATOR *)(tmp->data))->no);
if(n==iIndex)
break;
tmp=tmp->NEXT;
}
if(tmp== NULL)
{
perror("未找到指定的結(jié)點(diǎn)索引");
return 0;
}
return tmp;
}
/*******************************從鏈表中刪除指定節(jié)點(diǎn)函數(shù)(真刪除)********************************
名稱(chēng):從鏈表中刪除指定節(jié)點(diǎn)函數(shù)
參數(shù):
iIndex:指定位置的參數(shù)
phead:鏈表頭指針
f:標(biāo)志位,判斷是對(duì)哪種鏈表的操作
功能:
從鏈表中刪除指定節(jié)點(diǎn)
**************************************************************************/
void LIST_Del(int iIndex,struct NODE *phead,int f)
{
int n;
struct NODE *tmp=NULL,*pre=NULL;
tmp=phead->NEXT;
pre=phead;
while(tmp!=NULL)
{
if(f==1)
n=number_change(((struct MAN *)(tmp->data))->id);
else if(f==2)
n=number_change(((struct TABLE *)(tmp->data))->no);
else if(f==3)
n=number_change(((struct DISH *)(tmp->data))->no);
else if(f==4)
n=number_change(((struct ASSOCIATOR *)(tmp->data))->no);
if(n==iIndex)
break;
pre=tmp;
tmp=tmp->NEXT;
//tmp=tmp->NEXT;
}
//printf("%d\n",n);
if(tmp== NULL)
{
perror("未找到指定的結(jié)點(diǎn)索引");
return ;
}
pre->NEXT=tmp->NEXT;
free(tmp);
return;
}
/*******************************從鏈表中刪除指定節(jié)點(diǎn)函數(shù)(假刪除)********************************
名稱(chēng):從鏈表中刪除指定節(jié)點(diǎn)函數(shù)
參數(shù):
iIndex:指定位置的參數(shù)
phead:鏈表頭指針
f:標(biāo)志位,判斷是對(duì)哪種鏈表的操作
功能:
從鏈表中刪除指定節(jié)點(diǎn)
**************************************************************************/
void LIST_Del_FS(int iIndex,struct NODE *phead,int f)
{
int n;
struct NODE *tmp;
tmp=phead->NEXT;
while(tmp!=NULL)
{
if(f==1)
n=number_change(((struct MAN *)(tmp->data))->id);
else if(f==2)
n=number_change(((struct TABLE *)(tmp->data))->no);
else if(f==3)
n=number_change(((struct DISH *)(tmp->data))->no);
else if(f==4)
n=number_change(((struct ASSOCIATOR *)(tmp->data))->no);
if(n==iIndex)
break;
tmp=tmp->NEXT;
}
if(tmp== NULL) //改變節(jié)點(diǎn)的狀態(tài)
{
perror("未找到指定的結(jié)點(diǎn)索引");
return ;
}
if(f==1)
((struct MAN *)(tmp->data))->flag=48;
if(f==2)
((struct TABLE *)(tmp->data))->role=48;
if(f==3)
((struct DISH *)(tmp->data))->flag=48;
if(f==4)
((struct ASSOCIATOR *)(tmp->data))->flag=48;
return;
}
/*******************************將char類(lèi)型轉(zhuǎn)換為int類(lèi)型的函數(shù)********************************
名稱(chēng):將char類(lèi)型轉(zhuǎn)換為int類(lèi)型的函數(shù)
參數(shù):
id:char類(lèi)型數(shù)組指針
功能:
將char類(lèi)型轉(zhuǎn)換為int類(lèi)型的
**************************************************************************/
int number_change(char *id)
{
int num=0,i,n=1;
for(i=0;i<strlen(id);i++)
{
num=(id[strlen(id)-i-1]-48)*n+num;
n=n*10;
}
return num;
}
/*******************************將int類(lèi)型轉(zhuǎn)換為char類(lèi)型的函數(shù)********************************
名稱(chēng):將int類(lèi)型轉(zhuǎn)換為char類(lèi)型的函數(shù)
參數(shù):
n: int類(lèi)型數(shù)據(jù)
p:char類(lèi)型數(shù)組指針
功能:
將int類(lèi)型轉(zhuǎn)換為char類(lèi)型的
**************************************************************************/
void char_change(int n,char *p)
{
int num[10+1];
int i=0,j=0;
memset(p,0,sizeof(p));
while(n)
{
num[i]=n%10;
n=n/10;
i++;
}
while(i)
{
p[j++]=num[--i]+48;
}
}
/*******************************登錄時(shí)的人員識(shí)別函數(shù)********************************
名稱(chēng):登錄時(shí)的人員識(shí)別函數(shù)
參數(shù):
acStr1[]: 輸入的用戶(hù)名
acStr2[]:輸入的密碼
datalen:?jiǎn)蝹€(gè)節(jié)點(diǎn)的大小
功能:
登錄時(shí)的人員識(shí)別
**************************************************************************/
char real_identifine(char acStr1[],char acStr2[],int datalen)
{
int f;
struct NODE *tmp=NULL;
if(!strcmp(acStr1,"admin")) //超級(jí)用戶(hù)
{
if(!strcmp(acStr2,"123456"))
{
return '3';
}
else
printf("密碼錯(cuò)誤!");
}
linkfromfile(myhead,datalen,1);
tmp=myhead->NEXT;
while(tmp) //遍歷人員鏈表查找是否存在,如果存在返回其對(duì)應(yīng)角色
{
if(!strcmp(acStr1,((struct MAN *)(tmp->data))->id))
{
if(!strcmp(acStr2,((struct MAN *)(tmp->data))->pwd))
{
return ((struct MAN *)(tmp->data))->role;
}
else
printf("密碼錯(cuò)誤!");
}
tmp=tmp->NEXT;
}
printf("用戶(hù)不存在!");
/*if(tmp== NULL)
{
perror("未找到指定的結(jié)點(diǎn)索引");
return 0;
}*/
}
/*******************************初始化訂單節(jié)點(diǎn)函數(shù)********************************
名稱(chēng):初始化訂單節(jié)點(diǎn)函數(shù)
參數(shù):
no:訂單對(duì)應(yīng)的臺(tái)桌編號(hào)
n:記錄訂單個(gè)數(shù)的緩沖數(shù)據(jù)
m:創(chuàng)建的訂單節(jié)點(diǎn)
功能:
初始化訂單節(jié)點(diǎn)
**************************************************************************/
void OrderData(char *no)
{
time_t t=time(0);
char time[11];
int n;
struct ORDER m;
memset(&m,0,sizeof(struct ORDER));
n=1000+link_sum(orderhead,sizeof(struct ORDER),4);
char_change(n,m.order_no);
//memcpy(m.man_id,id,5);
strcpy(m.man_id,waiter_ID);
//strcpy(m.man_id,"1001");
memcpy(m.table_no,no,11);
strftime(time, sizeof(time), "%Y%m%d",localtime(&t));
memset(m.time,0,sizeof(m.time));
strcpy(m.time,time);
strcpy(m.order_flag,"未付款");
strcpy(m.money,"0");
memset(m.x,0,sizeof(m.x));
linkfromfile(orderhead,sizeof(m),4); //從文件中讀出訂單鏈表
LinkAddNode(orderhead, &m, sizeof(m)); //在鏈表中加入新創(chuàng)建的訂單節(jié)點(diǎn)
linktofile(orderhead, sizeof(m),4); //將鏈表寫(xiě)入文件
}
/*******************************計(jì)算文件中節(jié)點(diǎn)個(gè)數(shù)函數(shù)********************************
名稱(chēng):計(jì)算文件中節(jié)點(diǎn)個(gè)數(shù)函數(shù)
參數(shù):
phead:鏈表頭指針
datalen:?jiǎn)蝹€(gè)節(jié)點(diǎn)的大小
f:標(biāo)志位,判斷是哪個(gè)文件
功能:
計(jì)算文件中節(jié)點(diǎn)個(gè)數(shù)
**************************************************************************/
int link_sum(struct NODE *phead,int datalen,int f)
{
int x,i;
FILE *fp;
if(f==1)
fp = fopen("./maninfo.txt", "rb+");
else if(f==2)
fp = fopen("./tableinfo.txt", "rb+");
else if(f==3)
fp = fopen("./dishinfo.txt", "rb+");
else if(f==4)
fp = fopen("./orderinfo.txt", "rb+");
else if(f==5)
fp = fopen("./associatorinfo.txt", "rb+");
if(fp == NULL)
{
return 0;
}
fseek(fp,0,SEEK_END);
x=ftell(fp);
rewind(fp);
return (x/datalen);
fclose(fp);
}
/*******************************在點(diǎn)菜界面中顯示被占用的臺(tái)桌的函數(shù)********************************
名稱(chēng):在點(diǎn)菜界面中顯示被占用的臺(tái)桌的函數(shù)
參數(shù):
i:行數(shù)
pTemp:鏈表中節(jié)點(diǎn)的指針
功能:
在點(diǎn)菜界面中顯示被占用的臺(tái)桌的
**************************************************************************/
void busy_table()
{
int i=5;
struct NODE *pTemp;
ui_function_table();
linkfromfile(myhead,sizeof(struct TABLE),2); //從文件中讀出臺(tái)桌鏈表
pTemp = myhead->NEXT;
while(pTemp != NULL)
{
if(strcmp(((struct TABLE*)(pTemp->data))->flag,"占用")==0 && ((struct TABLE*)(pTemp->data))->role==49)//選取被占用且在用的臺(tái)桌將其打印
{
Gotoxy(i++, 3);
TablePrint(pTemp->data,i);
}
pTemp = pTemp->NEXT;
}
LinkFreeNode(myhead);
myhead = (struct NODE*)LinkInit(NULL);
}
/*******************************在訂單查詢(xún)界面中顯示未買(mǎi)單的訂單信息函數(shù)********************************
名稱(chēng):在訂單查詢(xún)界面中顯示未買(mǎi)單的訂單信息函數(shù)
參數(shù):
i:行數(shù)
pTemp:鏈表中節(jié)點(diǎn)的指針
功能:
在訂單查詢(xún)界面中顯示未買(mǎi)單的訂單信息
**************************************************************************/
void un_checkout()
{
int i=5;
struct NODE *pTemp;
ui_function_checkout();
linkfromfile(orderhead,sizeof(struct ORDER),4);
pTemp = orderhead->NEXT;
while(pTemp != NULL)
{
if(strcmp(((struct ORDER*)(pTemp->data))->order_flag,"未付款")==0) //選取未付款的訂單將其打印
{
Gotoxy(i++, 3);
Order_Checkout_Print(pTemp->data,i);
}
pTemp = pTemp->NEXT;
}
LinkFreeNode(orderhead);
orderhead = (struct NODE*)LinkInit(NULL);
}
/*******************************在營(yíng)業(yè)額查詢(xún)界面中顯示已買(mǎi)單的訂單信息函數(shù)********************************
名稱(chēng):在營(yíng)業(yè)額查詢(xún)界面中顯示已買(mǎi)單的訂單信息函數(shù)
參數(shù):
begin:開(kāi)始時(shí)間
end: 結(jié)束時(shí)間
sum:總計(jì)金額
功能:
在營(yíng)業(yè)額查詢(xún)界面中顯示已買(mǎi)單的訂單信息
**************************************************************************/
void checkout_ed(char *begin,char *end)
{
int i=5,f=0,sum=0;
struct NODE *pTemp;
ui_function_checkmoney();
linkfromfile(orderhead,sizeof(struct ORDER),4);
pTemp = orderhead->NEXT;
while(pTemp != NULL)
{
if(number_change(((struct ORDER*)(pTemp->data))->time)>=number_change(begin) && number_change(((struct ORDER*)(pTemp->data))->time)<=number_change(end) && strcmp(((struct ORDER*)(pTemp->data))->order_flag,"已付款")==0)
{
Gotoxy(i++, 3);
Order_Checkouted_Print(pTemp->data,i);
f=1;
sum=number_change(((struct ORDER*)(pTemp->data))->money)+sum;
}
pTemp = pTemp->NEXT;
}
Gotoxy(15, 60);
printf("¥%d",sum);
if(f==0)
{
Gotoxy(6, 20);
printf("暫無(wú)數(shù)據(jù)!");
}
LinkFreeNode(orderhead);
orderhead = (struct NODE*)LinkInit(NULL);
}
/*******************************在訂單查詢(xún)界面中顯示已買(mǎi)單和未買(mǎi)單的訂單信息函數(shù)********************************
名稱(chēng):在訂單查詢(xún)界面中顯示已買(mǎi)單和未買(mǎi)單的訂單信息
參數(shù):
begin:開(kāi)始時(shí)間
end: 結(jié)束時(shí)間
g: 指定是要查詢(xún)已買(mǎi)單,還是未買(mǎi)單
功能:
在訂單查詢(xún)界面中顯示已買(mǎi)單和未買(mǎi)單的訂單信息
**************************************************************************/
void check_order_id(char *begin,char *end,int g)
{
int i=5,f=0,j=5;
struct NODE *pTemp,*p;
ui_function_checkorderid();
linkfromfile(orderhead,sizeof(struct ORDER),4);
linkfromfile(myhead,sizeof(struct MAN),1);
pTemp = orderhead->NEXT;
p=myhead->NEXT;
while(pTemp != NULL && g==50) //打印已付款
{
if(number_change(((struct ORDER*)(pTemp->data))->time)>=number_change(begin) && number_change(((struct ORDER*)(pTemp->data))->time)<=number_change(end) && strcmp(((struct ORDER*)(pTemp->data))->order_flag,"已付款")==0)
{
while(p != NULL)
{
if(strcmp(((struct MAN*)(p->data))->id,((struct ORDER*)(pTemp->data))->man_id)==0)
{
Gotoxy(j++, 63);
printf("%s",((struct MAN*)(p->data))->name);
}
p=p->NEXT;
}
p=myhead->NEXT;
Gotoxy(i, 3);
Check_Order_id(pTemp->data,i++);
f=1;
}
pTemp = pTemp->NEXT;
}
pTemp = orderhead->NEXT;
p=myhead->NEXT;
while(pTemp != NULL && g==49) //打印未付款
{
if(number_change(((struct ORDER*)(pTemp->data))->time)>=number_change(begin) && number_change(((struct ORDER*)(pTemp->data))->time)<=number_change(end) && strcmp(((struct ORDER*)(pTemp->data))->order_flag,"未付款")==0)
{
while(p != NULL)
{
if(strcmp(((struct MAN*)(p->data))->id,((struct ORDER*)(pTemp->data))->man_id)==0)
{
Gotoxy(j++, 63);
printf("%s",((struct MAN*)(p->data))->name);
}
p=p->NEXT;
}
p=myhead->NEXT;
Gotoxy(i, 3);
Check_Order_id(pTemp->data,i++);
f=1;
}
pTemp = pTemp->NEXT;
}
if(f==0)
{
Gotoxy(6, 20);
printf("暫無(wú)數(shù)據(jù)!");
}
LinkFreeNode(orderhead);
orderhead = (struct NODE*)LinkInit(NULL);
LinkFreeNode(myhead);
myhead = (struct NODE*)LinkInit(NULL);
}
/*******************************在營(yíng)收查詢(xún)界面中顯示已買(mǎi)單和未買(mǎi)單的訂單信息函數(shù)********************************
名稱(chēng):在營(yíng)收查詢(xún)界面中顯示已買(mǎi)單的訂單信息函數(shù)
參數(shù):
begin:開(kāi)始時(shí)間
end: 結(jié)束時(shí)間
sum:某服務(wù)員的總營(yíng)業(yè)額
count:全體服務(wù)員的營(yíng)收總額
功能:
在營(yíng)收查詢(xún)界面中顯示已買(mǎi)單的訂單信息
**************************************************************************/
void check_waiter_money(char *begin,char *end)
{
int i=5,sum,count=0;
struct NODE *pTemp;
struct NODE *p;
ui_count_director();
linkfromfile(orderhead,sizeof(struct ORDER),4);
linkfromfile(myhead,sizeof(struct MAN),1);
pTemp = orderhead->NEXT;
p=myhead->NEXT;
while(p != NULL)
{
sum=0;
if(((struct MAN*)(p->data))->role==50)
{
while(pTemp != NULL) //選取訂單中時(shí)間符合要求的,已付款的,對(duì)應(yīng)員工的訂單,并合計(jì)
{
if(number_change(((struct ORDER*)(pTemp->data))->time)>=number_change(begin) && number_change(((struct ORDER*)(pTemp->data))->time)<=number_change(end))
if(strcmp(((struct ORDER*)(pTemp->data))->order_flag,"已付款")==0)
if(strcmp(((struct MAN*)(p->data))->id,((struct ORDER*)(pTemp->data))->man_id)==0)
{
sum=number_change(((struct ORDER*)(pTemp->data))->money)+sum;
}
pTemp = pTemp->NEXT;
}
pTemp = orderhead->NEXT;
Gotoxy(i, 3);
printf("%s",((struct MAN*)(p->data))->name);
Gotoxy(i, 48);
printf("¥%d",sum);
i++;
}
count=count+sum;
Gotoxy(16, 60);
printf("¥%d",count);
p=p->NEXT;
}
/*if(f==0)
{
Gotoxy(24, 10);
printf("暫無(wú)數(shù)據(jù)!");
}*/
LinkFreeNode(orderhead);
orderhead = (struct NODE*)LinkInit(NULL);
LinkFreeNode(myhead);
myhead = (struct NODE*)LinkInit(NULL);
}
/*******************************加菜函數(shù)********************************
名稱(chēng):加菜函數(shù)
參數(shù):
data:訂單節(jié)點(diǎn)數(shù)據(jù)部分
no:要指定的菜品編號(hào)
num:點(diǎn)菜的份數(shù)
功能:
加菜
**************************************************************************/
void add_dish(void *data,char *no,char *num)
{
int i,n;
for(i=0;i<11;i++)
{
if(strcmp((((struct ORDER*)data)->x[i]).no,no)==0) //找到菜品的單價(jià)
{
n=number_change((((struct ORDER*)data)->x[i]).num)+number_change(num);
char_change(n,(((struct ORDER*)data)->x[i]).num);
//puts((((struct ORDER*)data)->x[i]).num);
return;
}
}
for(i=0;i<11;i++)
{
if((((struct ORDER*)data)->x[i]).no[0]=='\0') //找到指定訂單節(jié)點(diǎn),加入點(diǎn)的菜的編號(hào)和份數(shù)
{
strcpy((((struct ORDER*)data)->x[i]).no,no);
n=number_change((((struct ORDER*)data)->x[i]).num)+number_change(num);
char_change(n,(((struct ORDER*)data)->x[i]).num);
return;
}
}
}
/*******************************退菜函數(shù)********************************
名稱(chēng):退菜函數(shù)
參數(shù):
data:訂單節(jié)點(diǎn)數(shù)據(jù)部分
no:要指定的菜品編號(hào)
num:點(diǎn)菜的份數(shù)
功能:
退菜
**************************************************************************/
void sub_dish(void *data,char *no,char *num)
{
int i,n;
for(i=0;i<11;i++)
{
if(strcmp((((struct ORDER*)data)->x[i]).no,no)==0)
{
n=number_change((((struct ORDER*)data)->x[i]).num)-number_change(num);
char_change(n,((((struct ORDER*)data)->x[i]).num));
puts((((struct ORDER*)data)->x[i]).num);
if(n==0)
{
char_change(n,(((struct ORDER*)data)->x[i]).num);
memset((((struct ORDER*)data)->x[i]).no,0,sizeof((((struct ORDER*)data)->x[i]).no));
}
return;
}
}
}
更多學(xué)習(xí)資料請(qǐng)關(guān)注專(zhuān)題《管理系統(tǒng)開(kāi)發(fā)》。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C語(yǔ)言實(shí)現(xiàn)餐飲點(diǎn)餐管理系統(tǒng)
- 基于C語(yǔ)言實(shí)現(xiàn)點(diǎn)餐系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)點(diǎn)餐系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)餐飲管理與點(diǎn)餐系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)食堂就餐管理系統(tǒng)(帶鏈表)
- C語(yǔ)言代碼實(shí)現(xiàn)點(diǎn)餐系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)餐飲結(jié)賬管理系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)電話(huà)訂餐管理系統(tǒng)
- 基于C語(yǔ)言代碼實(shí)現(xiàn)點(diǎn)餐系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)餐廳點(diǎn)餐系統(tǒng)
相關(guān)文章
C語(yǔ)言中初始、增加和刪除進(jìn)程信號(hào)的操作方法簡(jiǎn)介
這篇文章主要介紹了C語(yǔ)言中初始、增加和刪除進(jìn)程信號(hào)的操作方法簡(jiǎn)介,分別是sigemptyset函數(shù)、sigaddset函數(shù)和sigdelset函數(shù)的用法,需要的朋友可以參考下2015-09-09
你真的理解C語(yǔ)言qsort函數(shù)嗎?帶你深度剖析qsort函數(shù)
這篇文章主要介紹了你真的理解C語(yǔ)言qsort函數(shù)嗎?帶你深度剖析qsort函數(shù),本篇將引入一個(gè)庫(kù)函數(shù)來(lái)實(shí)現(xiàn)我們希望的順序,結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02
C++ 中回文數(shù)判斷簡(jiǎn)單實(shí)例
這篇文章主要介紹了C++ 中回文數(shù)判斷簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05
C語(yǔ)言實(shí)現(xiàn)財(cái)務(wù)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)財(cái)務(wù)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
Qt串口通信開(kāi)發(fā)之QSerialPort模塊簡(jiǎn)單使用方法與實(shí)例
這篇文章主要介紹了Qt串口通信開(kāi)發(fā)之QSerialPort模塊簡(jiǎn)單使用方法與實(shí)例,需要的朋友可以參考下2020-03-03
舉例講解C語(yǔ)言程序中對(duì)二叉樹(shù)數(shù)據(jù)結(jié)構(gòu)的各種遍歷方式
這篇文章主要介紹了舉例講解C語(yǔ)言程序中對(duì)二叉樹(shù)數(shù)據(jù)結(jié)構(gòu)的各種遍歷方式,先序中序后序二叉樹(shù)遍歷幾乎成了最老生常談的數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)知識(shí),的朋友可以參考下2016-04-04
C++ Eigen庫(kù)實(shí)現(xiàn)最小二乘擬合的示例代碼
Eigen 是一個(gè)線(xiàn)性算術(shù)的 C++ 模板庫(kù),功能強(qiáng)大、快速、優(yōu)雅以及支持多平臺(tái),本文主要為大家介紹了C++利用Eigen庫(kù)實(shí)現(xiàn)最小二乘擬合的示例代碼,希望對(duì)大家有所幫助2023-07-07

