Flask构建微电影(二)

第三章、项目分析、搭建目录及模型设计

3.1.前后台项目目录分析

微电影网站

  • 前台模块
  • 后台模块

 前台(home)

  • 数据模型:models.py
  • 表单处理:home/forms.py
  • 模板目录:templates/home

 后台(admin)

  • 数据模型:models.py
  • 表单处理:admin/forms.py
  • 模板目录:templates/admin
  • 静态文件:static

开始创建目录,如下:

 

 

3.2.蓝图构建项目目录

什么是蓝图?

一个应用中或跨用用制作应用组件和支持通用的模式

蓝图的作用

  • 将不同的功能模块化

  • 构建大型应用
  • 优化项目结构
  • 增强可读性,易于维护

如何使用蓝图构建项目目

(1)home/__init__.py

#coding:utf-8
__author__ = 'derek'from flask import Blueprinthome = Blueprint("home",__name__)import app.home.views

(2)admin/__init__.py

#coding:utf-8
__author__ = 'derek'from flask import Blueprintadmin = Blueprint("admin",__name__)import app.admin.views

(3)home/views.py

#coding:utf-8
__author__ = 'derek'from . import home    #导入蓝图

@home.route("/")
def index():return "<h1 style='color:green'>this is home</h1>"

(4)admin/views.py

#coding:utf-8
__author__ = 'derek'from . import admin   #导入蓝图

@admin.route("/")
def index():return "<h1 style='color:red'>this is admin</h1>"

(5)app/__init__.py

#coding:utf-8
__author__ = 'derek'from flask import Flask
app = Flask(__name__)
app.debug = True    #调式模式#导入蓝图对象,然后起个别名,易于区分
from app.home import home as home_blueprint
from app.admin import admin as admin_blueprint#注册蓝图
app.register_blueprint(home_blueprint)
app.register_blueprint(admin_blueprint,url_prefix = "/admin")   #url_prefix添加前缀

(6)app/manage.py

#coding:utf-8
__author__ = 'derek'from app import app         # 导入的app是app/__init__中实例化的对象:app = Flask(__name__)if __name__ == '__main__':app.run()

(7)运行项目(manage,py)

home

admin

3.3.会员及会员登录日志数据模型设计

 (1)安装flask-sqlalchemy

pip install -i https://pypi.douban.com/simple --trusted-host pypi.douban.com flask-sqlalchemy

 (2)app/models.py

    Flask-SQLAlchemy 配置

 表结构的设计

#coding:utf-8
__author__ = 'derek'
from datetime import datetime
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import pymysql
app
= Flask(__name__) #连接mysql数据库(用户名、密码、ip、端口和数据库名字) app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:123456@127.0.0.1:3306/movie" app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = Truedb = SQLAlchemy(app)#会员 class User(db.Model): #继承db.Model__tablename__ = "user" #数据库中表显示的名字id = db.Column(db.Integer,primary_key=True) #编号,int类型,主键name = db.Column(db.String(100),unique=True) #昵称,字符串类型(长度100),唯一pwd = db.Column(db.String(100)) #密码email = db.Column(db.String(100),unique=True) #邮箱phone = db.Column(db.String(11),unique=True) #手机info = db.Column(db.Text) #个性简介face = db.Column(db.String(255),unique=True) #头像addtime = db.Column(db.DateTime,index=True,default=datetime.now) #添加时间uuid = db.Column(db.String(255),unique=True) #唯一标识符userlogs = db.relationship('UserLog',backref='user') #会员日志外键关系def __repr__(self):return "<User %r>"%self.name#会员登录日志 class UserLog(db.Model):__tablename__ = "userlog"id = db.Column(db.Integer,primary_key=True) #编号#跟User表的id外键关联,类名小写user_id = db.Column(db.Integer,db.ForeignKey('user.id')) #所属会员ip = db.Column(db.String(100)) #登录ipaddtime = db.Column(db.DateTime,index=True,default=datetime.now) #登录时间def __repr__(self):return "<UserLog %r>"%self

3.4.标签、电影、上映预告数据模型设

