首页 > 其他分享 >C语言课设-电话订餐管理系统

C语言课设-电话订餐管理系统

时间:2024-07-04 18:58:29浏览次数:21  
标签:guest 课设 用餐 C语言 订餐 输入 printf 餐桌

一、设计需求

        某餐厅有大、中、小三种餐桌各5个,餐桌号分别为A1-A5,B1-B5,C1-C5,大餐桌可供8-10人用餐,中餐桌可供5-7人用餐,小餐桌可供1-4人用餐。电话订餐信息包括:订餐编号、订餐者姓名、订餐者电话、用餐时间、用餐人数、订餐是否成功,如下表所示。

订餐编号

订餐者姓名

订餐者电话

用餐时间

用餐人数

订餐是否成功

餐桌号

FPY201900001

张三

13012345678

12:00

5

B1

FPY201900002

李四

13212345678

12:10

8

A3

FPY201900003

王五

13312345678

12:20

2

/

FPY201900004

赵六

13412345678

12:30

3

C1

FPY201900005

陈七

13512345678

12:40

12

/

二、功能设计

        假定该餐厅每个餐桌只接待一桌顾客(即不考虑餐桌可以分批使用的情况)。订餐时,系统自动根据用餐人数分配大、中、小三种餐桌,餐桌号也是自动分配(即按从小到大的顺序分配),如果该类型的餐桌没有了,则订餐失败,如果人数大于10,也是订餐失败。

        给该餐厅设计一套电话订餐系统,并具有以下功能:

        1、输入功能:输入信息包括订餐编号、订餐者姓名、订餐者电话、用餐时间、用餐人数。(要求:① 至少输入10条订餐信息;② 可以在原有记录的基础上,添加新的记录;③ 要求订餐编号不能重复,输入过程中如果出现相同的订餐编号,应给出报错信号,并重新输入;④ 订餐编号、订餐者姓名、订餐者电话要求用字符数组或字符指针;输入基本订餐信息后,系统自动分配餐桌,并记录是否订餐成功)

        2、排序功能:对所有录入的订餐信息记录进行排序,并以表7的方式输出。(要求:至少提供三种排序方式,如按订餐编号排序、按订餐者姓名排序、按用餐时间等。)

        3、统计功能:对录入的订餐记录进行统计。(要求:自己设计统计表格的形式,但必须包括以下统计信息:订到大、中、小餐桌的桌数,订餐成功的桌数,某个时间段内的订餐次数等)。

        4、查询功能:查找满足一定条件的订餐记录信息,并以表8的方式输出查询结果。(要求:① 提供三种查询方式:按订餐编号查询、按订餐者姓名查询、按用餐时间是否在某个区间查询;② 如果满足条件的记录有多条,应全部列出;③ 如果没有满足条件的记录,应给出相应的提示。)

        5、 修改功能:输入订餐编号,若存在,则可以对其各项信息进行修改;如果该订餐信息不存在,必须有相应的提示。(要求:修改之前应再次确认是否修改。)

        6、 删除功能:输入订餐编号,若存在,删除其所有信息;否则,须有相应的提示。(要求:删除之前应再次确认是否删除。)

        7、退出系统:退出系统之前,要再次确认。

三、代码实现

1.结构体功能

struct information 
{                     
    char name[8];    
    int sum;
    char time[10];   
    char phone[20];     
    char number[20];     
    char table[2];  
    int T;    
	int P;         
}guest[MaxSize];

2.输入、排序、统计、查询、修改等功能函数

以输入Insert函数为例

