畢業(yè)設(shè)計(jì)(論文)-基于Spring Boot的在線問(wèn)卷調(diào)查系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
畢業(yè)設(shè)計(jì)(論文)-基于Spring Boot的在線問(wèn)卷調(diào)查系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
畢業(yè)設(shè)計(jì)(論文)-基于Spring Boot的在線問(wèn)卷調(diào)查系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
畢業(yè)設(shè)計(jì)(論文)-基于Spring Boot的在線問(wèn)卷調(diào)查系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
畢業(yè)設(shè)計(jì)(論文)-基于Spring Boot的在線問(wèn)卷調(diào)查系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩40頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

-1-第1章緒論1.1課題背景二十一世紀(jì)互聯(lián)網(wǎng)的出現(xiàn),改變了幾千年以來(lái)人們的生活,不僅僅是生活物資的豐富,還有精神層次的豐富。時(shí)代進(jìn)步的標(biāo)志,就是讓人們過(guò)上更好的生活。在互聯(lián)網(wǎng)誕生之前,地域位置往往是人們思想上不可跨域的鴻溝,信息的傳播速度極慢,信息處理的速度和要求還是通過(guò)人們騎馬或者是信鴿傳遞,這些信息傳遞都是不可控制的,中間很有可能丟失,信息的傳遞水平?jīng)Q定了人們生活的水平?,F(xiàn)如今,大家都在用互聯(lián)網(wǎng)來(lái)實(shí)現(xiàn)自己的目的,從內(nèi)部管理設(shè)置計(jì)算機(jī)管理,提高內(nèi)部信息管理水平,從外部市場(chǎng)也可以用計(jì)算機(jī)獲取相關(guān)數(shù)據(jù)進(jìn)行處理,如今各行各業(yè)已經(jīng)嚴(yán)重依賴于計(jì)算機(jī)了。本課題研究和開發(fā)在線問(wèn)卷調(diào)查系統(tǒng),讓安裝在計(jì)算機(jī)上的該系統(tǒng)變成管理人員的小幫手,提高問(wèn)卷調(diào)查信息處理速度,規(guī)范問(wèn)卷調(diào)查信息處理流程,讓管理人員的產(chǎn)出效益更高。1.2課題意義傳統(tǒng)處理數(shù)據(jù),必須是一張張紙,然后處理完畢又是統(tǒng)計(jì)在一張張紙上面,不斷的重復(fù)處理,最終有個(gè)結(jié)果給最高層作為參考,這個(gè)模式在互聯(lián)網(wǎng)沒(méi)有出現(xiàn)之前,是一種常見(jiàn)的事情,信息管理的效率提不上去,那就用人才,人多力量大,是一個(gè)以前人們的常識(shí)。計(jì)算機(jī)的誕生就是發(fā)現(xiàn)了人多力量大的不足,比如高端計(jì)算人才的培養(yǎng)已經(jīng)跟不上使用了,所以人們研究出專門幫助人們計(jì)算的機(jī)器,就是計(jì)算機(jī)的前身,到了互聯(lián)網(wǎng)時(shí)代,人們發(fā)現(xiàn)完全可以讓程序供應(yīng)商提供解決方案,自己挑選自己合適的方案來(lái)提高自己的產(chǎn)出比。于是市面上就出現(xiàn)了各種各樣的依靠程序處理信息的解決方案。本課題研發(fā)的在線問(wèn)卷調(diào)查系統(tǒng),就是提供問(wèn)卷調(diào)查信息處理的解決方案,它可以短時(shí)間處理完信息,并且只需要使用者動(dòng)動(dòng)鼠標(biāo)和鍵盤就能獲取自己需要的信息,并且這些信息都有專門的存儲(chǔ)設(shè)備,而且數(shù)據(jù)的備份和遷移都可以設(shè)定為無(wú)人值守,從人力角度和信息處理角度以及信息安全角度,在線問(wèn)卷調(diào)查系統(tǒng)是完勝傳統(tǒng)紙質(zhì)操作的,所以在線問(wèn)卷調(diào)查系統(tǒng)就是如此的值得信賴。1.3研究?jī)?nèi)容本文對(duì)在線問(wèn)卷調(diào)查系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)分成六個(gè)章節(jié)進(jìn)行描述。第1章:研究在線問(wèn)卷調(diào)查系統(tǒng)的背景,以及開發(fā)在線問(wèn)卷調(diào)查系統(tǒng)的意義。第2章:對(duì)開發(fā)在線問(wèn)卷調(diào)查系統(tǒng)的環(huán)境還有技術(shù)進(jìn)行說(shuō)明。第3章:分析在線問(wèn)卷調(diào)查系統(tǒng)的可行性,性能,流程以及功能。第4章:設(shè)計(jì)在線問(wèn)卷調(diào)查系統(tǒng)的功能結(jié)構(gòu),設(shè)計(jì)數(shù)據(jù)庫(kù)E-R圖以及對(duì)數(shù)據(jù)表的存儲(chǔ)結(jié)構(gòu)進(jìn)行設(shè)計(jì)。第5章:實(shí)現(xiàn)在線問(wèn)卷調(diào)查系統(tǒng)的功能并進(jìn)行功能界面展示。第6章:對(duì)系統(tǒng)測(cè)試進(jìn)行闡述,以及對(duì)本系統(tǒng)部分功能進(jìn)行檢測(cè)。

