日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

问卷系统该如何设计

發布時間:2023/12/16 windows 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 问卷系统该如何设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這里寫自定義目錄標題

  • 項目背景
  • 項目需求
  • 技術難點
  • 參考項目
    • 參考項目1-DWSurvey 調問表單問卷系統 github標星1.4k
    • 參考項目2-limesurvey強大的開源問卷系統
      • 創建新問卷
      • 參與問卷調差
  • 總結

項目背景

公司原有問卷系統項目較老,項目維護修改不方便,要求用java重寫一套問卷系統

項目需求

1.能夠方便的與公司原有系統進行對接.能夠和.net php java等后臺進行對接。
2.能夠實現問卷新增 問卷答案統計等需求。
3.問卷能夠實現選擇、填空、矩陣等題型。
4、能夠實現跳題邏輯.

技術難點

1.如何方便的和公司原有系統以及.net php 系統對接
2.因為問卷數據的不確定性,怎么樣在數據庫存儲能夠做到好存好查 好統計
3.矩陣題型如何實現
4.根據預設條件進行題目跳轉如何實現

參考項目

作為一個菜鳥程序員,拿到需求后首先想到的就是找一下相關的開源項目參考一下,取其精華去其糟粕,然后綜合形成自己的思路.奈何github上面值得參考的開源項目并不多

參考項目1-DWSurvey 調問表單問卷系統 github標星1.4k

https://github.com/wkeyuan/DWSurvey

1、單獨系統沒有辦法與其他系統進行對接。
2、每個題型的題目數據和答案數據分表存儲,數據庫數據存儲比較細致便于查詢和統計,不便于擴展,數據庫我們在設計時要兼顧性能和功能,好的數據庫設計是尋找二者的平衡點,這個項目數據庫存儲有點過于細致了。
3、矩陣題型按照行和列存儲 答案存儲行和列的id 數據庫設計中規中矩。
4、題目跳轉邏輯只設計了評分題和選擇題的跳轉,跳轉分為控制題目顯隱和跳題兩種方式。
5、后臺使用struts2+Hibernate,技術太老,不利于更新維護,前端是用jstl+jsp ,同樣是技術太老不利于迭代,估計項目作者是個元老級工程師,雖然該項目沒有完全開源,但是我們依舊能夠通過已經開源的代碼來猜測出來作者的整體項目設計思路

參考項目2-limesurvey強大的開源問卷系統

https://community.limesurvey.org/downloads/

單獨的系統,社區版本php全開源,題型能滿足大部分調查場景,我們重點分析一下limesurvey的數據庫設計和前端實現,忽略limesurvey的細節,只關注主要邏輯的實現

創建新問卷

  • 創建問卷

  • 創建題組

  • 創建問題

  • 編輯子問題

  • 編輯答案選項

  • 設定條件

  • 經過以上幾步在數據庫中形成的數據如下 (由于數據過多,只挑選一些基本流程數據進行分析)

    • 問卷表
    sidowner_idgsidadminactive
    34178711AdministratorY
    • 問題表

    • 問題選項表

    • 問題跳題邏輯表

    基本的問卷數據就存在這幾張表中,還有一些其他的附屬屬性設置數據存在其他的表中,可以說數據庫設計相當簡潔,前端拿到問卷問題數據,問卷選項數據就可以根據問題type字段對數據進行有機的組合來形成各種問題ui,填空選擇,矩陣,子問題前端都可以根據這些數據進行實現,
    有意思的是問題跳轉邏輯表,limesurvey的跳轉邏輯是這樣的,首先在數據庫中存儲一個表達式(例如該表中的表達式為cfieldname==A1),如果表達式成立那么id為qid的題目將會一直顯示,如果表達式不成立則該題目自動隱藏。另外 這個表達式是怎么來的,cfieldname是怎么來的后面我們會講到

    參與問卷調差

  • 答題進行問卷調查
  • 完成問卷后會發現limesurvey的問題答案在數據庫是怎么存儲的,會發現數據庫多了一個名為lime_survey_341787的表格,表格中的數據如下


    上面表格中的數據就是調查問卷的答題數據,我做了兩次問卷所以產生了兩條記錄,看一下數據庫中的表的每個字段是怎么產生的,通過分析數據得知答案的每個字段名為sid+‘X’+gid+‘X’+qid+title+scale_id,即:問卷id+‘X’+問題組id+‘X’+問題id+子問題title+答案選項的scale_id
    還記得上面提到的問題跳轉邏輯中的cfieldidname字段嗎?就是從這里來的

    總結

    通過對上面兩個開源項目的分析我們基本有了自己的實現思路。

  • 前端的實現上面,項目1使用的jstl標簽 項目2使用的twig模板語言,jstl標簽和twig都比較貼合組件化思想。所以前端實現肯定考慮更適合做組件的vue去實現,前端頁面的操作上面項目1和項目2的操作都不是很好,值得重新設計。
  • 數據庫設計方面,項目2較值得參考,項目一數據庫設計雖然較詳細,將各個題型都分的很細,但是不利于數據的統計查詢,以及項目的擴展,項目2的數據庫設計較為靈活,利于擴展,而且統計查詢較為方便。
  • 項目2的實現從數據庫和后臺的實現來看總體還是一個模板的思想,除去php語言本身的缺點不提,作為模板語言的php也確實適合干這個事,也正是php強大的模板思想,產生了大量的優秀的模板引擎wordpress、discuz等。
  • 項目2的數據庫雖然這樣實現是個不錯的方式,但是由于java和php的語言特性不一樣,一個為強類型一個為弱類型,由于這樣的數據庫設計答案表格都是動態的,在和數據庫交互以及前端交互方面java可能沒有php方便。java后臺的具體實現方式還有待探討。
  • 總結

    以上是生活随笔為你收集整理的问卷系统该如何设计的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。