class Tag(db.Model):__tablename__ = "tag"id = db.Column(db.Integer,primary_key=True)        #编号name = db.Column(db.String(100),unique=True)       #标题addtime = db.Column(db.DateTime,index=True,default=datetime.now)   #添加时间movies = db.relationship("Movie",backref="tag")    #电影外键关系关联def __repr__(self):return "<Tag %r>"%self.name#电影
class Movie(db.Model):__tablename__ = "movie"id = db.Column(db.Integer,primary_key=True)       #编号title = db.Column(db.String(255),unique=True)     #标题url = db.Column(db.String(255),unique=True)       #地址info = db.Column(db.Text)                          #简介logo = db.Column(db.String(255),unique=True)      #封面star = db.Column(db.SmallInteger)                  #星级playnum = db.Column(db.BigInteger)                #播放量commentnum = db.Column(db.BigInteger)             #评论数tag_id = db.Column(db.Integer,db.ForeignKey('tag.id'))   #所属标签area = db.Column(db.String(255))                  #上映地区release_time = db.Column(db.Date)                 #上映时间length = db.Column(db.String(100))                #电影播放时间addtime = db.Column(db.DateTime,index=True,default=datetime.now)   #添加时间def __repr__(self):return "<Movie %r>"%self.title#电影上映预告
class Preview(db.Model):__tablename__ = "preview"id = db.Column(db.Integer,primary_key=True)title = db.Column(db.String(255),unique=True)logo = db.Column(db.String(255),unique=True)addtime = db.Column(db.DateTime,index=True,default=datetime.now)def __repr__(self):return "<Preview %r>"%self.title

 

3.5.评论及收藏电影数据模型设计

#评论
class Comment(db.Model):__tablename__ = "comment"id = db.Column(db.Integer,primary_key=True)        #编号content = db.Column(db.Text)                       #内容movie_id = db.Column(db.Integer,db.ForeignKey("movie.id"))    #所属电影user_id = db.Column(db.Integer,db.ForeignKey("user.id"))      #所属用户addtime = db.Column(db.DateTime,index=True,default=datetime.now)    #添加时间def __repr__(self):return "Comment %r"%self.id#电影收藏
class Moviecol(db.Model):__tablename__ = "moviecol"id = db.Column(db.Integer, primary_key=True)  # 编号movie_id = db.Column(db.Integer, db.ForeignKey("movie.id"))  # 所属电影user_id = db.Column(db.Integer, db.ForeignKey("user.id"))  # 所属用户addtime = db.Column(db.DateTime, index=True, default=datetime.now)  # 添加时间def __repr__(self):return "Moviecol %r" % self.id

 要对应的跟User和Movie关联起来

class User(db.Model): ...comments = db.relationship("Comment",backref="user")   #评论外键关系关联moviecols = db.relationship("Moviecol",backref="user")   #电影收藏外键关系关联              
class Movie(db.Model):'
    '
    '
    comments = db.relationship("Comment",backref="movie" )          #评论外键关系关联moviecols = db.relationship("Moviecol",backref="movie" )          #电影收藏外键关系关联    

 

3.6.权限及角色数据模型设计

#权限
class Auth(db.Model):__tablename__ = "auth"id = db.Column(db.Integer,primary_key=True)       #编号name = db.Column(db.String(100),unique=True)      #名称url = db.Column(db.String(255),unique=True)       #地址addtime = db.Column(db.DateTime,index=True,default=datetime.now)   #添加时间def __repr__(self):return "<Auth %r>"%self.name#角色
class Role(db.Model):__tablename__ = "role"id = db.Column(db.Integer,primary_key=True)     #编号name = db.Column(db.String(100),unique=True)    #名称auths = db.Column(db.String(600))               #权限列表addtime = db.Column(db.DateTime,index=True,default=datetime.now)   #添加时间def __repr__(self):return "<Role %r>"%self.name

 

3.7.管理员、登录日志、操作日志数据模型设计

