新聞發(fā)布系統(tǒng)

新聞發(fā)布管理系統(tǒng)設(shè)計與實現(xiàn)
訪問:https://www.aiwave.site/ 可以免費領(lǐng)取這篇論文對應(yīng)的原文和代碼
摘 要

本新聞發(fā)布管理系統(tǒng)是針對目前新聞發(fā)布的實際需求,從實際工作出發(fā),對過去的新聞發(fā)布管理系統(tǒng)存在的問題進行分析,結(jié)合計算機系統(tǒng)的結(jié)構(gòu)、概念、模型、原理、方法,在計算機各種優(yōu)勢的情況下,采用目前最流行的B/S結(jié)構(gòu)和java中流行的MVC三層設(shè)計模式和myeclipse編輯器、MySQL數(shù)據(jù)庫設(shè)計并實現(xiàn)的 。本新聞發(fā)布管理系統(tǒng)主要包括系統(tǒng)用戶管理模塊、校內(nèi)新聞管理模塊、校外新聞管理模塊、體育新聞管理模塊、用戶菜單模塊、退出模塊和后臺管理系統(tǒng)等多個模塊。它幫助新聞發(fā)布管理實現(xiàn)了信息化、網(wǎng)絡(luò)化,通過測試,實現(xiàn)了系統(tǒng)設(shè)計目標(biāo),相比傳統(tǒng)的管理模式,本系統(tǒng)合理的利用了新聞發(fā)布管理數(shù)據(jù)資源,有效的減少了新聞發(fā)布管理的經(jīng)濟投入,大大提高了新聞發(fā)布管理的效率。

關(guān)鍵詞:新聞發(fā)布管理;MVC模式;MySQL數(shù)據(jù)庫

ABSTRACT

This news release management system is aimed at the actual needs of the current news release, starting from the actual work, the past news release management system problems are analyzed, combined with the structure, concept, model, principle, method of the computer system, in the case of various advantages of the computer, the use of the most popular B/S structure and Java in the popular MVC three-layer design mode and myeclipse editor, MySQL database design and implementation. This news release management system mainly includes multiple modules such as system user management module, on-campus news management module, off-campus news management module, sports news management module, user menu module, exit module and background management system. It helps the news release management to achieve informationization, networking, through testing, to achieve the system design goals, compared to the traditional management mode, the system reasonable use of news release management data resources, effectively reduce the economic investment of news release management, greatly improve the efficiency of news release management.

key words:news release management system; The MVC pattern; Essentially a database

[]{#_Toc6289 .anchor}目 錄

ABSTRACT II

目 錄 IV

第1章 緒論 1

1.1開發(fā)背景意義 1

1.2研究內(nèi)容 1

第2章 主要技術(shù)和工具 1

2.1 JSP語言 1

2.2 MySQL數(shù)據(jù)庫 1

2.3 jsp技術(shù) 2

2.4MVC模式 3

第3章 系統(tǒng)分析 1

3.1可行性分析 1

3.1.1經(jīng)濟可行性 1

3.1.2技術(shù)可行性 1

3.1.3操作可行性 1

3.2需求分析 1

3.3業(yè)務(wù)流程分析 2

3.4數(shù)據(jù)流程分析 2

第4章 系統(tǒng)設(shè)計 4

4.1系統(tǒng)結(jié)構(gòu)設(shè)計 4

4.2功能模塊設(shè)計 5

4.3數(shù)據(jù)庫設(shè)計 6

4.3.1數(shù)據(jù)庫設(shè)計概述 6

4.3.2概念設(shè)計 6

4.3.3表設(shè)計 6

第5章 系統(tǒng)實現(xiàn) 10

5.1基本任務(wù) 10

5.2登錄模塊的實現(xiàn) 10

5.2.1首頁實現(xiàn) 10

5.2.2管理員后臺登錄 11

5.3用戶模塊的實現(xiàn) 12

5.3.1需求管理模塊的實現(xiàn) 12

5.4管理員模塊的實現(xiàn) 13

5.4.1用戶管理模塊的實現(xiàn) 13

5.5.2工作人員模塊的實現(xiàn) 14

第6章 系統(tǒng)測試 16

6.1測試目的 16

6.2測試概述 16

6.3單元測試 16

6.3.1注冊測試 16

6.3.2登錄測試 17

6.4集成測試 18

第7章 總結(jié) 19

致 謝 20

參考文獻 20

第1章 緒論

1.1開發(fā)背景意義

隨著信息化技術(shù)開始逐漸發(fā)展,計算機應(yīng)用技術(shù)逐漸體現(xiàn)出優(yōu)勢來。接著,大量的電腦進入了千家萬戶,企事業(yè)單位、高校、機關(guān)等部門。信息化時代逐漸來臨,新聞發(fā)布管理成為互聯(lián)網(wǎng)時代下媒體管理的核心內(nèi)容。隨著現(xiàn)代新聞發(fā)布的快速發(fā)展,可以說新聞發(fā)布管理已經(jīng)逐漸成為現(xiàn)代新聞發(fā)布管理過程中最為重要的部分之一。但是一直以來我國傳統(tǒng)的新聞發(fā)布并沒有建立一套完善的行之有效的新聞發(fā)布管理系統(tǒng),傳統(tǒng)的新聞發(fā)布管理已經(jīng)無法適應(yīng)高速發(fā)展,無論是從效率還是從效果來看都遠遠的和預(yù)計相差甚多,可以斷言,傳統(tǒng)的新聞發(fā)布管理模式已經(jīng)不再適應(yīng),甚至已經(jīng)拖累了發(fā)展。因此,需要一個操作方便,高效的管理體系。本次系統(tǒng)開發(fā),主要以新聞發(fā)布管理為對象,根據(jù)需求來完成功能設(shè)計[1][2]

1.2研究內(nèi)容

  1. 不同用戶的登錄問題:根據(jù)用戶的類別(超級管理員、普通用戶)實現(xiàn)用戶操作權(quán)限的區(qū)分并顯示不同的操作界面。

  2. 數(shù)據(jù)庫的連接問題:數(shù)據(jù)庫連接為系統(tǒng)中的關(guān)鍵技術(shù)。

  3. 數(shù)據(jù)的一致性和安全問題:本系統(tǒng)必須保證數(shù)據(jù)的一致性和安全,才能實現(xiàn)有效的管理。不能讓沒有權(quán)限的用戶對數(shù)據(jù)進行操作并且定期對數(shù)據(jù)庫進行備份。

  4. 界面開發(fā):系統(tǒng)界面的設(shè)計很重要,要使界面具有親和力。

  5. 分析新聞發(fā)布管理化現(xiàn)狀;

  6. 研究新聞發(fā)布管理系統(tǒng)的現(xiàn)狀及存在的問題;

  7. 研究系統(tǒng)平臺的總體架構(gòu)、總體設(shè)計、數(shù)據(jù)庫設(shè)計、數(shù)據(jù)庫安全設(shè)計及功能設(shè)計;

  8. 研究平臺各個子系統(tǒng)的功能及實現(xiàn)的方法、信息技術(shù)的融合、信息安全技術(shù)的維護;

  9. 進行新聞發(fā)布管理系統(tǒng)的功能設(shè)計。

第2章 主要技術(shù)和工具

2.1 JSP語言

本系統(tǒng)的開發(fā)主要用JSP(Hypertext Preprocessor,超文本預(yù)處理器)這一門開發(fā)語言。作為開發(fā)語言,這是一種通用的開源腳本語言。這種語法主要是將C語言、Java和Perl等語言的相關(guān)特點進行總結(jié)吸收形成自身特點,使得更加方便學(xué)習(xí),當(dāng)前廣泛在Web領(lǐng)域進行使用。此語法的獨特之處在于將C、Java、Perl這三種語言進行了歸納,并創(chuàng)新出JSP具有自己特點的語法。它在執(zhí)行動態(tài)網(wǎng)頁方面相對于CGI和Perl語言更加高效。用動態(tài)頁面如果是使用JSP語言,那么相對于其它的編程語言,JSP的執(zhí)行主要是體現(xiàn)在將程序嵌入到HTML文檔中,相對于其它語言,其執(zhí)行的效率一般都領(lǐng)先于其它的語言。此外,JSP編譯后代碼方面也是做得比較好的,一般其編譯能夠使代碼的運行速度比一般語言都要快[7][8]。

其主要特性有以下幾個方面:

1)免費性

