zl程序教程

您现在的位置是:首页 >  工具

当前栏目

基于QT(C++)+SQL Server 2008 实现相机租赁系统【100010742】

QtC++serverSQL系统 实现 基于 相机
2023-09-11 14:17:49 时间

相机租赁系统

设计目的

《数据库系统原理》课程设计是软件工程和计算机科学与技术专业集中实践性环节之一,旨在让同学们加深对数据库基础理论和基本知识的理解,掌握设计数据库管理系统的基本方法,锻炼运用知识解决实际问题的动手能力。

任务与要求

要求学生们从给定的设计题目中进行选择,进行需求分析,概念设计、逻辑设计,数据库的设计过程,表结构、表之间的关联,给出视图的定义、触发器的定义、索引,安全性的实现,用 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 或 woman
phonevarchar(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_num+cameras.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 的所有订单信息:

用户切换功能:

用户按相机租金从小到大排序:

显示当前客户的订单:

结算成功界面:

满足需求分析的要求!

♻️ 资源

在这里插入图片描述

大小: 2.28MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87430294
注:如当前文章或代码侵犯了您的权益,请私信作者删除!