基于MATLAB,GUI的图书管理系统设计

方文雄,纪旭,何鑫海

(1.成都工业学院汽车与交通学院,四川成都 611730;
2.成都工业学院自动化与电气工程学院,四川成都 611730)

MATLAB GUI 为图形用户界面(Graphical User Interface,简称GUI,又称图形用户接口)[1]是指采用图形方式显示的计算机操作用户界面,是MATLAB 用户可视化交互式的工具,运用GUI 生成的操作界面用户可以不用浏览繁冗的代码而进行操作。GUI不仅深受用户的喜爱[2]也是工程人员运用MATLAB进行可视化编程的捷径,工程人员只需要拖动相应的工具,编写回调函数即可[3-5],同时可生成独立的.exe 文件,用户不需要安装庞大的MATLAB 软件就可以运行程序。随着我国文化事业不断发展,图书资源也日益丰富,像农家书屋、小型书店也日益增多[6],该图书管理系统使用MATLAB GUI编程实现,可实际应用于书店、农家书屋对图书资源进行管理,具有使用简单、快捷高效的特点。

如今技术人员已开发出许多类型的图书管理系统,总的来说普遍具有如下功能:图书信息录入及查询[7]、图书信息更改[8]、图书流动操作[9]等,但大都缺少系统登录功能,具有登录功能的图书管理系统有利于保护用户隐私。结合上述,本系统具有以下功能:

1)用户登录或注册

登录界面含有登录、注册、找回密码选项。若第一次使用需要注册账号,注册时需要填写密保问题,以便于在忘记密码时找回密码。用户拥有账号后输入账号和密码进行登录,若忘记密码可选择找回密码。

2)图书信息录入

在用户完成了图书信息的输入后,点击录入操作按钮,可完成书籍信息入库。

3)图书信息查询

用户可选择按书名、作者、ISBN号等检索方式进行查询。

4)图书信息变更

如果用户需要修改已录入的图书信息,先查询要修改的图书信息,可在显示查询结果的表格中点击要修改信息的单元格,选择删除或更改按钮按下,完成信息更改。

5)图书出售或出借、归还

输入折扣或日租金信息,按下出售按钮,即可自动计算之前录入的图书价格乘以折扣的结果,并显示在收费金额框中;
按下借出按钮,弹出对话框用于接收借出人登记的信息,同时自动记录下借出时间;
按下归还按钮,自动计算出出借天数,再根据输入的日租金自动计算总租金,显示在收费金额框中。

图1 系统功能使用流程

在MATLAB中,可采用以下3种可行方式对图书信息进行存储:

1)基于结构数组的存储模式

在MATLAB中,结构体数组是使用名为字段的数据容器将相关数据组合在一起的数据类型,每个字段都可以包含任意类型的数据,类似于C 语言中的结构体。定义时像使用一样MATLAB变量一样,可以直接定义,不需要事先声明,支持动态扩充,因此将结构数组作为图书信息的存储载体,在使用过程中是十分方便的。

对其进行数据查询和记录操作也是十分方便,可以使用structName.fieldName格式的圆点表示法来访问字段中的数据,也可以利用MATLAB 函数setfield 和getfield 进行索引和存取[10]。在结构数组模式中引用数据也像变量操作一样便捷。

2)基于Execl的存储模式

Execl 是广为使用的办公软件,Execl 表格具有存储数据的功能,将数据存储在Execl表格中可以利用Execl强大的数据处理分析能力,对图书的销售数据、出借信息等进行直观的分析[11],并且Execl 在图书管理中也得到了实际应用[12]。而在MATLAB 中对Execl 表格的操作具有很好的便利性,利用函数可以方便地读取Execl表格中的信息。

例如使用xlsread()函数读取数据,[NUM,TXT,RAW]=xlsread("sheetName"),其中sheetName 是Excel 文件名,NUM 是Excel 中的数据内容,TXT 是Excel 中文本内容,RAW 是未处理数据。对于Excel的写入需要用到的函数是xlswrite(filename,A,sheet-Name,xlRange)。其中filename为写入的Excel文件名,A为写入的内容,sheetName 为指定的工作表名,xlRange 为写入的范围。本系统就是基于Execl文件为存储载体。