和其它技術(shù)相比,JSP本身免費且是開源代碼。

2)快捷性

使用JSP編程的程序一般開發(fā)比較快,而且系統(tǒng)運行也比較快,也易于學(xué)習(xí)[2]。嵌入于HTML的這種方式,使其相對于其它開發(fā)語言編輯起來相對簡單,實用性也更加強,對初學(xué)者是比較適用的。

3)跨平臺性強

由于JSP是運行在服務(wù)器的腳本,可以運行在UNIX、LINUX、WINDOWS、MacOS、Android等平臺

4)效率高

JSP占用相當(dāng)少的系統(tǒng)資源。

JSP是面向?qū)ο笄要毩⒂诩軜?gòu)的動態(tài)腳本語言,使用JSP和HTML編寫WEB頁面,JSP服務(wù)器先對頁面的JSP代碼進行解析,然后把處理后的結(jié)果連同HTML內(nèi)容一起傳送到訪問端的瀏覽器。JSP是一種源代碼開放程序,擁有很好的跨平臺兼容性。JSP代碼可以在Window系統(tǒng)以及許多版本的linux系統(tǒng)上完美運行。

JSP語言是不需要任何特殊的開發(fā)環(huán)境的,所以用戶可以直接在WEB頁面中輸入JSP命令代碼。在WEB頁面中,所有的JSP代碼都被放置在"<?JSP"和"?>"中。

2.2 MySQL數(shù)據(jù)庫

目前在國際上比較流行的數(shù)據(jù)庫管理系統(tǒng)當(dāng)中,主要有ORACLE、MySQL、SYBASE、MySQL、DB2等。MySQL2008版本具有MySQL Server 7.0版本的所有優(yōu)點,并在此基礎(chǔ)上添加很多更先進的功能,從而更加方便使用、更好的伸縮性,集成度高。由于是微軟的產(chǎn)品,因此MySQL Server 2008在兼容性可以與微軟的其他相關(guān)產(chǎn)品進行很好的適應(yīng)和結(jié)合,可以跨越Microsoft Windows 2008到Microsoft Windows 98等多種平臺。

MySQL的T-MySQL支持ANSI MySQL-92標(biāo)準(zhǔn),是結(jié)構(gòu)化查詢語言MySQL的一種。MySQL Server在身份驗證上主要采用以下方式:登錄驗證、數(shù)據(jù)庫用戶帳號許可驗證、二級安全驗證等等。且在同一時間支持MySQL Server驗證和Windows NT驗證兩種模式。

微軟的MySQL Server是較為完善的C/S系統(tǒng)。MySQL Server需要Windows NT平臺,而Windows NT可以支持Intel 386,Power PC,MIPS,Alpha PC和RISC等平臺,它使MySQL Server具備非常完美的功能。

MySQL Server 2008中具有失敗轉(zhuǎn)移集群和數(shù)據(jù)庫鏡像技術(shù),失敗轉(zhuǎn)移集群和數(shù)據(jù)庫鏡像技術(shù)可以確保企業(yè)向員工、客戶和合作伙伴提交的應(yīng)用系統(tǒng)高度可靠和可用。微軟的MySQL Server 2008在設(shè)計的時候引入了一套集成管理工具和管理應(yīng)用編程接口(APIs),對企業(yè)提供易用性、可管理性和對大型MySQL Server配置的支持。由于采用了數(shù)據(jù)庫加密、相比以前版本更加安全的默認設(shè)置、對密碼政策和安全模型進行了加強以及實行了許可化控制的細化,使得企業(yè)在運用MySQL Server 2008對數(shù)據(jù)進行管理時能提供安全級別非常高的功能。

2.3 jsp技術(shù)

web 的服務(wù)平臺jsp是由Microsoft創(chuàng)建的。這個平臺最主要的功能就是可以把信息、人和設(shè)備用一種規(guī)范的,具有個性化的方法連接起來。

對于微軟來說,jsp技術(shù)是它的一個終極夢想,可以用這個技術(shù)實現(xiàn)以前完全完成不了的功能,這是一次躍進。今后,無論什么時刻,任意地點我們都可以在任何設(shè)備上進行互聯(lián)信息交互網(wǎng)。在以后會在世界形成一個巨大的全球互聯(lián)網(wǎng)的終端設(shè)備和服務(wù)中心,將會隨時成為每個人的智能型助手。到那時哪怕你沒有閑暇的時間去處理信息分析訪問,或者說不需要訪問的信息分析,一旦它得到指令,就會自主的查找相關(guān)知識智能化集成處理,更高效的處理我們交代的"使命"[9][10]。

(1)JSP Framework的兩個組件

JSP框架具有兩個不同的元素:包以及框架的軟件開發(fā)包(SDK)。

當(dāng)然若是要單純的要運行jsp程序,我們完全沒必要開發(fā)jsp應(yīng)用程序。我們只要在安裝發(fā)型包組件這里下功夫。因為jsp Framework在發(fā)行包上沒有進行過編譯,所以最后它只能編譯JSP應(yīng)用程序。

(2)框架的特點

JSP框架的兩個主要特點:跨平臺和語言。

(a)跨平臺

JSP框架程序能夠隨意跨越操作系統(tǒng)平臺和硬件環(huán)境,不管在哪臺電腦上只會編寫一遍。

(b)跨語言

. JSP框架里面一種共同的語言系統(tǒng)(CommonLanguageSystem ,稱為CLS)。規(guī)定了許多標(biāo)準(zhǔn)化的jsp Framework數(shù)據(jù)種類。

Web應(yīng)用程序可以用JSP研發(fā)出來?,F(xiàn)在已然變成了互聯(lián)網(wǎng)全新一代Web應(yīng)用程序開發(fā)工具之一,一般的編程代碼的人員已經(jīng)慢慢的開始接受、使用它了。

(3)JSP概述

JSP由微軟于1996年11月推出的Web應(yīng)用技術(shù)的發(fā)展。不單單可以看作是一個全新的框架,并且我們在工作當(dāng)中能采納任何產(chǎn)品的制備和應(yīng)用程序代碼,生成高效、動態(tài)、交互的vbscript、javascript應(yīng)用鑲嵌到HTML當(dāng)中。

(4)JSP的特點

(a)代碼邏輯和顯示頁面分離

JSP包含程序和美工兩個部分,文件從頭到尾html標(biāo)簽和<%%>代碼交錯。通常,編程員按照以前所計劃的開始編寫代碼,接著是美工按照設(shè)計頁面和編程員討論該用哪種布局頁面最為合適,最后編程員把設(shè)計鑲嵌進程序。

(b)編譯運行

我們采用了一種虛構(gòu)的編程框架,把VBScript和JavaScript作為編程語言,如果發(fā)現(xiàn)操作系統(tǒng)挪用了JSP源代碼一次,那么我們肯定正在訪問某個頁面。

(c)緩存

由于JSP的緩存基本上沒有,通常只能修改數(shù)據(jù)庫來提高性能。并介紹了緩存的概念,一個高速緩存頁的一頁當(dāng)中,對一些參數(shù)的控制和緩存的頁緩存,緩存里的數(shù)據(jù)可以在最大水平上,幫助我們克服這個難題。

