?? b06020422.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 + -