第2章開發(fā)環(huán)境與技術(shù)本章節(jié)對(duì)開發(fā)在線問(wèn)卷調(diào)查系統(tǒng)需要搭建的開發(fā)環(huán)境,還有在線問(wèn)卷調(diào)查系統(tǒng)開發(fā)中使用的編程技術(shù)等進(jìn)行闡述。2.1Java語(yǔ)言Java語(yǔ)言是當(dāng)今為止依然在編程語(yǔ)言行業(yè)具有生命力的常青樹之一。Java語(yǔ)言最原始的誕生,不僅僅是創(chuàng)造者感覺(jué)C語(yǔ)言在編程上面很麻煩,如果只是專注于業(yè)務(wù)邏輯的處理,會(huì)導(dǎo)致忽略了各種指針以及垃圾回收這些操作,導(dǎo)致出現(xiàn)問(wèn)題需要解決的時(shí)間往往大于正常編程處理業(yè)務(wù)邏輯的時(shí)間,這些是非常浪費(fèi)時(shí)間的。Java語(yǔ)言的創(chuàng)造者就完美的解決了這個(gè)問(wèn)題,把指針處理和垃圾處理全部自動(dòng)化,雖然這會(huì)損失一些性能,但是隨著計(jì)算機(jī)硬件的不斷發(fā)展,這些性能是可以忽略考慮的。并且C語(yǔ)言是針對(duì)硬件開發(fā)的語(yǔ)言,在符合條件的硬件上面進(jìn)行編程可以最大化利用硬件的性能,但是隨著硬件的變化或者操作系統(tǒng)的變更,如果還是用C語(yǔ)言的話需要對(duì)整個(gè)程序進(jìn)行重新編程,只有隨著市場(chǎng)變化而變化的語(yǔ)言才是符合潮流,符合生存規(guī)律的語(yǔ)言。Java語(yǔ)言的創(chuàng)造者就針對(duì)C語(yǔ)言的缺點(diǎn)專門開發(fā)了Java語(yǔ)言。讓Java語(yǔ)言不管是在什么樣的環(huán)境里都是可以運(yùn)行,因?yàn)樵贘ava語(yǔ)言運(yùn)行外面套了一個(gè)殼,也就是虛擬機(jī),只要是Java虛擬機(jī)能安裝的電腦都可以運(yùn)行Java的程序。2.2MYSQL數(shù)據(jù)庫(kù)MySQL數(shù)據(jù)庫(kù)是關(guān)系型數(shù)據(jù)庫(kù)的一種,也是傳統(tǒng)的行式數(shù)據(jù)模式,獲取一些數(shù)據(jù)是先一行一行的獲取,然后一行一行的顯示,與最近大數(shù)據(jù)興起的列式數(shù)據(jù)庫(kù)有著明顯的不同。行式數(shù)據(jù)庫(kù)主要是處理最重要的數(shù)據(jù)邏輯部分,并且必須是有效數(shù)據(jù),這樣每一處的數(shù)據(jù)關(guān)聯(lián)都是不可損壞,如果對(duì)數(shù)據(jù)安全性比較高的肯定是需要選擇MySQL數(shù)據(jù)庫(kù),列式數(shù)據(jù)庫(kù)的發(fā)明僅僅是因?yàn)樽x取效率高,與傳統(tǒng)的MySQL數(shù)據(jù)庫(kù)比起來(lái)在數(shù)據(jù)寫入方面并不會(huì)高明到哪里。MySQL雖然比起oracle或者SQLSERVER來(lái)講,安裝包只是幾十兆甚至幾百兆,有點(diǎn)小,但是功能并不會(huì)弱到哪里,嚴(yán)格遵循SQL標(biāo)準(zhǔn)語(yǔ)法。MySQL的數(shù)據(jù)存放形式從大向小的說(shuō)是數(shù)據(jù)庫(kù)最大,然后是表,每個(gè)表里面存放數(shù)據(jù)是有一定的規(guī)則的,數(shù)據(jù)存放是表格形式的,也就是說(shuō)有橫也有豎,橫著的為行,一般表示一條數(shù)據(jù),每個(gè)表都有字段,而字段是以列的形式存在,這樣能保證一條數(shù)據(jù)每一個(gè)字段對(duì)應(yīng)的是相同數(shù)據(jù)類型的數(shù)據(jù)。表與表之間還可以進(jìn)行關(guān)聯(lián),進(jìn)行分表操作,如果一條數(shù)據(jù)相關(guān)項(xiàng)目屬性太多,那么可以把有效的相關(guān)聯(lián)系做成關(guān)聯(lián),可以設(shè)定是否唯一。2.3IDEA開發(fā)工具IDEA是捷克共和國(guó)的Java程序員開發(fā)人員創(chuàng)造的一個(gè)開發(fā)軟件,剛開始主要是對(duì)于用Eclipse軟件他們用得不順手,所以直接開發(fā)了這款軟件。之所以不順手原因在于沒(méi)有代碼提升功能,原因是Eclipse只是把代碼提示作為一種插件形式的存在,如果有些程序開發(fā)人員不清楚代碼提示插件可能會(huì)出問(wèn)題,并且代碼提示只是用來(lái)作為插件,所以功能上有所欠缺。IDEA不僅僅代碼提示做的很好,在代碼重構(gòu)上面更上如虎添翼,程序開發(fā)人員可以選擇一段代碼然后IDEA就會(huì)對(duì)代碼進(jìn)行分解重構(gòu),有效的把代碼弄得更夠?qū)哟胃?,?fù)用性更高,用著更簡(jiǎn)潔和方便,大大的減少了代碼工作量,提升了代碼開發(fā)效率。當(dāng)然,IDEA對(duì)于使用者這么好,肯定也是有目的的,原因在于插件越多越友好,就需要花費(fèi)大量的金錢來(lái)使用,所以說(shuō)IDEA使用主要是看自己喜好。2.4SpringBoot框架SpringBoot是一種不需要代碼生成的一種框架,并且可以不需要配置任何的XML文件就可以,因?yàn)镾pringBoot里面自帶了很多接口,只需要配置不同的接口就會(huì)自動(dòng)的應(yīng)用并且識(shí)別需要的依賴,在配置方面非常的方便,使用起來(lái)感覺(jué)像沒(méi)有用到框架的感覺(jué)。SpringBoot有很多默認(rèn)的配置文件,并且可以對(duì)默認(rèn)的配置文件進(jìn)行修改,可以設(shè)置為自動(dòng)加載,可以對(duì)異常處理分為全局異常處理和默認(rèn)異常處理。SpringBoot使用過(guò)程中就像是使用什么直接注冊(cè)什么,所謂的注冊(cè)也就是在對(duì)應(yīng)的類和方法上面進(jìn)行一個(gè)特殊的聲明即可。