(d)代碼隱藏

編碼后生成的代碼更易于編寫,具有更直觀的布局,大大削減了開發(fā)和維護系統(tǒng)的困難性以及制作成本 。

(5)JSP的關(guān)鍵技術(shù)

(a)WebForm

Form(表單)是一個包含不同類型和種類的容器控件,控件必需直接或間接地連接。

(b)Web Service

Web Service是Web服務(wù)調(diào)用其他Web服務(wù)方法。簡而言之,是你的網(wǎng)站可以利用其他網(wǎng)站的資源[11][12]。

2.4MVC模式

MVC是一個框架模式,有三個核心部件,即模型(Model)、視圖(View)和控制器(Controller)。模型表示應(yīng)用程序核心,視圖表示顯示數(shù)據(jù),控制器表示處理輸入。它們各自處理自己的任務(wù),將業(yè)務(wù)邏輯和數(shù)據(jù)顯示分離,便于代碼的重用。

第3章 系統(tǒng)分析

3.1可行性分析

本文系統(tǒng)將會分別從經(jīng)濟的可行性,技術(shù)的可行性以及操作的可行性等方面進行全面的可行性的分析。

3.1.1經(jīng)濟可行性

由于系統(tǒng)開發(fā)的工具和軟件都是可以免費使用的,因此系統(tǒng)開發(fā)的費用很少,甚至只需要少許的費用就可以開發(fā)出本系統(tǒng),也可以忽略不計;再加上通過系統(tǒng)的實施可以提高用戶文件的私密性,最大程度的保護用戶的信息安全,因此,從這些方面就可以說經(jīng)濟上是可行的 [14][15]。

2.測試的方法

測試方法主要有人工測試和機器測試。

(1)人工測試

人工測試又稱代碼復(fù)審,包括個人復(fù)查、走查、會審三種方法[7]。

(2)機器測試

機器測試主要是由黑盒測試和白盒測試兩種方法。

在最后的測試階段,系統(tǒng)采用后黑盒測試和白盒測試想結(jié)合的方法。黑盒測試主要用于對系統(tǒng)的輸入和輸出特性進行測試,檢測功能方面存在的錯誤與可能存在的缺陷。白盒測試主要用于對軟件的過程及邏輯路徑進行測試,發(fā)現(xiàn)性能方面的錯誤。具體采用的測試方法為系統(tǒng)測試和單元測試。

3.1.2技術(shù)可行性

技術(shù)的可行性是指在當(dāng)今所擁有的技術(shù)條件之下,計算機軟件和硬件的發(fā)展能否夠滿足發(fā)展的要求。由于本系統(tǒng)開發(fā)基于java語言,在一般的計算機上就能夠滿足開發(fā)本系統(tǒng)所需要的軟硬件條件;因為它占用的內(nèi)存本來就相對較少,我們用MySQL Server數(shù)據(jù)對軟件的開發(fā)以及設(shè)計在理論上沒有問題的原因是:它占用的內(nèi)存實在是太少了。

系統(tǒng)設(shè)計的主要意義在于,一方面,對于新聞發(fā)布來講,系統(tǒng)上線后可以帶來很大的便利性,新聞發(fā)布管理屬于非常細致的管理模式,要求數(shù)據(jù)量大,計算機管理可以提高精確性,更為便利的就是信息的查詢,大大的提高了工作效率,改善了管理質(zhì)量;另一方面,通過系統(tǒng)的設(shè)計,自己對軟件設(shè)計有了更加深入的了解,并且產(chǎn)生了濃厚的學(xué)習(xí)興趣,在對問題分析方面有了獨特的方式,是進入社會之前一次很好的鍛煉機會

3.1.3操作可行性

作為當(dāng)今大部分用戶來講,都是受過良好教育,具有高素質(zhì)的人才,都能十分容易的使用電腦進行各種操作,是以本文在開發(fā)設(shè)計上使用java技術(shù)進行設(shè)計的新聞發(fā)布管理系統(tǒng),其操作是完全可行的。

通過上述分析,可以確定該系統(tǒng)具有實際開發(fā)的價值和可能性。

3.2需求分析

針對現(xiàn)存的問題和需要,通過功能需求的分析,特建立了數(shù)字化、信息化的新聞發(fā)布管理系統(tǒng)。

本系統(tǒng)主要包含了用戶管理、系統(tǒng)管理多個功能模塊。下面分別簡單闡述一下這幾個功能模塊需求。

管理員的登錄模塊:管理員登錄系統(tǒng)對本系統(tǒng)其他管理模塊進行管理。

用戶的登錄模塊:用戶登錄本系統(tǒng),對個人的信息等進行查詢,操作可使用的功能。

用戶注冊模塊:游客用戶可以進行用戶注冊,系統(tǒng)會反饋是否注冊成功。

添加管理員模塊:向本系統(tǒng)中添加更多的管理人員,管理員包括普通管理員和超級管理員。

系統(tǒng)管理列表:將數(shù)據(jù)庫的商品表以列表的形式呈現(xiàn)給管理員。

添加系統(tǒng)管理:實現(xiàn)管理員添加需求服務(wù),應(yīng)該包括需求服務(wù)。

修改系統(tǒng)管理:實現(xiàn)管理員修改需求服務(wù),包括修改需求服務(wù)。

工作人員管理模塊:

工作人員列表:將數(shù)據(jù)庫的商品表以列表的形式呈現(xiàn)給管理員。

添加工作人員:實現(xiàn)管理員添加工作人員,應(yīng)該包括工作人員。

修改工作人員:實現(xiàn)管理員修改工作人員,包括修改工作人員。

用戶模塊:

資料管理:用戶登錄本系統(tǒng)??梢詫ψ约旱膫€人主頁進行查看。

系統(tǒng)信息:用戶可以查看自己的系統(tǒng)提示信息。

修改資料:用戶可以修改自己的賬號密碼。

信息搜索:用戶可以通過關(guān)鍵字搜索站內(nèi)信息。

密碼修改:用戶可以修改個人登錄密碼。

系統(tǒng)管理模塊:包括數(shù)據(jù)備份。

退出模塊:

管理員退出:管理員用來退出系統(tǒng)。

用戶退出:用戶用來退出系統(tǒng)。

3.3業(yè)務(wù)流程分析

總體業(yè)務(wù)流程:以用戶的身份在登錄頁面輸入賬號和密碼,經(jīng)過數(shù)據(jù)庫身份驗證,驗證成功后登錄系統(tǒng)主頁,根據(jù)不同角色的用戶,使用系統(tǒng)時,判斷不同的菜單,以管理員的身份在登錄頁面輸入賬號和密碼,經(jīng)過數(shù)據(jù)庫身份驗證,驗證成功后登錄系統(tǒng)主頁,可以使用系統(tǒng),管理系統(tǒng)等功能操作。

3.4數(shù)據(jù)流程分析

數(shù)據(jù)流圖的簡稱為DFD,是通過使用圖形的方法對系統(tǒng)所具備的邏輯功能進行闡述,描述系統(tǒng)數(shù)據(jù)的流向和邏輯變換。由于該方法能將難以闡述的問題進行表述,因此被開發(fā)者廣泛應(yīng)用,是當(dāng)前應(yīng)用范圍較為廣泛的結(jié)構(gòu)化系統(tǒng)分析方法。

零層數(shù)據(jù)流程是流程中最抽象的一層,它包括了用戶注冊與登錄管理、用戶功能管理和檢索維護管理等功能模塊,在登錄注冊模塊使用到的數(shù)據(jù)存儲有用戶賬戶信息文檔、用戶信息文檔,用戶功能管理模塊需要的存儲是用戶動態(tài)信息文檔、圖片信息文檔,檢索維護是通過以上這些文檔信息通過關(guān)鍵詞進行搜索。

