【管理系统】图书管理系统的模拟实现及图形化显示

图书管理系统的模拟实现及图形化显示

1 项目实施目的

通过图书管理系统,实现对各类图书信息的录入以及查看,对已变更信息的图书信息进行修改,对最新入库的书籍进行图书数据库的增加,对出库的图书进行数据库的删除,形成一个比较完善的虚拟图书管理系统,以便于图书管理员对图书信息进行管理。为了更加直观地反应图书的库存问题,制作出可以显示书籍库存的柱状图,以及关于各类书籍所占总库存的百分比饼图,让管理员和读者更加直观的了解图书馆藏书情况,实现了传统的图书管理工作和信息化的结合。

2 项目选题简介

C语言部分主要是建立一个模拟的数据库,我们主要完成的功能有以下几项:一.对所有图书信息的录入,每一条记录都由图书的编号,书名,出版单位,价格,数量组成;二完成图书的修改和删除,先根据输入的图书名找到该名的所以书籍,在提示使用者填入要修改的记录序号,根据序号找到需要修改的书籍,重新输入图书的信息覆盖前面的信息内容;三查询需要的书籍;四对所有入库书籍的展示,方便观察是否录入信息正确;四将记录存入到txt文件。
Java部分我们主要是以C语言形成的模拟数据库作为数据来源,完成图形化的输出,我们主要做了以下几部分:一绘制出一个信息表格(数据改变表格也可随之改变),展示出图书的代号,书籍名称,作者名,出版社,以价格和库中剩余的图书数目;二绘制出了价格作为纵坐标,书籍名作为横坐标的柱形图;三绘制出了剩余数量占总库存的百分比饼图。

3 图书系统(C语言部分)实施过程

3.1 系统的总体设计

图书馆管理系统主要包含六大功能:
(1) 对图书信息进行录入添加
(2) 对所有图书信息进行整体查看
(3) 查询指定图书的信息
(4) 修改指定图书的代号/书名/作者名/出版单位/价格/剩余数量(修改记录)
(5) 删除指定图书信息(删除记录)
(6) 将图书信息输出到TXT文件
<如下图所示>

在这里插入图片描述所提到的功能结构图

3.2. 系统详细设计

1.C语言部分代码实现功能的简单介绍:
C语言部分要求建立一个模拟的数据库,所以主要目标就是数据库功能的实现。我们主要运用的是链表完成的任务。我完成的是图书管理系统的修改删除;用户界面图书信息的全览;和图书情况的txt文件输出。
第一步我运用一个结构体根据生活中的图书管理需求,结构体中的主要信息包括书籍名称,作者名称,出版社,以价格和库中剩余的图书数目,这些构成了链表的数据域,加上链表的指针域构成链表最关键的节点。第二步我运用循环while完成所需要的节点查找然后引导用户填入新的内容覆盖掉前面的修改前的信息,完成图书的修改工作。第三步我运用txt文件写入函数,将图书信息打印到文件中。

2.详解
//节点的设立
在这里插入图片描述

图3-2.1 节点的设立

我运用一个结构体根据生活中的图书管理需求,结构体中的主要信息包括书籍名称,作者名称,出版社,以价格和库中剩余的图书数目,这些构成了链表的数据域,加上链表的指针域构成链表最关键的节点

//以下是所有的自定义函数
在这里插入图片描述

图3-2.2 函数汇总图

主函数中设定了13个函数,其中void amend_book(); 是修改图书,
void del_book(); 是删除图书 ,void print_book(); 是图书的总览 ,void save_book(struct BOOK *p); 是将图书信息存入文件 ,void over_next(); 是读取上面储存的二进制文件,保存成十进制文件<这块函数是一个修改美化的函数,当时遇到问题,txt文件输出时发生问题因为储存为二进制方便文件的修改但输出时也是二进制,这个函数的作用就是把二进制转化成我们熟悉的十进制,使我们更加方便的了解图书馆藏书的情况。>

//修改图书信息
在这里插入图片描述
图3-2.3 修改函数的完成流程图

引导用户输入所要修改的图书名,如果未查询到所需要修改的图书显示输入错误,如果找到多个该名书籍信息,显示所有该名的图书信息,根据前面的序号

引导用户找到准确需要修改的图书。这里使用到while循环。多次提示引导增加人机互动性。
在这里插入图片描述
图3-2.4 找到链表表头

在这里插入图片描述
图3-2.5 判断是否和已有的信息相同
这里利用循环当链表没有指向链表尾并且要修改书名和库里储存的信息相同时进行循环找到所以和输入书名相同的书籍信息并输出。

