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

📄 b06020422.cpp

📁 火车售票系统 适合课程设计 应对 学校 一般软件设计
💻 CPP
字号:
#include<iostream.h>
#include<fstream.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>

class train             //定义关于班次信息的类
{
private:

    int num;	
    int  hour,minute;
	char *start;
	char *destination;
	float totaltime;
	int load;
    int surplus;
	char *state;



public:

	train(int n,int h,int m,char *sh,char *zh,float r,int z,int y=30)
		//构造函数
	{

		hour=h;
		minute=m;
		num=n;
		start=new char[strlen(sh)+1];
		strcpy(start,sh);
		destination=new char[strlen(zh)+1];
		strcpy(destination,zh);
		totaltime=r;
		load=z;
		surplus=y;
    	state=new char[10];
		state="可售";

	}

    void copy(int n,int h,int m,char *sh,char *zh,float r,int z,int y=30)
//函数功能:将变量赋值于对象
	{
		hour=h;
		minute=m;
		num=n;
		start=new char[strlen(sh)+1];
		strcpy(start,sh);
		destination=new char[strlen(zh)+1];
		strcpy(destination,zh);
		totaltime=r;
		load=z;
		surplus=y;
        state=new char[10];
        state="可售";

		struct tm *now;   //获取系统时间
		time_t t;
		t=time(NULL);
		now=localtime(&t);
		if(now->tm_hour>h)    //将系统时间与班次信息时间比较,确定列车状态
		{
			state="已发出";
		    if((now->tm_hour=h)&&(now->tm_min>m))
	           state="已发出";
			
		}

	}

	train()       //重载无参构造函数
	{}


	~train()     //析构函数
	{

		delete []start;
		delete []destination;
	}

	int getnum()    //获得私有成员num
	{
		return num;   
	}

	char *getdestination()     //获得私有成员destination
	{    return destination;
	}

	void print()    //函数功能:输出班次信息
	{

		cout<<endl;
		cout<<"班次"<<'\t'<<"出发时间"<<"  "<<"始发站"<<"  "<<"终点站"<<"  "<<"行车时间(小时)"<<"  "<<"载客量"<<"  "<<"剩余票数"<<"  "<<"车票现状";

		cout<<endl;
		cout<<endl;
		cout<<num<<'\t'<<hour<<"时"<<minute<<"分"<<"  "<<start<<"  "<<destination<<"  "<<totaltime<<'\t'<<'\t'<<"  "<<load<<"      "<<surplus<<"        "<<state<<endl;
		cout<<endl;

		cout<<"按任意键,击回车继续"<<endl;
		char ch;
		cin>>ch;

		cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;


	}
	void record()     //函数功能:将班次信息写入二进制文件
	{
		ofstream fout("test.dat",ios::app);

		if(!fout)    //确认打开文件成功 
		{
			cout<<"文件打开失败!"<<endl;
		}
		else
		{
    	fout.write((char *)&num,sizeof(int));
		fout.write((char *)&hour,sizeof(int));
		fout.write((char *)&minute,sizeof(int));
		fout.write(start,10);
		fout.write(destination,10);
    	fout.write((char *)&totaltime,5);
		fout.write((char *)&load,sizeof(int));
		fout.write((char *)&surplus,sizeof(int));
		fout.close();
		}
	}

};

//函数功能:显示菜单,选择
//函数返回值:从输入设备获得的一个字符

char menu()
{

	cout<<'\t'<<'\t'<<"******** 欢迎使用票务信息系统 V1.0********"<<endl; 

	cout<<endl;
	cout<<endl;

	cout<<'\t'<<'\t'<<'\t'<<"* 1.  录入班次信息 "<<endl;
	cout<<endl;
	cout<<'\t'<<'\t'<<'\t'<<"* 2.  浏览班次信息"<<endl;
	cout<<endl;
	cout<<'\t'<<'\t'<<'\t'<<"* 3.  购票 "<<endl;
	cout<<endl;
	cout<<'\t'<<'\t'<<'\t'<<"* 4.  退票 "<<endl;
	cout<<endl;
	cout<<'\t'<<'\t'<<'\t'<<"* 5.  查询班次信息 "<<endl;
	cout<<endl;

	cout<<'\t'<<'\t'<<'\t'<<"* 6.  版本信息"<<endl;
	cout<<endl;
	cout<<'\t'<<'\t'<<'\t'<<"* 7.  使用说明"<<endl;
	cout<<endl;
	cout<<'\t'<<'\t'<<'\t'<<"* 8.  退出 "<<endl;

	char c;
	cout<<"请选择 :"<<endl;
	cin>>c;

	cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
	return c;
}
//函数功能:将从输入设备获得的信息,赋值于对象,并写入文件

