云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 图书进销存系统(CS)

图书进销存系统(CS)

  • 62 次阅读
  • 3 次下载
  • 2025/6/19 9:56:43

第9章 图书进存销系统

}

//查找出对应的出版社,再为书设置出版社对象 book.setConcern(concernDao.find(book.getPUB_ID_FK())); }

return result;

·29·

以上代码的黑体部分,设置Book的两个外键对象。这时候,在界面显示需要取得出版社名称和种类名称的话,直接book.getType().getTYPE_NAME()即可,下面实现表现层。

代码清单:code\\book\\src\\org\\crazyit\\book\%ui\\BookPanel.java

//实现父类方法,查询数据库并返回对应的数据格式, 调用父类的setDatas方法设置数据集合 private void setViewDatas() { //查找对应的数据

Vector books = (Vector)bookService.getAll(); //转换显示格式

Vector datas = changeDatas(books); //调用父类方法设置结果集合

setDatas(datas); }

//将数据转换成视图表格的格式

private Vector changeDatas(Vector datas) { Vector view = new Vector(); for (Book book : datas) { Vector v = new Vector(); v.add(book.getID()); v.add(book.getBOOK_NAME()); v.add(book.getBOOK_INTRO()); v.add(book.getAUTHOR()); v.add(book.getType().getTYPE_NAME()); v.add(book.getConcern().getPUB_NAME()); v.add(book.getREPERTORY_SIZE()); v.add(book.getBOOK_PRICE()); view.add(v); } return view; }

与出版社一样,添加以上两个方法,设置需要显示的列表数据,再设定相关的列即可,以上代码的的setViewDatas需要让构造器去调用。注意,还需要设置一个隐藏的id列,实现父类的setTableFace方法即可。具体的实现与出版社管理一样。书本的模糊查询也是使用MySQL的like关键字即可实现,得到数据后,再调用父类的setDatas和refreshTable方法就可以实现,在本节不再赘述。

9.6.2 查看书本

查看书本的功能与查看出版社的功能一样,都是当选择了列表中的某一行数据时,就将数据显示在下面的表单,功能比较简单,只是将各个值放置到对应的区域即可。在这里不详细描述,下面提供根据id查找书本的SQL:

SELECT * FROM T_BOOK book WHERE book.ID='\

该句SQL相当的简单,id由界面传入,可以在BookPanel中调用父类的getSelectId即可获得,在业务层处理时,当得到一个Book对象的时候,与获得全部书的功能一样,需要设置Book对象的两个属性(Type和Concern),重用9.6.1中BookServiceImpl的setAssociate方法就可以设置,并不需要太复杂的处理。在表现层中,需要提供一个属性,用来保存当前所显示的图片,由于界面中只有一个

·30· 第9章 图书进存销系统

显示图片的地方(JLabel),因此,也需要有一个这样的属性来保存图片。

代码清单:code\\book\\src\\org\\crazyit\\book\%ui\\BookPanel.java

//刷新图片显示的JLabel

