课表软件构建草稿
课表助手构建大概草稿,其中制作课表的关键在意怎么将每一个课程放在直角坐标系中,并怎么判断放置课程重叠以及处理措施,以及怎么更新数据和储存课表信息。
欢迎界面运作流程
-
弹出对话框,说明本 APP 隐私政策、将会使用用户哪些权限和数据、说明本 APP 相关责任等
-
隐私政策等,采用链接跳转方式展示;
-
向用户说明 APP 需要哪些权限及用途,征求用户同意
-
初始化时间表,组装默认时间作息表,并将其写入文件;创建储存课表数据相应的文件夹;创建数据库,并建立相关数据储存模型,向其插入默认信息(如默认临时课表、武鸣作息时间)
-
前面步骤顺利完成后,跳转主界面
主界面运作流程
- 检查数据库是否为空?若空,则尝试插入数据;尝试失败者,向服务器发送错误日志信息,并退出 APP;
- 根据数据库索引信息检索相应文件,若存在,则予以读取信息,并将其从 JSON 转化为Object模型,通过组装方法转化为包含 $ (x,y)$ 坐标系数据;更新侧边栏信息
- 将生成好的坐标系数据载入课表视图
额外工具:
- 截图工具
遍历当前课表视图,获取其具体宽度、长度,调用画笔将其绘制于画布之上,生成格式为 Bitmap 的图片,保存于相册中;
- 底部菜单工具
显示目前存在的课表文件名称,点击任意课表名切换当前课表
- 课表加载工具
获取课表文件,检查其是否存在;若存在,尝试解析文件数据,若失败则终止,反之将解析数据传递给坐标生成工具,并更新画面。
- 坐标生成工具
依据时间节数生成一个 $(x=0,y=0)$ 的空坐标数据列表,当该方法被调用时,则将空坐标数据表和传入数据进行比较,移除相应的空坐标、替换为传入数据,最终生成一张含有信息的坐标数据表。
课表制作界面运作流程
- 初始化
检查课表时间文件是否存在,如果存在则读取文件头信息,获取相关数据
文件头模板
时间表名称、总节数、早上开始时间、早上节数、下午开始时间、下午节数、晚上开始时间(如果有?)、晚上节数、时间具体数据
1 | JSON_TEMPLATE{ |
- 课表初始化
检查课表文件大小是否为零,若零则放弃加载;不为零则尝试解析数据,如果解析成功,则载入列表,解析异常则不载入视图;
- 添加课程卡片
弹窗自动纠错 上课时间
、共计节数
,当按下「确定」时,先检查某时间段已添加添加课程总节数小于或等于这时间段的总节数,而后 是否重复算法
检查是否和其他已添加课程卡片有时间重叠,若返回 True,则 提醒用户修改,反之通过
- 保存课表
生成课表文件,课表文件格式
包含课程卡片模型,若文件保存成功,则向数据库课程索引表、课表和时间映射表添加记录
1 | name_sche //课程卡片模型模板 |
1 | //课表时间映射表 |
是否重复算法
原理:利用集合的交集来判断同一时间段内所有课程卡片是否重叠。
设 某课程卡片的起始值为$\ x_1$ 、节数为$\ num_1$,另一课程卡片的起始值为$\ x_2$ 、节数为$\ num_2$ ,当前时间段剩余节数为$\ Len\ 或\ Len_总-Len_{(x_1+x_1+…+x_i)}$
则,$end_1 = x_1+num_1$,$end_2 = x_2+num_2\ ,$ 有以下可能排列情况:
$1.\ end_1>x_2 \ 且\ end_2>x_1$
$2.\ end_1 \le x_2 \ 且\ num_1+num_2\le Len $
$\ 且\ end_2>x_1$
$3.\ end_1>x_2\ 且\ num_1+num_2 \le Len \ $
$且\ end_2\le x_1$
$4.\ (end_1>x_2\ 且\ end_2>x_1)\ $
$且\ num_1=num_2$
其中第2、3为不重叠的情形。当传入数据有上述重叠情形时则返回True,反之则返回False。