C語言實現(xiàn)餐飲管理系統(tǒng)
更新時間:2022年03月18日 15:48:21 作者:在zai
這篇文章主要為大家詳細介紹了C語言實現(xiàn)餐飲管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了C語言實現(xiàn)餐飲管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <conio.h> #include <windows.h> #define N sizeof(user)? #define M sizeof(table)? #define T sizeof(order)? #define S sizeof(menu)? ? typedef struct User{ ?? ?char username[12];//賬號? ?? ?char password[18];//密碼 ?? ?int vip;//1為會員 ?0不是 ?? ?int adm;//administrator同上 ?? ?//或?qū)⒁陨系牟捎脭?shù)據(jù)域的方式存儲? ?? ?struct User* next;? }user; //注意初始化 ,可以寫一個初始化函數(shù) ?借鑒7月9號的筆記中的“初始化”? ? ? typedef struct Menu{ ?? ?int num;//1~10為熱菜 ?11~20為冷菜 ?21~25為飲料? ?? ?char name[20]; ?? ?int price; ?? ?struct Menu* next;? }menu; ? ? typedef struct Table{ ?? ?int number; ?? ?int is_blank; ?? ?int peoplenum; ?? ?struct Order* ordert;//接該桌的訂單的頭結(jié)點? ?? ?int price;//該桌的總價? ?? ?struct Table* next;? }table;? ? ? typedef struct Order{ ?? ?int number;//菜的編號 ?? ?char name[20]; ?? ?int copies;//菜的份數(shù) ?? ?int price; ?? ?int xiaoji; ?? ?struct Order* next;? }order; ? ? //以下為自定義函數(shù) void welcome(); int ORDER(order* head);//點菜函數(shù)? //void reg();//注冊函數(shù)? void login(); void logon(); void show();//顯示菜單函數(shù)? void client();//客戶函數(shù)? void look_amend();//查看修改函數(shù)? void add();//加菜函數(shù)? void cancel();//取消菜函數(shù)? int priceall();//計算總價函數(shù)? void getpassword(char password[18],char againpassword[18]); int is_password_same(char password[18],char againpassword[18]); void save_user(user* p); menu* ffmenuhot(); menu* ffmenucold(); menu* ffmenudrink(); table* fftable(); void resave_table(table* head); ? ? ? table* fftable() { ?? ?FILE *fp1; ? ? ? //文件指針? ?? ?int n = 0; ?? ?table* head = NULL; ?? ?table* q; ?? ?table* p; ?? ?//system("md E:\\canyin\\table"); ?? ?fp1 = fopen("E:\\canyin\\table\\table.txt","a+"); ? ? //以只讀的方式打開文件? ?? ?if(fp1 == NULL) ?? ?{ ?? ??? ?printf("文件打開失敗\n"); ?? ??? ?//getchar(); ?? ??? ?//exit(0); ?? ?} ?? ?else ?? ?{ ?? ??? ?while(!feof(fp1)) ? ? ? ?//判斷文件位置標志是否移動到文件末尾? ?? ??? ?{ ?? ??? ? ? ?n ++; ?? ??? ? ? ?? ?p = (table*)malloc(sizeof(table)); //向內(nèi)存申請一段空間? ?? ??? ? ? ?//fread(p, N, 1, fp1); ? ? //將fp所指向的文件中的內(nèi)容賦給p ?? ??? ??? ?fscanf(fp1,"%d %d %d %d %d", &p->number , &p->is_blank , &p->peoplenum , &p->price , &p->ordert );? ?? ??? ? ? ?if(n == 1) ?? ??? ? ? ?{ ?? ??? ? ? ? ??? ?head = p; ?? ??? ? ? ? ??? ?q = p; ?? ??? ? ? ?} ?? ??? ? ? ?else ? ? ? ? ? ? //創(chuàng)建鏈表? ?? ??? ? ? ?{ ?? ??? ? ? ??? ?q->next = p; ?? ??? ? ? ??? ?q = p; ?? ??? ??? ?} ?? ? ? ?} ?? ? ? ?q->next = NULL; ?? ?} ? ? fclose(fp1); ? ?//關(guān)閉文件? ? ? return head; ? //返回頭指針? } ? ? ? void resave_table(table* head) { ?? ?table* p; ?? ?p = head; ?? ?//system("md E:\\canyin\\table"); ?? ?FILE *file; ? ? ? //文件指針? ?? ?file = fopen("E:\\canyin\\table\\table.txt","wb+"); ? ?//以追加的方式打開文件? ?? ?if(file == NULL) ?? ?{ ?? ??? ?printf("文件打開失敗\n"); ?? ?} ?? ?///if(fwrite(p, N, 1, fp)!=1) ? ?//將p所指向的1個大小為N的數(shù)據(jù)結(jié)構(gòu)寫入fp所指向的文件中? ?? ?//{ ?? ??? ?//printf("文件寫入失敗\n"); ?? ?while(p->next != NULL) ?? ?{ ?? ? ? ?fprintf( file ,"%d %d %d %d %d \n", p->number, p->is_blank , p->peoplenum , p->price , p->ordert); ?? ? ? ?p=p->next; ?? ?} ?? ?//} ?? ?fclose(file); ? ? ? ?//關(guān)閉文件? } ? ? ? void client() { ?? ?order* orderh; ?? ?orderh=(order*)malloc(sizeof(order)); ?? ?int tablenum; ?? ?printf("當前可選擇的桌位有:\n"); ?? ?table* head; ?? ?table* p; ?? ?head = (table*)malloc(sizeof(table)); ?? ?p = (table*)malloc(sizeof(table)); ?? ?head = fftable(); ?? ?p = head; ?? ?while(p->next != NULL) ?? ?{ ?? ??? ?if(p->is_blank==0) ?? ??? ? ? ?printf("%d號\t",p->number); ?? ?} ?? ?printf("請選擇你的桌位號:"); ?? ?scanf("%d",&tablenum); ?? ?p = head; ?? ?while(p->number == tablenum) ?? ?{ ?? ??? ?p->is_blank = 1; ?? ??? ?p->ordert = orderh; ?? ??? ?break; ?? ?} ? ? //確定座位號? ?? ?//char a; ?? ?/*? ?? ?printf("1.點菜"); ?? ?printf("2.查看已點的菜");? ?? ?scanf("%s",&a); ?? ?switch(a) ?? ?{ ?? ??? ?case'1':order();break;//調(diào)用點菜函數(shù)? ?? ??? ?case'2':look_amend();break;//調(diào)用查看函數(shù) ?? ??? ?default:printf("請輸入正確的選項!");break;? ?? ? } */ ?? ? printf("請點菜:\n"); ?? ? p->price = ORDER(orderh); ?? ? resave_table(head);? } ? ? int ORDER(order* head) { ?? ?menu* hot; ?? ?menu* cold; ?? ?menu* drink; ?? ?int copies; ?? ?int i=1; ?? ?int priceall = 0; ?? ?hot = ffmenuhot(); ?? ?cold = ffmenucold(); ?? ?drink = ffmenudrink(); ?? ?menu *h , *c , *d; ?? ?show();//顯示菜單函數(shù)? ?? ?int numo;? ? ? printf("\n請輸入你要點的菜的序號:(以#結(jié)束)");? ? ? //將要點的菜加入訂單鏈表中 ? ? //order* head; ? ? order* p; ? ? order* q; ? ? head = (order*)malloc(sizeof(order)); ? ? p = head; ? ? while(getch()!='#') ? ? { ? ? ?? ?printf("%d:",i); ? ? ?? ?scanf("%d",&numo); ? ? ?? ?printf("份數(shù):"); ? ? ?? ?scanf("%d",&copies); ? ? ?? ?h = hot; ? ? ?? ?c = cold; ? ? ?? ?d = drink; ? ? ?? ?while(h->next != NULL) ? ? ?? ?{ ? ? ?? ??? ?if(h->num==numo) ? ? ?? ??? ?{ ? ? ?? ??? ??? ?//p = (order*)malloc(sizeof(order)); ? ? ?? ??? ??? ?q = (order*)malloc(sizeof(order)); ? ? ?? ??? ??? ?q->next = NULL; ? ? ?? ??? ??? ?p->number = h->num; ? ? ?? ??? ??? ?strcmp(p->name , h->name ); ? ? ?? ??? ??? ?p->price = h->price; ? ? ?? ??? ??? ?p->copies = copies; ? ? ?? ??? ??? ?p->next = q; ? ? ?? ??? ??? ?q = p; ? ? ?? ??? ??? ?priceall = priceall + copies*(h->price); ? ? ?? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ?} ?? ??? ? ?? ??? ?while(c->next != NULL) ? ? ?? ?{ ? ? ?? ??? ?if(c->num==numo) ? ? ?? ??? ?{ ? ? ?? ??? ??? ?//p = (order*)malloc(sizeof(order)); ? ? ?? ??? ??? ?q = (order*)malloc(sizeof(order)); ? ? ?? ??? ??? ?q->next = NULL; ? ? ?? ??? ??? ?p->number = c->num; ? ? ?? ??? ??? ?strcmp(p->name , c->name ); ? ? ?? ??? ??? ?p->price = c->price; ? ? ?? ??? ??? ?p->copies = copies; ? ? ?? ??? ??? ?p->next = q; ? ? ?? ??? ??? ?q = p; ? ? ?? ??? ??? ?priceall = priceall + copies*(h->price); ? ? ?? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ?} ? ? ?? ? ? ? ?? ?while(d->next != NULL) ? ? ?? ?{ ? ? ?? ??? ?if(d->num==numo) ? ? ?? ??? ?{ ? ? ?? ??? ??? ?//p = (order*)malloc(sizeof(order)); ? ? ?? ??? ??? ?q = (order*)malloc(sizeof(order)); ? ? ?? ??? ??? ?q->next = NULL; ? ? ?? ??? ??? ?p->number = d->num; ? ? ?? ??? ??? ?strcmp(p->name , d->name ); ? ? ?? ??? ??? ?p->price = d->price; ? ? ?? ??? ??? ?p->copies = copies; ? ? ?? ??? ??? ?p->next = q; ? ? ?? ??? ??? ?q = p; ? ? ?? ??? ??? ?priceall = priceall + copies*(h->price); ? ? ?? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?i++; ?? ?} ? ?? ? ?? ?? ?printf("\n點菜成功!");? ?? ?printf("您的訂單總價是:%d",priceall); ?? ?Sleep(10000); ?? ?system("cls"); ?? ?return priceall; ?? ?//look_amend(); } ? void look_amend() { ?? ?char a;? ?? ?printf("你點的菜是:\n"); ?? ?//將訂單鏈表中的菜逐個輸出? ?? ?printf("1.添加菜品\n"); ?? ?printf("2.刪除菜品\n"); ?? ?printf("3.確定\n");? ?? ?scanf("%s",&a); ?? ?switch(a) ?? ?{ ?? ??? ?case'1':add();break;//調(diào)用加菜函數(shù)? ?? ??? ?case'2':cancel();break;//調(diào)用減菜函數(shù) ?? ??? ?case'3':priceall();break;? ?? ??? ?default:printf("請輸入正確的選項!");break;? ?? ? }? } ? void add() { ?? ?show(); ?? ?printf("請輸入你要加入的菜的序號:"); ?? ?//將菜加入訂單鏈表 ?? ?printf("\n加菜成功!"); ?? ?Sleep(2000); ?? ?system("cls");? ?? ?look_amend(); } ? ? void cancel() { ?? ?printf("你點的菜是:"); ?? ?printf("\n請輸入你要刪除的菜的序號:"); ?? ?//將菜從訂單鏈表中刪除 ?? ?printf("\n取消成功!");? ?? ?Sleep(2000); ?? ?system("cls");? ?? ?look_amend(); } ? /* void enter()//登錄? {? ?? ?printf("賬號:\n");? ?? ?printf("密碼:"); ?? ?//調(diào)用判斷登錄函數(shù);? ?? ?printf("\n登錄成功!"); ?? ?Sleep(2000); ?? ?printf("\n歡迎您!");//判斷普通客戶 ?會員 ?管理員? ?? ?client(); }*/ /* void login() { ?? ?printf("賬號:\n");? ?? ?printf("密碼:"); ?? ?//調(diào)用判斷登錄函數(shù);? ?? ?printf("\n登錄成功!"); ?? ?Sleep(2000); ?? ?printf("\n歡迎您!");//判斷普通客戶 ?會員 ?管理員? ?? ?client(); }*/ ? /* void reg()//注冊函數(shù)? { ?? ?//注冊賬戶? ?? ?printf("注冊成功!"); ?? ?Sleep(2000); ?? ?system("cls"); ?? ?order();//調(diào)用點菜函數(shù)? } */ ? ? void show()//顯示? { ?? ?menu* p1; ?? ?menu* p2; ?? ?menu* p3; ?? ?menu* headhot; ?? ?menu* headcold; ? ? menu* headdrink; ?? ?headhot = ffmenuhot(); ?? ?headcold = ffmenucold(); ?? ?headdrink = ffmenudrink(); ?? ?p1 = headhot; ?? ?p2 = headcold; ?? ?p3 = headdrink; ?? ?printf("熱菜:\n"); ?? ?printf("序號 ? ? ? 菜名 ? ? ? 價格\n");? ?? ?printf("%d %s %d \n", p1->num, p1->name ?, p1->price); ?? ?while(p1->next != NULL) ?? ?{ ?? ? ? ?printf("%d %s %d \n", p1->num, p1->name ?, p1->price); ? ? ? ? p1=p1->next; ?? ?} ?? ? ?? ? ?? ?printf("冷菜:\n"); ?? ?printf("序號 ? ? ? 菜名 ? ? ? 價格\n"); ?? ?while(p2->next!=NULL) ?? ?{ ?? ? ? ?printf("%d %s %d \n", p2->num, p2->name ?, p2->price); ? ? ? ? p2=p2->next; ?? ?} ?? ? ?? ?printf("飲料:\n"); ?? ?printf("序號 ? ? ? 菜名 ? ? ? 價格\n");? ?? ?while(p3->next!=NULL) ?? ?{ ?? ? ? ?printf("%d %s %d \n", p3->num, p3->name ?, p3->price); ? ? ? ? p3=p3->next; ?? ?} }? ? ? int priceall()//合計價格? { ?? ?//計算總價并輸出? ?? ?printf("您訂單的總價是:"); ??? ?printf("\n請等待服務(wù)員為你上菜(如需修改請和服務(wù)員聯(lián)系)"); }? ? ? void welcome() { ?? ?system("cls"); ?? ?system("color 3E"); ?? ?printf("===============歡迎來到贛味客家餐館管理系統(tǒng)===============\n\n\n\n"); ?? ?printf("\t 1.登錄\n");? ?? ?printf("\t 2.注冊\n"); ?? ?printf("請選擇[1 2] : [ ? ]\b\b\b"); ?? ?int n; ?? ?while(1) ?? ?{ ?? ??? ?scanf("%d",&n); ?? ??? ?switch(n) ?? ??? ?{ ?? ??? ??? ?case 1: ?? ??? ??? ??? ?login();//登錄? ?? ??? ??? ??? ?break; ?? ??? ??? ?case 2: ?? ??? ??? ??? ?logon();//注冊? ?? ??? ??? ??? ?break;?? ? ?? ??? ??? ?default: ?? ??? ??? ??? ?break; ?? ??? ?} ?? ?} } ? user* ff1() ? ? ? ? ? ? ? //將存賬號的文件里的內(nèi)容輸出到鏈表中 { ?? ?FILE *fp1; ? ? ? //文件指針? ?? ?int n = 0; ?? ?user* head = NULL; ?? ?user* q; ?? ?user* p; ?? ?system("md E:\\canyin\\zhanghu"); ?? ?fp1 = fopen("E:\\canyin\\zhanghu\\zhanghu.txt","a+"); ? ? //以只讀的方式打開文件? ?? ?if(fp1 == NULL) ?? ?{ ?? ??? ?printf("文件打開失敗\n"); ?? ??? ?//getchar(); ?? ??? ?//exit(0); ?? ?} ?? ?else ?? ?{ ?? ??? ?while(!feof(fp1)) ? ? ? ?//判斷文件位置標志是否移動到文件末尾? ?? ??? ?{ ?? ??? ? ? ?n ++; ?? ??? ? ? ?? ?p = (user*)malloc(N); //向內(nèi)存申請一段空間? ?? ??? ? ? ?//fread(p, N, 1, fp1); ? ? //將fp所指向的文件中的內(nèi)容賦給p ?? ??? ??? ?fscanf(fp1,"%s %s %d %d",p->username ,p->password ,&p->vip ,&p->adm);? ?? ??? ? ? ?if(n == 1) ?? ??? ? ? ?{ ?? ??? ? ? ? ??? ?head = p; ?? ??? ? ? ? ??? ?q = p; ?? ??? ? ? ?} ?? ??? ? ? ?else ? ? ? ? ? ? //創(chuàng)建鏈表? ?? ??? ? ? ?{ ?? ??? ? ? ??? ?q->next = p; ?? ??? ? ? ??? ?q = p; ?? ??? ??? ?} ?? ? ? ?} ?? ? ? ?q->next = NULL; ?? ?} ? ? fclose(fp1); ? ?//關(guān)閉文件? ? ? return head; ? //返回頭指針? } ? //從菜單文件中讀取菜單? menu* ffmenuhot() { ?? ?FILE *fp1; ? ? ? //文件指針? ?? ?int n = 0; ?? ?menu* head = NULL; ?? ?menu* q; ?? ?menu* p; ?? ?system("md E:\\canyin\\menu"); ?? ?fp1 = fopen("E:\\canyin\\menu\\hotcai.txt","a+"); ? ? //以只讀的方式打開文件? ?? ?if(fp1 == NULL) ?? ?{ ?? ??? ?printf("文件打開失敗\n"); ?? ??? ?//getchar(); ?? ??? ?//exit(0); ?? ?} ?? ?else ?? ?{ ?? ??? ?while(!feof(fp1)) ? ? ? ?//判斷文件位置標志是否移動到文件末尾? ?? ??? ?{ ?? ??? ? ? ?n ++; ?? ??? ? ? ?? ?p = (menu*)malloc(sizeof(menu)); //向內(nèi)存申請一段空間? ?? ??? ? ? ?//fread(p, N, 1, fp1); ? ? //將fp所指向的文件中的內(nèi)容賦給p ?? ??? ??? ?fscanf(fp1,"%d %s %d",&p->num ,p->name ,&p->price);? ?? ??? ? ? ?if(n == 1) ?? ??? ? ? ?{ ?? ??? ? ? ? ??? ?head = p; ?? ??? ? ? ? ??? ?q = p; ?? ??? ? ? ?} ?? ??? ? ? ?else ? ? ? ? ? ? //創(chuàng)建鏈表? ?? ??? ? ? ?{ ?? ??? ? ? ??? ?q->next = p; ?? ??? ? ? ??? ?q = p; ?? ??? ??? ?} ?? ? ? ?} ?? ? ? ?q->next = NULL; ?? ?} ? ? fclose(fp1); ? ?//關(guān)閉文件? ? ? return head; ? //返回頭指針? } ? ? menu* ffmenucold() { ?? ?FILE *fp1; ? ? ? //文件指針? ?? ?int n = 0; ?? ?menu* head = NULL; ?? ?menu* q; ?? ?menu* p; ?? ?system("md E:\\canyin\\menu"); ?? ?fp1 = fopen("E:\\canyin\\menu\\coldcai.txt","a+"); ? ? //以只讀的方式打開文件? ?? ?if(fp1 == NULL) ?? ?{ ?? ??? ?printf("文件打開失敗\n"); ?? ??? ?//getchar(); ?? ??? ?//exit(0); ?? ?} ?? ?else ?? ?{ ?? ??? ?while(!feof(fp1)) ? ? ? ?//判斷文件位置標志是否移動到文件末尾? ?? ??? ?{ ?? ??? ? ? ?n ++; ?? ??? ? ? ?? ?p = (menu*)malloc(sizeof(menu)); //向內(nèi)存申請一段空間? ?? ??? ? ? ?//fread(p, N, 1, fp1); ? ? //將fp所指向的文件中的內(nèi)容賦給p ?? ??? ??? ?fscanf(fp1,"%d %s %d",&p->num ,p->name ,&p->price);? ?? ??? ? ? ?if(n == 1) ?? ??? ? ? ?{ ?? ??? ? ? ? ??? ?head = p; ?? ??? ? ? ? ??? ?q = p; ?? ??? ? ? ?} ?? ??? ? ? ?else ? ? ? ? ? ? //創(chuàng)建鏈表? ?? ??? ? ? ?{ ?? ??? ? ? ??? ?q->next = p; ?? ??? ? ? ??? ?q = p; ?? ??? ??? ?} ?? ? ? ?} ?? ? ? ?q->next = NULL; ?? ?} ? ? fclose(fp1); ? ?//關(guān)閉文件? ? ? return head; ? //返回頭指針? } ? ? menu* ffmenudrink() { ?? ?FILE *fp1; ? ? ? //文件指針? ?? ?int n = 0; ?? ?menu* head = NULL; ?? ?menu* q; ?? ?menu* p; ?? ?system("md E:\\canyin\\menu"); ?? ?fp1 = fopen("E:\\canyin\\menu\\drink.txt","a+"); ? ? //以只讀的方式打開文件? ?? ?if(fp1 == NULL) ?? ?{ ?? ??? ?printf("文件打開失敗\n"); ?? ??? ?//getchar(); ?? ??? ?//exit(0); ?? ?} ?? ?else ?? ?{ ?? ??? ?while(!feof(fp1)) ? ? ? ?//判斷文件位置標志是否移動到文件末尾? ?? ??? ?{ ?? ??? ? ? ?n ++; ?? ??? ? ? ?? ?p = (menu*)malloc(sizeof(menu)); //向內(nèi)存申請一段空間? ?? ??? ? ? ?//fread(p, N, 1, fp1); ? ? //將fp所指向的文件中的內(nèi)容賦給p ?? ??? ??? ?fscanf(fp1,"%d %s %d",&p->num ,p->name ,&p->price);? ?? ??? ? ? ?if(n == 1) ?? ??? ? ? ?{ ?? ??? ? ? ? ??? ?head = p; ?? ??? ? ? ? ??? ?q = p; ?? ??? ? ? ?} ?? ??? ? ? ?else ? ? ? ? ? ? //創(chuàng)建鏈表? ?? ??? ? ? ?{ ?? ??? ? ? ??? ?q->next = p; ?? ??? ? ? ??? ?q = p; ?? ??? ??? ?} ?? ? ? ?} ?? ? ? ?q->next = NULL; ?? ?} ? ? fclose(fp1); ? ?//關(guān)閉文件? ? ? return head; ? //返回頭指針? } ? ? void login() ? ? ?// 賬號登陸? {? ?? ?system("cls"); ? //清屏? ?? ?user* p; ?? ?user* head; ? ? ?? ?head = ff1(); ?? ?p = head; ? ? //調(diào)用函數(shù) ,返回值為頭結(jié)點的指針 ? ? /* ?? ?p = head; ?? ?while(p->next!=NULL) ?? ?{ ?? ? ? ?printf("%s %s %d %d\n", p->username ,p->password , p->vip, p->adm); ? ? ? ? p=p->next; ?? ?}*/ ? ? do{ ?? ? ? ?char t, c, k, name1[12], password1[18]; ?? ? ? ?int i = 0; ?? ??? ?printf("***************************\n\n\n\n"); ?? ??? ?printf("\t\t ? ? 登陸狀態(tài) ? ? ? "); ?? ??? ?printf("請輸入您的賬號:"); ?? ??? ?scanf("%s", name1); ?? ??? ?printf("請輸入您的密碼:"); ?? ??? ?for(;;) ? ? ? ? ? ? ?//此處為輸入密碼不回顯操作? ?? ??? ?{ ?? ??? ??? ?k = getch(); ? ? ? //輸入k? ?? ??? ??? ?if(k == '\r') ? ? ?//如果輸入k為回車,則跳出循環(huán)? ?? ??? ??? ?{ ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?else if(k == '\b') ?//如果輸入k為刪除鍵? ?? ??? ??? ?{ ?? ??? ??? ??? ?if(i > 0) ? ? ? //如若密碼還沒完全刪除? ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?printf("\b"); ?? ??? ??? ??? ??? ?printf(" "); ?? ??? ??? ??? ??? ?printf("\b"); ?? ??? ??? ??? ??? ?i--; ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?else ? ? ? ? ? ? ?//如果輸入的k既不是刪除鍵,也不是回車鍵? ?? ??? ??? ?{ ?? ??? ??? ??? ?password1[i] = k; ? //把k的值賦給_password[i];? ?? ??? ??? ??? ?printf("*"); ? ? ?//輸出*號,保護用戶隱私? ?? ??? ??? ??? ?i ++; ? ? ? ? ? ? ?//密碼位數(shù)加1? ?? ??? ??? ?} ?? ??? ?} ?? ??? ?password1[i] = '\0'; ?? ??? ?while( (p != NULL) && (strcmp(p->username, name1) != 0) ) ? //遍歷鏈表,尋找當前輸入的賬戶的賬號? ?? ??? ?{ ?? ??? ??? ?p = p->next; ?? ??? ?} ?? ??? ?if(p != NULL) ? //如果p不為空? ?? ??? ?{ ?? ? ? ??? ?if(strcmp(p->password, password1) == 0) ? ? //如果輸入的密碼正確? ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("正在登陸....\n"); ?? ??? ??? ??? ?Sleep(500); ? ? ?//暫停0.5秒 ?? ??? ??? ??? ?system("cls"); ?? ??? ??? ??? ?printf("登陸成功!\n"); ?? ??? ??? ??? ?break; ? ?//跳出循環(huán) ?? ??? ??? ?} ?? ??? ??? ?else ? ? ?//如果輸入的密碼錯誤 ?? ??? ??? ?{? ?? ??? ??? ??? ?printf("正在登陸....\n"); ?? ??? ??? ??? ?Sleep(500); ?? ??? ??? ??? ?system("cls"); ?? ??? ??? ??? ?printf("-------------------------\n"); ?? ??? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? |\n"); ?? ??? ??? ??? ?printf("| 密碼錯誤!是否繼續(xù)? ?|\n"); ?? ??? ??? ??? ?printf("| 1.是 ? ? ? ? ? ? 2.否 |\n"); ?? ??? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? |\n"); ?? ??? ??? ??? ?printf("-------------------------\n"); ?? ??? ??? ??? ?while(1) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?t = getch(); ?//輸入t ? ? ?? ??? ??? ??? ??? ?if(t == '1') ? ? ? ? ? ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?system("cls"); ?//清屏? ?? ??? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?else if(t == '2') ? ? //如果輸入t為n,進入開始界面? ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?welcome(); ?? ??? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ?}? ?? ? ? } ?? ? ? else ? ? ? ? ? ? ?//如果p為空,即輸入的賬號不正確? ?? ? ? { ?? ? ? ?? ? ? ?printf("正在登陸....\n"); ?? ? ? ?? ? ? ?Sleep(500); ?? ? ? ?? ? ? ?system("cls"); ?? ? ? ?? ? ? ?printf("-------------------------\n"); ?? ? ? ?? ? ? ?printf("| ? ? ? ? ? ? ? ? ? ? ? |\n"); ?? ??? ??? ?printf("| ?賬號錯誤!是否繼續(xù)? |\n"); ?? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? |\n"); ?? ??? ??? ?printf("| ?1.是 ? ? ? ? ? ?2.否 |\n");? ?? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? |\n"); ?? ??? ??? ?printf("-------------------------\n"); ?? ??? ??? ?while(1) ? ? ?//死循環(huán)防止其他按鍵干擾? ?? ??? ??? ?{ ?? ??? ??? ??? ?c = getch(); ?? ??? ??? ??? ?if(c == '1') ?? ??? ??? ??? ?{ ? ?? ??? ??? ??? ??? ?system("cls"); ?? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?else if(c == '2') ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?welcome(); ?? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ? ? } ? ? }while(1); ? ? ?//永遠為真? ? ??? ?Sleep(500); ? ? ?//暫停0.5秒? ? ??? ?client(); ? ??? ?//menu(); ? ? ? ? //賬號密碼均正確,進入主菜單? } ? ? ? ? ? void logon() ? ? ? ?//注冊賬號? {?? ? ? ? //system("md E:\\canyin\\zhanghu"); ?? ?system("cls"); ?? ?user* p;? ?? ?p = (user*)malloc(N); ? ? //向內(nèi)存申請一段空間? ?? ?p->next==NULL; ?? ?//do ?? ?//{ ?? ??? ?char name[12],password[18],againpassword[18],c,k; ?? ??? ?int i = 0;? ?? ??? ?printf("贛味客家餐飲管理系統(tǒng)\n"); ?? ??? ?printf("**************************\n"); ?? ??? ?printf("請輸入賬號(手機號):\n"); ?? ??? ?scanf("%s",name); ?? ??? ?//printf("請輸入密碼:\n"); ?? ??? ?for(;;) ? ? ? ? ? ? ?//此處為輸入密碼不回顯操作? ?? ??? ?{ ?? ??? ??? ?getpassword(password,againpassword); ?? ??? ? ? ?if(is_password_same(password,againpassword)==1); ?? ??? ?//if(strcmp(password, againpassword) == 0) ? ? ? ?//如果輸入的兩次密碼均正確? ?? ??? ? ? ?{ ?? ??? ??? ? ? ?strcpy(p->username, name); ?? ??? ??? ? ? ?strcpy(p->password, password); ?? ??? ??? ? ? ?printf("\n是否注冊為會員(0.否,1.是)"); ?? ??? ??? ? ? ?scanf("%d", &p->vip); ?? ??? ??? ? ? ?printf("\n是否注冊為管理員(0.否,1.是)");? ?? ??? ??? ? ? ?scanf("%d", &p->adm);? ?? ??? ??? ? ? ?printf("正在注冊....\n"); ?? ??? ??? ? ? ?save_user(p); ?? ??? ??? ? ? ?Sleep(500); ?? ??? ??? ? ? ?system("cls"); ?? ??? ??? ? ? ?printf("注冊成功!\n"); ?? ??? ??? ? ? ?Sleep(500); ? ? ? ? //暫停0.5秒? ?? ??? ??? ? ? ?break; ? ? ? ? ? ? ?//跳出循環(huán)? ?? ??? ? ? ?} ?? ??? ?/* ?? ??? ?else ? ?//如果輸入的兩次密碼不同? ?? ??? ?{ ?? ??? ??? ?printf("正在注冊....\n"); ?? ??? ??? ?Sleep(500); ?? ??? ??? ?system("cls"); ?? ??? ??? ?printf("-----------------------------"); ?? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? ? ? |"); ?? ??? ??? ?printf("| ?注冊失??!兩次密碼不統(tǒng)一,是否繼續(xù)注冊? |"); ?? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? ? ? |"); ?? ??? ??? ?printf("| ?1.是 ? ? ? ? ? ? ? 2.否 ?|");? ?? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? ? ? |"); ?? ??? ??? ?printf("-----------------------------"); ?? ??? ??? ?while(1) ?? ??? ??? ?{ ?? ??? ??? ??? ?c = getch(); ?? ??? ??? ??? ?if(c == '1') ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?system("cls"); ?? ??? ??? ??? ??? ?//logon(); ?? ??? ??? ??? ??? ? ?? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?else if(c == '2') ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?welcome(); ?? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ?}*/ ?? ?} ?? ?//}while(1); ? ?//永遠為真? ?? ?printf("正在自動為您登陸....\n"); ?? ?Sleep(500); ?? ?printf("\n登錄成功!"); ?? ?Sleep(2000); ?? ?printf("\n歡迎您!");//判斷普通客戶 ?會員 ?管理員? ?? ?client(); ?? ?//login(); } ? void getpassword(char password[18],char againpassword[18]) { ?? ?char k; ?? ?int i=0; ?? ?printf("請輸入密碼:\n"); ?? ??? ?for(;;) ? ? ? ? ? ? ?//此處為輸入密碼不回顯操作? ?? ??? ?{ ?? ??? ??? ?k = getch(); ? ? ? //輸入k? ?? ??? ??? ?if(k == '\r') ? ? ?//如果輸入k為回車,則跳出循環(huán)? ?? ??? ??? ?{ ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ? ?? ??? ??? ?else if(k == '\b') ?//如果輸入k為刪除鍵? ?? ??? ??? ?{ ?? ??? ??? ??? ?if(i > 0) ? ? ? //如若密碼還沒完全刪除? ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?printf("\b"); ?? ??? ??? ??? ??? ?printf(" "); ?? ??? ??? ??? ??? ?printf("\b"); ?? ??? ??? ??? ??? ?i --; ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ? ?? ??? ??? ?else ? ? ? ? ? ? ?//如果輸入的k既不是刪除鍵,也不是回車鍵? ?? ??? ??? ?{ ?? ??? ??? ??? ?password[i] = k; ? //把k的值賦給_password[i];? ?? ??? ??? ??? ?printf("*"); ? ? ?//輸出*號,保護用戶隱私? ?? ??? ??? ??? ?i ++; ? ? ? ? ? ? ?//密碼位數(shù)加1? ?? ??? ??? ?} ?? ??? ?} ?? ??? ? ?? ??? ?password[i] = '\0'; ?? ??? ?i = 0; ?? ??? ?printf("\n請確認您的密碼:\n"); ?? ??? ?for(;;) ? ? ? ? ? ? ?//此處為輸入密碼不回顯操作? ?? ??? ?{ ?? ??? ??? ?k = getch(); ? ? ? //輸入k? ?? ??? ??? ?if(k == '\r') ? ? ?//如果輸入k為回車,則跳出循環(huán)? ?? ??? ??? ?{ ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?else if(k == '\b') ?//如果輸入k為刪除鍵? ?? ??? ??? ?{ ?? ??? ??? ??? ?if(i > 0) ? ? ? //如若密碼還沒完全刪除? ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?printf("\b"); ?? ??? ??? ??? ??? ?printf(" "); ?? ??? ??? ??? ??? ?printf("\b"); ?? ??? ??? ??? ??? ?i --; ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?else ? ? ? ? ? ? ?//如果輸入的k既不是刪除鍵,也不是回車鍵? ?? ??? ??? ?{ ?? ??? ??? ??? ?againpassword[i] = k; ? //把k的值賦給_password[i];? ?? ??? ??? ??? ?printf("*"); ? ? ?//輸出*號,保護用戶隱私? ?? ??? ??? ??? ?i++; ? ? ? ? ? ? ?//密碼位數(shù)加1? ?? ??? ??? ?} ?? ??? ?} ?? ??? ?againpassword[i] = '\0'; } ? ? int is_password_same(char password[18],char againpassword[18]) { ?? ?char c; ?? ?if(strcmp(password, againpassword) != 0) ?? ?{ ?? ??? ?{ ?? ??? ??? ?printf("正在注冊....\n"); ?? ??? ??? ?Sleep(500); ?? ??? ??? ?system("cls"); ?? ??? ??? ?printf("-----------------------------"); ?? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? ? ? |"); ?? ??? ??? ?printf("| ?注冊失??!兩次密碼不統(tǒng)一,是否繼續(xù)注冊? |"); ?? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? ? ? |"); ?? ??? ??? ?printf("| ?1.是 ? ? ? ? ? ? ? 2.否 ?|");? ?? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? ? ? |"); ?? ??? ??? ?printf("-----------------------------"); ?? ??? ??? ?while(1) ?? ??? ??? ?{ ?? ??? ??? ??? ?c = getch(); ?? ??? ??? ??? ?if(c == '1') ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?system("cls"); ?? ??? ??? ??? ??? ?//logon(); ?? ??? ??? ??? ??? ?getpassword(password,againpassword); ?? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?else if(c == '2') ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?return 0; ?? ??? ??? ??? ??? ?welcome(); ?? ??? ??? ??? ??? ?//break; ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ?} ?? ?} ?? ?else ?? ? ? ?return 1; } ? void save_user(user* p) { ?? ?system("md E:\\canyin\\zhanghu"); ?? ?FILE *file; ? ? ? //文件指針? ?? ?file = fopen("E:\\canyin\\zhanghu\\zhanghu.txt","a"); ? ?//以追加的方式打開文件? ?? ?if(file == NULL) ?? ?{ ?? ??? ?printf("文件打開失敗\n"); ?? ?} ?? ?///if(fwrite(p, N, 1, fp)!=1) ? ?//將p所指向的1個大小為N的數(shù)據(jù)結(jié)構(gòu)寫入fp所指向的文件中? ?? ?//{ ?? ??? ?//printf("文件寫入失敗\n"); ?? ?fprintf( file ,"%s %s %d %d\n", p->username , p->password , p->vip , p->adm ); ?? ?//}
這是以前寫的餐飲管理系統(tǒng),和大佬們沒得比,可以參考一下,因為是以前寫的所以文件找不到了,可以自己把文件部分修改一下重新創(chuàng)建即可
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語言數(shù)據(jù)結(jié)構(gòu)鏈表隊列的實現(xiàn)
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)鏈表隊列的實現(xiàn)的相關(guān)資料,需要的朋友可以參考下2017-07-07