private void refreshImage() { this.imageLabel.setIcon(this.currentImage);//imageLabel为图片显示的JLabel }

//查看书本

private void view() { String id = getSelectId(getJTable()); Book book = bookService.get(id); //设置各个对应区域的值 }

this.bookId.setText(book.getID());

this.bookName.setText(book.getBOOK_NAME()); this.price.setText(book.getBOOK_PRICE()); this.intro.setText(book.getBOOK_INTRO()); this.author.setText(book.getAUTHOR());

this.typeComboBox.setSelectedItem(makeType(book.getType()));

this.concernComboBox.setSelectedItem(makeConcern(book.getConcern())); this.currentImage = new ImageIcon(book.getIMAGE_URL()); this.currentImagePath = book.getIMAGE_URL(); //重新设置当前显示的图片 refreshImage();

注意以上代码的黑体部分,需要设置种类和出版社下拉框的值。以下是makeType方法的代码:

//创建一个Type对象, 用于添加到下拉框中, 该方法中创建的Type对象重写了toString和equals方法 private Type makeType(final Type source) { Type type = new Type(){ public String toString(){ return source.getTYPE_NAME(); } public boolean equals(Object obj) { if (obj instanceof Type) { Type t = (Type)obj; if (getID().equals(t.getID())) return true; } return false; } }; type.setID(source.getID()); return type; }

该方法用来创建一个Type对象,该对象重写了toString和equals方法,由于在下拉框(JComboBox)中,调用该对象的toString方法显示,判断是否选中了某一个下拉框,调用equals方法,因此我们需要重写这两个方法。在equals方法中,我们判断两个Type是否相等的标准是这两个Type的ID是否一致。以下代码初始化下拉框(显示数据库中所有的Type)。

代码清单:code\\book\\src\\org\\crazyit\\book\%ui\\BookPanel.java

//从数据库中获取全部的种类并添加到下拉框中 private void addTypes() { //调用种类业务接口取得全部的种类

Collection types = this.typeService.getAll();

第9章 图书进存销系统

}

for (Type type : types) { //typeComboBox是种类下拉框对象 }

this.typeComboBox.addItem(makeType(type));

·31·

出版社的下拉框与种类下拉框一样,添加到下拉框里面的每个对象,都需要重写toString和equals方法。

9.6.3 新增书本

书的表单与出版式社表单不同,需要实现文件上传的功能,其他字段都可以直接使用SQL写入到数据库。先将数据访问层和业务层的代码实现。

代码清单:code\\book\\src\\org\\crazyit\\book\\dao\\impl\\BookDaoImpl.java

//实现接口BookDao的add方法 public String add(Book book) { //根据book对象拼装SQL }

String sql = \

book.getBOOK_INTRO() + \ \

\//执行SQL并返回ID

return String.valueOf(getJDBCExecutor().executeUpdate(sql));

代码清单:code\\book\\src\\org\\crazyit\\book\\service\\impl\\BookServiceImpl.java

//实现BookService的add方法 public Book add(Book book) { String id = bookDao.add(book); return get(id); }

//从界面中获取数据并封装成Book对象

private Book getBook() { String bookName = this.bookName.getText(); String price = this.price.getText(); String intro = this.intro.getText(); String author = this.author.getText(); //从种类下拉框中取得对应的种类

Type type = (Type)this.typeComboBox.getSelectedItem(); //从出版社下拉框中取得相应的出版社

Concern concern = (Concern)this.concernComboBox.getSelectedItem(); //this.currentImagePath是当前显示的图片路径

代码清单:code\\book\\src\\org\\crazyit\\book\%ui\\BookPanel.java

return new Book(null, bookName, intro, price, type.getID(), concern.getID(), String.valueOf(0), this.currentImagePath, author); }

//新增书本

private void add() { //从界面中取得书本的值并封装成Book对象,新增书本时库存为0

Book book = getBook(); bookService.add(book);

·32·

}

//重新读取数据 setViewDatas();

//刷新列表, 清空表单 clear();

第9章 图书进存销系统

界面上只提供了一个保存的按钮,点击保存时进行新增还是修改操作,取决于当前表单中是否有书本,如果有的话,即表示修改。在新增书本的时候,书本的库存应该为0,修改书本的时候,并不应该修改书本的库存,只有销售或者入库的时候,才会对库存产生影响。下面详细讲解如何进行图片上传。

9.6.4 图片上传功能

界面提供一个选择图片的按钮,可以提供给用户选择书的图片,在本例中,不必做得太复杂,因此一本书只有一张图片。在用户选择了图片后,我们可以将用户所选择的图片复制到我们的项目目录中,并再生成一张对应的缩略图,缩略图在书本管理界面显示,当点击了缩略图时,可以显示原图给用户浏览。先编写一个ImageUtil类,用来专门处理图片。

代码清单:code\\book\\src\\org\\crazyit\\book\\commons\\ImageUtil.java

//压缩图片的最大宽

public final static int MAX_WIDTH = 220; //压缩图片的最大高

public final static int MAX_HEIGHT = 240; /**

* 经过原图片的压缩后, 生成一张新的图片 * @param imageFile 图片文件 * @param url 原图相对路径

* @param formatName 生成图片的格式 * @param compress 是否进行压缩 * @return 生成的图片文件

*/

public static File makeImage(File imageFile, String url, String formatName, boolean compress) { File output = new File(url); //读取图片

BufferedImage bi = ImageIO.read(imageFile); //如果不进行压缩, 直接写入文件并返回

if (!compress) { ImageIO.write(bi, formatName, new FileOutputStream(output)); return output; }

//获得新的Image对象

Image newImage = getImage(bi); //获取压缩后图片的高和宽

int height = newImage.getHeight(null); int width = newImage.getWidth(null); //以新的高和宽构造一个新的缓存图片

BufferedImage bi2 = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = bi2.getGraphics(); //在新的缓存图片中画图

g.drawImage(newImage, 0, 0, null); //输出到文件

搜索更多关于: 图书进销存系统(CS) 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

第9章 图书进存销系统 } //查找出对应的出版社,再为书设置出版社对象 book.setConcern(concernDao.find(book.getPUB_ID_FK())); } return result; ·29· 以上代码的黑体部分,设置Book的两个外键对象。这时候,在界面显示需要取得出版社名称和种类名称的话,直接book.getType().getTYPE_NAME()即可,下面实现表现层。 代码清单:code\\book\\src\\org\\crazyit\\book\%ui\\BookPanel.java //实现父类方法,查询数据库并返回对应的数据格式, 调用父

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com