版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
-1-第1章緒論1.1課題背景二十一世紀互聯(lián)網的出現(xiàn),改變了幾千年以來人們的生活,不僅僅是生活物資的豐富,還有精神層次的豐富。時代進步的標志,就是讓人們過上更好的生活。在互聯(lián)網誕生之前,地域位置往往是人們思想上不可跨域的鴻溝,信息的傳播速度極慢,信息處理的速度和要求還是通過人們騎馬或者是信鴿傳遞,這些信息傳遞都是不可控制的,中間很有可能丟失,信息的傳遞水平決定了人們生活的水平?,F(xiàn)如今,大家都在用互聯(lián)網來實現(xiàn)自己的目的,從內部管理設置計算機管理,提高內部信息管理水平,從外部市場也可以用計算機獲取相關數(shù)據(jù)進行處理,如今各行各業(yè)已經嚴重依賴于計算機了。本課題研究和開發(fā)在線問卷調查系統(tǒng),讓安裝在計算機上的該系統(tǒng)變成管理人員的小幫手,提高問卷調查信息處理速度,規(guī)范問卷調查信息處理流程,讓管理人員的產出效益更高。1.2課題意義傳統(tǒng)處理數(shù)據(jù),必須是一張張紙,然后處理完畢又是統(tǒng)計在一張張紙上面,不斷的重復處理,最終有個結果給最高層作為參考,這個模式在互聯(lián)網沒有出現(xiàn)之前,是一種常見的事情,信息管理的效率提不上去,那就用人才,人多力量大,是一個以前人們的常識。計算機的誕生就是發(fā)現(xiàn)了人多力量大的不足,比如高端計算人才的培養(yǎng)已經跟不上使用了,所以人們研究出專門幫助人們計算的機器,就是計算機的前身,到了互聯(lián)網時代,人們發(fā)現(xiàn)完全可以讓程序供應商提供解決方案,自己挑選自己合適的方案來提高自己的產出比。于是市面上就出現(xiàn)了各種各樣的依靠程序處理信息的解決方案。本課題研發(fā)的在線問卷調查系統(tǒng),就是提供問卷調查信息處理的解決方案,它可以短時間處理完信息,并且只需要使用者動動鼠標和鍵盤就能獲取自己需要的信息,并且這些信息都有專門的存儲設備,而且數(shù)據(jù)的備份和遷移都可以設定為無人值守,從人力角度和信息處理角度以及信息安全角度,在線問卷調查系統(tǒng)是完勝傳統(tǒng)紙質操作的,所以在線問卷調查系統(tǒng)就是如此的值得信賴。1.3研究內容本文對在線問卷調查系統(tǒng)的設計與實現(xiàn)分成六個章節(jié)進行描述。第1章:研究在線問卷調查系統(tǒng)的背景,以及開發(fā)在線問卷調查系統(tǒng)的意義。第2章:對開發(fā)在線問卷調查系統(tǒng)的環(huán)境還有技術進行說明。第3章:分析在線問卷調查系統(tǒng)的可行性,性能,流程以及功能。第4章:設計在線問卷調查系統(tǒng)的功能結構,設計數(shù)據(jù)庫E-R圖以及對數(shù)據(jù)表的存儲結構進行設計。第5章:實現(xiàn)在線問卷調查系統(tǒng)的功能并進行功能界面展示。第6章:對系統(tǒng)測試進行闡述,以及對本系統(tǒng)部分功能進行檢測。
第2章開發(fā)環(huán)境與技術本章節(jié)對開發(fā)在線問卷調查系統(tǒng)需要搭建的開發(fā)環(huán)境,還有在線問卷調查系統(tǒng)開發(fā)中使用的編程技術等進行闡述。2.1Java語言Java語言是當今為止依然在編程語言行業(yè)具有生命力的常青樹之一。Java語言最原始的誕生,不僅僅是創(chuàng)造者感覺C語言在編程上面很麻煩,如果只是專注于業(yè)務邏輯的處理,會導致忽略了各種指針以及垃圾回收這些操作,導致出現(xiàn)問題需要解決的時間往往大于正常編程處理業(yè)務邏輯的時間,這些是非常浪費時間的。Java語言的創(chuàng)造者就完美的解決了這個問題,把指針處理和垃圾處理全部自動化,雖然這會損失一些性能,但是隨著計算機硬件的不斷發(fā)展,這些性能是可以忽略考慮的。并且C語言是針對硬件開發(fā)的語言,在符合條件的硬件上面進行編程可以最大化利用硬件的性能,但是隨著硬件的變化或者操作系統(tǒng)的變更,如果還是用C語言的話需要對整個程序進行重新編程,只有隨著市場變化而變化的語言才是符合潮流,符合生存規(guī)律的語言。Java語言的創(chuàng)造者就針對C語言的缺點專門開發(fā)了Java語言。讓Java語言不管是在什么樣的環(huán)境里都是可以運行,因為在Java語言運行外面套了一個殼,也就是虛擬機,只要是Java虛擬機能安裝的電腦都可以運行Java的程序。2.2MYSQL數(shù)據(jù)庫MySQL數(shù)據(jù)庫是關系型數(shù)據(jù)庫的一種,也是傳統(tǒng)的行式數(shù)據(jù)模式,獲取一些數(shù)據(jù)是先一行一行的獲取,然后一行一行的顯示,與最近大數(shù)據(jù)興起的列式數(shù)據(jù)庫有著明顯的不同。行式數(shù)據(jù)庫主要是處理最重要的數(shù)據(jù)邏輯部分,并且必須是有效數(shù)據(jù),這樣每一處的數(shù)據(jù)關聯(lián)都是不可損壞,如果對數(shù)據(jù)安全性比較高的肯定是需要選擇MySQL數(shù)據(jù)庫,列式數(shù)據(jù)庫的發(fā)明僅僅是因為讀取效率高,與傳統(tǒng)的MySQL數(shù)據(jù)庫比起來在數(shù)據(jù)寫入方面并不會高明到哪里。MySQL雖然比起oracle或者SQLSERVER來講,安裝包只是幾十兆甚至幾百兆,有點小,但是功能并不會弱到哪里,嚴格遵循SQL標準語法。MySQL的數(shù)據(jù)存放形式從大向小的說是數(shù)據(jù)庫最大,然后是表,每個表里面存放數(shù)據(jù)是有一定的規(guī)則的,數(shù)據(jù)存放是表格形式的,也就是說有橫也有豎,橫著的為行,一般表示一條數(shù)據(jù),每個表都有字段,而字段是以列的形式存在,這樣能保證一條數(shù)據(jù)每一個字段對應的是相同數(shù)據(jù)類型的數(shù)據(jù)。表與表之間還可以進行關聯(lián),進行分表操作,如果一條數(shù)據(jù)相關項目屬性太多,那么可以把有效的相關聯(lián)系做成關聯(lián),可以設定是否唯一。2.3IDEA開發(fā)工具IDEA是捷克共和國的Java程序員開發(fā)人員創(chuàng)造的一個開發(fā)軟件,剛開始主要是對于用Eclipse軟件他們用得不順手,所以直接開發(fā)了這款軟件。之所以不順手原因在于沒有代碼提升功能,原因是Eclipse只是把代碼提示作為一種插件形式的存在,如果有些程序開發(fā)人員不清楚代碼提示插件可能會出問題,并且代碼提示只是用來作為插件,所以功能上有所欠缺。IDEA不僅僅代碼提示做的很好,在代碼重構上面更上如虎添翼,程序開發(fā)人員可以選擇一段代碼然后IDEA就會對代碼進行分解重構,有效的把代碼弄得更夠層次感,復用性更高,用著更簡潔和方便,大大的減少了代碼工作量,提升了代碼開發(fā)效率。當然,IDEA對于使用者這么好,肯定也是有目的的,原因在于插件越多越友好,就需要花費大量的金錢來使用,所以說IDEA使用主要是看自己喜好。2.4SpringBoot框架SpringBoot是一種不需要代碼生成的一種框架,并且可以不需要配置任何的XML文件就可以,因為SpringBoot里面自帶了很多接口,只需要配置不同的接口就會自動的應用并且識別需要的依賴,在配置方面非常的方便,使用起來感覺像沒有用到框架的感覺。SpringBoot有很多默認的配置文件,并且可以對默認的配置文件進行修改,可以設置為自動加載,可以對異常處理分為全局異常處理和默認異常處理。SpringBoot使用過程中就像是使用什么直接注冊什么,所謂的注冊也就是在對應的類和方法上面進行一個特殊的聲明即可。
第3章系統(tǒng)分析本文作者在確定了研究的課題之后,從各大數(shù)字圖書館下載文獻來閱讀,并了解同類型的網站具備的大致功能,然后與本系統(tǒng)用戶的實際需求結合進行分析,得出本系統(tǒng)要研究的具體功能與性能。雖然分析系統(tǒng)這一階段性工作主要是確定功能,但它卻影響著后面系統(tǒng)開發(fā)環(huán)節(jié)的進展,它也是系統(tǒng)開發(fā)流程中比較重要的一個環(huán)節(jié)。3.1可行性分析以下部分是從三個角度來進行可行性分析,確保開發(fā)成功的前提是有可行性分析,只有進行提前分析,符合程序開發(fā)流程才不至于開發(fā)過程的中斷。3.1.1技術可行性在技術實現(xiàn)層次,分析了好幾種技術實現(xiàn)方法,并且都有對應的成功案例,也有很多開源模塊可以進行參考,所以從技術可行性分析來講,實現(xiàn)在線問卷調查系統(tǒng)是沒有問題的。3.1.2經濟可行性對于身為學生的開發(fā)者而言,在經濟資源上面可用者很少,為了開發(fā)在線問卷調查系統(tǒng),通過從技術分析發(fā)現(xiàn)可以用自己用的電腦進行開發(fā),并且學校機房的配置也可以達到要求。最重要的是技術資源一般都是開源免費使用的,因此得出結論,經濟方面是具有可行性的。3.1.3操作可行性在線問卷調查系統(tǒng)的具體實現(xiàn),本身參考人類的正常操作邏輯,把常用的操作習慣當做主要的導航實現(xiàn),可以讓使用者更快速的理解并且上手操作,實現(xiàn)符合邏輯的操作流程是操作可行性的具體體現(xiàn)。以上就是從不同的角度來分析,確保了在線問卷調查系統(tǒng)的正常開展。3.2系統(tǒng)流程在線問卷調查系統(tǒng)投入使用后,其各個功能的內部操作邏輯需要使用者通過流程圖來進行了解。3.2.1操作流程使用者在操作在線問卷調查系統(tǒng)中,應該按照本系統(tǒng)提供的操作流程(圖3.1即為本系統(tǒng)的操作流程圖)進行操作,這樣可以減少使用者操作中出現(xiàn)的錯誤,從而節(jié)省進入在線問卷調查系統(tǒng)的時間。圖3.1系統(tǒng)操作流程3.2.2登錄流程在線問卷調查系統(tǒng)通過登錄功能(圖3.2即為其登錄的流程)引導使用者進入指定的功能操作區(qū),也避免非本系統(tǒng)的用戶享受本系統(tǒng)提供的服務以及查看本系統(tǒng)提供的信息,從而保障本系統(tǒng)用戶的安全使用。圖3.2登錄流程3.2.3刪除信息流程在線問卷調查系統(tǒng)在經過長期使用后,會產生很多的數(shù)據(jù)信息。為了騰出存儲空間存放更多的數(shù)據(jù),本系統(tǒng)數(shù)據(jù)庫中存儲的數(shù)據(jù),一些沒有參考價值的數(shù)據(jù)需要進行刪除(圖3.3即為刪除信息的流程),刪除數(shù)據(jù)過程中,為避免誤刪,使用者要根據(jù)系統(tǒng)的提示來決定是否刪除數(shù)據(jù)。圖3.3刪除信息流程3.2.4添加信息流程在線問卷調查系統(tǒng)提供可視化的功能操作區(qū),非常方便使用者進行數(shù)據(jù)操作,當使用者往系統(tǒng)中錄入數(shù)據(jù)時(圖3.4即為添加信息的流程),本系統(tǒng)也會進行數(shù)據(jù)合法性的判斷,符合要求的數(shù)據(jù)才能夠在數(shù)據(jù)庫指定表中進行登記。圖3.4添加信息流程3.3性能需求在需求分析中就應該對項目所需服務器性能進行分析,這樣才符合正常的分析流程。只談功能需求不談性能需求,是一件很嚴重的事情,可能會導致使用過程中出現(xiàn)一系列不可預測的問題,所以性能需求也是需要考慮的重要項。下面就是從幾個方面來進行系統(tǒng)的性能分析,從每個角度來分析系統(tǒng)性能。(1)系統(tǒng)數(shù)據(jù)的容量:從數(shù)據(jù)角度來分析,每個表和每個數(shù)據(jù)庫,達到的數(shù)據(jù)量到一定的程度,是否需要分表或者是分庫,超過了數(shù)據(jù)的設定限度,可能會導致數(shù)據(jù)反映遲鈍,容錯量增加。(2)數(shù)據(jù)精度的要求:需要對需求分析里面數(shù)據(jù)設定環(huán)節(jié),考慮相應的數(shù)據(jù)精度問題,需要發(fā)現(xiàn)數(shù)據(jù)是常用的精度還是非常用的精度,進而設定不同的數(shù)值。數(shù)據(jù)的精度問題,會直接導致設計的性能問題。(3)時間響應要求:從用戶提交操作,到頁面反映,中間有個數(shù)據(jù)處理的問題,如果數(shù)據(jù)量大,那么考慮索引問題和分庫問題,數(shù)據(jù)量再大就要考慮增加列式數(shù)據(jù)庫的問題,這些都要根據(jù)數(shù)據(jù)量的增加以及邏輯的嚴密性來進行判斷,才能符合用戶的要求,畢竟響應時間太久操作起來也不舒服。系統(tǒng)的性能需求從業(yè)務需求之初就能大致了解到性能需求相關的概念,再從系統(tǒng)性能需求來逐條實現(xiàn),可以讓設計的系統(tǒng)有使用價值。3.4功能需求在線問卷調查系統(tǒng)根據(jù)使用權限的角度進行功能分析,并運用用例圖來展示各個權限需要操作的功能。圖3.5即為管理員用例圖,管理員權限操作的功能包括對注冊用戶信息的管理,對問卷,題目,問卷調查,新聞資訊等信息的管理。圖3.5管理員用例圖圖3.6即為用戶用例圖,用戶權限操作的功能包括參與問卷調查,查看新聞,查看問卷調查記錄。圖3.6用戶用例圖
第4章系統(tǒng)設計系統(tǒng)的設計一切都是為了用戶的使用,雖然用戶使用過程中可能只是面對著瀏覽器進行各種操作,但是不代表著系統(tǒng)對于用戶在瀏覽器上的操作不進行處理,所以說,設計一個系統(tǒng)需要考慮到方方面面。4.1功能結構設計圖4.1即為設計的管理員功能結構,管理員權限操作的功能包括對注冊用戶信息的管理,對問卷,題目,問卷調查,新聞資訊等信息的管理。圖4.1管理員功能結構圖4.2即為設計的用戶功能結構,用戶權限操作的功能包括參與問卷調查,查看新聞,查看問卷調查記錄。圖4.2用戶功能結構4.2數(shù)據(jù)庫設計在線問卷調查系統(tǒng)運行中產生的數(shù)據(jù)需要按照提前設置的存儲規(guī)則進行保存,而這個存儲規(guī)則則是在數(shù)據(jù)庫的設計中進行設置的。通常情況下,為了更好的配合系統(tǒng)運行,也要給用戶帶來良好的使用體驗,設計一個很好的數(shù)據(jù)庫是必須的,因為它能減少用戶的等待時間,還可以對系統(tǒng)的請求在最短時間內進行響應。所以,對數(shù)據(jù)庫設計時,需要花費一定的時間來分析系統(tǒng)對于數(shù)據(jù)存儲的要求以及存儲的具體數(shù)據(jù),然后設計具體的存儲規(guī)則,保證數(shù)據(jù)庫能夠對系統(tǒng)的各種數(shù)據(jù)請求進行及時回應,縮短數(shù)據(jù)處理時間,并在一定程度上降低數(shù)據(jù)冗余,節(jié)省存儲空間。4.2.1數(shù)據(jù)庫概念設計實體-聯(lián)系圖還有一個名稱即E-R圖,是EntityRelationshipDiagram各英文單詞首字母的縮寫,它這種概念模型通常用于對現(xiàn)實世界進行描述。同時它還是一種能夠直觀表達數(shù)據(jù)中實體,聯(lián)系,屬性的有效手段。繪制E-R圖能夠選擇的工具也有很多,但是OfficeVisio
這款軟件在E-R圖的繪制上一般都是作為首選工具,因為它是基于可視化處理,使用它創(chuàng)建E-R圖非常簡單。使用基本的E-R圖構成元素,比如橢圓,菱形,矩形,還有實線段來表達對應的信息,橢圓代表屬性,即實體的特征,矩形代表實體,即數(shù)據(jù)庫中的一個具體數(shù)據(jù)表,菱形代表實體中相互關系,實線段主要是完成橢圓,矩形,菱形的連接,基于這樣的方式即可完成對本系統(tǒng)的E-R圖進行完整繪制。(1)圖4.4即為題目這個實體所擁有的屬性值。圖4.4題目實體屬性圖(2)圖4.5即為用戶這個實體所擁有的屬性值。圖4.5用戶實體屬性圖(3)圖4.6即為問卷這個實體所擁有的屬性值。圖4.6問卷實體屬性圖圖4.7即為問卷調查記錄這個實體所擁有的屬性值。圖4.7問卷調查記錄實體屬性圖圖4.8即為上面介紹的實體中存在的聯(lián)系。圖4.8實體間關系E-R圖4.2.2數(shù)據(jù)庫物理設計本小節(jié)主要任務即是根據(jù)上述內容進行數(shù)據(jù)存儲結構的設計,也就是在數(shù)據(jù)庫中設計存放本系統(tǒng)的數(shù)據(jù)的數(shù)據(jù)表,設計數(shù)據(jù)表時,需要對各個字段進行確定,通常來說,一個實體與一張數(shù)據(jù)表相對應,實體的屬性就用來表示字段名稱,不同的字段表示的數(shù)據(jù)類型以及取值都不相同,這里需要根據(jù)系統(tǒng)實際數(shù)據(jù)的情況進行設置,同時也需要在具體表中確定該表的主鍵,以及該表各個字段是否能夠保持空等進行說明,設計完成一張數(shù)據(jù)表的結構之后,在保存時同樣要命名,盡量選擇英文名稱進行命名并保存,方便今后系統(tǒng)對數(shù)據(jù)表進行數(shù)據(jù)存儲訪問時,在提高數(shù)據(jù)存儲效率的同時,還不容易導致系統(tǒng)出錯。接下來就對設計的數(shù)據(jù)表進行展示。表4.1問卷表字段注釋類型空id
(主鍵)主鍵int(20)否exampaper_name問卷名稱varchar(200)否exampaper_date時長(分鐘)int(11)否exampaper_jieshuyu結束語varchar(255)是exampaper_types問卷狀態(tài)int(11)否create_time創(chuàng)建時間timestamp否表4.2題目表字段注釋類型空id
(主鍵)主鍵int(20)否exampaper_id所屬問卷id(外鍵)int(20)否examquestion_name試題名稱varchar(200)否examquestion_options選項longtext是examquestion_types試題類型int(20)是examquestion_sequence試題排序,值越大排越前面int(20)是create_time創(chuàng)建時間timestamp否表4.3問卷調查記錄表字段注釋類型空id
(主鍵)主鍵int(20)否examrecord_uuid_number問卷調查編號varchar(200)是yonghu_id問卷調查用戶int(20)否exampaper_id所屬問卷id(外鍵)int(20)否insert_time問卷調查時間timestamp否create_time創(chuàng)建時間timestamp否表4.4管理員表字段注釋類型空id
(主鍵)主鍵bigint(20)否username用戶名varchar(100)否password密碼varchar(100)否role角色varchar(100)是addtime新增時間timestamp否表4.5新聞資訊表字段注釋類型空id
(主鍵)主鍵int(11)否news_name新聞資訊名稱varchar(200)是news_types新聞類型int(11)是news_photo新聞資訊圖片varchar(200)是insert_time新聞資訊時間timestamp是news_content新聞資訊詳情text是create_time創(chuàng)建時間timestamp是表4.6答題詳情表字段注釋類型空id
(主鍵)主鍵int(20)否examredetails_uuid_number問卷編號varchar(200)是yonghu_id用戶idint(20)否examquestion_id試題id(外鍵)int(20)否examredetails_myanswer用戶選項varchar(200)是create_time創(chuàng)建時間timestamp否表4.7用戶表字段注釋類型空id
(主鍵)主鍵int(11)否username賬戶varchar(200)是password密碼varchar(200)是yonghu_name用戶姓名varchar(200)是sex_types性別int(11)是yonghu_id_number身份證號varchar(200)是yonghu_phone手機號varchar(200)是yonghu_photo照片varchar(200)是create_time創(chuàng)建時間timestamp是第5章系統(tǒng)實現(xiàn)編程人員在搭建的開發(fā)環(huán)境中,運用編程技術實現(xiàn)本系統(tǒng)設計的各個操作權限的功能。在本節(jié)中,就展示部分操作權限的功能與界面。5.1管理員功能實現(xiàn)5.1.1問卷管理圖5.1即為編碼實現(xiàn)的問卷管理界面,管理員在該界面中可以對已有問卷進行啟用或禁用,可以新增問卷,編輯更改已有問卷的資料,包括問卷名稱,結束語等信息,可以刪除需要刪除的問卷,可以根據(jù)問卷名稱,問卷的狀態(tài)來獲取需要的問卷信息。圖5.1問卷管理界面核心代碼:/***后端修改*/@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,"權限為空");//根據(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語句:"+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問卷調查管理圖5.2即為編碼實現(xiàn)的問卷調查管理界面,管理員在該界面中對用戶提交的問卷調查信息進行查看,管理員可以直接查看每條問卷調查的調查詳情信息,同時可以刪除問卷調查信息。圖5.2問卷調查管理界面核心代碼:/***批量上傳*/@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,"該文件沒有后綴");}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,"找不到上傳文件,請聯(lián)系管理員");}else{List<List<String>>dataList=PoiUtil.poiImport(file.getPath());//讀取xls文件dataList.remove(0);//刪除第一行,因為第一行是提示for(List<String>data:dataList){//循環(huán)ExampaperEntityexampaperEntity=newExampaperEntity();//exampaperEntity.setExampaperName(data.get(0));//問卷名稱要改的//exampaperEntity.setExampaperDate(Integer.valueOf(data.get(0)));//時長(分鐘)要改的//exampaperEntity.setExampaperTypes(Integer.valueOf(data.get(0)));//問卷狀態(tài)要改的//exampaperEntity.setCreateTime(date);//時間exampaperList.add(exampaperEntity);//把要查詢是否重復的字段放入map中}//查詢是否重復exampaperService.insertBatch(exampaperList);returnR.ok();}}}}catch(Exceptione){returnR.error(511,"批量插入數(shù)據(jù)異常,請聯(lián)系管理員");}}/***前端列表*/@IgnoreAuth@RequestMapping("/list")publicRlist(@RequestParamMap<String,Object>params,HttpServletRequestrequest){logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));//沒有指定排序字段就默認id倒序if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){params.put("orderBy","id");}PageUtilspage=exampaperService.queryPage(params);//字典表數(shù)據(jù)轉換List<ExampaperView>list=(List<ExampaperView>)page.getList();for(ExampaperViewc:list)dictionaryService.dictionaryConvert(c,request);//修改對應字典表字段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轉viewExampaperViewview=newExampaperView();BeanUtils.copyProperties(exampaper,view);//把實體數(shù)據(jù)重構到view中//修改對應字典表字段dictionaryService.dictionaryConvert(view,request);returnR.ok().put("data",view);}else{returnR.error(511,"查不到數(shù)據(jù)");}}5.1.3題目管理圖5.3即為編碼實現(xiàn)的題目管理界面,管理員在該界面中可以導出題目,可以新增題目,可以對指定的題目信息進行修改,刪除,同時可以查看用戶對各個題目選項的統(tǒng)計信息,該統(tǒng)計信息是以餅圖進行展示。圖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轉viewExamquestionViewview=newExamquestionView();BeanUtils.copyProperties(examquestion,view);//把實體數(shù)據(jù)重構到view中//級聯(lián)表ExampaperEntityexampaper=exampaperService.selectById(examquestion.getExampaperId());if(exampaper!=null){BeanUtils.copyProperties(exampaper,view,newString[]{"id","createDate"});//把級聯(lián)的數(shù)據(jù)添加到view中,并排除id和創(chuàng)建時間字段view.setExampaperId(exampaper.getId());}//修改對應字典表字段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,"權限為空");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語句:"+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即為編碼實現(xiàn)的用戶管理界面,管理員在該界面中為用戶重置密碼,修改用戶基本信息,新增用戶,刪除需要刪除的用戶信息。圖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,"權限為空");//根據(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語句:"+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,"賬戶或者手機號或者身份證號已經被使用");}}5.1.5新聞資訊管理圖5.5即為編碼實現(xiàn)的新聞資訊管理界面,管理員在該界面中負責發(fā)布新聞資訊,更改新聞資訊的部分信息,刪除需要刪除的新聞資訊信息。圖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,"權限為空");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ù)轉換List<NewsView>list=(List<NewsView>)page.getList();for(NewsViewc:list){//修改對應字典表字段dictionaryService.dictionaryConvert(c,request);}returnR.ok().put("data",page);}5.2用戶功能實現(xiàn)5.2.1問卷列表圖5.6即為編碼實現(xiàn)的問卷列表界面,用戶在該界面中選擇問卷并參與問卷調查。圖5.6問卷列表界面核心代碼:/***前端列表*/@IgnoreAuth@RequestMapping("/list")publicRlist(@RequestParamMap<String,Object>params,HttpServletRequestrequest){logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));//沒有指定排序字段就默認id倒序if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){params.put("orderBy","id");}PageUtilspage=examrecordService.queryPage(params);//字典表數(shù)據(jù)轉換List<ExamrecordView>list=(List<ExamrecordView>)page.getList();for(ExamrecordViewc:list)dictionaryService.dictionaryConvert(c,request);//修改對應字典表字段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轉viewExamrecordViewview=newExamrecordView();BeanUtils.copyProperties(examrecord,view);//把實體數(shù)據(jù)重構到view中//級聯(lián)表ExampaperEntityexampaper=exampaperService.selectById(examrecord.getExampaperId());if(exampaper!=null){BeanUtils.copyProperties(exampaper,view,newString[]{"id","createDate"});//把級聯(lián)的數(shù)據(jù)添加到view中,并排除id和創(chuàng)建時間字段view.setExampaperId(exampaper.getId());}//級聯(lián)表YonghuEntityyonghu=yonghuService.selectById(examrecord.getYonghuId());if(yonghu!=null){BeanUtils.copyProperties(yonghu,view,newString[]{"id","createDate"});//把級聯(lián)的數(shù)據(jù)添加到view中,并排除id和創(chuàng)建時間字段view.setYonghuId(yonghu.getId());}//修改對應字典表字段dictionaryService.dictionaryConvert(view,request);returnR.ok().put("data",view);}else{returnR.error(511,"查不到數(shù)據(jù)");}}5.2.2問卷調查圖5.7即為編碼實現(xiàn)的問卷調查界面,用戶在該界面中主要根據(jù)問卷調查題目信息進行選項答題,答題結束可以選擇界面頂端的結束問卷調查按鈕離開問卷調查界面。圖5.7問卷調查界面核心代碼:/***前端詳情*/@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轉viewExamredetailsViewview=newExamredetailsView();BeanUtils.copyProperties(examredetails,view);//把實體數(shù)據(jù)重構到view中//級聯(lián)表ExamquestionEntityexamquestion=examquestionService.selectById(examredetails.getExamquestionId());if(examquestion!=null){BeanUtils.copyProperties(examquestion,view,newString[]{"id","createDate"});//把級聯(lián)的數(shù)據(jù)添加到view中,并排除id和創(chuàng)建時間字段view.setExamquestionId(examquestion.getId());}//級聯(lián)表YonghuEntityyonghu=yonghuService.selectById(examredetails.getYonghuId());if(yonghu!=null){BeanUtils.copyProperties(yonghu,view,newString[]{"id","createDate"});//把級聯(lián)的數(shù)據(jù)添加到view中,并排除id和創(chuàng)建時間字段view.setYonghuId(yonghu.getId());}//修改對應字典表字段dictionaryService.dictionaryConvert(view,request);returnR.ok().put("data",view);}else{returnR.error(511,"查不到數(shù)據(jù)");}}5.2.3新聞資訊圖5.8即為編碼實現(xiàn)的新聞資訊界面,用戶在該界面中瀏覽新聞資訊,在界面右上角的搜索框中編輯新聞標題可以獲取匹配的新聞資訊信息。圖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轉viewNewsViewview=newNewsView();BeanUtils.copyProperties(news,view);//把實體數(shù)據(jù)重構到view中//修改對應字典表字段dictionaryService.dictionaryConvert(view,request);returnR.ok().put("data",view);}else{returnR.error(511,"查不到數(shù)據(jù)");}}5.2.4問卷調查記錄圖5.9即為編碼實現(xiàn)的問卷調查記錄界面,用戶在該界面中可以對參與問卷調查的記錄信息進行查看。圖5.9問卷調查記錄界面核心代碼:@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,"權限為空");}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)測試當系統(tǒng)測試環(huán)節(jié)開始的時候,也就說明對于系統(tǒng)的編碼已經弄得大致通順了,剩下來需要對一些模塊和功能進行測試,這個環(huán)節(jié)就叫系統(tǒng)測試。在程序開發(fā)過程中,系統(tǒng)測試是整個開發(fā)過程必不可少的一個環(huán)節(jié)。原因很簡單,系統(tǒng)開發(fā)人員在面對各種需求需要對各個模塊進行編碼,開發(fā)人員編寫過程中,對于程序的理解全部都在編碼里面,一人計短,當一個人去做一些事情的時候,把自己的理解變成成果,很有可能會出現(xiàn)理解偏差,甚至是理解錯誤,這個在程序開發(fā)過程中很常見。程序開發(fā)人員在面對復雜的邏輯,沒有想象中的多么清晰,開發(fā)過程就是面對著一堆代碼,不斷的變換數(shù)據(jù)類型,并且對各種操作用計算機編程語言進行實現(xiàn),這些很容易實現(xiàn)程序開發(fā)人員的想法,但是如果是比較復雜的邏輯,很可能會出現(xiàn)各種問題,這是無法避免的。所以說,需要額外的人員進行系統(tǒng)測試編寫,不要站在程序開發(fā)人員的角度去思考問題,要站在用戶使用的角度去發(fā)現(xiàn)問題,這樣開發(fā)與測試的分離,有助于系統(tǒng)開發(fā)的強壯,讓程序表達的更完美一些。之所以把系統(tǒng)測試安排到程序開發(fā)過程中的原因在于,當測試發(fā)現(xiàn)問題,就可以直接反饋到程序開發(fā)人員手里,可以以最快的時間解決問題,這樣能大大的提高開發(fā)效率??偟膩碚f,在整個軟件開發(fā)過程中,系統(tǒng)測試這個環(huán)節(jié)也必須要重視的,所以必須在系統(tǒng)測試環(huán)節(jié)做好應該做好的事情,讓程序開發(fā)從開始到結束都有一個完美的流程。6.1功能測試本節(jié)主要選擇一些功能進行具體測試描述,在相應的功能里面,根據(jù)不同的合法與不合法條件輸入看程序是否設定的有相關的判斷,能否達到使用效果。以下會描述部分功能的測試過程和結果。6.1.1登錄功能測試登錄是一個常規(guī)功能,雖然是常規(guī)功能,但是用處很大,可以拒絕非法用戶訪問,只有合法用戶才可以訪問對應的功能,這樣能保證程序設定的功能符合安全性要求。表6.1管理員登錄功能測試表管理員賬號管理員密碼結果uuuuuu成功登錄系統(tǒng)yyyuuu登錄失敗uuuyyy登錄失敗只有正確的賬號密碼才會進行跳轉到對應的功能區(qū),如果輸入的賬號密碼不對的話,肯定會有相關提示,用來提示操作人員注意輸入正確的賬號密碼,這樣有助于提高用戶體驗。這里以使用者提交錯誤的賬號為“yyy”,正確的密碼為“uuu”為例進行測試,具體反饋結果看下面。圖6.1登錄失敗提示6.1.2修改密碼功能測試任何用戶角色都有安全性要求,那么對應的密碼最好是經常更改,只有經常更改才會降低壞人的有機可乘幾率,達到密碼保護的最低要求,當然,如果用戶登錄人離開了,為了防止其他人乘機篡改密碼,那么也會設定舊密碼要求,只有輸入正確的舊密碼才可以進行密碼的修改。下面就是測試過程。表6.2修改密碼功能測試表之前的舊密碼設置的新密碼結果uuuyyy成功修改密碼hhhyyy修改密碼失敗uuu修改密碼失敗不管是舊密碼錯誤還是新密碼不合規(guī),都會提示相應的要求,下面就是關于舊密碼輸入錯誤的提示。圖6.2錯誤的舊密碼反饋提示6.2系統(tǒng)測試結果對在線問卷調查系統(tǒng)進行了各種檢測,包含功能檢測和性能檢測,甚至是系統(tǒng)的操作性方面也進行了檢測,以及兼容性檢測,通過各方面檢測結果來判定系統(tǒng)是符合設計目標,達到開發(fā)預期。系統(tǒng)是可以實現(xiàn)所開發(fā)的功能,并且在擴展性或者是穩(wěn)定性上面,也有很好的表現(xiàn),能完全的滿足用戶需求。
結論由于本人學習的是計算機方面的專業(yè),對于計算機軟件方面的相關知識也進行過課堂上的學習以及課后的實際操作練習,因此,對于開發(fā)一款已經確定了課題的在線問卷調查系統(tǒng),從功能需求,功能模塊劃分,數(shù)據(jù)庫的選擇,數(shù)據(jù)庫的設計,編程語言的確定,系統(tǒng)界面的布局和設計等知識,我都有個大致的思路。所以,在參照軟件設計思想以及設計流程的基礎上,我運用已經具備的理論知識,加上后期從網絡渠
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 4教育信息化與信息化人才培養(yǎng)
- 單板加工市場風險識別與應對措施考核試卷
- 2025年度臨床試驗合同主體臨床試驗合同續(xù)簽與變更4篇
- 2025版學生暑假工就業(yè)保障及培訓合同3篇
- 2025年增資協(xié)議簽署注意事項
- 2025年健身營銷推廣合同
- 2025年健身器材產品責任保險合同
- 二零二五年度戶外木飾面景觀工程設計合同2篇
- 二零二五版電影主題展覽贊助協(xié)議3篇
- 二零二五年度2025安保員聘用及安全教育培訓服務合同3篇
- 不同茶葉的沖泡方法
- 光伏發(fā)電并網申辦具體流程
- 建筑勞務專業(yè)分包合同范本(2025年)
- 企業(yè)融資報告特斯拉成功案例分享
- 五年(2020-2024)高考地理真題分類匯編(全國版)專題12區(qū)域發(fā)展解析版
- 《阻燃材料與技術》課件 第8講 阻燃木質材料
- 低空經濟的社會接受度與倫理問題分析
- 法考客觀題歷年真題及答案解析卷一(第1套)
- 央國企信創(chuàng)白皮書 -基于信創(chuàng)體系的數(shù)字化轉型
- 6第六章 社會契約論.電子教案教學課件
- 運動技能學習與控制課件
評論
0/150
提交評論