⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 train.cpp

📁 visual c++实现的火车售票系统
💻 CPP
字号:
#include<iostream.h>
#include"SqList.h"//引用外部头文件,等效为在本程序中的定义
#include<string.h>
static int n2,n3,n4,n5,temp;//定义全局变量
float ch7;

void menu(SqList h);//函数声明语句
void check(SqList h);
void checkin(SqList h);
void help();

void goback(SqList h)
{
	char ch;
	SqList L;//定义一对象
	InitList_Sq(L);//初始链表
	L=h;//表头
	cout<<"q返回主菜单,r返回查询菜单,s重新定票"<<endl;
	cin>>ch;
	switch(ch)
	{
	case 'q': menu(L);break;//返回主菜单
	case 'r': check(L);break;//返回上一级菜单
	case 's': checkin(L);break;//重新输入
	}
}//实现界面返回,以便继续操作

void display()
{
cout<<"********************************************************************************"<<endl;
}//为方便起见,定义此函数供调用,不用反复使用cout,而且修改方便

void als(char A,SqList h)
{
	
	SqList L;
	InitList_Sq(L);
	L=h;
	char ch=A;
	if(ch!='a'&&ch!='b'&&ch!='c'&&ch!='d')//选择终点站不存在时
	{
		cout<<"此站不存在"<<endl;
		goback(L);
	}
	else{
		display();
		cout<<"终点站"<<"   "<<"车次"<<"   "<<"日期"<<"    "<<"票定额"<<"   "<<"余票量"<<"    "<<"票 价"<<"    "<<"起始座位号"<<endl;
	for(int i=0;i<L.len;i++)
	{
		int k=i+7;
		n5=n4=n3=n2=L.elem[i].discut;//定义n2为定票变化后的值,防止票售出后,座位号没变化
		if(ch=='a'&&L.elem[i].endname=="北京"){cout<<L.elem[i].endname<<"      "<<L.elem[i].hnum<<"       "<<L.elem[i].day<<"      "<<L.elem[i].wholenum<<"      "<<L.elem[i].lastnum<<"        "<<L.elem[i].fnum<<"       "<<n2<<endl;}
		if(ch=='b'&&L.elem[i].endname=="徐州"){cout<<L.elem[i].endname<<"      "<<L.elem[i].hnum<<"       "<<L.elem[i].day<<"      "<<L.elem[i].wholenum<<"      "<<L.elem[i].lastnum<<"        "<<L.elem[i].fnum<<"       "<<n3<<endl;}
		if(ch=='c'&&L.elem[i].endname=="南京"){cout<<L.elem[i].endname<<"      "<<L.elem[i].hnum<<"       "<<L.elem[i].day<<"      "<<L.elem[i].wholenum<<"      "<<L.elem[i].lastnum<<"        "<<L.elem[i].fnum<<"       "<<n4<<endl;}
		if(ch=='d'&&L.elem[i].endname=="上海"){cout<<L.elem[i].endname<<"      "<<L.elem[i].hnum<<"       "<<L.elem[i].day<<"      "<<L.elem[i].wholenum<<"      "<<L.elem[i].lastnum<<"        "<<L.elem[i].fnum<<"       "<<n5<<endl;}
	}
	display();
	}
	goback(L);
}//查询终点站信息函数

void check(SqList h)
{
	
	SqList L;
	InitList_Sq(L);L=h;
	char ch3;
	display();
	cout<<" a. 北 京 \t\t c. 南 京"<<endl;
	cout<<" b. 徐 州 \t\t d. 上 海"<<endl;
	display();
	cout<<"请选择终点站 ";
	cin>>ch3;
	als(ch3,L);//调用als以便查询车次信息
}//查询界面

