《中小学生数学卷子自动生成程序》个人项目分析

1.概述

本文为张楠同学编写的软件工程个人项目《中小学数学卷子自动生成程序》的解析。实际项目为.NET Framework 4.8框架下的控制台应用程序,使用编程语言为C#, IDE为Visual Studio,数据库为SQLite,保存为数据库为本地.db文件。

2.需求分析

首先进行需求分析,总结用户功能需求

l  命令行界面

l  登录界面输入用户和密码并根据已有账户验证正确性

l  工作界面输入数字生成对应数量对应难度的题目,保存到本地目录的文件中;输入切换命令可切换生成题目难度;输入退出命令可退出到登录界面。

用户非功能需求

l  命令行界面对于登录界面和工作界面的操作提示和操作二次确认

l  输入用户名和密码用空格隔开,预设九个账户

l  生成题目时默认难度为账户等级;每题1到5个操作数,取值范围为1到100,数字类型可能为浮点数;生成题目合法数量为10到30,且同一用户题目不可重复;题目保存到本地的账号文件夹目录,文件命名格式为“年-月-日-时-分-秒.txt“,需要有题号,每题之间空一行

l  切换难度时只能输入“切换为XX“,XX为小学初中高中三者之一

l  工作界面输入-1可退出到登录界面

3.项目架构

整个项目主要分为五层:

l  Common层:包含项目中用到的各种数据类和枚举类,只有字段无成员函数

l  DataAccess层 :包含项目中与数据库连接并对其操作的类,可以对数据库进行Common中类的查询、添加、删除、更新

l  Util层:包含项目中用到的一些工具函数,将他们按功能或操作对象分类放到不同的静态类中,以便直接调用

l  UI层:最表面的一层,负责各界面的生成和切换,并分发操作信号到各处理类中

l  Handle层:也即业务逻辑层,为UI层提供模块接口,实现输入解析和处理逻辑,并调用更底层的模块实现功能

试题生成逻辑按顺序如下:

l  随机生成操作数数量

l  随机生成每个操作数和每个二目操作符

l  按规则生成合法的逆波兰表达式,这个过程可以实现括号的随机

l  将逆波兰表达式转为中缀表达式,通过运算符优先级比较以添加括号。同时根据括号位置添加如开方,平方,正弦,余弦,正切等单目操作符。同时在这一步可以进行试题答案运算

l  得到的中缀表达式即为所求

 4.模块解析

a)      Common层

主要包含数据类和枚举类。

数据类如账户,问题,利用SqlSugar的标签将其标记为数据库表,并设置各属性在表中的性质。而对于一些非表类如运算单元也放在这个模块内;

枚举类如进程状态,账户等级,单元优先级,它们作为数据类的成员或UI的成员,对不同的数据或状态实现区分和标记。

                    

b)      DataAccess层

主要包含数据库处理和试卷生成。

数据库处理只有对数据库的初始化,操作包括数据库文件检测以及表初始化

试卷生成则是一个比较重要的类,包括题卷生成逻辑和单题目生成逻辑,后者通过调用Utils中的一些工具类的静态成员函数实现。

 

c)      UI层

主要包含用户界面生成和信号分发。在最外层main函数中调用UI的一个实例的start函数以开始程序,通过一个进程状态标记来控制进程界面。在Login函数和Work函数中,将输入信息分发给Handle进行解析和实际功能实现。

 

d)      Handle层

主要包含输入指令解析,指令信号分发和调用函数处理。

在LoginHandle中直接进行数据库查询来测试账号正确性,而在WorkHandle中则是调用DataAccess层的PaperGenerater来进行数据库查询。

 

e)      Utils层

主要包含一些静态工具类,包括IO工具,字符串输出工具,控制台输出工具和试卷生成器工具

 

 5.运行测试

初始化界面

输入用户名:密码可保密,但是开始输入密码后无法修改用户名

 

输入数字:生成题目,存入对应路径

 输入切换为XX切换账号,并生成对应难度题目

返回登录:输入-1并回车,这时候会清屏并二次确认

 

对于正常情况外的处理:

 

 6.优劣分析

优点:

l  采用分层风格和面向对象风格的异构组合

l  实现了试题生成逻辑中,操作数浮点数的适配,对整数该逻辑同样适用。

缺点:

l  虽然采用了分层风格,但是功能的层次放置不够准确,抽象性不够强,例如LoginHandle中的数据库操作部分应该抽出放入到DataAccess类中

l  各个类之间耦合程度太低,大部分是依赖关系,没有有效使用泛化、聚合、组合等方式提高耦合度。

 

 

posted on 2020-09-30 20:51  Dawson君  阅读(324)  评论(0)    收藏  举报