赞
踩
实验 5 数据库程序设计
一、实验目的
1、 设计并实现一个精简的图书管理系统,具有入库、查询、借书、还书、借书证管理等基本功能。
2、 通过本次设计来加深对数据库的了解和使用,同时提高自身的系统编程能力。
二、实验平台
开发工具:Qt creator 4.0.1(Qt版本:5.6.1 MSVC 2013,32bits)
数据库平台:MySQL5.7
实验平台:Windows10
三、总体设计
1、系统架构描述
本系统主要包括以下模块/功能:
(1)使用须知
(2)注册
(3)用户登录
(4)管理员登陆
(5)图书查询
(6)借书
(7)还书
(8)显示所有书籍
(9)新书入库
(10)书籍排序
(11)查看借阅情况
(12)查看用户表
(13)删除用户(收回权限)
其中(1)、(2)、(5)属于公用功能,也就是说,任何使用这款软件的人都可以查看使用须知、注册以及查询图书信息;(3)、(6)、(7)为用户设计,只有注册过的用户才能借书、还书。余下的模块/功能为管理员设计,是本系统中最复杂的部分。
需要说明的是,我没有设计管理员注册模块,因为在实际的应用情境中,显然不是随便一个人都能通过注册成为某个系统的管理员,所以,管理员权限由我这个"最高的管理员"直接在数据库中添加,从而防止了使用过程中可能出现的安全问题。
系统处理基本流程如下:
下面用表格的形式对各模块功能说明如下:
使用须知 |
点击后弹出使用须知。 |
注册 |
用于用户注册,供用户输入用户名、密码、并确认密码。只有注册后方可借书。 |
用户登录 |
用户登录。 |
管理员登陆 |
管理员登陆。 |
图书查询 |
可在输入栏中输入书籍名称,点击"点我搜索"按钮查询这本书的信息。(如果数据库中有这本书) |
借书 |
用于用户借书。 |
还书 |
用于用户还书。 |
显示所有书籍 |
进入管理员界面后方可使用,点击显示库存所有书籍。 |
新书入库 |
进入管理员界面后方可使用,可输入书籍信息,点击"提交书记入库信息"按钮完成新书入库。 |
书籍排序 |
进入管理员界面后方可使用,点击"书籍排序"按钮按库存量从小到大对书籍排序。方便管理员掌握书记库存情况。 |
查看借阅情况 |
进入管理员界面后方可使用,查看用户节约情况。 |
查看用户表 |
进入管理员界面后方可使用,查看注册的用户信息。 |
删除用户 |
进入管理员界面后方可使用,删除用户。 |
2、数据库表设计
数据库表设计是本次大作业中比较重要的一环,但是这个工作并不复杂。本次作业我新建了一个叫mybms(my book management system)的数据库,并定义了如下表格:
(1)管理员表(manager):
manager_name |
password |
其中manager_name是主键。各个属性从左到右依次表示:管理员名字、管理员密码。
(2)用户表(user):
user_name |
password |
其中user_name是主键。各个属性从左到右依次表示:用户名字、用户密码。
(3)书籍信息表(book):
book_id |
book_name |
author_name |
press_name |
price |
storage |
其中book_id是主键。各个属性从左到右依次表示:书籍编号、书名、作者名、出版社名、价格和库存量。
(4)借阅表(loan):
loan_id |
book_id |
book_name |
user_name |
其中loan_id是主键,book_id是外键,参照book表。各个属性从左到右依次表示:借阅编号、书籍编号、书名、用户名(即借阅者的名字)。
相关的SQL代码如下:
create database `mybms`;
use `mybms`;
create table `manager`(
`manager_name` varchar(15) primary key,
`password` varchar(20) not null
);
create table `user`(
`user_name` varchar(15) primary key,
`password` varchar(20) not null
);
create table `book`(
`book_id` char(5) primary key,
`book_name` varchar(20) not null,
`author_name` varchar(20),
`press_name` varchar(20),
`price` float,
`storage` int(12)
);
create table `loan`(
`loan_id` char(5) primary key,
`book_id` char(5),
`book_name` varchar(20),
`user_name` varchar(15),
foreign key(`book_id`) references `book`(`book_id`)
);
3、所用开发技术
(1)MySQL
MySQL是一款知名的开源关系型数据库管理系统,这次作业用到的MySQL的知识并不复杂,关键是要想清楚每张表需要什么数据以及每个数据的类型,为了配合Qt的QString类使用,我把大部分的数据都定义成了char。
(2)Qt
Qt本质上是一个C++的框架,用来写图形界面非常方便。使用Qt自己的IDE:QtCreator更加体现了Qt GUI编程的方便性。Qt Creator提供了所谓的"设计模式",在这个模式下程序员可以像画画一样用现成的控件进行布局,本程序的主界面就是用这种方式完成的。
四、详细设计
1.界面布局
1.1主界面
采用Qt Creator的设计模式布局,在QMainWindow类下包含了:QWidget、QPushButton、QLabel、QTabelView、QLineEdit等控件,其中QWidget是整个窗口,QPushButton是按钮,QLabel是标签,QTabelView是中间的表格,QLineEdit用来输入文字,可以被当成一个输入框。
为了界面的美观,添加了Qt资源文件(背景图)。实现背景效果的方法是:右键单击设计模式界面,选择"改变样式表",在选择资源选项中选中需要添加的图片,这里可以根据需要把图片设置成border-image或者background,我选择的是border-image。之后还有一个很重要的细节是,把当前窗口中的那行代码改成:#centralWidget{border-image: url(:/image/images/bkg_sea.png);}(如下图所示),它表示仅对centralWidget控件进行背景填充,这里的centralWidget是我自己起的名字,其实就是上文的QWidget。如果不这样设定的话,设计模式下的每个控件都会被填充上背景图,看上去非常丑。
1.2用户界面
如下图所示,用户登录以后进入用户界面:
(图被CSDN吃了)
界面提示用户使用图书管理系统要遵守的一些规定,在最下方,用户可以输入书名进行借阅或者归还,借阅成功、节约失败、归还成功、归还失败都会有相应的对话框提示。(由于这里是讲界面布局,所以具体功能将留到"3.功能实现"叙述)
实现这个界面的主要代码如下:
//用户界面
voidMainWindow::goto_ufunction_window(boolflag){
if(flag==0)
return;
else{
//必要的初始化
ufunction_window=newQWidget();
ufunction_warning_txtedit=newQTextEdit;
ufunction_borrow_lb=newQLabel;
ufunction_return_lb=newQLabel;
ufunction_borrow_le=newQLineEdit;
ufunction_return_le=newQLineEdit;
ufunction_borrow_btn=newQPushButton(tr("点击借阅"));
ufunction_return_btn=newQPushButton(tr("点击归还"));
ufunction_vblo_main=newQVBoxLayout;
ufunction_hblo_bottom=newQHBoxLayout;
//QTextEdit和QLabel的文字
ufunction_window->setWindowTitle(tr("您已进入用户界面"));
ufunction_warning_txtedit->setText(tr("尊敬的用户,为了您和他人的使用方便,请遵守以下规定:"
"\n"
"1、请勿损坏书籍;"
"\n"
"2、请勿逾期不还;"
"\n"
"3、如果违反,管理员有权注销您的借书权限!"));
ufunction_borrow_lb->setText(tr("输入需要借阅的书籍编号:"));
ufunction_return_lb->setText(tr("输入需要归还的书籍编号:"));
//布局
ufunction_hblo_bottom->addStretch();
ufunction_hblo_bottom->addWidget(ufunction_borrow_lb);
ufunction_hblo_bottom->addWidget(ufunction_borrow_le);
ufunction_hblo_bottom->addWidget(ufunction_borrow_btn);
ufunction_hblo_bottom->addStretch();
ufunction_hblo_bottom->addWidget(ufunction_return_lb);
ufunction_hblo_bottom->addWidget(ufunction_return_le);
ufunction_hblo_bottom->addWidget(ufunction_return_btn);
ufunction_hblo_bottom->addStretch();
//给布局添加控件
ufunction_vblo_main->addWidget(ufunction_warning_txtedit,Qt::AlignHCenter);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。