#include "stdio.h"
#include <stdlib.h>
#include <string.h>
int n=0,A=0,B=0,C=0;
struct customer
{
char index[20];
char name[20];
char num[20];
char time[20];
int sum;
char status[10];
char tabletype[1];
int tablenum;
struct customer *next;
};
void main()
{
void input(struct customer **client);
void sorting(struct customer **client);
/7oid total(struct customer **client);
/7oid search(struct customer **client);
/7oid modify(struct customer **client);
/7oid cut(struct customer **client);
char i,j;
struct customer client=NULL;
for(; ;)
{
system("cls");
printf(" * * * * Menue * * * \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(" 请选择1-7\n");
fflush(stdin);
i=getchar();
fflush(stdin);
if(i=='7')
{printf("是否确定要退出?\n(Y/N)");
fflush(stdin);
j=getchar();
if(j=='Y'||j=='y')
exit: break;
else if(j=='N'||j=='n')
printf("请重新选择!");
else
for(;;)
{
printf("你输入的格式不对,请重新输入\n");
fflush(stdin);
j=getchar();
if(j=='Y'||j=='y')
goto exit;
if(j=='N'||j=='n')
break;
}
}
switch(i)
{
case '1': input(&client);break;
case '2': sorting(&client);break;
//case '3': total(&client);break;
//case '4': search(&client); break;
//case '5': modify(&client); break;
//case '6': cut(&client); break;
}
}
}
void input (struct customer **client)
{
struct customer *add;
static struct customer tail;
char j;
static int k=0;
static int u=0;
static int v=0;
static int w=0;
for(;;)
{
add=(struct customer)malloc(sizeof(struct customer));
if(add==NULL)
{
printf("内存分配错误");
exit(1);
}
system("cls");
printf("输入页面\n");
if(*client==NULL)
{
*client=add;
add->next=NULL;
}
else
{
tail->next=add;
add->next=NULL;
}
printf("订餐编号:");
fflush(stdin);
gets(add->index);
fflush(stdin);
//if(i>=1)//检验是否与之前的编号重复//
// {
// for(z=0;;)
// {
// if(strcmp(record[z].index,record[i].index)==0)
// {
// printf("输入编号重复!请重新输入\n");
// fflush(stdin);
// gets(record[i].index);
// fflush(stdin);
// if(strcmp(record[z].index,record[i].index)!=0)
// {
// break;
// }
// }
// else break;
//}
//}
printf("订餐者名字:");
gets(add->name);
printf("订餐者电话:");
gets(add->num);
printf("订餐时间:");
gets(add->time);
printf("订餐人数:");//进行分桌//
for(; ;)
{
scanf("%d",&add->sum);
if(add->sum<=10&&add->sum>=8)
{
A++;
if(A>5)
{
goto fail;
}
else
{
printf("预约成功!");
u++;
strcpy(add->tabletype,"A");
add->tablenum=u;
strcpy(add->status,"预约成功");
break;
}
}
else if(add->sum<=7&&add->sum>=5)
{B++;
if(B>5)
{
goto fail;
}
else
{ printf("预约成功!");
v++;
strcpy(add->tabletype,"B");
add->tablenum=v;
strcpy(add->status,"预约成功");
break;
}
}
else if(add->sum<=4&&add->sum>=0)
{
C++;
if(C>5)
{
goto fail;
}
else
{
printf("预约成功!");
w++;
strcpy(add->tabletype,"C");
add->tablenum=w;
strcpy(add->status,"预约成功");
break;
}
}
else if(add->sum>10) //预约失败//
{
fail:printf("预约失败");
strcpy(add->status,"预约失败");
break;
}
else
{
printf("格式不正确,请再次输入\n");//输入的格式不对
}
}
tail=add;
printf("是否还要继续添加?(Y/N)");//进行是否继续添加订餐的选择
fflush(stdin);
j=getchar();
fflush(stdin);
if(j=='N'||j=='n')
{
quit:break;
}
else if(j=='Y'||j=='y')
system("cls");
else //格式不正确,进行再次输入
{
printf("格式错误请再次输入\n!");
for(; ;)
{fflush(stdin);
j=getchar();
fflush(stdin);
if(j=='Y'||j=='y')
{system("cls");
break;
}
else if(j=='N'||j=='n')
goto quit;//quit是跳回主页面
else
printf("格式错误请再次输入!\n");
}
}
}
}
void sorting(struct customer **client)
{
void index(struct customer **head);
/7oid name(struct customer **head);
/7oid sum(struct customer **head);
int i;
struct customer *arrow;
struct customer *head;
head=*client;
arrow=head;
printf("排序方式(编号(输入1)/名字(输入2)/人数(输入3))\n");
fflush(stdin);
i=getchar();
fflush(stdin);
printf("编号 名字 电话号码 时间 人数 状态 位置\n");
switch(i)
{
case '1': index(&head);
arrow=head;
while(arrow!=NULL)
{
printf("%10s%6s%12s%8s%4d%13s%2s%d\n",arrow->index,arrow->name,arrow->num,arrow->time,arrow->sum,arrow->status,arrow->tabletype,arrow->tablenum);
arrow=arrow->next;
}
fflush(stdin);
getchar( );break;
case '2': //name(&head);
while(arrow!=NULL)
{
printf("%10s%6s%12s%8s%4d%13s%2s%d\n",arrow->index,arrow->name,arrow->num,arrow->time,arrow->sum,arrow->status,arrow->tabletype,arrow->tablenum);
arrow=arrow->next;
}
fflush(stdin);
getchar( );break;
case '3':// sum(&head);
while(arrow!=NULL)
{
printf("%10s%6s%12s%8s%4d%13s%2s%d\n",arrow->index,arrow->name,arrow->num,arrow->time,arrow->sum,arrow->status,arrow->tabletype,arrow->tablenum);
arrow=arrow->next;
}
fflush(stdin);
getchar();
break;
}
}
struct customer *merge(struct customer *head1, struct customer *head2)
{
struct customer *res ,*p ;
if(head1 == NULL)
return (head2);
if(head2 == NULL)
return (head1);
if(head1->index < head2->index)
{res = head1; head1 = head1->next;}
else{res = head2; head2 = head2->next;}
p = res;
while(head1 != NULL && head2 != NULL)
{
if(head1->index < head2->index)
{
p->next = head1;
head1 = head1->next;
}
else
{
p->next = head2;
head2 = head2->next;
}
p = p->next;
}
if(head1 != NULL)p->next = head1;
else if(head2 != NULL)p->next = head2;
return res;
}
struct customer *mergelist(struct customer arrowhead)
{
struct customerfast,*slow;
if(arrowhead==NULL||arrowhead->next==NULL)
{
return arrowhead;
}
else
{
fast=arrowhead;
slow=arrowhead;
while(fast!=NULL||fast->next!=NULL)
{
fast=fast->next->next;
slow=slow->next;
}
fast=slow;
fast->next=NULL;
slow=slow->next;
fast=mergelist(arrowhead);
slow=mergelist(slow);
return merge(fast,slow);
}
}
void index(struct customer **head)
{
struct customer *arrowhead;
arrowhead=*head;
mergelist(arrowhead);
while(arrowhead!=NULL)
{
printf("%10s%6s%12s%8s%4d%13s%2s%d\n",arrowhead->index,arrowhead->name,arrowhead->num,arrowhead->time,arrowhead->sum,arrowhead->status,arrowhead->tabletype,arrowhead->tablenum);
arrowhead=arrowhead->next;
}
}