MonkeyEye电影售票系统--领域模型和数据模型

来源:互联网 发布:互普威盾软件 编辑:程序博客网 时间:2024/06/01 20:07

案例来源:SYSU SE305 课程大作业。互联网售票软件是比较常见的软件系统。通常由多个零售系统和多个供给系统系统。 机票、酒店房间、电影票似乎是风马牛大相关的系统,但它们之间存在极其相似的业务模型。 以电影票为例,格瓦拉、蜘蛛网、腾讯等等都做类似的电影票分销、推广业务,但票是由各大院线排期提供的。 分销-院线-影院形成了一个完整的生态体系。 本课程以大家熟悉的订票为例,学习分析、设计、开发的方法。

我所在的小组做的是一个叫做MonkeyEye的项目,实现一个简单的电影购票系统,并在项目完成过程中学习系统分析与设计,学习UML建模等技能。本系列文章将会以此项目为案例,总结整个项目的设计、建模与开发过程。

项目地址:https://github.com/SYSUMonkeyEye

一、基本功能

  1. 电影资讯
  2. 购票
  3. 用户信息
  4. 收藏
  5. 评论

用户使用该可以实现查看和搜索正在热映和即将上映的电影资讯,对感兴趣的电影可以进行收藏。想要观看某部电影,可以进行下单购票操作。对于已经放映的电影订单,用户可以对该订单对应的电影进行评分评价的操作。另外,用户还可以更新自己的个人信息。下面是整个应用的界面逻辑概要图,方便对应用有个直观的理解。

这里写图片描述

二、领域建模

领域模型是一组概念类图,即没有定义操作的类图。通过分析整个应用的功能,找出其中的名词,大致可以分为如下8个概念类:电影(Movie)、场次(Screen)、推荐(Recommend)、评论(Comment)、收藏关系(Favorite)、用户(User)、订单(Order)、优惠券(Coupons)。

下面对每个概念类进一步分析,得到他们的基本属性。

1、电影(Movie)

电影需要有以下8项基本信息:名称、海报、类型、放映类型、上映时间、电影时长、电影评分和电影简介。类型是指动作片、喜剧片之类的,而放映类型则是指”2D国语”、”3D英语”之类的。

这里写图片描述

2、场次(Screen)

不同场次出售的电影票数量可能因为作为关系变得有所不同,电影票的价格也可能因为高峰期或者冷清期而有所变化,不同场次开始播放电影的时间也有所区别。因此,场地大概会需要下面这4项信息:对应的电影、本场次电影票价格、本场次电影票数量、本场次开始时间。最后,电影与场次的对应关系为:1部电影可能有零或多个场次,但1个场地只能有1部关联的电影。

这里写图片描述

3、推荐(Recommend)

后台管理员可以设置每天的推荐电影,会以海报轮播的形式在应用首页呈现。推荐相当于一种标记,标记了某部电影,一个推荐实例对应一部电影,一部电影最多只能有一个推荐。

这里写图片描述

4、用户(User)

使用该应用的用户需要以下7项信息:用户名、登录密码、支付密码、昵称、头像、简介、账户余额。由于本应用没有第三方支付或者充钱功能,目前加入账户余额字段方便我们可以模拟出购票下单付款的行为。至于账户余额如何补充不是本应用关注的问题,保留这个字段后续如果需要做第三方支付或者充钱等功能的时候也不会产生冲突。

这里写图片描述

5、收藏关系(Favorite)

用户对感兴趣的电影可以进行收藏,收藏关系就是用来描述用户和电影之间的关系的。1个用户可以收藏多部电影,每个收藏关系都对应1个用户和1部电影。

这里写图片描述

6、优惠券(Coupons)

优惠券需要的信息比较简单:折扣、使用条件、持有该券的用户。另外需要有1个有效时间,过期的优惠券无法使用。并且使用过的优惠券需要标记状态,便于判断。一个用户可以拥有多张优惠券。

这里写图片描述

7、订单(Order)

一个订单需要包括:该订单对应的电影、该订单对应的场次、该订单所使用的优惠券、订单应付价格、订单创建时间、订单所属用户以及座位信息。一个用户能够创建多个订单,一个订单只对应一部电影和一个场次,并且一个订单最多只能使用一张优惠券。

这里写图片描述

8、评价(Comment)

评价的内容包括等级分数和评语两部分内容。另外,每一条评论都有对应的发布人和对应的电影。一个用户可以有多条评价,一部电影也可以有多条评论。

这里写图片描述

三、数据模型

根据领域模型,对各个概念类的字段和类型进行完善,我们可以很容易得到以下数据模型。根据数据模型对字段的描述和类型的确定,以及领域模型中确定的关联关系,可以很方便进行数据库建模。实际开发中可以继续对各个类的字段和方法进行完善。