void Insert(int *count)
{
    int i,j,bb;
    char num[20];
    if (A+B+C == MaxSize)
    {
        printf("空间已满!");
        return;
    }
    printf("请输入编号:");
    scanf("%s",num);
    for (i = 0; i < *count; i++)  /*查找符合条件的记录 */
		if (   strcmp(guest[i].number,num) == 0&&guest[i].P == 1)
        {
            printf("已经有相同的编号!!!");
            return;
        }
	strcpy(guest[i].number, num) ;	/*接收插入数据 */
    printf("请输入姓名:");
    scanf("%s", guest[i].name);
    printf("请输入人数:");
    scanf("%d", &guest[i].sum);
    if (guest[i].sum>10)
    {
    	printf("没有能够容纳这么多人的桌子!!\n");
    	return;
	}
    printf("请输入电话号码:");
    scanf("%s", &guest[i].phone);
    printf("请输入用餐时间:");
    scanf("%s", guest[i].time);
    (*count)++;
    guest[i].P=1;
    if (guest[i].sum <= 4)
        {
            C++;
            if (C <= 5)
            {
              guest[i].T = 1;//订餐成功 
              guest[i].table [0]= 'C';
			  guest[i].table[1] = 49;
			  for(j = 0;j < *count;j++)
			    if(guest[j].P == 1&&guest[j].table[0] == 'C')
				{
					if(j == i)   continue;
					else
					{
						if(guest[i].table[1] == guest[j].table[1])  guest[i].table[1]++;
						else  break;
					}		
				}
            }
            else
            {
				printf("小号餐桌不够!\n");
				C = 5;
                guest[i].T = 0;
                guest[i].table[0] = 47;//47的ASCII是\ 
                guest[i].table[1] = 0;
            }
        }
    else
        {
        if (guest[i].sum <= 7)
            {
                B++;
                if (B <= 5)
                {
                    guest[i].T = 1;
					guest[i].table[0] = 'B';
					guest[i].table[1] = 49;
                    for( j = 0;j < *count;j++)
						if(guest[j].P == 1&&guest[j].table[0] == 'B')
							{	if(j == i)  continue;
								else
								{
									if(guest[i].table[1] == guest[j].table[1])  guest[i].table[1]++;
									else  break;
								}
							}
                }
                else
                {
					printf("中号餐桌不够!\n");
					B = 5;
                    guest[i].T = 0;
					guest[i].P = 0;
                    guest[i].table[0] = 47;
                    guest[i].table[1] = 0;
                }
                
            }
        else
            {
            if (guest[i].sum <= 10)
                {
                A++;
                if (A <= 5)
                {
                	guest[i].T = 1;
                    guest[i].table[0] = 'A';
					guest[i].table[1] = 49;
					for( j = 0;j < *count;j++)
						if(guest[j].P == 1&&guest[j].table[0] == 'A')
							{	if(j == i)  continue;
								else
								{
								if(guest[i].table[1] == guest[j].table[1])  guest[i].table[1]++;
								else break;
								}
							}
                }
                else
                {
					printf("大号餐桌不够!\n");
					A = 5;
					guest[i].P = 0;
                    guest[i].T = 0;
                    guest[i].table[0] = 47;
                    guest[i].table[1] = 0;
                }
                }

            else
            {
				guest[i].P = 0;
                guest[i].T = 0;
                guest[i].table[0] = 47;
                guest[i].table[1] = 0;
            }
            }
        }
	if(guest[i].T == 1)
		  printf("订餐成功!\n");
	else 
		printf("订餐失败\n");
}

3.主函数main

int main()
{ 
    char pass[80],zh[100];
    int oi = 0;
    printf("用户名:");
	scanf("%s",&zh);
    while (1)
    {
        printf("请输入密码:");
        scanf("%s",&pass);
        oi++;
        if (strcmp(pass, "123456789") != 0)
            printf("密码错误,请再试一次\n");
        else break;
        if (oi == 3)exit(0);
    }
    if (oi >= 3)printf("请稍后再尝试\n");
    else printf("欢迎进入订餐信息管理系统。\n");

    int i;
    int count = 0;
    do {   
        printf("\n");
        printf("*******************************************************************\n");
        printf("**                         1---输入订单信息                      **\n");
        printf("**                         2---查询订单信息                      **\n");
        printf("**                         3---修改订单信息                      **\n");
        printf("**                         4---删除订单信息                      **\n");
        printf("**                         5---排序订单信息                      **\n");
        printf("**                         6---统计订单信息                      **\n");
        printf("**                         7---退出订餐系统                      **\n");
        printf("*******************************************************************\n");
        printf("\n");
        scanf("%d", &i); 
        switch (i)
        {
        case 1:Insert(&count);     break;
        case 2:Search(count);      break;
        case 3:Change(count);      break;
        case 4:Delete(&count);     break;
        case 5:Order(count);       break;
        case 6:Stasistic(count);   break;
        case 7:
		{
			char sure;
			printf("你是否退出系统(Y/N)\n");
			scanf("%c",&sure);
			if(sure=='Y')
			{
				printf("感谢使用本订餐系统,期待下次再会!");
				return 0;
			}
			else continue;
			system("cls");
		}
		break;    
        default:printf("错误选择!请重选");
        break;
        }
    } while (1);
    
    return 0;
}

