版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄TOC\o"1-2"\h\z\u1引言 11.1課題背景 11.2國(guó)內(nèi)外研究現(xiàn)狀 11.3本課題研究的意義 21.4本課題的研究方法 22可行性分析 22.1經(jīng)濟(jì)可行性 32.2技術(shù)可行性 32.3操作可行性 33需求分析 33.1目的 33.2任務(wù)概述 43.3數(shù)據(jù)描述 43.4功能描述 83.5性能需求 133.6其它要求 134概要設(shè)計(jì) 144.1總體設(shè)計(jì) 144.2三層架構(gòu)的實(shí)現(xiàn) 154.3運(yùn)行設(shè)計(jì) 164.4出錯(cuò)處理設(shè)計(jì) 164.5安全保密設(shè)計(jì) 164.6維護(hù)設(shè)計(jì) 165詳細(xì)設(shè)計(jì) 175.1用戶登錄模塊 175.2用戶注冊(cè)模塊 195.3個(gè)人信息管理模塊 205.4收發(fā)消息模塊 225.5用戶查找模塊 235.6好友管理模塊 245.7創(chuàng)建用戶群模塊 255.8收發(fā)群消息模塊 285.9用戶群管理模塊 286技術(shù)支持 296.1AJAX技術(shù) 29 306.3信息加密 317系統(tǒng)測(cè)試 337.1測(cè)試的目的 337.2軟件測(cè)試的意義 337.3軟件測(cè)試的內(nèi)容 347.4測(cè)試方法 347.5系統(tǒng)測(cè)試過(guò)程 357.6測(cè)試結(jié)果 36結(jié)論 37致謝 38參考文獻(xiàn) 391引言課題背景即時(shí)通信是一個(gè)終端連往一個(gè)即時(shí)通信網(wǎng)絡(luò)的服務(wù)。即時(shí)通信不同于e-mail在于它的交談是實(shí)時(shí)的。大部分的即時(shí)通信服務(wù)提供了presenceawareness的特性──顯示聯(lián)絡(luò)人名單,聯(lián)絡(luò)人是否在在線與能否與聯(lián)絡(luò)人交談。最早的即時(shí)通信軟件是ICQ,ICQ是英文中Iseekyou的諧音,意思是我找你。四名以色列青年于1996年7月成立Mirabilis公司,并在11月份發(fā)布了最初的ICQ版本,在六個(gè)月內(nèi)有85萬(wàn)用戶注冊(cè)使用。目前存在各種各樣的即時(shí)通信工具,它們的各種工作主要還是依賴于專門的客戶端程序,在因特網(wǎng)上受歡迎的即時(shí)通信服務(wù)包含了MSNMessenger、AOLInstantMessenger、Yahoo!Messenger、NETMessengerService、Jabber、ICQ與QQ。這些服務(wù)有賴于許多想法更久的的在線聊天媒介,如InternetRelayChat一樣知名。1970年代早期,一種更早的即時(shí)通信形式是柏拉圖系統(tǒng)(PLATOsystem)。之后在1980年代,UNIX/Linux的交談實(shí)時(shí)信息被廣泛的使用于工程師與學(xué)術(shù)界,1990年代即時(shí)通信更跨越了因特網(wǎng)交流。1996年11月,ICQ是首個(gè)廣泛被非UNIX/Linux使用者用于因特網(wǎng)的即時(shí)通信軟件。在ICQ的介紹之后,同時(shí)在許多地方有一定數(shù)量的即時(shí)通信方式發(fā)展,且各式的即時(shí)通信程序有獨(dú)立的協(xié)議,無(wú)法彼此互通。這引導(dǎo)使用者同時(shí)執(zhí)行兩個(gè)以上的即時(shí)通信軟件,或者他們可以使用支持多協(xié)議的終端軟件,如Gaim、Trillian或Jabber。近年來(lái),許多即時(shí)通信服務(wù)開(kāi)始提供視訊會(huì)議的功能,網(wǎng)絡(luò)(VoIP),與網(wǎng)絡(luò)會(huì)議服務(wù)開(kāi)始整合為兼有影像會(huì)議與實(shí)時(shí)信息的功能。于是,這些媒體的分別變的越來(lái)越模糊。國(guó)內(nèi)外研究現(xiàn)狀國(guó)外研究現(xiàn)狀當(dāng)今,國(guó)際上對(duì)網(wǎng)絡(luò)通信系統(tǒng)研究的較好的公司有:思科,Sun,MS等公司,思科主要研究的是底層的傳輸;MS,Sun公司研究的是應(yīng)用層。其中MS公司憑借其在操作系統(tǒng)的壟斷地位,為了在網(wǎng)絡(luò)的發(fā)展中取得先機(jī),采用了各種各樣的手段。但是,其捆綁的MSN,無(wú)論從功能上,還是技術(shù)上來(lái)說(shuō),都不算是非常先進(jìn)的。當(dāng)然,IE,同樣也不是很受人青睞,這讓人想起了,當(dāng)年的網(wǎng)景公司,網(wǎng)景只是生不逢時(shí)。MS不擇手段的想打跨網(wǎng)景,可見(jiàn)其對(duì)網(wǎng)絡(luò)的重視。如今,Sun公司在網(wǎng)絡(luò)應(yīng)用上捷足先登,憑借著Java,Sun在網(wǎng)絡(luò)的應(yīng)用上領(lǐng)先于MS。微軟,想用同樣的辦法搞跨對(duì)手,因此它拿出了Visualc#,來(lái)對(duì)抗Java。這些都是在應(yīng)用層面的開(kāi)發(fā)工具。應(yīng)用層上的產(chǎn)品就更顯種類繁多。ICQ幾乎是國(guó)際上通用的即時(shí)通信工具,由于在我國(guó)它的應(yīng)用不是很廣,所以,其原理也很少被介紹。MSN,是MS的產(chǎn)品,同樣在國(guó)內(nèi)沒(méi)什么市場(chǎng),所以,對(duì)其原理,也很少被討論過(guò)。至于IE,是在Visualc++下開(kāi)發(fā)的產(chǎn)品,雖然有嚴(yán)重的安全隱患,不過(guò),至少能在某種程度上代表當(dāng)今國(guó)際研究的水平。此外,國(guó)際上出現(xiàn)了新的瀏覽器Firefox,其性能據(jù)說(shuō)是遠(yuǎn)高于ie,也許在網(wǎng)絡(luò)的天下,Ms又有了更強(qiáng)勁的對(duì)手。國(guó)內(nèi)研究現(xiàn)狀國(guó)內(nèi)在應(yīng)用層上的網(wǎng)絡(luò)應(yīng)用軟件目前發(fā)展異常的火爆,因?yàn)槲覈?guó)有著網(wǎng)絡(luò)應(yīng)用的最大的市場(chǎng),現(xiàn)在國(guó)內(nèi)網(wǎng)絡(luò)的基礎(chǔ)性建設(shè)發(fā)展迅速,應(yīng)用軟件也層出不窮,其中,在游戲的領(lǐng)域中,網(wǎng)絡(luò)通信的工作做的不錯(cuò),如聯(lián)眾游戲平臺(tái),還有其他的一些平臺(tái),這些平臺(tái)基本上都是基于VC++的,用的都是Socket通信,但是為了效率,這些平臺(tái)沒(méi)有用MFC提供的CSocket類,而是直接用Socket進(jìn)行通信。所以效率上不錯(cuò)。此外,tencent的即時(shí)通信,也是做的很好的,從某中程度上來(lái)說(shuō),代表了國(guó)內(nèi)最高的水平。本課題研究的意義基于WEB的即時(shí)聊天系統(tǒng)的總體建設(shè)的意義是:以信息安全為基礎(chǔ),以數(shù)據(jù)整合為核心,開(kāi)發(fā)無(wú)須專門客戶端軟件,維護(hù)和升級(jí)方便,可跨平臺(tái)操作,任何一臺(tái)機(jī)器只要裝有瀏覽器軟件,均可作為客戶機(jī)來(lái)訪問(wèn)系統(tǒng),具有良好的開(kāi)放性和可擴(kuò)充性,可采用防火墻技術(shù)來(lái)保護(hù)系統(tǒng)的安全性,有效地滿足了當(dāng)前用戶對(duì)Web通信系統(tǒng)的新需求。本課題的研究方法系統(tǒng)采用B/S結(jié)構(gòu)進(jìn)行設(shè)計(jì),使用SQLServer2005構(gòu)建數(shù)據(jù)庫(kù),并在.NET環(huán)境下使用C#語(yǔ)言和,實(shí)現(xiàn)簡(jiǎn)單的即時(shí)聊天與用戶群的功能。系統(tǒng)中大量使用了AJAX技術(shù),使得頁(yè)面可以無(wú)刷新或者部分刷新,減少網(wǎng)絡(luò)資源傳輸,提高用戶體驗(yàn)。2可行性分析可行性分析也稱為可行性研究,即是在系統(tǒng)調(diào)查的基礎(chǔ)上,針對(duì)新系統(tǒng)的開(kāi)發(fā)是否具備必要性和可能性,對(duì)新系統(tǒng)的開(kāi)發(fā)從技術(shù)、經(jīng)濟(jì)、社會(huì)的方面進(jìn)行分析和研究,以避免投資失誤,保證新系統(tǒng)的開(kāi)發(fā)成功??尚行匝芯康哪康木褪怯米钚〉拇鷥r(jià)在盡可能短的時(shí)間內(nèi)確定問(wèn)題是否能夠解決。該系統(tǒng)的可行性分析包括以下幾個(gè)方面的內(nèi)容。2.1經(jīng)濟(jì)可行性主要是對(duì)項(xiàng)目的經(jīng)濟(jì)效益進(jìn)行評(píng)價(jià),系統(tǒng)作為一個(gè)畢業(yè)設(shè)計(jì),無(wú)需開(kāi)發(fā)經(jīng)費(fèi),對(duì)于我們?cè)诮?jīng)濟(jì)上是可以接受的,所以系統(tǒng)在經(jīng)濟(jì)上是可行的。2.2技術(shù)可行性技術(shù)上的可行性分析主要分析技術(shù)條件是否能順利完成開(kāi)發(fā)工作,硬、軟件能否滿足開(kāi)發(fā)者的需要等。首先軟件環(huán)境都已具備,如,開(kāi)發(fā)用Visualstudio2008,IIS服務(wù)器,數(shù)據(jù)庫(kù)服務(wù)器方面則有SQLServer2005,均能夠處理大量數(shù)據(jù),同時(shí)保持?jǐn)?shù)據(jù)的完整性并提供許多高級(jí)管理功能。其靈活性、安全性和易用性為數(shù)據(jù)庫(kù)編程提供了良好的條件。因此,系統(tǒng)的軟件開(kāi)發(fā)平臺(tái)已成熟可行。2.3操作可行性目前,大學(xué)的校園網(wǎng)路覆蓋了教學(xué)區(qū)和學(xué)生區(qū)的主要建筑物,從而滿足校內(nèi)各學(xué)院,各職能部門,各直屬單位上網(wǎng)需求。學(xué)校良好的網(wǎng)絡(luò)設(shè)施為開(kāi)發(fā)使用無(wú)紙化網(wǎng)絡(luò)考試系統(tǒng)提供了堅(jiān)實(shí)的基礎(chǔ)。綜上所述,此系統(tǒng)開(kāi)發(fā)目標(biāo)已明確,在技術(shù)和經(jīng)濟(jì)等方面都可行,并且投入少、見(jiàn)效快。因此系統(tǒng)的開(kāi)發(fā)是完全可行的。3需求分析課題目的需求分析是指理解用戶需求,就軟件功能與客戶達(dá)成一致,估計(jì)軟件風(fēng)險(xiǎn)和評(píng)估項(xiàng)目代價(jià),最終形成開(kāi)發(fā)計(jì)劃的一個(gè)復(fù)雜過(guò)程。如果投入大量的人力,物力,財(cái)力,時(shí)間,開(kāi)發(fā)出的軟件卻沒(méi)人要,那所有的投入都是徒勞。如果費(fèi)了很大的精力,開(kāi)發(fā)一個(gè)軟件,最后卻不滿足用戶的要求,從而要重新來(lái)過(guò),這種返工是讓人痛心疾首的。比如,用戶需要一個(gè)forLinux的軟件,而你在軟件開(kāi)發(fā)前期忽略了軟件的運(yùn)行環(huán)境,忘了向用戶詢問(wèn)這個(gè)問(wèn)題,而想當(dāng)然的認(rèn)為是開(kāi)發(fā)forwindows的軟件,當(dāng)你千辛萬(wàn)苦地開(kāi)發(fā)完成向用戶提交時(shí)才發(fā)現(xiàn)出了問(wèn)題,那時(shí)候你是欲哭無(wú)淚了,恨不得找塊豆腐一頭撞死。需求分析之所以重要,就因?yàn)樗哂袥Q策性,方向性,策略性的作用,他在軟件開(kāi)發(fā)的過(guò)程中具有舉足輕重的地位。大家一定要對(duì)需求分析具有足夠的重視。在一個(gè)大型軟件系統(tǒng)的開(kāi)發(fā)中,他的作用要遠(yuǎn)遠(yuǎn)大于程序設(shè)計(jì)。任務(wù)概述需達(dá)到的目標(biāo)在當(dāng)今世界電腦普及的時(shí)刻,人們已經(jīng)習(xí)慣用電腦辦公交流,即時(shí)通信就有著很大的意義,方便用戶即時(shí)的交流與溝通,但是又不想花費(fèi)太長(zhǎng)時(shí)間在客戶端下載安裝,以及版本更新上,本系統(tǒng)正是根據(jù)此需求進(jìn)行開(kāi)發(fā)的。讓用戶或者企業(yè)能夠在不需要專門客戶端的情況下,實(shí)現(xiàn)即時(shí)通信,方便的體驗(yàn)系統(tǒng)最新版本。提高工作效率。運(yùn)行環(huán)境硬件環(huán)境:普通PC機(jī),內(nèi)存1G,可連接互聯(lián)網(wǎng)。軟件環(huán)境:windowsXP以上的操作系統(tǒng),MicrosoftVisualStudio2008,MicrosoftSqlServer2005。數(shù)據(jù)描述實(shí)體關(guān)系圖根據(jù)系統(tǒng)的需求和功能劃分,可以畫(huà)出系統(tǒng)的實(shí)體-關(guān)系圖即E-R圖,系統(tǒng)實(shí)體間的關(guān)系主要為用戶的好友關(guān)系,用戶之間發(fā)送消息以及用戶群和用戶之間的關(guān)系,詳細(xì)部分如圖描述。用戶B用戶B群消息用戶群用戶A消息分組好友發(fā)送屬于發(fā)送1MNNN1NM用戶實(shí)體包含多個(gè)屬性,其中用戶名,密碼用做身份驗(yàn)證,用戶編號(hào)作為數(shù)據(jù)表的唯一標(biāo)識(shí),用戶頭像表示用戶選擇頭像的文件名。性別、年齡、血型、職業(yè)等做為以及用戶其他的基本信息。用戶編號(hào)用戶編號(hào)用戶名密碼頭像昵稱年齡真實(shí)姓名性別個(gè)性簽名畢業(yè)學(xué)校生肖職業(yè)星座個(gè)人主頁(yè)血型個(gè)人說(shuō)明出生日期形象在線狀態(tài)IP地址圖3.2用戶屬性用戶好友關(guān)系,做為好友多對(duì)多的關(guān)系,包含編號(hào)、好友編號(hào),所屬分組、所屬用戶編號(hào)等屬性,其中編號(hào)做為記錄的唯一標(biāo)識(shí),好友編號(hào)與所屬用戶編號(hào)建立了好友關(guān)系。好友關(guān)系好友關(guān)系所屬分組編號(hào)好友編號(hào)圖3.3好友實(shí)體屬性編號(hào)所屬用戶編號(hào)消息實(shí)體,包含編號(hào)、消息內(nèi)容、發(fā)送人編號(hào)等屬性。其中編號(hào)做為記錄的唯一標(biāo)識(shí)。發(fā)送人編號(hào)、消息內(nèi)容、消息狀態(tài)和接收人的編號(hào)等屬性完成消息發(fā)送與接收工作。群成員實(shí)體,包含群編號(hào)、用戶編號(hào)、和創(chuàng)建時(shí)間屬性,其中群編號(hào)與用戶編號(hào)建立了群擁有成員的關(guān)系。消息圖3.4消息屬性編號(hào)消息圖3.4消息屬性編號(hào)發(fā)送人編號(hào)接收人編號(hào)發(fā)送時(shí)間消息內(nèi)容消息狀態(tài)群成員群編號(hào)創(chuàng)建時(shí)間用戶編號(hào)圖3.5群關(guān)系屬性用戶群實(shí)體,包含群編號(hào)、群名稱和創(chuàng)建者編號(hào)等屬性。其中群編號(hào)做為記錄的唯一標(biāo)識(shí)。群消息實(shí)體,包含群編號(hào)、發(fā)送人編號(hào)、消息內(nèi)容、接收群編號(hào)以及已經(jīng)接收者編號(hào)組等屬性。用戶群群編號(hào)用戶群群編號(hào)創(chuàng)建者編號(hào)群簡(jiǎn)介創(chuàng)建時(shí)間圖3.6用戶群屬性群名稱群公告群消息群編號(hào)發(fā)送時(shí)間發(fā)送人編號(hào)消息內(nèi)容已經(jīng)接收者編號(hào)組接收群編號(hào)圖3.7群消息屬性用戶分組實(shí)體,包含分組編號(hào)、分組名稱、所屬用戶編號(hào)等屬性。其中分組編號(hào)做為記錄的唯一標(biāo)識(shí)。用戶請(qǐng)求實(shí)體,包含請(qǐng)求編號(hào)、請(qǐng)求用戶編號(hào),響應(yīng)用戶編號(hào)等屬性。其中請(qǐng)求編號(hào)做為記錄的唯一標(biāo)識(shí)。用戶分組分組編號(hào)用戶分組分組編號(hào)所屬用戶編號(hào)排序分組名稱創(chuàng)建日期分組類型備注用戶請(qǐng)求附加消息響應(yīng)用戶編號(hào)請(qǐng)求用戶編號(hào)附加分組編號(hào)圖3.9用戶請(qǐng)求屬性狀態(tài)請(qǐng)求編號(hào)創(chuàng)建日期數(shù)據(jù)表用戶信息表:記錄了用戶的基本信息,包括用戶名,密碼,頭像等信息。表3-1用戶信息表字段名字段類型是否為空說(shuō)明Idint不為空編號(hào)LoginNamevarchar(50)可為空用戶名Passwordvarchar(50)可為空密碼Headvarchar(50)可為空頭像Callvarchar(50)可為空昵稱Idivarchar(500)可為空個(gè)性簽名Sexvarchar(50)可為空性別RealNamevarchar(50)可為空真實(shí)姓名Ageint可為空年齡Schoolvarchar(50)可為空畢業(yè)學(xué)校SXvarchar(50)可為空生肖UserWorkvarchar(50)可為空職業(yè)Constellationvarchar(50)可為空星座MasterPagevarchar(50)可為空個(gè)人主頁(yè)BloodTypevarchar(50)可為空血型Introducetionvarchar(500)可為空個(gè)人說(shuō)明Visualizevarchar(50)可為空形象Brithdaydatetime可為空出生日期Statevarchar(50)可為空在線狀態(tài)IPvarchar(50)可為空IP地址好友關(guān)系表:記錄了用戶和好友的關(guān)系,以及好友的分組情況。表3-2好友關(guān)系表字段名字段類型是否為空說(shuō)明Idint不為空編號(hào)BeLongGroupIdint可為空所屬組的編號(hào)BelongUserIdint可為空所屬用戶編號(hào)FriendIdint可為空好友編號(hào)發(fā)送消息表:發(fā)送的消息存儲(chǔ)在數(shù)據(jù)庫(kù)中,并且記錄時(shí)間,發(fā)信人和收信人以及消息的狀態(tài),包括已讀和未讀。表3-3發(fā)送消息表字段名字段類型是否為空說(shuō)明Idint不為空編號(hào)[Content]varchar(500)可以為空消息內(nèi)容SendTimedatetime可以為空發(fā)送時(shí)間BelongSenderIdint可以為空發(fā)送人編號(hào)BelongReceiverIdint可以為空收信人編號(hào)Statevarchar(50)可以為空狀態(tài)用戶群成員表:記錄群編號(hào)以及在該群眾所有用戶的編號(hào)。表3-4用戶群成員表字段名字段類型是否為空說(shuō)明Idint不為空編號(hào)BelongGroupIdint可為空群編號(hào)BelongUserIdint可為空群中用戶編號(hào)CreateTimedatetime可為空創(chuàng)建時(shí)間用戶群信息表:記錄一個(gè)群的基本信息,包括公告簡(jiǎn)介,創(chuàng)建時(shí)間,創(chuàng)建人和群的名字等信息。表3-5用戶群信息表字段名字段類型是否為空說(shuō)明Idint不為空編號(hào)GroupNamevarchar(50)可為空群名字BelongUserIdint可為空創(chuàng)建人編號(hào)GroupCallBroadvarchar(500)可為空群公告GroupInterducevarchar(500)可為空群簡(jiǎn)介CreateTimedatetime可為空創(chuàng)建時(shí)間群消息發(fā)送表:記錄了群消息的發(fā)送與接收情況。表3-6群消息發(fā)送表字段名字段類型是否為空說(shuō)明Idint不為空編號(hào)[Content]varchar(500)可為空消息內(nèi)容BelongSenderIdint可為空發(fā)送人編號(hào)BelongGroupIdint可為空群的編號(hào)ReceiverArrayvarchar(5000)可為空已經(jīng)接收者編號(hào)組SendTimedatetime可為空發(fā)送時(shí)間用戶組表:記錄了用戶為好友創(chuàng)建的分組。表3-7用戶組表字段名字段類型是否為空說(shuō)明Idint不為空編號(hào)GroupNamevarchar(50)可為空分組的名稱BelongUserIdint可為空所屬者編號(hào)OrderNumint可為空排序CreateDatedatetime可為空創(chuàng)建時(shí)間GroupTypevarchar(50)可為空組類型Reamarkvarchar(500)可為空備注用戶請(qǐng)求表:當(dāng)用戶添加好友時(shí),將消息保存到這張表中。表3-8用戶請(qǐng)求表字段名字段類型是否為空說(shuō)明Idint不為空編號(hào)RequestUserIdint可為空請(qǐng)求者編號(hào)AppendToGroupIdint可為空附加到組的編號(hào)ResponseUserIdint可為空響應(yīng)用戶編號(hào)AppendInfovarchar(500)可為空附加信息CreatTimedatetime可為空創(chuàng)建時(shí)間Statevarchar(50)可為空狀態(tài)功能描述功能模塊圖根據(jù)需求分析設(shè)計(jì)了九大模塊,分別為:用戶登錄模塊、用戶注冊(cè)模塊、個(gè)人信息管理模塊、用戶查找模塊、收發(fā)消息模塊、用戶查找模塊、好友管理模塊、收發(fā)群消息模塊和用戶群管理模塊,各模塊的信息由數(shù)據(jù)庫(kù)關(guān)系關(guān)聯(lián),通過(guò)對(duì)其數(shù)據(jù)庫(kù)管理操作實(shí)現(xiàn)系統(tǒng)的管理。經(jīng)過(guò)分析得出系統(tǒng)模塊框圖如圖3.10所示:WWeb即時(shí)通信用戶登錄模塊用戶注冊(cè)模塊收發(fā)消息模塊好友管理模塊創(chuàng)建用戶群模塊收發(fā)群消息模塊個(gè)人信息管理模塊用戶查找模塊用戶群管理模塊功能描述用戶登錄模塊系統(tǒng)的首頁(yè)就是用戶登錄,在用戶登錄之前是不能體驗(yàn)系統(tǒng)的其他功能的,在登錄頁(yè)面中輸入用戶名和密碼,如果都正確,就可以進(jìn)入系統(tǒng)主窗體。登錄的用戶名是用戶注冊(cè)時(shí)的用戶名而不是像QQ那樣的號(hào)碼。用戶注冊(cè)模塊如果用戶沒(méi)有賬號(hào),就需要進(jìn)行注冊(cè),在注冊(cè)頁(yè)面輸入相對(duì)應(yīng)的信息進(jìn)行注冊(cè),如果用戶的輸入合法的話,信息將保存到數(shù)據(jù)庫(kù)中,完成注冊(cè)操作。個(gè)人信息管理模塊用戶可以管理自己的信息,對(duì)個(gè)人信息進(jìn)行修改,然后重新保存到數(shù)據(jù)庫(kù)中。收發(fā)消息模塊選中好友,雙擊彈出聊天的對(duì)話框,然后輸入聊天的內(nèi)容,發(fā)送給好友。這個(gè)過(guò)程不需要考慮用戶是否在線,也就是說(shuō)可以發(fā)送離線的消息。用戶接受到好友發(fā)來(lái)的消息時(shí),會(huì)有提示,然后查看消息。用戶查找模塊根據(jù)輸入的信息查找注冊(cè)過(guò)的用戶,可以不同的條件查找,比如,按照帳號(hào)或者昵稱查找。符合條件的用戶顯示出簡(jiǎn)單的信息,也可以繼續(xù)查看詳細(xì)的用戶信息。當(dāng)查找的用戶過(guò)多時(shí),可以分頁(yè)顯示。好友管理模塊在查找到用戶的基礎(chǔ)上,添加需要的用戶為好友,會(huì)發(fā)送消息給對(duì)應(yīng)的用戶,請(qǐng)求加為好友,若用戶同意,則添加好友關(guān)系到數(shù)據(jù)庫(kù)中。刪除好友則直接選中好友就可以刪除,不需要經(jīng)過(guò)對(duì)方的同意,直接刪除。創(chuàng)建用戶群模塊這個(gè)和注冊(cè)操作類似,注冊(cè)過(guò)的用戶都可以創(chuàng)建用戶群,然后邀請(qǐng)好友加入。在這個(gè)過(guò)程中需要輸入群的一些信息,在創(chuàng)建群的時(shí)候需要對(duì)信息進(jìn)行驗(yàn)證,確保信息格式的正確和無(wú)誤。收發(fā)群消息模塊用戶可以在自己所在群中發(fā)群消息,然后再群中的每個(gè)人都應(yīng)該可以收到消息,同樣,群里的其他人發(fā)出的消息,也都能接受到。用戶群管理模塊創(chuàng)建群的用戶可以對(duì)用戶群的消息做一些修改,比如修改群的名稱等,然后保存到數(shù)據(jù)庫(kù)中。作為群的創(chuàng)建人,可以添加自己已經(jīng)有的好友作為用戶群的一個(gè)成員,同時(shí)也可以刪除用戶群中的一個(gè)成員。數(shù)據(jù)流圖用戶登錄數(shù)據(jù)流圖由用戶輸入用戶名、密碼以及驗(yàn)證碼,首先驗(yàn)證驗(yàn)證碼是否正確,若正確則繼續(xù)判斷用戶名和密碼,否則重新輸入;若驗(yàn)證碼正確,則將用戶名和密碼放到數(shù)據(jù)庫(kù)中比較,如果都匹配,則登錄成功,否則登錄失敗。數(shù)據(jù)驗(yàn)證數(shù)據(jù)驗(yàn)證用戶名、密碼和驗(yàn)證碼系統(tǒng)時(shí)間用戶信息用戶名和密碼驗(yàn)證碼錯(cuò)誤驗(yàn)證用戶名和密碼用戶名或密碼錯(cuò)誤通過(guò)驗(yàn)證用戶注冊(cè)模塊加載用戶注冊(cè)頁(yè)面,提示用戶輸入注冊(cè)信息,判斷用戶輸入的信息是否符合格式要求。若格式不正確給出提示,并要求用戶重新輸入。若格式正確,則繼續(xù)添加用戶信息到數(shù)據(jù)庫(kù)中,若添加成功,則用戶注冊(cè)成功,給出注冊(cè)成功提示,否則,注冊(cè)失敗。數(shù)據(jù)驗(yàn)證數(shù)據(jù)驗(yàn)證用戶基本信息系統(tǒng)時(shí)間用戶信息用戶對(duì)象無(wú)效的用戶信息添加用戶信息失敗成功個(gè)人信息管理模塊加載個(gè)人信息,并且在頁(yè)面上將用戶信息顯示出來(lái),用戶修改,判斷用戶輸入的信息是否符合格式要求。若格式不正確給出提示,并要求用戶重新輸入。若格式正確,則繼續(xù)修改用戶信息到數(shù)據(jù)庫(kù)中,修改成功。否則修改失敗。讀取數(shù)據(jù)讀取數(shù)據(jù)修改后用戶信息系統(tǒng)時(shí)間用戶信息數(shù)據(jù)讀取失敗數(shù)據(jù)顯示通過(guò)驗(yàn)證數(shù)據(jù)驗(yàn)證系統(tǒng)時(shí)間用戶信息出錯(cuò)修改用戶信息失敗成功用戶信息用戶信息用戶信息收發(fā)消息模塊用戶輸入需要發(fā)送的消息,添加到數(shù)據(jù)庫(kù)中。由接受消息的用戶在數(shù)據(jù)庫(kù)中查找是否有消息,如果有,則顯示消息,否則不顯示。添加消息添加消息系統(tǒng)時(shí)間用戶信息數(shù)據(jù)添加失敗讀取失敗讀取消息系統(tǒng)時(shí)間數(shù)據(jù)顯示失敗顯示消息用戶消息用戶信息信息庫(kù)存用戶查找模塊用戶輸入查找關(guān)鍵字,驗(yàn)證關(guān)鍵字格式是否正確。若正確,則在數(shù)據(jù)庫(kù)中查找對(duì)應(yīng)信息,并將查找到的結(jié)果顯示。否則,給出提示,要求用戶重新輸入。查找用戶查找用戶數(shù)據(jù)查找成功數(shù)據(jù)查找失敗數(shù)據(jù)顯示用戶關(guān)鍵字用戶信息添加和刪除好友模塊用戶輸入要添加或者刪除的好友,并將信息保存到數(shù)據(jù)庫(kù)中,由好友確認(rèn),同時(shí)提交確認(rèn)數(shù)據(jù)到數(shù)據(jù)庫(kù)中,建立或解除好友關(guān)系。查找用戶查找用戶數(shù)據(jù)查找成功數(shù)據(jù)查找失敗數(shù)據(jù)顯示用戶關(guān)鍵字回應(yīng)消息系統(tǒng)時(shí)間用戶回應(yīng)失敗系統(tǒng)時(shí)間添加用戶用戶信息添加/刪除好友關(guān)系拒絕同意用戶信息添加用戶消息用戶信息創(chuàng)建用戶群模塊加載用戶群創(chuàng)建頁(yè)面,提示用戶輸入用戶群信息信息,判斷用戶輸入的信息是否符合格式要求。若格式不正確給出提示,并要求用戶重新輸入。若格式正確,則繼續(xù)添加用戶群信息到數(shù)據(jù)庫(kù)中,若添加成功,則用戶群創(chuàng)建成功,給出創(chuàng)建成功提示,否則,創(chuàng)建失敗。數(shù)據(jù)驗(yàn)證數(shù)據(jù)驗(yàn)證用戶群基本信息系統(tǒng)時(shí)間用戶群對(duì)象無(wú)效的用戶群信息添加群成員失敗成功選擇群成員用戶群庫(kù)存收發(fā)群消息模塊用戶輸入需要發(fā)送的消息,添加到數(shù)據(jù)庫(kù)中。由用戶群中其他用戶查找是否有群消息,如果有,則顯示消息,否則不顯示。添加群消息添加群消息系統(tǒng)時(shí)間用戶群信息數(shù)據(jù)添加失敗讀取失敗讀取消息系統(tǒng)時(shí)間數(shù)據(jù)顯示失敗顯示消息用戶群消息用戶群信息群信息庫(kù)存用戶群管理模塊加載用戶群信息,并且在頁(yè)面上將用戶群信息顯示出來(lái),用戶修改,判斷用戶輸入的信息是否符合格式要求。若格式不正確給出提示,并要求用戶重新輸入。若格式正確,則繼續(xù)修改用戶群信息到數(shù)據(jù)庫(kù)中,修改成功。否則修改失敗。讀取數(shù)據(jù)讀取數(shù)據(jù)修改后用戶群信息系統(tǒng)時(shí)間用戶群信息數(shù)據(jù)讀取失敗數(shù)據(jù)顯示未通過(guò)驗(yàn)證數(shù)據(jù)驗(yàn)證系統(tǒng)時(shí)間用戶信息出錯(cuò)修改用戶群信息失敗成功用戶群信息用戶群信息用戶群庫(kù)存性能需求數(shù)據(jù)精確度(1)要按照嚴(yán)格的數(shù)據(jù)格式輸入,否則系統(tǒng)不給予響應(yīng)進(jìn)行處理。(2)查詢時(shí)要保證查全率,所有相應(yīng)域包含查詢關(guān)鍵字的記錄都應(yīng)能查到。因?yàn)橥ǔS形募挠涗洉?huì)很多,所以本系統(tǒng)采用了兩種方法進(jìn)行查詢:直接查詢和模糊查詢。時(shí)間特性一般操作的響應(yīng)時(shí)間應(yīng)在1~2秒內(nèi),保證用戶的等待時(shí)間可以接受。其它要求(1)系統(tǒng)的功能實(shí)現(xiàn)情況:用戶可在本系統(tǒng)下實(shí)現(xiàn)各種用戶要求的功能;(2)系統(tǒng)的安全性:對(duì)于系統(tǒng)的重要數(shù)據(jù)都有密碼保護(hù),具有一定的安全性;(3)系統(tǒng)的容錯(cuò)性:用戶輸錯(cuò)數(shù)據(jù)都有提示信息,具有較好的容錯(cuò)性能;(4)系統(tǒng)的封閉性:用戶的封閉性較好,用戶基本上在提示信息下輸數(shù)據(jù)。4概要設(shè)計(jì)總體設(shè)計(jì)4.1.1三層結(jié)構(gòu)的介紹數(shù)據(jù)訪問(wèn)層:主要是對(duì)原始數(shù)據(jù)(數(shù)據(jù)庫(kù)或者文本文件等存放數(shù)據(jù)的形式)的操作層,而不是指原始數(shù)據(jù),也就是說(shuō),是對(duì)數(shù)據(jù)的操作,而不是數(shù)據(jù)庫(kù),具體為業(yè)務(wù)邏輯層或表示層提供數(shù)據(jù)服務(wù)。業(yè)務(wù)邏輯層:主要是針對(duì)具體的問(wèn)題的操作,也可以理解成對(duì)數(shù)據(jù)層的操作,對(duì)數(shù)據(jù)業(yè)務(wù)邏輯處理,如果說(shuō)數(shù)據(jù)層是積木,那邏輯層就是對(duì)這些積木的搭建。表示層:主要表示為WEB方式,WEB方式以.aspx形式呈現(xiàn),如果邏輯層相當(dāng)強(qiáng)大和完善,無(wú)論表現(xiàn)層如何定義和更改,邏輯層都能完善地提供服務(wù)。
所謂三層體系結(jié)構(gòu),是在客戶端與數(shù)據(jù)庫(kù)之間加入了一個(gè)中間層,也叫組件層。這里所說(shuō)的三層體系,不是指物理上的三層,不是簡(jiǎn)單地放置三臺(tái)機(jī)器就是三層體系結(jié)構(gòu),也不僅僅有B/S應(yīng)用才是三層體系結(jié)構(gòu),三層是指邏輯上的三層,即使這三個(gè)層放置到一臺(tái)機(jī)器上。
三層體系的應(yīng)用程序?qū)I(yè)務(wù)規(guī)則、數(shù)據(jù)訪問(wèn)、合法性校驗(yàn)等工作放到了中間層進(jìn)行處理。通常情況下,客戶端不直接與數(shù)據(jù)庫(kù)進(jìn)行交互,而是通過(guò)COM/DCOM通訊與中間層建立連接,再經(jīng)由中間層與數(shù)據(jù)庫(kù)進(jìn)行交換。開(kāi)發(fā)人員可以將應(yīng)用的商業(yè)邏輯放在中間層應(yīng)用168/"\o"服務(wù)器"服務(wù)器上,把應(yīng)用的業(yè)務(wù)邏輯與用戶界面分開(kāi)。在保證客戶端功能的前提下,為用戶提供一個(gè)簡(jiǎn)潔的界面。這意味著如果需要修改應(yīng)用程序代碼,只需要對(duì)中間層應(yīng)用\o"服務(wù)器"服務(wù)器進(jìn)行修改,而不用修改成千上萬(wàn)的客戶端應(yīng)用程序。從而使開(kāi)發(fā)人員可以專注于應(yīng)用系統(tǒng)核心業(yè)務(wù)邏輯的分析、設(shè)計(jì)和開(kāi)發(fā),簡(jiǎn)化了應(yīng)用系統(tǒng)的開(kāi)發(fā)、更新和升級(jí)工作。三層架構(gòu)的優(yōu)缺點(diǎn)優(yōu)點(diǎn):(1)開(kāi)發(fā)人員可以只關(guān)注整個(gè)結(jié)構(gòu)中的其中某一層;(2)可以很容易的用新的實(shí)現(xiàn)來(lái)替換原有層次的實(shí)現(xiàn);(3)可以降低層與層之間的依賴;(4)有利于標(biāo)準(zhǔn)化;(5)利于各層邏輯的復(fù)用;(6)擴(kuò)展性強(qiáng)。不同層負(fù)責(zé)不同的層面,如PetShop可經(jīng)過(guò)簡(jiǎn)單的配置實(shí)現(xiàn)MicrosoftSqlServer和Oracle之間的轉(zhuǎn)換,當(dāng)然寫(xiě)好了也可以實(shí)現(xiàn)B/S與C/S之間的轉(zhuǎn)換;(7)安全性高。用戶端只能通過(guò)邏輯層來(lái)訪問(wèn)數(shù)據(jù)層,減少了入口點(diǎn),把很多危險(xiǎn)的系統(tǒng)功能都屏蔽了;(8)項(xiàng)目結(jié)構(gòu)更清楚,分工更明確,有利于后期的維護(hù)和升級(jí)。缺點(diǎn):(1)降低了系統(tǒng)的性能。這是不言而喻的。如果不采用分層式結(jié)構(gòu),很多業(yè)務(wù)可以直接造訪數(shù)據(jù)庫(kù),以此獲取相應(yīng)的數(shù)據(jù),如今卻必須通過(guò)中間層來(lái)完成;(2)有時(shí)會(huì)導(dǎo)致級(jí)聯(lián)的修改。這種修改尤其體現(xiàn)在自上而下的方向。如果在表示層中需要增加一個(gè)功能,為保證其設(shè)計(jì)符合分層式結(jié)構(gòu),可能需要在相應(yīng)的業(yè)務(wù)邏輯層和數(shù)據(jù)訪問(wèn)層中都增加相應(yīng)的代碼;(3)增加了代碼量,增加了工作量。三層架構(gòu)的實(shí)現(xiàn)三層結(jié)構(gòu)的實(shí)現(xiàn)根據(jù)系統(tǒng)的需求分析和結(jié)構(gòu)設(shè)計(jì),針對(duì)三層結(jié)構(gòu)的特性,對(duì)系統(tǒng)的架構(gòu)進(jìn)行了設(shè)計(jì),其方法是:在創(chuàng)建一個(gè)解決方案之后,在解決方案上右擊,在彈出的菜單中選擇“添加”—>“新建項(xiàng)”命令,在出現(xiàn)的對(duì)話框中,選擇右邊的“類”在名稱中填入“SQLServerDAL”,如圖4-1所示,同理創(chuàng)建BLL和Model類。圖4.1創(chuàng)建類庫(kù)系統(tǒng)層次的劃分和描述如下表4-1所示:表4-1系統(tǒng)層次劃分和功能描述名稱用途BLL業(yè)務(wù)邏輯層,用于存放實(shí)現(xiàn)業(yè)務(wù)邏輯層的類SQLServerDAL數(shù)據(jù)訪問(wèn)層,用于存放訪問(wèn)數(shù)據(jù)庫(kù)和操作實(shí)體類的方法Model數(shù)據(jù)模型層,用于存放實(shí)體類WebHL為Web表示層設(shè)計(jì)運(yùn)行設(shè)計(jì)運(yùn)行模塊的組合具體軟件的運(yùn)行模塊組合為程序多窗口的運(yùn)行環(huán)境,各個(gè)模塊在軟件運(yùn)行過(guò)程中能較好的交換信息,處理數(shù)據(jù)。運(yùn)行控制軟件運(yùn)行時(shí)有較友好的界面,基本能夠?qū)崿F(xiàn)用戶的數(shù)據(jù)處理要求。運(yùn)行時(shí)間系統(tǒng)的運(yùn)行時(shí)間基本可以達(dá)到用戶所提出的要求。出錯(cuò)處理設(shè)計(jì)出錯(cuò)輸出信息如果用戶進(jìn)行了非法的操作,系統(tǒng)給出提示:“對(duì)不起,操作有誤!”而且用戶的密碼管理可以允許用戶修改自己的密碼,不允許用戶的匿名登錄。出錯(cuò)處理對(duì)策由于數(shù)據(jù)在數(shù)據(jù)庫(kù)中已經(jīng)有備份,故在系統(tǒng)出錯(cuò)后可以依靠數(shù)據(jù)庫(kù)的恢復(fù)功能,并且依靠日志文件使系統(tǒng)再啟動(dòng),就算系統(tǒng)崩潰用戶數(shù)據(jù)也不會(huì)丟失或遭到破壞。但有可能占用更多的數(shù)據(jù)存儲(chǔ)空間,權(quán)衡措施由用戶來(lái)決定。安全保密設(shè)計(jì)系統(tǒng)的系統(tǒng)用戶管理保證了只有授權(quán)的用戶才能進(jìn)入系統(tǒng)進(jìn)行數(shù)據(jù)操作,而且對(duì)一些重要數(shù)據(jù),系統(tǒng)設(shè)置為只有更高權(quán)限的人員方可讀取或是操作。系統(tǒng)安全保密性較高。維護(hù)設(shè)計(jì)由于系統(tǒng)較小沒(méi)有外加維護(hù)模塊,因?yàn)榫S護(hù)工作比較簡(jiǎn)單,僅靠數(shù)據(jù)庫(kù)的一些基本維護(hù)基本上就可以滿足要求。5詳細(xì)設(shè)計(jì)用戶登錄模塊用戶登錄流程圖開(kāi)始開(kāi)始驗(yàn)證碼登錄到主頁(yè)面登錄失敗提示結(jié)束TrueFalse用戶名,密碼和驗(yàn)證碼驗(yàn)證用戶名和密碼TrueFalse用戶登錄頁(yè)面為,在頁(yè)面上輸入用戶名、密碼和驗(yàn)證碼。最先判斷驗(yàn)證碼是否正確,驗(yàn)證碼采用的是數(shù)字和英文字母大小寫(xiě)的組合,需要將用戶的輸入和驗(yàn)證碼的文本同時(shí)轉(zhuǎn)換成小寫(xiě)字母,然后進(jìn)行比較,當(dāng)用戶輸入的驗(yàn)證碼不正確時(shí),提示用戶驗(yàn)證碼錯(cuò)誤,同時(shí)返回,讓用戶重新輸入。當(dāng)驗(yàn)證碼正確時(shí),保存輸入的用戶名和密碼,提交到數(shù)據(jù)庫(kù)中,進(jìn)行比較,當(dāng)用戶名和密碼同時(shí)滿足條件時(shí),登錄成功,否則登錄失敗。算法描述打開(kāi)登錄頁(yè)面,用戶通過(guò)登錄界面登錄,輸入用戶名和密碼,將用戶輸入的用戶名和密碼與數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行比較,如果都相同,則表示登錄成功,并且將登錄信息傳入主頁(yè)面;當(dāng)用戶輸入的用戶名或者密碼不正確時(shí),給出錯(cuò)誤信息提示。登錄按鈕單擊事件如下:if(this.txt_checkBox.Text.Trim().ToLower()!=Session["CheckCode"].ToString().Trim().ToLower()){Response.Write("<script>alert('驗(yàn)證碼錯(cuò)誤!')</script>");}else{WebHL.BLL.TBUserInformationvalidate=newWebHL.BLL.TBUserInformation();intselfId=0;stringpassword=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(this.txt_passWord.Text.Trim(),"MD5");stringresult=validate.ValidateLoginNameAndPsw(Server.HtmlEncode(this.txt_userName.Text.Trim()),password,refselfId);if(result=="驗(yàn)證通過(guò)"){if(UserExist()){return;}else{Session["name"]=this.txt_userName.Text.Trim();etUserOnline(selfId,Request.UserHostAddress);Response.Redirect("MainFrm.aspx?userName="+this.txt_userName.Text.Trim()+"&userPassword="+password);}}頁(yè)面效果如下圖所示:5.2用戶登錄頁(yè)面用戶注冊(cè)模塊注冊(cè)算法流程圖開(kāi)始開(kāi)始是否正確操作成功提示操作失敗提示結(jié)束添加用戶TrueFalse用戶信息核對(duì)信息格式是否成功TrueFalse打開(kāi)用戶注冊(cè)頁(yè)面,根據(jù)頁(yè)面上的提示信息,輸入用戶信息,包括:頭像、用戶名、昵稱、密碼、性別、個(gè)性簽名等。然后需要核對(duì)用戶信息,首先驗(yàn)證用戶名是否存在,若已經(jīng)存在提示用戶不能使用該用戶名,重新輸入。當(dāng)所有信息都符合要求時(shí),就可以向數(shù)據(jù)庫(kù)中添加用戶信息,并自動(dòng)生成用戶編號(hào)。算法描述RegionUser.aspx頁(yè)面,用戶注冊(cè)的時(shí)候需要填寫(xiě)對(duì)應(yīng)指定的信息,已完成注冊(cè)操作,如果有信息不符合格式的要求,則會(huì)產(chǎn)生異常,注冊(cè)操作將不成功,數(shù)據(jù)將不會(huì)添加的數(shù)據(jù)庫(kù)中。注冊(cè)按鈕單擊事件代碼如下:try{WebHL.BLL.TBUserInformationvalidate=newWebHL.BLL.TBUserInformation();if(validate.Exists(loginName)){return"exist";}else{return"notexist";}}注冊(cè)頁(yè)面設(shè)計(jì)圖如下:5.4用戶注冊(cè)個(gè)人信息管理模塊個(gè)人信息管理算法流程圖開(kāi)始開(kāi)始是否正確操作成功提示操作失敗提示結(jié)束修改用戶信息TrueFalse修改用戶信息核對(duì)信息格式是否正確讀取用戶信息顯示用戶信息FalseTrue對(duì)于已經(jīng)成功登錄的用戶,通過(guò)單擊菜單,打開(kāi)修改信息頁(yè)面。根據(jù)用戶名,在數(shù)據(jù)庫(kù)查找到相關(guān)信息,并且顯示在頁(yè)面上。用戶可以修改除了用戶編號(hào)也用戶名以外的信息。在修改完成之后,先進(jìn)行數(shù)據(jù)格式的驗(yàn)證,如果數(shù)據(jù)驗(yàn)證成功,將新的數(shù)據(jù)添加到數(shù)據(jù)中,完成修改操作。算法描述,此模塊用來(lái)提供用戶修改個(gè)人信息,頁(yè)面加載的時(shí)候會(huì)根據(jù)傳遞過(guò)來(lái)的用戶名在數(shù)據(jù)庫(kù)中查找用戶的信息,然后通過(guò)頁(yè)面上的控件顯示出來(lái),其中顯示用戶編號(hào)的文本框是屬性為只讀,不能夠修改,并且不顯示用戶名信息。用戶可以通過(guò)頁(yè)面中的其他文本或著選擇項(xiàng)來(lái)修改信息,然后點(diǎn)擊確認(rèn)修改按鈕,將信息更新到數(shù)據(jù)庫(kù)中。修改按鈕相關(guān)代碼如下:try{WebHL.BLL.TBUserInformationbLLUpdateUser=newWebHL.BLL.TBUserInformation();WebHL.Model.TBUserInformationmodelUser=newWebHL.Model.TBUserInformation();modelUser.Id=Convert.ToInt16(Request.Params["userid"]);modelUser.Age=Convert.ToInt16(Request.Params["userAge"]);modelUser.BloodType=Request.Params["userBloodType"].ToString();modelUser.Brithday=DateTime.Today;modelUser.Call=Request.Params["userCall"].ToString();modelUser.Constellation=Request.Params["userCon"];modelUser.Head=Request.Params["userHead"];modelUser.Head=SubString(modelUser.Head,"Images");modelUser.Idi=Request.Params["userIdi"];modelUser.Introducetion=Request.Params["userInfo"];modelUser.IP=Request.UserHostAddress;modelUser.LoginName="";modelUser.MasterPage=Request.Params["userPage"];modelUser.Password="";modelUser.RealName=Request.Params["userRealName"];modelUser.School=Request.Params["userSchool"];modelUser.Sex=Request.Params["userSex"];modelUser.State="online";modelUser.SX=Request.Params["userSS"].ToString();modelUser.UserWork=Request.Params["userWork"];modelUser.Visualize=Request.Params["userImg"];modelUser.Visualize=SubString(modelUser.Visualize,"Images");bLLUpdateUser.Update(modelUser);return"更新成功";}頁(yè)面如下圖所示:5.6個(gè)人信息修改模塊收發(fā)消息模塊收發(fā)消息算法流程圖開(kāi)始是否正確開(kāi)始是否正確操作成功提示操作失敗提示結(jié)束添加信息到數(shù)據(jù)表TtrueFalse用戶信息核對(duì)信息格式是否正確TrueFalse開(kāi)始查找信息是否成功顯示數(shù)據(jù)操作失敗提示結(jié)束TrueFalse算法描述頁(yè)面為MainFrm.aspx,在加載頁(yè)面的時(shí)候有背景音樂(lè),單擊我的好友欄目,可以顯示所有的好友,然后雙擊好友頭像,然后就可以彈出聊天的窗口。如果有好友發(fā)送過(guò)來(lái)的消息,但是聊天窗口沒(méi)有打開(kāi),那么好友頭像就可會(huì)閃動(dòng)。雙擊好友頭像會(huì)顯示即時(shí)消息窗口,如果此時(shí)有消息過(guò)來(lái),就會(huì)直接顯示在窗口上。在聊天窗口下方的文本框中輸入消息內(nèi)容,然后點(diǎn)擊發(fā)送就可以發(fā)送給好友。相關(guān)代碼如下:try{WebHL.BLL.TBUserMessagemessage=newWebHL.BLL.TBUserMessage();WebHL.Model.TBUserMessagemodel=newWebHL.Model.TBUserMessage();model.BelongReceiverId=receiverId;model.BelongSenderId=senderId;model.Content=content;model.SendTime=DateTime.Now;model.State="NotRead";message.Add(model);}頁(yè)面如下:5.9主窗體5.10聊天窗口用戶查找模塊查找用戶算法流程圖開(kāi)始開(kāi)始查找用戶是否成功顯示數(shù)據(jù)操作失敗提示結(jié)束TrueFalse用戶信息算法描述SearchUser.aspx頁(yè)面,用來(lái)查找用戶,用編號(hào)、用戶名、昵稱和真實(shí)姓名在數(shù)據(jù)庫(kù)中查找匹配的對(duì)象,支持模糊查詢,然后在頁(yè)面上顯示,如果查找出來(lái)的內(nèi)容過(guò)多,可以用分頁(yè)的方法顯示。5.12查找好友好友管理模塊管理好友算法流程圖True開(kāi)始True開(kāi)始查找好友是否成功顯示數(shù)據(jù)操作失敗提示TrueFalse操作成功提示操作失敗提示結(jié)束添加/刪除好友False是否正確算法描述SearchUser.aspx頁(yè)面,在查找頁(yè)面的基礎(chǔ)上,對(duì)查找的用戶進(jìn)行操作,可以查看詳細(xì)資料已經(jīng)添加為好友。相關(guān)代碼如下:try{WebHL.BLL.TBUserRequestappendRequest=newWebHL.BLL.TBUserRequest();WebHL.Model.TBUserRequestmodelRequest=newWebHL.Model.TBUserRequest();if(appendRequest.Exists(requestId,responseId)){return"你已經(jīng)發(fā)送過(guò)請(qǐng)求,請(qǐng)等待用戶驗(yàn)證";}modelRequest.AppendInfo=AppendInfo;modelRequest.CreatTime=DateTime.Now;modelRequest.RequestUserId=requestId;modelRequest.ResponseUserId=responseId;modelRequest.AppendToGroupId=appendToGroupId;modelRequest.State="Validate";appendRequest.Add(modelRequest);return"請(qǐng)等待用戶驗(yàn)證";}頁(yè)面效果如下圖所示:5.14添加好友創(chuàng)建用戶群模塊創(chuàng)建用戶群算法流程圖開(kāi)始開(kāi)始是否正確添加群成員操作失敗提示結(jié)束添加用戶TrueFalse用戶信息核對(duì)信息格式是否成功TrueFalseTrueFalse是否成功操作成功提示操作失敗提示注冊(cè)成功的用戶就可以創(chuàng)建用戶群,在創(chuàng)建用戶群的頁(yè)面,根據(jù)提示信息,輸入基本信息:包括:群名稱、群公告、群介紹等信息。核對(duì)信息,若信息格式正確,則將信息添加到數(shù)據(jù)庫(kù)中,操作成功后,將需要添加到群中的成員的編號(hào)添加到群信息表中。算法描述CreateGroupMessage.aspx頁(yè)面,用戶可以創(chuàng)建自己的用戶群,并且邀請(qǐng)好友加入。在創(chuàng)建用戶群的時(shí)候,需要填寫(xiě)相應(yīng)的信息,其中創(chuàng)建人為只讀的,是由上一個(gè)頁(yè)面?zhèn)鬟f過(guò)來(lái)的。通過(guò)點(diǎn)擊TreeView控件前方的Checkbox來(lái)選中想要邀請(qǐng)的好友。創(chuàng)建按鈕的單擊事件代碼如下:try {WebHL.BLL.TBGroupMessagegroupMessage=newWebHL.BLL.TBGroupMessage();WebHL.Model.TBGroupMessagemodel=newWebHL.Model.TBGroupMessage();WebHL.BLL.TBGroupBeLongUsergroupBelongUser=newWebHL.BLL.TBGroupBeLongUser();WebHL.Model.TBGroupBeLongUserbelongModel=newWebHL.Model.TBGroupBeLongUser();if(groupMessage.IsMax(createrId)){return"你已經(jīng)到達(dá)最大的創(chuàng)建群個(gè)數(shù)";}model.BelongUserId=createrId;model.CreateTime=DateTime.Now;model.GroupCallBroad=callBroad;model.GroupInterduce=introduce;model.GroupName=groupName;model.Id=groupMessage.Add(model);for(inti=0;i<belongUserId.Length;i++){belongModel.BelongGroupId=model.Id;belongModel.BelongUserId=Convert.ToInt32(belongUserId[i]);belongModel.CreateTime=DateTime.Now;groupBelongUser.Add(belongModel);}belongModel.BelongGroupId=model.Id;belongModel.BelongUserId=createrId;belongModel.CreateTime=DateTime.Now;groupBelongUser.Add(belongModel);return"添加成功!";}頁(yè)面效果如下圖所示:5.17添加群收發(fā)群消息模塊收發(fā)群消息算法流程圖開(kāi)始開(kāi)始是否正確操作成功提示操作失敗提示結(jié)束添加信息到群消息數(shù)據(jù)表TrueFalse用戶群信息核對(duì)信息格式是否正確TrueFalse開(kāi)始查找群信息是否成功顯示群消息操作失敗提示結(jié)束TrueFalse算法描述MainFrm.aspx頁(yè)面,和普通消息類似,發(fā)送消息和接收消息。發(fā)送的消息可以給群中所有的成員收到。5.20群消息發(fā)送窗口用戶群管理模塊用戶群管理算法流程圖開(kāi)始開(kāi)始是否正確修改用戶群信息操作失敗提示結(jié)束顯示用戶群數(shù)據(jù)TrueFalse用戶信息核對(duì)信息格式是否成功TrueFalseTrueFalse是否成功操作成功提示操作失敗提示算法描述GroupMessageManage.aspx頁(yè)面,通過(guò)TreeView控件選擇某一個(gè)創(chuàng)建的群,在頁(yè)面中顯示此群中相關(guān)的信息。用戶可以修改相應(yīng)的信息。在右邊的框中可以選中群成員,并將其刪除。5.22用戶群管理窗口6技術(shù)支持6.1AJAX技術(shù)由于系統(tǒng)需要不斷的發(fā)送和接受消息,如果每次都刷新頁(yè)面的話,系統(tǒng)想效率會(huì)大大的下降,而且增加的網(wǎng)絡(luò)的的負(fù)擔(dān)。作為用戶實(shí)際上也不愿意看到頁(yè)面刷新時(shí)出現(xiàn)的空白網(wǎng)頁(yè)。在這一點(diǎn)一直都是WEB程序的一個(gè)軟肋。所以我會(huì)在系統(tǒng)中添加大量的AJAX技術(shù),減少了頁(yè)面大范圍的刷新,盡可能的降低網(wǎng)絡(luò)的負(fù)擔(dān)。AJAX全稱為“AsynchronousJavaScriptandXML”(異步JavaScript和XML),是指一種創(chuàng)建交互式網(wǎng)頁(yè)應(yīng)用的網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)。它有機(jī)地包含了以下幾種技術(shù):基于WEB標(biāo)準(zhǔn)(standards-basedpresentation)XHTML+CSS的表示; 使用DOM(DocumentObjectModel)進(jìn)行動(dòng)態(tài)顯示及交互;使用XML和XSLT進(jìn)行數(shù)據(jù)交換及相關(guān)操作;使用XMLRequest進(jìn)行異步數(shù)據(jù)查詢、檢索;使用JavaScript將所有的東西綁定在一起。AJAX的給我們帶來(lái)的好處大家基本上都深有體會(huì),在這里我只簡(jiǎn)單的講幾點(diǎn):1、最大的一點(diǎn)是頁(yè)面無(wú)刷新,在頁(yè)面內(nèi)與服務(wù)器通信,給用戶的體驗(yàn)非常好;2、使用異步方式與服務(wù)器通信,不需要打斷用戶的操作,具有更加迅速的響應(yīng)能力;3、可以把以前一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶端,利用客戶端閑置的能力來(lái)處理,減輕服務(wù)器和帶寬的負(fù)擔(dān),節(jié)約空間和寬帶租用成本。并且減輕服務(wù)器的負(fù)擔(dān),AJAX的原則是“按需取數(shù)據(jù)”,可以最大程度的減少冗余請(qǐng)求,和響應(yīng)對(duì)服務(wù)器造成的負(fù)擔(dān);4、基于標(biāo)準(zhǔn)化的并被廣泛支持的技術(shù),不需要下載插件或者小程序。原理:AJAX利用一個(gè)構(gòu)建到所有現(xiàn)代瀏覽器內(nèi)部的對(duì)象XMLRequest來(lái)實(shí)現(xiàn)發(fā)送和接收請(qǐng)求與響應(yīng)信息。一個(gè)經(jīng)由XMLRequest對(duì)象發(fā)送的請(qǐng)求并不要求頁(yè)面中擁有或回寄一個(gè)<form>元素。AJAX中的"A"代表了"異步",這意味著XMLRequest對(duì)象的send()方法可以立即返回,從而讓W(xué)eb頁(yè)面上的其它HTML/JavaScript繼續(xù)其瀏覽器端處理而由服務(wù)器處理請(qǐng)求并發(fā)送響應(yīng)。盡管缺省情況下請(qǐng)求是異步進(jìn)行的,但是,你可以選擇發(fā)送同步請(qǐng)求,這將會(huì)暫停其它WEB頁(yè)面的處理,直到該頁(yè)面接收到服務(wù)器的響應(yīng)為止。6.2。它提供了平臺(tái)互用性和可伸縮的數(shù)據(jù)訪問(wèn)。ADO.NET增強(qiáng)了對(duì)非連接編程模式的支持,并支持RICHXML。由于傳送的數(shù)據(jù)都是XML格式的,因此任何能夠讀取XML格式的應(yīng)用程序都可以進(jìn)行數(shù)據(jù)處理。事實(shí)上,接受數(shù)據(jù)的組件不一定要是ADO.NET組件,它可以是基于一個(gè)MicrosoftVisualStudio的解決方案,也可以是任何運(yùn)行在其它平臺(tái)上的任何應(yīng)用程序。主要類:Connection類:Connection對(duì)象主要是開(kāi)啟程序和數(shù)據(jù)庫(kù)之間的連結(jié)。沒(méi)有利用連結(jié)對(duì)象將數(shù)據(jù)庫(kù)打開(kāi),是無(wú)法從數(shù)據(jù)庫(kù)中取得數(shù)據(jù)的。這個(gè)物件在ADO.NET的最底層,我們可以自己產(chǎn)生這個(gè)對(duì)象,或是由其它的對(duì)象自動(dòng)產(chǎn)生。Command類:Command對(duì)象主要可以用來(lái)對(duì)數(shù)據(jù)庫(kù)發(fā)出一些指令,例如可以對(duì)數(shù)據(jù)庫(kù)下達(dá)查詢、新增、修改、刪除數(shù)據(jù)等指令,以及呼叫存在數(shù)據(jù)庫(kù)中的預(yù)存程序等。這個(gè)對(duì)象是架構(gòu)在Connection對(duì)象上,也就是Command對(duì)象是透過(guò)連結(jié)到數(shù)據(jù)源。DataAdapter類:DataSetCommand對(duì)象主要是在數(shù)據(jù)源以及DataSet之間執(zhí)行數(shù)據(jù)傳輸?shù)墓ぷ?,它可以透過(guò)Command對(duì)象下達(dá)命令后,并將取得的數(shù)據(jù)放入DataSet對(duì)象中。這個(gè)對(duì)象是架構(gòu)在Command對(duì)象上,并提供了許多配合DataSet使用的功能。在Beta2版中DataSetCommand物件會(huì)更名為DataAdapter。DataSet類:DataSet這個(gè)對(duì)象可以視為一個(gè)暫存區(qū)(Cache),可以把從數(shù)據(jù)庫(kù)中所查詢到的數(shù)據(jù)保留起來(lái),甚至可以將整個(gè)數(shù)據(jù)庫(kù)顯示出來(lái)。DataSet的能力不只是可以儲(chǔ)存多個(gè)Table而已,還可以透過(guò)DataSetCommand對(duì)象取得一些例如主鍵等的數(shù)據(jù)表結(jié)構(gòu),并可以記錄數(shù)據(jù)表間的關(guān)聯(lián)。DataSet對(duì)象可以說(shuō)是ADO.NET中重量級(jí)的對(duì)象,這個(gè)對(duì)象架構(gòu)在DataSetCommand對(duì)象上,本身不具備和數(shù)據(jù)源溝通的能力;也就是說(shuō)我們是將DataSetCommand對(duì)象當(dāng)做DataSet對(duì)象以及數(shù)據(jù)源間傳輸數(shù)據(jù)的橋梁。DataReader類:當(dāng)我們只需要循序的讀取數(shù)據(jù)而不需要其它操作時(shí),可以使用DataReader對(duì)象。DataReader對(duì)象只是一次一筆向下循序的讀取數(shù)據(jù)源中的數(shù)據(jù),而且這些數(shù)據(jù)是只讀的,并不允許作其它的操作。因?yàn)镈ataReader在讀取數(shù)據(jù)的時(shí)候限制了每次只讀取一筆,而且只能只讀,所以使用起來(lái)不但節(jié)省資源而且效率很好。使用DataReader對(duì)象除了效率較好之外,因?yàn)椴挥冒褦?shù)據(jù)全部傳回,故可以降低網(wǎng)絡(luò)的負(fù)載。6.3加密算法對(duì)稱加密算法,數(shù)據(jù)發(fā)信方將明文(原始數(shù)據(jù))和加密密鑰一起經(jīng)過(guò)特殊加密算法處理后,使其變成復(fù)雜的加密密文發(fā)送出去。收信方收到密文后,若想解讀原文,則需要使用加密用過(guò)的密鑰及相同算法的逆算法對(duì)密文進(jìn)行解密,才能使其恢復(fù)成可讀明文。在對(duì)稱加密算法中,使用的密鑰只有一個(gè),發(fā)收信雙方都使用這個(gè)密鑰對(duì)數(shù)據(jù)進(jìn)行加密和解密。由于用戶所有的聊天信息全部存放在數(shù)據(jù)庫(kù)中,為了確保用戶聊天信息的安全,以及用戶的隱私。對(duì)用戶的聊天記錄才用了對(duì)稱加密算法進(jìn)行加密,在寫(xiě)進(jìn)數(shù)據(jù)庫(kù)之前,用加密算法進(jìn)行數(shù)據(jù)加密。用戶讀取消息后再同解密算法進(jìn)行消息的還原。主要的對(duì)稱加密算法如下所示:stringsKey="abcdefgh";//密鑰publicstringEncryptEncode(stringpToEncrypt){Using(DESCryptoServiceProviderdes=newDESCryptoServiceProvider()){byte[]inputByteArray=Encoding.UTF8.GetBytes(pToEncrypt);des.Key=ASCIIEncoding.ASCII.GetBytes(sKey);des.IV=ASCIIEncoding.ASCII.GetBytes(sKey);System.IO.MemoryStreamms=newSystem.IO.MemoryStream();using(CryptoStreamcs=newCryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write)){cs.Write(inputByteArray,0,inputByteArray.Length);cs.FlushFinalBlock();cs.Close();}stringstr=Convert.ToBase64String(ms.ToArray());ms.Close();returnstr;}}publicstringDecrypt(stringpToDecrypt){byte[]inputByteArray=Convert.FromBase64String(pToDecrypt);using(DESCryptoServiceProviderdes=newDESCryptoServiceProvider()){des.Key=ASCIIEncoding.ASCII.GetBytes(sKey);des.IV=ASCIIEncoding.ASCII.GetBytes(sKey);System.IO.MemoryStreamms=newSystem.IO.MemoryStream();using(CryptoStreamcs=newCryptoStream(ms,des.CreateDecryptor(),CryptoStreamMode.Write)){cs.Write(inputByteArray,0,inputByteArray.Length);cs.FlushFinalBlock();cs.Close();}stringstr=Encoding.UTF8.GetString(ms.ToArray());ms.Close();returnstr;}}7系統(tǒng)測(cè)試7.1測(cè)試的目的軟件測(cè)試是軟件代碼生成后必不可少的一步,軟件測(cè)試包括功能代碼的測(cè)試、系統(tǒng)功能的完整性測(cè)試、性能測(cè)試、安全性測(cè)試、數(shù)據(jù)庫(kù)的一致性測(cè)試等,測(cè)試的目的是盡可能多的發(fā)現(xiàn)軟件制作過(guò)程中的錯(cuò)誤,通過(guò)測(cè)試使軟件的錯(cuò)誤減少,使系統(tǒng)的可靠性進(jìn)一步提高。7.2軟件測(cè)試的意義軟件質(zhì)量保證是貫穿軟件開(kāi)發(fā)全過(guò)程的活動(dòng),但最為關(guān)鍵的步驟是軟件測(cè)試,軟件測(cè)試是對(duì)軟件規(guī)格說(shuō)明、軟件設(shè)計(jì)和編碼的最后復(fù)審,目的是在軟件產(chǎn)品交付之前盡可能發(fā)現(xiàn)軟件中潛伏的錯(cuò)誤。大量統(tǒng)計(jì)表明,軟件測(cè)試工作量往往占軟件開(kāi)發(fā)總工作量的40%以上。這個(gè)階段是用來(lái)測(cè)試程序,找出系統(tǒng)Bug并修改錯(cuò)誤的過(guò)程。雖然在每個(gè)模塊開(kāi)發(fā)的過(guò)程中都進(jìn)行過(guò)階段性的測(cè)試,但是現(xiàn)場(chǎng)整體測(cè)試更接近將來(lái)系統(tǒng)投入使用的情況。測(cè)試時(shí)首先對(duì)各個(gè)模塊的功能進(jìn)行測(cè)試,對(duì)照需求分析逐個(gè)測(cè)試系統(tǒng)的功能;然后對(duì)照數(shù)據(jù)庫(kù)的內(nèi)容察看各個(gè)查詢功能反饋的結(jié)果是否正確;最后整體運(yùn)行系統(tǒng),測(cè)試各個(gè)模塊之間的銜接是否會(huì)對(duì)系統(tǒng)的整體性能發(fā)生影響。為了測(cè)試程序的健壯性,還可以在測(cè)試過(guò)程中故意輸入一些錯(cuò)誤的數(shù)據(jù),保證系統(tǒng)能夠自行處理這些錯(cuò)誤,使得系統(tǒng)在日常的使用中不會(huì)由于工作失誤而無(wú)法運(yùn)行。在測(cè)試過(guò)程中,確實(shí)發(fā)現(xiàn)了很多的錯(cuò)誤。一部分因?yàn)殚_(kāi)發(fā)環(huán)境與實(shí)際使用環(huán)境不同產(chǎn)生的,比如說(shuō)圖片的效果不對(duì),或者控件的位置出現(xiàn)偏移等等;還有數(shù)據(jù)庫(kù)的連接問(wèn)題,在不同的計(jì)算機(jī)上因?yàn)橛?jì)算機(jī)名的不同導(dǎo)致無(wú)法連接數(shù)據(jù)庫(kù),這些問(wèn)題通過(guò)現(xiàn)場(chǎng)的調(diào)試基本得到了解決。軟件測(cè)試的內(nèi)容(1)根據(jù)需求分析階段內(nèi)容,劃定系統(tǒng)測(cè)試的功能范圍,即測(cè)試用戶需要的功能是否已經(jīng)在系統(tǒng)中得到體現(xiàn)和實(shí)現(xiàn)。(2)分模塊測(cè)試軟件的功能,包括軟件的界面要求、功能實(shí)現(xiàn)、穩(wěn)定性要求、是否達(dá)到操作便捷、靈活性要求、安全性要求;各模塊之間的相互作用關(guān)系是否與需求分析設(shè)計(jì)中相一致等。(3)綜合測(cè)試,在進(jìn)行了分塊
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 玉溪師范學(xué)院《社會(huì)查研究與方法》2022-2023學(xué)年第一學(xué)期期末試卷
- 2024年熔化焊接與熱切割理論考試1000題(附答案)
- 廣州體育學(xué)院學(xué)科教案
- 仁愛(ài)課件教學(xué)課件
- 供應(yīng)室普包課件大全
- 2024年電影制作項(xiàng)目評(píng)價(jià)分析報(bào)告
- 2023年工業(yè)涂料水性色漿項(xiàng)目評(píng)價(jià)分析報(bào)告
- 父與子課件教學(xué)課件
- 《大學(xué)文科數(shù)學(xué)》教學(xué)大綱 苗巧云
- 2019粵教版 高中美術(shù) 選擇性必修1 繪畫(huà)《第一單元 擁有發(fā)現(xiàn)美的眼睛》大單元整體教學(xué)設(shè)計(jì)2020課標(biāo)
- 大學(xué)生職業(yè)規(guī)劃4篇匯編
- GB/T 42461-2023信息安全技術(shù)網(wǎng)絡(luò)安全服務(wù)成本度量指南
- (完整word版)扣字詞匯124
- 2023屆廣東省廣州市高三一模語(yǔ)文現(xiàn)代文閱讀小說(shuō)《給我一枝槍》講評(píng)課件
- 中職世界歷史全一冊(cè)教案
- 毛栗煤礦 礦業(yè)權(quán)價(jià)款計(jì)算結(jié)果的報(bào)告
- 黃桃種植技術(shù) 種植黃桃如何澆水
- Q-CR 783.1-2021 鐵路通信網(wǎng)絡(luò)安全技術(shù)要求 第1部分:總體技術(shù)要求
- 2023年黑龍江建筑職業(yè)技術(shù)學(xué)院高職單招(數(shù)學(xué))試題庫(kù)含答案解析
- GB/T 27548-2011移動(dòng)式升降工作平臺(tái)安全規(guī)則、檢查、維護(hù)和操作
- GB/T 15007-2017耐蝕合金牌號(hào)
評(píng)論
0/150
提交評(píng)論