基于A(yíng)SP.NET2.0的車(chē)輛管理系統設計與實(shí)現
隨著(zhù)公司的不斷發(fā)展和壯大,車(chē)輛使用頻率的增加,傳統的紙質(zhì)派車(chē)單暴露出越來(lái)越多的問(wèn)題,因此,利用信息化的手段,開(kāi)發(fā)一個(gè)適用于公司內部的車(chē)輛管理系統十分必要。
本文介紹的車(chē)輛管理系統就是針對當前本公司使用和管理車(chē)輛的流程而量身定做的一個(gè)系統。其設計方案是以B/S結構為基礎,運用ASP.NET2.0和Access數據庫,充分利用VS2005提供的數據控件。采用這種方案可以花最少的人力、物力、財力,在最短的時(shí)間、以最優(yōu)的方式來(lái)實(shí)現最終的功能。
1 ASP.NET2.0介紹
ASP.NET2.0是建立在微軟新一代.NET平臺架構上,利用普通語(yǔ)言運行時(shí)(Common Language Runtime)在服務(wù)器后端為用戶(hù)提供建立強大的企業(yè)級Web應用服務(wù)的編程框架。ASP.NET2.0主要包括WebForm和WebService兩種編程模型。前者為用戶(hù)提供建立功能強大、外觀(guān)豐富的基于表單的可編程Web頁(yè)面。后者通過(guò)對HTTP、HTML、SOAP、WSDL等Internet標準的支持,提供在異構網(wǎng)絡(luò )環(huán)境下獲取遠程服務(wù)、連接遠程設備和交互遠程應用的編程界面。
ASP.NET2.0應用程序由界面和程序代碼兩大部分構成:
(1)界面部分,也可稱(chēng)為“可視化組件”(Visual Component),主要由HTML標記和控件標記構成,從html>標記開(kāi)始,至/html>結束。這部分主要用于定義頁(yè)面的外觀(guān)顯示特性和應用程序所包含的控件標識。它與Visual Basic或Delphi應用程序的Windows窗體部分相當。在“可視化組件”部分中也可以包含客戶(hù)端腳本程序(JavaScript或VBScript腳本程序)。與以前HTML語(yǔ)言不同的是,由于A(yíng)SP.NET2.0使用了Web服務(wù)器控件進(jìn)行界面設計,所以ASP.NET2.0應用程序的界面部分包含了控件標記,例如ASP:TextBox id=”username”runat=”server”/>,即為一個(gè)文本框控件標記??丶擞浛雌饋?lái)很像HTML語(yǔ)法,但與HTML語(yǔ)法又不完全相同。
(2)程序代碼部分,也可稱(chēng)為“用戶(hù)接口邏輯”(User Interface Logic),由高級語(yǔ)言程序代碼組成,由腳本程序標記Script Language=“高級語(yǔ)言名稱(chēng)” runat=“Server”>和/Script>將程序包含起來(lái)。程序代碼的作用主要是進(jìn)行窗體和控件事件的處理。ASP.NET2.0支持多種高級語(yǔ)言程序代碼,包括Visual Basic.NET和C#等,所使用的高級語(yǔ)言名稱(chēng)在Script>標記中指出。
ASP.NET2.0程序的后綴名是.ASPX。當一個(gè)瀏覽器第一次請求一個(gè)ASPX文件時(shí),ASP.NET2.0頁(yè)面將被CLR編譯器編譯。此后,當再有用戶(hù)訪(fǎng)問(wèn)此頁(yè)面時(shí),由于A(yíng)SPX頁(yè)面已經(jīng)被編譯過(guò),所以CLR會(huì )直接執行編譯過(guò)的代碼。這與ASP的情況完全不同。ASP只支持VBScript和JavaScript這樣的解釋性腳本語(yǔ)言,所以ASP頁(yè)面是解釋執行的:當用戶(hù)發(fā)出請求后,無(wú)論是第幾次執行,ASP頁(yè)面都將被動(dòng)態(tài)解釋執行。而ASP.NET2.0支持可編譯的語(yǔ)言,包括VB.NET、C#、Jscript、.NET等。所以,ASP.NET2.0是一次編譯、多次執行。
為了簡(jiǎn)化程序員的工作,ASPX頁(yè)面不需要手工編譯,而是在頁(yè)面被調用時(shí),由CLR自行決定是否編譯。一般來(lái)說(shuō),下面兩種情況下,ASPX會(huì )被重新編譯:
(1)ASP.NET2.0頁(yè)面第一次被瀏覽器請求;
(2)ASP.NET2.0程序被改寫(xiě)。
由于A(yíng)SPX頁(yè)面可以被編譯,所以ASPX頁(yè)面具有組件一樣的性能。這就使得ASPX頁(yè)面至少比同樣功能的ASP頁(yè)面快2倍以上。
2 系統角色的劃分
根據需求分析中各個(gè)不同角色的不同權限,該系統分為6種角色,每種角色分別享有不同的權限。這6種角色按照權限的大小從低到高依次為:
(1)普通用戶(hù)(普通員工)
權限:近途、長(cháng)途用車(chē)申請;補單;轉單;查看歷史記錄。
(2)司機(專(zhuān)、兼職司機)
權限:車(chē)輛信息、駕駛員信息錄入;車(chē)輛日常保養、故障維修、車(chē)輛保險、年審和重大事故錄入;用車(chē)申請、補單、轉單。
(3)中級用戶(hù)(各部門(mén)主任)
權限:部門(mén)員工近途、長(cháng)途用車(chē)審批;部門(mén)用車(chē)查看;部門(mén)車(chē)輛保養;用車(chē)申請、補單、轉單。
(4)特殊用戶(hù)(總經(jīng)理、副總經(jīng)理)
權限:公司派車(chē)單查看;車(chē)輛狀態(tài)、駕駛員狀態(tài)查看;車(chē)輛運行按月統計、年度統計;車(chē)輛日常保養信息查看等。
(5)高級用戶(hù)(總經(jīng)部主任)
權限:公司派車(chē)單審批、查看、查詢(xún)、取消派車(chē);車(chē)輛狀態(tài)、駕駛員狀態(tài)查看;車(chē)輛運行按月統計、年度統計;車(chē)輛日常保養信息查看等。
(6)管理員
權限:管理數據庫中的全部表信息;備份數據庫;添加用戶(hù)。
不同級別的用戶(hù)擁有不同的權限,所以不同角色用戶(hù)登陸后進(jìn)入的主頁(yè)面也不同,除了管理員之外,高級用戶(hù)擁有相對較多的權利,圖1展示了高級用戶(hù)的主頁(yè)面。
3 數據庫設計
根據系統的需要。數據庫中共設計了14個(gè)表。它們分別是:用戶(hù)表、近途車(chē)輛使用表、長(cháng)途車(chē)輛使用表、駕駛員檔案表、車(chē)輛檔案表、車(chē)輛類(lèi)型表、車(chē)輛保險檔案表、車(chē)輛保險類(lèi)型表、車(chē)輛故障維修表、車(chē)輛故障維修明細表、車(chē)輛日常保養表、車(chē)輛日常保養明細表、車(chē)輛年審信息表、車(chē)輛重大事件表。圖2展示了這些表的關(guān)系。表1和表2是其中的兩個(gè)表的設計結構。
4 系統設計思路
4.1 系統的功能模塊
如果說(shuō)從縱向分析這個(gè)系統可以分為6種角色的話(huà),從橫向來(lái)看,系統又可以劃分為多個(gè)功能模塊,如用車(chē)管理、車(chē)輛養護、車(chē)輛信息、統計報表、系統管理。這幾個(gè)功能模塊針對不同的角色分發(fā)不同的權限,如車(chē)輛養護,中級用戶(hù)只能填寫(xiě)和查看本部門(mén)的車(chē)輛,而高級用戶(hù)可以查看整個(gè)公司的車(chē)輛養護信息。圖3展示了系統主要涉及的幾個(gè)功能模塊。
4.2 用車(chē)管理
用車(chē)管理指的是申請人填寫(xiě)派車(chē)單,然后部門(mén)審核、總經(jīng)部審核,最后申請人還車(chē)填寫(xiě)公里數和各種費用完成單子的流轉。用車(chē)管理難點(diǎn)就是派車(chē)單的流轉,派車(chē)單審批的流程如圖4所示。
為了實(shí)現派車(chē)單的流轉,本系統采取對數據庫表中關(guān)鍵字判斷的方式實(shí)現流程的控制,如一個(gè)長(cháng)途派車(chē)單;申請人填寫(xiě)的內容只是長(cháng)途車(chē)輛使用表中的部分字段;如果表中該記錄“部門(mén)審核結果”字段為空就說(shuō)明部門(mén)領(lǐng)導還沒(méi)有審核,這時(shí)如部門(mén)主任登陸就可以看到該派車(chē)單,然后需要對該派車(chē)單審批。審批完后,“部門(mén)審批人”和“部門(mén)審批結果”字段就不為空,但是因為總經(jīng)部還未審核,所以“總經(jīng)部審核結果”字段為空。根據這個(gè)判斷條件,可以顯示出總經(jīng)部要審核的派車(chē)單,總經(jīng)部主任登陸后可以看到該派車(chē)單,然后進(jìn)行審批,當“部門(mén)審核結果”和“總經(jīng)部審核結果”都不為空時(shí),就說(shuō)明派車(chē)單審核流程已完成,接下來(lái)就需要申請人在用車(chē)后填寫(xiě)公里數和費用,這個(gè)派車(chē)單才算結束。
派車(chē)單流轉的過(guò)程中,還涉及車(chē)輛的狀態(tài)問(wèn)題,在該系統中,部門(mén)派車(chē)是用車(chē)者自己選擇部門(mén)的車(chē)輛出車(chē);而總經(jīng)部派車(chē)是總經(jīng)部主任選擇公司的車(chē)輛出車(chē)。派車(chē)單的派車(chē)類(lèi)型如果是部門(mén)派車(chē),在申請人選擇本部門(mén)車(chē)輛的同時(shí),該車(chē)輛的狀態(tài)就由“空閑”變?yōu)?ldquo;出車(chē)”,而總經(jīng)部派車(chē)是在總經(jīng)部主任分配了公司的某個(gè)車(chē)輛出車(chē)后該車(chē)輛的狀態(tài)才變?yōu)?ldquo;出車(chē)”。車(chē)輛的狀態(tài)一旦變?yōu)?ldquo;出車(chē)”就不能再被派遣,只有在申請人還車(chē)時(shí)填寫(xiě)了公里數和費用后車(chē)輛的狀態(tài)才變?yōu)?ldquo;空閑”。
4.3 車(chē)輛養護和車(chē)輛信息
這兩個(gè)模塊在邏輯功能上相對較簡(jiǎn)單,通過(guò)司機用戶(hù)進(jìn)入相應的界面可以實(shí)現信息的錄入,特殊用戶(hù)、高級用戶(hù)可以對車(chē)輛信息和車(chē)輛養護情況了解和查看。
4.4 統計報表
統計報表分為按月統計和年度統計兩部分,它們的實(shí)現主要采用分為SQL語(yǔ)句中的SUM函數通過(guò)限定一定的時(shí)間范圍從而得出想要的結果。以下就是年度統計頁(yè)面中用到的SQL語(yǔ)句。
string YearSum=SELECT 車(chē)輛, 月份, sum(汽油費合計) AS 總汽油費, sum(公里合計) AS 總公里數
+ FROM (SELECT 車(chē)輛, month(出車(chē)時(shí)間) AS 月份, sum(汽油費) AS 汽油費合計, sum(止公里數-起公里數) AS 公里合計
+ FROM CTCLSYB
+ WHERE 車(chē)輛=′ + DropDownList1.SelectedValue + ′and year(出車(chē)時(shí)間)=′+DropDownList2.SelectedValue+′
+ GROUP BY month(出車(chē)時(shí)間), 車(chē)輛
+ UNION select 車(chē)輛,month(出車(chē)時(shí)間) as 月份,sum(汽油費) AS 汽油費合計, sum(止公里數-起公里數) AS 公里合計
+ FROM JTCLSYB
+ WHERE 車(chē)輛=′+DropDownList1.SelectedValue+′and year(出車(chē)時(shí)間)=′+DropDownList2.SelectedValue+′
+ group BY month(出車(chē)時(shí)間), 車(chē)輛) AS A
+ GROUP BY 月份, 車(chē)輛); DataTable dt = DataLayer.Select(SELECT 車(chē)輛, 月份, sum(汽油費合計) AS 總汽油費, sum(公里合計) AS 總公里數
+ FROM (SELECT 車(chē)輛, month(出車(chē)時(shí)間) AS 月份, sum(汽油費) AS 汽油費合計, sum(止公里數-起公里數) AS 公里合計
+ FROM CTCLSYB
+ WHERE 車(chē)輛=′ + DropDownList1.SelectedValue + ′and year(出車(chē)時(shí)間)=′ + DropDownList2.SelectedValue + ′
+ GROUP BY month(出車(chē)時(shí)間), 車(chē)輛
+ UNION select 車(chē)輛, month(出車(chē)時(shí)間) as月份,sum(汽油費) AS 汽油費合計, sum(止公里數-起公里數) AS 公里合計
+ FROM JTCLSYB
+ WHERE 車(chē)輛=′+DropDownList1.SelectedValue + ′and year(出車(chē)時(shí)間)=′+DropDownList2.SelectedValue+'
+ group BY month(出車(chē)時(shí)間), 車(chē)輛) AS A
+ GROUP BY 月份, 車(chē)輛);
4.5 系統管理
系統管理主要負責對數據庫中所有表的管理,包括修改和刪除、增加用戶(hù)、備份和恢復數據庫等。
車(chē)輛管理系統目前已經(jīng)在公司使用,取得了良好的效果。B/S模式下,客戶(hù)端較簡(jiǎn)單,便于應用程序的維護;集中式的數據管理,使數據庫的維護更加方便,而且使得信息統計更為全面準確。
評論