【課程設(shè)計(jì)】數(shù)據(jù)庫:火車票管理系統(tǒng)
摘要:本文主要介紹了火車票管理系統(tǒng),其中包括其選題功能概述,對(duì)該系統(tǒng)的方案方法設(shè)計(jì),以及過程實(shí)現(xiàn)等內(nèi)容。由于系統(tǒng)的代碼量較大,因此將會(huì)較為抽象地對(duì)思想進(jìn)行介紹,在必要時(shí)會(huì)舉出一些實(shí)例,還會(huì)附上成果展示以及安裝方法。最后補(bǔ)充一下這次團(tuán)伙作案的心得體會(huì),也是非常寶貴的財(cái)富。
引言——起因與動(dòng)力
本系統(tǒng)是由五位華工學(xué)子(劉同學(xué)、陳同學(xué)、羅同學(xué)、魯同學(xué)、盧同學(xué))在課余時(shí)間中對(duì)數(shù)據(jù)庫課程設(shè)計(jì)進(jìn)行的一次嘗試。起因在于,雖然我們都有部分項(xiàng)目經(jīng)驗(yàn),然而一般情況下,都是由導(dǎo)師為我們所引導(dǎo)安排去實(shí)施任務(wù)的,因此在此課程出來后,我們就商量著體驗(yàn)一次,從零開始的自主實(shí)現(xiàn)項(xiàng)目過程。這次課設(shè)為對(duì)我們自身的提升有很大的幫助,為此希望通過這篇文章分享出來。
對(duì)于該課設(shè),對(duì)于我們的要求就是認(rèn)真執(zhí)行,定期開展組會(huì)與項(xiàng)目驗(yàn)收。在開發(fā)過程中,嘗試了新的語言、開發(fā)工具以及開發(fā)模式等。其中最為印象深刻的是項(xiàng)目的集體討論設(shè)計(jì)的過程、語雀gitee等協(xié)同開發(fā)工具、函數(shù)接口的注釋標(biāo)準(zhǔn)化等細(xì)節(jié)內(nèi)容、前端開發(fā)等初嘗試。這些都是以往淺淺嘗試過的內(nèi)容,在本次課設(shè)中有了更豐富的知識(shí)獲取。
當(dāng)然,由于是第一次做如此大的工程,也遇到了一些困難的地方,比如在最初的數(shù)據(jù)庫設(shè)定完成后,課設(shè)開展了一段時(shí)間,卻發(fā)現(xiàn)設(shè)計(jì)內(nèi)容需要修改,此時(shí)修改工程量較大,難免會(huì)出現(xiàn)一些煩躁情緒,當(dāng)工作周期長時(shí),也會(huì)出現(xiàn)部分拖沓懈怠,在小組之間的鼓勵(lì)與監(jiān)督下,完成讓課設(shè)繼續(xù)進(jìn)行??上У氖菍?duì)于本系統(tǒng)由于時(shí)間較短,其實(shí)是開發(fā)并不完整的,而且存在并發(fā)性以及部分插入的等問題,但是這次課設(shè)體驗(yàn)非常難得,學(xué)到了許多課堂需不到的內(nèi)容。
一、選題背景
本課題是實(shí)現(xiàn)對(duì)火車票售票的管理系統(tǒng),具有售票系統(tǒng)、系統(tǒng)管理、綜合查詢等功能。該系統(tǒng)分為三大板塊,分別為售票系統(tǒng)、系統(tǒng)管理和營收結(jié)算。以下是每個(gè)模塊詳細(xì)介紹。
- 售票管理:本系統(tǒng)主要功能包括:售當(dāng)日票、預(yù)售票、退票、廢票、選座位、站點(diǎn)班次查詢、售票統(tǒng)計(jì)等。設(shè)計(jì)了多種售票模式,售票員可輸入自定義站點(diǎn)編碼或站點(diǎn)拼音代碼,即可顯示經(jīng)過該站點(diǎn)的所有可售班次,班次車輛的座位狀態(tài)實(shí)時(shí)、直觀地顯示并完成售票操作。對(duì)于售票員來說,可同時(shí)售數(shù)張相同或不同站點(diǎn),相同或不同票種(全票、半票、優(yōu)惠票)的車票,可以實(shí)現(xiàn)累加本次售票款,直至下次新售票開始。同時(shí)提供用戶端,乘客也可以通過互聯(lián)網(wǎng)購票。
- 系統(tǒng)管理:用戶管理、線路設(shè)置、站點(diǎn)設(shè)置、退票參數(shù)、預(yù)售票參數(shù)、票價(jià)設(shè)置等。該系統(tǒng)主要分為四大部分,分別為用戶、車票、車次和路線板塊,每個(gè)板塊可以進(jìn)行查詢與修改操作。
- 營收管理:售票員結(jié)算、匯總報(bào)表。對(duì)營收繳款進(jìn)行管理,可以實(shí)時(shí)掌握車站營收情況,方便財(cái)務(wù)監(jiān)督。能夠快速、準(zhǔn)確地生成各種營收結(jié)算報(bào)表,顯著地提高了營收結(jié)算的工作質(zhì)量和效率。
二、方案論證(設(shè)計(jì)理念)
2.1 運(yùn)行和開發(fā)環(huán)境
- 操作系統(tǒng):Windows10
- 數(shù)據(jù)庫:mysql
- 集成開發(fā)環(huán)境:Pycharm
- Python版本:3.9
- 前端模塊:pyqt5
- 數(shù)據(jù)庫模塊:pymysql
- 輔助工具:qtDesigner
- Git:https://gitee.com/youyouxingyuandao/database-course-design
2.2 面向?qū)ο缶幊?/h4>
面向?qū)ο缶幊痰膬?yōu)勢(shì)在于易維護(hù)、開發(fā)效率高和易擴(kuò)展等,對(duì)于易維護(hù),只需維護(hù)局部模塊,維護(hù)起來是非常方便和成本較低;對(duì)于開發(fā)效率高,在軟件開發(fā)時(shí),根據(jù)設(shè)計(jì)的需要對(duì)現(xiàn)實(shí)世界的事物進(jìn)行抽象,產(chǎn)生類,通過對(duì)類的封裝,對(duì)其的使用開發(fā)的效率和質(zhì)量;易擴(kuò)展由于繼承、封裝、多態(tài)的特性,自然設(shè)計(jì)出高內(nèi)聚、低耦合的系統(tǒng)結(jié)構(gòu),使得系統(tǒng)更靈活、更容易擴(kuò)展,而且成本較低。
前端面向?qū)ο缶幊腆w現(xiàn)于,每個(gè)界面的每個(gè)組件都設(shè)計(jì)為一個(gè)類,比如在管理端的用戶信息展示窗口中,首先對(duì)分頁器、用戶信息欄、搜索框進(jìn)行父類封裝,在繼承后,通過多態(tài)的編程思想,進(jìn)行再封裝,最后組裝在一起。
后端面向?qū)ο缶幊腆w現(xiàn)于,對(duì)于數(shù)據(jù)庫通過邏輯結(jié)構(gòu)設(shè)計(jì)后,可以分析出各個(gè)實(shí)體類,進(jìn)行面對(duì)對(duì)象的編程。不僅如此,由于設(shè)計(jì)部分工具操作,還額外定義了工具類,作為前端的輔助工具接口類。
2.3 前后端分離
對(duì)于前后端分離,可以提高工作效率,分工更加明確。兩端開發(fā)可以同時(shí)進(jìn)行,只需通過接口完成連接,雙方互不干擾。可是為了在該次大作業(yè)中提高每位成員的參與度,因此在任務(wù)分配上,每個(gè)人都會(huì)有對(duì)前后端的工作安排。
2.4 數(shù)據(jù)庫設(shè)計(jì)思路
2.4.1 需求分析
-
用戶登錄注冊(cè):用戶包括工作人員和乘客,有管理員、售票員、乘客3類用戶;普通人可以通過注冊(cè)功能成為新用戶,用戶通過登錄可以使用系統(tǒng)提供的相應(yīng)功能,如添加乘客,購買車票,查詢訂單等等。
-
系統(tǒng)需要提供查詢列車詳細(xì)信息的功能:用戶根據(jù)始發(fā)站和終點(diǎn)站,查詢可以滿足自己行程要求并且正常運(yùn)行的列車,并且可以進(jìn)一步查看開車時(shí)間,到達(dá)時(shí)間以及列車剩余座位的數(shù)量和票價(jià);用戶可以搜索具體的某一趟車次,可以得到該車次的具體路線信息以及發(fā)車時(shí)間。
-
系統(tǒng)需要提供售票功能:售票員輸入站點(diǎn)即可顯示經(jīng)過該站點(diǎn)的所有可售班次以及班次車輛的座位狀態(tài);一個(gè)售票員可同時(shí)售數(shù)張相同或不同站點(diǎn),相同或不同票種(一等、二等、站票)的車票,可以實(shí)現(xiàn)累加本次售票款,直至下次新售票開始;還應(yīng)實(shí)現(xiàn)輔助提示應(yīng)找款以及退票的功能,售票員可以查詢當(dāng)天售票帳單,乘客也可以通過互聯(lián)網(wǎng)購票。
-
系統(tǒng)需要提供管理功能:包括用戶管理、線路設(shè)置、站點(diǎn)設(shè)置、票價(jià)設(shè)置等。該系統(tǒng)主要分為四大部分,分別為用戶、車票、車次和路線板塊,每個(gè)板塊可以進(jìn)行查詢與修改操作,管理員可以添加、修改和刪除用戶信息、線路信息、車票信息以及車次信息。
-
系統(tǒng)需要提供營收結(jié)算功能:包括售票員結(jié)算、匯總報(bào)表。對(duì)營收繳款進(jìn)行管理,可以實(shí)時(shí)掌握車站營收情況,方便財(cái)務(wù)監(jiān)督。能夠快速、準(zhǔn)確地生成各種營收結(jié)算報(bào)表。匯總報(bào)表主要包括:根據(jù)用戶選擇或者輸入的各種條件(包括:時(shí)間,售票員,票號(hào)等)匯總車站運(yùn)營數(shù)據(jù),包括:售票匯總,退票匯總,預(yù)售票匯總,廢票匯總,綜合匯總,財(cái)務(wù)匯總,售票員結(jié)算單等等。
-
系統(tǒng)需要提供綜合查詢功能:包括:匯總線路、站點(diǎn)、班線、班次等各種基礎(chǔ)數(shù)據(jù);統(tǒng)計(jì)營運(yùn)數(shù)據(jù),生成日?qǐng)?bào)表、月報(bào)表和任意時(shí)段報(bào)表;以匯總表形式,顯示出售票張數(shù)、售票金額以及售票情況。
2.4.2 概念結(jié)構(gòu)設(shè)計(jì)
- admin管理員、user用戶、sellers售票員實(shí)體:在該實(shí)體中,用戶id為主鍵,用來作為每一個(gè)用戶的唯一標(biāo)識(shí),同時(shí)也作為登陸系統(tǒng)的用戶名使用;身份屬性用于區(qū)分用戶的類型,1為普通用戶,2為管理員,3為售票員;每個(gè)用戶都有唯一的身份證號(hào)和電話號(hào)碼。
- route路線實(shí)體:在該實(shí)體中,路線id為主鍵,用來作為每一條路線的唯一標(biāo)識(shí),另外還記錄了該路線途徑的每一站以及到達(dá)該站的時(shí)刻。
- train車次實(shí)體:在該實(shí)體中,車次id為主鍵,用來作為每一個(gè)車次的唯一標(biāo)識(shí);不同車次的列車擁有自己的一等座數(shù)量、二等座數(shù)量和三等座數(shù)量;路線id作為該實(shí)體的外鍵與路線表相聯(lián)系,該車次的一等座、二等座以及三等座的價(jià)格也通過對(duì)應(yīng)路線的歷時(shí)和價(jià)格參數(shù)計(jì)算出來。
- ticket車票實(shí)體:在該實(shí)體中,車次id和發(fā)車日期作為聯(lián)合主鍵,車次id作為外鍵與車次表相關(guān)聯(lián);一等座、二等座以及三等座剩余數(shù)量分別記錄了某一車次某一日期當(dāng)天的不同車票類型的剩余數(shù)量。
- orders用戶訂單實(shí)體:在該實(shí)體中,訂單id作為主鍵,用來作為每一份訂單的唯一標(biāo)識(shí);對(duì)于每一份獨(dú)立的訂單,記錄著用戶購買某一張車票的所有信息:包括用戶身份證號(hào)、購買車次id、車票類型(一等座、二等座和三等座)、該車票的價(jià)格、下單時(shí)間、起始站、終點(diǎn)站、出發(fā)時(shí)間、賬單id以及是否發(fā)生退票行為(1為發(fā)生了退票 2為未發(fā)生退票);其中車次id作為該實(shí)體類型的外鍵與車次表相關(guān)聯(lián),可以對(duì)應(yīng)到相關(guān)車次的具體信息。
- bill用戶賬單實(shí)體:在該實(shí)體中,賬單id作為主鍵,用來作為每一份賬單的唯一標(biāo)識(shí);售票員id作為外鍵與用戶表相關(guān)聯(lián),且該用戶身份屬性的值為3,代表著該賬單對(duì)應(yīng)的某一個(gè)售票員;訂單id作為外鍵與訂單表相關(guān)聯(lián),用于記錄該訂單屬于某一賬單,一份賬單可以對(duì)應(yīng)到多份訂單;此外該實(shí)體還包括應(yīng)付金額和實(shí)付金額這兩個(gè)屬性,通過這兩個(gè)屬性可以計(jì)算出找零金額。
-
整體E-R圖
- 每個(gè)用戶可以添加多個(gè)乘客
- 每個(gè)用戶可以擁有多個(gè)訂單
- 每個(gè)訂單屬于一個(gè)乘客
- 每個(gè)訂單擁有一條車次的信息
- 每個(gè)賬單擁有多個(gè)訂單
- 每個(gè)車次信息對(duì)應(yīng)多條車票
- 每個(gè)列車有一條對(duì)應(yīng)的路線
2.4.3 邏輯結(jié)構(gòu)設(shè)計(jì)
-
實(shí)體轉(zhuǎn)化為關(guān)系模式
用戶信息(用戶id,電話號(hào)碼,密碼,身份證號(hào),真實(shí)姓名,用戶類型,性別,注冊(cè)日期)
路線信息(路線id,出發(fā)時(shí)間,到達(dá)時(shí)間,出發(fā)站,目的站,中間站1,中間站2,中間站3,中間站4,中間站5,中間站6,中間站7,中間站8,到達(dá)時(shí)間1,到達(dá)時(shí)間2,到達(dá)時(shí)間3,到達(dá)時(shí)間4,到達(dá)時(shí)間5,到達(dá)時(shí)間6,到達(dá)時(shí)間7,到達(dá)時(shí)間8)
車次信息(車次id,路線id,一等座數(shù)量,二等座數(shù)量,三等座數(shù)量,一等票價(jià)格,二等票價(jià)格,三等票價(jià)格)
車票信息(車次id,發(fā)車日期,一等座剩余數(shù)量,二等座剩余數(shù)量,三等座剩余數(shù)量)
訂單信息(訂單id,用戶身份證號(hào),賬單id,車次id,車票類型,價(jià)格,下單時(shí)間,發(fā)車時(shí)間,出發(fā)地,目的地,是否退票)
賬單信息(賬單id,訂單id,售票員id,實(shí)付金額,應(yīng)付金額)
-
聯(lián)系轉(zhuǎn)化為關(guān)系模式
用戶擁有訂單(用戶身份證號(hào),訂單編號(hào))
訂單擁有車次(訂單編號(hào),車次編號(hào))
列車擁有路線信息(車次編號(hào),路線編號(hào))
賬單擁有訂單(賬單編號(hào),訂單編號(hào))
賬單對(duì)應(yīng)售票員(賬單編號(hào),售票員編號(hào))
車票擁有車次(車次編號(hào),發(fā)車日期)
-
實(shí)體與聯(lián)系進(jìn)行合并
User表設(shè)計(jì)如下:
Route表設(shè)計(jì)如下:
Train表設(shè)計(jì)如下:
Ticket表設(shè)計(jì)如下:
Orders表設(shè)計(jì)如下:
Bill表設(shè)計(jì)如下:
2.5 軟件框架與流程
該大作業(yè)的軟件框架分為三層,為表現(xiàn)層、應(yīng)用層與數(shù)據(jù)層。表現(xiàn)層主要功能為數(shù)據(jù)修飾及展示、獲取用戶信息、發(fā)送數(shù)據(jù)訪問請(qǐng)求;應(yīng)用層主要功能為相應(yīng)訪問請(qǐng)求、提供數(shù)據(jù)訪問接口、嵌入式數(shù)據(jù)庫編程、數(shù)據(jù)封裝修改;數(shù)據(jù)層主要功能為數(shù)據(jù)庫設(shè)計(jì)、數(shù)據(jù)初始化、儲(chǔ)存、增刪查改。工具箱為整個(gè)創(chuàng)建開發(fā)過程提供相應(yīng)工具,便于開發(fā)進(jìn)行。
程序流程設(shè)置為從登陸界面進(jìn)入,可以從登陸界面中選擇打開注冊(cè)界面完成注冊(cè),還可以選擇身份,完成登陸操作,進(jìn)入用戶界面、售票員界面以及管理員界面。其中管理員界面可以打開匯總界面,查看銷售情況。對(duì)于用戶界面、售票員界面以及管理員界面,都是采取訪問應(yīng)答的方式獲取數(shù)據(jù)并完成數(shù)據(jù)整理展示到前端,而匯總界面,這是根據(jù)當(dāng)天的售票情況,獲取相應(yīng)數(shù)據(jù)并完成整理與展示。
2.6 前端設(shè)計(jì)
管理員界面:分為三大板塊,分別為標(biāo)題區(qū)、功能選擇區(qū)以及顯示區(qū),標(biāo)題區(qū)會(huì)對(duì)軟件的信息和圖標(biāo)進(jìn)行展示,并提供用戶的基本信息;功能選擇區(qū)將會(huì)對(duì)管理層的功能進(jìn)行分類,并通過標(biāo)簽顯示,由鼠標(biāo)單擊來確定數(shù)據(jù)顯示界面;顯示區(qū)則是對(duì)后端數(shù)據(jù)傳入后,對(duì)數(shù)據(jù)完成整理并進(jìn)行展示。
售票員界面:分為三大板塊,分別為標(biāo)題區(qū)、售票區(qū)以及賬單提交區(qū),標(biāo)題區(qū)會(huì)對(duì)軟件的信息和圖標(biāo)進(jìn)行展示,并提供售票員的基本信息;售票區(qū)可以由售票員輸入目的站和終點(diǎn)站對(duì)符合條件的車次信息進(jìn)行查找并顯示;賬單提交區(qū)則是對(duì)售票員處理的一系列訂單進(jìn)行提交操作。
用戶界面:該界面與售票員界面相似,分為三大板塊,分別為標(biāo)題區(qū)、售票區(qū)以及賬單提交區(qū),標(biāo)題區(qū)會(huì)對(duì)軟件的信息和圖標(biāo)進(jìn)行展示,并提供售票員的基本信息;售票區(qū)可以由售票員輸入目的站和終點(diǎn)站對(duì)符合條件的車次信息進(jìn)行查找并顯示;賬單提交區(qū)則是對(duì)售票員處理的一系列訂單進(jìn)行提交操作。
三、過程論述
由于系統(tǒng)內(nèi)容較大,因此在此介紹過程論述的大體思路,必要時(shí)進(jìn)行具體示例的說明。而更詳細(xì)的內(nèi)容會(huì)可以通過分工,具體查看每位成員的實(shí)驗(yàn)報(bào)告,里面包括了具體的代碼實(shí)現(xiàn)方式。
3.1 任務(wù)分工
前端
- 劉弘韜:登錄界面、注冊(cè)界面、車次顯示界面
- 羅信:用戶顯示界面、車票顯示界面
- 盧梓鋒:管理員界面框架,營收?qǐng)?bào)表顯示界面,售票員界面,用戶界面
- 陳遠(yuǎn)生:分頁器,路線顯示界面
- 魯逸風(fēng):管理用戶界面,詳細(xì)信息界面,搜索框,管理員界面(部分)
后端
- 劉弘韜:數(shù)據(jù)庫搭建、數(shù)據(jù)庫部分操作(范圍查找、分頁查找)、應(yīng)用層部分接口(用戶層接口)
- 羅信:數(shù)據(jù)庫數(shù)據(jù)插入(爬取12306車票以及路線數(shù)據(jù),生成uesr、train、ticket以及route的數(shù)據(jù))、連接車票界面設(shè)計(jì)與后端數(shù)據(jù)庫
- 盧梓鋒:售票員及用戶界面的數(shù)據(jù)庫函數(shù)(查找線路,訂單賬單,購票,退票)
- 陳遠(yuǎn)生:路線界面的增刪查改,部分售票員連接數(shù)據(jù)庫操作
- 魯逸風(fēng):部分查找數(shù)據(jù)庫函數(shù)(查找路線)
3.2 整體框架
設(shè)置為從登陸界面進(jìn)入,可以從登陸界面中選擇打開注冊(cè)界面完成注冊(cè),還可以選擇身份,完成登陸操作,進(jìn)入用戶界面、售票員界面以及管理員界面。其中管理員界面可以打開匯總界面,查看銷售情況。對(duì)于用戶界面、售票員界面以及管理員界面,都是采取訪問應(yīng)答的方式獲取數(shù)據(jù)并完成數(shù)據(jù)整理展示到前端,而匯總界面,這是根據(jù)當(dāng)天的售票情況,獲取相應(yīng)數(shù)據(jù)并完成整理與展示。
3.3 前端開發(fā)
- 生成UI界面:安裝模塊pyqt5與其工具,使用qtDesigner工具,進(jìn)行對(duì)ui界面的繪制,完成對(duì)ui代碼生成的生成,非常方便
- 轉(zhuǎn)換.py代碼:通過pyqt5-tools的工具PyUic5,可以將ui代碼進(jìn)行轉(zhuǎn)換為python代碼
- 封裝完善:對(duì)于生成好的代碼,進(jìn)行再次封裝,進(jìn)行更改文本內(nèi)容,控件狀態(tài)等處理,同時(shí)連接信號(hào)與槽函數(shù)
- 繼承多態(tài):對(duì)封裝好的基本組件進(jìn)行繼承,并根據(jù)自身要求進(jìn)行修改,最后實(shí)現(xiàn)的具體功能應(yīng)用
- 界面整合:每個(gè)組件封裝好后,根據(jù)要求進(jìn)行界面整合,達(dá)到最后的開發(fā)目標(biāo)
示例:此處例舉車次信息查看窗口,該窗口由分頁器、搜索框以及信息展示三個(gè)組件進(jìn)行構(gòu)成。其中分頁器是直接通過ui生成代碼,再通過編譯器完成封裝,直接使用的。對(duì)于搜索框與信息展示欄,我們通過ui生成后,進(jìn)行父類封裝,再繼承父類內(nèi)容,完成多態(tài)封裝,在此形成符合火車信息查看的組件要求。再通過布局將各個(gè)組件組合起來。
3.4 圖表繪制
具體實(shí)現(xiàn)方法:
- 鼠標(biāo)獲取圖表詳細(xì)信息:利用pychart庫,建立一個(gè)自己的chart類,繼承pychart對(duì)應(yīng)的圖表,重寫mouseMovement()函數(shù)來獲取鼠標(biāo)在圖表上位置,將絕對(duì)位置換算成圖表坐標(biāo)軸的值,根據(jù)這個(gè)值來判斷鼠標(biāo)位置在圖表中的那個(gè)點(diǎn),顯示對(duì)應(yīng)的具體信息。
- 橫坐標(biāo)日期均分問題:橫坐標(biāo)為日期,如果設(shè)置的x軸分隔數(shù)不對(duì),就會(huì)造成橫坐標(biāo)與日期對(duì)不上問題。我們找到日期的最大整除數(shù),再設(shè)置x軸的分隔數(shù)即可,實(shí)現(xiàn)日期均分。
3.5 前后端交互
需求功能實(shí)現(xiàn)方式:首先在ui界面中查看是否數(shù)據(jù)非法或填寫信息不完全,其次應(yīng)用層從數(shù)據(jù)層獲取數(shù)據(jù)進(jìn)行處理,再與前端數(shù)據(jù)比較或交互等操作,最后完成業(yè)務(wù)功能。
在此進(jìn)行一個(gè)示例說明:在前端發(fā)送獲取報(bào)表信息的請(qǐng)求后,前端會(huì)對(duì)信息進(jìn)行檢查,如果正確會(huì)傳入到后端中,通過服務(wù)層進(jìn)行數(shù)據(jù)的計(jì)算處理與封裝,最后傳回給前端??赡茉谶^程中使用了工具系列的其他方法,當(dāng)發(fā)生錯(cuò)誤時(shí),將會(huì)對(duì)錯(cuò)誤信息進(jìn)行報(bào)錯(cuò)。
3.6 應(yīng)用層接口
應(yīng)用功能實(shí)現(xiàn)方式:從數(shù)據(jù)層中獲取對(duì)應(yīng)數(shù)據(jù),其次應(yīng)用層從數(shù)據(jù)層獲取數(shù)據(jù)進(jìn)行處理,對(duì)數(shù)據(jù)進(jìn)行計(jì)算統(tǒng)計(jì)與整理判斷數(shù)據(jù)生成是否成功,進(jìn)行相應(yīng)的提示,并傳輸生成后的數(shù)據(jù)。
具體示例為:在統(tǒng)計(jì)前五名的售票員銷量時(shí),首先在數(shù)據(jù)層獲取數(shù)據(jù)并進(jìn)行相應(yīng)的整理,在到應(yīng)用層中處理數(shù)據(jù),最后將數(shù)據(jù)返回,并提示對(duì)應(yīng)信息
3.7 數(shù)據(jù)庫編程
數(shù)據(jù)庫連接操作:此處使用了json
文件進(jìn)行配置,其中補(bǔ)充了關(guān)于數(shù)據(jù)庫連接的各種信息,具體代碼如下:
數(shù)據(jù)庫的接口整體框架:首先會(huì)判斷傳入?yún)?shù)的正確性,比如長度與非法字符等其次通過字符串拼接的方式,將mysql語句完成拼接,成后通過游標(biāo)進(jìn)行執(zhí)行如果成功則打印提示信息,如果失敗將會(huì)拋出異常,同時(shí)進(jìn)行數(shù)據(jù)庫的回滾操作。
四、成果展示(部分)
4.1 登錄界面
登錄界面ui圖
檢驗(yàn)填入信息合法性
權(quán)限不足提示
4.2 注冊(cè)界面
注冊(cè)u(píng)i截面圖
檢驗(yàn)填入信息合法性
注冊(cè)成功提醒
注冊(cè)失敗提醒
顯示按鈕實(shí)現(xiàn)
4.3 車次信息展示界面(與其他信息展示界面基本一致)
車次信息界面首頁
搜索車次
搜索車次失敗提示
搜索路線
搜索路線失敗提示
查看按鈕功能展示
修改操作與確認(rèn)操作
修改成功提示
刷新界面展示
刪除功能展示
刪除成功提示
刪除后進(jìn)行查詢
分頁查詢上一頁
分頁查詢下一頁
分頁查詢首頁查詢
分頁查詢尾頁查詢
分頁查詢?nèi)我忭摬樵?/strong>
4.4 營收?qǐng)?bào)表界面
營收?qǐng)?bào)表數(shù)據(jù)統(tǒng)計(jì)(按日)
營收?qǐng)?bào)表數(shù)據(jù)統(tǒng)計(jì)(按月)
4.5 售票員業(yè)績界面
售票員(用戶)界面
用戶界面與其類似,只是沒有退票功能,今日賬單變成歷史賬單
五、系統(tǒng)使用及測(cè)試用例(重要)
使用提示
在分享的可執(zhí)行文件中是無法正常打開的,因?yàn)閷?duì)于數(shù)據(jù)庫的配置我們進(jìn)行了修改,需要各位在壓縮包中解壓各個(gè)數(shù)據(jù)庫腳本,建立數(shù)據(jù)庫dbhomework_12307
,并插入各種數(shù)據(jù)庫腳本,具體可參考詳細(xì)講解Mysql Workbench 的數(shù)據(jù)導(dǎo)入和導(dǎo)出兩種方式,過程如下:
而可執(zhí)行文件的使用過程如下:打開可文件下的可執(zhí)行文件下的目錄,可以查看為mainfun文件。點(diǎn)擊打開后,運(yùn)行其中的可執(zhí)行程序mainfun.exe即可使用該系統(tǒng)。
如果需要運(yùn)行源代碼,也是需要對(duì)代碼中的json文件進(jìn)行相應(yīng)的配置的,配置內(nèi)容和可執(zhí)行文件使用的json文件內(nèi)容一致。
登錄范例信息
管理員范例——禹亨
手機(jī)號(hào)碼:13329841132
密碼:ehtdi1
售票員范例——壽荷
手機(jī)號(hào)碼:13890172838
密碼:AQwvbB
用戶范例——曾莎
手機(jī)號(hào)碼:13578881547
密碼:u98mWt
六、心得體會(huì)
6.1 小組協(xié)同
本次作業(yè)采取了小組合作的形式,體驗(yàn)了團(tuán)隊(duì)合作的力量。在效率上各位成員都認(rèn)真負(fù)責(zé),按時(shí)按量的完成任務(wù),在配合上使用了gitee語雀等軟件進(jìn)行合作,效率得到大大提升。同樣采取前后端分離的策略,使得分工明確任務(wù)具體。
在本次作業(yè)中,還git使用上有了更新的認(rèn)識(shí),在以往學(xué)習(xí)的過程中,只會(huì)使用到commit push pull等基本操作,而如今對(duì)git的使用有更豐富的理解,比如分支的切換與合并,沖突解決等,以及對(duì)分支的定義與分類操作。在如今的集成開發(fā)環(huán)境中,對(duì)git的插件嵌入做的非常完整,此次也是首次使用pycharm的git 插件,在開始使用的不太習(xí)慣,到后續(xù)逐漸適應(yīng)。
6.2 數(shù)據(jù)庫設(shè)計(jì)
將課堂上的理論知識(shí)轉(zhuǎn)換為了實(shí)際操作,在學(xué)習(xí)過的分析步驟(需求分析、概念結(jié)構(gòu)、邏輯結(jié)構(gòu)),轉(zhuǎn)換為了實(shí)際應(yīng)用,并完成了對(duì)象的建立和實(shí)現(xiàn)。
此次數(shù)據(jù)庫的嵌入式編程有了較大的提升,與以往只會(huì)書寫簡單的sql語句,與單一不健壯的語句實(shí)現(xiàn)方法,在此次作業(yè)中建立了嚴(yán)謹(jǐn)?shù)膕ql語句書寫框架,進(jìn)行了對(duì)語句方法的報(bào)錯(cuò)封裝、錯(cuò)誤回滾等內(nèi)。更細(xì)致的體現(xiàn)了數(shù)據(jù)庫嵌入式編程的要求。不僅如此,還學(xué)習(xí)了許多關(guān)于數(shù)據(jù)庫腳本的運(yùn)用,完成了數(shù)據(jù)的許多插入操作。
當(dāng)然我們也遇到了部分問題,在數(shù)據(jù)庫設(shè)計(jì)方面,小組在初始時(shí)只考慮到了管理端的各種信息,而忽略了對(duì)于售票窗口和管理窗口的實(shí)體設(shè)計(jì),因此在最初的考慮分析過程中忽略了這一部分,到管理層的內(nèi)容完成后,對(duì)其他板塊進(jìn)行開發(fā),才發(fā)現(xiàn)該問題,最后對(duì)其進(jìn)行了修改。
6.3 框架設(shè)計(jì)
在框架的搭建過程中,對(duì)軟件的初次認(rèn)識(shí)并不到位,其中開始只是設(shè)置了前端ui界面和后端數(shù)據(jù)庫調(diào)用層次,如此進(jìn)行項(xiàng)目實(shí)現(xiàn),對(duì)于業(yè)務(wù)實(shí)現(xiàn)的封裝非常復(fù)雜,因此在此之間添加了應(yīng)用層,專門封裝業(yè)務(wù)邏輯的方法,使結(jié)構(gòu)更清晰。其中還貫穿了個(gè)工具類,其中包含了各種工具,方便開發(fā)這的使用。
在軟件設(shè)計(jì)之初,我們對(duì)前端后端只是進(jìn)行了分層處理,但是直接調(diào)用后端接口,會(huì)使得在前端使用業(yè)務(wù)層應(yīng)用代碼時(shí),代碼復(fù)雜。為此我們小組進(jìn)行了修改,增添了業(yè)務(wù)層DBService,直接連接數(shù)據(jù)庫函數(shù)封裝業(yè)務(wù)層代碼,便于前端直接調(diào)用。文章來源:http://www.zghlxwxcb.cn/news/detail-478555.html
補(bǔ)充:文章來源地址http://www.zghlxwxcb.cn/news/detail-478555.html
- 代碼將會(huì)放到:火車售票管理系統(tǒng) ,歡迎查看!
- 下載鏈接:火車售票管理系統(tǒng)
- 歡迎各位點(diǎn)贊、評(píng)論、收藏與關(guān)注,大家的支持是我更新的動(dòng)力,我會(huì)繼續(xù)不斷地分享更多的知識(shí)!
到了這里,關(guān)于【課程設(shè)計(jì)】數(shù)據(jù)庫:火車票管理系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!