第3章系統(tǒng)分析本文作者在確定了研究的課題之后,從各大數(shù)字圖書館下載文獻(xiàn)來(lái)閱讀,并了解同類型的網(wǎng)站具備的大致功能,然后與本系統(tǒng)用戶的實(shí)際需求結(jié)合進(jìn)行分析,得出本系統(tǒng)要研究的具體功能與性能。雖然分析系統(tǒng)這一階段性工作主要是確定功能,但它卻影響著后面系統(tǒng)開發(fā)環(huán)節(jié)的進(jìn)展,它也是系統(tǒng)開發(fā)流程中比較重要的一個(gè)環(huán)節(jié)。3.1可行性分析以下部分是從三個(gè)角度來(lái)進(jìn)行可行性分析,確保開發(fā)成功的前提是有可行性分析,只有進(jìn)行提前分析,符合程序開發(fā)流程才不至于開發(fā)過(guò)程的中斷。3.1.1技術(shù)可行性在技術(shù)實(shí)現(xiàn)層次,分析了好幾種技術(shù)實(shí)現(xiàn)方法,并且都有對(duì)應(yīng)的成功案例,也有很多開源模塊可以進(jìn)行參考,所以從技術(shù)可行性分析來(lái)講,實(shí)現(xiàn)在線問(wèn)卷調(diào)查系統(tǒng)是沒(méi)有問(wèn)題的。3.1.2經(jīng)濟(jì)可行性對(duì)于身為學(xué)生的開發(fā)者而言,在經(jīng)濟(jì)資源上面可用者很少,為了開發(fā)在線問(wèn)卷調(diào)查系統(tǒng),通過(guò)從技術(shù)分析發(fā)現(xiàn)可以用自己用的電腦進(jìn)行開發(fā),并且學(xué)校機(jī)房的配置也可以達(dá)到要求。最重要的是技術(shù)資源一般都是開源免費(fèi)使用的,因此得出結(jié)論,經(jīng)濟(jì)方面是具有可行性的。3.1.3操作可行性在線問(wèn)卷調(diào)查系統(tǒng)的具體實(shí)現(xiàn),本身參考人類的正常操作邏輯,把常用的操作習(xí)慣當(dāng)做主要的導(dǎo)航實(shí)現(xiàn),可以讓使用者更快速的理解并且上手操作,實(shí)現(xiàn)符合邏輯的操作流程是操作可行性的具體體現(xiàn)。以上就是從不同的角度來(lái)分析,確保了在線問(wèn)卷調(diào)查系統(tǒng)的正常開展。3.2系統(tǒng)流程在線問(wèn)卷調(diào)查系統(tǒng)投入使用后,其各個(gè)功能的內(nèi)部操作邏輯需要使用者通過(guò)流程圖來(lái)進(jìn)行了解。3.2.1操作流程使用者在操作在線問(wèn)卷調(diào)查系統(tǒng)中,應(yīng)該按照本系統(tǒng)提供的操作流程(圖3.1即為本系統(tǒng)的操作流程圖)進(jìn)行操作,這樣可以減少使用者操作中出現(xiàn)的錯(cuò)誤,從而節(jié)省進(jìn)入在線問(wèn)卷調(diào)查系統(tǒng)的時(shí)間。圖3.1系統(tǒng)操作流程3.2.2登錄流程在線問(wèn)卷調(diào)查系統(tǒng)通過(guò)登錄功能(圖3.2即為其登錄的流程)引導(dǎo)使用者進(jìn)入指定的功能操作區(qū),也避免非本系統(tǒng)的用戶享受本系統(tǒng)提供的服務(wù)以及查看本系統(tǒng)提供的信息,從而保障本系統(tǒng)用戶的安全使用。圖3.2登錄流程3.2.3刪除信息流程在線問(wèn)卷調(diào)查系統(tǒng)在經(jīng)過(guò)長(zhǎng)期使用后,會(huì)產(chǎn)生很多的數(shù)據(jù)信息。為了騰出存儲(chǔ)空間存放更多的數(shù)據(jù),本系統(tǒng)數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù),一些沒(méi)有參考價(jià)值的數(shù)據(jù)需要進(jìn)行刪除(圖3.3即為刪除信息的流程),刪除數(shù)據(jù)過(guò)程中,為避免誤刪,使用者要根據(jù)系統(tǒng)的提示來(lái)決定是否刪除數(shù)據(jù)。圖3.3刪除信息流程3.2.4添加信息流程在線問(wèn)卷調(diào)查系統(tǒng)提供可視化的功能操作區(qū),非常方便使用者進(jìn)行數(shù)據(jù)操作,當(dāng)使用者往系統(tǒng)中錄入數(shù)據(jù)時(shí)(圖3.4即為添加信息的流程),本系統(tǒng)也會(huì)進(jìn)行數(shù)據(jù)合法性的判斷,符合要求的數(shù)據(jù)才能夠在數(shù)據(jù)庫(kù)指定表中進(jìn)行登記。圖3.4添加信息流程3.3性能需求在需求分析中就應(yīng)該對(duì)項(xiàng)目所需服務(wù)器性能進(jìn)行分析,這樣才符合正常的分析流程。只談功能需求不談性能需求,是一件很嚴(yán)重的事情,可能會(huì)導(dǎo)致使用過(guò)程中出現(xiàn)一系列不可預(yù)測(cè)的問(wèn)題,所以性能需求也是需要考慮的重要項(xiàng)。下面就是從幾個(gè)方面來(lái)進(jìn)行系統(tǒng)的性能分析,從每個(gè)角度來(lái)分析系統(tǒng)性能。(1)系統(tǒng)數(shù)據(jù)的容量:從數(shù)據(jù)角度來(lái)分析,每個(gè)表和每個(gè)數(shù)據(jù)庫(kù),達(dá)到的數(shù)據(jù)量到一定的程度,是否需要分表或者是分庫(kù),超過(guò)了數(shù)據(jù)的設(shè)定限度,可能會(huì)導(dǎo)致數(shù)據(jù)反映遲鈍,容錯(cuò)量增加。(2)數(shù)據(jù)精度的要求:需要對(duì)需求分析里面數(shù)據(jù)設(shè)定環(huán)節(jié),考慮相應(yīng)的數(shù)據(jù)精度問(wèn)題,需要發(fā)現(xiàn)數(shù)據(jù)是常用的精度還是非常用的精度,進(jìn)而設(shè)定不同的數(shù)值。數(shù)據(jù)的精度問(wèn)題,會(huì)直接導(dǎo)致設(shè)計(jì)的性能問(wèn)題。(3)時(shí)間響應(yīng)要求:從用戶提交操作,到頁(yè)面反映,中間有個(gè)數(shù)據(jù)處理的問(wèn)題,如果數(shù)據(jù)量大,那么考慮索引問(wèn)題和分庫(kù)問(wèn)題,數(shù)據(jù)量再大就要考慮增加列式數(shù)據(jù)庫(kù)的問(wèn)題,這些都要根據(jù)數(shù)據(jù)量的增加以及邏輯的嚴(yán)密性來(lái)進(jìn)行判斷,才能符合用戶的要求,畢竟響應(yīng)時(shí)間太久操作起來(lái)也不舒服。系統(tǒng)的性能需求從業(yè)務(wù)需求之初就能大致了解到性能需求相關(guān)的概念,再?gòu)南到y(tǒng)性能需求來(lái)逐條實(shí)現(xiàn),可以讓設(shè)計(jì)的系統(tǒng)有使用價(jià)值。3.4功能需求在線問(wèn)卷調(diào)查系統(tǒng)根據(jù)使用權(quán)限的角度進(jìn)行功能分析,并運(yùn)用用例圖來(lái)展示各個(gè)權(quán)限需要操作的功能。圖3.5即為管理員用例圖,管理員權(quán)限操作的功能包括對(duì)注冊(cè)用戶信息的管理,對(duì)問(wèn)卷,題目,問(wèn)卷調(diào)查,新聞資訊等信息的管理。圖3.5管理員用例圖圖3.6即為用戶用例圖,用戶權(quán)限操作的功能包括參與問(wèn)卷調(diào)查,查看新聞,查看問(wèn)卷調(diào)查記錄。圖3.6用戶用例圖

