习题库小程序的设计与实现 计算机毕业设计源码27057

摘 要

信息技术的快速发展推动了教育模式向数字化、智能化转变。本论文开发了一款习题库小程序系统,旨在提升学生学习效率和考试准备质量。系统分为学生端和管理员端,满足不同用户需求。

学生端功能涵盖登录注册、首页展示、考试资讯、通知公告、在线考试、练习模式和个人中心等。学生可获取最新资讯、参与在线考试、查看成绩,并通过错题管理等功能强化学习。个人中心提供修改信息、收藏、评论和错题列表等便捷功能,增强学习体验。管理员端具备用户管理、资源管理、试题库管理等后台管理功能,便于监控考试、编辑试题库,并分析学生表现,提高系统效率和学习质量。

系统后端采用Node.js和Express框架,前端使用小程序,后端构建RESTful API,保证高效性和可扩展性;前端提供良好移动端体验;MySQL数据库确保数据稳定存储和高效访问。技术结合实现了功能全面、易维护、操作简便的系统。

本论文展示了基于现代Web和移动技术的学习与考试平台解决方案,具有实际应用价值,有助于提升学生学习效率,为教师和管理员提供有效管理工具。

关键词:习题库小程序;在线考试;Express;Node.js;MySQL;后台管理

Abstract
The rapid development of information technology has driven the transformation of education models towards digitization and intelligence. This paper develops an exercise library mini program system aimed at improving students' learning efficiency and exam preparation quality. The system is divided into student end and administrator end to meet different user needs.

The student end features include login and registration, homepage display, exam information, notifications and announcements, online exams, practice mode, and personal center. Students can access the latest information, participate in online exams, view grades, and enhance their learning through features such as error management. The personal center provides convenient functions such as modifying information, bookmarking, commenting, and incorrect question lists to enhance the learning experience. The administrator end has backend management functions such as user management, resource management, and question bank management, which facilitate monitoring exams, editing question banks, analyzing student performance, and improving system efficiency and learning quality.

The backend of the system adopts the Node.js and Express frameworks, the frontend uses mini programs, and the backend builds RESTful APIs to ensure efficiency and scalability; The front-end provides a good mobile experience; MySQL database ensures stable data storage and efficient access. The combination of technology has achieved a comprehensive, easy to maintain, and user-friendly system.

This paper presents a learning and examination platform solution based on modern web and mobile technologies, which has practical application value and helps improve students' learning efficiency, providing effective management tools for teachers and administrators.

Keywords: exercise library mini program; Online exams; Express; Node.js; MySQL; back-stage management

目录

