一種車輛管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
隨著社會(huì)的進(jìn)步和科技的發(fā)展,人們對(duì)安全防范的需求越來(lái)越迫切。對(duì)進(jìn)出公司或單位的車輛實(shí)行自動(dòng)跟蹤管理就是其中的一項(xiàng)需求。車輛出入自動(dòng)跟蹤識(shí)別管理系統(tǒng)正是為滿足用戶這一日益增長(zhǎng)的需求而開(kāi)發(fā)的現(xiàn)代化的智能管理系統(tǒng)。該系統(tǒng)是在Smartkey的自動(dòng)控制技術(shù)基礎(chǔ)上發(fā)展起來(lái)的,集世界上最先進(jìn)的遠(yuǎn)距離讀卡技術(shù)、計(jì)算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)和機(jī)電一體化技術(shù)于一身的高科技產(chǎn)品,從而達(dá)到合法車輛自由進(jìn)出、非法車輛進(jìn)行管制的目的。該系統(tǒng)具有很好的開(kāi)放性,易于與其它系統(tǒng)組成更強(qiáng)大的綜合性智能化管理系統(tǒng)。
本文介紹的車輛管理系統(tǒng)就是針對(duì)當(dāng)前本公司使用和管理車輛的流程而量身定做的一個(gè)系統(tǒng)。其設(shè)計(jì)方案是以B/S結(jié)構(gòu)為基礎(chǔ),運(yùn)用ASP.NET2.0和Access數(shù)據(jù)庫(kù),充分利用VS2005提供的數(shù)據(jù)控件。采用這種方案可以花最少的人力、物力、財(cái)力,在最短的時(shí)間、以最優(yōu)的方式來(lái)實(shí)現(xiàn)最終的功能。
1 ASP.NET2.0介紹
ASP.NET2.0 (ASP:Active Server Page) 是微軟的。NET框架更新版本。NET2.0中的一部分,是一種重要的,流行的動(dòng)態(tài)WEB開(kāi)發(fā)技術(shù)。使用ASP.NET 2.0進(jìn)行開(kāi)發(fā),最常用的,也是最方便的,最重要的工具,莫過(guò)于微軟自身提供的Visual STudio 了,最新版本為Visual Studio 2010,但是2008及2005版本仍然有很多公司及開(kāi)發(fā)人員在使用。使用這種IDE的最大好處就是方便,大大的提高了生產(chǎn)效率。當(dāng)然僅僅使用NOte PAD也可以編出像樣的東西來(lái),但是應(yīng)該沒(méi)有開(kāi)發(fā)人員使用那種簡(jiǎn)單低效的方法進(jìn)行開(kāi)發(fā)。
ASP.NET2.0應(yīng)用程序由界面和程序代碼兩大部分構(gòu)成:
(1)界面部分,也可稱為"可視化組件"(Visual CompONent),主要由HTML標(biāo)記和控件標(biāo)記構(gòu)成,從<html>標(biāo)記開(kāi)始,至</html>結(jié)束。這部分主要用于定義頁(yè)面的外觀顯示特性和應(yīng)用程序所包含的控件標(biāo)識(shí)。它與Visual Basic或Delphi應(yīng)用程序的Windows窗體部分相當(dāng)。在"可視化組件"部分中也可以包含客戶端腳本程序(或VBScript腳本程序)。與以前HTML語(yǔ)言不同的是,由于ASP.NET2.0使用了Web服務(wù)器控件進(jìn)行界面設(shè)計(jì),所以ASP.NET2.0應(yīng)用程序的界面部分包含了控件標(biāo)記,例如<ASP:TextBox id="username"runat="server"/>,即為一個(gè)文本框控件標(biāo)記??丶?biāo)記看起來(lái)很像HTML語(yǔ)法,但與HTML語(yǔ)法又不完全相同。
(2)程序代碼部分,也可稱為"用戶接口邏輯"(User Interface Logic),由高級(jí)語(yǔ)言程序代碼組成,由腳本程序標(biāo)記<Script Language="高級(jí)語(yǔ)言名稱" runat="Server">和</Script>將程序包含起來(lái)。程序代碼的作用主要是進(jìn)行窗體和控件事件的處理。ASP.NET2.0支持多種高級(jí)語(yǔ)言程序代碼,包括Visual Basic.NET和C#等,所使用的高級(jí)語(yǔ)言名稱在<Script>標(biāo)記中指出。
ASP.NET2.0程序的后綴名是。ASPX.當(dāng)一個(gè)瀏覽器第一次請(qǐng)求一個(gè)ASPX文件時(shí),ASP.NET2.0頁(yè)面將被CLR編譯器編譯。此后,當(dāng)再有用戶訪問(wèn)此頁(yè)面時(shí),由于ASPX頁(yè)面已經(jīng)被編譯過(guò),所以CLR會(huì)直接執(zhí)行編譯過(guò)的代碼。這與ASP的情況完全不同。ASP只支持VBScript和這樣的解釋性腳本語(yǔ)言,所以ASP頁(yè)面是解釋執(zhí)行的:當(dāng)用戶發(fā)出請(qǐng)求后,無(wú)論是第幾次執(zhí)行,ASP頁(yè)面都將被動(dòng)態(tài)解釋執(zhí)行。而ASP.NET2.0支持可編譯的語(yǔ)言,包括VB.NET、C#、Jscript、。NET等。所以,ASP.NET2.0是一次編譯、多次執(zhí)行。
為了簡(jiǎn)化程序員的工作,ASPX頁(yè)面不需要手工編譯,而是在頁(yè)面被調(diào)用時(shí),由CLR自行決定是否編譯。一般來(lái)說(shuō),下面兩種情況下,ASPX會(huì)被重新編譯:
(1)ASP.NET2.0頁(yè)面第一次被瀏覽器請(qǐng)求;
(2)ASP.NET2.0程序被改寫。
由于ASPX頁(yè)面可以被編譯,所以ASPX頁(yè)面具有組件一樣的性能。這就使得ASPX頁(yè)面至少比同樣功能的ASP頁(yè)面快2倍以上。
2 系統(tǒng)角色的劃分
根據(jù)需求分析中各個(gè)不同角色的不同權(quán)限,該系統(tǒng)分為6種角色,每種角色分別享有不同的權(quán)限。這6種角色按照權(quán)限的大小從低到高依次為:
(1)普通用戶(普通員工)
權(quán)限:近途、長(zhǎng)途用車申請(qǐng);補(bǔ)單;轉(zhuǎn)單;查看歷史記錄。
(2)司機(jī)(專、兼職司機(jī))
權(quán)限:車輛信息、駕駛員信息錄入;車輛日常保養(yǎng)、故障維修、車輛保險(xiǎn)、年審和重大事故錄入;用車申請(qǐng)、補(bǔ)單、轉(zhuǎn)單。
(3)中級(jí)用戶(各部門主任)
權(quán)限:部門員工近途、長(zhǎng)途用車審批;部門用車查看;部門車輛保養(yǎng);用車申請(qǐng)、補(bǔ)單、轉(zhuǎn)單。
(4)特殊用戶(總經(jīng)理、副總經(jīng)理)
權(quán)限:公司派車單查看;車輛狀態(tài)、駕駛員狀態(tài)查看;車輛運(yùn)行按月統(tǒng)計(jì)、年度統(tǒng)計(jì);車輛日常保養(yǎng)信息查看等。
(5)高級(jí)用戶(總經(jīng)部主任)
權(quán)限:公司派車單審批、查看、查詢、取消派車;車輛狀態(tài)、駕駛員狀態(tài)查看;車輛運(yùn)行按月統(tǒng)計(jì)、年度統(tǒng)計(jì);車輛日常保養(yǎng)信息查看等。
6)管理員
權(quán)限:管理數(shù)據(jù)庫(kù)中的全部表信息;備份數(shù)據(jù)庫(kù);添加用戶。
不同級(jí)別的用戶擁有不同的權(quán)限,所以不同角色用戶登陸后進(jìn)入的主頁(yè)面也不同,除了管理員之外,高級(jí)用戶擁有相對(duì)較多的權(quán)利,圖1展示了高級(jí)用戶的主頁(yè)面。
3 數(shù)據(jù)庫(kù)設(shè)計(jì)
數(shù)據(jù)庫(kù)(Database)是按照數(shù)據(jù)結(jié)構(gòu)來(lái)組織、存儲(chǔ)和管理數(shù)據(jù)的倉(cāng)庫(kù),它產(chǎn)生于距今五十年前,隨著信息技術(shù)和市場(chǎng)的發(fā)展,特別是二十世紀(jì)九十年代以后,數(shù)據(jù)管理不再僅僅是存儲(chǔ)和管理數(shù)據(jù),而轉(zhuǎn)變成用戶所需要的各種數(shù)據(jù)管理的方式。數(shù)據(jù)庫(kù)有很多種類型,從最簡(jiǎn)單的存儲(chǔ)有各種數(shù)據(jù)的表格到能夠進(jìn)行海量數(shù)據(jù)存儲(chǔ)的大型數(shù)據(jù)庫(kù)系統(tǒng)都在各個(gè)方面得到了廣泛的應(yīng)用。
根據(jù)系統(tǒng)的需要。數(shù)據(jù)庫(kù)中共設(shè)計(jì)了14個(gè)表。它們分別是:用戶表、近途車輛使用表、長(zhǎng)途車輛使用表、駕駛員檔案表、車輛檔案表、車輛類型表、車輛保險(xiǎn)檔案表、車輛保險(xiǎn)類型表、車輛故障維修表、車輛故障維修明細(xì)表、車輛日常保養(yǎng)表、車輛日常保養(yǎng)明細(xì)表、車輛年審信息表、車輛重大事件表。圖2展示了這些表的關(guān)系。
4.1 系統(tǒng)的功能模塊
如果說(shuō)從縱向分析這個(gè)系統(tǒng)可以分為6種角色的話,從橫向來(lái)看,系統(tǒng)又可以劃分為多個(gè)功能模塊,如用車管理、車輛養(yǎng)護(hù)、車輛信息、統(tǒng)計(jì)報(bào)表、系統(tǒng)管理。這幾個(gè)功能模塊針對(duì)不同的角色分發(fā)不同的權(quán)限,如車輛養(yǎng)護(hù),中級(jí)用戶只能填寫和查看本部門的車輛,而高級(jí)用戶可以查看整個(gè)公司的車輛養(yǎng)護(hù)信息。
4.2 用車管理
用車管理指的是申請(qǐng)人填寫派車單,然后部門審核、總經(jīng)部審核,最后申請(qǐng)人還車填寫公里數(shù)和各種費(fèi)用完成單子的流轉(zhuǎn)。用車管理難點(diǎn)就是派車單的流轉(zhuǎn).
為了實(shí)現(xiàn)派車單的流轉(zhuǎn),本系統(tǒng)采取對(duì)數(shù)據(jù)庫(kù)表中關(guān)鍵字判斷的方式實(shí)現(xiàn)流程的控制,如一個(gè)長(zhǎng)途派車單;申請(qǐng)人填寫的內(nèi)容只是長(zhǎng)途車輛使用表中的部分字段;如果表中該記錄"部門審核結(jié)果"字段為空就說(shuō)明部門領(lǐng)導(dǎo)還沒(méi)有審核,這時(shí)如部門主任登陸就可以看到該派車單,然后需要對(duì)該派車單審批。審批完后,"部門審批人"和"部門審批結(jié)果"字段就不為空,但是因?yàn)榭偨?jīng)部還未審核,所以"總經(jīng)部審核結(jié)果"字段為空。根據(jù)這個(gè)判斷條件,可以顯示出總經(jīng)部要審核的派車單,總經(jīng)部主任登陸后可以看到該派車單,然后進(jìn)行審批,當(dāng)"部門審核結(jié)果"和"總經(jīng)部審核結(jié)果"都不為空時(shí),就說(shuō)明派車單審核流程已完成,接下來(lái)就需要申請(qǐng)人在用車后填寫公里數(shù)和費(fèi)用,這個(gè)派車單才算結(jié)束。
派車單流轉(zhuǎn)的過(guò)程中,還涉及車輛的狀態(tài)問(wèn)題,在該系統(tǒng)中,部門派車是用車者自己選擇部門的車輛出車;而總經(jīng)部派車是總經(jīng)部主任選擇公司的車輛出車。派車單的派車類型如果是部門派車,在申請(qǐng)人選擇本部門車輛的同時(shí),該車輛的狀態(tài)就由"空閑"變?yōu)?quot;出車",而總經(jīng)部派車是在總經(jīng)部主任分配了公司的某個(gè)車輛出車后該車輛的狀態(tài)才變?yōu)?quot;出車".車輛的狀態(tài)一旦變?yōu)?quot;出車"就不能再被派遣,只有在申請(qǐng)人還車時(shí)填寫了公里數(shù)和費(fèi)用后車輛的狀態(tài)才變?yōu)?quot;空閑".
4.3 車輛養(yǎng)護(hù)和車輛信息
這兩個(gè)模塊在邏輯功能上相對(duì)較簡(jiǎn)單,通過(guò)司機(jī)用戶進(jìn)入相應(yīng)的界面可以實(shí)現(xiàn)信息的錄入,特殊用戶、高級(jí)用戶可以對(duì)車輛信息和車輛養(yǎng)護(hù)情況了解和查看。
4.4 統(tǒng)計(jì)報(bào)表
統(tǒng)計(jì)報(bào)表分為按月統(tǒng)計(jì)和年度統(tǒng)計(jì)兩部分,它們的實(shí)現(xiàn)主要采用分為SQL語(yǔ)句中的SUM函數(shù)通過(guò)限定一定的時(shí)間范圍從而得出想要的結(jié)果。以下就是年度統(tǒng)計(jì)頁(yè)面中用到的SQL語(yǔ)句。
string YearSum="SELECT 車輛, 月份, sum(汽油費(fèi)合計(jì)) AS 總汽油費(fèi), sum(公里合計(jì)) AS 總公里數(shù)"
+ " FROM (select 車輛, month(出車時(shí)間) AS 月份, sum(汽油費(fèi)) AS 汽油費(fèi)合計(jì), sum(止公里數(shù)-起公里數(shù)) AS 公里合計(jì)"
+ " FROM CTCLSYB"
+ " WHERE 車輛=′" + DropDownList1.SelectedValue + "′and year(出車時(shí)間)=′"+DropDownList2.SelectedValue+"′"
+ "GROUP BY month(出車時(shí)間), 車輛"
+ "UNION select 車輛,month(出車時(shí)間) as 月份,sum(汽油費(fèi)) AS 汽油費(fèi)合計(jì), sum(止公里數(shù)-起公里數(shù)) AS 公里合計(jì)"
+ "FROM JTCLSYB"
+ "WHERE 車輛=′"+DropDownList1.SelectedValue+"′and year(出車時(shí)間)=′"+DropDownList2.SelectedValue+"′"
+ "group BY month(出車時(shí)間), 車輛) AS A"
+ "GROUP BY 月份, 車輛"); DataTable dt = DataLayer.Select("SELECT 車輛, 月份, sum(汽油費(fèi)合計(jì)) AS 總汽油費(fèi), sum(公里合計(jì)) AS 總公里數(shù)"
+ " FROM (SELECT 車輛, month(出車時(shí)間) AS 月份, sum(汽油費(fèi)) AS 汽油費(fèi)合計(jì), sum(止公里數(shù)-起公里數(shù)) AS 公里合計(jì)"
+ " FROM CTCLSYB"
+ " WHERE 車輛=′" + DropDownList1.SelectedValue + "′and year(出車時(shí)間)=′" + DropDownList2.SelectedValue + "′"
+ " GROUP BY month(出車時(shí)間), 車輛"
+ " UNION select 車輛, month(出車時(shí)間) as月份,sum(汽油費(fèi)) AS 汽油費(fèi)合計(jì), sum(止公里數(shù)-起公里數(shù)) AS 公里合計(jì)"
+ " FROM JTCLSYB"
+ " WHERE 車輛=′"+DropDownList1.SelectedValue + "′and year(出車時(shí)間)=′"+DropDownList2.SelectedValue+"'"
+ " group BY month(出車時(shí)間), 車輛) AS A"
+ " GROUP BY 月份, 車輛");
4.5 系統(tǒng)管理
系統(tǒng)管理主要負(fù)責(zé)對(duì)數(shù)據(jù)庫(kù)中所有表的管理,包括修改和刪除、增加用戶、備份和恢復(fù)數(shù)據(jù)庫(kù)等。
車輛管理系統(tǒng)目前已經(jīng)在公司使用,取得了良好的效果。B/S模式下,客戶端較簡(jiǎn)單,便于應(yīng)用程序的維護(hù);集中式的數(shù)據(jù)管理,使數(shù)據(jù)庫(kù)的維護(hù)更加方便,而且使得信息統(tǒng)計(jì)更為全面準(zhǔn)確。