1、电影(Movie)

{    "movie": {        "id": "uid, 数据库ID",        "name": "string, 电影名称",        "poster": "string, 海报链接",        "movieType": "string, 电影类型, 动作/冒险/爱情/喜剧等",        "playingType": "string, 播放类型, 2D/3D/国语/外语等",        "playingTime": "date, 上映日期",        "duration": "integer, 电影时长",        "rating": "integer, 电影评分, 取值范围0-5",        "description": "string, 电影简介"    },    "example": {        "id": "0db1a2e4bf7e42dfb2bde06c81eaca91",        "name": "速度与激情8",        "poster": "/static/images/poster/dheusidewhxj289f74gsuc78.png",        "movieType": "冒险 动作",        "playingType": "英语 3D",        "playingTime": "1493001432820",        "duration": "136",        "rating": "5",        "description": "一位神秘女子Cipher(查理兹·塞隆 饰)的出现,她引诱多米尼克走上犯罪道路,令整个队伍卷入信任与背叛的危机"    }}

2、场次(Screen)

{    "screen": {        "id": "uid, 数据库ID",        "movieId": "uid, 数据库ID",        "price": "double, 本场次电影票价格",        "ticketNum": "integer, 本场次售票数量",        "time": "date, 开始放映的时间"    },    "example": {        "id": "58cc02902b0f45ad80938b125aade2d0",        "movieId": "fc57ab4586284680a4285db878cab44e",        "price": "48",        "ticketNum": "120",        "time": "1493001432820"    }}

3、推荐(Recommend)

{    "recommend": {        "id": "uid, 数据库ID",        "movieId": "uid, 数据库ID"    },    "example": {        "id": "c4b6e699a6d44abb968ce7cc05b2ffeb",        "movieId": "7e3b99a9a89e42748f389bf94650ef4b"    }}

4、用户(User)

{    "user": {        "username": "string, 用户名/账号",        "password": "string, 登录密码",        "payPassword": "string, 支付密码",        "nickname": "string, 昵称",        "avatar": "string, 头像链接",        "description": "string, 个签",        "money": "double, 用户账户余额"    },    "example": {        "username": "18819210086",        "password": "xxxxxxxx",        "payPassword": "xxxxxxx",        "nickname": "风不定,人初静",        "avatar": "/static/images/user/18819253798.png",        "description": "风不定,人初静,明日落红应满径。",        "money": "1234.56"    }}

5、收藏关系(Favorite)

{    "favorite": {        "id": "uid, 数据库ID",        "username": "string, 用户名",        "movieId": "uid, 电影的数据库ID"    },    "example": {        "id": "8bf8a8998bcd4d9cba380107e46785c",        "username": "18819210086",        "movieId": "7e3b99a9a89e42748f389bf94650ef4b"    }}

6、优惠券(Coupons)

{    "coupons": {        "id": "uid, 数据库ID",        "discount": "double, 折扣, 5%、10%等",        "condition": "double, 使用条件, 例如满60元可用",        "username": "string, 用户名",        "expiredTime": "date, 过期时间",        "status": "integer, 优惠券状态, 0: 未使用, 1: 已使用, 2: 已失效"    },    "example": {        "id": "760f4f2150e84b5989f1149b80addb11",        "discount": "0.1",        "conditions": "36",        "username": "18819212345",        "expiredTime": "1497628800000",        "status": "0"    }}

7、订单(Order)

{    "order": {        "id": "uid, 数据库ID",        "movieId": "uid, 电影的数据库ID",        "screenId": "uid, 场次的数据库ID",        "seat": "string, 座位",        "price": "double, 订单总额",        "username": "string, 用户名",        "status": "integer, 订单类型, 0:未支付, 1:待取票, 2:未上映, 3:待评价",        "couponsId": "uid, 优惠券的数据库ID",        "createTime": "date, 订单创建时间"    },    "example": {        "id": "0201c7a8d99c41d9a6666d38a7a6363f",        "movieId": "fc57ab4586284680a4285db878cab44e",        "screenId": "58cc02902b0f45ad80938b125aade2d0",        "seat": "36,37",        "price": "80",        "username": "18819210086",        "status": "0",        "couponsId": "760f4f2150e84b5989f1149b80addb11",        "createTime": "1496546632000"    }}

8、评价(Comment)

{    "comment": {        "id": "uid, 数据库ID",        "username": "string, 用户名",        "movieId": "uid, 电影的数据库ID",        "rating": "integer, 评分, 取值范围0-5",        "content": "string, 评价内容"    },    "example": {        "id": "13ee9e892892496e84b10ab392b333d9",        "username": "18819210086",        "movieId": "fc57ab4586284680a4285db878cab44e",        "rating": "5",        "content": "很好看,很刺激!!!"    }}