[摘 要](#摘 要)

第1章引言

1.1研究背景与意义

1.2国内外研究现状

1.3论文组成结构

第2章相关技术介绍

2.1Express介绍

2.2Node.js介绍

2.3MySQL数据库

[2.4JavaScript 运行模式](#2.4JavaScript 运行模式)

2.5B/S框架

2.6微信开发者工具

第3章系统分析

3.1可行性分析

3.1.1技术可行性

3.1.2经济可行性

3.1.3操作可行性

3.2系统功能需求

3.3系统性能需求

[3.4 系统流程分析](#3.4 系统流程分析)

3.4.1系统开发流程

3.4.2用户登录流程

3.4.3系统操作流程

3.4.4添加信息流程

3.4.5修改信息流程

3.4.6删除信息流程

第4章系统设计

4.1系统体系结构

4.2总体结构设计

4.3数据库设计

4.3.1概念设计

4.3.2数据库表设计

第5章系统实现

5.1登录模块的实现

[5.2 普通用户子系统模块的实现](#5.2 普通用户子系统模块的实现)

[5.2.1 用户首页模块](#5.2.1 用户首页模块)

[5.2.2 考试资讯模块](#5.2.2 考试资讯模块)

[5.2.3 在线考试模块](#5.2.3 在线考试模块)

[5.2.4 练习模式模块](#5.2.4 练习模式模块)

[5.2.5 网站公告](#5.2.5 网站公告)

[5.3 管理员子系统模块的实现](#5.3 管理员子系统模块的实现)

5.3.1后台首页界面

5.3.2系统用户界面

5.3.3练习模式管理界面

5.3.4在线考试管理界面

[5.3.5 轮播图管理界面](#5.3.5 轮播图管理界面)

5.3.6通知公告管理界面

[5.3.7 资源管理界面](#5.3.7 资源管理界面)

第6章系统测试

[6.1 测试目的](#6.1 测试目的)

6.2测试方法

6.3测试内容

6.4测试结果

第7章总结与展望

[7.1 总结](#7.1 总结)

[7.2 展望](#7.2 展望)

参考文献

致谢

第1章引言

1.1研究背景与意义

随着信息技术的快速发展,教育领域逐步进入数字化、智能化的时代。传统的教育方式在知识传递、学习资源获取、考试准备等方面存在一定的局限性,尤其是在学生的自主学习和个性化学习需求不断增加的背景下,如何有效提高学生的学习效率和考试准备的质量成为教育改革的重要课题。基于互联网技术的学习平台,尤其是移动端学习平台的出现,为解决这些问题提供了新的解决方案。尤其是移动应用程序和云计算技术的发展,使得学生可以随时随地进行学习、练习和考试,为个性化学习和自主学习提供了更加灵活的支持。

在传统的学习过程中,学生往往面临着对大量考试资讯、习题和资源管理不够便捷的问题。同时,学生在面对海量的学习内容时,如何有效地进行错题整理与复习,常常影响到学习效果。而教师和管理员也需要一套高效的管理系统来处理大量学生数据、试题库、考试安排等事务,确保系统的顺畅运行。因此,构建一个集成了学习资源管理、考试信息发布、在线考试、错题管理和个性化练习等功能的系统显得至关重要。

在此背景下,基于Node.js、Express、小程序和MySQL技术开发的习题库小程序系统,为学生提供了一个便捷的学习平台,满足了学生对个性化学习、错题管理、考试准备等方面的需求。通过小程序的轻量化特点,学生可以在移动设备上随时随地进行学习和练习,极大地方便了学习活动的开展。同时,管理员能够通过后台管理功能有效地管理考试资源、学生信息、错题记录等,提升了教学管理的效率。

技术上,Node.js作为一种高效的后台开发工具,结合Express框架,使得系统具有高并发处理能力和良好的可扩展性。MySQL数据库则为系统的数据存储提供了可靠保障,确保了数据的安全性和高效查询。小程序则通过其跨平台的特性,使得系统可以在多种设备上流畅运行,为学生和管理员提供了良好的用户体验。

习题库小程序能够为学生提供更加个性化和灵活的学习体验,同时也为教育管理者提供了便捷高效的管理工具。随着教育信息化的深入发展,类似的平台将对教育教学方式、学习效果和教学管理模式产生深远的影响,具有重要的现实意义和长远的社会价值。

1.2国内外研究现状

近年来,随着信息技术的快速发展,教育领域的数字化转型逐渐成为全球关注的热点。国内外在学习平台、在线教育系统、移动学习应用等方面已经取得了显著进展。许多国家和地区通过各种技术手段,探索创新的学习模式,并且针对学生个性化需求、学习效果提升等方面进行研究与实践。特别是在考试系统、习题库和学习资源管理方面,已有不少研究成果和实际应用。国内外许多教育机构和企业,纷纷推出了各类在线学习平台,力求通过技术创新提高教学效率和学习质量。

在国外,许多教育技术公司和学术机构早在数年前便开始了在线学习平台的研发工作。以美国为例,在线教育平台如Coursera、edX、Khan Academy等,为全球学生提供了海量的学习资源,涵盖了从基础教育到高等教育的广泛内容。这些平台结合了学习资料、测试题库、在线考试等功能,满足了学生自主学习的需求,同时也为教师和教育管理者提供了便捷的学习进度跟踪与管理工具。此外,一些国外的研究者也在探索如何通过技术手段优化习题库的建设和管理,如通过构建灵活的题库管理系统来实现高效的题目发布与评估,以及通过数据分析对学生学习行为进行分析,进一步提高学习效果。

国内的教育信息化发展起步较晚,但近年来也取得了显著的进展。随着移动互联网的普及,越来越多的教育平台和应用程序应运而生。知名的在线教育平台如作业帮、猿辅导、学堂在线等,纷纷推出了基于移动端的小程序或APP,提供了丰富的学习内容和考试练习。习题库和在线考试成为这些平台的重要组成部分,尤其是在中小学和高等教育的考试备考领域,习题库系统已经成为提高学习效果和考试通过率的重要工具。

此外,国内外也有不少研究致力于如何通过技术手段优化习题库的设计与实现。国内的研究通常侧重于针对特定学科或考试形式的习题库构建,并且强调系统的易用性和灵活性。例如,如何根据学生的学习进度和知识掌握情况推荐适合的题目,如何通过错题本的管理帮助学生实现个性化复习等。国外的一些研究则更多关注平台的开放性和大规模数据处理能力,特别是如何通过题库资源的整合以及智能题目生成和自动评测,提升学生的学习效率。

尽管国内外在教育技术领域已有较多的研究和应用,但仍存在一些挑战。首先,尽管已有的学习平台和习题库系统提供了丰富的题目和学习资料,但如何更加精准地满足学生的个性化学习需求仍是一个重要课题。其次,题库的管理和维护仍然面临着内容更新、质量保障等方面的问题。最后,如何提高教育管理效率,减轻教师的负担,以及提升学生参与度和学习兴趣,也是当前研究和应用中亟待解决的难题。

综上所述,国内外在教育信息化和在线学习平台的研究与实践方面已取得显著成效,尤其是在习题库和考试系统的设计与实现方面。但随着教育需求的多样化和个性化,如何利用现代技术手段进一步提升习题库系统的功能性、可维护性和用户体验,仍然是未来研究和应用的关键方向。

1.3论文组成结构

论文将分层次经行编排,除去论文摘要致谢文献参考部分,正文部分还会对系统需求做出分析,以及阐述大体的设计和实现的功能,最后罗列部分调测记录,论文主要架构如下:

第一章:引言。第一章主要介绍了课题研究的背景和意义,系统开发的国内外研究现状和本文的组成结构。

第二章:开发工具及相关技术介绍。主要介绍系统开发所采用的工具和技术。

第三章:系统需求分析。主要从系统的用户、功能等方面进行需求分析。

第四章:系统设计。主要对系统框架、系统功能模块、数据库进行功能设计。

第五章:系统实现。主要介绍了系统框架搭建、系统界面的实现。

第六章:系统测试。主要对系统的部分界面进行测试并对主要功能进行测试

第七章:总结与展望。

第2章相关技术介绍

2.1Express介绍

Express是目前流行的基于Node.js运行环境的Web应用程序开发框架,它简洁且灵活,为Web应用程序提供了强大的功能。Express提供了一个轻量级模块,类似于jQuery(封装的工具库),它把Node.js的HTTP模块的功能封装在一个简单易用的接口中,用于扩展HTTP模块的功能,能够轻松地处理服务器的路由、响应、Cookie和HTTP请求的状态[1]。

Express的优势:

(1)简洁的路由定义方式。

(2)简化HTTP请求参数的处理。

(3)提供中间件机制控制HTTP请求。

(4)拥有大量第三方中间件。

(5)支持多种模版引擎。

2.2Node.js介绍

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型。

Node 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHPPythonPerlRuby 等服务端语言平起平坐的脚本语言。 发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。

Node对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好。V8引擎执行Javascript的速度非常快,性能非常好。 Node是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用[2]。

2.3MySQL数据库

MySQL是一种开源关系型数据库管理系统,广泛应用于Web应用和企业级数据存储。MySQL支持结构化查询语言,允许开发者通过标准语句进行数据的创建、读取、更新和删除操作[3]。数据库通过表格形式组织数据,支持数据完整性和约束条件的定义。MySQL的存储引擎机制使得用户可以根据具体需求选择不同的存储引擎,以优化性能和功能。

MySQL具有高性能和可扩展性,支持大规模数据存储和高并发访问。系统提供了丰富的用户权限管理和数据加密安全特性。MySQL能够与多种编程语言和框架兼容,广泛应用于内容管理系统、电子商务平台和数据分析等各种场景。

2.4JavaScript 运行模式

JavaScript是一种属于网络的高级脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的[4]。

是一种解释性脚本语言(代码不进行预编译)。

主要用来向HTML标准通用标记语言下的一个应用)页面添加交互行为。

可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离[5]。

跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如WindowsLinuxMacAndroidiOS等)[6]。

JavaScript脚本语言同其他语言一样,有它自身的基本数据类型,表达式和算术运算符及程序的基本程序框架。JavaScript提供了四种基本的数据类型和两种特殊数据类型用来处理数据和文字。而变量提供存放信息的地方,表达式则可以完成较复杂的信息处理。

2.5B/S框架

B/S(Browser/Server)架构是一种基于浏览器和服务器的系统架构模式,用户通过浏览器与服务器进行交互。B/S架构简化了客户端的部署和管理,用户无需在本地安装复杂的软件,只需使用标准浏览器即可访问应用程序。服务器端负责处理业务逻辑和数据存储,客户端则主要负责展示用户界面和数据交互[7]。B/S架构的设计使得系统更新和维护集中在服务器端,降低了维护成本。

B/S架构通常采用Web技术进行实现,包括HTML、CSS和JavaScript等。用户在浏览器中发起请求,服务器响应并返回数据。数据传输通常通过HTTP或HTTPS协议进行,B/S架构的灵活性使其适用于在线购物、信息管理系统和社交网络等各类应用场景[8]。由于其易于扩展性,B/S架构可以方便地支持大规模用户访问,适应不断变化的业务需求。

2.6微信开发者工具

微信开发者工具是一款专为小程序开发而设计的应用,它不断改进,提供了便捷的操作方式,并且在开发过程中可以通过微信扫描二维码来访问,从而实现快速、准确的小程序开发和调试。

根据用户的需求,我们将采用不同的屏幕大小来制作小程序。

在完成了视图布置之后,可以通过执行编辑功能,快速更改当前的视图界面。

控制台:方便调试打印输出信息。

将代码上传至腾讯服务器,并在审核过程中填写版本号和备注信息,以确保代码的安全性和准确性。

通过查看资源文件,我们可以快速地调整相关项目的文件目录,从而实现断点调试。

使用远程调试技术,无论是在手机端还是PC端,都能够轻松地进行开发工作。

本地数据存储:显示的是本地存储的数据。

通过使用子父层级结构,我们可以更容易地进行视图调试。

微信的代码体积应该保持在2M 以内,而且在开发过程中,应该严格检查合法域名信息,并且为小程序的后台配置服务器域名。

微信开发者工具已经成为了开发过程中不可或缺的一部分,并且正在不断地改进和完善。

第3章系统分析

3.1可行性分析

开发任何一个系统,都要对其可行性进行分析,对其时间和资源上的限制进行考虑,这样可以减少系统开发的风险。同时,分析之后不仅能够合理的运用人力,还能在各方面资源的消耗上得到节省。下面就对技术、经济和社会三个方面来介绍。

3.1.1技术可行性

习题库小程序的设计与实现具有较高的技术可行性。首先,Node.js作为一种高效的服务器端运行环境,具备非阻塞I/O和事件驱动的特性,能够在高并发情况下保持系统的高性能,适应习题库小程序的实时数据处理需求。Express框架简化了Web应用的开发,提供了灵活的路由和中间件支持,确保了后台逻辑的快速实现。MySQL作为成熟的关系型数据库,能够高效地管理和查询大量的试题信息、用户及错题数据,保证了数据的完整性与一致性。通过这些技术的结合,系统能够提供稳定、可靠的服务,同时具有良好的扩展性和维护性,满足习题库小程序未来的增长需求。

3.1.2经济可行性

习题库小程序的设计与实现在经济上具有较高的可行性。采用Node.js和Express框架进行开发,可以大大减少开发时间和人力成本,同时由于这两者都是开源技术,避免了昂贵的商业软件授权费用。MySQL作为一款广泛应用的开源数据库,其成本较低且支持高效的数据管理,能够满足系统的存储需求而不增加额外开销。此外,系统的模块化设计与高效的性能支持,意味着平台能够处理大量用户和试题信息,提升运营效率,进而降低了后期维护和扩展的成本。因此,从初期开发到长期运营,系统的经济性都表现出较强的竞争力,为习题库小程序提供了低成本、高回报的解决方案。

3.1.3操作可行性

习题库小程序在操作上具有较高的可行性。首先,Node.js和Express框架的广泛应用使得开发人员能够快速上手,开发周期短且易于维护。系统采用的前后端分离架构,前端与后端通过API进行高效通信,简化了操作流程,提升了用户体验。同时,MySQL数据库的管理和查询操作直观且稳定,能够保证数据的准确性和实时性。对于管理员和用户而言,系统界面设计简洁直观,操作流程清晰,且通过权限控制,确保了不同角色的操作权限。系统的可扩展性和易于升级的特性,也为后期操作的灵活调整提供了保障。因此,该系统在日常操作中具备高效、稳定且易于管理的特点,确保了平台的顺利运行。

综上所述,习题库小程序的设计与实现在技术、经济、操作三个方面都是完全可行的。

3.2系统功能需求

在系统开发设计前,应该对功能做初步设想,清楚这个管理系统有什么板块,每个板块有什么功能,整体的设计是否满足使用者的需求,接着对所开发的系统功能进行的详细分析总结,从而设计出完整的系统并将其实现。用户与开发人员的交流分析,使其达到最佳理解程度,使系统功能达到最佳。

普通用户用例图如下所示。

图3-1 普通用户用例图

管理员用例图如下所示。

图3-2 管理员用例图

通过对用例图的分析和调查,根据本系统的实际需要,从用户角度提出需求功能如下:

1,学生用户功能

登录注册:学生可以通过手机号、邮箱或学号等方式进行注册或登录。注册时需要验证邮箱/手机号码,登录时可以使用用户名和密码进行身份验证。支持密码找回功能,确保学生用户能够安全地恢复账户访问。

首页:显示系统提供的最新考试资讯、通知公告和相关的学习资源。提供个性化推荐,例如根据学生的学习历史推荐相关练习题、考试信息等。

考试资讯:学生可以浏览最新的考试资讯,了解考试时间、科目安排、试题发布等重要信息。支持资讯的分类浏览,例如按考试类型(模拟考试、期末考试等)进行筛选。

通知公告:显示最新的通知公告,管理员发布的关于考试安排、平台更新等相关信息将及时显示在此模块。

在线考试:学生可以参加系统提供的在线考试,包括选择题、填空题、简答题等。系统根据学生选择的科目、难度等进行自动组卷,学生在规定时间内完成考试并提交,系统会自动评分并提供反馈。

练习模式:学生可以手动选择题目进行组合,适用于特定的知识点复习。

我的(个人中心):学生可以在此模块修改个人基本信息,如姓名、头像、联系方式等。

收藏:学生可以收藏自己喜欢的题目或资讯,便于后续查阅。

评论:学生可以对练习题或考试内容进行评论和评分,分享学习经验。

错题列表:展示学生的历史错题记录,学生可以选择重新练习这些题目。

2.管理员功能

后台首页:后台管理界面为管理员提供了系统的概览,包括用户统计、考试数据、最新通知等。通过首页,管理员可以快速访问和管理系统中的各项资源。

系统用户管理:管理员可以查看、编辑、删除用户信息,管理学生的权限。

轮播图管理:管理员可以上传和管理轮播图,用于展示平台的重要信息或活动,例如考试提醒、系统公告等。支持图片上传、删除、排序等功能。

通知公告管理:管理员可以发布、编辑、删除通知公告。通知公告可用于考试通知、系统更新、活动信息等内容的发布。

资源管理;

考试资讯:管理员可以管理考试资讯的内容,包括新增、编辑、删除和分类管理。

资讯分类:管理员可以对考试资讯进行分类,以便学生根据类型查找相关信息。

练习模式:管理员可以配置练习模式,提供手动组卷的功能,管理员设置不同类型的题目,供学生进行选择和练习。

在线考试管理:

科目列表:管理员可以设置和管理各类考试科目,科目名称、编号等信息。

试题库管理:管理员可以对试题库进行增删改查,支持重置、删除、添加题目,导出和导入题库,上传试题文档。

错题记录:管理员可以查看学生的错题记录,并对错题进行统计和分析。

试卷列表:管理员可以生成不同科目的试卷。提供自动组卷功能,管理员可以选择特定的题目进行自动组卷,生成适合的试卷。支持查看学生考试成绩、评分,提供详细的考试报告,帮助学生和管理员分析学生的学习情况。

3.3系统性能需求

评判一个系统好坏的一项重要指标就是性能,下面是对此系统的一些性能进行阐述。

1.系统的安全性和稳定性: 习题库小程序在管理权限上有着严格的控制,即想登录此平台进行操作,则必须要有操作权限,没有权限的用户是不可能登录平台查看任何的信息和数据,从而确保了系统的安全性。

2.数据的完整性和准确性:第一个是各项记录信息的完整性,信息记录的内容可以为空;第二个是各项信息数据之间相互联系的准确性;第三个是数据在不同记录信息的一致性

3.用户操作系统简单方便:在系统开发中按照"简单易用"的原则,能够使用户对系统的使用一目了然,既能保证用户使用,同时又能保证维护人员方便维护。

3.4 系统流程分析

3.4.1系统开发流程

习题库小程序开发时,首先进行需求分析,进而对系统进行总体的设计规划,设计系统功能模块,数据库的选择等,本系统的开发流程如图3-4所示。

图3-4系统开发流程图

3.4.2用户登录流程

为了保证系统的安全性,要使用本系统对系统信息进行管理,必须先登陆到系统中。如图3-5所示。

图3-5 登录流程图

3.4.3系统操作流程

用户打开并进入系统后,会先显示登录界面,输入正确的用户名和密码,系统自动检测信息,若信息无误,则用户会进入系统功能界面,进行操作,否则会提示错误无法登录,操作流程如图3-6所示。

图3-6 系统操作流程图

3.4.4添加信息流程

管理员可以进行信息的添加,用户也可以对自己权限内的信息进行添加,输入信息后,系统会自行验证输入的信息和数据,若信息正确,会将其添加到数据库内,若信息有误,则会提示重新输入信息,添加信息流程如图3-7所示。

图3-7 添加信息流程图

3.4.5修改信息流程

管理员可以进行信息修改,用户也可以对自己权限内的信息进行修改,首先进入修改信息界面,输入修改信息数据,系统进行数据的判断验证,修改信息合法则修改成功,信息更新至数据库,信息不合法则修改失败,重新输入。修改信息流程图如图3-8所示。

图3-8 修改信息流程图

3.4.6删除信息流程

管理员可以进行信息删除,对要删除的信息进行选中后,点击删除按钮,系统会询问是否确定,若点击确定,则系统会删除掉选中的信息,并在数据库内对信息进行删除,删除信息流程图如图3-9所示。

图3-9 删除信息流程图

第4章系统设计

4.1系统体系结构

习题库小程序选择B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式。适合在互联网上进行操作,只要用户能连网,任何时间、任何地点都可以进行系统的操作使用。系统工作原理图如图4-1所示:

图4-1 系统工作原理图

其最终前后台交互原理如图4-2所示。

图4-2前后台交互原理

具体交互流程为:浏览器中执行具体操作,操作命令将生成一个do方法。该方法使得浏览器能够访问后台中的Controller层,Controller层由于业务上的需要执行进而访问Service层。Service层收到指令后将会去调用内部DAO层的接口。接口将会和MyBatis层下的一个SQL语句相对接。对接好之后进而访问MySql数据库。更新底层数据,然后将数据同步回MyBatis层,同步变化后的数据将通过DAO层接口,Service层和后台Controller层,直观反映到浏览器页面上。

4.2总体结构设计

习题库小程序的整体结构设计如下图所示。

图4-3系统功能结构图

4.3数据库设计

在进行数据库设计时,概念设计帮助明确系统的整体结构和需求。在这一阶段,需要确定实体、属性以及它们之间的关系,为后续的数据库表设计奠定基础。接下来,将深入探讨数据库表设计的具体细节,实现更高效的数据存储和管理。

4.3.1概念设计

概念设计是数据库设计的第一步,其主要目标是对系统的数据需求进行全面的理解和抽象[9]。在这一阶段,通过建立实体-关系模型(ER模型)来识别系统中的关键实体、属性及其相互关系。概念设计的输出是一个清晰的ER图,作为后续数据库表设计的基础。以下将展示系统的全局E-R图。

图4-10数据库E-R图

4.3.2数据库表设计

这一阶段的重点是将概念模型转换为实际的数据库结构,包括表的创建、字段的定义及数据类型的选择。每个实体通常对应于数据库中的一张表,而实体的属性则转化为表的列[10]。以下是系统的数据库表设计展示。

表 4-1-access_token(登陆访问时长)

|----|-------------|-----------|-------|------|------|------------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | token_id | int | | 是 | 是 | 临时访问牌ID |
| 2 | token | varchar | 64 | 否 | 否 | 临时访问牌 |
| 3 | info | text | 65535 | 否 | 否 | 信息 |
| 4 | maxage | int | | 是 | 否 | 最大寿命:默认2小时 |
| 5 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 6 | update_time | timestamp | | 是 | 否 | 更新时间 |
| 7 | user_id | int | | 是 | 否 | 用户编号 |

表 4-2-article(文章)

|----|-------------|-----------|------------|------|------|------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | article_id | mediumint | | 是 | 是 | 文章id |
| 2 | title | varchar | 125 | 是 | 是 | 标题 |
| 3 | type | varchar | 64 | 是 | 否 | 文章分类 |
| 4 | hits | int | | 是 | 否 | 点击数 |
| 5 | praise_len | int | | 是 | 否 | 点赞数 |
| 6 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 7 | update_time | timestamp | | 是 | 否 | 更新时间 |
| 8 | source | varchar | 255 | 否 | 否 | 来源 |
| 9 | url | varchar | 255 | 否 | 否 | 来源地址 |
| 10 | tag | varchar | 255 | 否 | 否 | 标签 |
| 11 | content | longtext | 4294967295 | 否 | 否 | 正文 |
| 12 | img | varchar | 255 | 否 | 否 | 封面图 |
| 13 | description | text | 65535 | 否 | 否 | 文章描述 |

表 4-3-article_type(文章分类)

|----|-------------|-----------|-------|------|------|--------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | type_id | smallint | | 是 | 是 | 分类ID |
| 2 | display | smallint | | 是 | 否 | 显示顺序 |
| 3 | name | varchar | 16 | 是 | 否 | 分类名称 |
| 4 | father_id | smallint | | 是 | 否 | 上级分类ID |
| 5 | description | varchar | 255 | 否 | 否 | 描述 |
| 6 | icon | text | 65535 | 否 | 否 | 分类图标 |
| 7 | url | varchar | 255 | 否 | 否 | 外链地址 |
| 8 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 9 | update_time | timestamp | | 是 | 否 | 更新时间 |

表 4-4-auth(用户权限管理)

|----|----------------|-----------|-------|------|------|--------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | auth_id | int | | 是 | 是 | 授权ID |
| 2 | user_group | varchar | 64 | 否 | 否 | 用户组 |
| 3 | mod_name | varchar | 64 | 否 | 否 | 模块名 |
| 4 | table_name | varchar | 64 | 否 | 否 | 表名 |
| 5 | page_title | varchar | 255 | 否 | 否 | 页面标题 |
| 6 | path | varchar | 255 | 否 | 否 | 路由路径 |
| 7 | parent | varchar | 64 | 否 | 否 | 父级菜单 |
| 8 | parent_sort | int | | 是 | 否 | 父级菜单排序 |
| 9 | position | varchar | 32 | 否 | 否 | 位置 |
| 10 | mode | varchar | 32 | 是 | 否 | 跳转方式 |
| 11 | add | tinyint | | 是 | 否 | 是否可增加 |
| 12 | del | tinyint | | 是 | 否 | 是否可删除 |
| 13 | set | tinyint | | 是 | 否 | 是否可修改 |
| 14 | get | tinyint | | 是 | 否 | 是否可查看 |
| 15 | field_add | text | 65535 | 否 | 否 | 添加字段 |
| 16 | field_set | text | 65535 | 否 | 否 | 修改字段 |
| 17 | field_get | text | 65535 | 否 | 否 | 查询字段 |
| 18 | table_nav_name | varchar | 500 | 否 | 否 | 跨表导航名称 |
| 19 | table_nav | varchar | 500 | 否 | 否 | 跨表导航 |
| 20 | option | text | 65535 | 否 | 否 | 配置 |
| 21 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 22 | update_time | timestamp | | 是 | 否 | 更新时间 |

表 4-5-code_token(验证码)

|----|---------------|-----------|-----|------|------|-------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | code_token_id | int | | 是 | 是 | 验证码ID |
| 2 | token | varchar | 255 | 否 | 否 | 令牌 |
| 3 | code | varchar | 255 | 否 | 否 | 验证码 |
| 4 | expire_time | timestamp | | 是 | 否 | 失效时间 |
| 5 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 6 | update_time | timestamp | | 是 | 否 | 更新时间 |

表 4-6-collect(收藏)

|----|--------------|-----------|-----|------|------|-------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | collect_id | int | | 是 | 是 | 收藏ID |
| 2 | user_id | int | | 是 | 是 | 收藏人ID |
| 3 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 4 | source_field | varchar | 255 | 否 | 否 | 来源字段 |
| 5 | source_id | int | | 是 | 否 | 来源ID |
| 6 | title | varchar | 255 | 否 | 否 | 标题 |
| 7 | img | varchar | 255 | 否 | 否 | 封面 |
| 8 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 9 | update_time | timestamp | | 是 | 否 | 更新时间 |

表 4-7-comment(评论)

|----|--------------|-----------|------------|------|------|--------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | comment_id | int | | 是 | 是 | 评论ID |
| 2 | user_id | int | | 是 | 是 | 评论人ID |
| 3 | reply_to_id | int | | 是 | 否 | 回复评论ID |
| 4 | content | longtext | 4294967295 | 否 | 否 | 内容 |
| 5 | nickname | varchar | 255 | 否 | 否 | 昵称 |
| 6 | avatar | varchar | 255 | 否 | 否 | 头像地址 |
| 7 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 8 | update_time | timestamp | | 是 | 否 | 更新时间 |
| 9 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 10 | source_field | varchar | 255 | 否 | 否 | 来源字段 |
| 11 | source_id | int | | 是 | 否 | 来源ID |

表 4-8-exam(考试)

|----|-------------|-----------|----|------|------|----------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | exam_id | mediumint | | 是 | 是 | 考试ID |
| 2 | name | varchar | 32 | 是 | 否 | 考试名称 |
| 3 | duration | int | | 否 | 否 | 答题时长 |
| 4 | score | double | | 否 | 否 | 总分 |
| 5 | status | varchar | 10 | 否 | 否 | 状态:启用、禁用 |
| 6 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 7 | update_time | timestamp | | 是 | 否 | 更新时间 |

表 4-9-exam_question(试题)

|----|------------------|-----------|-----|------|------|------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | exam_question_id | mediumint | | 是 | 是 | 试题ID |
| 2 | type | varchar | 20 | 否 | 否 | 类型 |
| 3 | title | varchar | 255 | 否 | 否 | 题目 |
| 4 | question_item | varchar | 500 | 否 | 否 | 选项 |
| 5 | answer | varchar | 500 | 否 | 否 | 参考答案 |
| 6 | score | double | | 否 | 否 | 总分 |
| 7 | question_order | int | | 否 | 否 | 排序 |
| 8 | exam_id | mediumint | | 是 | 是 | 所属试卷 |
| 9 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 10 | update_time | timestamp | | 是 | 否 | 更新时间 |

表 4-10-exam_question_database(试题库)

|----|------------------|-----------|-----|------|------|-------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | exam_question_id | mediumint | | 是 | 是 | 试题库ID |
| 2 | subject_name | varchar | 255 | 否 | 否 | 科目名称 |
| 3 | type | varchar | 20 | 否 | 否 | 类型 |
| 4 | title | varchar | 255 | 否 | 否 | 题目 |
| 5 | question_item | varchar | 500 | 否 | 否 | 选项 |
| 6 | answer | varchar | 500 | 否 | 否 | 参考答案 |
| 7 | score | double | | 否 | 否 | 总分 |
| 8 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 9 | update_time | timestamp | | 是 | 否 | 更新时间 |

表 4-11-hits(用户点击)

|----|--------------|-----------|-----|------|------|------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | hits_id | int | | 是 | 是 | 点赞ID |
| 2 | user_id | int | | 是 | 否 | 点赞人 |
| 3 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 4 | update_time | timestamp | | 是 | 否 | 更新时间 |
| 5 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 6 | source_field | varchar | 255 | 否 | 否 | 来源字段 |
| 7 | source_id | int | | 是 | 否 | 来源ID |

表 4-12-notice(公告)

|----|-------------|-----------|------------|------|------|------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | notice_id | mediumint | | 是 | 是 | 公告ID |
| 2 | title | varchar | 125 | 是 | 否 | 标题 |
| 3 | content | longtext | 4294967295 | 否 | 否 | 正文 |
| 4 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 5 | update_time | timestamp | | 是 | 否 | 更新时间 |

表 4-13-praise(点赞)

|----|--------------|-----------|-----|------|------|----------------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | praise_id | int | | 是 | 是 | 点赞ID |
| 2 | user_id | int | | 是 | 是 | 点赞人 |
| 3 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 4 | update_time | timestamp | | 是 | 否 | 更新时间 |
| 5 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 6 | source_field | varchar | 255 | 否 | 否 | 来源字段 |
| 7 | source_id | int | | 是 | 否 | 来源ID |
| 8 | status | tinyint | | 是 | 否 | 点赞状态:1为点赞,0已取消 |

表 4-14-slides(轮播图)

|----|-------------|-----------|-----|------|------|-------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | slides_id | int | | 是 | 是 | 轮播图ID |
| 2 | title | varchar | 64 | 否 | 否 | 标题 |
| 3 | content | varchar | 255 | 否 | 否 | 内容 |
| 4 | url | varchar | 255 | 否 | 否 | 链接 |
| 5 | img | varchar | 255 | 否 | 否 | 轮播图 |
| 6 | hits | int | | 是 | 否 | 点击量 |
| 7 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 8 | update_time | timestamp | | 是 | 否 | 更新时间 |

表 4-15-student_users(学生用户)

|----|------------------|-----------|----|------|------|--------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | student_users_id | int | | 是 | 是 | 学生用户ID |
| 2 | student_name | varchar | 64 | 否 | 否 | 学生姓名 |
| 3 | student_gender | varchar | 64 | 否 | 否 | 学生性别 |
| 4 | collect_len | int | | 是 | 否 | 收藏数 |
| 5 | examine_state | varchar | 16 | 是 | 否 | 审核状态 |
| 6 | user_id | int | | 是 | 否 | 用户ID |
| 7 | create_time | datetime | | 是 | 否 | 创建时间 |
| 8 | update_time | timestamp | | 是 | 否 | 更新时间 |

表 4-16-subject(科目)

|----|-------------|-----------|-----|------|------|------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | subject_id | int | | 是 | 是 | 科目ID |
| 2 | name | varchar | 255 | 否 | 否 | 科目名称 |
| 3 | update_time | timestamp | | 是 | 否 | 更新时间 |
| 4 | create_time | timestamp | | 是 | 否 | 创建时间 |

表 4-17-subject_exam(考试)

|----|--------------|-----------|-----|------|------|---------------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | exam_id | mediumint | | 是 | 是 | 考试id |
| 2 | subject_name | varchar | 255 | 否 | 否 | |
| 3 | name | varchar | 32 | 是 | 否 | 考试名称:[2,32] |
| 4 | duration | int | | 否 | 否 | 答题时长 |
| 5 | score | double | | 否 | 否 | 总分 |
| 6 | status | varchar | 10 | 否 | 否 | 状态:启用、禁用 |
| 7 | create_time | timestamp | | 是 | 否 | 创建时间: |
| 8 | update_time | timestamp | | 是 | 否 | 更新时间: |
| 9 | user_id | int | | 否 | 否 | 出题人 |

表 4-18-subject_exam_question(试题)

|----|------------------|-----------|-----|------|------|------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | exam_question_id | mediumint | | 是 | 是 | 试题ID |
| 2 | subject_name | varchar | 255 | 否 | 否 | 科目名称 |
| 3 | type | varchar | 20 | 否 | 否 | 类型 |
| 4 | title | varchar | 255 | 否 | 否 | 题目 |
| 5 | question_item | varchar | 500 | 否 | 否 | 选项 |
| 6 | answer | varchar | 500 | 否 | 否 | 参考答案 |
| 7 | score | double | | 否 | 否 | 总分 |
| 8 | question_order | int | | 否 | 否 | 排序 |
| 9 | exam_id | mediumint | | 是 | 是 | 所属试卷 |
| 10 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 11 | update_time | timestamp | | 是 | 否 | 更新时间 |

表 4-19-subject_user_answer(用户答题)

|----|------------------|-----------|-------|------|------|--------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | user_answer_id | mediumint | | 是 | 是 | 用户答题ID |
| 2 | user_id | mediumint | | 是 | 否 | 用户ID |
| 3 | exam_id | mediumint | | 是 | 否 | 考试id |
| 4 | score | double | | 否 | 否 | 分数 |
| 5 | answers | text | 65535 | 否 | 否 | 答案 |
| 6 | score_detail | text | 65535 | 否 | 否 | 评分详情 |
| 7 | objective_score | double | | 否 | 否 | 客观题得分 |
| 8 | subjective_score | double | | 否 | 否 | 主观题得分 |
| 9 | score_state | tinyint | | 否 | 否 | 评分状态 |
| 10 | nickname | varchar | 255 | 否 | 否 | 提交人 |
| 11 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 12 | update_time | timestamp | | 是 | 否 | 更新时间 |
| 13 | comment_desc | varchar | 255 | 否 | 否 | 评语 |

表 4-20-upload(文件上传)

|----|-----------|---------|-----|------|------|------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | upload_id | int | | 是 | 是 | 上传ID |
| 2 | name | varchar | 64 | 否 | 否 | 文件名 |
| 3 | path | varchar | 255 | 否 | 否 | 访问路径 |
| 4 | file | varchar | 255 | 否 | 否 | 文件路径 |
| 5 | display | varchar | 255 | 否 | 否 | 显示顺序 |
| 6 | father_id | int | | 否 | 否 | 父级ID |
| 7 | dir | varchar | 255 | 否 | 否 | 文件夹 |
| 8 | type | varchar | 32 | 否 | 否 | 文件类型 |

表 4-21-user(用户账户)

|----|-------------|-----------|-----|------|------|-----------------------------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | user_id | int | | 是 | 是 | 用户ID |
| 2 | state | smallint | | 是 | 否 | 账户状态:(1可用|2异常|3已冻结|4已注销) |
| 3 | user_group | varchar | 32 | 否 | 否 | 所在用户组 |
| 4 | login_time | timestamp | | 是 | 否 | 上次登录时间 |
| 5 | phone | varchar | 11 | 否 | 否 | 手机号码 |
| 6 | phone_state | smallint | | 是 | 否 | 手机认证:(0未认证|1审核中|2已认证) |
| 7 | username | varchar | 16 | 是 | 否 | 用户名 |
| 8 | nickname | varchar | 16 | 否 | 否 | 昵称 |
| 9 | password | varchar | 64 | 是 | 否 | 密码 |
| 10 | email | varchar | 64 | 否 | 否 | 邮箱 |
| 11 | email_state | smallint | | 是 | 否 | 邮箱认证:(0未认证|1审核中|2已认证) |
| 12 | avatar | varchar | 255 | 否 | 否 | 头像地址 |
| 13 | open_id | varchar | 255 | 否 | 否 | 针对获取用户信息字段 |
| 14 | create_time | timestamp | | 是 | 否 | 创建时间 |

表 4-22-user_answer(用户答题)

|----|------------------|-----------|-------|------|------|--------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | user_answer_id | mediumint | | 是 | 是 | 用户答题ID |
| 2 | user_id | mediumint | | 是 | 否 | 用户ID |
| 3 | exam_id | mediumint | | 是 | 是 | 考试id |
| 4 | score | double | | 否 | 否 | 分数 |
| 5 | answers | text | 65535 | 否 | 否 | 答案 |
| 6 | score_detail | text | 65535 | 否 | 否 | 评分详情 |
| 7 | objective_score | double | | 否 | 否 | 客观题得分 |
| 8 | subjective_score | double | | 否 | 否 | 主观题得分 |
| 9 | score_state | tinyint | | 否 | 否 | 评分状态 |
| 10 | nickname | varchar | 255 | 否 | 否 | 提交人 |
| 11 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 12 | update_time | timestamp | | 是 | 否 | 更新时间 |
| 13 | comment_desc | varchar | 255 | 否 | 否 | 评语 |

表 4-23-user_answer_wrong(用户错题)

|----|------------------|-----------|-------|------|------|---------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | user_answer_id | mediumint | | 是 | 是 | 用户错题ID |
| 2 | subject_name | varchar | 255 | 否 | 否 | 科目名称 |
| 3 | question_item | varchar | 255 | 否 | 否 | 选项 |
| 4 | title | varchar | 255 | 否 | 否 | 题目 |
| 5 | type | varchar | 255 | 否 | 否 | 题目类型 |
| 6 | exam_id | mediumint | | 是 | 是 | 考试ID |
| 7 | score | double | | 否 | 否 | 分数 |
| 8 | answers | text | 65535 | 否 | 否 | 用户提交的答案 |
| 9 | answer | text | 65535 | 否 | 否 | 参考答案 |
| 10 | score_detail | text | 65535 | 否 | 否 | 评分详情 |
| 11 | objective_score | double | | 否 | 否 | 客观题得分 |
| 12 | subjective_score | double | | 否 | 否 | 主观题得分 |
| 13 | score_state | tinyint | | 否 | 否 | 评分状态 |
| 14 | nickname | varchar | 255 | 否 | 否 | 提交人 |
| 15 | user_id | int | | 是 | 否 | 提交人ID |
| 16 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 17 | update_time | timestamp | | 是 | 否 | 更新时间 |

表 4-24-user_group(用户组)

|----|--------------|-----------|-----|------|------|-------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | group_id | mediumint | | 是 | 是 | 用户组ID |
| 2 | display | smallint | | 是 | 否 | 显示顺序 |
| 3 | name | varchar | 16 | 是 | 否 | 名称 |
| 4 | description | varchar | 255 | 否 | 否 | 描述 |
| 5 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 6 | source_field | varchar | 255 | 否 | 否 | 来源字段 |
| 7 | source_id | int | | 是 | 否 | 来源ID |
| 8 | register | smallint | | 否 | 否 | 注册位置 |
| 9 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 10 | update_time | timestamp | | 是 | 否 | 更新时间 |

第5章系统实现

5.1登录模块的实现

为确保系统安全性,系统操作员只有在登录界面输入正确的用户名、密码、权限以及验证码,单击"登录"按钮后才能够进入本系统的主界面。登录界面如下图所示。

图5-1登录界面

用户登录的关键代码如下:

Login.prototype.api = async function(req) {

var body = req.body;

var obj = await $.services["user"].get_obj({

username: body.username

},{like:false});

if (obj) {

var group = await $.services["user_group"].get_obj({

name:obj.user_group

})

if (group){

if (group.name!=="管理员"){

var sql = "select examine_state from "+ group.source_table +" WHERE user_id = " + obj.user_id;

var userExamine = await $.mysql.run(sql);

if (userExamine && userExamine.length > 0 && userExamine[0].examine_state!=="已通过"){

return {

error: {

code: 70000,

message: "该用户审核未通过"

},

};

}

}

if (obj.state!==1){

return {

error: {

code: 70000,

message: "用户非可用状态,不能登录"

},

};

}

var password = md5(body.password);

if (password === obj.password) {

req.session.user = obj;

var date = Date.parse(new Date());

var token = md5(obj.user_id + "_" + date);

await $.services["access_token"].add({

token,

info: JSON.stringify(obj),

user_id:obj.user_id

});

obj.token = token;

return {

result: {obj}

};

} else {

return {

error: {

code: 70000,

message: "密码错误"

},

};

}

}else {

return {

error: {

code: 70000,

message: "用户组不存在"

},

};

}

} else {

return {

error: {

code: 70000,

message: "账户不存在"

}

};

}

};

5.2 普通用户子系统模块的实现

5.2.1 用户首页模块

首页是系统的主界面,展示系统的核心内容,包括轮播图、最新考试资讯等。用户可以通过首页快速访问各个功能模块,还可以根据关键词搜索相关内容,如图5-2所示。

图5-2 首页界面

前台首页关键代码如下:

Service.prototype.get_list = async function(query, config) {

var sql = $.mysql.toGetSql(query, Object.assign({}, this.config, config || {}));

return await this.run(sql);

};

5.2.2 考试资讯模块

用户点击"考试资讯",将显示考试资讯列表,用户可以查看所有的资讯信息,支持通过关键词搜索或者筛选、排序,点击可查看资讯详情,在详情页面可以进行点赞、收藏、评论等操作。界面如下图所示。

图5-3考试资讯列表界面

5.2.3 在线考试模块

点击系统导航栏上的"在线考试"菜单按钮,用户可以参与在线考试,测试自己的知识水平。用户答题后系统会根据正确与否进行评分,并展示答题结果。在线考试模块支持选择不同的题型(如选择题、填空题、判断题等),并记录用户的答题历史和错题记录,点击"错题记录",可查看自己的错题解析。考试列表如图5-4所示。答题页如图5-5所示。错题记录如图5-6所示。

图5-4考试列表界面

图5-5答题界面

图5-6错题记录界面

5.2.4 练习模式模块

点击系统导航栏上的"练习模式"菜单按钮,用户可以选择科目进行答题练习。练习模式页面如下图5-7所示。

图5-7练习模式界面

5.2.5 网站公告

用户点击首页"网站公告"按钮,可以查看与考试相关的通知、公告等信息。网站公告列表界面如下图5-8所示。

图5-8网站公告列表界面

5.3 管理员子系统模块的实现

5.3.1后台首页界面

管理员登录进入后台后可查看首页,首页展示试卷平均分统计、考试成绩统计等数据。后台首页界面如下图5-9所示。

图5-9后台首页界面图

5.3.2系统用户界面

管理员点击"系统用户",可以管理所有用户的信息,包括新增、修改、删除、搜索等。界面如下图5-10所示。

图5-10系统用户界面图

系统用户的关键代码如下:

Register.prototype.index = async function(req,res) {

var group_list = await $.services["user_group"].get_list({}, Object.assign({}, this.config));

return await res.render(this.config.tpl + "index.html", {

group_list

});

};

Register.prototype.api = async function(req) {

var user = $.services.user;

var body = req.body;

var username = body.username;

var obj = await user.get_obj({

username

});

if (obj) {

return {

error: {

code: 70000,

message: "账户名已存在",

},

};

} else {

var password = md5(body.password);

var nickname = body.nickname;

var user_group = body.user_group;

var email = body.email;

var email_state= body.hasOwnProperty('email_state') ? body.email_state : 0;

var phone = body.phone;

var phone_state= body.hasOwnProperty('phone_state') ? body.phone_state : 0;

var bl_reg = await user.add({

username,

password,

nickname,

user_group,

email,

email_state,

phone,

phone_state

});

if (bl_reg) {

return {

result: "注册成功"

};

} else {

return {

error: {

code: 70000,

message: "注册失败",

},

};

}

}

};

5.3.3练习模式管理界面

管理员点击"资源管理-练习模式"这一菜单,可以管理员可以配置练习模式,提供手动组卷的功能,管理员设置不同类型的题目,设定答题规则和评分模式,供学生进行选择和练习。练习模式界面如下图所示。

图5-11练习模式界面图

5.3.4在线考试管理界面

管理员点击"在线考试"这一菜单,可以管理科目和题库,进行增删改查操作,并支持导入大量题目数据,可以创建、管理试卷,设置试题、试卷的类型,并进行评分和统计,还可以查看用户的错题记录。试题库界面如下图5-12所示。试卷列表界面如下图5-13所示。错题记录界面如下图5-14所示。

图5-12试题库界面图

图5-13试卷列表界面图

图5-14错题记录界面图

5.3.5 轮播图管理界面

管理员点击"系统管理-轮播图管理"菜单,可以对前台展示的轮播图进行设置,界面如下图5-15所示。

图5-15轮播图管理界面图

5.3.6通知公告管理界面

管理员点击"通知公告管理"这个菜单,可以对系统中的通知公告信息进行管理,包括通知公告信息的增删改查等操作。通知公告管理界面如下图所示。

图5-16通知公告管理界面图

新增信息代码如下:

Controller.prototype.add = async function(ctx) {

var result = await this.service.add(ctx.request.body, this.config);

if (this.service.error) {

return {

error: this.service.error,

};

}

return {

result,

};

};

删除信息代码如下:

Controller.prototype.del = async function(ctx) {

if (!Object.keys(ctx.query).length) {

return {

code: 30000,

message: "删除条件不能为空!",

};

}

var result = await this.service.del(ctx.request.query, this.config);

if (this.service.error) {

return {

error: this.service.error,

};

}

return {

result,

};

};

5.3.7 资源管理界面

管理员点击"资源管理"菜单,管理员可以上传、编辑或删除系统的资源,如文章、图片、视频等。这些资源可用于考试资讯模块的展示。管理员还可以对解读进行分类和标签化,方便用户查找和使用,界面如下图所示。

图5-17资源管理界面图

上传文件代码如下:

Controller.prototype.upload = async function(ctx) {

var req = ctx.request;

var query = req.query;

var url = "";

if (req.files && req.files.file) {

var f = req.files.file;

const render = fs.createReadStream(f.path);

var name = f.name;

var dir = f.dir || "";

var file = _dir + dir + name;

try {

if (fs.existsSync(file)) {

var arr = name.split(".");

name = arr[0];

var extension = arr[arr.length - 1];

var num = 10000;

for (var i = 0; i < num; i++) {

var na = name + "_" + (i + 1) + "." + extension;

file = path.join(_dir, na);

if (!fs.existsSync(file)) {

name = na;

break;

}

}

}

const upStream = fs.createWriteStream(file);

render.pipe(upStream);

url = _path + name;

} catch (e) {

console.log("上传失败:", e);

}

return {

result: {

url

}

};

} else {

return {

code: 10000,

message: "上传的文件(file)不能为空!",

};

}

};第6章系统测试

6.1 测试目的

测试的主要目的是确保系统的功能和性能满足预期的需求,同时识别和修复潜在的缺陷。通过系统测试,可以验证各个功能模块的正确性和稳定性,确保系统在不同使用场景下的表现符合设计要求。测试目的包括确认系统功能的完整性、验证数据处理的准确性、评估系统的性能和安全性。测试还可以提高用户满意度,保证用户在使用系统时获得流畅和可靠的体验。通过全面的测试,可以降低后期维护成本,减少系统上线后出现故障的风险,从而保障系统的长期稳定运行。

6.2测试方法

在本系统中,测试方法主要依赖于测试用例的设计与执行。测试用例是根据系统需求文档编写的,覆盖所有功能模块及其边界情况。每个测试用例包含输入数据、预期结果和实际结果的对比,以验证系统的功能是否按预期工作。

常见的测试用例包括功能测试用例、边界测试用例和异常测试用例[11]。功能测试用例针对系统的各项功能进行验证;边界测试用例则侧重于输入数据的边界条件,验证系统在极端情况下是否能够稳定运行;异常测试用例则用于验证系统在处理错误输入或异常情况时的反应。本文选择功能测试用例进行系统测试。

在测试执行过程中,记录每个用例的执行结果,并根据实际结果与预期结果的对比,判断系统是否存在缺陷。通过系统化的测试用例执行,可以有效提高测试的覆盖率和效率,为系统的最终上线提供保障。

6.3测试内容

通过对系统中所含的主要实体对象及其功能操作进行测试用例设计。以下是详细的测试:

表6-1用户注册登录测试表

用户注册登录测试用例:

|---------|-------------|-----------------------------------------------------|-------------|----------|------|
| 用例说明 | 测试目的 | 测试步骤 | 预期结果 | 输出结果 | 通过情况 |
| 用户注册、登录 | 测试用户正确注册、登录 | 1. 在首页界面注册一个新用户,按规定输入合理的注册信息,提交。 2. 用户在登录界面输入账户密码登录 | 用户注册成功,登录成功 | 结果输出符合预期 | 通过 |

表6-2在线考试测试表

在线考试用例:

|------|------------|--------------------------------------------------------------|-----------------------|----------|------|
| 用例说明 | 测试目的 | 测试步骤 | 预期结果 | 输出结果 | 通过情况 |
| 在线考试 | 测试用户在线考试功能 | 1. 在首页点击在线考试,进入试卷列表页; 2. 选择科目,点击"答题"进行答题页面,输入或选择选项,全部答完后点击提交 | 用户考试完成,系统自动评分,并生成错题记录 | 结果输出符合预期 | 通过 |

表6-3考试资讯评论测试表

考试资讯评论测试用例:

|--------|--------------|------------------------------------|----------|----------|------|
| 用例说明 | 测试目的 | 测试步骤 | 预期结果 | 输出结果 | 通过情况 |
| 考试资讯评论 | 测试用户考试资讯评论功能 | 1、在首页点击考试资讯并看详情; 2、点击评论,输入相关信息点击提交 | 生成新的评论信息 | 结果输出符合预期 | 通过 |

表6-4考试资讯添加测试表

管理员考试资讯添加测试用例:

|----------|---------------|----------------------------------|----------|----------|------|
| 用例说明 | 测试目的 | 测试步骤 | 预期结果 | 输出结果 | 通过情况 |
| 考试资讯添加测试 | 测试管理员添加考试资讯功能 | 1. 管理员点击考试资讯、点击添加; 2. 输入相关信息点击提交 | 考试资讯添加成功 | 结果输出符合预期 | 通过 |

表6-5通知公告删除测试表

通知公告删除测试用例:

|----------|------------|--------------------------------------|----------------------|----------|------|
| 用例说明 | 测试目的 | 测试步骤 | 预期结果 | 输出结果 | 通过情况 |
| 通知公告删除测试 | 测试通知公告删除功能 | 1. 管理员点击通知公告管理; 2. 选择一个通知公告点击删除并确认删除 | 通知公告删除成功,前端不在展示该通知公告 | 结果输出符合预期 | 通过 |

6.4测试结果

在本次测试的过程主要针对所有功能下的添加操作,修改操作和删除操作,并以真实数据一一进行相关功能项目的输入,最终能够保证每个项目涉及的功能都是能够正常运行,因此能够保证本次设计的,已实现的功能能够正常运行并且相关数据库的信息也同样保证正确。

第7章总结与展望

7.1 总结

随着教育信息化的发展,传统的学习和考试准备方式逐渐暴露出诸多问题,尤其是在学习资源的获取、错题的管理和考试准备的个性化方面。为了提升学习效率和考试准备质量,设计并实现了一个习题库小程序系统。该系统针对学生学习、错题复习以及教学管理中的痛点,提供了一个高效的解决方案。

习题库小程序通过构建移动端的小程序平台,提供了便捷的学习和考试功能。结合Node.js和Express框架,后端具备了高并发的处理能力,确保了数据的快速响应和系统的稳定性。MySQL数据库则有效地管理了大量的学生信息、习题内容和考试记录,确保了数据的安全性和高效查询。在系统实现过程中,完成了习题库的管理、在线考试的功能设计、错题记录和复习的功能整合,极大地方便了学生的学习和复习过程。

7.2 展望

尽管系统已经通过测试并实现了各个功能模块的正常运行,但在实际使用过程中,仍存在一些需要改进的地方。系统当前在个性化学习推荐、错题复习的智能化以及系统性能优化方面,仍有提升空间。在个性化学习推荐方面,当前系统仅提供了基本的习题选择,尚未根据学生的学习进度和错题记录自动推荐合适的学习内容。在错题复习功能上,虽然能够记录错题,但缺乏更加智能的复习安排,未能实现对复习时间和错题难度的动态调整。随着用户数量的增加,系统的性能也需要进一步优化,以确保能够稳定处理大量用户并发访问。

未来,系统可以在智能化推荐、错题复习的个性化安排、数据分析等方面进行进一步的改进,以提供更加丰富和智能的学习体验。同时,通过性能优化和扩展系统功能,能够适应更大规模的用户使用,为教学管理者和学生提供更加高效、便捷的服务。

参考文献

  1. 凌杰.Node.js后端全程实战[M].人民邮电出版社:202305.371.
  2. 唐小燕,刘洪武.Node.js应用开发[M].人民邮电出版社:202111.308.
  3. 李艳杰.MySQL数据库下存储过程的综合运用研究[J].现代信息科技,2023,7(11):80-82+88.
  4. 董宁,袁晓曦.JavaScript程序设计[M].人民邮电出版社:202308.265.
  5. 何勇,王瑶.HTML5+CSS3+JavaScript 网页设计基础与实战[M].人民邮电出版社:202211.262.
  6. 孙文江,陈义辉.JavaScript交互式网页设计[M].人民邮电出版社:202309.419.
  7. 刘江涛,王亮亮,吴庆茹,等.基于B/S模式的铁路勘测设计案例信息化管理系统设计与实现[J].铁路计算机应用,2021,30(03):32-35.
  8. 张丹丹,李弘.基于B/S架构的办公管理系统设计与开发[J].铁路通信信号工程技术,2024,21(09):44-48+106.
  9. 周晓玉,崔文超.基于Web技术的数据库应用系统设计[J].信息与电脑(理论版),2023,35(09):189-191.
  10. 马艳艳,吴晓光.计算机软件与数据库的设计策略分析[J].电子技术,2024,53(05):104-105.
  11. 李俊萌.计算机软件测试技术与开发应用策略分析[J].信息记录材料,2023,24(03):50-52.
  12. 兰琳琳.基于MySQL-Django-Vue的在线考试系统[J].电脑知识与技术,2024,20(33):51-54.
  13. 吴晓云,袁昊东.基于Spring Boot的在线考试管理系统[J].微型电脑应用,2024,40(11):199-204.
  14. 韩瑞,王利强.基于Java的在线考试系统设计与实现[J].工业控制计算机,2024,37(09):146-147.
  15. 金江.基于Java Web的SSM在线考试系统设计[J].现代信息科技,2024,8(17):105-110.
  16. Cem A T ,Kinshuk .Students' acceptance of and preferences regarding online exams: a systematic literature review[J].Educational technology research and development,2023,72(2):1111-1151.
  17. Computing MA C W .Retracted: Design and Implementation of Online Japanese Examination System Based on Genetic Algorithm[J].Wireless Communications and Mobile Computing,2023,2023(1):9867804-9867804.
  18. Islam M M ,Nabil K S ,Murad A S , et al.The Development and Deployment of an Online Exam System: A Web Application[J].Asian Journal of Research in Computer Science,2023,16(2):1-11.
  19. 蔡伯峰.基于B/S的在线考试系统设计[J].现代信息科技,2024,8(13):121-124+128.
  20. 马惠强,曾宋贤,陈云生.基于Java的在线考试系统设计与开发[J].现代信息科技,2024,8(12):56-60+65.

致谢

在此论文完成之际,感谢我的指导老师。在指导老师的网页设计课上,当时我学到了很多东西,这对于我实习过程中也打了一定的基础,而且指导老师对于我的设计也提出许多建议,并予以悉心的指导,对于一些细小的问题都耐心的指导我去完善,授予我写论文的交流消息,时常的鼓励我,另外感谢教导我完善此项目的前端同学,对于这个项目,我是边学习边实现完成的,有许多东西开始并不是很明白,但前端开发的同学非常耐心的引导我去将这个项目完成,在系统的后端开发中,所用到的后台开发技术也时常会给我讲解,助于我更好的将论文完成,在此对帮助到我的同学和一直予以教导的指导老师致以衷心的感谢,祝事业有成。

点赞+收藏+关注 → 私信领取本源代码、数据库