#管理员
class Admin(db.Model):__tablename__ = "admin"id = db.Column(db.Integer,primary_key=True)    #编号name = db.Column(db.String(100),unique=True)   #管理员账号pwd = db.Column(db.String(100))                 #管理员面is_super = db.Column(db.SmallInteger)           #是否为超级管理员,0为超级管理员role_id = db.Column(db.Integer,db.ForeignKey("role.id"))     #所属角色addtime = db.Column(db.DateTime,index=True,default=datetime.now)   #添加时间adminlogs = db.relationship("Adminlog",backref='admin')     #管理员登录日志外键关系关联oplogs = db.relationship("Oplog",backref='admin')           #管理员操作日志外键关系关联def __repr__(self):return "<Admin %r>"%self.id#管理员登录日志
class Adminlog(db.Model):__tablename__ = "adminlog"id = db.Column(db.Integer,primary_key=True)            #编号admin_id = db.Column(db.Integer,db.ForeignKey("admin.id"))     #所属管理员ip = db.Column(db.String(100))        #登录ipaddtime = db.Column(db.DateTime,index=True,default=datetime.now)   #登录时间def __repr__(self):return "Adminlog %r"%self.id#操作日志
class Oplog(db.Model):__tablename__ = "oplog"id = db.Column(db.Integer,primary_key=True)            #编号admin_id = db.Column(db.Integer,db.ForeignKey('admin.id'))     #所属管理员ip = db.Column(db.String(100))        #登录ipreason = db.Column(db.String(600))    #操作原因addtime = db.Column(db.DateTime, index=True, default=datetime.now)   #登录时间def __repr__(self):return "Oplog %r" % self.id

 

3.8.生成数据库表

(1)创建数据库

create database derek default charset utf8 collate utf8_general_ci;

(2)安装pymysql

pip install pymysql

(3)在models.py下面加上代码,然后运行,就生成到数据库里面了

