♻️ 资源大小2.28MB➡️资源下载https://download.csdn.net/download/s1t16/87430294相机租赁系统设计目的《数据库系统原理》课程设计是软件工程和计算机科学与技术专业集中实践性环节之一旨在让同学们加深对数据库基础理论和基本知识的理解掌握设计数据库管理系统的基本方法锻炼运用知识解决实际问题的动手能力。任务与要求要求学生们从给定的设计题目中进行选择进行需求分析概念设计、逻辑设计数据库的设计过程表结构、表之间的关联给出视图的定义、触发器的定义、索引安全性的实现用 SQL 语句等在 SQL Server 2008 系统中实现数据库的数据输入查询更新和输出给出实现效果截图及部分测试结果。引言现在手机的拍照质量已经能够满足人们对于拍照的需求了但是共享相机应用的开发还是很有必要。手机拍照存在着很多的不足在一些场合像是出外旅游重要的场合拍照这些都需要专业的拍照设备。只有相机才能拍出质量高画面好的照片。不可否认的是手机拍照的优势简单实用场景广泛。只需要轻轻地按一下拍照键就能生成图片还配有各种各样的功能和表情丰富拍摄体验应对日常的自拍等。但是对于有时候对于要求高一点的时候手机拍照就显得不足。就需要专业的相机拍照来弥补。面对一些大场景的拍照特写手机拍出来的照片会比较的模糊成像不清晰噪点多等问题。而相机能够解决这些问题通过拍摄技巧的拍摄参数的设定便能解决这些问题。 共享相机应用面对的市场需求是手机拍照功能的不足相机流入渗透用户率低下的市场的状况所以共享相机应用的开发很有必要。需求分析系统调查的方法系统需求的调差方法为访谈法和亲自参加业务活动。在做系统之前亲自询问了在网上租赁过相机的同学了解相机租赁的基本流程和需要注意的步骤。自己也亲自上淘宝京东等网上商店体验了一遍相机租赁的流程。系统的主要任务是用户进行浏览、下单管理员管理用户、相机、订单实现对其的增删改查并把结果保存到数据库中。完整性要求防止不符合语义的数据进入数据库定义断言实现。安全性要求需要防止客户对数据进行未经授权的访问定义视图实现。性能要求最好能够实现并发访问允许多个用户同时对数据库中的数据进行访问。一致性要求防止数据库进入不一致状态。数据库要求各种各样的故障都可能发生出现意外时尽可能的确保任何数据在任何情况下都不会丢失。使用数据库镜像技术实现。业务流程用户登录系统浏览相机信息生成相应订单。用户可以对订单进行结算。管理员登录系统管理管理员信息、管理用户信息、管理相机信息、管理订单信息。管理员对相机进行检查可对相应订单进行加钱处理。管理员和用户可以相互切换。业务数据流图数据字典数据项数据项名含义说明别名数据类型长度取值范围与其他数据项的逻辑关系用户名客户的唯一标识客户名字符型45字母、数字无用户密码用户的密码无字符型45字母、数字无用户余额用户账户剩余的金额无双精度浮点型20数字、小数点、正负号无性别用户的性别无字符型2Man、Woman无联系电话用户的联系电话无字符型45数字无管理员名管理员的唯一标识无字符型45字母、数字无管理员密码管理员的密码我字符型45字母、数字无订单编号订单的唯一标识无字符型45数字无租相机数量租借相机的数量租借相机的数量整型20数字无总费用租借相机的总费用最终支付的费用双精度浮点型40数字小数点可由租赁天数、租赁数量、相机单价、唯爱费用计算得出相机单价相机的单价以天为单位无双精度浮点型40数字小数点无相机编号相机的唯一标识无字符型45数字无相机型号相机的型号无字符型45英文字符、数字无数据处理过程处理过程名输入{数据流}输出{数据流}处理说明登录系统用户输入的账号密码当前用户的信息根据数据库的信息验证账号密码是否对应对用户输入账号密码进行验证生成订单用户选择的相机信息生成好的相机订单信息生成订单编号打包成 SQL 语句发送给数据库系统根据用户输入生成订单修改用户信息管理员对用户信息的修改修改好的用户信息将对用户信息的处理包装成 SQL 语句发送给 MySQL系统根据管理员的操作对用户信息进行修改管理订单信息管理员对订单信息的修改修改好的订单信息将对订单信息的处理包装成 SQL 语句发送给 MySQL系统根据管理员的操作对订单信息进行修改管理相机信息管理员对相机信息进行修改修改好的相机信息将对相机信息的处理包装成 SQL 语句发送给 MySQL系统根据管理员的操作对相机信息进行修改系统功能描述登录功能用户输入账号密码系统根据数据库信息进行验证可用户可管理员交替登录用户浏览功能用户可查询、排序相机信息进行下单用户结单功能用户可结算自己的订单管理员管理用户功能对用户进行增删改查管理员管理相机功能对相机信息进行增删改查管理员管理订单功能对订单进行增删改查功能模块图系统设计数据库概念设计基本思想将需求分析得到的用户需求抽象为信息结构分析数据字典中数据字典间内在语义关联并将其抽象表示成数据的概念模式。建立一个更真实、充分反应现实世界易于理解、易于修改、易于向实际的 DBMS 支持的数据模型转换。原理方法采用自底向上的方法。定义各局部应用的概念结构然后逐步将他们集成起来最终得到全局概念模式。系统 E-R 图局部 ER 图用户相机订单管理员总体 ER 图系统设计系统应该具有权限设置、登录验证、相机信息浏览功能、以及管理各种信息功能。功能设计用户浏览功能用户可对相机信息进行查找、排序选择想要的信息。用户结算功能用户点击相应订单进行结算。管理员管理功能管理员可对数据库中的任何表做修改。切换登录功能管理员和用户可以相互切换登录。安全设计用户权限只有管理员才能对该数据库中的对象进行任何操作为了能让其它用户使用该数据库需要进行权限设置。访问权限为应用程序不同的部分建立不同的数据库账号, 使得它们职能对数据库对象行使非常有限的权限。对这些账号应该只赋予最需要的权限, 同时应该防止相同的用户能够在不同的使用情况与数据库进行交流。数据库逻辑设计基本思想将概念设计阶段设计好的全局 ER 图抓换成 DBMS 产品所支持的数据模型并进行规划化和优化为每个应用设计外模式。关系模式(有 × 的属性是主码)客户× 客户名密码余额联系电话性别管理员× 管理员名密码相机× 相机编号相机型号单价余量总量订单× 订单编号客户名租借数量相机编号归还日期额外加钱生成× 时间戳订单编号相机编号浏览× 时间戳客户名相机编号审核× 时间戳管理员名订单编号操作类型更新用户× 时间戳管理员名客户名操作类型管理× 时间戳管理员命相机编号操作类型说明虽然生成、浏览、审核、更新用户、管理等关系主码一样但它们是对应关系的主码是不一样的不能合并。对应的英文关系模式customs(user_name,user_password,balance,phone,sex) admins(admin_name, admin_password) cameras(camera_no, name, total_num, rent_num, price) indents(order_no, user_name, rent_num, camera_no, start_time, rent_time, extra_charge) manage(admin_name, camera_no, time, operate) update_user(admin_name, custom_name, time, operate) browse(user_name, camera_no, time)数据库物理结构设计物理设计的基本思想根据逻辑设计出的逻辑模式DBMS 及计算机系统所提供的手段和施加的限制设计数据库的内模式即文件结构各种路径控件分配记录的存取方式等为逻辑数据结构选取一个最合适的应用环境的物理结构。用户基本信息数据项名数据类型说明user_namevarchar(45)用户的名称是用户的唯一标识user_passwordvarchar(45)用户密码balancefloat用户钱包里的余额sexvarchar(45)性别取值为 man 或 womanphonevarchar(45)联系电话管理员基本信息数据项名数据类型说明admin_namevarchar(45)管理员名唯一标识admin_passwordvarchar(45)管理员密码订单基本信息数据项名数据类型说明order_novarchar(45)订单编号唯一标识user_namevarchar(45)下该订单的用户名是外键rent_numint(11)租借相机的数量camera_novarchar(45)该订单中相机的编号start_timeint(11)租赁相机开始的时间rent_timeint(11)租赁相机归还的时间extra_chargeint(11)额外支付的费用rent_daysint(11)租借天数可由 start_time-rent_time 得出final_chargeint(11)最终用户支付的费用是派生属性相机基本信息数据项名数据类型说明camera_novarchar(45)相机编号相机的唯一标识namevarchar(45)相机品牌total_numint(11)库存量rent_numint(11)已租借量priceint(11)相机日租金建立的索引# 在customs表的balance属性上建立索引 create index customs_balance_index on customs(balance); # 在cameras表的price属性上建立索引 create index cameras_price_index on cameras(price);系统功能设计功能模块图及说明、安全设计、系统结构图及说明等数据库实施数据库实施包括建立数据库模式、加载数据。admins 表的定义CREATE TABLE admins (admin_name varchar(45) NOT NULL, admin_password varchar(45) NOT NULL, PRIMARY KEY (admin_name), UNIQUE KEY admin_name_UNIQUE (admin_name))cameras 表的定义CREATE TABLE cameras (camera_no varchar(45) NOT NULL, name varchar(45) DEFAULT NULL, total_num int(11) DEFAULT NULL, rent_num int(11) DEFAULT NULL, price int(11) DEFAULT NULL, PRIMARY KEY (camera_no), UNIQUE KEY carid_UNIQUE (camera_no), KEY cameras_price_index (price));customs 表的定义CREATE TABLE customs ( user_name varchar(45) NOT NULL, user_password varchar(45) NOT NULL, balance float DEFAULT NULL, sex varchar(45) DEFAULT NULL, phone varchar(45) DEFAULT NULL, PRIMARY KEY (user_name), UNIQUE KEY user_name_UNIQUE (user_name),KEY customs_balance_index (balance));indents 表的定义CREATE TABLE indents (order_no varchar(45) NOT NULL, user_name varchar(45) NOT NULL,rent_num int(11) DEFAULT NULL, camera_no varchar(45) NOT NULL, start_time int(11) DEFAULT NULL, rent_time int(11) DEFAULT NULL, extra_charge int(11) DEFAULT NULL, PRIMARY KEY (order_no), UNIQUE KEY id_UNIQUE (order_no), KEY fk_indent_1 (user_name), KEY fk_indent_2 (camera_no), CONSTRAINT fk_indent_1 FOREIGN KEY (user_name) REFERENCES customs (user_name) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT fk_indent_2 FOREIGN KEY (camera_no) REFERENCES cameras (camera_no) ON DELETE NO ACTION ON UPDATE NO ACTION);browse 表的定义CREATE TABLE browse ( user_name varchar(45) DEFAULT NULL, camera_no varchar(45) DEFAULT NULL, time int(11) NOT NULL, PRIMARY KEY (time), UNIQUE KEY time_UNIQUE (time), KEY fk_browse_1_idx (camera_no), KEY fk_browse_2 (user_name), CONSTRAINT fk_browse_1 FOREIGN KEY (camera_no) REFERENCES cameras (camera_no) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT fk_browse_2 FOREIGN KEY (user_name) REFERENCES customs (user_name) ON DELETE NO ACTION ON UPDATE NO ACTION)manage 表的定义CREATE TABLE manage ( admin_name varchar(45) DEFAULT NULL, camera_no varchar(45) DEFAULT NULL, time int(11) NOT NULL, operate varchar(45) DEFAULT NULL,PRIMARY KEY (time),UNIQUE KEY time_UNIQUE (time),KEY fk_manage_1 (admin_name), CONSTRAINT fk_manage_1 FOREIGN KEY (admin_name) REFERENCES admins (admin_name) ON DELETE NO ACTION ON UPDATE NO ACTION);update_user 表的定义CREATE TABLE update_user ( admin_name varchar(45) DEFAULT NULL, custom_name varchar(45) DEFAULT NULL, time int(11) NOT NULL,operate varchar(45) DEFAULT NULL, PRIMARY KEY (time), KEY fk_update_1 (admin_name), CONSTRAINT fk_update_1 FOREIGN KEY (admin_name) REFERENCES admins (admin_name) ON DELETE NO ACTION ON UPDATE NO ACTION); # 建立触发器保证租借数量不大于总量。触发器实现断言功能 use czs; drop trigger camera_total_gt_rent; delimiter $$ create trigger camera_total_gt_rent after update on cameras for each row begin DECLARE msg VARCHAR(200); if new.rent_num new.total_num then set msg concat(库存不足已租赁数量总量, old.rent_num, new.total_num); signal sqlstate HY000 set message_text msg; end if; end; $$ delimiter ; # 触发器 # 当生成新的订单更改cameras表中的rent_num数量。 drop trigger update_camera_rent_num; delimiter $$ create trigger update_camera_rent_num after insert on indents for each row begin update cameras set rent_num new.rent_numcameras.rent_num where camera_no new.camera_no; end; $$ delimiter ; # 创建我的订单视图显示的信息很全 drop view my_indent; create view my_indent(order_no, user_name, camera_no, rent_num, price, start_time, rent_time, rent_days, rent_charge, extra_charge, finall_charge) as select order_no, user_name, indents.camera_no, indents.rent_num, price, start_time, rent_time, (rent_time-start_time)/(24*60*60), indents.rent_num*(rent_time-start_time)/(24*60*60)*price, extra_charge, indents.rent_num*(rent_time-start_time)/(24*60*60)*price extra_charge from indents, cameras where indents.camera_no cameras.camera_no;系统调试和测试登录界面管理管理员信息界面管理用户信息界面管理相机信息界面查询相机型号为 Canon 的相机信息管理订单界面对订单按总费用进行从高到低排序查找用户 czs 的所有订单信息用户切换功能用户按相机租金从小到大排序显示当前客户的订单结算成功界面满足需求分析的要求系统评价系统特色用户切换功能有了这个功能就可以不重新打开界面就切换用户登录或者管理员登录查询功能用户可以直接输入想要租借的相机类型系统直接查询出所有该类型的相机信息方便用户查看、比较、选择。排序功能用户可以排序方便用户选择相机。比如可以对相机的单价进行排序选择出最便宜的相机点击订单进行下载。自动刷新功能当用户完成订单后、管理员对用户信息、相机信息、订单信息进行增删改查后及时更新显示界面不用再手动刷新了。后台自动记录浏览记录功能当用户完成下单后触发器自动往用户浏览记录表中插入用户下单的信息当用户结单后订单信息自动删除后也能在浏览记录中查到已结算的订单当管理员对用户信息、相机信息、订单信息进行增删改查后自动保存修改记录记录信息有时间戳、旧信息、信息信息、操作类型等。让所有操作都有迹可循防止用户的非法输入以及管理员的错误操作。用时间戳作为主码时间戳是 1970 年 1 月 1 日到现在的秒数。这个数是唯一的用它作为订单的主码很合适。只要订单不是在同一秒同生成的那么他的订单编号就是不同的因为时间戳不同。用时间戳作为主码还很方便转换为时间C 有直接的转换函数把时间戳转换成自己想要的时间显示格式。系统不足及改进不足之处前台没有显示用户及管理严的操作记录。不过也好做只需在前台显示记录表的信息就可以了不能开放删除、修改功能操作记录只能增加不能删除、修改设计心得MySQL 无法实现断言功能这个是 MySQL 的特性MySQL 设计时都没有设计断言不过可以用触发器来实现断言功能。比如我上面写的用触发器实现防止已租借数量大于总数量的断言功能。代码如下# 建立触发器保证租借数量不大于总量。触发器实现断言功能 use czs; drop trigger camera_total_gt_rent; delimiter $$ create trigger camera_total_gt_rent after update on cameras for each row begin DECLARE msg VARCHAR(200); if new.rent_num new.total_num then set msg concat(库存不足已租赁数量总量, old.rent_num, new.total_num); signal sqlstate HY000 set message_text msg; end if; end; $$ delimiter ;Qt Creator 无法连接到数据库。报错QSqlDatabase: QMYSQL driver not loadedQt Creator 编译器默认没有 MySQL 数据库的驱动器如果自己下载 Qt 源码可以自己编译 MySQL 的驱动器如果是 WIndows 系统可以上网查 MySQL 的动态链接库放到 Qt Creator 的目录下。往 MySQL 发送语句没有执行成功如果要查询的信息有 varchar 类型命令要加双引号还要用\转义下。如下QString command QString(select user_password from customs where user_name %1).arg(user_name);无法对视图进行更新如果视图是由多个基本表构建的则不允许更新该视图只能更新基本表。对基本表的修改会体现在视图上。想想也是视图中的总金额是由单价和天数得出来的。如果更新总金额那基本表中的单价和天数应该如何更新一个数进行因式分解不止有一个可能所以禁止更新视图。时间显示问题数据库中的 date 类型和 Qt 中的 QDateTime 类型不太一样直接转换效果不太好。用时间戳作为媒介就完整解决了这个问题。系统可以获取当前的时间戳它是无符号整型数据库中的时间也设置成整型这样就完美的解决了时间不兼容的问题。从数据库中读取整型类型的时间戳在前端系统中用.from_t()函数将其转换为 QDateTime 类型的数据即时间类型的数据接下来就很方便在前段显示了。