ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

用c语言编写简单的餐厅点餐系统(带后台)

2022-01-09 17:00:14  阅读:234  来源: 互联网

标签:name dishes int money 餐厅 printf 后台 点餐 输入


        这应该是比较简单的c语言程序了,因为学校c语言结课结的早,我当时才学到结构体指针,所以我就把我当时能运用的知识点全用在这个程序上了。虽说这个程序对当时的我来说是天花板,但是当我继续学习,我逐渐发现这个程序能升级的点实在是太多了。但我也一直没去完善emmmm(其实就是懒)。所以就硬着头皮把他发出来了。

        代码涉及的知识点:顺序结构,选择分支结构,循环结构,数组,自定义函数,指针和结构体。

        主要思路是:

定义的一个结构体数组,包含了三个成员,分别是菜品编号(serial_number),菜品名称(dishes_name[50]),和餐品价格(money)。定义一个结构体数组dishes[50],并给他赋值。然后再定义多个函数,使用多个printf分别输出交互后的页面。比如:开始的界面,命名为outside,欢迎界面,命名为welcome,菜单函数,命名为menu,等待函数,命名为waiting,账单函数,命名为bill,送客函数,命名为goodbye,后台函数,命名为backstage_welcome。这些是主函数需要的部分。

程序中多次设置可供goto使用的节点,用于使用后的返回,使程序更加完整。并合理使用清屏函数system("cls");,使程序保持简介的页面。

点餐系统的主要实现的功能是:

  (1)点餐前输入桌号和人数

  (2)菜单浏览功能

  (3)输入选的菜单

  (4)计算账单总金额;

    (5)按点菜的顺序进行排序等功能;

  (6)菜品信息的删除与修改;

难理解的知识点有:

在菜单函数中,输入的值为结构体地址,方便表格中数值引用。\t的作用是对齐,让界面更加整洁。\n是回车。struct menu* b中的b表示结构体struct menu的地址,b指向结构体的首地址,即结构体数组dishes[1],b+1指向结构体数组dishes[2],以此类推。->表示引用该地址下某一成员的值。用%d,%s输出结构体数组中对应的值。

在自定义账单函数中,用于输出菜品编号,名称,并计算总金额。NUM[50]中存放用户输入的菜品编号,struct menu* b用于输出菜单时对应菜品名称的调用,PAYMONEY用于输入主函数中已经计算好的总金额。然后再定义一个整型变量i,用于for循环计数。将i赋为0,执行后面的循环结构,if是判断结束循环的关键,循环到输入的数组int NUM[50]中的0后break结束本次循环,如果不是0,则持续输出菜单。循环结束后,输出总金额。

清屏函数在#include<conio.h>中。

实验问题

数组赋值问题应使用strcmp函数,而且不能调用结构体指针,因为结构体内的数组名就是他的首地址,再用地址会报错。

在使用清屏函数时,应该加一个getch或者scanf,防止还未输出就已经被清屏的情况。

解决了程序后台系统中,修改菜品名称时无法输入的问题,应加一行getch,把输入的回车吃掉。

代码如下:

#include<stdio.h>
#include<conio.h>
#include<string.h>
struct menu
{
	int serial_number;
	char dishes_name[50];
	int money;
}dishes[50]={	
				{1,"麻婆豆腐",20},
				{2,"鱼香鸡丝",25},
				{3,"北京烤鸭",67},
				{4,"乱炖",54},
				{5,"海带丝",12},
				{6,"土豆丝",12},
				{7,"可乐鸡翅",44},
				{8,"分米鸡",77},
				{9,"牛肉面",24},
				{10,"葱油饼",5},
				{11,"米饭",3}
								};
