火车订票数据库报告.docx
《火车订票数据库报告.docx》由会员分享,可在线阅读,更多相关《火车订票数据库报告.docx(18页珍藏版)》请在冰豆网上搜索。
火车订票数据库报告
数据库设计结业报告
设计题目:
客运售票系统的分析与设计
专业:
计算机科学与技术
班级:
03073
学号:
030740303
姓名:
乔治
指导老师:
杨兴忠
日期:
2010年5月21日—2010年6月6日
成绩:
目录
一、课题背景及意义·······························2
二、需求分析·····································2
1、业务需求分析······································2
2.功能需求···········································2
3、数据需求··········································3
三、概要设计·····································4
(一)、系统组成······································4
(二)、数据库设计····································4
1、概念结构设计·······································5
2、逻辑结构设计·······································5
3、数据库模式定义·····································6
四、数据库实施阶段·································6
五、详细设计······································6
1、模块简述·····································6
2、模块设计····································6
六、总结··········································13
七、参考文献······································14
一、课题背景及意义
信息时代已经来临,信息处理的利器——计算机应用于火车站售票的日常管理为火车站售票的现代化带来了从未有过的动力和机遇,为火车站票务管理领域的飞速发展提供了无限潜力。
采用计算机管理信息系统已成为火车站票务管理科学化和现代化的重要标志,给火车站票务带来了明显的经济效益和社会效益。
采用数据技术建立的管理系统不仅能提高出售/预定车票的效率,还能减少错误发生的概率,方便用户的查询订购车票。
降低工作人员的工作量,避免购票人员在车站无效的等票,可以调高购买者买到票的机率,这样的作用在春运期间最为显著,因为在春运的时候车站里许多人是在无效的等票,不仅造成车站里人员管理的困难,还使本可以买到票的人无辜浪费时间在侯票上。
在此背景下,本文论述了火车订票管理系统(的设计实现。
通过对各种数据库管理系统的模型分析,结合火车站票务销售查询过程的实际需求,同时本文还说明了火车订票管理系统的开发过程及各种技术细节。
本系统是适应时代发展的需要,提高车票订票和车次管理的效率而开发设计的。
二、需求分析
在构造系统时,首先从需求出发构造数据库表,然后再由数据库表结合需求划分系统功能模块。
这样,就把一个大的系统分解成了几个小系统,使整个系统的功能更加详细易于理解,同时易于实现系统的整体设计。
本系统分为二个功能,分别是用户管理和车次/车票管理,其所能实现的功能:
1、实现用户登录、用户添加。
2、实现对车次的删除和车次基本信息的添加。
3、实现售票的基本管理。
4、实现对车次基本信息的查询。
1、业务需求分析
从实际角度出发,对于用户要提供方便快捷的车票查询和订票服务,对于车站工作人员,则是要能够方便明朗的对车次信息进行增删修改操作和车票的订售操作,提高车次的编组效率,是车次资源得到充分利用,并可以提高车票的出售效率降低工作人员的工作量。
2.功能需求
在数据操作界面需要有用户登录窗口和车次信息操作窗口,这需要有实现用户登录的功能和车次查询、添加、车票出售的功能。
这是火车订票系统的基本功能,只有实现了这几个功能一个火车订票系统才能开始运作,在本系统中实现了用户的登录添加和车票的基本信息操作。
功能列表
编号
功能名称
功能说明
1、1
用户登录
用户输入用户名和密码登录系统
1、2
用户添加
增加用户和对所添加的用户权限进行设定
2.、1
添加车次
添加车次的基本信息
2、2
删除车次
删除车的基本信息
3、1
售票
对车票销售/预定的操作
4、1
车次查询
对车次基本信息的查询
3、数据需求
系统处理的对象有:
用户信息:
用户名、用户密码、用户权限。
车次信息:
车次号、票价、起始站、目的站、开车时间、到站时间、实时座位数。
系统总数据流图
用户系统与车次信息系统间数据流图
数据字典
数据项编号
数据项名
数据项含义
存储结构
IDC-1
username
用户名
Char(30)
IDC-2
Password
登录密码
Char(30)
IDC-3
Radio
用户权限
Char(30)
IDC-4
Trainno
车次号
Char(30)
IDC-5
Price
票价
Money(8)
IDC-6
Availableseat
座位数
Int(4)
IDC-7
Startstation
起始站
Char(30)
IDC-8
Endstation
目的站
Char(30)
IDC-9
Starttime
发车时间
Char(30)
IDC-10
Arrivetime
到站时间
Char(30)
三、概要设计
(一)、系统组成
系统开发的总体目标是实现火车票订/售票管理的系统化和自动化,保证车票售出和车次信息管理的正确无误,确保车票和车次管理的有效。
在本系统中分为两个子系统,分别是用户子系统和车次信息子系统,主要任务是对用户信息、车次信息、车票信息等操作及外理。
本系统为C/S结构、运行平台为微软vc++6.0以上版本。
以及SQLSever2000以上版本。
下图为系统结构图:
系统框架
(二)、数据库设计
1、概念结构设计
概念设计阶段主要是将需求分析阶段得到的用户需求抽象为信息结构(概念模型)的过程。
根据之前的分析,数据库应该主要的实体有用户和车票信息。
经过分析得到的实体关系图如下
实体关系图
2、逻辑结构设计
将E-R图转化为关系模式:
在设计时,将一个1:
n联系的单方主码加至多方。
一个实体单独转化成一张表。
根据设计原则和以上E-R图,转化为以下一张表:
车票销售表:
sale(车次号、起始站、目的站、发车时间、到站时间、票价、实时座位数)
3、数据库模式定义
列名
数据类型
取值约束
可否为空
说明
Trainno
Char(30)
可
车次号
Startstation
Char(30)
可
起始站
Endstation
Char(30)
可
目的站
Starttime
Char(30)
可
发车时间
Arrivetime
Char(30)
可
到站时间
Price
Money(8)
可
票价
Availableseat
Int(4)
可
实时座位数
四、数据库实施阶段
数据库的建立是直接在企业管理器中建的,数据库中的表清单在之前已经列出。
在MFC界面建立数据库不同功能模块的操作对话框,并对所有对话框中的控件按钮进行设定,添加成员函数,使得数据库的程序框架确定下来。
接着是对成员函数进行补充使程序能顺利运行并能连上数据库,对连接模块进行补充设定,使得基本权限确定。
在数据库建立过程中通过索引实现了对表的快捷查询。
连接数据库时要注意程序中数据库各项属性的定义描述,避免其与数据库表中的属性值产生差异。
在程序完善阶段需要对不同用户权限的设定,这样可以避免不同用户的乱操作造成对数据库的破坏。
五、详细设计
1、模块简述
本火车订票管理系统主要的所有模块主要是分为用户,车次信息、连接数据库的类三个部分,下面对三个个部分进行再分类,共有9个模块。
模块类别
模块编号
模块名称
公共模块
模块功能
用户
T——1
USER
用户登录模块
T——2
ADDUSER
添加用户
车次信息
T——3
SEARCH
查询车次
T——4
INSERT
插入车次
T——5
Delete
T——6
DELETENO
删除车次号
T——7
SELL
售票
T——8
TICKETSELL
连接模块
T——9
ADOConn
连接数据库
2、模块设计
下面给出模块的背景,设计思路,算法,界面以及关键代码,比较简单的模块就仅给界面设计以及算法设计,比较复杂的模块会给出相应的数据库有关触发器,存储过程和视图的设计。
而本系统重的模块主要有一下几个:
1、用户模块
User模块是公共模块,车次信息和连接模块也用到User,模块。
user_类是为系统用户表创建的一个类:
要利用ADO访问数据库,类的成员变量对应表的列,类的成员函数对应表的操作。
但本系统不是为每一个表都创建了类。
1、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_MAP
END_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(