1層數(shù)據(jù)流圖中,數(shù)據(jù)實體包括普通用戶和管理員,普通用戶數(shù)據(jù)流程包括功能選擇、日常費用管理、變幻圖管理、;管理員用戶數(shù)據(jù)流程包括需求服務(wù)管理、日常費用管理、系統(tǒng)管理;普通用戶數(shù)據(jù)流包括操作信息、添加信息、瀏覽信息;管理員數(shù)據(jù)流包括添加信息、刪除信息、修改信息、查詢信息、瀏覽信息、提示信息等。

2層為管理員操作后臺數(shù)據(jù)流圖,管理員可以分別通過添加、修改和刪除來對系統(tǒng)進行管理,如下圖所示。

系統(tǒng)的2層數(shù)據(jù)流圖如下圖所示。

[圖片上傳失敗...(image-8a48fe-1757488492417)]

圖3-4系統(tǒng)數(shù)據(jù)流圖(2層)

第4章 系統(tǒng)設(shè)計

4.1系統(tǒng)結(jié)構(gòu)設(shè)計

系統(tǒng)流程圖如下所示:

C:/Users/yuanxin/AppData/Local/Temp/wps.noQsZEwps

系統(tǒng)主要是分為管理員端設(shè)計與用戶端設(shè)計。用戶端模塊主要是系統(tǒng)中普通用戶在注冊、登錄系統(tǒng)可以看到自己的基本信息,維護自己的信息;管理員端模塊主要是管理員登錄后對整個系統(tǒng)相關(guān)操作進行處理,可進行管理員的添加和刪除,可對系統(tǒng)中的用戶進行管理。

用戶登錄流程圖如下所示:

[圖片上傳失敗...(image-a851cc-1757488492418)]

4.2功能模塊設(shè)計

  1. 注冊模塊:游客用戶可以系統(tǒng)進行賬號注冊,賬號注冊需要輸入的數(shù)據(jù),有用戶名、密碼、確認密碼、郵箱、qq等,提交注冊信息后,系統(tǒng)通過js代碼判斷用戶輸入的注冊數(shù)據(jù)是否符合規(guī)格,如果符合規(guī)格后,在系統(tǒng)數(shù)據(jù)庫中新增一個用戶記錄,為了安全性,使用md5加密算法完成密碼的加密,然后存儲數(shù)據(jù)庫。

  2. 登錄模塊:在用戶登錄過程中,包含用戶名、密碼和驗證碼,系統(tǒng)需要先對驗證碼進行正錯判斷,若用戶登錄使用了驗證碼,則用戶登錄時除了需要輸入用戶名和密碼外,還要輸入驗證碼。在判斷驗證碼為正確后,判斷用戶名及密碼,由于用戶密碼是用MD5加密過的,所以在對用戶密碼判斷時應(yīng)先對密碼進行MD5轉(zhuǎn)換后再進行判斷,當(dāng)用戶名或密碼不正確時,返回登錄頁面顯示錯誤信息。

  3. 系統(tǒng)管理模塊:用戶發(fā)布需求服務(wù),需求服務(wù)存儲在需求服務(wù)表中,用戶點擊需求服務(wù)發(fā)布,進入需求服務(wù)頁面,提交需求服務(wù)后,管理員審核用戶添加的需求服務(wù),并管理。

3工作人員信息管理模塊:網(wǎng)站用戶信息管理、新聞分類信息管理、新聞內(nèi)容信息管理、用戶評論信息管理、提示問題信息管理、意見反饋信息管理。

4.3數(shù)據(jù)庫設(shè)計

4.3.1數(shù)據(jù)庫設(shè)計概述

數(shù)據(jù)庫的設(shè)計在這一套開發(fā)系統(tǒng)中扮演者非常重要的角色,完善的數(shù)據(jù)庫建立可以讓其更快的完成項目。整個數(shù)據(jù)庫的創(chuàng)建是庫存管理系統(tǒng)開發(fā)和創(chuàng)立的核心技術(shù),概括的說,就是根據(jù)用戶的需求創(chuàng)立起滿足用戶的需要的數(shù)據(jù)庫。數(shù)據(jù)庫的整體設(shè)計是在軟件開發(fā)是其最主要的問題。

再考慮到數(shù)據(jù)庫設(shè)計的時候,我們首先應(yīng)該想到把這個系統(tǒng)的數(shù)據(jù)設(shè)計和處理設(shè)計密切結(jié)合起來,從而使得把整個庫存信息管理系統(tǒng)相結(jié)合起來。

以前采用手工整理的方法來對信息結(jié)構(gòu)復(fù)雜,應(yīng)用環(huán)境多樣的數(shù)據(jù)進行整理。使用這種過時方法與整個數(shù)據(jù)整理人員的水平是緊密相關(guān)的,經(jīng)驗多的人則失誤少,反之,則出現(xiàn)的錯誤會多。數(shù)據(jù)庫設(shè)計是被認為是一項技巧而不是他人眼中工程項目,缺少正確的理論知識和合適的解決方法的支持。因為在交付運行了一段時間之后總有些莫名其妙的問題發(fā)生,使這個軟件系統(tǒng)的質(zhì)量很難得到保障從而導(dǎo)致出現(xiàn)了很多的損失。以是只有采取新的數(shù)據(jù)庫管理方式才能更好的解決這些根本性的問題。近些年來,人們不斷的探索和挖掘數(shù)據(jù)庫其中的奧妙,以便更快更好地運行整個系統(tǒng)。

4.3.2概念設(shè)計

一個完整的數(shù)據(jù)分析過程與這個數(shù)據(jù)庫的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)有十分密切的聯(lián)系,我們需要一系列操作來完成對應(yīng)用數(shù)據(jù)庫所使用的信息進行確認、編纂、組織、挑選。我們可以采用特定的方法來獲取有關(guān)用戶的所有的有效信息,從而使這些有用信息可以直接成為數(shù)據(jù)庫的重要數(shù)據(jù)。

我們在數(shù)據(jù)庫分析中采用E-R圖來建立相對應(yīng)的關(guān)系,它有實體、關(guān)系、屬性三種概念。實體可以說是一個用來維持和不斷利用數(shù)據(jù)的大集合;屬性可以說是這個物體的所具有的特點;關(guān)系很明顯指的就是每個數(shù)據(jù)實體之間的種種聯(lián)系,關(guān)系給各個實體之間建立起了相對應(yīng)的模型。

4.3.3表設(shè)計

1. 建立最符合客戶需求的數(shù)據(jù)庫計劃。

2. 對數(shù)據(jù)庫進行規(guī)范化處理,避免一些不必要的錯誤。

3. 數(shù)據(jù)庫完整性。

4. 每個用戶權(quán)限的要求。

5. 應(yīng)用程序的性能需求,設(shè)計數(shù)據(jù)庫時必須利用MySQL中的各個功能來維持運行。

6. 數(shù)據(jù)庫定期的維護。

在服務(wù)器上建立名為jspmygjjxthsg4242AEY3的數(shù)據(jù)庫,其中包括以下表:

admin表:

序號 字段名稱 字段類型 大小 允許為空 最大長度 備注
序號 字段名稱 字段類型 大小 允許為空 最大長度 備注
1 adminid varchar 4 自增編號 10
2 username VarChar 50 255
3 password VarChar 50 255
4 realname VarChar 50 255
5 contact VarChar 8 23
6 addtime VarChar 8 23

article表:

