NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)
文章图片
「关注」并「星标」我们,
每天接收关于亚马逊云科技的最新资讯!
作为课余生活丰富多彩的大学生,你也许参加过很多兴趣小组。如果你读到了本文,那么很大概率猜测,你八成也会参加各种计算机兴趣小组。
那么不妨试着和组员们一起,给大家开发个在线订课选课系统吧!不仅可以借此机会锻炼一下软件开发技能,学习新技术,在实践中掌握新技能,还能让更多老师同学从中受益,岂不美哉?
文章图片
就算你已经进入职场,类似的技术也可以换个角度应用到工作中很多与预订有关的场景中。快来一起来看看吧!
01.定义数据表
数据表是低代码或零代码的根基,本质上就是通过对数据表的操作来定制化展现数据。首先讲解下本项目中会使用到的数据表。
本例一共涉及七张表,分别如下:
- ClassTab 表,用来展现本周的全部课程安排
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/8e31d5f04f32455cb8e6677d0ff8960f.jpg)
文章图片
- MyClass表,用来记录学生选择的将要参加的本周课程。表中的“value”列的数据提取自WeekDays表中的“value”列,用作工作日排序,后面会用到。
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/5ed877f9afbd4f64918dc5119a14af47.jpg)
文章图片
- ClassList表,记录着本周所有的课程目录
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/a91a25ee7aae467686049042529fc23f.jpg)
文章图片
- ClassLocation表,这个表中记录着每个课程对应的上课地点
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/939126b234eb4f0c9925d67c7ab027ef.jpg)
文章图片
- ClassMap表记录着每个课程对应的教师名称
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/b63f1319a76d4f879b2d8539f2d498c7.jpg)
文章图片
- Teachers表是教师目录表,记录着本周课程对应的所有教师的名称
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/5aa71dbca63748018bc8b104f011ad89.jpg)
文章图片
- WeekDays表是本周工作日的记录表,表中的Value列是编号列,用做排序使用
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/6264eead052548c1af50875901d5694b.jpg)
文章图片
上面七张表的对应关系为:
● ClassList表和WeekDays表对应ClassTab表的“工作日”列和“课程时段”列的PickList引用数据源表
● ClassList表和Teachers表是ClassMap表的“Name”和“Teacher”列的PickList引用数据源表
● ClassList表也是ClassLocation表的“Class”列的PickList引用表
可以看出 ClassList 课程表是大部分其他表的引用数据源,其本质上是通过逻辑对应关系,把 ClassList 中的课程展现出来。这里需要重点理解下。
02.分析业务逻辑
接下来我们介绍下本例的业务逻辑,业务逻辑决定着底层数据的展现方式。
- 首页数据展示,数据来自ClassTab表,每个工作日的课程按照行的方式进行展现,不同的课程时段作为列来分割。
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/b501880e1796449ea160365b018dde94.jpg)
文章图片
- 每日课程展示,在首页的每个数据行代表一个工作日的课程,点击后展开每日课程详细,在本页中可以通过点击“详细”按钮查看本日每个课程的详细信息(课程名称、课程时间、对应的老师、上课地点),还可以点击“参加”按钮来决定是否参加自己感兴趣的课。
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/daeed69ddd52416e9fcdce1dacb551f0.jpg)
文章图片
- 我的课程展示,在我的课程页面中列出了所有订阅过的课程,可以看到这些课程对应的工作日、时间及课程名信息。还可以对其进行取消操作。本页数据来自 MyClass 表,并将依照“工作日”和“时间”列进行排序。
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/a7e02767891c40d0b8977b1146ecacc4.jpg)
文章图片
03.开始构建App
在介绍了数据表设计和业务逻辑后,我们开始着手对 APP 进行构建。
- 登录 Honeycode 网站,新建一个Workbook并将其命名为ClassBooking。
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/9c0131c2276747518f813596926a2340.jpg)
文章图片
- 创建第一部分介绍的七张数据表,并设置好引用关系。
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/61535f3569c144cebbf74c418b888c0c.jpg)
文章图片
- 在首页中添加Column List列表对象,数据源选择“Classtab”数据表。选中添加详细页。
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/2fc962ec159c49c792b6c8a7b6dfbed6.jpg)
文章图片
- 列表属性页面添加条件显示,用来使用蓝绿色来间隔显示每行,同时对边缘进行钝化,增加界面美观度。
=MOD(ROW(THISROW()),2)=0
表达式中使用ROW对当前数据行进行标号,然后使用 MOD 来对行号取模判奇偶行并设置对应的颜色。
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/e10c11beea9f48b5a3183080ce8bab30.jpg)
文章图片
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/bf510170b79e43ba9a0cb426a964830b.jpg)
文章图片
- 在自动生成行内容详细页中,每行的后面分别添加两个按钮“详细”和“参加”。
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/911bad80a6fd4d5dbd793cfbe4277c8f.jpg)
文章图片
- 在详细页底部增加一个 Block 和四个 DataCell 用来展示课程详细内容。
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/eba267321c584f5a979230417ec01988.jpg)
文章图片
- 对第5步中的“详细”按钮设置可见性。
=NOT(ISBLANK($[0800 0950 column data]))
通过判断课程时段列的值是否为空,决定是否显示“详细”按钮。
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/4d98b88e08e94e0186985cb8794f83c9.jpg)
文章图片
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/17d3b0a4144f47fcbc1f90e5d427126e.jpg)
文章图片
- 设置“详细”按钮的ACTIONS,把数据从InputRow中取出并且写入到第6步的属性Block中。需要注意的是,DataCell变量teacher和location的值取自ClassMap和ClassLocation表,通过FINDROW函数进行匹配。
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/0fc794aa89c64eda878d6097551592ab.jpg)
文章图片
- 设置“参加”按钮的可见性。
=AND(NOT(ISBLANK($[0800 0950 column data])),ROWS(FILTER(MyClass,"MyClass[Time]=% AND MyClass[Class]=% AND MyClass[Weekday]=%",$[0800 0950 column header],$[0800 0950 column data],$[Weekday column data]))=0)
通过 AND 函数来连接两个条件语句,第一个是判断对应的课程时段值是否为空,第二个是判断这个时段的课程是否已经存在于我的课程 MyClass 表中。条件均满足的情况下才会显示“参加”按钮。
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/faada895df464ee5b51d74d89b14a7e6.jpg)
文章图片
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/c2ab93377fe948d7a2466d293abed3b0.jpg)
文章图片
- 设置“参加”按钮的 ACTIONS,把要参加的课程信息写入到我的课程 MyClass 表中。
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/faada895df464ee5b51d74d89b14a7e6.jpg)
文章图片
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/78c5e1e8dde247049de72b7d2ff3460a.jpg)
文章图片
- 为每个时间段列重复7-10步的设置。
- 值得注意的是课程详细页的工作日DataCell取值的设置。
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/fbfcf7cfebb84589b3e0b8664d6544d5.jpg)
文章图片
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/f3ed4dc488584e3a83069897610a171d.jpg)
文章图片
仔细考虑下为什么这么写?
前面我们提到过 WeekDays 表是作为 ClassTab 表中“工作日”列的 PickList 外部数据源表,在详细页面中展示的数据是 ClassTab 表的每行的数据,那么工作日这个DataCell所对应的值就是指向WeekDays表中一行的RowLink,所以这么写的意思是从ClassTab的“工作日”列指向的WeekDays表的行数据中取出“工作日”列的值。
- 增加一个新的Screen,用来显示要参加的课程,并且在页面中添加一个Column List的对象,并且设置数据源。
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/56f95de9c0094ea59dfa4b49a7564196.jpg)
文章图片
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/b551bc9441d5451d951d5297185f18cb.jpg)
文章图片
数据源表达式为:
=FILTER(MyClass,"ORDER BY MyClass[value],MyClass[Time]")
注意表达式中的ORDER BY的使用,这里我们依据MyClass的“value”列和“Time”进行排序。
- 在上面新创建的 Screen 中的列表行里添加一个“取消”按钮,用来将对应的课程记录从MyClass表中删除。设置其 ACTIONS 为删除当前行。
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/67d6002439bf48ae9416bcea301a79bd.jpg)
文章图片
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/0234cdca16184f04a9cf85e6a1678514.jpg)
文章图片
至此,本 APP 构建全部完成,所有页面的显示效果如下:
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/e9383fec61f14432b5427dc591b8979f.jpg)
文章图片
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/0f2d7d67e0114413a46c94e49ba511e0.jpg)
文章图片
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/0ce937280f3c4b3db7172d8a6aa26f41.jpg)
文章图片
04.总结
在本例中涉及到了很多 Amazon Honeycode 的核心操作,例如对 PickList 及 RowLink 的使用以及对数据源进行过滤和基于条件的样式设置等,但是没有对课程发布的环节进行设置,大家可以尝试通过判断当前登录用户,为其绑定角色和权限,然后对课程表进行增删改的操作。
相信通过这些动手练习,一定可以对 Honeycode 低代码平台有更深入的了解同时积累相当的动手经验。
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/9a5d9db6cd4d441e92afe1224a1a7661.jpg)
文章图片
如果您想要更深入地学习 Amazon Honeycode 更多内容,我们向您推荐「Amazon Honeycode community」,在这里,您可以与其他 Honeycoders 联系,一起交流、学习新技能!
复制网址(https://honeycodecommunity.aws/)或扫描下方二维码即可访问哦~
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/1229c4ff4b5949bebe8214b34d2145ac.png)
文章图片
本文作者介绍
![NoCode 实战 | 想要开发在线选课系统(何必那样大费周章!)](https://img.it610.com/image/info9/f551c7573edf4478a9f5bd37cac059aa.jpg)
文章图片
李军强
亚马逊云科技专业服务团队
云架构咨询顾问
负责企业级客户的云上架构咨询,基础架构现代化改造及优化。在基础架构和容器领域有多年运维管理经验,对 DevOps、持续交付及云原生服务框架、运维自动化等有深入的理解。
END
推荐阅读
- 是你,情愿
- 动如脱兔
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- 你喜欢的不一定想要
- 《机器学习实战》高清中文版PDF英文版PDF+源代码下载
- --木木--|--木木-- 第二课作业#翼丰会(每日一淘6+1实战裂变被动引流# 6+1模式)
- 孩子的未来,如何才是你想要的模样()
- 2020-07-29《吴军·阅读与写作50讲》24实战才能转化效能
- 高中地理提分攻略
- 为什么我想要打破格局,变得不要脸