3)基于数据库存储模式

数据库已经成为人们生活中不可或缺的基础软件系统,在数据库领域,数据从组织的角度上,主要分为结构化数据和非结构化数据两类。结构化数据是带有固定结构的数据,在组织形式上是整齐格式化的,同一数据对象的所有数据都具有完全相同的结构。比如书籍信息数据,定义为“ISBN号、书名、作者、价格”这种结构后,所有书籍的信息都会按照这个固定的格式来组织。结构化数据是数据库中最常见的数据,也是数据库最擅长处理的数据。

Oracle 数据库是目前主流的数据库之一,在Matlab 开发环境下,有ODBC、JDBC 和ADO 三种数据库访问方式均可与Oracle 数据库进行数据交互,如文献[13-14]详细介绍了MATLAB与Oracle数据库交互使用。将书籍信息存储于数据库中,对海量信息进行管理是高效可行的办法。

4.1 用户注册模块设计

此模块目标功能为实现账号注册,同时注册时收集密保问题。将面板、静态文本、可编辑文本、按钮等组件构成如图2界面。

图2 注册界面设计

在编写完成按钮回调函数时,应注意检测新注册的账号是否已注册过,同时考虑各可编辑文本输入的内容完整、合法。现给出完成按钮回调函数主体内容:

str1=get(handles.edit1,"string");%获取可编辑文本框账号内容

str2=get(handles.edit2,"string");%获取可编辑文本框密码内容

str3=get(handles.edit3,"string");%获取可编辑文本框问题内容

str4=get(handles.edit4,"string");%获取可编辑文本框答案内容

data=xlsread("user","Sheet1");%读取用户表

num1=str2num(str1);%转化字符为数字

num2=str2num(str2);

xlswrite("user",{num1 num2 str3 str4},"Sheet1",

...["A" num2str(dn+1) ":D" num2str(dn+1)])%注册信息写入用户表

data=xlsread("user","Sheet1");%读取用户表

dn=size(data,1);%得到新写入用户所在行

if isempty(data(dn,1))%检查是否完整写入新用户信息

warndlg("注册未成功!","错误","modal")

4.2 用户登录模块设计

此模块目标功能为实现账号登录,同时具有找回密码、下次登录记住密码、密码输入显示加密、输入框灰色提示等功能。其中设计难点为下次登录记住密码、密码输入显示加密、输入框灰色提示。将静态文本、可编辑文本、按钮等组件构成如图3界面。

图3 登录界面设计

下次登录记住密码,当登录信息比对成功后,弹出“是否记住密码”对话框,点击“是”,即可记住账号和密码。下次登录时,自动在账号和密码对话框输入上次登录的账号与密码,即可直接登录。实现此功能依托于存储下是否记住账号和密码的选择状态和此次登录的账号与密码,将这些信息存储为MATLAB中.mat文件。关键代码如下:

如果选择了“是”将本次登录的账号和密码存储为.mat 文件,其中login 为.mat 文件名,account 为账号变量名其值为账号,password为密码变量名其值为密码。下次登录时直接加载.mat文件的账号与密码登录。

密码输入显示加密,指输入密码时显示出特殊字符。可设置Edit Text 控件的属性FontName 来完成密码隐藏功能。双击用作输入密码的Edit Text 控件,打开其属性设置面板,找到属性FontName,默认的字体名为MS Sans Serif,将字体改为Symbol,即可完成密码隐藏功能。效果如图4所示。

输入框灰色提示,指输入框有淡灰色提示内容,点击输入框时,提示内容消失。实现此功能的思路为先预设账号文本框的"ForegroundColor"属性为[0.8 0.8 0.8]显示为灰色,再编写账号文本框的KeyPressF 回调函数,KeyPressF 回调函数在鼠标光标键入文本框时被触发执行,回调函数如下:

set(hObject,"string",[],"Enable","on");

%清除预设内容

set(hObject,"ForegroundColor",[0,0,0]);

%将文本字体调回黑色

uicontrol(hObject);

%继续控制GUI界面。

