火车订票管理信息数据库设计_第1页
火车订票管理信息数据库设计_第2页
火车订票管理信息数据库设计_第3页
火车订票管理信息数据库设计_第4页
火车订票管理信息数据库设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/目录一、课题背景及意义…………………11.1概述…………11.2意义…………11.3数据库优势…………………11.4开发环境……………………2二、需求分析…………32.1业务需求分析………………32.2功能需求……………………32.3数据需求……………………42.4性能需求……………………5三、系统总体设计……………………63.1系统组成……………………63.2数据库设计…………………7概念结构设计…………7逻辑结构设计…………83.3物理结构设计……………9确定数据库的存储结构……………10调试分析……………103.4数据库模式定义…………20四、系统详细设计及实现…………214.1模块简述…………………214.2模块设计…………………21五、结束语…………32六、参考文献………………………34一、课题背景及意义1.1概述信息时代已经来临,信息处理的利器——计算机应用于火车站售票的日常管理为火车站售票的现代化带来了从未有过的动力和机遇,为火车站票务管理领域的飞速发展供应了无限潜力。接受计算机管理信息系统已成为火车站票务管理科学化和现代化的重要标记,给火车站票务带来了明显的经济效益和社会效益。接受数据技术建立的管理系统不仅能提高出售/预定车票的效率,还能削减错误发生的概率,便利用户的查询订购车票。降低工作人员的工作量,避开购票人员在车站无效的等票,可以调高购买者买到票的机率,这样的作用在春运期间最为显著,因为在春运的时候车站里许多人是在无效的等票,不仅造成车站里人员管理的困难,还使本可以买到票的人无辜奢侈时间在侯票上。目前火车票的订购仅仅依靠手工操作,已现有的工作人员很难应付车票订购高峰时刻的大量数据处理问题,同时还会出现由此带来的旅客查询问题,导致火车误点状况。本次设计拟开发一个火车票订购系统,可以降低人工操作,提高工作效率,同时便利乘客查询订票。1.2意义火车票订购始终是困扰我们的一个老问题,也是社会服务的一个难点,订票的查询以及车票信息的查询时期一个最基本的业务,从便面上看,这只是一个最简洁的部分,但是它涉及到管理以及客户服务的多个方面,因此设计了本火车票订购系统来实现票务的查询。1.3数据库优势数据库管理的特点许多,它比传统的数据管理拥有许多优点。以下就是数据库的优势。一、数据结构化。所谓“整体”结构化是指在数据库中的数据不再仅仅针对某一个应用,而是面对全组织的;不仅数据内部是结构化的,而且整体也是结构化的,数据之间是有联系的。二、数据的共享性高,冗余度低,易扩充。数据共享可以削减数据的冗余,节约存储空间。数据共享还能够避开数据之间的不相容性和不一样性。三、数据独立性高。包括物理独立性和数据的逻辑独立性。物理的独立性是指用户的应用程序和存储在磁盘上的数据库中的数据是相互独立的。逻辑独立性是指用户的应用程序和数据库的逻辑结构是相互独立的。四、数据是由DBMS统一管理和限制的。包含(1)数据的平安性爱惜(2)数据的完整性检查(3)并发限制(4)数据库复原1.4开发环境工具软件利用Visio2007和ever2000数据库来开发这个火车票订购系统二、需求分析在构造系统时,首先从需求动身构造数据库表,然后再由数据库表结合需求划分系统功能模块。这样,就把一个大的系统分解成了几个小系统,使整个系统的功能更加详细易于理解,同时易于实现系统的整体设计。本系统分为二个功能,分别是用户管理和车次/车票管理,其所能实现的功能:实现用户登录、用户添加。实现对车次的删除和车次基本信息的添加。实现售票的基本管理。实现对车次基本信息的查询。2.1业务需求分析从实际角度动身,对于用户要供应便利快捷的车票查询和订票服务,对于车站工作人员,则是要能够便利明朗的对车次信息进行增删修改操作和车票的订售操作,提高车次的编组效率,是车次资源得到充分利用,并可以提高车票的出售效率降低工作人员的工作量。2.2功能需求在数据操作界面须要有用户登录窗口和车次信息操作窗口,这须要有实现用户登录的功能和车次查询、添加、车票出售的功能。这是火车订票系统的基本功能,只有实现了这几个功能一个火车订票系统才能起先运作,在本系统中实现了用户的登录添加和车票的基本信息操作。功能列表编号功能名称功能说明1.1用户登录用户输入用户名和密码登录系统1.2用户添加增加用户和对所添加的用户权限进行设定2.1添加车次添加车次的基本信息2.2删除车次删除车的基本信息3.1售票对车票销售/预定的操作4.1车次查询对车次基本信息的查询2.3数据需求系统处理的对象有:用户信息:用户名、用户密码、用户权限。车次信息:车次号、票价、起始站、目的站、开车时间、到站时间、实时座位数。系统处理如图:用户用户查询、售票、增删车次登陆添加车次、车票管理登记帐火车预定售票系统登记帐登陆添加数据处理数据登陆通知处理通知添加用户通知2.1系统底层数据流图用户车票查询、预定、出售用户车票查询、预定、出售添加删除处理车票登记帐车次基本信息登记帐车票处理通知车次信息处理通知车票数据添加删除数据数据项名数据项含义存储结构IDC-1username用户名Char(30)IDC-2Password登录密码Char(30)IDC-3Radio用户权限Char(30)IDC-4Trainno车次号Char(30)IDC-5Price票价Money(8)IDC-6Availableseat座位数Int(4)IDC-7Startstation起始站Char(30)IDC-8Endstation目的站Char(30)IDC-9Starttime发车时间Char(30)IDC-10Arrivetime到站时间Char(30)2.3数据字典2.4性能需求为了保证系统能够长期、平安、稳定、牢靠、高效的运行,本系统应当满足以下的性能需求。1.精确性和刚好性系统处理的精确性和刚好性是系统的必要性能。系统应能刚好而且精确的依据用户权限及所输入的信息做出响应。由于本系统的查询功能对于整个系统的功能和性能完成举足轻重。作为系统的许多数据来源,而车票的数量和时间又影响用户的决策活动,其精确性和刚好性很大程度上确定了系统的成败。在系统开发过程中,必需接受确定的方法保证系统的精确性和刚好性。2.平安性 网上订票系统中涉及到的数据是客运公司相当重要的信息,系统要保证用户的权限,对于车次等信息用户只享有查询服务,不得更改;系统还要供应便利的手段供系统维护人员进行数据备份、日常平安管理、以及系统意外崩溃时数据的复原等工作。同时系统还要保证对数据库进行刚好更新,保证数据一样。三、系统总体设计3.1系统组成系统开发的总体目标是实现火车票订/售票管理的系统化和自动化,保证车票售出和车次信息管理的正确无误,确保车票和车次管理的有效。在本系统中分为两个子系统,分别是用户子系统和车次信息子系统,主要任务是对用户信息、车次信息、车票信息等操作及外理。本系统为C/S结构、运行平台为微软vc++6.0以上版本。以及SQLSever2000以上版本。下图3.1为系统功能结构图:车票预订删除车次火车订票系统车票预订删除车次火车订票系统用户管理用户登录添加用户添加车次车次查询车次信息管理3.1功能模块图3.2数据库设计概念结构设计概念设计阶段主要是将需求分析阶段得到的用户需求抽象为信息结构(概念模型)的过程。依据之前的分析,数据库应当主要的实体有用户和车票信息。经过分析得到的实体关系图、E-R图如下:车次信息车次信息车号动身地目的地发车日期开出时间到达时刻座位类型剩余票数票价查询用户信息订票退票订票信息身份证号车号订单号发车日期订购日订购票数总价退票方式查询方式身份证号用户名性别电话订票方式nm11n火车票订购E-R图逻辑结构设计逻辑结构的任务就是把概念结构设计阶段设计好的基本E-R图转化为和选用DBMS产品所支持的数据模型有相符合的逻辑结构。将上图的E-R图转化为以下的关系模型。关系的码用横线标出。用户(身份证号、用户名、性别、电话)订票信息(订单号、身份证号、车号、发车时间、订购日期、订购票数)车次(车号、发车日期、动身地、目的地、开出时刻、到达时刻、剩余票数、票价、座位类型)以上是实体以及其属性。查询(身份证号、车号、发车日期、查询方式)订票(订单号、订票方式)退票(订单号、退票方式)以上是联系及其属性。火车站网上订票系统数据库中各个表格的设计结果如表2.1——表2.6所示。每个表格表示在数据库中的一个表。表2-1车次信息字段名数据类型是否可空说明车号char(10)NOTNULL(主键)动身地char(20)NOTNULL目的地char(20)NOTNULL发车日期DatetimeNOTNULL(主键)开出时刻DatetimeNOTNULL到达时刻DatetimeNOTNULL剩余票数intNOTNULL票价Char(10)NOTNULL表2-2订票信息字段名数据类型是否可空说明订单号Char(10)NOTNULL(主键)身份证号Char(18)NOTNULL(外键)车号char(10)NOTNULL(外键)发车日期datetimeNOTNULL(外键)订购日期datetimeNOTNULL订购票数IntNOTNULL总价MoneyNOTNULL表2-3用户表字段名数据类型是否可空说明身份证号char(20)NOTNULL(主键)用户名char(20)NOTNULL性别Char(2)电话char(20)表2-4订票表字段名数据类型是否可空说明订单号char(20)NOTNULL(主键)订票方式Char(20)表2-5退票表字段名数据类型是否可空说明订单号char(20)NOTNULL(主键)订票方式Char(20)表2-6查询表字段名数据类型是否可空说明身份证号char(20)NOTNULL(主键)车号char(10)NOTNULL(主键)发车日期DatetimeNOTNULL(主键)查询方式char(20)3.3物理结构设计数据库在物理设备上的存储结构和存取方法称为数据库的物理结构,它依靠于选定的数据库系统。对于数据库查询事务,须要得到如下信息:查询的关系。通过连接查询可以将车次和用户之间互联;通过订票和退票可以将用户和订票信息互联,从而将每个表联系在一起,构成一个相关联的数据库。查询条件所涉及到的属性。查询涉及到的属性是(身份证号、车号、发车日期);订票涉及到的属性是(订票号);退票所涉及到的属性(订票号)。连接条件所涉及到的属性(身份证号、订单号、车号-发车日期、订单号)。对于数据更新,须要得到如下信息:被更新的关系。每个关系上的更新操作条件所涉及的属性。修改操作要变更的属性值。须要留意的是,数据库上运行的事务会不断的变更、增加或削减,以后须要依据上述设计信息的变更调整数据库的物理结构。3.3.1确定数据库的存储结构1、确定数据的存放位置存放于C盘,并且支配2M的空间,而且文件的存储空间可以随着数据库的增大而增大,即文件增长不受限制。文件的增长按百分比进行,增长百分比为10%。2、确定系统配置数据库可以公共访问,可以打开随意个数据库对象,内存支配高于2M的内存空间。3.3.2在原有系统的数据有一小部分已经输入到了数据库后,就可以起先对数据库系统进行联合调试,这又成为数据库的试运行。运行前先要对数据库进行备份,如下:再进行简洁的数据库操作,如:建立基本表SQL语句为:createtable订票信息(订单号char(10)primarykey,身份证号char(20),车号char(10),发车日期datetime,订购日期datetime,订购票数int,总价int,foreignkey(身份证号)references用户(身份证号),foreignkey(车号)references车次(车号),foreignkey(发车日期)references车次(发车日期));运行结构截图:其余的建表类似,在此不一一列举。修改基本表①向用户表增加“地址”列,数据类型为字符串型SQL语句为:altertable用户add地址char(20);运行结构截图:②将用户表中的电话的数据类型改为变长字符串型SQL语句为:altertable用户altercolumn电话varchar(20);运行结果截图:数据查询①select*from用户②查询全体用户的身份证号,SQL语句为:select用户名,身份证号from用户;运行结果截图:③查询车票价格低于100元的车次:SQL语句为:select车号from车次where票价<100;运行结果截图为:④查询王姓客户的信息SQL语句为:select*from用户where用户名like'张%';运行结果截图:⑤按总票价的升序将订单号排列SQL语句为:select订单号,总价from订票信息orderby总价asc;运行结果截图:⑥查询从北京动身的全部车次的总票价SQL语句为:selectsum(票价)from车次where动身地='北京';运行结果截图:⑦求乘坐车号大于一次的车号SQL语句为:select车号from订票信息groupby车号havingcount(*)>=2;运行结果截图:⑧SQL语句为:select车次.*from用户,车次,查询where用户.身份证号=查询.身份证号and车次.车号=查询.车号and车次.发车日期=查询.发车日期and⑨嵌套查询:查询和李明同乘一列火车的旅客的身份证号SQL语句:select身份证号from订票信息where车号in(select车号from订票信息,用户where订票信息.身份证号=用户.身份证号and用户名='李明');数据更新①插入数据向车次表添加一组数据:“T26”、“2010-12-15”、“青岛”、“北京”、“22:10”、“次日06:54”、“硬座insertinto车次values('T26',2010-12-15,'青岛','北京','22:10','次日06:54',42,118,'硬座');运行结构截图:‘②修改数据由于雪天路滑将发车日期为2010-12-13SQL语句为:update车次set到达时刻='次日09:20'where车号='T25'and发车日期='2010-12-13';③删除数据SQL语句为:deletefrom用户deletefrom订票,订票信息where订票.订单号=订票信息.订单号and运行结果截图:视图①建立选择用网络查询车次用户的视图。SQL语句为:createviewnetasselect身份证号from查询where查询方式='网络';②更新视图SQL语句为:updatenet③删除视图SQL语句为:dropviewnet;总之,视图的操作和表的操作基本一样,在此不必赘述。经过一系列验证数据库的调试正常,可以进行数据库的操作。3.4数据库模式定义列名数据类型取值约束可否为空说明TrainnoChar(30)可车次号StartstationChar(30)可起始站EndstationChar(30)可目的站StarttimeChar(30)可发车时间ArrivetimeChar(30)可到站时间PriceMoney(8)可票价AvailableseatInt(4)可实时座位数四、系统详细设计及实现4.1模块简述本火车管理系统重要的全部模块主要是分为用数据库的类三个部分,下面对三个个部分进行再分类,共有9个模块。模块类别模块编号模块名称公共模块模块功能用户T——1USER用户登录模块T——2ADDUSER添加用户车次信息T——3SEARCH查询车次T——4INSERT插入车次T——5DeleteT——6DELETENO删除车次号T——7SELL售票T——8TICKETSELL连接模块T——9ADOConn连接数据库4.2模块设计下面给出模块的背景,设计思路,算法,界面以及关键代码,比较简洁的模块就仅给界面设计以及算法设计,比较困难的模块会给出相应的数据库有关触发器,存储过程和视图的设计。而本系统重的模块主要有一下几个:1、用户模块User模块是公共模块,车次信息和连接模块也用到User,模块。user_类是为系统用户表创建的一个类:要利用ADO访问数据库,类的成员变量对应表的列,类的成员函数对应表的操作。但本系统不是为每一个表都创建了类。1、其页面设计:给用户一个好的登录界面,供应友善的人机界面,为用户的运用供应便利。同时也是为后面用户操作其他功能供应了权限依据,避开出现用户权限的不确定造成整个系统不同模块的错误操作,使整个订票业务遭到破坏。用户模块代码:voidUSER::OnOK(){ //TODO:Addextravalidationhere UpdateData(1); if(m_user==""||m_psd=="") { MessageBox("请填好用户名或密码!"); } else {ADOConnadoconn; adoconn.OnInitADOConn();//调试 _bstr_tsqltemp; sqltemp="select*fromaaaaawhereusernamelike'"+m_user+"%'andpasswordlike'"+m_psd+"%'"; _RecordsetPtrm_precordset; m_precordset=adoconn.GetRecordSet(sqltemp); adoconn.ExecuteSQL(sqltemp); if(m_precordset->adoEOF==0)//记录集没有移动到最终 { MessageBox("登入成功"); GetDlgItem(ID_SEARCH)->EnableWindow(FALSE); } if(m_precordset->adoEOF!=0) { // GetDlgItem(ID_ADDUSER)->EnableWindow(FALSE); } adoconn.ExitConnect(); //CDialog::OnOK(); }}2、车次信息模块车次添加实现了车次能跟上需求的变更,使得系统管理员能依据须要添加车次,让售票员能为购买者供应优质的服务。车次添加程序:voidINSERT::OnOK(){ //TODO:Addextravalidationhere UpdateData(1); if(m_Trainno==""&m_Startstation==""&m_Endstation==""&m_Starttime==""&m_Arrivetime==""&m_Price=="") { MessageBox("请完善空格"); } else { ADOConnadoconn; adoconn.OnInitADOConn();//调试 _bstr_tsqltemp; sqltemp="insertintosalevalues('"+m_Trainno+"','"+m_Startstation+"','"+m_Endstation+"','"+m_Starttime+"','"+m_Arrivetime+"',20,'"+m_Price+"')"; //sqltemp="insertintoemployeesvalues('"+employee_id+"','"+employee_name+"','"+sex+"','"+department_id+"','"+title_id+"','"+work_time+"')"; //(trainno,startstation,endstation,starttime,arrivetime,availableseat,price) //_RecordsetPtrm_precordset; //m_precordset=adoconn.GetRecordSet(sqltemp); adoconn.ExecuteSQL(sqltemp); MessageBox("插入成功"); adoconn.ExitConnect(); CDialog::OnOK(); } }3、删除车次删除车次的操作是对添加车次操作的补充,有了删除操作才能让车次添加车次顺当的执行。删除车次代码:voidDELETENO::OnOK(){ //TODO:Addextravalidationhere UpdateData(1); ADOConnadoconn; adoconn.OnInitADOConn();//调试 _bstr_tsqltemp; sqltemp="deletefromsalewheretrainno='"+m_Trainno+"'"; //_RecordsetPtrm_precordset; //m_precordset=adoconn.GetRecordSet(sqltemp); adoconn.ExecuteSQL(sqltemp); MessageBox("删除成功"); adoconn.ExitConnect(); //CDialog::OnOK();}4、车票出售/预定在这个部分模块中可以实现对不同车次车票的出售/预定功能,并且在页面对话框中能知道车次的实时信息,以便确定该车次的车票还能不能向外面出售或预定。车票出售/预定代码:voidTICKETSELL::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(TICKETSELL) //NOTE:theClassWizardwilladdDDXandDDVcallshere //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(TICKETSELL,CDialog) //{{AFX_MSG_MAP(TICKETSELL) //NOTE:theClassWizardwilladdmessagemapmacroshere //}}AFX_MSG_MAPEND_MESSAGE_MAP()5、车次查询此模块是面对用户运用的,用户在购买或预定车票前可以通过该对话框页面实现不同车次在不同站之间的详细查询,可提高用户得到票的概率,提高用户在购买或预定票的效率。车次查询:voidSEARCH::OnOK(){ UpdateData(1); intj=0; intnItem; //清原来的列表纪录 ADOConnadoconn; adoconn.OnInitADOConn();m_list.DeleteAllItems(); _bstr_tsql; // 利用数据库,重新填充纪录//sql="execsearch_by_employeename'"+m_name+"'";//sql="execsearch_by_employeename'"+m_name+"%'";//sql="select*fromemployeejiansuowhereemployee_namelike'"+m_name+"%'"; //依据记录集,填充列表框if(m_Startstation==""&&m_Endstation==""&&m_Trainno=="") { MessageBox("请填写车次或起始和终点站"); }elseif(m_Startstation==""&&m_Endstation==""&&m_Trainno!="") { sql="select*fromsalewheretrainno='"+m_Trainno+"'"; _RecordsetPtrm_precordset; m_precordset=adoconn.GetRecordSet(sql); while(m_precordset->adoEOF==0)//记录集没有移动到最终 { nItem=m_list.InsertItem(j,(char*)(_bstr_t)m_precordset->GetCollect("trainno")); m_list.SetItemText(nItem,1,(char*)(_bstr_t)m_precordset->GetCollect("startstation")); m_list.SetItemText(nItem,2,(char*)(_bstr_t)m_precordset->GetCollect("endstation")); m_list.SetItemText(nItem,3,(char*)(_bstr_t)m_precordset->GetCollect("starttime")); m_list.SetItemText(nItem,4,(char*)(_bstr_t)m_precordset->GetCollect("arrivetime")); m_list.SetItemText(nItem,5,(char*)(_bstr_t)m_precordset->GetCollect("availableseat")); m_list.SetItemText(nItem,6,(char*)(_bstr_t)m_precordset->GetCollect("price")); //下移一条记录 m_precordset->MoveNext(); } adoconn.ExitConnect(); }elseif(m_Startstation!=""&&m_Endstation!=""&&m_Trainno!="") { sql="select*fromsalewheretrainno='"+m_Trainno+"'andstartstation='"+m_Startstation+"'andendstation='"+m_Endstation+"'"; _RecordsetPtrm_precordset; m_precordset=adoconn.GetRecordSet(sql); while(m_precordset->adoEOF==0)//记录集没有移动到最终 { nItem=m_list.InsertItem(j,(char*)(_bstr_t)m_precordset->GetCollect("trainno")); m_list.SetItemText(nItem,1,(char*)(_bstr_t)m_precordset->GetCollect("startstation")); m_list.SetItemText(nItem,2,(char*)(_bstr_t)m_precordset->GetCollect("endstation")); m_list.SetItemText(nItem,3,(char*)(_bstr_t)m_precordset->GetCollect("starttime")); m_list.SetItemText(nItem,4,(char*)(_bstr_t)m_precordset->GetCollect("arrivetime")); m_list.SetItemText(nItem,5,(char*)(_bstr_t)m_precordset->GetCollect("availableseat")); m_list.SetItemText(nItem,6,(char*)(_bstr_t)m_precordset->GetCollect("price")); //下移一条记录 m_precordset->MoveNext(); } adoconn.ExitConnect(); } elseif(m_Startstation!=""&&m_Endstation!=""&&m_Trainno=="") { sql="select*fromsalewherestartstation='"+m_Startstation+"'andendstation='"+m_Endstation+"'";_RecordsetPtrm_precordset; m_precordset=adoconn.GetRecordSet(sql); while(m_precordset->adoEOF==0)//记录集没有移动到最终 { nItem=m_list.InsertItem(j,(char*)(_bstr_t)m_precordset->GetCollect("trainno")); m_list.SetItemText(nItem,1,(char*)(_bstr_t)m_precordset->GetCollect("startstation")); m_list.SetItemText(nItem,2,(char*)(_bstr_t)m_precordset->GetCollect("endstation")); m_list.SetItemText(nItem,3,(char*)(_bstr_t)m_precordset->GetCollect("starttime")); m_list.SetItemText(nItem,4,(char*)(_bstr_t)m_precordset->GetCollect("arrivetime")); m_list.SetItemText(nItem,5,(char*)(_bstr_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论