客运站信息管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《面向对象技术实训》课程实训报告客运站信息管理系统
姓名:
班级:
学号:
指导教师:
成绩:
完成时间:2016年12月
完成地点:S411
1设计题目(问题)描述和要求
某客运站因春运即将到来,客流量急剧增加,工作人员无法按时完成服务工作,不能满足乘客的出行需求,于是想开发一套智能客运站系统,实现工作人员后台操作,乘客自主选票,订票,退票的程序,以缓解出行压力。
要求:
(1)增加车辆信息
(2)更新车辆信息
(3)删除车辆信息
(4)乘客查票
(5)乘客买票
(6)乘客退票、
2系统分析
根据问题描述和要求,系统要求能够编写程序实现输入、输出、查询、增加、删除、修改、取消操作等功能,这些功能需要调用车辆类的成员函数实现。
根据案例需求可以定义一个车辆类,车辆的基本信息有车辆编号、车辆路线、票价、余票和发车时间。
由于需要对车辆信息进行读入和存储,在程序中需要文件的输入输出操作。
先从相应的文件中读入车辆,管理员可以对信息处理后,在退出系统的时候将已修改资料重新存储到原文件中去。
3设计
3.1Bus类的设计
3.1.1数据成员
int id; //车辆编号
int tag; //车辆数量
char road[20]; //车辆路线
3.1.2函数成员及其实现思路
(1)获取行车路线,即返回车辆路线成员变量road的值
char * Bus::getroad()
{ return road;}
获取车辆编号,即返回车辆成员变量id的值
int Bus::getid()
{ return id;}
获取车辆数量,即返回车辆成员变量tag的值
int Bus::gettag()
{return tag;}
获取用户名,返回用户名name的值
char * User::getname()
{ return name;}
获取用户人数,返回tag的值
int User::gettag()
{ return tag;}
获取用户编号,返回id的值
int User::getid()
{ return id;}
(2)设置车辆路线,即设置车辆成员变量road的值road=newroad。
void User::setroad(char ro[])
{ strcpy(road,ro)};
3.2 User类的设计
3.2.1数据成员
i nt tag; //用户总数
i nt id; //用户编号
c har name[10]; //用户姓名
3.2.2函数成员及其实现思路
(1)void User::adduser(int n,char * na)//用户注册信息添加功能的设计思路是:
用户输入其型姓名;
系统分配用户编号;
(2)void User::ytickets(int busid)//用户订票功能实现
订票功能的设计思路是:
用户选择要订票的汽车编号;
系统检索汽车编号,若汽车存在则分配订单号并提醒订票成功;
(3)int User::ntickets(int busid)//用户取消订单退票
设计思路如下:
用户输入需要退票的汽车编号;
系统检索车辆编号,成功则完成退票,反之退票失败;
(4)void User::show()//输出用户所要信息。
设计思路如下:
包括用户姓名,编号等基本信息;
系统检索用户操作信息,用户当前所有订单;
3.3主程序的设计
3.3.1全局变量、全局函数的设计
(1)void B_Data::busdata()//管理员向更新系统车辆信息。
设计思路如下:
调用void Bus::addbus()函数,添加车辆信息;
调用void Bus::setname()函数,更新车辆信息;
调用Bus * B_Data::search()函数,查找车辆信息;
调用void Bus::show()函数,显示用户信息;
调用void Bus::del()函数,删除车辆信息;
(2)void U_Data::userdata()//管理员向更新用户信息。
调用void User::addbus()函数,添加用户信息;
调用void User::setname()函数,更新用户信息;
调用Bus * U_Data::search()函数,查找用户信息;
调用void User::show()函数,显示用户信息;
调用void User::del()函数,删除用户信息;
3.2.2 主函数设计
在主函数中调用void userlogin()函数和void managelogin()函数,实现用户使用功能和管理员管理功能,分别使用上述两函数实现。
(1) 某操作算法流程
主程序调用流程图
4调试分析、测试结果
4.1.1 分析
1.设计的时候,会出现很多错误,应细心检查数据成员及成员函数是否完整,定吗编辑过程中是否出现拼写错误。
2.在简单地基础上,逐步进行添加数据成员,进而添加相应功能的成员函数,实现设计预期的结果。
3.编程就是一个不断完善的过程,先搭建框架、逐步扩充,由简到繁,最后完善。
边编程,边调试,边扩充。
4.1.2 测试结果:
执行结果:
5小结
通过对车辆管理系统的设计,自己学会独立运用所学知识,加强了对基础知识的掌握并进一步加强对较大程序的实现技能。
在设计之初,首先要构思好系统应具有的功能,比如管理员添加,删除,更新车辆及用户信息,用户查询,订票,退票等等,根据要得到的信息,设计要实现的操作,即对这些信息的使用(成员函数)。
准备好之后,根据C的知识,进行数据的类型选择,根据定义好的类型,选择相应的类型的函数,进行操作。
在简单地程序之上,逐渐扩充,实现更多的功能。
在调试的过程会遇到不少大大小小的问题,书写认真很重要,细心更重要,即便是检查错误,也要细心,经常见到的就是输入法导致的中英字符混用。
编程时一个细心的过程,书写的规范,使得查看更方便。
附录
//***************************************************************** // * bus.h 类声明头文件
#ifndef BUS_H_
#define BUS_H_
#include<iostream>
#include<iomanip>
#include<string>
#include<fstream>
#include<stdlib.h>
const int maxuser=100;
const int maxche=100;
const int maxjie=2;
using namespace std;
#endif
//***************************************************************** // * sbus.h类声明头文件
#ifndef SBUS_H_
#define SBUS_H_
#include"bus.h"
class User
{
public:
User();
int gettag();
int getid();
int ntickets(int busid);
int gobus[maxjie];
char * getname();
void setname(char na[]);
void delbus();
void adduser(int n,char * na);
void ytickets(int busid);
void show();
private:
int tag;
int id;
char name[10];
};
class U_Data
{
public:
U_Data();
~U_Data();
int adduser(char * na);
void show();
void usershow(int userid);
void userdata();
User * search(int userid); private:
int top;
int maxid;
User use[maxuser];
};
class Bus
{
public:
Bus();
int getid();
int gettag();
int ytickets();
char * getname();
void setname(char na[]);
void delbus();
void addbus(int n,char * na);
void ntickets();
void show();
private:
int id;
int tag;
int onshelf;
char name[20];
};
class B_Data
{
public:
B_Data();
~B_Data();
int addbus(char * na);
void busdata();
void show();
Bus * search(int busid); private:
int top;
int maxid;
Bus bus[maxche];
};
#endif
//***************************************************************** // * sbus.cpp类声明头文件
#include"sbus.h"
User::User()
{
id=0;
tag=0;
for(int i=0;i<maxjie;i++)
gobus[i]=0;
}
char * User::getname()
{
return name;
}
int User::gettag()
{
return tag;
}
int User::getid()
{
return id;
}
void User::setname(char na[])
{
strcpy(name,na);
}
void User::delbus()
{
for(int i=0;i<maxjie;i++)
{
if(gobus[i]!=0)
{
cout<<"用户"<<name<<"取消订单失败,请检查操作是否正确!"<<endl;
return;
}
}
tag=1;
cout<<"用户删除成功"<<endl;
}
void User::adduser(int n,char * na)
{
tag=0;
id=n;
strcpy(name,na);
for(int i=0;i<maxjie;i++)
gobus[i]=0;
cout<<endl<<"用户添加成功,用户编号为:"<<id<<endl;
cout<<"请牢记用户编号,这是你在系统中的登陆账号!"<<endl; }
void User::ytickets(int busid)
{
for(int i=0;i<maxjie;i++)
{
if(gobus[i]=busid)
cout<<"订票成功!"<<endl;
return;
}
}
int User::ntickets(int busid)
{
for(int i=0;i<maxjie;i++)
{
if(gobus[i]==busid)
{
gobus[i]=0;
cout<<"订单取消成功!"<<endl;
return 1;
}
}
return 0;
}
void User::show()
{
cout<<setw(5)<<id<<setw(10)<<name<<setw(24)<<"订单号为:"; for(int i=0;i<maxjie;i++)
if(gobus[i]!=0)
cout<<"["<<gobus[i]<<"]";
cout<<endl;
}
U_Data::U_Data()
{
User s;
top=0;
fstream file("user.txt",ios::in);
while(1)
{
file.read((char *)&s,sizeof(s));
if(!file) break;
top++;
use[top]=s;
}
maxid=use[top].getid();
file.close();
}
int U_Data::adduser(char * na)
{
top++;
maxid++;
use[top].adduser(maxid,na);
return 1;
}
User * U_Data::search(int userid)
{
for(int i=1;i<=top;i++)
if(use[i].getid()==userid&&use[i].gettag()==0)
return &(use[i]);
return NULL;
}
void U_Data::show()
{
if(top==0)
{
cout<<endl<<"没有用户记录"<<endl;
return;
}
for(int i=1;i<=top;i++)
use[i].show();
}
void U_Data::usershow(int userid)
{
use[userid].show();
}
void U_Data::userdata()
{
char choice=1;
char rname[20];
int userid;
User * r;
while(choice!='0')
{
cout<<endl<<"********************用户管理*********************"<<endl;
cout<<"1.增加用户信息"<<endl<<"2.修改用户信息"<<endl<<"3.删除用户信息"<<endl<<"4.查找用户信息"<<endl<<"5.显示所有用户"<<endl<<"0.退出用户信息系统"<<endl<<"请选择您要进行的操作:";
cin>>choice;
switch(choice)
{
case '1':
cout<<"输入用户姓名:";
cin>>rname;
adduser(rname);
break;
case '2':
cout<<"输入用户编号:";
cin>>userid;
r=search(userid);
if(r==NULL)
{
cout<<endl<<"不存在编号为:"<<userid<<"的用户"<<endl;
break;
}
cout<<"输入新的用户名:";
cin>>rname;
r->setname(rname);
break;
case '3':
cout<<"输入用户编号:";
cin>>userid;
r=search(userid);
if(r==NULL)
{
cout<<endl<<"不存在编号为:"<<userid<<"的用户"<<endl;
break;
}
r->delbus();
break;
case '4':
cout<<"输入用户编号:";
cin>>userid;
r=search(userid);
if(r==NULL)
{
cout<<"该用户不存在!"<<endl;
break;
}
r->show();
break;
case '5':
show();
break;
case '0':
break;
default:
cout<<"输入有误,请重新输入!"<<endl;
}
}
}
U_Data::~U_Data()
{
fstream file("user.txt",ios::out);
for(int i=1;i<=top;i++)
if(use[i].gettag()==0)
file.write((char *)&(use[i]),sizeof(use[i]));
file.close();
}
Bus::Bus()
{
id=0;
tag=1;
onshelf=1;
}
char * Bus::getname()
{
return name;
}
int Bus::getid()
{
return id;
}
int Bus::gettag()
{
return tag;
}
void Bus::setname(char na[])
{
strcpy(name,na);
}
void Bus::delbus()
{
onshelf=1;
tag=1;
}
void Bus::addbus(int n,char * na)
{
tag=0;
id=n;
strcpy(name,na);
onshelf=1;
cout<<endl<<"添加车辆成功!车辆编号为:"<<id<<endl;
cout<<"请牢记车辆编号!"<<endl;
}
int Bus::ytickets()
{
if(onshelf==1)
{
onshelf=0;
return 1;
}
return 0;
}
void Bus::ntickets()
{
onshelf=1;
}
void Bus::show()
{
cout<<setw(10)<<id<<setw(20)<<name<<setw(10)<<(onshelf==1?"可定":"已发车")<<endl; }
B_Data::B_Data()
{
Bus b;
top=0;
fstream file("bus.txt",ios::in);
while(1)
{
file.read((char *)&b,sizeof(b));
if(!file) break;
top++;
bus[top]=b;
}
maxid=bus[top].getid();
file.close();
}
int B_Data::addbus(char * na)
{
top++;
maxid++;
bus[top].addbus(maxid,na);
return 1;
}
Bus * B_Data::search(int busid)
{
for(int i=1;i<=top;i++)
if(bus[i].getid()==busid&&bus[i].gettag()==0)
return &(bus[i]);
return NULL;
}
void B_Data::busdata()
{
char choice='1';
char bname[40];
int busid;
Bus *b;
while(choice!='0')
{
cout<<endl<<"*********************车辆管理*********************"<<endl;
cout<<"1.增加车辆信息"<<endl<<"2.修改车辆信息"<<endl<<"3.删除车辆信息"<<endl<<"4.查找车辆信息"<<endl<<"5.显示所有车辆"<<endl<<"0.退出车辆信息系统"<<endl<<"请选择您要进行的操作:";
cin>>choice;
switch(choice)
{
case '1':
cout<<"输入车辆路线:";
cin>>bname;
addbus(bname);
break;
case '2':
cout<<"输入车辆编号:";
cin>>busid;
b=search(busid);
if(b==NULL)
{
cout<<endl<<"不存在编号为:"<<b->getid()<<"的车辆"<<endl;
break;
}
cout<<"输入新的路线:";
cin>>bname;
b->setname(bname);
break;
case '3':
cout<<"输入车辆编号:";
cin>>busid;
b=search(busid);
if(b=NULL)
{
cout<<endl<<"不存在编号为:"<<b->getid()<<"的车辆"<<endl;
break;
}
b->delbus();
break;
case '4':
cout<<"输入车辆编号:";
cin>>busid;
b=search(busid);
if(b=NULL)
{
cout<<endl<<"不存在编号为:"<<b->getid()<<"的车辆"<<endl;
break;
}
b->show();
break;
case '5':
show();
break;
case '0':
break;
default:
cout<<"输入有误,请重新输入!"<<endl;
}
}
}
void B_Data::show()
{
if(top==0)
{
cout<<endl<<"没有车辆记录"<<endl;
return;
}
for(int i=0;i<=top;i++)
if(bus[i].gettag()==0)
bus[i].show();
}
B_Data::~B_Data()
{
fstream file("bus.txt",ios::out);
for(int i=1;i<=top;i++)
if(bus[i].gettag()==0)
file.write((char *)&(bus[i]),sizeof(bus[i]));
file.close();
}
//*****************************************************************
// * main.cpp主程序文件
#include"sbus.h"
void userlogin()
{
U_Data UserDB;
User * r;
B_Data BusDB;
Bus * b;
char tempname[20];
char choice='1';
int bid,rid;
while(choice!='0')
{
cout<<endl<<"************************用户专区************************"<<endl;
cout<<"1.用户登录"<<endl<<"2.用户注册"<<endl<<"0.退出"<<endl<<"请选择:"<<endl;
cin>>choice;
switch(choice)
{
case '1':
cout<<"输入用户编号:";
cin>>rid;
r=UserDB.search(rid);
if(r==NULL)
{
cout<<"用户不存在"<<endl;
}
else
choice='0';
break;
case '2':
cout<<endl<<"输入用户姓名:"<<endl;
cin>>tempname;
UserDB.adduser(tempname);
break;
case '0':
cout<<"欢迎使用!"<<endl;
return;
default:
cout<<"输入有误,请重新输入!"<<endl;
}
}
choice='1';
while(choice!='0')
{
cout<<endl<<"************************订票专区************************"<<endl;
cout<<"1.订票"<<endl<<"2.退票"<<endl<<"3.查看订单"<<"0.退出"<<endl<<"请选择:"<<endl;
cin>>choice;
switch(choice)
{
case '1':
cout<<"输入车辆编号:";
cin>>bid;
b=BusDB.search(bid);
if(b==NULL)
{
cout<<"车辆不存在"<<endl;
break;
}
if(b->ytickets()==0)
{
cout<<"车辆"<<b->getname()<<"已发出"<<endl;
break;
}
r->ytickets(b->getid());
cout<<endl<<"订票成功"<<endl;
break;
case '2':
cout<<endl<<"输入想要退票车辆的编号:"<<endl;
cin>>bid;
b=BusDB.search(bid);
if(b==NULL)
{
cout<<"不存在编号为"<<b->getid()<<"的车辆"<<endl;
break;
}
b->ntickets();
r->ntickets(b->getid());
cout<<"车辆已返回"<<endl;
break;
case'3':
ershow(rid);
break;
case '0':
cout<<"欢迎使用!"<<endl;
break;
default:
cout<<"输入有误,请重新输入!"<<endl;
}
}
}
void managelogin()
{
U_Data UDB;
B_Data BDB;
char choice='1';
string pass;
cout<<endl<<"请输入管理员密码:";
cin>>pass;
if(pass!="19960727")
{
cout<<"密码错误,请重新输入!"<<endl;
return;
}
while(choice!='0')
{
cout<<"**********************************管理员**********************************"<<endl;
cout<<endl<<"1.车辆管理"<<endl<<"2.用户管理"<<endl<<"0.退出"<<endl<<"请选择:"<<endl;
cin>>choice;
}
switch(choice)
{
case'1':
BDB.busdata();
break;
case'2':
erdata();
break;
case'0':
cout<<"欢迎使用"<<endl;
break;
default:
cout<<"输入错误,请重新输入!"<<endl;
}
}
void main()
{
char choice='1';
while(choice!='0')
{
cout<<endl<<"**************************车辆管理系统**************************"<<endl;
cout<<"1.用户专区"<<endl<<"2.管理员专区"<<endl<<"0.退出系统"<<endl<<"请选择:"<<endl;
cin>>choice;
switch(choice)
{
case'1':
userlogin();
break;
case'2':
managelogin();
break;
case'0':
cout<<"欢迎使用!"<<endl;
break;
default:
cout<<"输入有误,请重新输入!"<<endl;
}
}
}
(注:文档可能无法思考全面,请浏览后下载,供参考。
可复制、编制,期待你的好评与关注)。