餐厅预定系统

#include
#include
#include
using namespace std;

typedef struct _RECORD
{
	int date[4];//年月日小时
	char name[20];//预订人
	int count;//预定人数
	char tel[20];//联系方式
}REC;

struct List
{
	REC data;//数据域
	struct List* next;//指针域
};

int FLAG=1;//记录是否要显示

void Add_Book_Rec(List& node)
{
	List* p;
	char temp[30];
	int i,j;
	if(node.next==NULL)//如果是空链表
	{
		node.next=new List;
		p=node.next;
		p->next=NULL;
	}
	else//不是空链表 让p指向尾节点
	{
		p=node.next;
		while(p->next!=NULL)
		{
			p=p->next;
		}
		p->next=new List;
		p=p->next;
		p->next=NULL;
	}
	system("cls");
	cout<<"请输入预订人:"<>p->data.name;
	cout<<"请输入预定时间(year-mon-day-hour):"<>temp;
	p->data.date[0]=0;
	p->data.date[1]=0;
	p->data.date[2]=0;
	p->data.date[3]=0;//初始化日期
	for(j=0,i=0;j<4;j++)
	{
		while(temp[i]!='-'&&temp[i]!='\0')
		{
			
			p->data.date[j]=p->data.date[j]*10+temp[i]-'0';
			i++;
		}
		i++;
	}//拆分字符串 变成4个整形变量 记录时间

	cout<<"请输入预订人数:"<>p->data.count;
	cout<<"请输入联系方式:"<>p->data.tel;
	cout<<"添加成功!"<0&&node!=NULL;num--,node=node->next)//如果链表不为空 并且没有输出指定数量
	{
		cout<data.date[0]<<"-";
		cout<data.date[1]<<"-";
		cout<data.date[2]<<"   ";
		cout<data.date[3];cout.width(12);
		cout<data.name;cout.width(15);
		cout<data.count;cout.width(30);
		cout<data.tel<>temp;
	for(j=0,i=0;j<3;j++)
	{
		while(temp[i]!='-'&&temp[i]!='\0')
		{
			
			time[j]=time[j]*10+temp[i]-'0';
			i++;
		}
		i++;
	}

	do
	{
		if(p->data.date[0]==time[0]&&p->data.date[1]==time[1]&&p->data.date[2]==time[2])//根据输入的日期查找
		{
			Dis_Book_Rec(p,1);
			flag=0;//记录是否找到
			FLAG=0;//设置下次不显示中文
		}
		p=p->next;
	}while(p!=NULL);
	FLAG=1;//再次设置显示
	if(flag)//flag为1则没有找到
	{
		cout<<"该日期无预定信息!"<>temp;
	do
	{
		if(!strcmp(p->data.name,temp))
		{
			Dis_Book_Rec(p,1);
			flag=0;
			FLAG=0;
		}
		p=p->next;
	}while(p!=NULL);
	FLAG=1;
	if(flag)
	{
		cout<<"无该预定人信息!"<>chioce;
		while(chioce<0||chioce>2)
		{
			cout<<"输入范围错误,请重新输入:";
			cin.clear();
			cin>>chioce;
		}
		switch(chioce)
		{
		case 1:
			Serach_Date(node);
			break;
		case 2:
			Serach_Name(node);
			break;
		}
	}while(chioce!=0);

}

void Modfiy_Book_Rec(List& node)
{
	List* p=node.next;
	char temp[30];
	char name[30];
	int time[3]={0};
	int i,j,flag=1;
	if(node.next==NULL)//如果是空链表
	{
		cout<<"无预定信息!"<>name;
	cout<<"请输入预定时间(year-mon-day):"<>temp;
	for(j=0,i=0;j<3;j++)
	{
		while(temp[i]!='-'&&temp[i]!='\0')
		{
			
			time[j]=time[j]*10+temp[i]-'0';
			i++;
		}
		i++;
	}
	do
	{
		if(p->data.date[0]==time[0]&&p->data.date[1]==time[1]&&p->data.date[2]==time[2]&&(!strcmp(name,p->data.name)))
		{
			Dis_Book_Rec(p,1);
			flag=0;
			break;
		}
		p=p->next;
	}while(p!=NULL);
	if(flag)
	{
		cout<<"无该预定信息!"<>temp;
	p->data.date[0]=0;
	p->data.date[1]=0;
	p->data.date[2]=0;
	p->data.date[3]=0;//初始化日期
	for(j=0,i=0;j<4;j++)
	{
		while(temp[i]!='-'&&temp[i]!='\0')
		{
			
			p->data.date[j]=p->data.date[j]*10+temp[i]-'0';
			i++;
		}
		i++;
	}

	cout<<"请修改预订人数:"<>p->data.count;
	cout<<"请修改联系方式:"<>p->data.tel;
	cout<<"修改成功!"<>name;
	cout<<"请输入预定时间(year-mon-day):"<>temp;
	for(j=0,i=0;j<3;j++)
	{
		while(temp[i]!='-'&&temp[i]!='\0')
		{
			
			time[j]=time[j]*10+temp[i]-'0';
			i++;
		}
		i++;
	}//将输入字符串拆分
	do
	{
		if(p->data.date[0]==time[0]&&p->data.date[1]==time[1]&&p->data.date[2]==time[2]&&(!strcmp(name,p->data.name)))//如果是要查找的信息
		{
			Dis_Book_Rec(p,1);//显示
			flag=0;
			break;
		}
		q=p;
		p=p->next;
	}while(p!=NULL);
	if(flag)
	{
		cout<<"无该预定信息!"<>temp;
	if(!strcmp("Y",temp)||!strcmp("y",temp))
	{
		if(p==q)
		{
			node.next=q->next;
			delete q;
		}
		else
		{
			q->next=p->next;
			delete p;
		}
		cout<<"删除成功!"<>chioce;//记录选择
	while(chioce<0||chioce>5)//范围判断 避免错误
	{
		cout<<"输入范围错误,请重新输入:";
		cin.clear();//清空输入流
		cin>>chioce;
	}
	return chioce;//返回选择结果
}


/*文件保存读取*/
void Save_Book_Rec(List& node)
{
	List* p=node.next;
	ofstream fp;
	fp.open("Book_Rec.dat");//打开文件
	if(fp==NULL)//代开失败返回
	{return ;}

	while(p!=NULL)//遍历链表 写入文件
	{
		fp.write((char*)&p->data,sizeof(REC));
		p=p->next;
	}
	fp.close();//关闭文件
}

void Load_Book_Rec(List& node)//加载文件信息
{
	int i=0;
	List* p;
	ifstream fp;
	REC temp;
	fp.open("Book_Rec.dat");//打开文件
	if(fp==NULL)//打开失败返回
	{return ;}

	while(fp.read((char*)&temp,sizeof(REC)))//读取文件到结尾
	{
		if(node.next==NULL)
		{
			node.next=new List;
			p=node.next;
			p->next=NULL;
		}
		else
		{
			p->next=new List;
			p=p->next;
			p->next=NULL;
		}
		p->data=temp;//信息存放到链表
	}
	fp.close();//关闭文件
}


void Destory_List(List& node)//用户选择退出 释放内存链表数据
{
	List* p=node.next;
	List* q;
	while(p)
	{
		q=p;
		p=p->next;
		delete q;
	}
}

int main()
{
	List node;
	node.next=NULL;//头结点初始化
	Load_Book_Rec(node);//加载文件到链表
	int chioce;
	do
	{
		chioce=menu();//获取用户选项
		switch(chioce)
		{
		case 1:
			Add_Book_Rec(node);//添加
			Save_Book_Rec(node);//保存
			break;
		case 2:
			Modfiy_Book_Rec(node);//修改
			Save_Book_Rec(node);//保存
			break;
		case 3:
			Serach_Menu(node);//查找菜单
			break;
		case 4:
			Del_Book_Rec(node);//删除记录
			Save_Book_Rec(node);//保存
			break;
		case 5:
			system("cls");
			Dis_Book_Rec(node.next,100);//显示全部记录
			system("pause");
			break;
		case 0:
			Destory_List(node);//销毁链表
			break;
		}
	}while(chioce!=0);
	return 0;
}

你可能感兴趣的:(C/C++)