第4章系統(tǒng)設(shè)計(jì)系統(tǒng)的設(shè)計(jì)一切都是為了用戶的使用,雖然用戶使用過(guò)程中可能只是面對(duì)著瀏覽器進(jìn)行各種操作,但是不代表著系統(tǒng)對(duì)于用戶在瀏覽器上的操作不進(jìn)行處理,所以說(shuō),設(shè)計(jì)一個(gè)系統(tǒng)需要考慮到方方面面。4.1功能結(jié)構(gòu)設(shè)計(jì)圖4.1即為設(shè)計(jì)的管理員功能結(jié)構(gòu),管理員權(quán)限操作的功能包括對(duì)注冊(cè)用戶信息的管理,對(duì)問(wèn)卷,題目,問(wèn)卷調(diào)查,新聞資訊等信息的管理。圖4.1管理員功能結(jié)構(gòu)圖4.2即為設(shè)計(jì)的用戶功能結(jié)構(gòu),用戶權(quán)限操作的功能包括參與問(wèn)卷調(diào)查,查看新聞,查看問(wèn)卷調(diào)查記錄。圖4.2用戶功能結(jié)構(gòu)4.2數(shù)據(jù)庫(kù)設(shè)計(jì)在線問(wèn)卷調(diào)查系統(tǒng)運(yùn)行中產(chǎn)生的數(shù)據(jù)需要按照提前設(shè)置的存儲(chǔ)規(guī)則進(jìn)行保存,而這個(gè)存儲(chǔ)規(guī)則則是在數(shù)據(jù)庫(kù)的設(shè)計(jì)中進(jìn)行設(shè)置的。通常情況下,為了更好的配合系統(tǒng)運(yùn)行,也要給用戶帶來(lái)良好的使用體驗(yàn),設(shè)計(jì)一個(gè)很好的數(shù)據(jù)庫(kù)是必須的,因?yàn)樗軠p少用戶的等待時(shí)間,還可以對(duì)系統(tǒng)的請(qǐng)求在最短時(shí)間內(nèi)進(jìn)行響應(yīng)。所以,對(duì)數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí),需要花費(fèi)一定的時(shí)間來(lái)分析系統(tǒng)對(duì)于數(shù)據(jù)存儲(chǔ)的要求以及存儲(chǔ)的具體數(shù)據(jù),然后設(shè)計(jì)具體的存儲(chǔ)規(guī)則,保證數(shù)據(jù)庫(kù)能夠?qū)ο到y(tǒng)的各種數(shù)據(jù)請(qǐng)求進(jìn)行及時(shí)回應(yīng),縮短數(shù)據(jù)處理時(shí)間,并在一定程度上降低數(shù)據(jù)冗余,節(jié)省存儲(chǔ)空間。4.2.1數(shù)據(jù)庫(kù)概念設(shè)計(jì)實(shí)體-聯(lián)系圖還有一個(gè)名稱即E-R圖,是EntityRelationshipDiagram各英文單詞首字母的縮寫,它這種概念模型通常用于對(duì)現(xiàn)實(shí)世界進(jìn)行描述。同時(shí)它還是一種能夠直觀表達(dá)數(shù)據(jù)中實(shí)體,聯(lián)系,屬性的有效手段。繪制E-R圖能夠選擇的工具也有很多,但是OfficeVisio

這款軟件在E-R圖的繪制上一般都是作為首選工具,因?yàn)樗腔诳梢暬幚?,使用它?chuàng)建E-R圖非常簡(jiǎn)單。使用基本的E-R圖構(gòu)成元素,比如橢圓,菱形,矩形,還有實(shí)線段來(lái)表達(dá)對(duì)應(yīng)的信息,橢圓代表屬性,即實(shí)體的特征,矩形代表實(shí)體,即數(shù)據(jù)庫(kù)中的一個(gè)具體數(shù)據(jù)表,菱形代表實(shí)體中相互關(guān)系,實(shí)線段主要是完成橢圓,矩形,菱形的連接,基于這樣的方式即可完成對(duì)本系統(tǒng)的E-R圖進(jìn)行完整繪制。(1)圖4.4即為題目這個(gè)實(shí)體所擁有的屬性值。圖4.4題目實(shí)體屬性圖(2)圖4.5即為用戶這個(gè)實(shí)體所擁有的屬性值。圖4.5用戶實(shí)體屬性圖(3)圖4.6即為問(wèn)卷這個(gè)實(shí)體所擁有的屬性值。圖4.6問(wèn)卷實(shí)體屬性圖圖4.7即為問(wèn)卷調(diào)查記錄這個(gè)實(shí)體所擁有的屬性值。圖4.7問(wèn)卷調(diào)查記錄實(shí)體屬性圖圖4.8即為上面介紹的實(shí)體中存在的聯(lián)系。圖4.8實(shí)體間關(guān)系E-R圖4.2.2數(shù)據(jù)庫(kù)物理設(shè)計(jì)本小節(jié)主要任務(wù)即是根據(jù)上述內(nèi)容進(jìn)行數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)的設(shè)計(jì),也就是在數(shù)據(jù)庫(kù)中設(shè)計(jì)存放本系統(tǒng)的數(shù)據(jù)的數(shù)據(jù)表,設(shè)計(jì)數(shù)據(jù)表時(shí),需要對(duì)各個(gè)字段進(jìn)行確定,通常來(lái)說(shuō),一個(gè)實(shí)體與一張數(shù)據(jù)表相對(duì)應(yīng),實(shí)體的屬性就用來(lái)表示字段名稱,不同的字段表示的數(shù)據(jù)類型以及取值都不相同,這里需要根據(jù)系統(tǒng)實(shí)際數(shù)據(jù)的情況進(jìn)行設(shè)置,同時(shí)也需要在具體表中確定該表的主鍵,以及該表各個(gè)字段是否能夠保持空等進(jìn)行說(shuō)明,設(shè)計(jì)完成一張數(shù)據(jù)表的結(jié)構(gòu)之后,在保存時(shí)同樣要命名,盡量選擇英文名稱進(jìn)行命名并保存,方便今后系統(tǒng)對(duì)數(shù)據(jù)表進(jìn)行數(shù)據(jù)存儲(chǔ)訪問(wèn)時(shí),在提高數(shù)據(jù)存儲(chǔ)效率的同時(shí),還不容易導(dǎo)致系統(tǒng)出錯(cuò)。接下來(lái)就對(duì)設(shè)計(jì)的數(shù)據(jù)表進(jìn)行展示。表4.1問(wèn)卷表字段注釋類型空id

(主鍵)主鍵int(20)否exampaper_name問(wèn)卷名稱varchar(200)否exampaper_date時(shí)長(zhǎng)(分鐘)int(11)否exampaper_jieshuyu結(jié)束語(yǔ)varchar(255)是exampaper_types問(wèn)卷狀態(tài)int(11)否create_time創(chuàng)建時(shí)間timestamp否表4.2題目表字段注釋類型空id