int outside(void)
{
	printf("--------------------------------\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|     欢迎来到餐厅点餐系统     |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("--------------------------------\n");
}
int welcome(int PEOPLENUMBER,int DESK)
{
	printf("--------------------------------\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|    第%d号的%d位客人,欢迎光临 |\n",PEOPLENUMBER,DESK);
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("--------------------------------\n");
}

int menu(struct menu* b)
{
	printf("------编号------名称-----价格---\n");
	printf("|     %d\t      %s\t    %d\t   |\t\n",(b)->serial_number,(b)->dishes_name,(b)->money);
	printf("|     %d\t      %s\t    %d\t   |\t\n",(b+1)->serial_number,(b+1)->dishes_name,(b+1)->money);
	printf("|     %d\t      %s\t    %d\t   |\t\n",(b+2)->serial_number,(b+2)->dishes_name,(b+2)->money);
	printf("|     %d\t      %s\t    %d\t   |\t\n",(b+3)->serial_number,(b+3)->dishes_name,(b+3)->money);
	printf("|     %d\t      %s\t    %d\t   |\t\n",(b+4)->serial_number,(b+4)->dishes_name,(b+4)->money);
	printf("|     %d\t      %s\t    %d\t   |\t\n",(b+5)->serial_number,(b+5)->dishes_name,(b+5)->money);
	printf("|     %d\t      %s\t    %d\t   |\t\n",(b+6)->serial_number,(b+6)->dishes_name,(b+6)->money);
	printf("|     %d\t      %s\t    %d\t   |\t\n",(b+7)->serial_number,(b+7)->dishes_name,(b+7)->money);
	printf("|     %d\t      %s\t    %d\t   |\t\n",(b+8)->serial_number,(b+8)->dishes_name,(b+8)->money);
	printf("|     %d\t%s\t      %d\t   |\t\n",(b+9)->serial_number,(b+9)->dishes_name,(b+9)->money);
	printf("|     %d\t%s\t      %d\t   |\t\n",(b+10)->serial_number,(b+10)->dishes_name,(b+10)->money);
	printf("--------------------------------\n");
	
}
int waiting(void)
{
	printf("--------------------------------\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|  已收到您的菜单,请等待上餐  |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("--------------------------------\n");
}
int bill(int NUM[50],struct menu* b,int PAYMONEY)
{
	printf("--------------------------------\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|        请查收您的账单        |\n");
	printf("|      如有异议请联系服务员    |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("--------------------------------\n");
	int i;
	for(i=0;;i++)
	{
		if(NUM[i]==0)
		{
			break;
		}
		printf("   %d\t     %s\t   %d\t\n",NUM[i],(b+NUM[i]-1)->dishes_name,(b+NUM[i]-1)->money);
	}
	printf("总共为%d元\n",PAYMONEY);
}
int goodbye(void)
{
	printf("--------------------------------\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|         谢谢您的回顾         |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("--------------------------------\n");
}
int backstage_welcome(void)
{
	printf("--------------------------------\n");
	printf("|                              |\n");
	printf("|     欢迎进入后台管理系统     |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("|        修改价格请输入1       |\n");
	printf("|                              |\n");
	printf("|        修改菜品请输入2       |\n");
	printf("|                              |\n");
	printf("|     退出管理员界面请输入3    |\n");
	printf("|                              |\n");
	printf("|                              |\n");
	printf("--------------------------------\n");
}

int main()
{
	start:
	outside();
	int desknumber,human;
	int n,i,num[50],paymoney=0;
	int keyword;
	int change;
	struct menu* pmenu=&dishes;
	printf("请输入餐桌号(输入1009进入管理界面)");
	scanf("%d",&desknumber);
	if(desknumber==1009)
	{
		goto start_backstage;
	}
	printf("请输入就餐人数");
	scanf("%d",&human);
	system("cls");
	welcome(human,desknumber); 
	printf("输入任意阿拉伯数字点击回车进入下一步");
	scanf("%d");
	system("cls");
	menu(pmenu);
	pmenu=&dishes;
	printf("请输入想吃的菜的编号,可一次输入多个编号,每个编号后请输入“,”,最后以0结束\n");
	for(i=0;;i++)
	{
		scanf("%d,",&num[i]);
		if(num[i]==0)
		{
			break;
		}
		else
		{
			paymoney+=((pmenu+num[i]-1)->money);
		}
	}
	system("cls");
	waiting();
	start_to_bill:
	printf("查看账单请输入1\n");
	scanf("%d",&n);
	system("cls");
	start_to_pay:
	if(n==1)
	{
		bill(num,pmenu,paymoney);
	}
	else
	{
		printf("输入有误,请重新输入\n");
		goto start_to_bill;
	}
	printf("已经帮您联系服务员,服务员将很快到达,请您稍等\n");
	printf("请服务员确认后输入密码(1111)\n");
	scanf("%d",&keyword);
	system("cls");
	if(keyword==1111)
	{
		goodbye();
		printf("请输入任意一个阿拉伯数字,重置点餐系统\n");
		scanf("%d");
		system("cls");
		goto start;
	}
	else
	{
		printf("输入错误,请重新输入\n");
		goto start_to_pay;
	}
	
	
	start_backstage:
	printf("请输入管理员密码(1111)"); 
	scanf("%d",&keyword);
	if(keyword!=1111)
	{
		printf("密码错误,随意输入一个阿拉伯数字返回");
		scanf("%d");
		system("cls");
		goto start;
	}
	system("cls");
	start_manage:
	backstage_welcome();
	scanf("%d",&change);
	if(change==1)
	{
		int bianhao,changemoney;
		printf("请输入菜品编号");
		scanf("%d",&bianhao);
		printf("\n请输入修改的价格\n");
		scanf("%d",&changemoney);
		(pmenu+bianhao-1)->money=changemoney;
		printf("修改成功,输入任意阿拉伯数字返回管理员界面\n");
		scanf("%d");
		system("cls");
		goto start_manage;
		
	}
	else if(change==3)
	{
		system("cls");
		goto start;
	}
	else if(change==2)
	{
		int bianhao;
		char dish_name[50];
		char *pname=&(pmenu+bianhao-1)->dishes_name;
		printf("请输入菜品编号");
		scanf("%d",&bianhao);
		getchar();
		printf("\n请输入修改的名称\n");
		gets(dish_name);
		strcpy(dishes[bianhao-1].dishes_name,dish_name);
		//strcpy(pname,dish_name);
		printf("修改成功,输入任意阿拉伯数字返回管理员界面\n");
		scanf("%d");
		system("cls");
		goto start_manage;
	}
	else
	{
		printf("请输入有效的数");
		system("cls");
		goto start_manage; 
	}
}

这个程序能升级的点还是有很多的,比如:可以写一个链表,自动录入菜品的名称和价格;还可以定义一个文件指针,用fopen和fclose,将菜单和流水保存在txt文件中,方便后续查阅。

标签:name,dishes,int,money,餐厅,printf,后台,点餐,输入
来源: https://blog.csdn.net/admin99995/article/details/122395300

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有