1、.沈阳航空航天大学课 程 设 计 报 告课程设计名称:软件综合课程设计课程设计题目:基于web的在线问卷调查系统的设计与实现院(系):计算机学院专 业:计算机科学与技术班 级:学 号:2姓 名:指导教师:说明:结论(优秀、良好、中等、及格、不及格)作为相关教环节考核必要依据;格式不符合要求;数据不实,不予通过。报告和电子数据必须作为实验现象重复的关键依据。.学术诚信声明本人声明:所呈交的报告(含电子版及数据文件)是我个人在导师指导下独立进行设计工作及取得的研究结果。尽我所知,除了文中特别或撰写过的研究结果,也不包含其它教育机构使用过的材料。与我一同工作的同学对本研究所做的任何贡献均己在报告中做
2、了明确的说明并表示了谢意。报告资料及实验数据若有不实之处,本人愿意接受本教学环节“不及格和“重修或重做的评分结论并承担相关一切后果. 本人签名: 日期: 年 月 日沈阳航空航天大学课程设计任务书课程设计名称软件综合课程设计专业计算机科学与技术学生姓名班级学号题目名称基于web的在线问卷调查系统的设计与实现起止日期2016年12月19日起至2017年1月13日止课设内容和要求:在校园、企事业单位里,由于各种调查研究的需要,经常会有各种各样的调查问卷,在传统模式下,人们不但要花费不少的费用印刷问卷,而且还要消耗大量时间和精力对调查问卷进行发放和回收,对调查问卷进行统计,并且人工操作调查问卷随意性较
3、大,容易产生遗漏等问题.本系统建立在信息技术基础上,构建一个在线的问卷设计、分发、调查、回收、统计的系统,基本解决传统问卷的上述老大难问题。1. 实现用户管理系统,注册用户可以发布、编辑问卷;非注册用户只可以填写问卷。2. 实现问卷发布管理系统,可以对问卷进行增加,修改,删除,查询等操作。3. 实现数据可视化,对问卷统计结果通过图表进行展示。4. 界面美观,用户交互、体验良好。参考资料:麦克劳克林。 PHP MySQL实战手册第二版M。 中国电力出版社, 2014。杨克李强, 裴云, 黄向党。 PHP和MySQL Web开发从新手到高手M。 人民邮电出版社, 2013.教研室审核意见: 教研室
4、主任签字:指导教师(签名)2016年12月16日学 生(签名)2016年12月19日课程设计总结:本次课程设计的主要任务是在线问卷系统。此实现了问卷创建,编辑,用户管理,问卷信息统计等功能,使用PHP语言的laravel框架,Mysql数据库。在这次课程设计中,使我懂得了理论与实际相结合是很重要的,只有知识是远不够的,只有把所学理论知与实践相结合起来从中得出识是远不够的, 只有把所学理论知与实践相结合起来从中得出才能真正为社会服务,从而提高自己的实际动手力和独立思考。 才能真正为社会服务,从而提高自己的实际动手力和独立思考.才能真正为社会服务,从而提高自己的实际动手力和独立思考。才能真正为社会
5、服务,从而提高自己的实际动手力和独立思考。系统中存在的一些不足和设计上存在的缺憾,说明自己这些方面还有很多不足之处有待自己进一步学习、提高。在这次课程设计中,我学到很多东西真正达与用合,增强了对数据库方面应用的理解自己今后参与开发系统积累不少经验,在课程设计过中从建立数据开始对库理念及思想上有更高的认识。从书本上知运用到实际动手操作来,收获颇多我真正学了计算机教科书上所没有或者真正用到了课本的知识。这样,既巩固旧又掌握了新知识。不仅提高自己的动手能力,更体会到软件开发乐趣加深入的了解数据库实际应用,为我们将来践打下良好的基础。在课设期间,与同学之间的相互探讨对我有很大的启发.让我对有关知识有了
6、更加深入的理解,也增强了我解决困难,克服困难的勇气和决心。这次课设的感悟对我日后的学习和工作有了很大的促进作用。目 录1 需求分析11。1 系统开发背景11。2 系统开发目的11.3 系统开发意义22 概要设计32。1 总体设计32.2 功能设计32.2。1 用户系统设计32.2。2 问卷系统设计32.3 数据库设计42.3 交互设计63 详细设计73。1 用户管理系统73。1。1 用户注册73。1。2 用户登录93。2 问卷管理系统93.2.1 问卷信息管理93.2.2 题目信息管理123。2。3 选项信息管理143。2.4 问卷结果统计173。2.5 问卷生成183。2.6 问卷提交194
7、 测试204。1 出现的错误204。2 解决方法20参考文献21附 录(关键部分程序清单)221. 路由文件222. 用户管理后台文件233。 问卷后台管理文件274。 问卷生成文件415。 登录界面456. 注册页面467. 问卷信息管理页面478. 题目信息管理页面509。 选项信息管理页面5310. 选择题统计信息展示5511。 简答题统计信息展示5812。 错误页面5913. CSS文件6014。 JavaScript文件76.1 需求分析1。1 系统开发背景随着互联网技术的飞速发展,互联网的全球覆盖,交互功能等特性给调查方法带来新的变化,在线调查作为一种基于互联网平台上信息采集及处理
8、方式,越来越受到许多评估研究机构和媒介机构的关注与运用。在校园、企事业单位里,由于各种调查研究的需要,经常会有各种各样的调查问卷,在传统模式下,人们不但要花费不少的费用印刷问卷,而且还要消耗大量时间和精力对调查问卷进行发放和回收,对调查问卷进行统计,并且人工操作调查问卷随意性较大,容易产生遗漏等问题。本系统建立在信息技术基础上,构建一个在线的问卷设计、分发、调查、回收、统计的系统,基本解决传统问卷的上述老大难问题.借助互联网这一现代化的信息沟通渠道,在线调查具有低成本、高速度、跨越空间局限、丰富的表现形式、智能化及互动性等优点。因为其方便性,许多企业也在自己的网络上进行自主调研,使用调查的方式
9、收集自己用户的观点等。不仅可以迅速了解社会不同层次、不同行业的人员需求,客观的收集需求信息,调整修正产品策略和营销策略,满足不同的需求。在线调查问卷系统是一个实用性很强的系统。1.2 系统开发目的在线问卷调差的目的就是能够提高调查效率,节约调查经费,使调查数据的分析更加的方便,应具有以下的功能特点:(1)向用户提交交互式,个性化的问卷调查服务。(2)智能的后台管理,可以在线生成调查问卷,可分析统计调查的结果。(3)使用简单、方便,问卷生成,投放,结果分析简单易用。(4)具有灵活性,能应用不同的调查环境。1.3 系统开发意义调查问卷系统的目的是企业、组织或个人需要调查或掌握一些数据、信息或资料时
10、,为这样的需求者提供适合的网上问卷、回收、统计数据活动答案,为需求者掌握资料提供方便。(1)对调查问卷的统计结果进行分析汇总,并使需求者能及时了解最新的调查结果.(2)可以根据不同的需求灵活设计问卷.(3)支持多种题型,如单选、多选、简答等。.2 概要设计2。1 总体设计系统的总体设计可以分为以下几个部分:(1) 使用PHP的Laravel框架实现系统的后台管理系统,包括问卷管理和用户管理。(2) 使用Mysql作为数据库系统。(3) 使用JavasScript,Ajax和CSS构建前端页面和交互系统。(4) 使用HighCharters库实现数据可视化,实现问卷统计信息的图表展示.2.2 功
11、能设计2.2.1 用户系统设计用户可分为注册用户和一般用户,注册用户需注册信息后方可使用系统,而一般用户可直接访问系统。3种用户权限不同,具体如下:(1) 系统管理员:管理系统和所有用户的问卷.(2) 注册用户:设计、编辑、发布问卷,查看问卷统计结果。(3) 一般用户:填写问卷.2。2。2 问卷系统设计注册用户可以访问问卷系统,并编辑问卷(增加,删除,修改,查询)与问卷对应的题目、选项。(1) 问卷属性:问卷标题,发布者,发布时间,有效时间,提交量,题目。(2) 题目属性:题号,题目,题目类型,选项。(3) 选项属性:选项号,选项值。(4) 题目类型:单选题、多选题、简答题.(5) 问卷只有在
12、有效时间内才可以参与答题,超出有效时间后不可进行答题。2.3 数据库设计数据库包含5个表,分别是:users(用户表),questionnaires(问卷表),subjects(题目表),options(选项表),short_answers(简答表)。所有表的数据字典以及ER图如下。图2.1 E-R图表2。1 用户表users字段名称字段类型注释idint(10)用户标识,唯一,主键,自增namevarchar(255)用户名,唯一emailvarchar(255)用户邮箱passwordvarchar(60)用户密码groupint(11)用户组(管理员、注册用户)created_attim
13、estamp创建时间updated_attimestamp更新时间表2.2问卷表questionnaires字段名称字段类型注释idint(10)问卷标识,唯一,主键,自增user_namevarchar(255)创建者titletext问卷标题countsint(11)问卷提交量active_timeint(11)有效时间delete_tokenint(11)删除标识(0:未删除,1:已删除)created_attimestamp创建时间updated_attimestamp更新时间表2。3题目表subjects字段名称字段类型注释idint(10)题目标识,唯一,主键,自增question
14、naire_idint(11)题目对应的问卷标识(外键)user_namevarchar(255)创建者numberint(11)题号titletext题目内容typevarchar(255)题目类型(单选、多选、简答)option_countint(11)题目对应的选项数delete_tokenint(11)删除标识(0:未删除,1:已删除)created_attimestamp创建时间updated_attimestamp更新时间表2.4选项表options字段名称字段类型注释idint(10)选项标识,唯一,主键,自增subject_idint(11)选项对应的题目标识(外键)user_
15、namevarchar(255)创建者numbervarchar(255)选项号titletext选项内容select_countint(11)选项被选择的次数delete_tokenint(11)删除标识(0:未删除,1:已删除)created_attimestamp创建时间updated_attimestamp更新时间表2.5简答表short_answers字段名称字段类型注释idint(10)回答标识,唯一,主键,自增subject_idint(11)回答对应的题目标识(外键)answervarchar(255)回答内容delete_tokenint(11)删除标识(0:未删除,1:已删
16、除)created_attimestamp创建时间updated_attimestamp更新时间2。3 交互设计使用JavaScript,Ajax等实现系统交互,实现对话框设计以及UI动画交互,使用HighCharters库实现数据可视化系统,对问卷统计结果进行图表展示。3 详细设计3.1 用户管理系统3.1.1 用户注册本模块用于实现新用户的信息注册,在注册页面检查用户输入是否合法:(1) 邮箱格式是否正确,是否已被注册。(2) 用户名是否和已注册用户重复。(3) 两次密码输入是否一致.若用户输入合法,允许注册,并跳转至用户界面;否则,给出错误提示.此页面URL为:http:/localho
17、st/auth/register(localhost为系统域名,同下).用户注册页面UI与流程图如图3。1和图3。2所示。图3。1 用户注册页面图3。2 用户注册流程图图3.3 用户登录流程图3。1。2 用户登录本模块用于实现用户登录,在用户输入正确的用户名和密码后,进入系统;否则,提示用户错误信息。此页面URL为:http:/localhost,若存在Session,跳转至问卷展示页面.用户登录流程图与页面UI如图3.3和图3。4所示.图3。4 用户登录界面3。2 问卷管理系统3.2.1 问卷信息管理本模块用于实现用户问卷信息的后台管理。具体的操作有:问卷信息展示、创建新问卷、更新问卷、删除
18、问卷等操作。要展示的问卷信息有:(1) 问卷ID(系统内唯一,在创建问卷时由系统自动生成).(2) 问卷标题。(3) 问卷创建者的用户名。(4) 问卷的创建时间和有效时间(在有效时间内问卷可以答题)。(5) 问卷的提交量。(6) 查看问卷统计信息的链接。(7) 查看问卷地址的链接.(8) 编辑问卷内题目的链接。(9) 问卷操作按钮,包括问卷更新按钮和问卷删除按钮。此页面URL为:http:/localhost/userconsole/用户名,内为变量,是不同用户进入自己问卷管理页面的条件。更新问卷的post地址为:http:/localhost/userconsole/用户名/updatequ
19、estionnaire。删除问卷的post地址为:http:/localhost/userconsole/用户名/deletequestionnaire。问卷信息管理页面UI与流程图如图3.5和图3。6所示.图3.5 问卷信息展示页面除此之外,还有一个添加问卷按钮.使用JavaScript捕获按钮点击消息,生成建立新问卷对话框,用户填写问卷标题与有效时间后可以创建新问卷.使用Ajax与服务器交流将问卷信息写入数据库,做到平滑操作,改善用户体验。添加表单的post地址为:http:/localhost/userconsole/用户名/addquestionnaire创建新问卷流程图与页面UI如图
20、3。7和图3。8所示。图3.6 问卷信息展示流程图图3.7 建立新问卷流程图图3。8 建立新问卷页面3。2.2 题目信息管理本模块用于实现题目信息的后台管理。具体的操作有:题目信息展示、创建新题目、更新题目、删除题目等操作。要展示的题目信息有:(1) 题号,用于展示问卷时的题目排序.(2) 题目内容。(3) 题型(单选题、多选题、简答题)。(4) 编辑题目对应选项的链接(简答题除外).(5) 题目操作按钮,包括题目更新按钮和题目删除按钮。此页面URL为:http:/localhost/userconsole/用户名/questionnaire/问卷id。题目信息管理页面UI与流程图如图3.9和
21、图3。10所示。图3。9 题目信息展示页面图3。10 题目信息展示流程图除此之外,还有一个添加题目按钮.使用JavaScript捕获按钮点击消息,生成建立新题目对话框,用户通过下拉框选择题号与题型,输入题目后可以创建新题目,已有的题号不会出现在下拉框中,防止生成问卷的题号重复.使用Ajax与服务器交流将问卷信息写入数据库,做到平滑操作,改善用户体验。添加新题目页面UI与流程图如图3。11和图3。12所示。图3。11 建立新题目页面 图3。12 建立新题目流程图 3.2.3 选项信息管理本模块用于实现选项信息的后台管理。具体的操作有:选项信息展示、创建新选项、更新选项、删除选项等操作.要展示的选
22、项信息有:(1) 选项号,用于展示题目时的选项排序。(2) 选项内容。(3) 选项操作按钮,包括选项更新按钮和选项删除按钮。此页面URL为:http:/localhost/userconsole/用户名/subject/题目id。选项信息管理页面UI与流程图如图3.13和图3。14所示。图3.13 选项信息管理页面图3。14 选项信息管理流程图除此之外,还有一个添加选项按钮。使用JavaScript捕获按钮点击消息,生成建立新选项对话框,用户通过下拉框选择选项号,输入选项内容后可以创建新选项,已有的选项号不会出现在下拉框中,防止生成问卷的题号重复。使用Ajax与服务器交流将问卷信息写入数据库,
23、做到平滑操作,改善用户体验.添加新题目页面UI与流程图如图3。15和图3。16所示。图3.15 建立新选项页面 图3。16 建立新选项流程图3.2。4 问卷结果统计根据用户填写的问卷信息,统计选择题每一道选项的选项次数以及简答题的答案。同一道题目不同选项选择次数使用饼状图显示百分比。使用HighCharte库绘制饼状图。页面URL为:http:/localhost/userconsole/用户名/questionnaire/问卷id/result。页面UI如图3。17与图3。18所示。图3.17 问卷统计选择题展示页面图3.18 问卷统计简答题展示页面 3。2。5 问卷生成根据用户创建的问卷、
24、题目以及对应的选项信息,生成一个完整的问卷页面,页面URL为:http:/localhost/questionnaire/问卷id。页面UI如图3.19所示.图3。19 问卷页面 3.2。6 问卷提交在用户填写完问卷并提交之后,向用户反馈此问卷的统计信息。页面UI如图3.20所示图3。20 反馈信息 4 测试4。1 出现的错误1. 用户权限问题,导致注册用户可以编辑其他用户创建的题目以及选项.2. 无法通过Laravel的MVC框架联立不同的数据库表格。3. 更新数据库时,导致多个行被错误修改。4。2 解决方法1. 在后台页面首先根据URL的用户名变量,判断变量与Session用户标识是否一致
25、,若一致,转入编辑页面;不一致,转到错误页面。2. 外键与主键设置错误,修改即可.3. 错误使用MVC的find语句,修改成where语句即可.参考文献1麦克劳克林。 PHP & MySQL实战手册第二版M. 中国电力出版社, 2014。2杨克李强, 裴云, 黄向党. PHP和MySQL Web开发从新手到高手M. 人民邮电出版社, 2013.3陈惠贞, 陈俊荣。 PHP MySQL程序设计实例讲座M. 清华大学出版社, 2010。4孔潇。 PHP & MySQL网站建设M。 国防工业出版社, 2001.5TimBoronczyk, MartinE。Psinas。 PHP & MySQL范例精
26、解:创建、修改、重用M。 清华大学出版社, 2009.6万川梅, 周建儒。 PHP WEB程序设计M。 西南交通大学出版社, 2014.7陆凯. PHP网站开发实用技术M。 人民邮电出版社, 2016。8传智播客高教产品研发部。 PHP程序设计高级教程M。 中国铁道出版社, 2015。.附 录(关键部分程序清单)1。 路由文件 Auth, function()Route::post(loginCheck, AuthControllerloginCheck);Route:get(register, AuthControllerregister);Route::post(registerCheck
27、, AuthControllerregisterCheck);Route:post(registerEmailCheck, AuthControllerregisterEmailCheck);Route:post(registerNameCheck, AuthControllerregisterNameCheck););/问卷展示页Route::group(prefix = questionnaire, namespace = Questionnaire, function()Route:get(questionnaireid, QuestionnaireControllerindex);Ro
28、ute::post(questionnaireid/result, QuestionnaireControllerresult););/用户后台Route::group(prefix = userconsole, namespace = UserConsole, function()/展示用户的问卷Route::get(username, UserConsoleControllerindex);/增加问卷Route::post(username/addquestionnaire, UserConsoleControlleraddquestionnaire);/修改问卷Route:post(us
29、ername/updatequestionnaire, UserConsoleControllerupdatequestionnaire);/删除问卷Route:post(username/deletequestionnaire, UserConsoleControllerdeletequestionnaire);/展示问卷的题目Route:get(username/questionnaire/questionnaireid, UserConsoleControllerquestionnaire);/提交结果统计Route:get(username/questionnaire/question
30、naireid/result, UserConsoleControllersubmitresult);Route::get(username/questionnaire/questionnaireid/result/subjectid, UserConsoleControlleranswerresult);/增加题目Route::post(username/questionnaire/questionnaireid/addsubject, UserConsoleControlleraddsubject);/修改题目Route:post(username/questionnaire/questi
31、onnaireid/updatesubject, UserConsoleControllerupdatesubject);/删除题目Route:post(username/questionnaire/questionnaireid/deletesubject, UserConsoleControllerdeletesubject);/展示题目的选项Route:get(username/subject/subjectid, UserConsoleControllersubject);/增加选项Route::post(username/subject/subjectid/addoption, Us
32、erConsoleControlleraddoption);/修改选项Route:post(username/subject/subjectid/updateoption, UserConsoleControllerupdateoption);/删除选项Route:post(username/subject/subjectid/deleteoption, UserConsoleControllerdeleteoption););2. 用户管理后台文件?php namespace AppHttpControllersAuth;use AppHttpControllersController;us
33、e IlluminateContractsAuthGuard;use IlluminateContractsAuthRegistrar;use IlluminateFoundationAuthAuthenticatesAndRegistersUsers;use AppUser;use Session;class AuthController extends Controller /|- Registration & Login Controller|- This controller handles the registration of new users, as well as the a
34、uthentication of existing users。 By default, this controller uses a simple trait to add these behaviors。 Why dont you explore it?*/use AuthenticatesAndRegistersUsers;/* Create a new authentication controller instance。 param IlluminateContractsAuthGuard $auth * param IlluminateContractsAuthRegistrar
35、registrar * return voidpublic function _construct(Guard $auth, Registrar $registrar)$thisauth = $auth;$this-registrar = registrar;this-middleware(guest, except = getLogout); /* * 登陆页面展示 return Response */public function index()return view(auth。login);/ 登录验证 return Response /public function loginChec
36、k()/ 处理表单:if ( (!empty($_POSTuser_nicename) & (!empty(_POSTuser_pass) )$user_nicename = htmlspecialchars(stripslashes(trim(_POSTuser_nicename));$user_pass = htmlspecialchars(stripslashes(trim(_POSTuser_pass));$user_pass = md5($user_pass);/查找与用户名对应行$user_info = User:where(name, user_nicename)-first()
37、;/信息匹配if(user_info != NULL AND user_info-password = user_pass)Session::put(auth_state, 1);Session:put(user_name, ”user_nicename”);return ”1;/信息不匹配elsereturn ”0”;elsereturn ”0”;/* 注册界面 * return Response /public function register()return view(auth。register);/* 注册验证 * return Response */public function
38、registerCheck()/ 处理表单:if ( (!empty(_POSTuser_nicename)) (!empty(_POSTuser_pass) (!empty($_POSTuser_email)) )$user_nicename = htmlspecialchars(stripslashes(trim($_POSTuser_nicename));user_pass = htmlspecialchars(stripslashes(trim($_POSTuser_pass)));$user_pass = md5(user_pass);user_email = htmlspecial
39、chars(stripslashes(trim(_POSTuser_email)));created_at = updated_at = date(Ymd H:i:s);userurl_id = User:insertGetId(array( name= user_nicename,email= user_email,password= user_pass,created_at= created_at,updated_at= updated_at);Session:put(auth_state, 1);Session:put(user_name, ”user_nicename”);/* 注册验
40、证-邮箱 * * return Response /public function registerEmailCheck()/ 处理表单:if ( !empty(_POSTuser_email) )/查找与用户名对应行user_info = User::where(email, _POSTuser_email)first();/邮箱信息存在if($user_info != NULL)return ”1”;elsereturn 0;/ 注册验证-用户名 * return Response */public function registerNameCheck()/ 处理表单:if ( !empt
41、y(_POSTuser_name) )/查找与用户名对应行user_info = User:where(name, $_POSTuser_name)-first();/用户信息存在if(user_info != NULL)return 1;elsereturn 0;3. 问卷后台管理文件?php namespace AppHttpControllersUserConsole;use AppHttpRequests;use AppHttpControllersController;use AppUser;use AppQuestionnaire;use AppSubject;use AppOption;use AppShort_answer;use Session;use IlluminateHttpRequest;class UserConsoleController extends Controller /