if __name__ == '__main__':db.create_all()
#coding:utf-8
__author__ = 'derek'import pymysql
from flask import Flask
from datetime import datetimefrom flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)
#连接mysql数据库(用户名、密码、ip、端口和数据库名字)
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:123456@127.0.0.1:3306/movie"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = Truedb = SQLAlchemy(app)#会员
class User(db.Model):        #继承db.Model__tablename__ = "user"    #数据库中表显示的名字id = db.Column(db.Integer,primary_key=True)     #编号,int类型,主键name = db.Column(db.String(100),unique=True)    #昵称,字符串类型(长度100),唯一pwd = db.Column(db.String(100))                  #密码email = db.Column(db.String(100),unique=True)    #邮箱phone = db.Column(db.String(11),unique=True)     #手机info = db.Column(db.Text)                         #个性简介face = db.Column(db.String(255),unique=True)      #头像addtime = db.Column(db.DateTime,index=True,default=datetime.now)   #添加时间uuid = db.Column(db.String(255),unique=True)      #唯一标识符userlogs = db.relationship('UserLog',backref='user')   #会员日志外键关系comments = db.relationship("Comment",backref="user")   #评论外键关系关联moviecols = db.relationship("Moviecol",backref="user")   #电影收藏外键关系关联def __repr__(self):return "<User %r>"%self.name#会员登录日志
class UserLog(db.Model):__tablename__ = "userlog"id = db.Column(db.Integer,primary_key=True)        #编号#跟User表的id外键关联,类名小写user_id = db.Column(db.Integer,db.ForeignKey('user.id'))    #所属会员ip = db.Column(db.String(100))        #登录ipaddtime = db.Column(db.DateTime,index=True,default=datetime.now)   #登录时间def __repr__(self):return "<UserLog %r>"%self.id#标签
class Tag(db.Model):__tablename__ = "tag"id = db.Column(db.Integer,primary_key=True)        #编号name = db.Column(db.String(100),unique=True)       #标题addtime = db.Column(db.DateTime,index=True,default=datetime.now)   #添加时间movies = db.relationship("Movie",backref="tag")    #电影外键关系关联def __repr__(self):return "<Tag %r>"%self.name#电影
class Movie(db.Model):__tablename__ = "movie"id = db.Column(db.Integer,primary_key=True)       #编号title = db.Column(db.String(255),unique=True)     #标题url = db.Column(db.String(255),unique=True)       #地址info = db.Column(db.Text)                          #简介logo = db.Column(db.String(255),unique=True)      #封面star = db.Column(db.SmallInteger)                  #星级playnum = db.Column(db.BigInteger)                #播放量commentnum = db.Column(db.BigInteger)             #评论数tag_id = db.Column(db.Integer,db.ForeignKey('tag.id'))   #所属标签area = db.Column(db.String(255))                  #上映地区release_time = db.Column(db.Date)                 #上映时间length = db.Column(db.String(100))                #电影播放时间addtime = db.Column(db.DateTime,index=True,default=datetime.now)   #添加时间comments = db.relationship("Comment",backref="movie" )          #评论外键关系关联moviecols = db.relationship("Moviecol",backref="movie" )          #电影收藏外键关系关联def __repr__(self):return "<Movie %r>"%self.title#电影上映预告
class Preview(db.Model):__tablename__ = "preview"id = db.Column(db.Integer,primary_key=True)title = db.Column(db.String(255),unique=True)logo = db.Column(db.String(255),unique=True)addtime = db.Column(db.DateTime,index=True,default=datetime.now)def __repr__(self):return "<Preview %r>"%self.title#评论
class Comment(db.Model):__tablename__ = "comment"id = db.Column(db.Integer,primary_key=True)        #编号content = db.Column(db.Text)                       #内容movie_id = db.Column(db.Integer,db.ForeignKey("movie.id"))    #所属电影user_id = db.Column(db.Integer,db.ForeignKey("user.id"))      #所属用户addtime = db.Column(db.DateTime,index=True,default=datetime.now)    #添加时间def __repr__(self):return "Comment %r"%self.id#电影收藏
class Moviecol(db.Model):__tablename__ = "moviecol"id = db.Column(db.Integer, primary_key=True)  # 编号movie_id = db.Column(db.Integer, db.ForeignKey("movie.id"))  # 所属电影user_id = db.Column(db.Integer, db.ForeignKey("user.id"))  # 所属用户addtime = db.Column(db.DateTime, index=True, default=datetime.now)  # 添加时间def __repr__(self):return "Moviecol %r" % self.id#权限
class Auth(db.Model):__tablename__ = "auth"id = db.Column(db.Integer,primary_key=True)       #编号name = db.Column(db.String(100),unique=True)      #名称url = db.Column(db.String(255),unique=True)       #地址addtime = db.Column(db.DateTime,index=True,default=datetime.now)   #添加时间def __repr__(self):return "<Auth %r>"%self.name#角色
class Role(db.Model):__tablename__ = "role"id = db.Column(db.Integer,primary_key=True)     #编号name = db.Column(db.String(100),unique=True)    #名称auths = db.Column(db.String(600))               #权限列表addtime = db.Column(db.DateTime,index=True,default=datetime.now)   #添加时间def __repr__(self):return "<Role %r>"%self.name#管理员
class Admin(db.Model):__tablename__ = "admin"id = db.Column(db.Integer,primary_key=True)    #编号name = db.Column(db.String(100),unique=True)   #管理员账号pwd = db.Column(db.String(100))                 #管理员面is_super = db.Column(db.SmallInteger)           #是否为超级管理员,0为超级管理员role_id = db.Column(db.Integer,db.ForeignKey("role.id"))     #所属角色addtime = db.Column(db.DateTime,index=True,default=datetime.now)   #添加时间adminlogs = db.relationship("Adminlog",backref='admin')     #管理员登录日志外键关系关联oplogs = db.relationship("Oplog",backref='admin')           #管理员操作日志外键关系关联def __repr__(self):return "<Admin %r>"%self.id#管理员登录日志
class Adminlog(db.Model):__tablename__ = "adminlog"id = db.Column(db.Integer,primary_key=True)            #编号admin_id = db.Column(db.Integer,db.ForeignKey("admin.id"))     #所属管理员ip = db.Column(db.String(100))        #登录ipaddtime = db.Column(db.DateTime,index=True,default=datetime.now)   #登录时间def __repr__(self):return "Adminlog %r"%self.id#操作日志
class Oplog(db.Model):__tablename__ = "oplog"id = db.Column(db.Integer,primary_key=True)            #编号admin_id = db.Column(db.Integer,db.ForeignKey('admin.id'))     #所属管理员ip = db.Column(db.String(100))        #登录ipreason = db.Column(db.String(600))    #操作原因addtime = db.Column(db.DateTime, index=True, default=datetime.now)   #登录时间def __repr__(self):return "Oplog %r" % self.id
models.py所有代码