4.其他代码详见附件

四、完整代码附件

标签:guest,课设,用餐,C语言,订餐,输入,printf,餐桌
From: https://blog.csdn.net/weixin_62492456/article/details/140083831

相关文章

  • STM32秒表设计【课设4/5】
    引言终于轮到我们最后的八段LED了!作为秒表的眼睛,必不可少的就是显示模块。八段LED初始化直接就叫做LED_Init()吧voidLED_Init(void){GPIO_InitTypeDefled; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE); led.GPIO_Mode=GPIO_Mode_IPU; led.GPIO_Pin=GPI......
  • 【数据结构】(C语言):二叉搜索树(不使用递归)
    二叉搜索树:非线性的,树是层级结构。基本单位是节点,每个节点最多2个子节点。有序。每个节点,其左子节点都比它小,其右子节点都比它大。每个子树都是一个二叉搜索树。每个节点及其所有子节点形成子树。可以是空树。C语言实现:(使用链表实现,不使用递归) 创建结构体数据类型(记录二叉......
  • 【C语言】break 关键字
    当在C语言中使用break关键字时,它通常用于两种主要情况:在循环中和在switch语句中。让我们详细看看每种情况下的用法和作用。在循环中的使用:在循环中,break语句的作用是立即终止当前所在的循环,然后跳出循环体执行循环后面的代码。这对于在达到某个条件后停止循环非常有用。......
  • springboot006基于SpringBoot的网上订餐系统
    简介【毕设项目推荐javaweb项目】基于springboot+vue的网上订餐系统(springboot006)适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考,不得用于商业或者非法用途,否则,一切后果请用户自负。看运行截图看第五章获取资料方式项目编号:springboot00......
  • C语言函数静态库和动态库的创建和使用
    使用库函数是源码的一种保护???<我猜的.>库函数其实不是新鲜的东西,我们一直都在用,比如C库.我们执行pringf()这个函数的时候,就是调用C库的函数. 下面记录静态库和动态库的生成和使用. 静态库:libxxx.a动态库:libxxx.so 静态库: 在程序编译的时候,将库编译进可......
  • STM32秒表设计【课设3/5】
    引言今天我们来写秒表的核心——定时器!初始化时钟首先得开时钟吧!然后得配置时钟吧!最后再将配置初始化进去吧!我直接叫它为TIM6_Init();让我们看看TIM6在那个时钟上吧!OK!直接开写:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE)让我们看看里面需要配置啥吧,配置的......
  • 【C语言小知识】备选拼写:iso646.h头文件
    备选拼写:iso646.h头文件C语言中有3种逻辑运算符:逻辑运算符含义&&与||或!非假设exp1和exp2是俩个简单的关系表达式,那么当且仅当exp1和exp2都为真时,exp1&&exp2才为真。如果exp1或exp2为真,则exp1||exp2为真。如果exp1为假,则!exp为真;如果exp1为真,则!exp为假。i......
  • 【C语言】指针经典例题
    题1: #include<stdio.h>intmain(){inta[5]={1,2,3,4,5};int*ptr=(int*)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));return0;}//程序的结果是什么?解答如下:  题2:#include<stdio.h>//这里告知结构体的大小是20个字节stru......
  • 【C语言】指针和数组经典练习题(一)
    //一维数组inta[]={1,2,3,4};printf("%d\n",sizeof(a));printf("%d\n",sizeof(a+0));printf("%d\n",sizeof(*a));printf("%d\n",sizeof(a+1));printf("%d\n",sizeof(a[1]));printf("%d\n",sizeof(&a......
  • #C语言基础 笔记三
     指针和数组直接访问:按变量的地址存取变量的值(通过数组名访问)间接访问:通过存放变量的地址的变量去访问元素(通过指针访问)1.指针和一维数组inta[5]={1,2,3,4,5};int*p=a;直接访问:inta[5]={5,4,3,2,1};int*p=a;printf("%p%p%p\n",......