void checkin(SqList h)
{
	
	int f;
	SqList L;
	InitList_Sq(L);
	L=h;
	char *ch1,s[20];
	int ch2,ch3,ch6;
	display();
	cout<<"请输入车次:"<<endl;
	cin>>s; ch1=s;//输入车次
	cout<<"日期:"<<endl;
	cin>>ch2;//输入日期
	cout<<"订票数额:"<<endl;
	cin>>ch3;//输入订票量
	display();
	
	char s1[20];
	for(int i=0;i<L.len;i++)
		if(!strcmp(L.elem[i].hnum,ch1)&&L.elem[i].day==ch2)//如果车次日期不正确,则退出
		{
			f=1;
			cout<<"军人、学生打6折,会员打5折"<<endl;
			display();
			cout<<"输入乘客姓名"<<endl;
			cin>>s1;//输入姓名
			cout<<"证件编码:"<<endl;
			cin>>ch6;//输入证件编码
			cout<<"折扣:"<<endl;
			cin>>ch7;//输入折扣
			display();
			

		if(L.elem[i].lastnum>=ch3)//余票量足够
		{	
			LNode *p;
			p=new LNode;
			p->data.name=s1;
			p->data.dnum=ch3;
			p->data.dj=ch6;	
			p->data.pay=ch7*ch3*L.elem[i].fnum/10;

			LNode *h;
			h=L.elem[i].la;//已订票链表 供查询使用
			for(h=L.elem[i].la;h->next!=NULL;h=h->next)
			if(h->next!=NULL)
			{
				if(h->next->data.dj==ch6)
				{
					h->next->data.dnum+=ch3;
					goto next;
				}
			}
			if(h->next==NULL)
			{
				p->next=h->next;
				h->next=p;
			}	
		next:L.elem[i].lastnum=L.elem[i].lastnum-ch3;
			cout<<"订票成功!"<<endl;
			cout<<"您订的票 "<<"车次 "<<L.elem[i].hnum<<"日期 "<<L.elem[i].day;

			cout<<" 座位号";
			if(ch3==1)
				cout<<L.elem[i].discut;
			else
			{
					temp=L.elem[i].discut;//防止修改座位号的值
					for(int j=0;j<ch3;j++)
					{			
						cout<<" "<<temp;
						temp++;
					}
					cout<<endl;
			}
		cout<<endl<<"需付款"<<p->data.pay<<"元"<<endl;		
			goback(L);
			break;
		}
		else{	//余票量不足
			LNode *q;
			q=new LNode;
           	q->data.name=s1;
			q->data.dnum=ch3;
			q->data.dj=ch6;
			LinkList h;
			for(h=L.elem[i].lb;h->next!=NULL;h=h->next);
			q->next=h->next;
			h->next=q;	
			cout<<"票额不足,剩余"<<L.elem[i].lastnum<<"张!please wait....";

			/*cout<<"是否定无座车票?是按y,返回主菜单q"<<endl;
			cin>>z;
			if(z=='y'){}else{}
			*/
		}
		break;
		}else f=0;
		if(f==0)
		{
			cout<<"没有此车次";
		}
		goback(L);
	
}//订票系统函数
void checkout(SqList h)
{
	
	SqList L;
	InitList_Sq(L);
	L=h;
	char *ch1,*ch2,s1[20],s2[20];
	int ch3,f=0,ch4,ch6;
	
	display();
	cout<<"请输入车次:"<<endl;
	cin>>s1;//输入车次
	cout<<"日    期:"<<endl;
	cin>>ch3;//输入日期
	cout<<"客户姓名:"<<endl;
	cin>>s2;//输入姓名
	cout<<"证件编码 :"<<endl;
	cin>>ch6;//输入证件编码
	cout<<"退票数:"<<endl;
	cin>>ch4;//输入退票量	
	display();
	ch1=s1;
	ch2=s2;
	for(int i=0;i<L.len;i++)
		if(!strcmp(L.elem[i].hnum,ch1)&&L.elem[i].day==ch3)//输入与顺序表中车次日期比较 
		{
			LNode *h;
			for(h=L.elem[i].la;h->next!=NULL;h=h->next)
				if(!strcmp(h->next->data.name,ch2)&&h->next->data.dj==ch6)//输入与链表中姓名比较 
				{   
					if(h->next->data.dnum<ch4)
					{
						f=4;
						break;
					}//退票额多于订票额退出
					f=1;
					L.elem[i].lastnum+=ch4;	//更新信息,退票可再次出售,余票量
					if(h->next->data.dnum>ch4)//退票额少于订票额
					h->next->data.dnum-=ch4;//定票量等于退票后的总数
					else
					{	LNode *p;
						p=new LNode;
						p=h->next;
						h->next=p->next;
						free(p);
					}//退票额等于订票额删除本结点			
					/*if(L.elem[i].lb->next!=NULL)//若有人排队输出
					{	
						
						cout<<"替   补   人   员"<<endl;
						display();
						cout<<"姓名      订票数       等级"<<endl;
						LNode *h1;
						int k=1;
						for(h1=L.elem[i].lb;h1->next!=NULL;h1=h1->next)//输出排队人名单
						{
							cout<<h1->next->data.name<<"          "<<h1->next->data.dnum<<"           "<<h1->next->data.dj<<endl;
							k++;
						}			
						display();
					}break;*/
				}else f=2;
				if(f==1||f==2||f==4)
					break;
		}else f=3;
		
				switch(f)
				{
				case 1:	LNode *p;
						p=new LNode;
						p->data.name=s1;
						p->data.dnum=ch3;
						p->data.dj=ch6;	
						p->data.pay=ch7*ch4*L.elem[i].fnum/10;
						cout<<"退票成功!";
						cout<<"您的退票 "<<"   车次"<<L.elem[i].hnum<<"   日期"<<L.elem[i].day;
						cout<<"  座位号";
						if(ch3==1)
						cout<<L.elem[i].discut;
						else
						{
							temp=L.elem[i].discut;//防止修改座位号的值
							for(int j=0;j<ch4;j++)
							{			
								cout<<" "<<temp-ch4;
								temp++;
							}
							cout<<endl;
						}
						cout<<"应找钱"<<p->data.pay<<endl<<endl;break;
				case 2:cout<<"您没有订过此票?";break;
				case 3:cout<<"没有此车次";break;
				case 4:cout<<"输入票额多于所订票额,请重新输入";break;
				}
	goback(L);
}//退票系统函数