序號 字段名稱 字段類型 大小 允許為空 最大長度 備注
序號 字段名稱 字段類型 大小 允許為空 最大長度 備注
1 articleid VarChar 4 自增編號 10
2 title VarChar 50 255
3 bannerid VarChar 300 255
4 image VarChar 8 23
5 istop VarChar 300 255
6 isflv VarChar 300 255
7 contents VarChar 300 255
8 addtime VarChar 300 255
9 hits int 300 255

asks表:

序號 字段名稱 字段類型 大小 允許為空 最大長度 備注
序號 字段名稱 字段類型 大小 允許為空 最大長度 備注
1 asksid VarChar 4 自增編號 10
2 question VarChar 50 255
3 addtime VarChar 16 255
4 memo VarChar 50 255

banner表:

序號 字段名稱 字段類型 大小 允許為空 最大長度 備注
序號 字段名稱 字段類型 大小 允許為空 最大長度 備注
1 bannerid VarChar 4 自增編號 10
2 bannername VarChar 50 255
3 addtime VarChar 2 255
4 memo VarChar 50 255

complains表:

序號 字段名稱 字段類型 大小 允許為空 最大長度 備注
序號 字段名稱 字段類型 大小 允許為空 最大長度 備注
1 complainsid VarChar 50 255
2 usersid VarChar 300 255
3 title VarChar 50 255
4 contents VarChar 50 255
5 addtime VarChar 50 255
6 status VarChar 8 23
7 reps VarChar 50 255

fav表:

序號 字段名稱 字段類型 大小 允許為空 最大長度 備注
序號 字段名稱 字段類型 大小 允許為空 最大長度 備注
1 favid VarChar 50 255
2 usersid VarChar 50 255
3 articleid VarChar 50 255
4 addtime VarChar 50 255

topic表:

序號 字段名稱 字段類型 大小 允許為空 最大長度 備注
序號 字段名稱 字段類型 大小 允許為空 最大長度 備注
1 topicid VarChar 300 255
2 usersid VarChar 50 255
3 articleid Text 16 255
4 contents VarChar 50 255
5 addtime VarChar 50 255

users表:

序號 字段名稱 字段類型 大小 允許為空 最大長度 備注
序號 字段名稱 字段類型 大小 允許為空 最大長度 備注
1 usersid VarChar 50 255
2 username VarChar 50 255
3 password VarChar 8 23
4 realname VarChar 50 255
5 sex VarChar 50 255
6 birthday VarChar 50 255
7 contact VarChar 50 255
8 asksid VarChar 50 255
9 answer VarChar 50 255
10 regdate VarChar 50 255

第5章 系統(tǒng)實現(xiàn)

5.1基本任務(wù)

系統(tǒng)實現(xiàn)階段的根本目標(biāo)在這個階段的設(shè)計工作中精確地描述出目標(biāo)系統(tǒng),從而在編碼階段可以直接根據(jù)這個描述翻譯成用程序語言編寫的系統(tǒng)。

系統(tǒng)結(jié)構(gòu)可分為src的java源代碼,database文件夾為系統(tǒng)的數(shù)據(jù)庫文件,webroot為系統(tǒng)的界面代碼文件。Src文件夾里面包含control包、dao包、util包,dao包為邏輯層,是系統(tǒng)方法的底層包,包括各種數(shù)據(jù)增刪改查的方法,control包是控制層,用來連接邏輯層和視圖層,在邏輯層調(diào)用邏輯層,完成視圖層需要的功能,視圖層為系統(tǒng)的界面代碼,完成界面的設(shè)計和數(shù)據(jù)的顯示。

代碼結(jié)構(gòu)如下圖所示。

圖5-1系統(tǒng)結(jié)

5.2登錄模塊的實現(xiàn)

5.2.1首頁實現(xiàn)

在系統(tǒng)的前臺首頁,主要有用戶登錄,在首頁的導(dǎo)航欄中可看出,該系統(tǒng)有校內(nèi)新聞系統(tǒng)、校外新聞系統(tǒng)、體育新聞系統(tǒng)、娛樂新聞系統(tǒng)、用戶菜單系統(tǒng)和退出登錄等主要模塊。

首頁

圖5.1 首頁頁面圖

首頁主要代碼如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title></title></head><body><%response.sendRedirect(basePath + "index/index.action");%></body></html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title></title></head><body><%response.sendRedirect(basePath + "index/index.action");%></body></html>

5.2.2管理員后臺登錄

為了確保系統(tǒng)安全性,系統(tǒng)操作員只有在后臺登錄界面輸入正確的用戶名、密碼、權(quán)限以及驗證碼,單擊"登錄"按鈕后才能夠進入本系統(tǒng)的后臺管理界面。

登錄界面如下圖所示。

新聞分類信息查詢

圖5-3登錄界面

用戶登錄的邏輯代碼如下:

// 管理員登錄 1 驗證用戶名是否存在 2 驗證密碼是否正確@RequestMapping("login.action")public String login() {String username = this.getRequest().getParameter("username");String password = this.getRequest().getParameter("password");Admin adminEntity = new Admin();adminEntity.setUsername(username);List<Admin> adminlist = this.adminService.getAdminByCond(adminEntity);if (adminlist.size() == 0) {this.getRequest().setAttribute("message", "用戶名不存在");return "redirect:/admin/index.action";} else {Admin admin = adminlist.get(0);if (password.equals(admin.getPassword())) {this.getSession().setAttribute("adminid", admin.getAdminid());this.getSession().setAttribute("adminname", admin.getUsername());this.getSession().setAttribute("realname", admin.getRealname());this.getSession().setAttribute("role", "管理員");} else {this.getRequest().setAttribute("message", "密碼錯誤");return "redirect:/admin/index.action";}}return "admin/main";}
// 管理員登錄 1 驗證用戶名是否存在 2 驗證密碼是否正確@RequestMapping("login.action")public String login() {String username = this.getRequest().getParameter("username");String password = this.getRequest().getParameter("password");Admin adminEntity = new Admin();adminEntity.setUsername(username);List<Admin> adminlist = this.adminService.getAdminByCond(adminEntity);if (adminlist.size() == 0) {this.getRequest().setAttribute("message", "用戶名不存在");return "redirect:/admin/index.action";} else {Admin admin = adminlist.get(0);if (password.equals(admin.getPassword())) {this.getSession().setAttribute("adminid", admin.getAdminid());this.getSession().setAttribute("adminname", admin.getUsername());this.getSession().setAttribute("realname", admin.getRealname());this.getSession().setAttribute("role", "管理員");} else {this.getRequest().setAttribute("message", "密碼錯誤");return "redirect:/admin/index.action";}}return "admin/main";}

5.3用戶模塊的實現(xiàn)

5.3.1需求管理模塊的實現(xiàn)

系統(tǒng)管理用戶添加

需求生成界面如圖所示。

新增管理員

圖5-8需求頁面

5.4管理員模塊的實現(xiàn)

5.4.1用戶管理模塊的實現(xiàn)

系統(tǒng)用戶管理主要是對新用戶的添加和舊用戶的刪除。新用戶的添加主要是指添加用戶名稱并確定其密碼;舊用戶的刪除也是從下拉菜單中找到對應(yīng)的用戶名稱將其刪除。不論是新用戶添加還是舊用戶的刪除,這個權(quán)限只有管理員具有。

用戶管理流程圖如下所示。

用戶管理界面如下圖所示。

新增管理員

圖5-11用戶管理

系統(tǒng)用戶管理關(guān)鍵代碼為:

// 管理員準(zhǔn)備修改密碼@RequestMapping("prePwd.action")public String prePwd() {return "admin/editpwd";}// 修改密碼@RequestMapping("editpwd.action")public String editpwd() {String adminid = (String) this.getSession().getAttribute("adminid");String password = this.getRequest().getParameter("password");String repassword = this.getRequest().getParameter("repassword");Admin admin = this.adminService.getAdminById(adminid);if (password.equals(admin.getPassword())) {admin.setPassword(repassword);this.adminService.updateAdmin(admin);} else {this.getRequest().setAttribute("message", "舊密碼錯誤");}return "redirect:/admin/prePwd.action";}// 管理員退出登錄@RequestMapping("exit.action")public String exit() {this.getSession().removeAttribute("adminid");this.getSession().removeAttribute("adminname");this.getSession().removeAttribute("realname");return "redirect:/admin/index.action";}// 準(zhǔn)備添加數(shù)據(jù)@RequestMapping("createAdmin.action")public String createAdmin() {return "admin/addadmin";}// 添加數(shù)據(jù)@RequestMapping("addAdmin.action")public String addAdmin(Admin admin) {admin.setAddtime(VeDate.getStringDateShort());this.adminService.insertAdmin(admin);return "redirect:/admin/createAdmin.action";}// AJAX添加數(shù)據(jù)@RequestMapping("xaddAdmin.action")@ResponseBody //將java對象轉(zhuǎn)為json格式的數(shù)據(jù)public String xaddAdmin(Admin admin) {admin.setAddtime(VeDate.getStringDateShort());int x = this.adminService.insertAdmin(admin);JSONObject json = new JSONObject();json.put("result", x);//System.out.println(json.toString());return json.toString();}// 通過主鍵刪除數(shù)據(jù)@RequestMapping("deleteAdmin.action")public String deleteAdmin(String id) {this.adminService.deleteAdmin(id);return "redirect:/admin/getAllAdmin.action";}// AJAX通過主鍵刪除數(shù)據(jù)@RequestMapping("xdeleteAdmin.action")@ResponseBody //將java對象轉(zhuǎn)為json格式的數(shù)據(jù)public String xdeleteAdmin(String id) {int x = this.adminService.deleteAdmin(id);JSONObject json = new JSONObject();json.put("result", x);//System.out.println(json.toString());return json.toString();}// 批量刪除數(shù)據(jù)@RequestMapping("deleteAdminByIds.action")public String deleteAdminByIds() {String[] ids = this.getRequest().getParameterValues("adminid");if (ids != null) {for (String adminid : ids) {this.adminService.deleteAdmin(adminid);}}return "redirect:/admin/getAllAdmin.action";}// 更新數(shù)據(jù)@RequestMapping("updateAdmin.action")public String updateAdmin(Admin admin) {this.adminService.updateAdmin(admin);return "redirect:/admin/getAllAdmin.action";}// AJAX更新數(shù)據(jù)@RequestMapping("xupdateAdmin.action")@ResponseBody //將java對象轉(zhuǎn)為json格式的數(shù)據(jù)public String xupdateAdmin(Admin admin) {int x = this.adminService.updateAdmin(admin);JSONObject json = new JSONObject();json.put("result", x);//System.out.println(json.toString());return json.toString();}// 顯示全部數(shù)據(jù)@RequestMapping("getAllAdmin.action")public String getAllAdmin(String number) {List<Admin> adminList = this.adminService.getAllAdmin();PageHelper.getUserPage(adminList, "admin", "getAllAdmin", 10, number, this.getRequest());return "admin/listadmin";}// AJAX顯示全部數(shù)據(jù)@RequestMapping(value = "getDataList.action", produces = "application/json; charset=utf-8")@ResponseBody //將java對象轉(zhuǎn)為json格式的數(shù)據(jù)public Map<String, Object> getDataList(@RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer limit) {// 定義一個Map對象 用來返回數(shù)據(jù)Map<String, Object> map = new HashMap<String, Object>();Page<Admin> pager = com.github.pagehelper.PageHelper.startPage(page, limit);// 定義當(dāng)前頁和分頁條數(shù)List<Admin> list = this.adminService.getAllAdmin();// 返回的map中定義Layui的數(shù)據(jù)格式map.put("count", pager.getTotal());map.put("data", list);map.put("code", 0);map.put("msg", "");return map;}// 按條件查詢數(shù)據(jù) (模糊查詢)@RequestMapping("queryAdminByCond.action")public String queryAdminByCond(String cond, String name, String number) {Admin admin = new Admin();if(cond != null){if ("username".equals(cond)) {admin.setUsername(name);}if ("password".equals(cond)) {admin.setPassword(name);}if ("realname".equals(cond)) {admin.setRealname(name);}if ("contact".equals(cond)) {admin.setContact(name);}if ("addtime".equals(cond)) {admin.setAddtime(name);}}List<String> nameList = new ArrayList<String>();List<String> valueList = new ArrayList<String>();nameList.add(cond);valueList.add(name);PageHelper.getPage(this.adminService.getAdminByLike(admin), "admin", nameList, valueList, 10, number, this.getRequest(), "query");name = null;cond = null;return "admin/queryadmin";}// 按主鍵查詢數(shù)據(jù)@RequestMapping("getAdminById.action")public String getAdminById(String id) {Admin admin = this.adminService.getAdminById(id);this.getRequest().setAttribute("admin", admin);return "admin/editadmin";}
// 管理員準(zhǔn)備修改密碼@RequestMapping("prePwd.action")public String prePwd() {return "admin/editpwd";}// 修改密碼@RequestMapping("editpwd.action")public String editpwd() {String adminid = (String) this.getSession().getAttribute("adminid");String password = this.getRequest().getParameter("password");String repassword = this.getRequest().getParameter("repassword");Admin admin = this.adminService.getAdminById(adminid);if (password.equals(admin.getPassword())) {admin.setPassword(repassword);this.adminService.updateAdmin(admin);} else {this.getRequest().setAttribute("message", "舊密碼錯誤");}return "redirect:/admin/prePwd.action";}// 管理員退出登錄@RequestMapping("exit.action")public String exit() {this.getSession().removeAttribute("adminid");this.getSession().removeAttribute("adminname");this.getSession().removeAttribute("realname");return "redirect:/admin/index.action";}// 準(zhǔn)備添加數(shù)據(jù)@RequestMapping("createAdmin.action")public String createAdmin() {return "admin/addadmin";}// 添加數(shù)據(jù)@RequestMapping("addAdmin.action")public String addAdmin(Admin admin) {admin.setAddtime(VeDate.getStringDateShort());this.adminService.insertAdmin(admin);return "redirect:/admin/createAdmin.action";}// AJAX添加數(shù)據(jù)@RequestMapping("xaddAdmin.action")@ResponseBody //將java對象轉(zhuǎn)為json格式的數(shù)據(jù)public String xaddAdmin(Admin admin) {admin.setAddtime(VeDate.getStringDateShort());int x = this.adminService.insertAdmin(admin);JSONObject json = new JSONObject();json.put("result", x);//System.out.println(json.toString());return json.toString();}// 通過主鍵刪除數(shù)據(jù)@RequestMapping("deleteAdmin.action")public String deleteAdmin(String id) {this.adminService.deleteAdmin(id);return "redirect:/admin/getAllAdmin.action";}// AJAX通過主鍵刪除數(shù)據(jù)@RequestMapping("xdeleteAdmin.action")@ResponseBody //將java對象轉(zhuǎn)為json格式的數(shù)據(jù)public String xdeleteAdmin(String id) {int x = this.adminService.deleteAdmin(id);JSONObject json = new JSONObject();json.put("result", x);//System.out.println(json.toString());return json.toString();}// 批量刪除數(shù)據(jù)@RequestMapping("deleteAdminByIds.action")public String deleteAdminByIds() {String[] ids = this.getRequest().getParameterValues("adminid");if (ids != null) {for (String adminid : ids) {this.adminService.deleteAdmin(adminid);}}return "redirect:/admin/getAllAdmin.action";}// 更新數(shù)據(jù)@RequestMapping("updateAdmin.action")public String updateAdmin(Admin admin) {this.adminService.updateAdmin(admin);return "redirect:/admin/getAllAdmin.action";}// AJAX更新數(shù)據(jù)@RequestMapping("xupdateAdmin.action")@ResponseBody //將java對象轉(zhuǎn)為json格式的數(shù)據(jù)public String xupdateAdmin(Admin admin) {int x = this.adminService.updateAdmin(admin);JSONObject json = new JSONObject();json.put("result", x);//System.out.println(json.toString());return json.toString();}// 顯示全部數(shù)據(jù)@RequestMapping("getAllAdmin.action")public String getAllAdmin(String number) {List<Admin> adminList = this.adminService.getAllAdmin();PageHelper.getUserPage(adminList, "admin", "getAllAdmin", 10, number, this.getRequest());return "admin/listadmin";}// AJAX顯示全部數(shù)據(jù)@RequestMapping(value = "getDataList.action", produces = "application/json; charset=utf-8")@ResponseBody //將java對象轉(zhuǎn)為json格式的數(shù)據(jù)public Map<String, Object> getDataList(@RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "10") Integer limit) {// 定義一個Map對象 用來返回數(shù)據(jù)Map<String, Object> map = new HashMap<String, Object>();Page<Admin> pager = com.github.pagehelper.PageHelper.startPage(page, limit);// 定義當(dāng)前頁和分頁條數(shù)List<Admin> list = this.adminService.getAllAdmin();// 返回的map中定義Layui的數(shù)據(jù)格式map.put("count", pager.getTotal());map.put("data", list);map.put("code", 0);map.put("msg", "");return map;}// 按條件查詢數(shù)據(jù) (模糊查詢)@RequestMapping("queryAdminByCond.action")public String queryAdminByCond(String cond, String name, String number) {Admin admin = new Admin();if(cond != null){if ("username".equals(cond)) {admin.setUsername(name);}if ("password".equals(cond)) {admin.setPassword(name);}if ("realname".equals(cond)) {admin.setRealname(name);}if ("contact".equals(cond)) {admin.setContact(name);}if ("addtime".equals(cond)) {admin.setAddtime(name);}}List<String> nameList = new ArrayList<String>();List<String> valueList = new ArrayList<String>();nameList.add(cond);valueList.add(name);PageHelper.getPage(this.adminService.getAdminByLike(admin), "admin", nameList, valueList, 10, number, this.getRequest(), "query");name = null;cond = null;return "admin/queryadmin";}// 按主鍵查詢數(shù)據(jù)@RequestMapping("getAdminById.action")public String getAdminById(String id) {Admin admin = this.adminService.getAdminById(id);this.getRequest().setAttribute("admin", admin);return "admin/editadmin";}

