App Inventor

一、主要改动

  1. 将选座位再单机一次才能重选改成了直接重选,因为我觉得就本项目而言,这样的实现对用户会更友好一点。那个原本的代码块我觉得还是挺有想法的,通过取余来实现选换座位,很厉害。但这么做存在一个问题,你们其余好多地方也是这么做的,就是定义了非常多的全局变量,这种做法不是很推荐,因为全局变量会伴随着应用的生命周期一直存在,会消耗许多系统内存,所以如果能用局部变量的地方就用局部变量吧。另外,多用过程少用复制粘贴。
  2. 将学习时间我改成了按分钟算的,每隔一分钟会变化一次。是通过模块内置的方法实现的。其实那个预约时间的倒计时也可以用模块内置的方法实现,不用自己再去写个过程的。因为大多数情况下,别人已经帮我们实现好的方法会比我们自己写的要好。
  3. 数据库我又改了,在reservation表中增加了一个total_time字段,方便你们其他页面统计总共学习的时间。
  4. 座位现在是可以实时刷新状态的,每当有座位被选中或释放都会立即反映在界面上,这是我按照上次与技术总监交流时所理解的需求,不知道是否是这样。(当然,我还是不太推荐这种实时显示变化的,如果作为一个作业的话这样做未尝不可,实际应用中很少这样做的)

二、源代码

  1. SQL文件
/*
Navicat MySQL Data Transfer

Source Server         : Lee
Source Server Version : 50505
Source Host           : localhost:3306
Source Database       : test

Target Server Type    : MYSQL
Target Server Version : 50505
File Encoding         : 65001

Date: 2019-05-28 13:28:22
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for reservation
-- ----------------------------
DROP TABLE IF EXISTS `reservation`;
CREATE TABLE `reservation` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `seat_id` int(11) DEFAULT NULL,
  `user_id` int(11) DEFAULT NULL,
  `date` date DEFAULT NULL,
  `start_time` time DEFAULT NULL,
  `finish_time` time DEFAULT NULL,
  `total_time` char(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- ----------------------------
-- Table structure for seats
-- ----------------------------
DROP TABLE IF EXISTS `seats`;
CREATE TABLE `seats` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `status` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '1已预约 0未预约',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- ----------------------------
-- Table structure for stu
-- ----------------------------
DROP TABLE IF EXISTS `stu`;
CREATE TABLE `stu` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `password` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

  2.数据接口

1.http://localhost:1880/queryseats

msg.topic = "select * from seats";
return msg;

2.http://localhost:1880/updateseat

var id = msg.payload.id;
msg.topic = "update seats set status=1 where id = " + id;
return msg;

3.http://localhost:1880/undoseat

var id = msg.payload.id;
msg.topic = "update seats set status=0 where id = " + id;
return msg;

4.http://localhost:1880/addreservation

var seat_id = msg.payload.seat_id;
var user_id = msg.payload.user_id;
var start_time = msg.payload.start_time;
var date = msg.payload.date;
msg.topic = "insert into reservation(seat_id,user_id,start_time,date) values(" + seat_id +","+ user_id + "," + "'" + start_time + "'" + "," + "'" + date + "'" + ")";
return msg;

5.http://localhost:1880/finish

var id = msg.payload.id;
var finish_time = msg.payload.finish_time;
var total_time = msg.payload.total_time;
msg.topic = "update  reservation set finish_time = "  +  "'" + finish_time + "'" + ", total_time = " + total_time  + " where id = " + id ;
return msg;

三、还存在的问题

  1. 界面间传userID我还没有测试,在模块中也没有改,直接写死的,你们改一下。

    2.每次页面跳准都会重新刷新页面,这就导致一个问题:假如我已经选好座位开始学习了,如果这时候跳转到另一个页面,在返回到选座位的页面,就会重新开始选座位的流程,这显示是不合理的。所以,要想一个办法,保证只在需要的时候重新加载页面,而不是每次跳到该页面都加载一遍。应该有解决办法。

    3.用户单机结束学习之后界面的显示或跳转应该是怎么样的应该需要设计下,目前就是整个页面的按钮都不可用了,这我觉得也是有点不合理。

    4.用户点击取消预约之后回跳到一个过渡页,我想能不能直接重载本页面....当然这个问题很次要......你们可以考虑下。

目前想到写的只有这么多了.....

原文地址:https://www.cnblogs.com/ustc-anmin/p/10936758.html