【从零开始JavaEE课设】《影院系统》(一) 需求分析 数据库设计 后端model类

前言

吼吼吼,紧张的JavaEE阶段学习结束了,刚学完SSM框架,转眼这就到期末课设了。时间过得可真快啊。(然而我的框架使用和前端技术可能还是老八心爱的奥利给)

但是不论如何,课设就这么来了,这倒是个好机会,能把学过的技术栈给穿起来复习复习。刚好JavaEE阶段学了很多很多技术,但是都没有来得及写成博客梳理一番。借着这个项目,一边完成,一边梳理知识知识点,美汁汁~~

所以这个系列可能会连载许多篇 (我尽量) ,其中会有技术应用的,也会有完成结构的。当然,在完成的过程中一定是充满各种问题的,像是数据库设计的优化,程序结构设计的改善等等。

因此一些文章补充新的内容或者发生重构也肯定是经常的事情,我也真诚的希望在做的不好的地方可以获得你们宝贵的建议。

千里之行,始于足下,今天就从最开始的需求分析做起吧。

需求分析

这个课设并不复杂,简单来说就是三个系统:

后台管理系统

  • 管理电影,包括电影的上限,下架
    电影包括时长,国家,语言等信息,需要能够上传电影海报
  • 管理影厅,包括增删改影厅的属性。
    影厅属性包括名称,类型,座位数等等。
  • 管理影片放映,主要体现为影片上映的排片计划
    需要制定放映的时间、影厅、票价等信息
  • 消息记录查询,包括查询票房,电影票售卖记录等

在线购票系统

  • 在线自助售票,购票人可以在网站上查询到近期(三天)的各种上映电影
  • 选择电影后可电影在某日的排片
  • 选择某上映计划后可选择座位,同时确定购买数量
  • 结算时使用手机号码进行标记
  • 可使用会员卡进行打折,需要输入会员卡的卡号(或手机号)和密码
  • 购票成功后将显示影票信息,包括场次,时间,影片,票价,编号等。
    (课设要求中并没有涉及到退票的操作,购票完成时就已经出票了。这个作为以后功能扩展的功能吧QAQ)

会员管理系统

  • 用户可注册会员卡,注册的会员卡拥有不同的时限、折扣(可增添会员卡的类型)
    会员卡需要用户提供手机号码(必选)、生日(可选)、姓名(必选),系统将自动生成会员卡号码即会员卡时限。
  • 过时的会员卡将不能进行消费,但是可以续期或是返现。
  • 用户可在网页中登录会员对信息做出修改和充值
  • 会员购票将进行打折处理,钱将会从卡余额划扣,余额不足不可以使用会员卡消费

项目的需求暂时就只有这些,总体来说功能还算可以,下面我们先来粗略的建立数据库的表单吧。

数据库表单

暂时想来,这个项目不需要特别多的表单,目前想到的,需要七个表:

  • 首先是存储电影和影厅需要两个表单,这是两个最基础的表。
  • 为了存储电影和海报海报这个一对多的关系,需要再建立一张用来记录海报和影片关系的表。
  • 存储vip和员工需要两个表单,这是用来管理人员的表单。
  • 接着就是上映计划表,对,影片的上映计划通影片本身是不一样的。这里叫放映计划可能更加合适一些,这个表将记录每一个放映计划,会关联到影片和影厅,并为该场电影指定价格。
  • 再接着,就是购票记录表。这张表,可以用来显示用户的购票结果,也可用来进行统计票房。需要关联场次,影厅、座位号、用户电话号码等

员工和vip表

DROP TABLE IF EXISTS `vip`;
CREATE TABLE `vip`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `code` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `discount` double(10, 2) NULL DEFAULT 1.00,
  `money` double(10, 2) NULL DEFAULT 0.00,
  `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '123456',
  `phone` bigint(0) NULL DEFAULT NULL,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `birthday` date NULL DEFAULT NULL,
  `due_time` date NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `code`(`code`) USING BTREE,
  UNIQUE INDEX `phone`(`phone`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS `staff`;
CREATE TABLE `staff`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `id_card` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

员工数据暂时仅在网页上校验,在后台添加。

影厅

DROP TABLE IF EXISTS `room`;
CREATE TABLE `room`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `seat` int(0) NULL DEFAULT 50,
  `type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