5.5.2工作人員模塊的實現(xiàn)

工作人員添加如下圖所示:

新增管理員

圖5-24工作人員添加

管理員信息添加關(guān)鍵代碼為:

protected void Button1_Click(object sender, EventArgs e)

{

string MySQL;

MySQL="insert into liuyanban(cheng,biaoqing,biaoti,neirong,huifu) values('"+cheng.Text.ToString().Trim()+"','"+biaoqing.Text.ToString().Trim()+"','"+biaoti.Text.ToString().Trim()+"','"+neirong.Text.ToString().Trim()+"','"+huifu.Text.ToString().Trim()+"') ";

int result;

result = new Class1().hsgexucute(MySQL);

if (result == 1)

{

Response.Write("<script>javascript:alert('添加成功');</script>");

}

else

{

Response.Write("<script>javascript:alert('系統(tǒng)錯誤,請檢查數(shù)據(jù)庫設(shè)置問題');</script>");

}

第6章 系統(tǒng)測試

6.1測試目的

軟件測試的目的主要是發(fā)現(xiàn)軟件缺陷和漏洞,其次,軟件測試能夠識別項目風(fēng)險。為開發(fā)人員和程序經(jīng)理提供軟件測試的反饋結(jié)果,為風(fēng)險評估提供必要的信息。再者,軟件測試確保在上線日前達到上線標(biāo)準(zhǔn)。包括持續(xù)追蹤項目進度和嚴格把控各個開發(fā)階段的產(chǎn)品質(zhì)量。

基于jsp的新聞發(fā)布管理系統(tǒng),主要測試客戶端的使用和后臺服務(wù)器的使用??蛻舳酥饕菧y試用戶注冊、用戶登錄、用戶完善信息、頁面是否進行跳轉(zhuǎn)等功能是否實現(xiàn)。管理員的使用主要是測試系統(tǒng)管理、需求服務(wù)管理、日常費用管理、變幻圖管理以及注冊用戶管理功能是否實現(xiàn)。

6.2測試概述

1.測試的原則

(1)系統(tǒng)測試應(yīng)該避免測試自己的程序,以免發(fā)現(xiàn)不了細小的問題。

(2)系統(tǒng)測試用例應(yīng)有兩部分組成,分別為輸入測試和輸出測試。

(3)系統(tǒng)測試數(shù)據(jù)應(yīng)當(dāng)引用不合理的數(shù)據(jù)進行測試,選取不同情況的進行逐一測試。

(4)不僅要檢查程序是否達到預(yù)期的效果,還要檢查程序是否執(zhí)行了規(guī)定以外的操作。

(5)對出現(xiàn)錯誤多的模塊進行集中測試。

(6)已發(fā)現(xiàn)錯誤的模塊修改后,應(yīng)及時進行重新測試。

6.3單元測試

6.3.1注冊測試

游客用戶得先注冊賬號才能登錄系統(tǒng),用戶輸入符合規(guī)則的用戶名后,填寫2次一樣的密碼,點擊注冊按鈕,系統(tǒng)提示"注冊成功"。當(dāng)用戶2次密碼不一致時,系統(tǒng)提示兩次密碼不一致。

注冊測試用例如下表所示。

表6-1注冊測試用例

測試模塊 用戶注冊模塊測試
測試模塊 用戶注冊模塊測試
測試目的 測試當(dāng)注冊信息輸入不符合要求時,系統(tǒng)是否能進行相應(yīng)處理并給出提示。
測試方法 黑盒測試
測試數(shù)據(jù) 1不輸入用戶名和密碼,直接點擊注冊。2輸入未注冊過的用戶名。例如:abcd3輸入正確用戶名,兩次密碼不一樣。例如:用戶名abcdefg、密碼 000,確認密碼111
預(yù)期結(jié)果 1 界面不跳轉(zhuǎn),彈出對話框,提示用戶輸入必填項。2界面跳轉(zhuǎn),彈出對話框,提示用戶注冊成功。3界面不跳轉(zhuǎn),彈出對話框,提示兩次密碼不一致。
實際結(jié)果 與預(yù)想一致。
結(jié)論 注冊模塊實現(xiàn)了基本的異常輸入應(yīng)對。

6.3.2登錄測試

登錄模塊需要測試的功能有:輸入登錄名和密碼,點擊"登錄"按鈕是否正常進入系統(tǒng)首頁。

登錄測試用例如下表所示。

表6-2登錄測試用例

測試模塊 用戶登錄模塊測試
測試模塊 用戶登錄模塊測試
測試目的 測試當(dāng)?shù)顷懶畔⑤斎氩环弦髸r,系統(tǒng)是否能進行相應(yīng)處理并給出提示。
測試方法 黑盒測試
測試數(shù)據(jù) 1不輸入用戶名和密碼,直接點擊登陸。2輸入未注冊過的用戶名。例如:abcdefg3輸入正確用戶名,錯誤密碼。例如:用戶名abcdefg、密碼 0004輸入正確用戶名,正確匹配密碼。例如:用戶名abcdefg、密碼 111
預(yù)期結(jié)果 1 界面不跳轉(zhuǎn),彈出對話框,提示用戶輸入必填項。2界面不跳轉(zhuǎn),彈出對話框,提示用戶當(dāng)前用戶名尚未注冊。3界面不跳轉(zhuǎn),彈出對話框,提示用戶密碼錯誤。4界面實現(xiàn)跳轉(zhuǎn),登陸功能正常進行。
實際結(jié)果 與預(yù)想一致。
結(jié)論 登陸模塊實現(xiàn)了基本的異常輸入應(yīng)對。

