学生信息管理系统的设计开发
1 绪论
内容简介及意义
《移动开发综合课程设计》计算机科学与技术专业的一门实践课程,该课程设计是《移动应用开发技术》、《移动开发课程设计》、《移动应用高级开发技术》的后续课程,是一门实践性较强的课程。通过本实践课程的学习和练习,使学生掌握使用 Kotlin 语言和 Jetpack 框架等最新技术,开发一个实用的移动 App。通过对所学的理论知识、操作技能的综合应用,将一个个独立的知识技能进行融合、提升,形成一个完整的知识技能体系,提高分析问题、解决问题的能力,从而能熟练运用所学的编程技术解决现实中遇到的实际问题。
开发工具及技术介绍
- 开发工具:IntelliJ IDEA
- 开发语言:Kotlin
- 操作环境:Win7/win10
- 开发框架:Android/Jetpack
- 技术介绍:该课程设计主要使用了 kotlin 语言编程技术,Anko 库中的 toast、intent、alert 处理功能以及 SQLite 数据库的连接和交互技术,用于对移动端应用进行一些相应的开发操作。
2 总体设计
系统总体架构
系统功能要求:
- 用户、角色管理功能:用户分为学生、教师、教务管理人员三种角色,每种角色拥有不同的权限,不同用户登录后根据其角色显示不同的功能界面。学生只能查询本人的档案信息和成绩表;教师可以设置学生相应课目的成绩;教务管理人员,管理和维护各类信息:包括录入学生基本信息、维护系、专业、课程信息,负责每学期分配课程教学任务给指定教师,查询修改学生基本信息、分数,分配学生课程等功能。
- 学生基本信息管理:对学生基本信息的增删改查,一旦学生信息确认提交,后续修改操作需要有变动记录等。(教务)
- 系、班级信息维护(教务)
- 课程信息维护,分配学生选课,分配老师授课。(教务)
- 学生成绩录入(教师):成绩提交前可以修改,提交后只能申请提交教务管理人员修改
- 学生信息查询:学生只能查看自己的基本信息和个学期成绩表;教师可以查询自己所教授课程的成绩;教务可以查询所有学生的基本信息和各学期成绩表
该系统为实现相关的操作,共在数据库中创建了管理员表(表 2-1)、学生表(表 2-2)、教师表(表 2-3)、成绩表(表 2-4)、班级表(表 2-5)、部门表(表 2-6)、专业表(表 2-7)和学期表(表 2-8)八个表。
该系统共由登录模块、教师功能模块、学生功能模块、管理员功能模块和系统设置模块等模块构成,其总体架构图如图 2-1 所示。
表 2-1 管理员表 admin
字段名 | 意义 | 数据类型 | 数据长度 | 是否主键 | 能否为空 |
---|---|---|---|---|---|
id | 编号 | INTEGER | 5 | 是 | 否 |
username | 工号 | TEXT | 11 | 否 | 否 |
password | 密码 | TEXT | 16 | 否 | 否 |
name1 | 姓名 | TEXT | 10 | 否 | 否 |
表 2-2 学生表 student
字段名 | 意义 | 数据类型 | 数据长度 | 默认值 | 是否主键 | 能否为空 |
---|---|---|---|---|---|---|
id | 编号 | INTEGER | 5 | 无 | 是 | 否 |
username | 工号 | TEXT | 11 | 无 | 否 | 否 |
password | 密码 | TEXT | 16 | 000000 | 否 | 否 |
name1 | 姓名 | TEXT | 8 | 无 | 否 | 否 |
sex | 性别 | TEXT | 4 | 男 | 否 | 否 |
depart | 系别 | TEXT | 10 | 无 | 否 | 否 |
speciality | 专业 | TEXT | 10 | 无 | 否 | 否 |
class1 | 班级 | TEXT | 10 | 无 | 否 | 否 |
表 2-3 教师表 teacher
字段名 | 意义 | 数据类型 | 数据长度 | 默认值 | 是否主键 | 能否为空 |
---|---|---|---|---|---|---|
id | 编号 | INTEGER | 5 | 无 | 是 | 否 |
username | 工号 | TEXT | 11 | 无 | 否 | 否 |
password | 密码 | TEXT | 12 | 000000 | 否 | 否 |
name1 | 姓名 | TEXT | 8 | 无 | 否 | 否 |
class1 | 授课班级 | TEXT | 10 | 无 | 否 | 否 |
depart | 部门 | TEXT | 10 | 无 | 否 | 否 |
course | 授课名称 | TEXT | 10 | 无 | 否 | 否 |
表 2-4 成绩表 performance
字段名 | 意义 | 数据类型 | 数据长度 | 默认值 | 是否主键 | 能否为空 |
---|---|---|---|---|---|---|
teacher | 教师工号 | TEXT | 11 | 无 | 否 | 否 |
course | 课程名 | TEXT | 10 | 无 | 是 | 否 |
class1 | 班级 | TEXT | 10 | 无 | 否 | 否 |
name1 | 学生姓名 | TEXT | 8 | 无 | 否 | 否 |
username | 学生学号 | TEXT | 16 | 无 | 否 | 否 |
number | 课程得分 | INTEGER | 2 | 0 | 否 | 否 |
semester | 学期 | TEXT | 10 | 无 | 否 | 否 |
表 2-5 班级表 classlist
字段名 | 意义 | 数据类型 | 数据长度 | 默认值 | 是否主键 | 能否为空 |
---|---|---|---|---|---|---|
id | 编号 | INTEGER | 5 | 无 | 是 | 否 |
name1 | 班级名 | TEXT | 6 | 无 | 否 | 否 |
speciality | 所属专业 | TEXT | 6 | 无 | 否 | 否 |
表 2-6 系别/部门表 depart
字段名 | 意义 | 数据类型 | 数据长度 | 默认值 | 是否主键 | 能否为空 |
---|---|---|---|---|---|---|
id | 编号 | INTEGER | 5 | 无 | 是 | 否 |
name1 | 系别名 | TEXT | 10 | 无 | 否 | 否 |
type | 类型 | INTEGER | 6 | 无 | 否 | 否 |
表 2-7 专业表 speciality
字段名 | 意义 | 数据类型 | 数据长度 | 默认值 | 是否主键 | 能否为空 |
---|---|---|---|---|---|---|
id | 编号 | INTEGER | 5 | 无 | 是 | 否 |
name1 | 专业名 | TEXT | 10 | 无 | 否 | 否 |
depart | 所属系别 | TEXT | 10 | 无 | 否 | 否 |
表 2-8 学期表 semester
字段名 | 意义 | 数据类型 | 数据长度 | 默认值 | 是否主键 | 能否为空 |
---|---|---|---|---|---|---|
id | 编号 | INTEGER | 5 | 无 | 是 | 否 |
name1 | 学期名 | TEXT | 10 | 无 | 否 | 否 |
图 2-1 系统总体架构图
登录模块总体设计
登录模块主要用于识别用户的身份,并按照不同的用户身份进行不同的判断,成功则按照不同的身份类型进入主界面,失败按照识别原因进行相应的提示。模块架构图如图 2-2 所示。
图 2-2 登录模块架构图
主界面模块总体设计
主界面由一个 Activity、多个 Fragment 组成以及多个不同控件组成。菜单选项用于实现用户方便快捷的选择和使用系统的功能,不同身份的用户进入该界面会显示相应的 Fragment 界面,点击不同 Fragment 内的子功能选项,进入相应的功能操作界面。模块架构图如图 2-3 所示。
图 2-3 主界面模块架构图
3 详细设计
登录模块设计
登录模块主要用于识别用户的身份。该界面允许普通员工和管理员两种身份进行登录,用户在输入工号和对应的密码后,按照自己的身份类型选择代表相应登陆身份的按钮,点击按钮之后系统会按照不同的身份在不同的数据库中进行用户信息检索,当检索到该账号并且对应的密码相匹配时,则用户登录成功,并将其身份信息传送至主菜单界面,以实现不同身份对主菜单的不同处理。
主界面模块设计
登陆成功后,系统会根据不同的用户身份进入对应的 Activity 并显示对应的 Fragment 页面不同的 Fragment 内可以选择不同的子功能按钮选项,点击则进入具体的功能界面以实现具体功能操作。
学生用户界面模块设计
用户以学生身份进入主菜单后跳转至学生用户界面 StudentActivity。该界面由两个 Fragment 组成,其中 StudentManagerFragment 用于学生成绩查询,StudentSettingFragment 用于系统设置,系统设置页共包括个人信息修改、用户密码修改以及退出登录三个功能,点击相应功能跳转到相应 Activity 并实现相应功能。
教师用户界面模块设计
用户以教师身份进入主菜单后跳转至教师用户界面 TeacherActivity。该界面由三个 Fragment 组成,其中 TeacherManagerFragment 用于实现教师所教授科目成绩的录入,TeacherSearchPerformanceFragment 用于实现教师对自己已完成录入的科目的成绩的查询(无权限更改已录入成绩),TeacherSettingFragment 则用于系统设置置,系统设置页共包括个人信息修改、用户密码修改以及退出登录三个功能,点击相应功能跳转到相应 Activity 并实现相应功能。
教务人员界面模块设计
用户以教务人员身份进入主菜单后跳转至管理员用户界面 AdminActivity。该界面由三个 Fragment 组成,其中 AdminManagerFragment 用于教务人员对学生、教师、学生成绩以及课程的增删改查操作的功能选项入口,点击相应选项则跳转至相应的具体功能 Activity 界面,DepartClassFragment 用于教务人员对部门、系别和班级的管理功能选项入口,点击相应选项则跳转至相应的具体功能 Activity 界面,AdminSettingFragment 则用于系统设置置,系统设置页共包括个人信息修改、用户密码修改以及退出登录三个功能,点击相应功能跳转到相应 Activity 并实现相应功能。
4 应用操作演示
登录功能模块演示
打开应用即为登陆页面,输入账号密码,选择相应登陆身份后,点击登录按钮,系统会对输入信息及相应身份进行相应判断,登陆成功则跳转至应用主界面,失败则弹出失败信息。
图 4-1 用户登陆界面
学生功能模块演示
学生用户登陆成功后,进入学生用户主界面左右滑动可以在我的成绩和设置页面之间进行切换。
在我的成绩页面,学生可以查询自己各个学期各科已录入的成绩。在设置界面,学生可以进行个人信息修改、账号密码修改以及退出登陆操作。
图 4-2 我的成绩界面显示图
4-3 设置界面显示
在设置界面点击修改个人信息选项和修改个人密码选项跳转至相应功能,按提示输入修改信息或密码后弹出提示,点击确定完成修改,其中,密码修改完成后会执行退出登陆操作,输入新密码方可重新进入系统。
图 4-5 密码修改界面
图 4-4 个人信息修改界面
在设置界面点击退出账号登录功能选项则完成账号退出登录功能,跳转回登陆界面。
教师功能模块演示
教师用户登陆成功后,进入教师用户主界面左右滑动可以在成绩录入、成绩查询和设置页面之间进行切换。
在成绩录入界面,教师可以录入所教授课程的班级学生成绩信息。在成绩查询界面,教师可以查询所教授课程中已录入的班级学生成绩信息。在设置界面,教师可以进行个人信息修改、账号密码修改以及退出登陆操作。
图 4-7 成绩查询界面
图 4-8 设置界面
图 4-6 成绩录入界面
在设置界面点击修改个人信息选项和修改个人密码选项跳转至相应功能,按提示输入修改信息或密码后弹出提示,点击确定完成修改,其中,密码修改完成后会执行退出登陆操作,输入新密码方可重新进入系统。
图 4-9 个人信息修改界面
图 4-10 密码修改界面
在设置界面点击退出账号登录功能选项则完成账号退出登录功能,跳转回登陆界面。
教务人员功能模块演示
教务人员用户登陆成功后,进入教务人员用户主界面左右滑动可以在信息管理、系别管理和设置页面之间进行切换。
在信息管理界面中,共有添加学生信息、添加教师信息、学生信息查询、教师信息查询、学生成绩查询和课程信息查询六个子功能的入口选项。在系别管理界面中,共有添加系别/部门信息和添加班级信息两个子功能的入口选项,点击则进入相应的功能实现界面。在设置界面,教师可以进行个人信息修改、账号密码修改以及退出登陆操作。
图 4-12 系别管理界面
图 4-13 设置界面
图 4-11 信息管理界面
在信息管理界面中点击添加学生信息选项进入学生信息添加界面,输入相应的信息之后点击确定添加会将输入的信息录入到数据库中,并且将该学生密码默认为 000000。
在信息管理界面中点击添加教师信息选项进入教师信息添加界面,输入相应的信息之后点击确定添加会将输入的信息录入到数据库中,并且将该教师的登录密码默认为 000000。
图 4-15 教师信息添加界面
图 4-14 学生信息添加界面
在信息添加界面点击学生信息查询选项进入学生信息查询界面,选择查询条件后输入查询关键字,点击搜索按钮即可查询数据库中所有符合条件的学生信息并显示在界面中。点击界面下方的密码重置按钮可将当前显示的学生密码重置为默认密码(000000),点击信息修改按钮则会跳转到学生信息修改页面(同 4.2 中学生信息修改界面演示介绍),点击信息删除按钮可将当前显示的学生信息从数据库中删除。
在信息添加界面点击教师信息查询选项进入学生信息查询界面,选择查询条件后输入查询关键字,点击搜索按钮即可查询数据库中所有符合条件的教师信息并显示在界面中。点击界面下方的密码重置按钮可将当前显示的教师密码重置为默认密码(000000),点击信息修改按钮则会跳转到教师信息修改页面(同 4.3 中教师信息修改界面演示介绍),点击信息删除按钮可将当前显示的教师信息从数据库中删除。
图 4-16 学生信息查询界面
图 4-17 教师信息查询界面
在信息添加界面点击学生成绩查询选项进入学生成绩查询界面,选择学期后输入要查询的学生的学号点击搜索按钮则会查询到对应条件的学生成绩信息并显示在界面中。若该学生的成绩信息有误,点击界面下方的成绩修改按钮会弹出成绩修改提示,点击确认后弹出学生成绩修改输入框,输入正确的分数后点击确定则可完成成绩修改。
在信息添加界面点击课程信息查询选项进入课程信息查询界面,选择查询类型并输入对应的查询条件后点击查询按钮会在数据库中查询符合条件的课程信息并显示在界面中。
图 4-18 学生成绩查询界面
图 4-19 课程信息查询界面
在系别管理界面点击系别管理选项进入专业信息添加界面,选择系别名称后输入要添加的专业名,确认无误后点击确认添加按钮,系统会将输入的信息例如到数据库中完成班级信息的添加。
在系别管理界面点击班级管理选项进入班级信息添加界面,选择系别名称和专业后输入要添加的班级名,确认无误后点击确认添加按钮,系统会将输入的信息例如到数据库中完成班级信息的添加。
图 4-20 班级信息添加界面
图 4-21 专业信息添加界面
在设置界面点击修改个人信息选项和修改个人密码选项跳转至相应功能,按提示输入修改信息或密码后弹出提示,点击确定完成修改,其中,密码修改完成后会执行退出登陆操作,输入新密码方可重新进入系统。
图 4-22 个人信息修改界面
图 4-23 密码修改界面
在设置界面点击退出账号登录功能选项则完成账号退出登录功能,跳转回登陆界面。
5 系统测试
测试内容:项目编码结束后,运行测试整个系统功能
测试方法:测试任何软件都有两种方法:黑盒测试和白盒测试法。
黑盒测试法(又称功能测试法)是把程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程,是在程序接口进行的测试,它只检查程序功能是否按照规格说明书的规定正常使用。
白盒测试法(又称结构测试法)是把程序看成装在一个透明的白盒子里,也就是完全了解程序的结构和处理过程,这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按照预定要求正确工作。
测试结果:
- 数据库连接、创建和操进行相应操作时较为繁琐复杂,一些 Activity 之间的跳转,alert 弹出,toast 弹出也较为复杂。
- 教师在录入成绩时,学生成绩的存储,学生信息的显示,以及在向下一位学生录入跳转时会出现一些 bug 导致系统崩溃。
- 管理员在对学生成绩进行更改时,每次更改都要跳转页面,十分不人性化。
- 在用户主界面向具体功能进行跳转时,一些用户的信息传递会出现一些 bug 导致信息传递失败或应用闪退。
解决方法:
- 在进行一些跳转、弹出和显示提示时使用 Anko 库中的功能,使得一些繁琐的操作变得较为简便。
- 重新修改了底层代码,对于信息的录入,学生的改变使用了更为严格的约束,成功解决问题。
- 为了避免繁琐的跳转,我在管理员需要修改学生成绩时,弹出成绩修改框(alert 功能中的 customView),使得成绩修改时不用在进行界面的跳转便可以完成修改操作。
- 在数据传提示使用 Anko 库的 intent 操作,在向 Fragment 传递数据时使用 Fragment.also{...(要传递的信息)}操作,问题解决。
参考文献
- 欧阳燊 Kotlin 从零到精通 Android 开发 清华大学出版社, 2018.
- github.com
- CSDN 官网
- 博客园网 https://www.cnblogs.com/
- W3School网 https://www.w3school.com.cn/