1、VC+火车票课设 MFC要点火车票订票系统1. 课程设计目的在如今这个信息时代,人们的出行以及旅游等都选择铁路旅行方式,铁路火车订票系统必须能处理现在大量的售票数据信息,列车的到达时间以及离站时间,因此采用计算机软件来处理火车票售票,订票信息也是必不可少的,火车票订票系统处理信息的准确性和及时性是系统的必要性能,当今火车票可谓一票难求,所以系统的实时性要求也至关重要。该火车票订票管系统的功能主要是根据不同旅客的要求提供不同的查询订票方式,实现火车票订票的信息化和智能化管理,从而减少了车站售票人员的工作量。通过该火车票订票管理系统,火车站管理人员可以实现对火车票信息的输入、订票、查询、修改等操作
2、,在后台采用了Microsoft Office Access 2003数据库对售票的信息进行存储和管理,从而也满足了对数据安全性的考虑,该系统也拥有基本了火车票订票系统所需的基本功能。2.功能描述该火车票订票系统实现了预定火车票的功能和火车票维护两个功能:(1)预订火车票在预订火车票功能模块中包括了根据车次查询订票和根据车站查询订票的功能,在这个功能模块中用户能根据自己的需要进行根据车次查询订票和根据车站查询订票等功能。(2)火车票维护在火车票维护功能模块中可以实现对火车票的票数,列车的车次,列车的始发车站和到达车站,始发车站的发车时间到达终点站的时间,途中经历几天到达终点站,起点站和终点站之
3、间的里程和硬座的票价,软座的票价,硬卧和软卧的票价的浏览。在火车票维护中还可以进行火车票信息的添加,修改,删除等功能。在添加火车票功能中,用户可以添加列车的基本信息,其中包括列车车次,列车始发车站和到达车站,始发车站的发车时间到达终点站的时间,途中经历几天到达终点站,起点站和终点站之间的里程和硬座的票价,软座的票价,硬卧以及软卧的票价,然后单击确定按钮即可向数据库中添加火车票信息;对火车票的添加和删除对话框中选中要删除的火车票信息既可删除该火车票的信息,方便快捷;在修改功能对话框中也可以实现对列车的车次,列车的始发车站和到达车站,始发车站的发车时间到达终点站的时间,途中经历几天到达终点站,起点
4、站和终点站之间的里程和硬座的票价,软座的票价,硬卧和软卧的票价的修改,实现了火车票信息的智能化管理。3方案论证 3.1总体设计3.1.1功能框图火车票订票系统功能框图:图1. 火车票订票系统功能框图3.2详细设计3.2.1数据库设计在该火车票订票系统中采用了Microsoft Office Access 2003数据库,进行对火车票售票的信息进行存储和管理,方便简单但是却满足了对数据的保存和安全的需求。(1)Access数据库的创建首先打开Microsoft Office Access 2003数据库,单击文件菜单中的新建选项,创建一个空数据库文件并且选择将该数据库将要保存的位置,单击创建后该
5、数据库就创建好了,然后在弹出的对话框中选择使用设计器创建表,为该表的每一个字段输入一个名称并且选择每个字段的属性,在将所需的字段输入完成后,单击右上角的关闭按钮,此时系统会弹出一个对话框,提示用户对刚刚编辑的数据库文件进行保存,并且选择数据库文件保存的位置,此时系统又会弹出一个对话框,提示用户输入刚才所建立的数据库的名称,然后在单击确定按钮,一个空白的数据库就建立好了。(2)添加数据库信息创建两个表分别为Station表和TrianNo,向数据库中的两个表添加火车票的信息可以通过火车票订票系统中的火车票维护进行添加,也可以在数据库中直接添加所需的信息。数据库如图2和图3所示:图2.数据库Sta
6、tion表图3.数据库TrainNo表(3)创建ODBC数据源 Windows中的ODBC组件是出现在系统的“控制面板”管理工具中,如图所示。双击ODBC图标,进入ODBC数据源管理器。运行ODBC组件,进入ODBC数据源管理器。 单击“添加”按钮,弹出有一驱动程序列表的“创建新数据源”对话框,在该对话框中选择Microsoft Access Driver。 单击“完成”按钮,进入指定驱动程序的安装对话框,数据源名称设为“学生信息管理系统”,单击“选择”按钮将本实验中的数据库。 单击“确定”按钮,刚才创建的用户数据源被添加在“ODBC数据源管理器”的“用户数据源”列表中。3.2.2程序主界面设
7、计(1)程序框架设计:启动Visualc+6.0,新建一个MFC.exe程序。打开Visualc+6.0后在菜单栏中单击文件菜单,在文件菜单中选择“新建“选项,弹出一个新建对话框,在新建对话框中选择工程选项卡,在工程选项卡中选择MFC AppWizard,在工程名称中填入TrainTicket,在存储栏中选择刚刚所创建的MFC文件所需要存放的位置即D:VC+课程设计。单击确定按钮后又弹出一个MFC应用程序向导的创建向导,选择创建一个单文档,然后单击下一步,在向导的第2步对话框中加入数据库的支持,选中“数据库查看使用文件支持”项,单击数据项按钮,弹出数据项对话框,从中选择ODBC的数据源“Dat
8、abase Example For VC+”. 保留其他默认选项,单击OK按钮,弹出 “Select Database Tables”对话框,从中选择要使用的表TrainTickets。 单击OK按钮,又回到了向导的第2步对话框。单击“完成“按钮。最后,单击“完成”按钮,完成程序框架设计。(2)菜单设计 在刚刚生成的单文档中ResourceView菜单中选择Menu选项,单击Menu的IDR_MAINFRAME,在弹出的单文档中删除初始的单文档带有的菜单选项,然后像菜单中添加预定火车票和火车票维护两个菜单,然后在预定火车票的子菜单中添加根据车次和根据车站订票两个子菜单,在火车票维护的菜单下添加
9、添加删除子菜单和关于子菜单,然后在主界面中添加一个静态文本框,右键单击静态文本框的属性,在标题栏中输入“火车票订票系统”,接着火车票订票系统的主界面的菜单设计就完成了。该系统的主界面图4所示:图4.火车票订票系统主界面主界面的初始化代码如下:void CTrainTicketDlg:OnPaint() if (IsIconic() CPaintDC dc(this); / device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); int cxIcon = GetSystemM
10、etrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2 dc.DrawIcon(x, y, m_hIcon); else CDialog:OnPaint(); 3.2.3车次查询订票设计在根据车次查询订票界面中可以根据查询列车的车次进行订票,在该界面中添加了一个静态文本框和两个GroupBox以及一个
11、列表控件,在两个GroupBox控件中添加了十个静态文本框和十个编辑框,静态文本框用以显示火车票的各种信息,编辑框用以显示和接收用户的输入信息,三个按钮控件分别为查询,返回和确认订票。各个控件的属性如表1所示:表1. 车次查询订票界面控件属性表控件ID号变量名类型IDC_EDIT_TRAIN_NOm_Trian_NoCStingIDC_EDIT_TRAINNOm_TrianNoCStingIDC_EDIT_TIMEm_TimeCStingIDC_LIST1m_List1CListCtrlIDC_EDIT_TERMINUSm_TerminusCStingIDC_EDIT_TRAIN_NOm_Tr
12、ian_NoCStingIDC_EDIT_STARTSTATIONm_StartStationCStingIDC_EDIT_TYPEm_TypeCStingIDC_EDIT_HARDSEATm_HardSeatfloatIDC_EDIT_SOFTSEATm_SoftSeatfloatIDC_EDIT_SOFTSLEEPERm_SoftSleeperfloatIDC_EDIT_HARDSLEEPERm_HardSleeperfloat在根据车次订票中,调用CTrainNoQueryDlg:OnInitDialog( )函数,对对话框进行初始化,然后然后在列表框中添加车次,站次,站名,到达时间,开
13、车时间,运行时间,天数,里程,硬座,软座,硬卧和软卧等信息,然后在数据库中读出这些信息在相应的控件之中显示。当订票者查询到所需的车次时,单击对话框中的确认订票按钮,即可成功订此次列车车票,当订票成功后系统会弹出一个消息框提示用户“恭喜您,您已经订票成功”。根据车次预定火车票的功能代码如下:BOOL CTrainNoQueryDlg:OnInitDialog() CDialog:OnInitDialog(); / TODO: Add extra initialization here m_List1.InsertColumn(0, 车次, LVCFMT_LEFT, 50, 0); m_List1
14、.InsertColumn(1, 站次, LVCFMT_LEFT, 40, 1); m_List1.InsertColumn(2, 站名, LVCFMT_LEFT, 80, 2); m_List1.InsertColumn(3, 到达时间, LVCFMT_LEFT, 70, 3); m_List1.InsertColumn(4, 开车时间, LVCFMT_LEFT, 70, 4); m_List1.InsertColumn(5, 运行时间, LVCFMT_LEFT, 70, 5); m_List1.InsertColumn(6, 天数, LVCFMT_LEFT, 40, 6); m_List1
15、.InsertColumn(7, 里程, LVCFMT_LEFT, 40, 7); m_List1.InsertColumn(8, 硬座, LVCFMT_LEFT, 65, 8); m_List1.InsertColumn(9, 软座, LVCFMT_LEFT, 65, 9); m_List1.InsertColumn(10, 硬卧, LVCFMT_LEFT, 65, 10); m_List1.InsertColumn(11, 软卧, LVCFMT_LEFT, 65, 11); return TRUE; / return TRUE unless you set the focus to a c
16、ontrolvoid CTrainNoQueryDlg:OnButton1() / TODO: Add your control notification handler code here MessageBox(恭喜您,您已经订票成功!, NULL, MB_OKCANCEL);3.2.4车站查询订票在根据车站查询订票界面中可以根据查询列车所途径的车站进行订票,在该界面中添加了一个静态文本框以及一个列表控件,静态文本框用以显示火车所途径的车站信息,编辑框用以显示和接收用户的输入信息,列表框用以显示列车的各个信息,提供给用户参考,在根据车站订票功能中,调用BOOL CStationQueryDl
17、g:OnInitDialog( )函数,对对话框进行初始化,然后然后在列表框中添加车次,类型,始发站,始发时间,查询站,开车时间,终点站,全程运行,里程等信息,然后在数据库中读出这些信息在相应的控件之中显示。当订票者查询到所需的车站时,单击对话框中的确认订票按钮,即可成功订此次列车车票,当订票成功后系统会弹出一个消息框提示用户“恭喜您,您已经订票成功!”。根据车站订票的控件属性如表2所示:表2.车站查询订票界面控件属性表控件ID号变量名类型IDC_EDIT_STATION_NAMEm_StationNameCStringIDC_LIST1m_List1CListCtrl根据车站预定火车票的功能
18、代码如下:BOOL CStationQueryDlg:OnInitDialog() CDialog:OnInitDialog(); / TODO: Add extra initialization here m_List1.InsertColumn(0, 车次, LVCFMT_LEFT, 50, 0); m_List1.InsertColumn(1, 类型, LVCFMT_LEFT, 70, 1); m_List1.InsertColumn(2, 始发站, LVCFMT_LEFT, 80, 2); m_List1.InsertColumn(3, 始发时间, LVCFMT_LEFT, 70, 3
19、); m_List1.InsertColumn(4, 到站时间, LVCFMT_LEFT, 70, 4); m_List1.InsertColumn(5, 查询站, LVCFMT_LEFT, 80, 5); m_List1.InsertColumn(6, 开车时间, LVCFMT_LEFT, 70, 6); m_List1.InsertColumn(7, 终点站, LVCFMT_LEFT, 80, 7); m_List1.InsertColumn(8, 全程运行, LVCFMT_LEFT, 70, 8); m_List1.InsertColumn(9, 里程, LVCFMT_LEFT, 50,
20、 9); return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSEvoid CStationQueryDlg:OnButton1() / TODO: Add your control notification handler code here MessageBox(恭喜您,您已经订票成功!); 3.2.5添加/删除火车票在添加/删除火车票信息功能框中提供了添加,修改和删除火车票信息,其中包括车次,始发站,发车时间,终点
21、站,到站时间,第几天到达,里程,类型,硬座每千米的价格,软座每千米的价格,硬卧每千米的价格,软卧每千米的价格。在该功能中调用void CAddStationDlg:OnButtonMake() 函数,在函数体中进行if( )条件判断,如果m_StationName为空,即弹出提示消息框,站名不能为空; 反之if()条件站名不为空则执行添加操作;火车票的修改操作与添加操作类是,选择要修改的火车票信息,然后单击对话框中的修改按钮,弹出修改火车票的对话框即可对火车票信息进行修改,修改完成后单击确定按钮就完成了火车票信息的修改。删除火车票信息只需选择将要进行删除的火车票,单击删除按钮即可完成对火车票的
22、删除操作。在添加,修改和删除对话框中的各个控件的属性如表3所示:表3. 添加/删除火车票界面控件属性表控件ID号变量名类型IDC_COMBO_END_Hm_EndTime_hCComboBoxIDC_EDIT_HARDSEATm_HardSeatfloatIDC_EDIT_HARDSLEEPERm_HardSleeperfloatIDC_EDIT_SOFTSLEEPERm_SoftSleeperfloatIDC_EDIT_SOFTSEATm_SoftSeatfloatIDC_EDIT_TRAIN_NOm_Trian_NoCStingIDC_EDIT_TYPEm_TypeCStingIDC_ED
23、IT_TOTAL_MILEAGEm_Total_mileageintIDC_EDIT_TERMINUSm_TerminusCSting其中实现添加/删除火车票信息的主要代码如下:void CAddStationDlg:OnButtonMake() / TODO: Add your control notification handler code here UpdateData(TRUE); if (m_StationName.IsEmpty() MessageBox(站名必须填写!, 警告!, MB_OK); (CEdit *)GetDlgItem(IDC_EDIT_STATION_NAME
24、)-SetFocus(); return; if (m_AdoConn.ExecuteSQL(_bstr_t)sqlStr) MessageBox(添加成功!, NULL, MB_OKCANCEL); else MessageBox(添加失败!, 警告!, MB_OKCANCEL); CDialog:OnOK(); 4.运行结果与分析(1)车次查询订票在根据车次查询订票界面中,用户只需要在查询的编辑框中输入需要查询的车次,然后单击查询按钮即可完成通过车次对火车票信息进行查询,然后单击确认订票完成火车票预定。车次查询订票如图5所示:图5.车次查询订票(2)车站查询订票在根据车站查询订票界面中,用
25、户只需要在查询的编辑框中输入需要查询的车站,然后单击查询按钮即可完成对途径该站的火车的火车票信息进行详细查询,在查询的火车票信息中选择适当的火车,然后单击确认订票完成火车票预定。车站查询订票如图6所示:图6.车站查询订票(3)添加火车票 在主菜单中单击火车票维护,在弹出的子菜单中选择添加/删除即可进行火车票的添加和删除操作,在其中还可以对火车票信息进行修改,修改火车票信息只需单击修改按钮,在弹出的对话框中对选择的火车票信息进行修改,修改完成后单击确定按钮,火车票信息即修改成功。添加火车票信息如7所示:图7.添加火车票信息(4)修改火车票信息如图8所示:图8. 修改火车票信息(5)删除火车票信息
26、如图9所示:图9. 删除火车票信息5. 设计体会在为期两周的VC+程序课程设计的时间里,学到了很多东西。虽然在课程设计的过程中,遇到了许多的困难,特别是在解决程序功能时候总是感到很迷茫,课设中问题总是不断的出现,通过不断与同学之间的交流,慢慢的将问题解决,但是通过自己不断的查阅这学期学习的Visual C+实用教程以及经过向同学和老师请教过程中,找到了解决功能实现的方法,虽然在其中遇到了失败,但是只要坚持不懈,总会解决面临的问题。通过这次设计火车票订票系统,对Visual C+编程有了稍微进一步的了解;通过这次的课程设计,明白了任何事要学会不仅要知其然,而且要知其所以然,做到严谨认真的态度,这
27、样才能更好完成课程设计。做事情首先要懂得实践,学会把书本上的理论用于实践,只有在实践中才能找到更多隐藏的没有被发现的问题。这次通过课程设计锻炼了实践能力,在以后遇到更大的难题时,会显得更加的从容,更加的有自信,这样才能有更好的发展。在以后的工作学习中,一定要相互学习,不耻下问,方能达到事半功倍的效果。俗话说:纸上得来终觉浅,绝知此事要躬行。6.参考文献1 孙鑫,VC+深入详解M,电子工业出版社出版 2006.052 揣锦华,面向对象程序设计与VC+,西安电子科技大学出版社 2005.023 贾振华,VC+程序设计项目实践,清华大学出版社2010.034 林锦贤,林少丹,VC+程序设计基础,人民
28、交通出版社,2009.095 管西京,深入体验VC+项目开发,清华大学出版社,2011.07附录:void CAddStationDlg:OnButtonMake() / TODO: Add your control notification handler code here UpdateData(TRUE); if (m_StationName.IsEmpty() MessageBox(站名必须填写!, 警告!, MB_OK); (CEdit *)GetDlgItem(IDC_EDIT_STATION_NAME)-SetFocus(); return; CString sqlStr;sql
29、Str.Format(insert into Station(TrainID, StationName, ArriveTime, LeaveTime, StationNum, Mileage, DayNum)values(%d,%s,%0.2d:%0.2d:00,%0.2d:%0.2d:00,%d,%d,%d), m_ldAccTrainID, m_StationName.GetBuffer(0), m_Arrive_h.GetCurSel(), m_Arrive_s.GetCurSel(), m_Leave_h.GetCurSel(),m_Leave_s.GetCurSel(), m_Sta
30、tionNum, m_Mileage, m_DayNum); if (m_AdoConn.ExecuteSQL(_bstr_t)sqlStr) MessageBox(添加成功!, NULL, MB_OKCANCEL); else MessageBox(添加失败!, 警告!, MB_OKCANCEL); CDialog:OnOK(); BOOL CAddStationDlg:OnInitDialog() CDialog:OnInitDialog(); / TODO: Add extra initialization here m_TrainNo = m_sAccTrainNo; m_Type = m_sAccTrainType; m_Arrive_h.SetCurSel(0); m_Arrive_s.SetCurSel(0); m_Leave_h.SetCurSel(0); m_Leave_s.SetCurSel(0); UpdateData(FALSE); retu
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1