Qt+MySQL实现数据库图书管理系统

实验 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;

     

//QTextEditQLabel的文字

 

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);

  • 8
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值