《面向对象技术实训》课程实训报告客运站信息管理系统姓名:班级:学号:指导教师:成绩:完成时间:2016年12月完成地点:S4111设计题目(问题)描述和要求某客运站因春运即将到来,客流量急剧增加,工作人员无法按时完成服务工作,不能满足乘客的出行需求,于是想开发一套智能客运站系统,实现工作人员后台操作,乘客自主选票,订票,退票的程序,以缓解出行压力。
要求:(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;}elsechoice='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;}}}。