一、设计需求
某餐厅有大、中、小三种餐桌各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;
}