(主鍵)主鍵int(20)否exampaper_id所屬問(wèn)卷id(外鍵)int(20)否examquestion_name試題名稱varchar(200)否examquestion_options選項(xiàng)longtext是examquestion_types試題類型int(20)是examquestion_sequence試題排序,值越大排越前面int(20)是create_time創(chuàng)建時(shí)間timestamp否表4.3問(wèn)卷調(diào)查記錄表字段注釋類型空id

(主鍵)主鍵int(20)否examrecord_uuid_number問(wèn)卷調(diào)查編號(hào)varchar(200)是yonghu_id問(wèn)卷調(diào)查用戶int(20)否exampaper_id所屬問(wèn)卷id(外鍵)int(20)否insert_time問(wèn)卷調(diào)查時(shí)間timestamp否create_time創(chuàng)建時(shí)間timestamp否表4.4管理員表字段注釋類型空id

(主鍵)主鍵bigint(20)否username用戶名varchar(100)否password密碼varchar(100)否role角色varchar(100)是addtime新增時(shí)間timestamp否表4.5新聞資訊表字段注釋類型空id

(主鍵)主鍵int(11)否news_name新聞資訊名稱varchar(200)是news_types新聞?lì)愋蚷nt(11)是news_photo新聞資訊圖片varchar(200)是insert_time新聞資訊時(shí)間timestamp是news_content新聞資訊詳情text是create_time創(chuàng)建時(shí)間timestamp是表4.6答題詳情表字段注釋類型空id

(主鍵)主鍵int(20)否examredetails_uuid_number問(wèn)卷編號(hào)varchar(200)是yonghu_id用戶idint(20)否examquestion_id試題id(外鍵)int(20)否examredetails_myanswer用戶選項(xiàng)varchar(200)是create_time創(chuàng)建時(shí)間timestamp否表4.7用戶表字段注釋類型空id