(4)查看数据库

show databases;
user movie;
show tables;

 

(5)添加一个角色

if __name__ == '__main__':# db.create_all()
role = Role(name="超级管理员",auths="")db.session.add(role)db.session.commit()

取数据库查看

desc role;
select * from role;

 

 (6)添加一个管理员

密码保存的时候采用hash加密

if __name__ == '__main__':# db.create_all()#添加角色# role = Role(#     name="超级管理员",#     auths=""# )# db.session.add(role)# db.session.commit()#添加管理员#对密码加密保存from werkzeug.security import generate_password_hashadmin = Admin(name="derek",pwd=generate_password_hash("123456"),is_super=0,role_id=1)db.session.add(admin)db.session.commit()

查看数据库

select * from admin\G;

 

上一篇:Flask构建微电影(一)

 

 

转载于:https://www.cnblogs.com/derek1184405959/p/9038294.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Studio开发第四篇版本管理Git(下)

前面一片介绍了在as下如何关联远程仓库&#xff0c;这篇就介绍在开发过程中怎么应用。 提交Push 如果本地开发代码有改动了或者你觉得某功能做完了&#xff0c;你打算把改动代码提交到远程仓库&#xff0c;这个时候很简单&#xff0c; 还是在工具栏找到VSC箭头朝上的按钮。 这时…

容器大小_无根容器内部结构浅析

随着云计算的发展&#xff0c;容器变得越来越流行&#xff0c;同时也产生了实现容器的新方案&#xff0c;其中之一就是无根容器。本文介绍了无根容器的内部结构&#xff0c;并分析了无根容器网络组件中的漏洞。随着云计算的发展&#xff0c;容器变得越来越流行&#xff0c;同时…

php layout布局文件,layout(布局) - jQuery EasyUI中文文档 - EasyUI中文站

Layout(布局)使用$.fn.layout.defaults重写默认值对象。布局容器有5个区域&#xff1a;北、南、东、西和中间。中间区域面板是必须的&#xff0c;边缘的面板都是可选的。每个边缘区域面板都可以通过拖拽其边框改变大小&#xff0c;也可以点击折叠按钮将面板折叠起来。布局可以进…

Bootstrap系列 -- 11. 基础表单

表单主要功能是用来与用户做交流的一个网页控件&#xff0c;良好的表单设计能够让网页与用户更好的沟通。表单中常见的元素主要包括&#xff1a;文本输入框、下拉选择框、单选按钮、复选按钮、文本域和按钮等。其中每个控件所起的作用都各不相同&#xff0c;而且不同的浏览器对…

how to use webpart container in kentico

https://docs.kentico.com/k11/developing-websites/developing-websites-using-the-portal-engine/using-web-part-containers Webpart Container webpart container中的orangebox, SELECT * FROM dbo.CMS_WebPartContainer WHERE ContainerDisplayName LIKE %orange%; 把…

excel如何找到高频词_拟录取后:应届生和往届生档案哪里找;重灾院校区;高频词背诵表...

今日消息1、应届生和往届生档案哪里找&#xff1f;2、重灾院校区3、考研云督学班高频词背诵表汇总1、应届生和往届生档案哪里找&#xff1f;往年这个时候论文答辩、复试已经结束&#xff0c;已经进入毕业季&#xff01;现在你们毕业答辩结束了吗&#xff1f;你们都顺利上岸吗&a…

oracle 中表,oracle中表操作

1.1&#xff1a;创建一表空间 TABLESPACE01,初始大小50MB,允许自动增长数据库文件,每次增长10MBCREATE TABLESPACE TABLESPACE01LOGGINGDATAFILE’F:\TABLESPACE\DATA01.DBF’ SIZE 50MREUSE AUTOEXTEND ON NEXT 10M;1.2:创建用户 (oracle12c)此处创建用户报错&#xff0c;原因…

放大镜_指甲钳上有放大镜?再也不怕夹到肉了