影片和海报

DROP TABLE IF EXISTS `film`;
CREATE TABLE `film`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `director` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `country` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `length` double NULL DEFAULT NULL,
  `release_time` date NULL DEFAULT NULL,
  `offline_time` date NULL DEFAULT NULL,
  `language` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `introduction` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS `film_post`;
CREATE TABLE `film_post`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `dir` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `film_id` int(0) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `film_id`(`film_id`) USING BTREE,
  CONSTRAINT `film_id` FOREIGN KEY (`film_id`) REFERENCES `film` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

放映计划

DROP TABLE IF EXISTS `screening_plan`;
CREATE TABLE `screening_plan`  (
  `price` decimal(10, 2) NOT NULL,
  `room_id` int(0) NULL DEFAULT NULL,
  `film_id` int(0) NULL DEFAULT NULL,
  `time` time(0) NOT NULL,
  `date` date NOT NULL,
  `id` int(0) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `film`(`film_id`) USING BTREE,
  INDEX `room`(`room_id`) USING BTREE,
  CONSTRAINT `room` FOREIGN KEY (`room_id`) REFERENCES `room` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT,
  CONSTRAINT `film` FOREIGN KEY (`film_id`) REFERENCES `film` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

售票记录

DROP TABLE IF EXISTS `record`;
CREATE TABLE `record`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `time` datetime(0) NULL DEFAULT NULL,
  `plan_id` int(0) NULL DEFAULT NULL,
  `phone` bigint(0) NULL DEFAULT NULL,
  `seat_id` int(0) NULL DEFAULT NULL,
  `money` double(10, 2) NULL DEFAULT NULL,
  `code` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `plan`(`plan_id`) USING BTREE,
  CONSTRAINT `plan` FOREIGN KEY (`plan_id`) REFERENCES `screening_plan` (`id`) ON DELETE SET NULL ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

nice~~~~

model类

设置好了数据库,接下来就是设计对应的model里面的实体类了。为了方便查询,命名尽量同数据库中名称相同,但是数据库中的下划线命名得改成驼峰命名 /doge。

表中有些使用外键连接的表在类中直接就设计成为对象了,这样在使用Mybatis进行映射时也方便。因此,像电影海报这样的表就没有必要映射成为一个类了,把地址属性封装成一个字符串放在电影中就好。
(20.6.24:假的!最好还是将海报设计成为一个类,这样在配置mapper文件时的resultMap时会方便一些。不单独设计成为一个类,管理海报会成为一个麻烦事)

另外,为了节省空间,没有放getter、setter方法。
【从零开始JavaEE课设】《影院系统》(一) 需求分析 数据库设计 后端model类_第1张图片
(博主没有公司,所以使用none合情合理 /理直气壮.jpg)

vip类

package com.none.model;

public class Vip {
	private int id;
	private String idCard;
	private double money;
	private double discount;
	private String birthday;
	private String dueTime;
	private String password;
	private String code;
	private String phone;
}

记录类

package com.none.model;

public class Record {
	private int id;
	private double money;
	private String time;
	private ScreeningPlan plan;
	private String code;
	private Room room;
	private String phone;
}

影片类

package com.none.model;

import java.util.List;

public class Film {
	private int id;
	private double length;
	private String releseTime;
	private String offlineTime; 
	private String name;
	private String introduction;
	private String language;
	private String country;
	private String director;
	private List<FilmPost> post;
}

放映计划类

package com.none.model;

public class ScreeningPlan {
	private int id;
	private double price;
	private String time;
	private Room room;
	private Film film;
}

影厅类

package com.none.model;

public class Room {
	private int id;
	private int seat;
	private String name;
	private String type;
}

员工类

package com.none.model;

public class Staff {
	private int id;
	private String password;
	private String idCard;
	private String name;
}

海报类

package com.none.model;

public class FilmPost {
	private int id;
	private int filmId;
	private String dir;
}


发现错误或是不妥之处欢迎指正~~~

博客会继续更新的,也许忙着做就给忘了,所以有可能会腹泻式更新(博主的奇妙比喻)。


第二弹:【从零开始JavaEE课设】《影院系统》(二)编写持久层Mapper接口


20.6.24更新:新增了海报类,电影类聚合海报,将list中类型改成海报

你可能感兴趣的:(JavaWeb,数据库,java)