int write()
{   
	cout<<"录入班次信息"<<endl;
	cout<<endl;
	cout<<" 始发站 :"<<endl;
	char *sh;
	sh=new char[10];
	cin>>sh;
	cout<<"终点站 :"<<endl;
	char *zh;
    zh=new char[10];
    cin>>zh;
    cout<<"班次 :"<<endl;
	int n;
	cin>>n;
	cout<<"行车时间 :"<<endl;
	float r;
	cin>>r;
	cout<<"载客量 :"<<endl;
	int z;
	cin>>z;
	cout<<"发车时间 (小时):"<<endl;
	int h;
	cin>>h;
	cout<<"发车时间 (分钟):"<<endl;
	int m;
	cin>>m;
	train A(n,h,m,sh,zh,r,z);

	A.print();

	cout<<"确认输入(Y)?"<<endl;    //核实并确认输入
	char a;
	cin>>a;
	if(a=='Y'||a=='y')
	{
	    A.record();
        return 0;
	}
	else
		return 0;

}
//函数功能:从二进制文件中获取班次信息,存入对象数组 

int read()
{   ifstream fin("test.dat");

    train C[9];    //定义对象数组
    int num,hour,minute,load,surplus;
	float totaltime;
    char *start;
    start=new char[10];
	char *destination;
    destination=new char[10];

	for(int i=0;i<9;i++)
	{
		fin.read((char *)&num,sizeof(int));
		fin.read((char *)&hour,sizeof(int));
		fin.read((char *)&minute,sizeof(int));
		fin.read(start,10);
		fin.read(destination,10);
		fin.read((char *)&totaltime,5);
		fin.read((char *)&load,sizeof(int));
    	fin.read((char *)&surplus,sizeof(int));
		C[i].copy(num,hour,minute,start,destination,totaltime,load,surplus);
		C[i].print();
	}
	
	fin.close();	
	return 0;
}

int scan()
{    read();
     return 0;
}
//函数功能:介绍版本信息

void information()

{
	cout<<"车票信息管理系统"<<endl;
	cout<<"版本:V1.0 "<<endl;
	cout<<"作者:陈守宁"<<endl;
	cout<<"6.1"<<endl;
}
//函数功能:从输入设备获得所选班次和所需票数,从文件中读出相关信息,
//进行操作,再写入文件

void buy()

{
	cout<<"请输入所选班次:"<<endl;
	int i;
	cin>>i;
	cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`"<<endl;

	fstream fs;
	fs.open("test.dat",ios::in|ios::out);  //以读写方式打开文件
	if(!fs)   //确认打开文件成功
	{
		cout<<"文件打开失败!"<<endl;
	}
	else
	{
		fs.seekg((((i-1)*(5*sizeof(int)+25))+sizeof(int)),ios::beg);
			//设置读指针
		int h;
		fs.read((char *)&h,sizeof(int));

        fs.seekg((((i-1)*(5*sizeof(int)+25))+2*sizeof(int)),ios::beg);
		//设置读指针
		int f;
		fs.read((char *)&f,sizeof(int));

		struct tm *now;     //获取系统时间
		time_t t;
		t=time(NULL);
		now=localtime(&t);
		if(now->tm_hour>h)   //将系统时间与班次信息时间进行比较
		{
			cout<<"列车已发出 !"<<endl;
			if((now->tm_hour=h)&&(now->tm_min>f))
			cout<<"列车已发出!"<<endl;
		}
		else
		{
			int m;
			fs.seekg(((i-1)*(5*sizeof(int)+25)+4*sizeof(int)+25),ios::beg);
			//设置读指针
    		fs.read((char *)&m,sizeof(int));
			int n;
			cout<<"需购多少张?"<<endl;
			cin>>n;
			m=m-n;
			if(m<0)
			{
			cout<<"余票不足 !"<<endl;
			}
			else
			{
    		fs.seekp(((i-1)*(5*sizeof(int)+25)+4*sizeof(int)+25),ios::beg);
			//设置写指针
			fs.write((char *)&m,sizeof(int));
			}
		}
		fs.close();
	}

	cout<<"购票结束 !"<<endl;

}

//函数功能:从输入设备获得所选班次,从文件中获得相关信息,
//进行操作,再写入文件


void reback()
{
	cout<<"请输入所选班次:"<<endl;
	int i;
	cin>>i;
	cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`"<<endl;

	fstream fs;
	fs.open("test.dat",ios::in|ios::out);

    if(!fs)
	{
		cout<<"文件打开失败!"<<endl;
	}
	else
	{

		fs.seekg((((i-1)*(5*sizeof(int)+25))+sizeof(int)),ios::beg);
	    int h;
	    fs.read((char *)&h,sizeof(int));

	    fs.seekg((((i-1)*(5*sizeof(int)+25))+2*sizeof(int)),ios::beg);
		int f;
	    fs.read((char *)&f,sizeof(int));

	    struct tm *now;
		time_t t;
		t=time(NULL);
		now=localtime(&t);
		if(now->tm_hour>h)
		{
			cout<<"列车已发出!退票失败!"<<endl;
			if((now->tm_hour=h)&&(now->tm_min>f))
				cout<<"列车已发出!退票失败!"<<endl;
		}
		else
		{
			int m;
			fs.seekg(((i-1)*(5*sizeof(int)+25)+4*sizeof(int)+25),ios::beg);
			fs.read((char *)&m,sizeof(int));
			m++;
			fs.seekp(((i-1)*(5*sizeof(int)+25)+4*sizeof(int)+25),ios::beg);
			fs.write((char *)&m,sizeof(int));
		}
		fs.close();
	}
	cout<<"退票结束! "<<endl;
}