值得注意的是,如果少了第三句,当点击输入框时,前两行代码正常执行,提示内容消失,但当键盘开始输入时,输入内容会输入在MATLAB的命令行窗口。

4.3 图书管理模块设计

此模块目标功能为实现图书信息录入、图书信息查询、图书借出归还登记、借出租金计算。此模块界面设计为录入、查询、流动三个选项卡,点击其中之一选项卡显示出其对应的功能界面。该模块设计难点为分选项卡显示不同界面、“弹出式菜单”构件选项选择定位、“表”构件的行列定位。将静态文本、可编辑文本、弹出式菜单、表、按钮等组件构成图6、图7、图8界面。

图7 查询界面设计

图8 流动界面设计

图6 中涉及点击不同选项卡时,显示不同界面,例如点击“查询”选项时才显示查询界面。分选项卡显示不同界面,实质是设置三个菜单选项,点击一个菜单选项时将另外两个菜单界面隐藏,达到只显示一个菜单界面的效果。具体过程为,除录入界面构件外(默认显示录入界面),修改所有构件Visible 属性,将所有的可编辑文本、静态文本、表、弹出式菜单和按钮的Visible 属性改为Off。再对三个菜单的Callback 回调函数进行编程,以录入菜单回调函数为例,将Callback 回调函数内容设置为所有的录入界面构件Visible 属性改为ON,其他菜单界面构建Visible属性改为Off,当点击录入菜单选项卡时,执行录入Callback回调函数,只显示录入界面,而隐藏其他两个界面。

图7中查询时需要使用到弹出式菜单构件,而弹出式菜单的选项选择定位是通过它的Value 属性值来定位的,例如弹出式菜单依次有“书名”“作者”“ISBN”号三个选项,当选择了“作者”选项时,其Value属性值为2。需要强调的是,弹出式菜单可以理解为是一个“数组”,选择的是第几个元素,那么返回的就是这个元素在这个“数组”中所在的位置。所以在使用弹出式菜单时需要预设选项数组,才能定位所选选项,代码如下:

图8中涉及“表”的行列定位,在对图书进行出售、出借、归还登记要点击表中需要操作的书籍,此时就需要对所点击单元格进行定位,即获取点击的是哪一行哪一列,从而判断需要进行操作的是哪一本书籍。其中关键涉及对handles结构体的理解,handles结构体是一个以GUI中所有控件的Tag属性为字段的结构体,handles.控件A的tag 就可以存取控件A的信息。为了将所点击单元格的行列值存储下来并可被其他控件所调用,先获取所点击单元格的行列值,再给handles 结构体中添加新的hangIndex、lieIndex属性存储行列值,在其他控件中使用handles.hangIndex 就可以获取行值,需要使用guidata(hObject,handles)函数来保存对handles添加属性的更改操作,给出如下具体代码进行说明:

MATLAB GUI 编程具有易上手的特点,但需要掌握各种构件的基本属性才能灵活使用GUI 进行编程。通过介绍MATLAB 中图书信息数据的3种存储方式,并使用GUI 对图书管理系统进行设计,着重讲解设计过程的难点问题,对使用MATLAB GUI 编程具有借鉴和指导作用。同时此管理系统已获得软件著作权并线下应用于书店,得到实际检验。

猜你喜欢 菜单账号界面 不同截面类型钢管RPC界面粘结性能对比研究建材发展导向(2022年5期)2022-04-18玩游戏没账号租一个就行电脑爱好者(2021年24期)2021-09-09微重力下两相控温型储液器内气液界面仿真分析北京航空航天大学学报(2021年6期)2021-07-20施诈计骗走游戏账号派出所工作(2021年4期)2021-05-17国企党委前置研究的“四个界面”当代陕西(2020年13期)2020-08-24中国新年菜单疯狂英语·新悦读(2020年1期)2020-02-20本月菜单美食堂(2017年1期)2017-01-13Google Play游戏取消账号绑定没有Google账号也能玩CHIP新电脑(2016年3期)2016-03-10一个“公海龟”的求偶菜单鸭绿江(2013年10期)2013-03-11给骗子汇款小小说月刊(2010年6期)2010-11-22