在这里插入图片描述

图3-2.6引导用户重新填写书籍信息完成修改
//删除图书信息
在这里插入图片描述

图3-2.7 删除函数流程图
用scanf函数输入想要删除的商品名称。此时用if+while循环加条件判断strcmp(a,sp[i].name)==0找出该商品对应的位置p,然后系统会提示是否删除该商品,确定删除free释放空间,完成删除。
在这里插入图片描述

图3-2.7拥有free释放空间完成信息的删除
引导用户输入所要删除的图书名,如果未查询到所需要删除的图书显示输入错误,如果找到多个该名书籍信息,显示所有该名的图书信息,根据前面的序号引导用户找到准确需要修删除的图书。这里使用到循if—else。多次提示引导增加人机互动性。
//图书总览
在这里插入图片描述

图3-2.8总览图书信息
如果头指针不等于空则开启循环,利用循环的特性把所有书籍都打印到页面上,完成总览功能。

//把信息传入到txt
先以只读读的方式打开文件,如果打开失败,说明文件原先不存在。用fwrite将图书信息以二进制全部写入文件。如果打开成功,说明文件原先存在,这时以追加的方式(a+)写入文件。操作完成后,关闭文件夹。
在这里插入图片描述

图3-2.9存入txt文件的图书信息二进制转化成十进制
//退出程序
在这里插入图片描述

3.3 程序的调试和测试

(1):一开始不知道如何将所有功能循环起来实现,后来想通了,用链表和循环确定每一个的位置。后来在每个功能之前都加入system(“cls”)函数并且进行了界面优化,看起来就比较整齐:
在这里插入图片描述

图3-3.1 现功能列表
(2)写读写文件函数的时候,用的是fread和fwrite,将结构体整块地进行读写很方便,但是用记事本打开的时候除了数字部分都会会乱码。后面添加了一个函数使二进制全部转化成十进制。
在这里插入图片描述

图3-3.2 二进制转化十进制
4 数据的图形化显示(Java语言部分)实施过程
4.1 设计大纲
Java部分一共写了五个类。在每个类中封装一个功能函数,主函数创造LoadIn类,进入登录界面实现登录功能。对登录界面进行排版,建立两个文本输入框用来接收用户名和密码,并对登录按钮进行监听,将监听到的密码与用户名传给监听函数,对比用户名密码是否正确;ButtonHandler类是对登录按钮的监听,并读取登录文件;Library类进入图书一览表,用try-catch-finally进行c表格txt文件读取,并把该信息设为公有量,方便后面的图形化读取信息。;Handler1类和Handler2类也是实现了ActionListener接口,获取按钮上的动作,执行ActionEvent事件,分别绘制价格柱状图与剩余数量饼状图。完成数据库的图形化展示。
4.2 系统详细设计
Java主要部分是要求我们把前面模拟的数据库图形化展示出来,所以主要目标就是图形化的实现。我们把信息设计成可多次在不同地方使用,方便了后面几个图形读取信息的便利,并用画图工具画出想要的图形化,填入相应的数据。在使用文件数据流进行I/O操作时,在读、写文件或者生成文件的时候会发生错误,所以要捕捉IOException异常。使用FileInputStream来读取文件中的数据,使用InputStreamReader进行字节与java字符的码制转换,输入字节流,输出Java字符,然后用readLine()一行一行地将图书馆目录文件中的数据读取到显示屏。
在这里插入图片描述

图4-2.1列表展示

画图书信息表格时,确定起点起点和终点,先横后竖建立表格,后将书籍序号,书籍名称,作者名称,出版社,价格和库中剩余的图书数目六项信息依次放入指定的位置。
在这里插入图片描述

图4-2.2表格画图代码
在这里插入图片描述

图4-2.3表头的添加

在这里插入图片描述

图4-2.4文字的写入

画一个图书剩余百分比的饼图时。要形成一个圆形,先确定好圆外接矩形的坐上顶点的坐标,以及圆的直径。绘图的时候用的是fillArc这个函数,为了详细显示每个商品所占的百分比,我还做了标注,在面板的右侧用小矩形对应扇形的颜色,并显示商品名。
在这里插入图片描述

图4-2.5扇形图展示

在这里插入图片描述
图4-2.6扇形图画法展示

4.3 遇到的典型困难和解决办法

(1):刚开始拿到扇形图是懵的,要求里还要求不可以运用组件,后面发现可以运用不同开始度的弧形,根据数据变化,按数据占总数的比例,作为角度的大小,变化每一块扇形的占比。
在这里插入图片描述

4-3.1扇形图的变化攻克

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值