C语言实现餐饮管理系统

作者:在zai 时间:2023-03-26 06:40:37 

本文实例为大家分享了C语言实现餐饮管理系统的具体代码,供大家参考,具体内容如下

#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同上
?? ?//或将以上的采用数据域的方式存储?
?? ?struct User* next;?
}user; //注意初始化 ,可以写一个初始化函数 ?借鉴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;//接该桌的订单的头结点?
?? ?int price;//该桌的总价?
?? ?struct Table* next;?
}table;?
?
?
typedef struct Order{
?? ?int number;//菜的编号
?? ?char name[20];
?? ?int copies;//菜的份数
?? ?int price;
?? ?int xiaoji;
?? ?struct Order* next;?
}order;
?
?
//以下为自定义函数
void welcome();
int ORDER(order* head);//点菜函数?
//void reg();//注册函数?
void login();
void logon();
void show();//显示菜单函数?
void client();//客户函数?
void look_amend();//查看修改函数?
void add();//加菜函数?
void cancel();//取消菜函数?
int priceall();//计算总价函数?
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)); //向内存申请一段空间?
?? ??? ? ? ?//fread(p, N, 1, fp1); ? ? //将fp所指向的文件中的内容赋给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 ? ? ? ? ? ? //创建链表?
?? ??? ? ? ?{
?? ??? ? ? ??? ?q->next = p;
?? ??? ? ? ??? ?q = p;
?? ??? ??? ?}
?? ? ? ?}
?? ? ? ?q->next = NULL;
?? ?}
? ? fclose(fp1); ? ?//关闭文件?
? ? 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的数据结构写入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); ? ? ? ?//关闭文件?
}
?
?
?
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;//调用点菜函数?
?? ??? ?case'2':look_amend();break;//调用查看函数
?? ??? ?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();//显示菜单函数?
?? ?int numo;?
? ? printf("\n请输入你要点的菜的序号:(以#结束)");?
? ? //将要点的菜加入订单链表中
? ? //order* head;
? ? order* p;
? ? order* q;
? ? head = (order*)malloc(sizeof(order));
? ? p = head;
? ? while(getch()!='#')
? ? {
? ? ?? ?printf("%d:",i);
? ? ?? ?scanf("%d",&numo);
? ? ?? ?printf("份数:");
? ? ?? ?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;//调用加菜函数?
?? ??? ?case'2':cancel();break;//调用减菜函数
?? ??? ?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("密码:");
?? ?//调用判断登录函数;?
?? ?printf("\n登录成功!");
?? ?Sleep(2000);
?? ?printf("\n欢迎您!");//判断普通客户 ?会员 ?管理员?
?? ?client();
}*/
/*
void login()
{
?? ?printf("账号:\n");?
?? ?printf("密码:");
?? ?//调用判断登录函数;?
?? ?printf("\n登录成功!");
?? ?Sleep(2000);
?? ?printf("\n欢迎您!");//判断普通客户 ?会员 ?管理员?
?? ?client();
}*/
?
/*
void reg()//注册函数?
{
?? ?//注册账户?
?? ?printf("注册成功!");
?? ?Sleep(2000);
?? ?system("cls");
?? ?order();//调用点菜函数?
} */
?
?
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请等待服务员为你上菜(如需修改请和服务员联系)");
}?
?
?
void welcome()
{
?? ?system("cls");
?? ?system("color 3E");
?? ?printf("===============欢迎来到赣味客家餐馆管理系统===============\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() ? ? ? ? ? ? ? //将存账号的文件里的内容输出到链表中
{
?? ?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); //向内存申请一段空间?
?? ??? ? ? ?//fread(p, N, 1, fp1); ? ? //将fp所指向的文件中的内容赋给p
?? ??? ??? ?fscanf(fp1,"%s %s %d %d",p->username ,p->password ,&p->vip ,&p->adm);?
?? ??? ? ? ?if(n == 1)
?? ??? ? ? ?{
?? ??? ? ? ? ??? ?head = p;
?? ??? ? ? ? ??? ?q = p;
?? ??? ? ? ?}
?? ??? ? ? ?else ? ? ? ? ? ? //创建链表?
?? ??? ? ? ?{
?? ??? ? ? ??? ?q->next = p;
?? ??? ? ? ??? ?q = p;
?? ??? ??? ?}
?? ? ? ?}
?? ? ? ?q->next = NULL;
?? ?}
? ? fclose(fp1); ? ?//关闭文件?
? ? 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)); //向内存申请一段空间?
?? ??? ? ? ?//fread(p, N, 1, fp1); ? ? //将fp所指向的文件中的内容赋给p
?? ??? ??? ?fscanf(fp1,"%d %s %d",&p->num ,p->name ,&p->price);?
?? ??? ? ? ?if(n == 1)
?? ??? ? ? ?{
?? ??? ? ? ? ??? ?head = p;
?? ??? ? ? ? ??? ?q = p;
?? ??? ? ? ?}
?? ??? ? ? ?else ? ? ? ? ? ? //创建链表?
?? ??? ? ? ?{
?? ??? ? ? ??? ?q->next = p;
?? ??? ? ? ??? ?q = p;
?? ??? ??? ?}
?? ? ? ?}
?? ? ? ?q->next = NULL;
?? ?}
? ? fclose(fp1); ? ?//关闭文件?
? ? 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)); //向内存申请一段空间?
?? ??? ? ? ?//fread(p, N, 1, fp1); ? ? //将fp所指向的文件中的内容赋给p
?? ??? ??? ?fscanf(fp1,"%d %s %d",&p->num ,p->name ,&p->price);?
?? ??? ? ? ?if(n == 1)
?? ??? ? ? ?{
?? ??? ? ? ? ??? ?head = p;
?? ??? ? ? ? ??? ?q = p;
?? ??? ? ? ?}
?? ??? ? ? ?else ? ? ? ? ? ? //创建链表?
?? ??? ? ? ?{
?? ??? ? ? ??? ?q->next = p;
?? ??? ? ? ??? ?q = p;
?? ??? ??? ?}
?? ? ? ?}
?? ? ? ?q->next = NULL;
?? ?}
? ? fclose(fp1); ? ?//关闭文件?
? ? 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)); //向内存申请一段空间?
?? ??? ? ? ?//fread(p, N, 1, fp1); ? ? //将fp所指向的文件中的内容赋给p
?? ??? ??? ?fscanf(fp1,"%d %s %d",&p->num ,p->name ,&p->price);?
?? ??? ? ? ?if(n == 1)
?? ??? ? ? ?{
?? ??? ? ? ? ??? ?head = p;
?? ??? ? ? ? ??? ?q = p;
?? ??? ? ? ?}
?? ??? ? ? ?else ? ? ? ? ? ? //创建链表?
?? ??? ? ? ?{
?? ??? ? ? ??? ?q->next = p;
?? ??? ? ? ??? ?q = p;
?? ??? ??? ?}
?? ? ? ?}
?? ? ? ?q->next = NULL;
?? ?}
? ? fclose(fp1); ? ?//关闭文件?
? ? return head; ? //返回头指针?
}
?
?
void login() ? ? ?// 账号登陆?
{?
?? ?system("cls"); ? //清屏?
?? ?user* p;
?? ?user* head; ? ?
?? ?head = ff1();
?? ?p = head;
? ? //调用函数 ,返回值为头结点的指针
? ? /*
?? ?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 ? ? 登陆状态 ? ? ? ");
?? ??? ?printf("请输入您的账号:");
?? ??? ?scanf("%s", name1);
?? ??? ?printf("请输入您的密码:");
?? ??? ?for(;;) ? ? ? ? ? ? ?//此处为输入密码不回显操作?
?? ??? ?{
?? ??? ??? ?k = getch(); ? ? ? //输入k?
?? ??? ??? ?if(k == '\r') ? ? ?//如果输入k为回车,则跳出循环?
?? ??? ??? ?{
?? ??? ??? ??? ?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 ++; ? ? ? ? ? ? ?//密码位数加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; ? ?//跳出循环
?? ??? ??? ?}
?? ??? ??? ?else ? ? ?//如果输入的密码错误
?? ??? ??? ?{?
?? ??? ??? ??? ?printf("正在登陆....\n");
?? ??? ??? ??? ?Sleep(500);
?? ??? ??? ??? ?system("cls");
?? ??? ??? ??? ?printf("-------------------------\n");
?? ??? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? |\n");
?? ??? ??? ??? ?printf("| 密码错误!是否继续? ?|\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("| ?账号错误!是否继续? |\n");
?? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? |\n");
?? ??? ??? ?printf("| ?1.是 ? ? ? ? ? ?2.否 |\n");?
?? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? |\n");
?? ??? ??? ?printf("-------------------------\n");
?? ??? ??? ?while(1) ? ? ?//死循环防止其他按键干扰?
?? ??? ??? ?{
?? ??? ??? ??? ?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); ? ? //向内存申请一段空间?
?? ?p->next==NULL;
?? ?//do
?? ?//{
?? ??? ?char name[12],password[18],againpassword[18],c,k;
?? ??? ?int i = 0;?
?? ??? ?printf("赣味客家餐饮管理系统\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; ? ? ? ? ? ? ?//跳出循环?
?? ??? ? ? ?}
?? ??? ?/*
?? ??? ?else ? ?//如果输入的两次密码不同?
?? ??? ?{
?? ??? ??? ?printf("正在注册....\n");
?? ??? ??? ?Sleep(500);
?? ??? ??? ?system("cls");
?? ??? ??? ?printf("-----------------------------");
?? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? ? ? |");
?? ??? ??? ?printf("| ?注册失败!两次密码不统一,是否继续注册? |");
?? ??? ??? ?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为回车,则跳出循环?
?? ??? ??? ?{
?? ??? ??? ??? ?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 ++; ? ? ? ? ? ? ?//密码位数加1?
?? ??? ??? ?}
?? ??? ?}
?? ??? ?
?? ??? ?password[i] = '\0';
?? ??? ?i = 0;
?? ??? ?printf("\n请确认您的密码:\n");
?? ??? ?for(;;) ? ? ? ? ? ? ?//此处为输入密码不回显操作?
?? ??? ?{
?? ??? ??? ?k = getch(); ? ? ? //输入k?
?? ??? ??? ?if(k == '\r') ? ? ?//如果输入k为回车,则跳出循环?
?? ??? ??? ?{
?? ??? ??? ??? ?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++; ? ? ? ? ? ? ?//密码位数加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("| ?注册失败!两次密码不统一,是否继续注册? |");
?? ??? ??? ?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的数据结构写入fp所指向的文件中?
?? ?//{
?? ??? ?//printf("文件写入失败\n");
?? ?fprintf( file ,"%s %s %d %d\n", p->username , p->password , p->vip , p->adm );
?? ?//}

这是以前写的餐饮管理系统,和大佬们没得比,可以参考一下,因为是以前写的所以文件找不到了,可以自己把文件部分修改一下重新创建即可 

C语言实现餐饮管理系统

C语言实现餐饮管理系统

来源:https://blog.csdn.net/weixin_44427949/article/details/87965717

标签:C语言,餐饮,管理系统
0
投稿

猜你喜欢

  • SpringBoot自动配置原理详解

    2023-08-19 09:25:55
  • C#中的Lazy如何使用详解

    2023-10-25 12:56:34
  • apollo更改配置刷新@ConfigurationProperties配置类

    2022-01-09 22:28:22
  • Java实现手写线程池的示例代码

    2022-01-09 13:08:24
  • Android Tab标签的使用基础

    2023-11-21 18:10:03
  • SpringBoot项目在IntelliJ IDEA中如何实现热部署

    2023-10-29 13:30:22
  • 基于C#后台调用跨域MVC服务及带Cookie验证的实现

    2023-06-08 11:32:26
  • java设计模式之简单工厂模式简述

    2021-06-14 17:11:20
  • 浅谈C#设计模式之工厂模式

    2021-12-17 16:06:48
  • 浅谈shiro的SecurityManager类结构

    2022-08-25 14:13:32
  • SpringBoot过滤器与拦截器使用方法深入分析

    2023-08-18 10:20:03
  • c# 实现KMP算法的示例代码

    2023-12-02 06:35:19
  • SpringBoot跨域Access-Control-Allow-Origin实现解析

    2023-11-28 23:04:34
  • C# WinForm打开PDF文件并在窗体中显示

    2023-11-14 10:47:49
  • java通过Idea远程一键部署springboot到Docker详解

    2022-03-26 09:31:27
  • C# Directory.GetFiles()函数案例详解

    2022-12-10 04:51:02
  • 漂亮的Android音乐歌词控件 仿网易云音乐滑动效果

    2022-01-26 14:16:25
  • Java ==,equals()与hashcode()的使用

    2022-02-24 07:06:28
  • Android 基于agora 开发视频会议的代码

    2021-11-30 02:53:04
  • Java邮件发送程序(可以同时发给多个地址、可以带附件)

    2022-09-07 20:08:40
  • asp之家 软件编程 m.aspxhome.com