数据结构点餐管理系统java,C语言实现餐饮点餐管理系统

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

12ddaefdf1eb0439ecc599b54e2ed2dd.png

b0ab02d46374919bc98925b19d483cdc.png

f864fb4e0a64864331fcaca497f7df4b.png

90fec6c0d0ab7c4255b732d160f96d9f.png

01930d9334207682f5be0756793c2f29.png

具体代码如下

/*

项目名称:南航餐饮管理系统

组员:梁文新,刘青林,刘艺,施瑞文(组长)

*/

//当注册用户名为:root,密码为:root的账号时,系统默认为初始管理员

//头文件

#include

#include

#include

#include

#include

#include

//宏定义区

#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]='\0';//在数组末端加一个结束符

p=password;//让p指向该数组

return p; //返回一个指向密码的指针

}

pUser readUserFile()//从文件中读取用户信息,返回一个表头地址

{

FILE *fp; //文件指针

int n=0;//记录链表 的结点数

pUser head=NULL;//定义头指针

pUser p2,p,pre;

fp=fopen("User.txt","a+"); //以只读的方式打开文件

if(fp==NULL)

{

printf("cannot open file\n");

}

else

{

while(!feof(fp)) //判断文件位置标志是否移动到文件末尾

{

n++;

p=(pUser)malloc(M); //向内存申请一段空间

fread(p,M,1,fp); //将fp所指向的文件中的内容赋给p

if(n==1)

{

head=p;

p2=p;

}

else //创建链表

{

pre=p2;

p2->next=p;

p2=p;

}

}

p2->next=NULL;

}

if(n<=2)

head->next=NULL;

else

pre->next=NULL;

fclose(fp); //关闭文件

return head; //返回头指针

}

void save_User(pUser p1) //将p1所指向的内容存储到文件中

{

FILE *fp; //文件指针

fp=fopen("User.txt","a+"); //以追加的方式打开文件

if(fp==NULL)

{

printf("cannot open file\n");

}

if(fwrite(p1,M,1,fp)!=1) //将p1所指向的1个大小为N的数据结构写入fp所指向的文件中

{

printf("file write error\n");

}

fclose(fp); //关闭文件

}

void User_Login()//登录页面

{

char *q,t,c;//q指针用于接收 *HidePassword()函数返回的指向密码的指针,t和c均用于选择

pUser p=readUserFile();//从文件中读取用户信息,返回一个表头地址

do

{

HideCursor(1);//显示管光标

system("cls");//清屏

system("color 73");//设置颜色

toxy(28,8);

printf("南航餐饮管理系统登录界面");

toxy(26,9);

printf("-----------------------------");

toxy(32,11);

printf("用户名:");

toxy(32,13);

printf("密 码:");

toxy(40,11);

scanf("%s",_userName);

toxy(40,13);

q=HidePassword();//输入密码

strcpy(_passWord,q);//将获得的密码复制给_passWord[]数组

while(p!=NULL&&strcmp(p->userName,_userName)!=0) //遍历链表,寻找当前输入的账户的账号

{

p=p->next;

}

if(p!=NULL) //如果p不为空

{

if(strcmp(p->passWord,_passWord)==0) //如果输入的密码正确

{

toxy(32,16);

printf("正在登陆....");

Sleep(500); //暂停0.5秒

system("cls");

toxy(32,10);

printf("登陆成功!");

break; //跳出循环

}

else //如果输入的密码错误

{

toxy(32,16);

printf("正在登陆....");

Sleep(500);

system("cls");

toxy(30,8);

printf("-------------------------");

toxy(30,9);

printf("| |");

toxy(30,10);

printf("| 密码错误!是否继续? |");

toxy(30,12);

printf("| 1.是 2.否 |");

toxy(30,13);

printf("| |");

toxy(30,14);

printf("-------------------------");

while(1)//无限循环为防止其他按键干扰

{

t=getch(); //输入t

if(t=='1')

{

system("cls"); //清屏

break;

}

else if(t=='2') //如果输入t为n,进入开始界面

{

system("cls"); //清屏

Default();break;

}

}

}

}

else //如果p为空,即输入的账号不正确

{

toxy(32,16);

printf("正在登陆....");

Sleep(500);

system("cls");

toxy(30,8);

printf("-------------------------");

toxy(30,9);

printf("| |");

toxy(30,10);

printf("| 账号错误!是否继续? |");

toxy(30,11);

p

  • 7
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值