//函数功能:介绍使用信息
void explanation()
{
	cout<<"欢迎使用 ****车票信息管理系统 Version1.0 ****"<<endl;
	cout<<endl;
	cout<<"由于作者技术水平浅陋,给您带来使用上的不便之处,还请海涵。"<<endl;
	cout<<endl;
	cout<<"录入班次信息需获得管理员权限!"<<endl;
	cout<<endl;
	cout<<"具体操作请严遵屏幕提示信息要求。"<<endl;
	cout<<endl;
	cout<<"输入信息还请慎重。"<<endl;
	cout<<endl;
	cout<<"感谢您的使用 !"<<endl;
	cout<<endl;
}


//函数功能:查询相关信息的班次,可按班次或终点站查询

void search()
{
	train C[9];
	int num,hour,minute,load,surplus;
	float totaltime;
    char *start;
	start=new char[10];
	char *destination;
	destination=new char[10];

	int i;
    ifstream fin("test.dat");
	if(!fin)
	{
		cout<<"文件打开失败!"<<endl;
	}
	else
	{
	
		for(i=0;i<9;i++)
		{
			fin.read((char *)&num,sizeof(int));
			fin.read((char *)&hour,sizeof(int));
			fin.read((char *)&minute,sizeof(int));
			fin.read(start,10);
			fin.read(destination,10);
			fin.read((char *)&totaltime,5);
			fin.read((char *)&load,sizeof(int));
	    	fin.read((char *)&surplus,sizeof(int));
			C[i].copy(num,hour,minute,start,destination,totaltime,load,surplus);
	
		}

		fin.close();
	}

	cout<<endl;
	cout<<endl;
	//查询子菜单
	cout<<'\t'<<'\t'<<'\t'<<"****车票查询****"<<endl;
	cout<<'\t'<<'\t'<<'\t'<<"1 .按班次查询"<<endl;          
	cout<<'\t'<<'\t'<<'\t'<<"2 .按终点站查询"<<endl;

	cout<<"您的选择 :"<<endl;
	char ch;
	cin>>ch;

	switch(ch)
	{
	case'1':
		cout<<"输入待查班次 :"<<endl;

     	int m;
        cin>>m;
		int flag;
		flag=15;  //标记变量
		
		for(i=0;i<9;i++)
		{
			if(C[i].getnum()==m)
			{
				flag=i;
			}
		}
		cout<<endl;
		if(flag==15)
			cout<<"抱歉,所输班次不存在!"<<endl;
		else
			C[flag].print();
		break;
	case'2':
		cout<<"输入待查终点站 :"<<endl;
		char *str;
		str=new char[10];
		cin>>str;
    	int q;   //标记变量
		q=15;

        for(i=0;i<9;i++)
		{
			if(strcmp(C[i].getdestination(),str)==0)
			{
				q=i;
			}
		}

		if(q==15)
			cout<<"抱歉,所输终点站不存在"<<endl;
		else 
			C[q].print();
     	break;
	default:
		break;
	}

}

main()
{
	char ch,c;

    char password[10]="123";   //设置管理员密码

	while(1)
	{   
		ch=menu();

		switch(ch)
		{
		case'1':

			cout<<"请输入管理员口令:"<<endl;
			char  word[10];
			cin>>word;

			if(strcmp(word,password)==0)  //核对口令
				write();
			else
				cout<<"您没有获得管理员权限!"<<endl;
			break;
		case'2':scan();
			break;
		case'3':buy();
			break;
		case'4':reback();
			break;
		case'5':search();
			break;
		case'6':information();
			break;
		case'7':explanation();
			break;
		case'8':cout<<"谢谢使用"<<endl;
			exit(0);
			break;
		default:
			break;
		}
		cout<<"\n单击任意键 ,然后击回车 ,回主菜单 。"<<endl;
		cin>>c;
	}
	return 0;
}

⌨️ 快捷键说明

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