扒姬说&#xff1a;剪指甲钳最害怕什么&#xff0c;是没注意夹到肉有没有。尤其是近视的人和手脚不便的老人&#xff0c;或者是给较小的宝宝剪指甲时&#xff0c;总是看不清指甲边缘的形状、刀口的位置&#xff0c;一不小心就会夹到手指、脚趾。今天&#xff0c;扒姬推荐一个特…

linux学习规划

转载于:https://www.cnblogs.com/Alight/p/4601510.html

oracle如何在本地建库,oracle在本地建库

oracle数据库本地建库&#xff0c;需要使用oracle安装路径下面的-配置和移植工具-Database Configuration Assistant 通过一次点击下一步进行建库。 在库建好后&#xff0c;使用系统账号 User:sys password:sys Connect as SYSDBA在客户端进行登录 --创建表空间 Create tablesp…

「BZOJ1485」[HNOI2009] 有趣的数列 (卡特兰数列)

「BZOJ1485」[HNOI2009] 有趣的数列 Description 我们称一个长度为2n的数列是有趣的&#xff0c;当且仅当该数列满足以下三个条件&#xff1a; (1)它是从1到2n共2n个整数的一个排列{ai}&#xff1b; (2)所有的奇数项满足a1<a3<…<a2n-1&#xff0c;所有的偶数项满足a2…

wedo2.0编程模块介绍_能量黑科技模块系列十:RFID魔块

RFID魔块RFID此模块可以对套件配套的RFID卡或者空白RFID卡进行读写&#xff0c;用于权限验证的DIY制作。常规的公交卡、地铁卡是无法进行写入&#xff0c;但可以读取UID号。配套RFID卡内存为1K&#xff0c;有16个分区&#xff0c;每个分区有3个数据块可进行写入此模块可以对套件…

[SoapUI] 通过SoapUI发送POST请求,请求的body是JSON格式的数据

通过SoapUI发送POST请求&#xff0c;请求的body是JSON格式的数据&#xff1a; data{"currentDate":"2015-06-19","reset":true} 而且通过Fiddler抓取页面报文 Content-Type 是 application/x-www-form-urlencoded 一开始我将Content-Type appl…

oracle -239报错,解决: ./check_oracle_health --connect orcl --mode connection-time 报错的问题...

错误提示./check_oracle_health --connect orcl --mode connection-timeCRITICAL - cannot connect to orcl. install_driver(Oracle) failed: Cant locate DBD/Oracle.pm in INC (INC contains: . /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_per…

el-button 图标显示在字后边_Excel和Visio联姻,自动生成跨职能流程图,还能用图标标记状态,太牛了!...

正文共&#xff1a;1332 字 21 图预计阅读时间&#xff1a; 4 分钟Visio是Office软件系列中的负责绘制流程图和示意图的软件&#xff0c;创建具有专业外观的Visio图表&#xff0c;以便用户更好地理解和分析。企业管理中&#xff0c;业务流程在不同部门间流转&#xff0c;涉及提…

【SpringBoot笔记】SpringBoot整合Druid数据连接池

废话少说&#xff0c;按SpringBoot的老套路来。 【step1】&#xff1a;添加依赖 <!-- 数据库连接池 --> <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.25</version> </depende…

struts2中非表单标签的使用 componen

2. component标签 component标签用于使用自己的自定义组件&#xff0c;这是一个非常灵活的用法&#xff0c;如果经常需要使用某个效果片段&#xff0c;就可以考虑将这个效果片段定义成一个自定义组件&#xff0c;然后在页面中使用component标签来使用该自定义组件。因为使…

oracle 11g r2 rac中节点时间不同步,Oracle11gR2安装RAC错误之--时钟不同步

系统环境&#xff1a; 操作系统&#xff1a;RedHat EL5 Cluster&#xff1a; Oracle GI(Grid Infrastructure) Oracle&#xff1a; Oracle 11.2.0.1.0 如图所示&#xff1a;RAC 系统架系统环境&#xff1a;操作系统&#xff1a;RedHat EL5Cluster&#xff1a; Oracle GI(Grid I…

酒店预定系统

系统功能模块功能图 用例图 E-R图 转载于:https://www.cnblogs.com/qlly-20/p/9052461.html