概述
/*
项目名称:南航餐饮管理系统
组员:梁文新,刘青林,刘艺,施瑞文(组长)
*/
//当注册用户名为:root,密码为:root的账号时,系统默认为初始管理员
//头文件
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<windows.h>
#include<string.h>
//宏定义区
#define M sizeof(struct User)//用户表的大小
#define N sizeof(struct stapleFood)//主食 表大小
#define P sizeof(struct non_stapleFood)//副食表大小
#define Q sizeof(struct Drink_beverage) //饮品表大小
#define X sizeof(struct Table)//餐桌表大小
#define Y sizeof(struct Form)//订单表大小
//结构体
struct User //用户表
{
char userName[10];//用户名
char passWord[18];//密码
int isVIP;//会员标记
int isAdministrator;//管理员标记
float money;//余额
struct User *next;//指针域
};
typedef struct User user;
typedef user* pUser;
struct stapleFood //主食
{
char name[20];
float price;
struct stapleFood *next;
};
typedef struct stapleFood staple_food;
typedef staple_food *pStapleFood;
struct non_stapleFood //副食
{
char name[20];
float price;
struct non_stapleFood *next;
};
typedef struct non_stapleFood non_staple_food;
typedef non_staple_food *pNon_stapleFood;
struct Drink_beverage //饮品
{
char name[20];
float price;
struct Drink_beverage *next;
};
typedef struct Drink_beverage drinkBeverage;
typedef drinkBeverage *pDrinkBeverage;
struct Table //餐桌
{
int ID;//餐桌编号
int People;//已坐人数
int count;//可容纳人数
char Username[10];//订餐人
struct Table *next;
};
typedef struct Table table;
typedef table *pTable;
struct Form //订单
{
char name[20];
float price;
struct Form *next;
};
typedef struct Form orderForm;
typedef orderForm *pOrder;
//自定义函数区
//用户客户端
void Default();//欢迎界面
void User_Login();//用户登录界面
void Logon();//注册界面
pUser readUserFile();//从文件中读取用户信息,返回一个表头地址
void save_User(pUser p1);//将用户信息保存到文件中
void User_Menu();//用户菜单
void User_Order();//点餐
void Order_StapleFood();//主食
void Order_nonStapleFood();//副食
void Order_DrinkBeverage();//饮品
void Order_Form(int ID,int number);//订单
void User_List_Table();//餐桌列表
void Apply_VIP_Menu();//会员办理菜单
void Add_money(pUser head);//充值
void Updata_User(pUser head);//更新用户表
void Apply_VIP(pUser head);//办理会员
void User_Wallet();//我的钱包
//管理员客户端
void Administrator_Menu();//管理员菜单
void Administrator_Login();//管理员登录
void Check_User();//查看用户
void Find_User();//查找用户
void All_User();//查看所有用户
void All_VIP();//本店会员
void Setup_administrator();//设置管理员
void Food();//菜品信息
void Add_Food();//添加菜单
void save_stapleFood(pStapleFood p);//保存主食信息
void save_non_stapleFood(pNon_stapleFood p);//保存副食信息
void save_drinkBeverage(pDrinkBeverage p);//保存饮品信息
pStapleFood readStapleFoodFile();//从主食文件中读取用户信息,返回一个表头地址
pNon_stapleFood readNonStapleFoodFile();//从副食文件中读取用户信息,返回一个表头地址
pDrinkBeverage readDrinkBeverageFile();//从饮品文件中读取用户信息,返回一个表头地址
void Table();//餐桌管理
void Add_Table();//添加餐桌
void save_Table(pTable p);//保存餐桌信息
pTable readTableFile(); //从餐桌文件中读取用户信息,返回一个表头地址
void Clear_Table();//清理餐桌
void Clear_oneTable();//清理指定餐桌
void Clear_allTable();//清理所有餐桌
void Updata_Table(pTable head);//更新餐桌文件
void Administrator_List_Table();//餐桌列表
//公共函数
void toxy(int x,int y);//将光标移动到x,y坐标处
void HideCursor(int x);//隐藏光标
char *HidePassword();//隐藏密码
void Exit();//退出系统
void Change();//切换账号
void Amend_passWord();//修改密码
void List_Food();//菜单列表
//全局变量区
char _userName[10];
char _passWord[18];//记录当前用户
pOrder orderHead=NULL,p2=NULL;//记录当前用户的订单
int num=0;
//函数实现区
void toxy(int x,int y)//将光标移动到x,y坐标处
{
COORD pos={x,y};
HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(Out,pos);
}
void HideCursor(int x)//隐藏光标 ,当x为0时,隐藏,为1时,显示
{
CONSOLE_CURSOR_INFO cursor_info ={1,x};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}
void Default()//欢迎界面
{
char t;//用于选择
do
{
HideCursor(0); //隐藏光标
system("color 72");
toxy(28,8);
printf(" 欢迎来到南航餐饮! ");
toxy(26,9);
printf("-----------------------------");
toxy(27,11);
printf("1.登录 2.注册 3.管理员登录");
while(1) //死循环为防止其他按键干扰
{
t=getch();//不回显函数
if(t=='1')//如果按1,则进入登录界面
User_Login();
else if(t=='2')//如果按2,则进入注册界面
Logon();
else if(t=='3')
Administrator_Login();
}//如果既不是1也不是2和3,则循环输入
}while(1);//永远为真
}
void User_Menu()//用户菜单
{
char t;//用于选择菜单选项
do
{
system("cls");
HideCursor(0); //隐藏光标
system("color 74");
toxy(32,3);
printf("南航餐饮点餐系统!");
toxy(32,4);
printf("当前用户:%s",_userName);
toxy(30,5);
printf("*********************");
toxy(32,7);
printf("| 1.菜单列表 |");
toxy(32,9);
printf("| 2.餐桌列表 |");
toxy(32,11);
printf("| 3.会员办理 |");
toxy(32,13);
printf("| 4.修改密码 |");
toxy(32,15);
printf("| 5.我的钱包 |");
toxy(32,17);
printf("| 6.切换账号 |");
toxy(32,19);
printf("| 7.退出系统 |");
t=getch();//不回显函数,输入一个值
switch(t)
{
case '1':User_Order();break;
case '2':User_List_Table();break;
case '3':Apply_VIP_Menu();break;
case '4':Amend_passWord();break;
case '5':User_Wallet();break;
case '6':Change();break;
case '7':Exit();break;
default :break;
}
}while(1);//永远 为真
}
char *HidePassword()//隐藏密码
{
char password[18];//密码
char *p;//指向密码的指针
int i=0;//记录密码位数
char t;//输入密码
for(;;) //此处为输入密码不回显操作
{
t=getch(); //输入k
if(t=='r') //如果输入k为回车,则跳出循环
{
break;
}
else if(t=='b') //如果输入k为删除键
{
if(i>0) //如若密码还没完全删除
{
printf("b");
printf(" ");
printf("b");
i--;
}
}
else //如果输入的k既不是删除键,也不是回车键
{
password[i]=t; //把k的值赋给_password[i];
printf("*"); //输出*号,保护用户隐私
i++; //密码位数加1
}
}
password[i]='