(主鍵)主鍵int(11)否username賬戶varchar(200)是password密碼varchar(200)是yonghu_name用戶姓名varchar(200)是sex_types性別int(11)是yonghu_id_number身份證號(hào)varchar(200)是yonghu_phone手機(jī)號(hào)varchar(200)是yonghu_photo照片varchar(200)是create_time創(chuàng)建時(shí)間timestamp是第5章系統(tǒng)實(shí)現(xiàn)編程人員在搭建的開發(fā)環(huán)境中,運(yùn)用編程技術(shù)實(shí)現(xiàn)本系統(tǒng)設(shè)計(jì)的各個(gè)操作權(quán)限的功能。在本節(jié)中,就展示部分操作權(quán)限的功能與界面。5.1管理員功能實(shí)現(xiàn)5.1.1問(wèn)卷管理圖5.1即為編碼實(shí)現(xiàn)的問(wèn)卷管理界面,管理員在該界面中可以對(duì)已有問(wèn)卷進(jìn)行啟用或禁用,可以新增問(wèn)卷,編輯更改已有問(wèn)卷的資料,包括問(wèn)卷名稱,結(jié)束語(yǔ)等信息,可以刪除需要?jiǎng)h除的問(wèn)卷,可以根據(jù)問(wèn)卷名稱,問(wèn)卷的狀態(tài)來(lái)獲取需要的問(wèn)卷信息。圖5.1問(wèn)卷管理界面核心代碼:/***后端修改*/@RequestMapping("/update")publicRupdate(@RequestBodyExampaperEntityexampaper,HttpServletRequestrequest){logger.debug("update方法:,,Controller:{},,exampaper:{}",this.getClass().getName(),exampaper.toString());Stringrole=String.valueOf(request.getSession().getAttribute("role"));if(StringUtil.isEmpty(role))returnR.error(511,"權(quán)限為空");//根據(jù)字段查詢是否有相同數(shù)據(jù)Wrapper<ExampaperEntity>queryWrapper=newEntityWrapper<ExampaperEntity>().notIn("id",exampaper.getId()).andNew().eq("exampaper_name",exampaper.getExampaperName()).eq("exampaper_date",exampaper.getExampaperDate()).eq("exampaper_types",exampaper.getExampaperTypes());("sql語(yǔ)句:"+queryWrapper.getSqlSegment());ExampaperEntityexampaperEntity=exampaperService.selectOne(queryWrapper);if(exampaperEntity==null){//Stringrole=String.valueOf(request.getSession().getAttribute("role"));//if("".equals(role)){//exampaper.set//}exampaperService.updateById(exampaper);//根據(jù)id更新returnR.ok();}else{returnR.error(511,"表中有相同數(shù)據(jù)");}}/***刪除*/@RequestMapping("/delete")publicRdelete(@RequestBodyInteger[]ids){logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());exampaperService.deleteBatchIds(Arrays.asList(ids));returnR.ok();}5.1.2問(wèn)卷調(diào)查管理圖5.2即為編碼實(shí)現(xiàn)的問(wèn)卷調(diào)查管理界面,管理員在該界面中對(duì)用戶提交的問(wèn)卷調(diào)查信息進(jìn)行查看,管理員可以直接查看每條問(wèn)卷調(diào)查的調(diào)查詳情信息,同時(shí)可以刪除問(wèn)卷調(diào)查信息。圖5.2問(wèn)卷調(diào)查管理界面核心代碼:/***批量上傳*/@RequestMapping("/batchInsert")publicRsave(StringfileName){logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);try{List<ExampaperEntity>exampaperList=newArrayList<>();//上傳的東西Map<String,List<String>>seachFields=newHashMap<>();//要查詢的字段Datedate=newDate();intlastIndexOf=fileName.lastIndexOf(".");if(lastIndexOf==-1){returnR.error(511,"該文件沒(méi)有后綴");}else{Stringsuffix=fileName.substring(lastIndexOf);if(!".xls".equals(suffix)){returnR.error(511,"只支持后綴為xls的excel文件");}else{URLresource=this.getClass().getClassLoader().getResource("static/upload/"+fileName);//獲取文件路徑Filefile=newFile(resource.getFile());if(!file.exists()){returnR.error(511,"找不到上傳文件,請(qǐng)聯(lián)系管理員");}else{List<List<String>>dataList=PoiUtil.poiImport(file.getPath());//讀取xls文件dataList.remove(0);//刪除第一行,因?yàn)榈谝恍惺翘崾緁or(List<String>data:dataList){//循環(huán)ExampaperEntityexampaperEntity=newExampaperEntity();//exampaperEntity.setExampaperName(data.get(0));//問(wèn)卷名稱要改的//exampaperEntity.setExampaperDate(Integer.valueOf(data.get(0)));//時(shí)長(zhǎng)(分鐘)要改的//exampaperEntity.setExampaperTypes(Integer.valueOf(data.get(0)));//問(wèn)卷狀態(tài)要改的//exampaperEntity.setCreateTime(date);//時(shí)間exampaperList.add(exampaperEntity);//把要查詢是否重復(fù)的字段放入map中}//查詢是否重復(fù)exampaperService.insertBatch(exampaperList);returnR.ok();}}}}catch(Exceptione){returnR.error(511,"批量插入數(shù)據(jù)異常,請(qǐng)聯(lián)系管理員");}}/***前端列表*/@IgnoreAuth@RequestMapping("/list")publicRlist(@RequestParamMap<String,Object>params,HttpServletRequestrequest){logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));//沒(méi)有指定排序字段就默認(rèn)id倒序if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){params.put("orderBy","id");}PageUtilspage=exampaperService.queryPage(params);//字典表數(shù)據(jù)轉(zhuǎn)換List<ExampaperView>list=(List<ExampaperView>)page.getList();for(ExampaperViewc:list)dictionaryService.dictionaryConvert(c,request);//修改對(duì)應(yīng)字典表字段returnR.ok().put("data",page);}/***前端詳情*/@RequestMapping("/detail/{id}")publicRdetail(@PathVariable("id")Longid,HttpServletRequestrequest){logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);ExampaperEntityexampaper=exampaperService.selectById(id);if(exampaper!=null){//entity轉(zhuǎn)viewExampaperViewview=newExampaperView();BeanUtils.copyProperties(exampaper,view);//把實(shí)體數(shù)據(jù)重構(gòu)到view中//修改對(duì)應(yīng)字典表字段dictionaryService.dictionaryConvert(view,request);returnR.ok().put("data",view);}else{returnR.error(511,"查不到數(shù)據(jù)");}}5.1.3題目管理圖5.3即為編碼實(shí)現(xiàn)的題目管理界面,管理員在該界面中可以導(dǎo)出題目,可以新增題目,可以對(duì)指定的題目信息進(jìn)行修改,刪除,同時(shí)可以查看用戶對(duì)各個(gè)題目選項(xiàng)的統(tǒng)計(jì)信息,該統(tǒng)計(jì)信息是以餅圖進(jìn)行展示。圖5.3題目管理界面核心代碼:/***后端詳情*/@RequestMapping("/info/{id}")publicRinfo(@PathVariable("id")Longid,HttpServletRequestrequest){logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);ExamquestionEntityexamquestion=examquestionService.selectById(id);if(examquestion!=null){//entity轉(zhuǎn)viewExamquestionViewview=newExamquestionView();BeanUtils.copyProperties(examquestion,view);//把實(shí)體數(shù)據(jù)重構(gòu)到view中//級(jí)聯(lián)表ExampaperEntityexampaper=exampaperService.selectById(examquestion.getExampaperId());if(exampaper!=null){BeanUtils.copyProperties(exampaper,view,newString[]{"id","createDate"});//把級(jí)聯(lián)的數(shù)據(jù)添加到view中,并排除id和創(chuàng)建時(shí)間字段view.setExampaperId(exampaper.getId());}//修改對(duì)應(yīng)字典表字段dictionaryService.dictionaryConvert(view,request);returnR.ok().put("data",view);}else{returnR.error(511,"查不到數(shù)據(jù)");}}/***后端保存*/@RequestMapping("/save")publicRsave(@RequestBodyExamquestionEntityexamquestion,HttpServletRequestrequest){logger.debug("save方法:,,Controller:{},,examquestion:{}",this.getClass().getName(),examquestion.toString());Stringrole=String.valueOf(request.getSession().getAttribute("role"));if(StringUtil.isEmpty(role))returnR.error(511,"權(quán)限為空");Wrapper<ExamquestionEntity>queryWrapper=newEntityWrapper<ExamquestionEntity>().eq("exampaper_id",examquestion.getExampaperId()).eq("examquestion_name",examquestion.getExamquestionName()).eq("examquestion_options",examquestion.getExamquestionOptions()).eq("examquestion_types",examquestion.getExamquestionTypes()).eq("examquestion_sequence",examquestion.getExamquestionSequence());("sql語(yǔ)句:"+queryWrapper.getSqlSegment());ExamquestionEntityexamquestionEntity=examquestionService.selectOne(queryWrapper);if(examquestionEntity==null){examquestion.setCreateTime(newDate());examquestionService.insert(examquestion);returnR.ok();}else{returnR.error(511,"表中有相同數(shù)據(jù)");}}5.1.4用戶管理圖5.4即為編碼實(shí)現(xiàn)的用戶管理界面,管理員在該界面中為用戶重置密碼,修改用戶基本信息,新增用戶,刪除需要?jiǎng)h除的用戶信息。圖5.4用戶管理界面核心代碼:/***后端修改*/@RequestMapping("/update")publicRupdate(@RequestBodyYonghuEntityyonghu,HttpServletRequestrequest){logger.debug("update方法:,,Controller:{},,yonghu:{}",this.getClass().getName(),yonghu.toString());Stringrole=String.valueOf(request.getSession().getAttribute("role"));if(StringUtil.isEmpty(role))returnR.error(511,"權(quán)限為空");//根據(jù)字段查詢是否有相同數(shù)據(jù)Wrapper<YonghuEntity>queryWrapper=newEntityWrapper<YonghuEntity>().notIn("id",yonghu.getId()).andNew().eq("username",yonghu.getUsername()).or().eq("yonghu_id_number",yonghu.getYonghuIdNumber()).or().eq("yonghu_phone",yonghu.getYonghuPhone());("sql語(yǔ)句:"+queryWrapper.getSqlSegment());YonghuEntityyonghuEntity=yonghuService.selectOne(queryWrapper);if("".equals(yonghu.getYonghuPhoto())||"null".equals(yonghu.getYonghuPhoto())){yonghu.setYonghuPhoto(null);}if(yonghuEntity==null){//Stringrole=String.valueOf(request.getSession().getAttribute("role"));//if("".equals(role)){//yonghu.set//}yonghuService.updateById(yonghu);//根據(jù)id更新returnR.ok();}else{returnR.error(511,"賬戶或者手機(jī)號(hào)或者身份證號(hào)已經(jīng)被使用");}}5.1.5新聞資訊管理圖5.5即為編碼實(shí)現(xiàn)的新聞資訊管理界面,管理員在該界面中負(fù)責(zé)發(fā)布新聞資訊,更改新聞資訊的部分信息,刪除需要?jiǎng)h除的新聞資訊信息。圖5.5新聞資訊管理界面核心代碼:/***后端列表*/@RequestMapping("/page")publicRpage(@RequestParamMap<String,Object>params,HttpServletRequestrequest){logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));Stringrole=String.valueOf(request.getSession().getAttribute("role"));if(StringUtil.isEmpty(role))returnR.error(511,"權(quán)限為空");elseif("用戶".equals(role))params.put("yonghuId",request.getSession().getAttribute("userId"));if(params.get("orderBy")==null||params.get("orderBy")==""){params.put("orderBy","id");}PageUtilspage=newsService.queryPage(params);//字典表數(shù)據(jù)轉(zhuǎn)換List<NewsView>list=(List<NewsView>)page.getList();for(NewsViewc:list){//修改對(duì)應(yīng)字典表字段dictionaryService.dictionaryConvert(c,request);}returnR.ok().put("data",page);}5.2用戶功能實(shí)現(xiàn)5.2.1問(wèn)卷列表圖5.6即為編碼實(shí)現(xiàn)的問(wèn)卷列表界面,用戶在該界面中選擇問(wèn)卷并參與問(wèn)卷調(diào)查。圖5.6問(wèn)卷列表界面核心代碼:/***前端列表*/@IgnoreAuth@RequestMapping("/list")publicRlist(@RequestParamMap<String,Object>params,HttpServletRequestrequest){logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));//沒(méi)有指定排序字段就默認(rèn)id倒序if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){params.put("orderBy","id");}PageUtilspage=examrecordService.queryPage(params);//字典表數(shù)據(jù)轉(zhuǎn)換List<ExamrecordView>list=(List<ExamrecordView>)page.getList();for(ExamrecordViewc:list)dictionaryService.dictionaryConvert(c,request);//修改對(duì)應(yīng)字典表字段returnR.ok().put("data",page);}/***前端詳情*/@RequestMapping("/detail/{id}")publicRdetail(@PathVariable("id")Longid,HttpServletRequestrequest){logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);ExamrecordEntityexamrecord=examrecordService.selectById(id);if(examrecord!=null){//entity轉(zhuǎn)viewExamrecordViewview=newExamrecordView();BeanUtils.copyProperties(examrecord,view);//把實(shí)體數(shù)據(jù)重構(gòu)到view中//級(jí)聯(lián)表ExampaperEntityexampaper=exampaperService.selectById(examrecord.getExampaperId());if(exampaper!=null){BeanUtils.copyProperties(exampaper,view,newString[]{"id","createDate"});//把級(jí)聯(lián)的數(shù)據(jù)添加到view中,并排除id和創(chuàng)建時(shí)間字段view.setExampaperId(exampaper.getId());}//級(jí)聯(lián)表YonghuEntityyonghu=yonghuService.selectById(examrecord.getYonghuId());if(yonghu!=null){BeanUtils.copyProperties(yonghu,view,newString[]{"id","createDate"});//把級(jí)聯(lián)的數(shù)據(jù)添加到view中,并排除id和創(chuàng)建時(shí)間字段view.setYonghuId(yonghu.getId());}//修改對(duì)應(yīng)字典表字段dictionaryService.dictionaryConvert(view,request);returnR.ok().put("data",view);}else{returnR.error(511,"查不到數(shù)據(jù)");}}5.2.2問(wèn)卷調(diào)查圖5.7即為編碼實(shí)現(xiàn)的問(wèn)卷調(diào)查界面,用戶在該界面中主要根據(jù)問(wèn)卷調(diào)查題目信息進(jìn)行選項(xiàng)答題,答題結(jié)束可以選擇界面頂端的結(jié)束問(wèn)卷調(diào)查按鈕離開問(wèn)卷調(diào)查界面。圖5.7問(wèn)卷調(diào)查界面核心代碼:/***前端詳情*/@RequestMapping("/detail/{id}")publicRdetail(@PathVariable("id")Longid,HttpServletRequestrequest){logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);ExamredetailsEntityexamredetails=examredetailsService.selectById(id);if(examredetails!=null){//entity轉(zhuǎn)viewExamredetailsViewview=newExamredetailsView();BeanUtils.copyProperties(examredetails,view);//把實(shí)體數(shù)據(jù)重構(gòu)到view中//級(jí)聯(lián)表ExamquestionEntityexamquestion=examquestionService.selectById(examredetails.getExamquestionId());if(examquestion!=null){BeanUtils.copyProperties(examquestion,view,newString[]{"id","createDate"});//把級(jí)聯(lián)的數(shù)據(jù)添加到view中,并排除id和創(chuàng)建時(shí)間字段view.setExamquestionId(examquestion.getId());}//級(jí)聯(lián)表YonghuEntityyonghu=yonghuService.selectById(examredetails.getYonghuId());if(yonghu!=null){BeanUtils.copyProperties(yonghu,view,newString[]{"id","createDate"});//把級(jí)聯(lián)的數(shù)據(jù)添加到view中,并排除id和創(chuàng)建時(shí)間字段view.setYonghuId(yonghu.getId());}//修改對(duì)應(yīng)字典表字段dictionaryService.dictionaryConvert(view,request);returnR.ok().put("data",view);}else{returnR.error(511,"查不到數(shù)據(jù)");}}5.2.3新聞資訊圖5.8即為編碼實(shí)現(xiàn)的新聞資訊界面,用戶在該界面中瀏覽新聞資訊,在界面右上角的搜索框中編輯新聞標(biāo)題可以獲取匹配的新聞資訊信息。圖5.8新聞資訊界面核心代碼:/***前端詳情*/@RequestMapping("/detail/{id}")publicRdetail(@PathVariable("id")Longid,HttpServletRequestrequest){logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);NewsEntitynews=newsService.selectById(id);if(news!=null){//entity轉(zhuǎn)viewNewsViewview=newNewsView();BeanUtils.copyProperties(news,view);//把實(shí)體數(shù)據(jù)重構(gòu)到view中//修改對(duì)應(yīng)字典表字段dictionaryService.dictionaryConvert(view,request);returnR.ok().put("data",view);}else{returnR.error(511,"查不到數(shù)據(jù)");}}5.2.4問(wèn)卷調(diào)查記錄圖5.9即為編碼實(shí)現(xiàn)的問(wèn)卷調(diào)查記錄界面,用戶在該界面中可以對(duì)參與問(wèn)卷調(diào)查的記錄信息進(jìn)行查看。圖5.9問(wèn)卷調(diào)查記錄界面核心代碼:@RequestMapping("/saveExamredetails")publicRsaveExamredetails(@RequestBodyExamredetailsEntityexamredetails,IntegerexamrecordId,HttpServletRequestrequest){logger.debug("save方法:,,Controller:{},,examredetails:{}",this.getClass().getName(),examredetails.toString());Stringrole=String.valueOf(request.getSession().getAttribute("role"));if(StringUtil.isEmpty(role)){returnR.error(511,"權(quán)限為空");}elseif(role.contains("用戶id")){examredetails.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));}examredetails.setCreateTime(newDate());booleaninsert=examredetailsService.insert(examredetails);if(!insert){returnR.error();}returnR.ok();}

第6章系統(tǒng)測(cè)試當(dāng)系統(tǒng)測(cè)試環(huán)節(jié)開始的時(shí)候,也就說(shuō)明對(duì)于系統(tǒng)的編碼已經(jīng)弄得大致通順了,剩下來(lái)需要對(duì)一些模塊和功能進(jìn)行測(cè)試,這個(gè)環(huán)節(jié)就叫系統(tǒng)測(cè)試。在程序開發(fā)過(guò)程中,系統(tǒng)測(cè)試是整個(gè)開發(fā)過(guò)程必不可少的一個(gè)環(huán)節(jié)。原因很簡(jiǎn)單,系統(tǒng)開發(fā)人員在面對(duì)各種需求需要對(duì)各個(gè)模塊進(jìn)行編碼,開發(fā)人員編寫過(guò)程中,對(duì)于程序的理解全部都在編碼里面,一人計(jì)短,當(dāng)一個(gè)人去做一些事情的時(shí)候,把自己的理解變成成果,很有可能會(huì)出現(xiàn)理解偏差,甚至是理解錯(cuò)誤,這個(gè)在程序開發(fā)過(guò)程中很常見(jiàn)。程序開發(fā)人員在面對(duì)復(fù)雜的邏輯,沒(méi)有想象中的多么清晰,開發(fā)過(guò)程就是面對(duì)著一堆代碼,不斷的變換數(shù)據(jù)類型,并且對(duì)各種操作用計(jì)算機(jī)編程語(yǔ)言進(jìn)行實(shí)現(xiàn),這些很容易實(shí)現(xiàn)程序開發(fā)人員的想法,但是如果是比較復(fù)雜的邏輯,很可能會(huì)出現(xiàn)各種問(wèn)題,這是無(wú)法避免的。所以說(shuō),需要額外的人員進(jìn)行系統(tǒng)測(cè)試編寫,不要站在程序開發(fā)人員的角度去思考問(wèn)題,要站在用戶使用的角度去發(fā)現(xiàn)問(wèn)題,這樣開發(fā)與測(cè)試的分離,有助于系統(tǒng)開發(fā)的強(qiáng)壯,讓程序表達(dá)的更完美一些。之所以把系統(tǒng)測(cè)試安排到程序開發(fā)過(guò)程中的原因在于,當(dāng)測(cè)試發(fā)現(xiàn)問(wèn)題,就可以直接反饋到程序開發(fā)人員手里,可以以最快的時(shí)間解決問(wèn)題,這樣能大大的提高開發(fā)效率??偟膩?lái)說(shuō),在整個(gè)軟件開發(fā)過(guò)程中,系統(tǒng)測(cè)試這個(gè)環(huán)節(jié)也必須要重視的,所以必須在系統(tǒng)測(cè)試環(huán)節(jié)做好應(yīng)該做好的事情,讓程序開發(fā)從開始到結(jié)束都有一個(gè)完美的流程。6.1功能測(cè)試本節(jié)主要選擇一些功能進(jìn)行具體測(cè)試描述,在相應(yīng)的功能里面,根據(jù)不同的合法與不合法條件輸入看程序是否設(shè)定的有相關(guān)的判斷,能否達(dá)到使用效果。以下會(huì)描述部分功能的測(cè)試過(guò)程和結(jié)果。6.1.1登錄功能測(cè)試登錄是一個(gè)常規(guī)功能,雖然是常規(guī)功能,但是用處很大,可以拒絕非法用戶訪問(wèn),只有合法用戶才可以訪問(wèn)對(duì)應(yīng)的功能,這樣能保證程序設(shè)定的功能符合安全性要求。表6.1管理員登錄功能測(cè)試表管理員賬號(hào)管理員密碼結(jié)果uuuuuu成功登錄系統(tǒng)yyyuuu登錄失敗uuuyyy登錄失敗只有正確的賬號(hào)密碼才會(huì)進(jìn)行跳轉(zhuǎn)到對(duì)應(yīng)的功能區(qū),如果輸入的賬號(hào)密碼不對(duì)的話,肯定會(huì)有相關(guān)提示,用來(lái)提示操作人員注意輸入正確的賬號(hào)密碼,這樣有助于提高用戶體驗(yàn)。這里以使用者提交錯(cuò)誤的賬號(hào)為“yyy”,正確的密碼為“uuu”為例進(jìn)行測(cè)試,具體反饋結(jié)果看下面。圖6.1登錄失敗提示6.1.2修改密碼功能測(cè)試任何用戶角色都有安全性要求,那么對(duì)應(yīng)的密碼最好是經(jīng)常更改,只有經(jīng)常更改才會(huì)降低壞人的有機(jī)可乘幾率,達(dá)到密碼保護(hù)的最低要求,當(dāng)然,如果用戶登錄人離開了,為了防止其他人乘機(jī)篡改密碼,那么也會(huì)設(shè)定舊密碼要求,只有輸入正確的舊密碼才可以進(jìn)行密碼的修改。下面就是測(cè)試過(guò)程。表6.2修改密碼功能測(cè)試表之前的舊密碼設(shè)置的新密碼結(jié)果uuuyyy成功修改密碼hhhyyy修改密碼失敗uuu修改密碼失敗不管是舊密碼錯(cuò)誤還是新密碼不合規(guī),都會(huì)提示相應(yīng)的要求,下面就是關(guān)于舊密碼輸入錯(cuò)誤的提示。圖6.2錯(cuò)誤的舊密碼反饋提示6.2系統(tǒng)測(cè)試結(jié)果對(duì)在線問(wèn)卷調(diào)查系統(tǒng)進(jìn)行了各種檢測(cè),包含功能檢測(cè)和性能檢測(cè),甚至是系統(tǒng)的操作性方面也進(jìn)行了檢測(cè),以及兼容性檢測(cè),通過(guò)各方面檢測(cè)結(jié)果來(lái)判定系統(tǒng)是符合設(shè)計(jì)目標(biāo),達(dá)到開發(fā)預(yù)期。系統(tǒng)是可以實(shí)現(xiàn)所開發(fā)的功能,并且在擴(kuò)展性或者是穩(wěn)定性上面,也有很好的表現(xiàn),能完全的滿足用戶需求。

結(jié)論由于本人學(xué)習(xí)的是計(jì)算機(jī)方面的專業(yè),對(duì)于計(jì)算機(jī)軟件方面的相關(guān)知識(shí)也進(jìn)行過(guò)課堂上的學(xué)習(xí)以及課后的實(shí)際操作練習(xí),因此,對(duì)于開發(fā)一款已經(jīng)確定了課題的在線問(wèn)卷調(diào)查系統(tǒng),從功能需求,功能模塊劃分,數(shù)據(jù)庫(kù)的選擇,數(shù)據(jù)庫(kù)的設(shè)計(jì),編程語(yǔ)言的確定,系統(tǒng)界面的布局和設(shè)計(jì)等知識(shí),我都有個(gè)大致的思路。所以,在參照軟件設(shè)計(jì)思想以及設(shè)計(jì)流程的基礎(chǔ)上,我運(yùn)用已經(jīng)具備的理論知識(shí),加上后期從網(wǎng)絡(luò)渠

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論