#include<stdio.h>//高朋辉
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include <iostream>
#include <string> //请加入这个头文件
using namespace std;
#include<cstring>
#define N 10
#define D 10
#define H 10
#define ASK (ORDER*)malloc(sizeof(ORDER))
#define MaxCapacity 4
//定义订单结构体
typedef struct Order{
int
Table_ID;
int Dish_ID[N];
struct Order *next;
}ORDER;
//定义餐桌信息
typedef struct Table{
int Table_ID;
int Capacity;
int Table_State;
}TABLE;
//定义菜的结构体
typedef struct dish{
int
Dish_ID;
int Dish_Name[10];
float Dish_Price;
}DISH;
TABLE tb[H];
DISH dish[D];
int PASSWORD=123;
void LOAD_Dish(void);//从文件中读取菜谱;
ORDER*CreateOne(int);//创建一个订单节点;
void Dish_Menu(void);//显示菜谱
void Table_Init(void);//餐桌信息初始化
int search(void);//查找匹配的餐桌
ORDER* Dish_Order(ORDER *,ORDER *);//将节点插入到主链
void Display(int);//显示菜的信息;
void saveInList(float);//将客户消费额写入账单
void Save_Inform(ORDER *,int);//将已结账订单信息写入历史记录
ORDER *Payment(ORDER *);//结账
void ModifyPW(int);//密码修改
int Pass_Word(void);//密码验证
void Observe(void);//账目查询
void ListMenu(void);//账单管理菜单
void List_Management(void);//账单管理
void Main_Menu(void);//主菜单
void Get_Rank(void);//统计
void Menu_select(void);//选择功能
//主函数
void main(){
Table_Init();
Menu_select();
}
//系统主菜单
void Main_Menu(){
printf("\n*********************************\n");
printf("餐厅服务系统\n");
printf("\n*********************************\n");
printf("1.点菜\n");
printf("2.客户结账\n");
printf("3.账目管理\n");
printf("4.餐厅统计\n");
printf("5.退出系统\n");
}
//选择功能
void Menu_select(void){
ORDER*
head;
int choose;
int result;
head=NULL;
system("cls");
do{
LOAD_Dish();
Main_Menu();
printf("请选择:\n");
fflush(stdin);
scanf("%d",&choose);
switch(choose){
case 1: result=search();
if(result==1)
printf("您可以在%d号餐桌就餐\n",result);
else
printf("您和您的朋友可以在%d号餐桌就餐\n",result);
Dish_Menu();
head=Dish_Order(head,CreateOne(result));
break;
case 2: head=Payment(head);
break;
case 3: List_Management();
break;
case 4: Get_Rank();
break;
case 5: exit(1);
break;
}
}while(1);
}
//从文件中读取菜谱
void LOAD_Dish(void){
FILE
*fp;
int i;
fp=fopen("dish_name.txt","r");
for(i=0;i<D;i++)
{
fscanf(fp,"%d\t%s\t%f\n",&dish[i].Dish_ID,dish[i].Dish_Name,&dish[i].Dish_Price);
}
}
//餐桌初始化
void Table_Init(){
tb[0].Capacity=1;tb[0].Table_ID=1;
tb[1].Capacity=1;tb[1].Table_ID=2;
tb[2].Capacity=2;tb[2].Table_ID=3;
tb[3].Capacity=2;tb[3].Table_ID=4;
tb[4].Capacity=2;tb[4].Table_ID=5;
tb[5].Capacity=3;tb[5].Table_ID=6;
tb[6].Capacity=4;tb[6].Table_ID=7;
tb[7].Capacity=4;tb[7].Table_ID=8;
tb[8].Capacity=4;tb[8].Table_ID=9;
tb[9].Capacity=4;tb[9].Table_ID=10;
}
//显示菜谱
void Dish_Menu(void){
int i;
printf("**********欢迎选购本店菜***********\n");
printf("菜编号\t菜名\t菜单价\n");
for(i=0;i<D;i++)
printf("%d\t%s\t%f\n",dish[i].Dish_ID,dish[i].Dish_Name,dish[i].Dish_Price);
}
//查找有没有匹配的餐桌
int search(void){
int
Cust_Num;
int i;
printf("请输入来客量\n");
scanf("%d",&Cust_Num);
if(MaxCapacity<Cust_Num){
printf("抱歉,本店没有容纳%d的餐桌\n",Cust_Num);
return -1;
}
while(Cust_Num<=MaxCapacity){
for(i=0;i<H;i++){
if(tb[i].Table_State==0){
if(tb[i].Capacity==Cust_Num)
return
(tb[i].Table_ID);
}
}
printf("抱歉,现在没有%d人桌\n",Cust_Num);
Cust_Num+=1;
}
printf("餐桌已满,请客人稍等。");
return -1;
}
//创建一份订单
ORDER*CreateOne(int result){
ORDER*p;
int i;
p=ASK;
if(result!=-1){
p->Table_ID=result;
for(i=0;i<D;i++){
printf("请输入菜的编号,按0结束输入:");
scanf("%d",&p->Dish_ID[i]);
if((p->Dish_ID[i]<0)||(p->Dish_ID[i]>10)){
printf("超出菜谱范围,请重新输入\n");
i--;
}
else if(p->Dish_ID[i]==0)
break;
else
p->Dish_ID[i]=0;
}
tb[result-1].Table_State=1;
}
p->next=NULL;
return p;
}
//添加到主链
ORDER* Dish_Order(ORDER *head,ORDER *p){
ORDER
*p1;
p1=head;
if(p1!=NULL){
if(p!=NULL){
while(p1->next!=NULL){
p1=p1->next;
}
p1->next=p;
printf("创建订单成功\n");
}
else
printf("创建订单失败\n");
}
else{
if(head==NULL&&p!=NULL)
head=p;
}
return head;
}
//根据菜单的编号打印一道菜的信息
void Display(int ID){
int
i=0;
for(i=0;i<D;i++){
if(dish[i].Dish_ID==ID){
printf("%d\t%s\t%f\n",dish[i].Dish_ID,dish[i].Dish_Name,&dish[i].Dish_Price);
break;
}
}
}
//将消费额写入菜单
void saveInList(float pay){
FILE*fp;
time_t timer;
timer=time(NULL);
if((fp=fopen("账本.txt","a"))==NULL){
printf("操作失败\n");
exit(1);
}
fprintf(fp,"%f\t%s\n",pay,ctime(&timer));
printf("账本保存成功\n");
fclose(fp);
}
//将以结账的客户写入历史记录
void Save_Inform(ORDER *p,int m){
FILE*fp;
time_t timer;
int i=0;
timer=time(NULL);
if((fp=fopen("历史记录.txt","a"))==NULL){
printf("操作失败\n");
exit(1);