6.4集成測試

集成測試的方案主要如下所述:

  1. 將系統(tǒng)移植到另一臺計算機上,運行出錯。修改配置信息后運行成功。

  2. 用戶信息管理模塊綜合測試,添加新用戶roess,為其分配一般管理員角色,查看一般管理員角色權(quán)限,保存設(shè)置,以roess身份登錄,查看所擁有權(quán)限。

  3. 最后按照新聞發(fā)布管理系統(tǒng)的設(shè)計與實現(xiàn),以不同角色的身份進入系統(tǒng),對系統(tǒng)各模塊功能進行測試,測試模塊間邏輯功是否有誤。

經(jīng)過測試,發(fā)現(xiàn)此開發(fā)系統(tǒng)可以滿足新聞發(fā)布管理系統(tǒng)流程的基本工作流程和基本要求。

第7章 總結(jié)

經(jīng)過幾個月的努力還堅持,新聞發(fā)布管理系統(tǒng)終于完成了,程序功能模塊能按照需求來運行,能實現(xiàn)多用戶的迸發(fā)使用,但是系統(tǒng)由于設(shè)計經(jīng)驗以及專業(yè)知識的局限性,在本系統(tǒng)的開發(fā)過程中,在一些功能方面和業(yè)務(wù)邏輯方面做得不是很完善,系統(tǒng)還存在一些缺陷。界面的設(shè)計從布局到外觀,受限于自身的設(shè)計功底較低,沒能達到自己所要設(shè)計的界面要求,另一方面,系統(tǒng)存在一些沒有考慮的問題和模塊。

在學(xué)習(xí)的過程中首次進行獨立設(shè)計工作,編碼過程出現(xiàn)了許多問題和困難,原以為正確無誤的程序運行過程中不會遇到問題,但是在運行過程中也總會出現(xiàn)各種各樣的問題,在調(diào)試過程中找不出運行出錯的原因。而這些基本問題卻都是一些簡單的問題,例如標(biāo)點符號應(yīng)該是英文狀態(tài)下的,卻因為不好的編程習(xí)慣造成了一些中文的符號輸入,經(jīng)過仔細觀察和老師的幫組下,還是將問題解決了。

目前系統(tǒng)的功能比較簡單,還存在許多瑕疵,這是一份遺憾,也是促進我不斷進步的動力。

致 謝

經(jīng)歷了近三個多月的動手實踐及老師辛勤的指導(dǎo)和同學(xué)朋友熱心的幫助下,本人的畢業(yè)設(shè)計新聞發(fā)布管理系統(tǒng)的基本功能也基本完成。

此次設(shè)計中,通過不斷的探討與學(xué)習(xí)使我熟悉、使我初步了解了JAVA相關(guān)技術(shù)。做的是一個B/S結(jié)構(gòu)的新聞發(fā)布管理系統(tǒng),使我對做網(wǎng)站所需要,及運行的環(huán)境有了初步的了解,在此次設(shè)計中我翻閱了較多的書籍,在有限的時間了豐富了對新聞發(fā)布管理系統(tǒng)技術(shù)的知識也積累了少許的經(jīng)驗。起初對JSP的初步認識,通過這次設(shè)計更進一步的了解了其工作原理,懂得了配置服務(wù)器環(huán)境,連接數(shù)據(jù)庫源,在設(shè)計過程中,也學(xué)會了用dreamweaver設(shè)計一個簡單的頁面,增強了動手的能力,激發(fā)了在此方面的興趣。

但是由于時間、基礎(chǔ)及缺乏實踐等多方面的問題,還有諸多需要解決的問題依然存在,設(shè)計中很多方面考慮不夠周全或者考慮不到。

非常感謝我的老師,我的同學(xué),我的朋友并希望在今后的學(xué)習(xí)生活中不斷陪養(yǎng)多方面的興趣,不斷學(xué)習(xí)進步從而能夠?qū)崿F(xiàn)獨立完成。設(shè)計中存在的諸多缺點誠肯老師的原諒。

參考文獻

[1]劉曉華,周慧貞.JSP應(yīng)用開發(fā)詳解[M].北京:電子工業(yè)出版社,2013:35-126

[2]阿斯利森,舒塔,金靈等譯.Ajax基礎(chǔ)教程[M].北京:人民郵電出版社,2014:15-26

[3]孫鑫.Struts2深入詳解[M].北京:電子工業(yè)出版社,2012:8-16

[4]王珊,薩師煊.數(shù)據(jù)庫系統(tǒng)概論[M].北京:高等教育出版社出版社,2010:7-15

[5]王毅,周峰,孫更新.J2EE經(jīng)典案例設(shè)計與實現(xiàn)[M].北京:電子工業(yè)出版,2013:6-18

[6]孫鑫.Struts2深入詳解(Java技術(shù)大系)[M].北京:電子工業(yè)出版社,2012:5-14

[7]鄭阿奇.MySQL實用教程[M].北京:電子工業(yè)出版社,2013:26-42

[8]譚慶平,毛新軍編著.軟件工程實踐[M].北京:高等教育出版社,2014:34-87

[9]林邦杰.Java程序設(shè)計入門教程[M].北京:中國青年出版社,2011:63-99

[10]謝希仁.計算機網(wǎng)絡(luò)[M].北京:電子工業(yè)出版社,2012:89-125

[11]布朗,戴維斯,斯坦利克,馬召等譯.Struts2實戰(zhàn)[M].北京:人民郵電出版社,2012:85-136

[12]王行言.Java語言與面向?qū)ο蟪绦蛟O(shè)計[M].北京:清華大學(xué)出版社,2013:36-85

[13]拉夫利,李進華等譯.精通Struts2:Web2.0開發(fā)實戰(zhàn)[M].北京:人民郵電出版社,2012:253-276

[14]陳云芳.精通Struts2基于MVC的Web應(yīng)用開發(fā)實戰(zhàn)[M].北京:人民郵電出版社,2012:136-187

[15]DavidHopkins.ImprovingtheQualityofTeachingandLearning[J].SupportforLearning,2014(12):162-165.

[16]EdWoychowsky.IntroducingAjax[EB/OL].http://www.webreference.com/programming/ajax_creating_asynchronous_web_pages/index.html,2015-1-13.

[17]RobertoLatorre,FranciscoLopez,AntonioE.Martinez.SharingofprocompileddatabasestatementsinJ2EEapplication[J].Software:PracticeandExperience,2015(35):301-311.

[18]Huang,M.Y,Lin,Y.J,Xu,H.Aframeworkforweb-basedproductdatamanagementusingJ2EE.InternationalJournalofAdvancedManufacturingTechnology,2014:825-847.

[19]AleassanndroMarchetto,FilippoRicca,PaoloTonella.Acasestudy-basedcomparisonofwebtestingtechniquesappliedtoajaxwebapplications[J].InternationalJournalonsoftwareToolsforTechnologyTransfer(STTT),2015,10(12):477-492.

[20]D.F.Elliott,andK.Rao.FastTransforms:Algorothms,Analysas,Applications.NewYork:AcademkicPrdss.2014

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容