void menu4(SqList h)
{
	int f=0;
    int k=1;
	SqList L;
	InitList_Sq(L);
	L=h;
	cout<<"订票名单"<<endl;
	display();
	cout<<"终点站      车次       姓名     订票数     证件编码     座位号"<<endl;
	for(int i=0;i<L.len;i++)
	if(L.elem[i].la->next!=NULL)
					{
						f=1;				
						LNode *h1;
						for(h1=L.elem[i].la;h1->next!=NULL;h1=h1->next)//输出订票人名单时间复杂度O(L.len*L.elem[i].la.len)
							{
							if(h1->next->data.dnum==1)//为了更新查询时的座位号,需做出判断
							{
							cout<<L.elem[i].endname<<"         "<<L.elem[i].hnum<<"          "<<h1->next->data.name<<"          "<<h1->next->data.dnum<<"	         "<<h1->next->data.dj<<"        "<<L.elem[i].discut<<endl;
							}
							else
							{
								if(h1->next->data.dnum)
								cout<<L.elem[i].endname<<"        "<<L.elem[i].hnum<<"        "<<h1->next->data.name<<"         "<<h1->next->data.dnum<<"	     "<<h1->next->data.dj<<"        ";
								for(int j=0;j<h1->next->data.dnum;j++)
								{
									int d1;
									d1=L.elem[i].discut;
									cout<<" "<<d1;
									L.elem[i].discut++;
								}
								cout<<endl;
								n3=n4=n5=n2=L.elem[i].discut;
							}
							k++;
						}
					}
	if(f==0)
	{
		cout<<endl<<"无人订票......."<<endl;
	}
	display();
	goback(L);
}//查询订票名单函数 

void menu(SqList h)
{
	int ch;
	SqList L;
	InitList_Sq(L);
	L=h;
	display();
	cout<<"                         火 车 售 票 系 统"<<endl<<endl;
	cout<<"            系统说明:"<<endl<<endl;
	cout<<"                1.功能:可进行车票查询、订购、退票等操作,简单快捷"<<endl;
	cout<<"                2.各环节都可以显示出车票的信息(车次、座位等)"<<endl;
	cout<<"                3.退票时,需是本站售出的车票才可以退掉"<<endl;
	cout<<"                4.任何界面下都可按'q'键或其它键返回主菜单或相关菜单"<<endl;
	cout<<"                5.本系统满足<不同车次>的相同操作"<<endl;
	cout<<"                6.运行环境:本系统用vc++6.0设计完成,请在Windows环境"<<endl;
	cout<<"                  下运行,Windows2000、WindowsXP"<<endl<<endl;
	cout<<"                                   北京"<<endl;
	cout<<"                                    ↑"<<endl;
	cout<<"                             南京←南昌→徐州"<<endl<<endl;
	cout<<"          1. 查 询"<<"  2. 订 票"<<"   3. 退 票"<<"  4. 订票名单"<<"  5.系统帮助(暂时屏蔽)"<<endl;
	display();
	cout<<"请选择服务,其它键退出"<<endl;
	cin>>ch;
	switch(ch)
	{
	case 1: check(L);break;//进查询界面
	case 2: checkin(L);break;//进订票界面
	case 3: checkout(L);break;//进退票界面
	case 4: menu4(L);break;//进已订票名单界面
	//case 5: help();break;//显示系统帮助信息
	}
}//主菜单


void help()//帮助函数体
{
	SqList L;
	InitList_Sq(L);
	cout<<"                     欢迎你使用本系统"<<endl;
	cout<<"1.选择菜单1,乘客可先查询车票信息,然后根据自己的实际需要选菜单2,进行预定"<<endl;
	cout<<"2.如果乘客有意外情况,可以进入退票菜单3,按照系统提示,输入相关参数,即可完成"<<endl;
	cout<<"3.选择菜单4,乘客也可以随时对售出车票进行查询,以便更好的掌握即时信息"<<endl<<endl;
	goback(L);
}

void main()
{
	SqList L;
	InitList_Sq(L);
	Create_Sq(L);//创建顺序表
	menu(L);//进入主菜单
}//主函数

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -