火車(chē)票管理系統(tǒng) 數(shù)據(jù)庫(kù)課設(shè) 集美大學(xué)_第1頁(yè)
火車(chē)票管理系統(tǒng) 數(shù)據(jù)庫(kù)課設(shè) 集美大學(xué)_第2頁(yè)
火車(chē)票管理系統(tǒng) 數(shù)據(jù)庫(kù)課設(shè) 集美大學(xué)_第3頁(yè)
火車(chē)票管理系統(tǒng) 數(shù)據(jù)庫(kù)課設(shè) 集美大學(xué)_第4頁(yè)
火車(chē)票管理系統(tǒng) 數(shù)據(jù)庫(kù)課設(shè) 集美大學(xué)_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

數(shù)據(jù)庫(kù)原理課程設(shè)計(jì)評(píng)語(yǔ):學(xué)院班級(jí)姓名學(xué)號(hào)成績(jī)指導(dǎo)老師2013年01月10日目錄TOC\o"1-2"\h\z\u第一章引言 31.1課題研究背景與意義 31.2本課題研究?jī)?nèi)容與目標(biāo) 31.3開(kāi)發(fā)環(huán)境 31.4體系結(jié)構(gòu)設(shè)計(jì) 3第二章需求分析 42.1信息要求 42.2處理要求. 52.3數(shù)據(jù)字典. 52.4安全性和完整性要求. 7第三章概念結(jié)構(gòu)設(shè)計(jì) 83總ER圖 8第四章邏輯結(jié)構(gòu)設(shè)計(jì) 94.1關(guān)系模型 94.2數(shù)據(jù)模型優(yōu)化 154.3視圖設(shè)計(jì) 17第五章數(shù)據(jù)庫(kù)的實(shí)施和維護(hù) 185.1存儲(chǔ)過(guò)程設(shè)計(jì) 185.2觸發(fā)器設(shè)計(jì) 225.3模塊設(shè)計(jì) 30結(jié)論 35參考文獻(xiàn) 36PAGEPAGE37引言課題研究背景與意義中國(guó)的領(lǐng)土面積約960萬(wàn)平方公里,居世界前列。隨著經(jīng)濟(jì)的發(fā)展,各地人民的溝通交流也與之劇增,領(lǐng)土之大也給人民的出行帶來(lái)了社會(huì)性的難題。中國(guó)鐵路四通八達(dá),一直以來(lái)中國(guó)鐵路以安全、穩(wěn)定、快速和較為便宜的票價(jià),吸引了占世界三分之一的人口乘坐。隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,用信息技術(shù)改造傳統(tǒng)行業(yè),是國(guó)家實(shí)現(xiàn)鐵路現(xiàn)代化戰(zhàn)略任務(wù)的迫切要求。鐵路信息化是鐵路信息化的重要標(biāo)志,將信息技術(shù)運(yùn)用到鐵路生產(chǎn)經(jīng)營(yíng)與各項(xiàng)管理決策中,提高市場(chǎng)競(jìng)爭(zhēng)力和經(jīng)濟(jì)效益,所以,開(kāi)發(fā)出火車(chē)站售票管理系統(tǒng)就顯得尤為重要了。本系統(tǒng)的主要作用是管理車(chē)票信息,還可以實(shí)現(xiàn)購(gòu)票,退票,換票讓乘客及時(shí)了解售票的情況,及時(shí)買(mǎi)票;以保證售票工作能更順暢的運(yùn)行;車(chē)票信息和乘車(chē)向的統(tǒng)計(jì)分析,以便火車(chē)站能更好的調(diào)度車(chē)次,以便滿(mǎn)足乘客出行要求。這就要求軟件的設(shè)計(jì)要結(jié)合具體實(shí)際,從而為車(chē)站管理服務(wù),提高運(yùn)行效率。為此,我們進(jìn)行了專(zhuān)門(mén)調(diào)查,搜集了大量的資料,制定了詳盡的需求分析與系統(tǒng)設(shè)計(jì)。本系統(tǒng)可以很好地幫助鐵路部門(mén)提高工作效率,進(jìn)一步提高工作效益和鐵路現(xiàn)代化水平,具有很高的開(kāi)發(fā)價(jià)值和使用價(jià)值。本課題研究?jī)?nèi)容與目標(biāo)1.2.1研究?jī)?nèi)容本系統(tǒng)主要是實(shí)現(xiàn)火車(chē)站的售票管理與統(tǒng)計(jì),從而提高售票效率。使用本系統(tǒng),可以有效地管理和統(tǒng)計(jì)車(chē)票的基本信息和各類(lèi)車(chē)站相關(guān)信息,包括:車(chē)票基本信息、車(chē)站基本信息、車(chē)次信息、人員管理等,完成這些信息的增加、刪除、修改、查詢(xún)統(tǒng)計(jì)功能。銷(xiāo)售管理(自動(dòng)生成車(chē)票編號(hào)、車(chē)票信息的增加、查詢(xún)和統(tǒng)計(jì))退票管理(車(chē)票的退票操作、車(chē)票信息的對(duì)應(yīng)修改)換票管理(顧客車(chē)票信息的修改、車(chē)票信息的修改)查詢(xún)管理(車(chē)次查詢(xún)、時(shí)刻表查詢(xún)、價(jià)格查詢(xún)、售票情況查詢(xún))調(diào)度管理(運(yùn)價(jià)修改,車(chē)票數(shù)量修改)用戶(hù)管理(用戶(hù)權(quán)限的分配、登錄名與密碼的設(shè)置)1.2.2研究目標(biāo)分權(quán)限管理,滿(mǎn)足不同用戶(hù)的需求。各類(lèi)信息及時(shí)發(fā)布,便于調(diào)度車(chē)輛,提高效率。開(kāi)發(fā)環(huán)境操作系統(tǒng)為WindowsxpWindows7。數(shù)據(jù)庫(kù)管理系統(tǒng)為SQLServer2005標(biāo)準(zhǔn)版或企業(yè)版。體系結(jié)構(gòu)設(shè)計(jì)本次課程設(shè)計(jì)的課題為火車(chē)售票管理系統(tǒng),只采用了數(shù)據(jù)庫(kù)后臺(tái)設(shè)計(jì)。實(shí)現(xiàn)了銷(xiāo)售管理,退票管理,換票管理,查詢(xún)管理,調(diào)度管理,用戶(hù)管理等功能。表與表之間數(shù)據(jù)的影響采用觸發(fā)器控制。管理員給相應(yīng)的角色賦相應(yīng)權(quán)限,將用戶(hù)添加到角色中來(lái),每個(gè)用戶(hù)擁有自己獨(dú)立的登錄名及相應(yīng)的密碼。使用戶(hù)擁有一定的查詢(xún)修改插入功能,在增刪改查等操作里使用了存儲(chǔ)過(guò)程。需求分析2.1信息要求2.2處理要求2.3數(shù)據(jù)字典1、數(shù)據(jù)項(xiàng)售票員信息表:sale描述列名數(shù)據(jù)類(lèi)型備注:?jiǎn)T工編號(hào)(登錄名)Sal_noVarchar(20)PK姓名Sal_nameVarchar(20)可為空登陸密碼Sal_passVarchar(20)不可為空顧客信息表:customer描述列名數(shù)據(jù)類(lèi)型備注:身份證號(hào)碼Cus_idChar(18)PK姓名Cus_nameVarchar(20)不可為空電話(huà)號(hào)碼Cus_telChar(11)11或8位數(shù)字,可為空上車(chē)日期Cus_datedatetime不可為空上車(chē)時(shí)間Cus_hInt不可為空起點(diǎn)站Cus_staVarchar(20)不可為空終點(diǎn)站Cus_endVarchar(20)不可為空坐臥鋪Cus_wzChar(10)臥鋪或坐鋪,不可為空員工編號(hào)Cus_snoVarchar(20)FK車(chē)票信息表:ticket描述列名數(shù)據(jù)類(lèi)型備注:編號(hào)Tic_noIntPK,從1開(kāi)始自動(dòng)增長(zhǎng)1車(chē)次編號(hào)Tic_cnoVarchar(20)FK發(fā)車(chē)日期Tic_dateDatetimeFK車(chē)票數(shù)量Tic_setInt可為空顧客身份證號(hào)碼Tic_idChar(18)FK,17位數(shù)字+1位數(shù)字或x坐臥鋪Tic_wzChar(10)可為空車(chē)次信息表:price描述列名數(shù)據(jù)類(lèi)型備注:車(chē)次編號(hào)Pr_cnoVarchar(20)PK起點(diǎn)站Pr_staVarchar(20)可為空終點(diǎn)站Pr_endVarchar(20)可為空票價(jià)Pr_valueMoney可為空發(fā)車(chē)日期Pr_dateDatetimePK發(fā)車(chē)時(shí)間Pr_h1Int不可為空到站時(shí)間Pr_h2Int不可為空臥鋪數(shù)量Prw_numInt可為空坐鋪數(shù)量Prz_numInt可為空退票信息表:refund描述列名數(shù)據(jù)類(lèi)型備注:車(chē)票編號(hào)Ref_noIntPK車(chē)次編號(hào)Ref_ticnoVarchar(20)可為空顧客身份證號(hào)碼Ref_idChar18)可為空顧客姓名Ref_nameVarchar(20)可為空票價(jià)Ref_valueMoney可為空應(yīng)退款Ref_moneyMoney可為空數(shù)據(jù)暫存表:data描述列名數(shù)據(jù)類(lèi)型備注:車(chē)次編號(hào)Data_cnoVarchar(20)PK顧客身份證號(hào)碼Data_idChar18)可為空票價(jià)Data_moneyMoney可為空2、數(shù)據(jù)結(jié)構(gòu)1.sale,定義了售票員的主要信息組成:sale(sal_no,sal_name,sal_pass)2.customer,購(gòu)票顧客的主要信息customer(cus_id,cus_name,cus_tel,cus_date,cus_h,cus_sta,cus_end,cus_wz,cus_sno)3.ticket,車(chē)票的主要信息ticket(tic_no,tic_id,tic_cno,tic_date,tic_set,tic_wz)4.price,車(chē)次和運(yùn)價(jià)的主要信息price(pr_cno,pr_date,pr_sta,pr_end,pr_h1,pr_h2,pr_value,prw_num,prz_num)5.refund,退票的相關(guān)信息refund(ref_no,ref_ticno,ref_id,ref_name,ref_value,ref_money)6.data,暫存數(shù)據(jù)的主要信息data(data_id,data_cno,data_money)3、數(shù)據(jù)流數(shù)據(jù)流名說(shuō)明數(shù)據(jù)流來(lái)源數(shù)據(jù)流去向添加添加售票員信息管理員S修改修改車(chē)次信息管理員Price添加添加顧客信息SCustomer查詢(xún)查詢(xún)基本信息S火車(chē)票信息表售票插入顧客信息,售票S車(chē)票信息添加添加售出的車(chē)票信息STicket修改修改已購(gòu)買(mǎi)的車(chē)票信息CustomerTicket退票換票對(duì)已購(gòu)買(mǎi)車(chē)票進(jìn)行修改退訂CustomerS添加添加退票信息Customer退票信息4、數(shù)據(jù)存儲(chǔ)1.sale:售票員信息表,用來(lái)存儲(chǔ)各個(gè)售票員地基本信息,包括數(shù)據(jù)對(duì)象sal_no,sal_name,sal_pass2.customer,顧客信息表。購(gòu)票顧客的主要信息,用來(lái)存儲(chǔ)每個(gè)顧客的基本信息,確定其購(gòu)票信息,包括數(shù)據(jù)項(xiàng)cus_id,cus_name,cus_tel,cus_date,cus_h,cus_sta,cus_end,cus_wz,cus_sno3.ticket,車(chē)票表。車(chē)票的主要信息,包括數(shù)據(jù)項(xiàng)tic_no,tic_id,tic_cno,tic_date,tic_set,tic_wz4.price,車(chē)次表。車(chē)次和運(yùn)價(jià)的主要信息,包括數(shù)據(jù)項(xiàng)pr_cno,pr_date,pr_sta,pr_end,pr_h1,pr_h2,pr_value,prw_num,prz_num)5.refund,退票表。退票的相關(guān)信息,包括數(shù)據(jù)項(xiàng):ref_no,ref_ticno,ref_id,ref_name,ref_value,ref_money,6.data,數(shù)據(jù)暫存表。暫存數(shù)據(jù)的主要信息data_id,data_cno,data_money2.4安全性和完整性要求該系統(tǒng)具有較為安全的性能,每次用戶(hù)要求進(jìn)入系統(tǒng)時(shí),由系統(tǒng)進(jìn)行核對(duì),通過(guò)鑒定后才能提供機(jī)器使用權(quán)。用一個(gè)用戶(hù)名來(lái)標(biāo)明用戶(hù)身份,系統(tǒng)內(nèi)部記錄著所有合法用戶(hù)的標(biāo)識(shí),系統(tǒng)鑒別是否是合法用戶(hù),鑒定通過(guò)之后方能進(jìn)行下一步核實(shí),即用戶(hù)輸入口令。 對(duì)角色進(jìn)行授權(quán),然后將用戶(hù)加進(jìn)角色,使其擁有改角色所擁有的權(quán)限。通過(guò)授權(quán)管理,使得用戶(hù)只能對(duì)數(shù)據(jù)庫(kù)擁有部分操作的功能,防止對(duì)數(shù)據(jù)庫(kù)的破壞。通過(guò)定義視圖,把數(shù)據(jù)對(duì)象限制在一定的范圍內(nèi),即通過(guò)視圖機(jī)制將保密的數(shù)據(jù)對(duì)無(wú)權(quán)存取的用戶(hù)隱藏起來(lái),從而自動(dòng)地對(duì)數(shù)據(jù)提供一定程度的安全保護(hù)。該系統(tǒng)整體把握防止了數(shù)據(jù)庫(kù)中存在不正確的數(shù)據(jù),使得數(shù)據(jù)具有一定的正確性,相容性和有效性。該系統(tǒng)對(duì)每個(gè)表都設(shè)置了主鍵,保證了數(shù)據(jù)的唯一性,保證了主鍵的屬性不可為空,從而保證了實(shí)體完整性。該系統(tǒng)對(duì)于將兩個(gè)表中的相應(yīng)元素聯(lián)系起來(lái)了,在對(duì)參照表和被參照表進(jìn)行增刪改時(shí),采用了觸發(fā)器,使得對(duì)另外的表也做出了正確的操作,從而保證了參照完整性。對(duì)于個(gè)別屬性,對(duì)其定義了非空,check等約束。盡量保證用戶(hù)定義完整性。概念結(jié)構(gòu)設(shè)計(jì)總ER圖邏輯結(jié)構(gòu)設(shè)計(jì)4.1關(guān)系模型Customer:USE[dbs_keshe_gai]GO/******對(duì)象:Table[dbo].[Customer]腳本日期:01/10/201321:22:14******/SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOSETANSI_PADDINGONGOCREATETABLE[dbo].[Customer]( [cus_id][char](18)NOTNULL, [cus_name][varchar](20)NOTNULL, [cus_tel][varchar](11)NULL, [cus_date][datetime]NOTNULL, [cus_h][int]NOTNULL, [cus_sta][varchar](20)NOTNULL, [cus_end][varchar](20)NOTNULL, [cus_wz][char](10)NOTNULL, [cus_sno][varchar](20)NULL,CONSTRAINT[pk_cus_id]PRIMARYKEYCLUSTERED( [cus_id]ASC)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY])ON[PRIMARY]GOSETANSI_PADDINGOFFGOALTERTABLE[dbo].[Customer]WITHCHECKADDCONSTRAINT[fk_cus]FOREIGNKEY([cus_sno])REFERENCES[dbo].[sale]([sal_no])GOALTERTABLE[dbo].[Customer]CHECKCONSTRAINT[fk_cus]GOALTERTABLE[dbo].[Customer]WITHCHECKADDCONSTRAINT[ck_wz]CHECK(([cus_wz]like'臥鋪'OR[cus_wz]like'坐鋪'))GOALTERTABLE[dbo].[Customer]CHECKCONSTRAINT[ck_wz]GOALTERTABLE[dbo].[Customer]WITHCHECKADDCONSTRAINT[ckc_tel]CHECK(([cus_tel]like'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'OR[cus_tel]like'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'OR[cus_tel]ISNULL))GOALTERTABLE[dbo].[Customer]CHECKCONSTRAINT[ckc_tel]Data:USE[dbs_keshe_gai]GO/******對(duì)象:Table[dbo].[data]腳本日期:01/10/201321:24:27******/SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOSETANSI_PADDINGONGOCREATETABLE[dbo].[data]( [data_cno][varchar](20)NULL, [data_id][char](18)NOTNULL, [data_money][money]NULL,CONSTRAINT[pk_data]PRIMARYKEYCLUSTERED( [data_id]ASC)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY])ON[PRIMARY]GOSETANSI_PADDINGOFFGOALTERTABLE[dbo].[data]WITHCHECKADDCONSTRAINT[cK_data_id]CHECK(([data_id]like'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9,x,X]'))GOALTERTABLE[dbo].[data]CHECKCONSTRAINT[cK_data_id]Price:USE[dbs_keshe_gai]GO/******對(duì)象:Table[dbo].[price]腳本日期:01/10/201321:26:39******/SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOSETANSI_PADDINGONGOCREATETABLE[dbo].[price]( [pr_cno][varchar](20)NOTNULL, [pr_sta][varchar](20)NULL, [pr_end][varchar](20)NULL, [pr_value][money]NULL, [pr_date][datetime]NOTNULL, [pr_h1][int]NOTNULL, [pr_h2][int]NOTNULL, [prw_num][int]NULL, [prz_num][int]NULL,CONSTRAINT[pk_price]PRIMARYKEYCLUSTERED( [pr_cno]ASC, [pr_date]ASC)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY])ON[PRIMARY]GOSETANSI_PADDINGOFFRefund:USE[dbs_keshe_gai]GO/******對(duì)象:Table[dbo].[refund]腳本日期:01/10/201321:27:04******/SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOSETANSI_PADDINGONGOCREATETABLE[dbo].[refund]( [ref_no][int]NOTNULL, [ref_ticno][varchar](20)NULL, [ref_id][char](18)NULL, [ref_name][varchar](20)NULL, [ref_value][money]NULL, [ref_money][money]NULL,CONSTRAINT[pk_refund]PRIMARYKEYCLUSTERED( [ref_no]ASC)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY])ON[PRIMARY]GOSETANSI_PADDINGOFFSale:USE[dbs_keshe_gai]GO/******對(duì)象:Table[dbo].[sale]腳本日期:01/10/201321:27:21******/SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOSETANSI_PADDINGONGOCREATETABLE[dbo].[sale]( [sal_no][varchar](20)NOTNULL, [sal_name][varchar](20)NULL, [sal_pass][varchar](20)NOTNULL,CONSTRAINT[pk_sale]PRIMARYKEYCLUSTERED( [sal_no]ASC)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY])ON[PRIMARY]GOSETANSI_PADDINGOFFTicket:USE[dbs_keshe_gai]GO/******對(duì)象:Table[dbo].[ticket]腳本日期:01/10/201321:27:48******/SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOSETANSI_PADDINGONGOCREATETABLE[dbo].[ticket]( [tic_no][int]IDENTITY(1,1)NOTNULL, [tic_cno][varchar](20)NULL, [tic_date][datetime]NULL, [tic_set][int]NULLDEFAULT((0)), [tic_wz][char](10)NULL, [tic_id][char](18)NULL,CONSTRAINT[pk_tic_no]PRIMARYKEYCLUSTERED( [tic_no]ASC)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY])ON[PRIMARY]GOSETANSI_PADDINGOFFGOALTERTABLE[dbo].[ticket]WITHCHECKADDCONSTRAINT[ck_tic]FOREIGNKEY([tic_cno],[tic_date])REFERENCES[dbo].[price]([pr_cno],[pr_date])GOALTERTABLE[dbo].[ticket]CHECKCONSTRAINT[ck_tic]GOALTERTABLE[dbo].[ticket]WITHCHECKADDCONSTRAINT[ck_tic1]FOREIGNKEY([tic_id])REFERENCES[dbo].[Customer]([cus_id])GOALTERTABLE[dbo].[ticket]CHECKCONSTRAINT[ck_tic1]4.2數(shù)據(jù)模型優(yōu)化1.sale(sal_no,sal_id,sal_name,sal_pass)該關(guān)系的函數(shù)依賴(lài)圖: 從函數(shù)依賴(lài)圖可以看出,該關(guān)系中不存在部分函數(shù)依賴(lài)、傳遞函數(shù)依賴(lài),且只有sal_no能夠確定其它各項(xiàng)。所以該關(guān)系是BCNF范式。2.customer(cus_id,cus_name,cus_tel,cus_date,cus_h,cus_sta,cus_end,cus_wz,cus_sno)該關(guān)系的函數(shù)依賴(lài)圖:從函數(shù)依賴(lài)圖可以看出,該關(guān)系中不存在部分函數(shù)依賴(lài)、傳遞函數(shù)依賴(lài),且只有cus_id能夠確定其它各項(xiàng)。所以該關(guān)系是BCNF范式。3.ticket(tic_no,tic_id,tic_cno,tic_date,tic_set,tic_wz)該關(guān)系的函數(shù)依賴(lài)圖:從函數(shù)依賴(lài)圖可以看出,該關(guān)系中不存在部分函數(shù)依賴(lài)、傳遞函數(shù)依賴(lài),且只有tic_no能夠確定其它各項(xiàng)。所以該關(guān)系是BCNF范式。4.price(pr_cno,pr_date,pr_sta,pr_end,pr_h1,pr_h2,pr_value,prw_num,prz_num)該關(guān)系的函數(shù)依賴(lài)圖:從函數(shù)依賴(lài)圖可以看出,該關(guān)系中不存在部分函數(shù)依賴(lài)、傳遞函數(shù)依賴(lài),且只有pr_cno和pr_date能夠確定其它各項(xiàng)。所以該關(guān)系是BCNF范式。5.refund(ref_no,ref_ticno,ref_id,ref_name,ref_value,ref_money)該關(guān)系的函數(shù)依賴(lài)圖:從函數(shù)依賴(lài)圖可以看出,該關(guān)系中不存在部分函數(shù)依賴(lài)、傳遞函數(shù)依賴(lài),且只有ref_no能夠確定其它各項(xiàng)。所以該關(guān)系是BCNF范式。6.data(data_id,data_cno,data_money)該關(guān)系的函數(shù)依賴(lài)圖:從函數(shù)依賴(lài)圖可以看出,該關(guān)系中不存在部分函數(shù)依賴(lài)、傳遞函數(shù)依賴(lài),且只有data_id能夠確定其它各項(xiàng)。所以該關(guān)系是BCNF范式。4.3視圖設(shè)計(jì)/*火車(chē)站售票管理系統(tǒng)車(chē)票信息視圖information(身份證號(hào),姓名,電話(huà)號(hào)碼,車(chē)次,作為,日期,時(shí)間,起點(diǎn),終點(diǎn),臥鋪或坐鋪,票價(jià),員工編號(hào))*/createviewinformationas selectdistinctcus_id身份證號(hào),cus_name姓名,cus_tel電話(huà)號(hào)碼,tic_cno車(chē)次,tic_set座位,cus_date日期,cus_h時(shí)間, cus_sta起點(diǎn),cus_end終點(diǎn),cus_wz臥鋪或坐鋪,data.data_money票價(jià),cus_sno員工編號(hào) fromcustomerc,tickett,pricep,data wherec.cus_id=t.tic_idandp.pr_cno=t.tic_cnoanddata.data_cno=t.tic_cnoanddata.data_id=t.tic_id數(shù)據(jù)庫(kù)的實(shí)施和維護(hù)5.1存儲(chǔ)過(guò)程設(shè)計(jì)1./*功能:向顧客表插入數(shù)據(jù),即購(gòu)票入口參數(shù):cus_id,cus_name,cus_tel,cus_date,cus_h,cus_sta,cus_end,cus_wz存儲(chǔ)過(guò)程名:proc_cus_in*/createprocproc_cus_in@idchar(18),@namevarchar(20),@telvarchar(11),@datedatetime,@hint,@stavarchar(20),@endvarchar(20),@wzchar(10)asbegindeclare@cus_snovarchar(20)select@cus_sno=user_name()insertintocustomervalues(@id,@name,@tel,@date,@h,@sta,@end,@wz,@cus_sno)end2./*功能:刪除顧客表中的數(shù)據(jù),即退票入口參數(shù):cus_id,cus_cno存儲(chǔ)過(guò)程名:proc_cus_de*/createprocproc_cus_de@idchar(18),@cnovarchar(20)asbegindeleteticketwheretic_id=@idandtic_cno=@cnodeletedatawheredata_id=@idanddata_cno=@cnoend3./*功能:更新顧客信息表,即顧客更改信息進(jìn)行換票入口參數(shù):cus_id,cus_date,cus_h,cus_sta,cus_end,cus_wz存儲(chǔ)過(guò)程名:proc_cus_up*/createprocproc_cus_up@idchar(18),@datedatetime,@hint,@stavarchar(20),@endvarchar(20),@wzchar(10)asbeginupdatecustomersetcus_date=@date,cus_h=@h,cus_sta=@sta,cus_end=@end,cus_wz=@wzwhere@id=cus_idend4./*功能:向車(chē)次表中插入數(shù)據(jù)參數(shù):pr_cno,pr_sta,pr_end,pr_value,pr_date,pr_h1,pr_h2,prw_num,prz_num存儲(chǔ)過(guò)程名:proc_pr_in*/createprocproc_pr_in@cnovarchar(20),@stavarchar(20),@endvarchar(20),@valuemoney,@datedatetime,@h1int,@h2int,@numwint,@numzintasinsertintopricevalues(@cno,@sta,@end,@value,@date,@h1,@h2,@numw,@numz)5./*功能:查看所有客戶(hù)的火車(chē)票信息入口參數(shù):無(wú)存儲(chǔ)過(guò)程名:火車(chē)票所有信息*/createproc火車(chē)票所有信息asselect*frominformation6./*功能:查看具體客戶(hù)的火車(chē)票信息入口參數(shù):身份證號(hào),姓名存儲(chǔ)過(guò)程名:火車(chē)票信息*/createproc火車(chē)票信息@idchar(18),@namevarchar(20)asbeginselect*frominformationwhere身份證號(hào)=@idand@name=姓名end7./*功能:查看所有車(chē)次運(yùn)價(jià)表的信息入口參數(shù):無(wú)存儲(chǔ)過(guò)程名:車(chē)次_運(yùn)價(jià)表*/createproc車(chē)次_運(yùn)價(jià)表asselect*fromprice8./*功能:查看具體車(chē)次入口參數(shù):pr_sta,pr_end存儲(chǔ)過(guò)程名:車(chē)次查詢(xún)*/createproc車(chē)次查詢(xún)@stavarchar(20),@endvarchar(20)asselect*frompricewhere@sta=pr_staand@end=pr_end9./*功能:查看具體車(chē)票價(jià)格入口參數(shù):pr_sta,pr_end,pr_wz存儲(chǔ)過(guò)程名:價(jià)格查詢(xún)*/createproc價(jià)格查詢(xún)@stavarchar(20),@endvarchar(20),@wzchar(10)asbegin declare@moneymoney if(@wz='臥鋪') begin select@money=pr_value+pr_value*0.2 fromprice where@sta=pr_staand@end=pr_end end elseif(@wz='坐鋪') begin select@money=pr_value fromprice where@sta=pr_staand@end=pr_end endselect@money火車(chē)票價(jià)格end10./*功能:查看退票表中所有信息入口參數(shù):無(wú)存儲(chǔ)過(guò)程名:退票表*/createproc退票表asselect*fromrefund11./*功能:查看具體某個(gè)顧客的退票信息以及應(yīng)退款金額入口參數(shù):ref_id,ref_name存儲(chǔ)過(guò)程名:退票表_用戶(hù)*/createproc退票表_用戶(hù)@idchar(20),@namevarchar(20)asbeginselect*fromrefundwhereref_id=@idandref_name=@nameselectref_money返還金額fromrefundwhereref_id=@idandref_name=@nameend存儲(chǔ)過(guò)程一覽表過(guò)程名功能入口參數(shù)權(quán)限proc_cus_in向顧客表插入數(shù)據(jù),即購(gòu)票cus_id,cus_name,cus_tel,cus_date,cus_h,cus_sta,cus_end,cus_wz角色role_sale中的所有用戶(hù)proc_cus_de刪除顧客表中的數(shù)據(jù),即退票cus_id,cus_cno角色role_sale中的所有用戶(hù)proc_cus_up更新顧客信息表,即顧客更改信息進(jìn)行換票cus_id,cus_date,cus_h,cus_sta,cus_end,cus_wz角色role_sale中的所有用戶(hù)proc_pr_in向車(chē)次表中插入數(shù)據(jù)pr_cno,pr_sta,pr_end,pr_value,pr_date,pr_h1,pr_h2,prw_num,prz_num管理員dbo火車(chē)票所有信息查看所有客戶(hù)的火車(chē)票信息無(wú)角色role_sale中的所有用戶(hù)火車(chē)票信息查看具體客戶(hù)的火車(chē)票信息身份證號(hào),姓名角色role_sale中的所有用戶(hù)車(chē)次_運(yùn)價(jià)表查看所有車(chē)次運(yùn)價(jià)表的信息無(wú)角色role_sale中的所有用戶(hù)車(chē)次查詢(xún)查看具體車(chē)次pr_sta,pr_end角色role_sale中的所有用戶(hù)查看具體車(chē)票價(jià)格查看具體車(chē)票價(jià)格pr_sta,pr_end,pr_wz角色role_sale中的所有用戶(hù)退票表查看退票表中所有信息無(wú)角色role_sale中的所有用戶(hù)退票表_用戶(hù)查看具體某個(gè)顧客的退票信息以及應(yīng)退款金額ref_id,ref_name角色role_sale中的所有用戶(hù)5.2觸發(fā)器設(shè)計(jì)1./*利用觸發(fā)器實(shí)現(xiàn)售票功能每次插入一個(gè)顧客信息之后,即在車(chē)票表ticket中插入一條信息在數(shù)據(jù)暫存表data中也插入一條信息并更改車(chē)次信息表中的數(shù)據(jù),即坐鋪和臥鋪剩余的車(chē)票數(shù)量*/IFEXISTS(SELECTNAMEFROMSYSOBJECTSWHERENAME='cus_insert') DROPTRIGGERcus_insert--如果該觸發(fā)器已存在,刪除該觸發(fā)器GO--插入顧客信息后--@id,@name,@tel,@date,@h,@sta,@end,@wzcreatetriggercus_insertonCustomerafterinsertasbegin declare@idvarchar(20),@datedatetime,@hint,@stavarchar(20),@endvarchar(20),@wzchar(10) select@id=cus_id,@date=cus_date,@h=cus_h,@date=cus_date,@sta=cus_sta,@end=cus_end,@wz=cus_wz frominserted 選中車(chē)次表中對(duì)應(yīng)的起點(diǎn)終點(diǎn)和時(shí)間 ifexists(select* fromprice where@sta=pr_staand@end=pr_endand@date=pr_dateand@h=pr_h1) begin declare@tcnovarchar(20),@setwint,@setzint,@moneymoney --選定車(chē)次 select@tcno=pr_cno,@money=pr_value fromprice where@sta=pr_staand@end=pr_endand@date=pr_dateand@h=pr_h1 車(chē)票表插入數(shù)據(jù) if(@wz='坐鋪') begin 更新運(yùn)價(jià)表中票剩余數(shù)量 if(selectmax(tic_set) fromticket where@tcno=tic_cnoandtic_wz='坐鋪')isnotnull begin select@setz=max(tic_set)+1 fromticket where@tcno=tic_cnoandtic_wz='坐鋪' end elseselect@setz=1 updateprice setprz_num=prz_num-1 where@tcno=pr_cnoand@date=pr_date insertintoticket(tic_cno,tic_date,tic_set,tic_wz,tic_id) values(@tcno,@date,@setz,@wz,@id) insertintodata(data_cno,data_id,data_money) values(@tcno,@id,@money) end if(@wz='臥鋪') begin if(selectmax(tic_set) fromticket where@tcno=tic_cnoandtic_wz='臥鋪')isnotnull begin select@setw=max(tic_set)+1 fromticket where@tcno=tic_cnoandtic_wz='臥鋪' end elseselect@setw=1 updateprice setprw_num=prw_num-1 where@tcno=pr_cnoand@date=pr_date insertintoticket(tic_cno,tic_date,tic_set,tic_wz,tic_id) values(@tcno,@date,@setw,@wz,@id) insertintodata(data_cno,data_id,data_money) values(@tcno,@id,@money+@money*0.2) end--@num剩余票數(shù) declare@numzint,@numwint select@numz=prz_num fromprice where@tcno=pr_cnoand@wz='坐鋪'and@date=pr_date select@numw=prw_num fromprice where@tcno=pr_cnoand@wz='臥鋪'and@date=pr_date if(@numz<0) begin print'沒(méi)票了!' rollback end if(@numw<0) begin print'沒(méi)票了!' rollback end end elsebeginprint'沒(méi)有符合要求的票'rollbackendend2./*利用觸發(fā)器實(shí)現(xiàn)退票功能要?jiǎng)h除客戶(hù)表customer中的數(shù)據(jù),要先刪除其從表即車(chē)票表ticket中的數(shù)據(jù)每次刪除一條記錄,customer中和data中的數(shù)據(jù)也隨之刪除一條同時(shí)更新車(chē)次表中的車(chē)票數(shù)量的數(shù)據(jù)*/IFEXISTS(SELECTNAMEFROMSYSOBJECTSWHERENAME='tic_delete') DROPTRIGGERtic_delete--如果該觸發(fā)器已存在,刪除該觸發(fā)器GO--插入顧客信息后--@id,@name,@tel,@date,@h,@sta,@end,@wzcreatetriggertic_deleteonticketafterdeleteasbegin --退票表中變量定義 declare@noint,@ticnovarchar(20),@ridchar(20),@rnamevarchar(20),@valuemoney,@moneymoney --客戶(hù)表變量定義 declare@tnoint,@tcnovarchar(20),@datedatetime,@twzchar(10),@tidchar(20) select@tno=tic_no,@tcno=tic_cno,@date=tic_date,@twz=tic_wz,@tid=tic_id fromdeleted ifexists(select* fromdata wheredata_id=@tid) begin declare@setwint,@setzint,@money1money --選定 select@value=data_money,@money=data_money-data_money*0.3 fromdata where@tid=data_id declare@namevarchar(20) select@name=cus_name fromcustomer wherecus_id=@tid insertintorefund values(@tno,@tcno,@tid,@name,@value,@money) if(@twz='坐鋪') begin updateprice setprz_num=prz_num+1 where@tcno=pr_cnoand@date=pr_date end if(@twz='臥鋪') begin updateprice setprw_num=prw_num+1 where@tcno=pr_cnoand@date=pr_date end deletefromcustomerwherecus_id=@tid end elsebeginprint'您沒(méi)有訂過(guò)該票'rollbackendend3./*利用存儲(chǔ)器實(shí)現(xiàn)換票功能每次更新一次顧客的信息后,同時(shí)更新ticket、data、price中的表其中,更新后,之前購(gòu)買(mǎi)的車(chē)票相當(dāng)于退訂,車(chē)次表中車(chē)票對(duì)應(yīng)坐臥鋪的數(shù)量增加更新后的車(chē)票,其對(duì)應(yīng)的車(chē)票信息ticket隨之更改,車(chē)次表中車(chē)票對(duì)應(yīng)坐臥鋪的數(shù)量減*/IFEXISTS(SELECTNAMEFROMSYSOBJECTSWHERENAME='cus_update') DROPTRIGGERcus_update--如果該觸發(fā)器已存在,刪除該觸發(fā)器GO--插入顧客信息后--@id,@name,@tel,@date,@h,@sta,@end,@wzcreatetriggercus_updateonCustomerafterupdateasbegindeclare@stavarchar(20),@endvarchar(20),@datedatetime,@hint,@wzchar(10),@idchar(20)declare@ostavarchar(20),@oendvarchar(20),@odatedatetime,@ohint,@owzchar(10),@oidchar(20)select@sta=cus_sta,@end=cus_end,@date=cus_date,@h=cus_h,@wz=cus_wz,@id=cus_idfrominsertedselect@osta=cus_sta,@oend=cus_end,@odate=cus_date,@oh=cus_h,@owz=cus_wz,@oid=cus_idfromdeleted 選中運(yùn)價(jià)表中對(duì)應(yīng)的起點(diǎn)終點(diǎn)和時(shí)間 ifexists(select* fromprice where@sta=pr_staand@end=pr_endand@date=pr_dateand@h=pr_h1) begin declare@tcnovarchar(20),@otcnovarchar(20),@setwint,@setzint,@moneymoney,@otnoint,@tnoin --選定車(chē)次 select@tcno=pr_cno,@money=pr_value fromprice where@sta=pr_staand@end=pr_endand@date=pr_dateand@h=pr_h1 select@otcno=pr_cno,@money=pr_value fromprice where@osta=pr_staand@oend=pr_endand@odate=pr_dateand@oh=pr_h1 車(chē)票表更新數(shù)據(jù) select@otno=tic_nofromticketwheretic_cno=@otcnoandtic_id=@oid select@tno=tic_nofromticketwheretic_cno=@tcnoandtic_id=@id if(@wz='坐鋪') begin if(selectmax(tic_set) fromticket where@tcno=tic_cnoandtic_wz='坐鋪')isnotnull begin select@setz=max(tic_set)+1 fromticket where@tcno=tic_cnoandtic_wz='坐鋪' end elseselect@setz=1 updateticket settic_cno=@tcno,tic_date=@date,tic_set=@setz,tic_wz=@wz wheretic_no=@otno updatedata setdata_cno=@tcno,data_money=@money wheredata_id=@id end if(@wz='臥鋪') begin if(selectmax(tic_set) fromticket where@tcno=tic_cnoandtic_wz='臥鋪')isnotnull begin select@setw=max(tic_set)+1 fromticket where@tcno=tic_cnoandtic_wz='臥鋪' end elseselect@setw=1 updateticket settic_cno=@tcno,tic_date=@date,tic_set=@setw,tic_wz=@wz wheretic_no=@otno updatedata setdata_cno=@tcno,data_money=@money+@money*0.2 wheredata_id=@id end 更新運(yùn)價(jià)表中票剩余數(shù)量 updateprice setprw_num=prw_num-1 where@tcno=pr_cnoand@wz='臥鋪'andpr_date=@date updateprice setprz_num=prz_num-1 where@tcno=pr_cnoand@wz='坐鋪'andpr_date=@date--@num剩余票數(shù) declare@numzint,@numwint select@numz=prz_num fromprice where@tcno=pr_cnoand@wz='坐鋪' select@numw=prw_num fromprice where@tcno=pr_cnoand@wz='臥鋪' if(@numz<0) begin print'沒(méi)票了!' rollback end if(@numw<0) begin print'沒(méi)票了!' rollback end if(@owz='坐鋪') begin updateprice setprz_num=prz_num+1 where@otcno=pr_cnoand@odate=pr_date end if(@owz='臥鋪') begin updateprice setprw_num=prw_num+1 where@otcno=pr_cnoand@odate=pr_date end end elsebeginprint'沒(méi)有符合要求的票'rollbackendend4.*利用觸發(fā)器實(shí)現(xiàn)添加售票員的功能每插入一條記錄,就為售票員創(chuàng)建一個(gè)登錄名,并添加至角色role_sale中該用戶(hù)擁有和角色role_sale一樣的權(quán)限*/IFEXISTS(SELECTNAMEFROMSYSOBJECTSWHERENAME='sale_insert') DROPTRIGGERsale_insert--如果該觸發(fā)器已存在,刪除該觸發(fā)器GOcreatetriggersale_insertonsalewithencryption --對(duì)CREATETRIGGER語(yǔ)句的文本進(jìn)行模糊處理。加密afterinsertas begin declare@namevarchar(20),@pwdvarchar(20),@strvarchar(1000) select@name=sal_no,@pwd=sal_passfrominserted --創(chuàng)建登錄用戶(hù)set@str='createlogin'+@name+'withpassword='''+@pwd+''''; exec(@str) --創(chuàng)建數(shù)據(jù)庫(kù)用戶(hù) set@str='createuser'+@name+'forlogin'+@name; exec(@str)--給數(shù)據(jù)庫(kù)用戶(hù)創(chuàng)建權(quán)限 execsp_addrolemember'role_sale',@name end觸發(fā)器一覽表觸發(fā)器名功能類(lèi)型作用表Cus_insert利用觸發(fā)器實(shí)現(xiàn)售票功能。每次插入一個(gè)顧客信息之后,即在車(chē)票表ticket中插入一條信息在數(shù)據(jù)暫存表data中也插入一條信息,插入成功后,車(chē)次表中對(duì)應(yīng)坐臥鋪的車(chē)票數(shù)量減1InsertCustomer(顧客信息表)Tic_delete利用觸發(fā)器實(shí)現(xiàn)退票功能。要?jiǎng)h除客戶(hù)表customer中的數(shù)據(jù),要先刪除其從表即車(chē)票表ticket中的數(shù)據(jù)。每次刪除一條記錄,customer中和data中的數(shù)據(jù)也隨之刪除一條。刪除成功后,車(chē)次表中對(duì)應(yīng)坐臥鋪的車(chē)票數(shù)量加1DeleteT

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論