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

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

图书进销存系统(CS)

  • 62 次阅读
  • 3 次下载
  • 2025/6/19 13:22:21

第9章 图书进存销系统

ImageIO.write(bi2, formatName, new FileOutputStream(output)); return output; }

//返回一个Image对象,当参数bi的宽比高大的时候,使用最大的宽来压缩图片。 //当参数bi的高比宽大的时候,使用最大的高来压缩图片

private static Image getImage(BufferedImage bi) { if (bi.getWidth() > bi.getHeight()) { return bi.getScaledInstance(MAX_WIDTH, -10, Image.SCALE_AREA_AVERAGING); } else { return bi.getScaledInstance(-10, MAX_HEIGHT, Image.SCALE_AREA_AVERAGING); } }

//生成uuid,作为上传的文件名 public static String getUUID() { UUID uuid = UUID.randomUUID(); return uuid.toString(); }

·33·

注意以上代码的黑体部分,当不需要进行压缩处理的时候,直接使用ImageIO输出图像流到新的url中,此处的url可以是相对路径。如果需要进行压缩,那么必须要确定压缩后的图片的高和宽,因此以上代码中的getImage方法返回压缩后的Image对象。下面编写一个文件选择器的类,处理用户选择文件。

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

class FileChooser extends JFileChooser { //书本管理界面对象 }

BookPanel bookPanel;

public FileChooser(BookPanel bookPanel){ this.bookPanel = bookPanel; }

//选择了文件后触发

public void approveSelection() { File file = getSelectedFile();//获得选择的文件 this.bookPanel.upload(file); //调用书本管理界面对象的upload方法 }

super.approveSelection();

以上代码的黑体部分,使用书本管理界面对象的upload方法,以下是upload方法的实现。 代码清单:code\\book\\src\\org\\crazyit\\book\%ui\\BookPanel.java

//上传图片

public void upload(File selectFile) { String uuid = ImageUtil.getUUID();//使用uuid生成文件名,保证文件名唯一 String smallFilePath = \缩略图的url String bigFilePath = \原图的url File file = ImageUtil.makeImage(selectFile, smallFilePath, \生成缩略图 File source = ImageUtil.makeImage(selectFile, bigFilePath, \生成原图 this.currentImage = new ImageIcon(file.getAbsolutePath());//设置界面显示的图片对象 this.currentImagePath = smallFilePath; //设置界面显示的图片url refreshImage();//刷新图片显示区 }

upload方法中,需要生成两张图片,一张是原图的副本,与原图一致,另外一张是缩略图,缩略图

的高和宽都不大于图片显示区的高和宽。显示可以试下图片上传的功能,如图9.10所示。

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

图9.10 图片上传功能

如果需要浏览原图,可以为图片显示区的JLabel添加监听器,当点击了该JLabel时,弹出一个JFrame,显示对应图片的原图。

到此,书本的新增功能已经实现,书本的修改功能与出版社的修改功能一样,图片的上传与显示功能与书本的新增功能一样,在此不再赘述。

9.7 销售管理功能

销售管理功能,交互方式与前面几小节的功能类似,但是在表单处理的时候就有所不同,由于一条销售记录可能涉及多本书,因此,在表单中需要有书本交易记录的列表。另外,在为书本交易记录列表增加或者删除一条记录的时候,系统还要为总价和购买数量进行计数量,并显示到相应的地方。当保存销售记录的时候,就需要先保存销售记录,再逐条保存书的销售记录。

9.7.1 销售记录列表

查询所有的销售记录,与前面的类似,不同的地方就是查出结果集合后,需要对该集合进行处理,在9.6书本管理功能中,查出所有的书本后,还需要根据书本的外键设置书本对象(Book)的两个关联对象(Type和Concern)。而在销售管理中,我们还需要为销售记录计算此次交易的总价、交易的书本名称和交易总量。

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

为SaleRecord添加属性:

//销售的总数量 private int amount; //总价钱

private double totalPrice; //书的销售记录

private Vector bookSaleRecords; //该记录中对应所有书的名称, 显示用 private String bookNames; //省略setter和getter方法

为SaleRecord添加几个属性,分别是销售总数量、交易金额、书的交易记录和各本书的名称。各本书的名称字符串,多本书之间使用逗号隔开。剩下的事,就是在业务层对查出来的SaleRecord进行处理,设置我们新增的几个属性。在编写SaleRecord的业务层时,需要在书本交易记录的数据访问层中新加一个方法,根据交易记录的id查找到对应的书本交易记录集合。

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

public class BookSaleRecordDaoImpl extends CommonDaoImpl implements BookSaleRecordDao { //根据销售记录id获得书的销售记录集合 }

public Collection findBySaleRecord(String saleRecordId) { String sql = \ saleRecordId + \ return getDatas(sql, new Vector(), BookSaleRecord.class); }

以上方法,就可以获得一次交易记录中所有的书的交易记录,同样的也可以取得交易记录中所涉及的书,接下来实现销售记录的业务层。

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

//实现接口方法

public Collection getAll(Date date) { //得到下一天

Date nextDate = DateUtil.getNextDate(date); //得到今天的日期, 格式为yyyy-MM-dd String today = DateUtil.getDateString(date); //得到明天的日期, 格式为yyyy-MM-dd

String tomorrow = DateUtil.getDateString(nextDate); Collection records = saleRecordDao.findByDate(today, tomorrow); for (SaleRecord r : records) { processDatas(r); } return records; }

//处理一个SaleRecord, 设置它的书本销售记录属性和书本名字属性 private SaleRecord processDatas(SaleRecord r) { //查找该记录所对应的书的销售记录

Collection brs = bookSaleRecordDao.findBySaleRecord(r.getID()); //设置结果集中的每一个book属性

setBook(brs);

//设置SaleRecord对象中的书的销售记录集合

r.setBookSaleRecords((Vector)brs); //设置SaleRecord的书名集合

·36·

第9章 图书进存销系统

r.setBookNames(getBookNames(brs)); //设置数量与总价

r.setAmount(getAmount(brs)); r.setTotalPrice(getTotalPrice(brs)); return r; }

//获取一次交易中涉及的总价

private double getTotalPrice(Collection brs) { double result = 0; for (BookSaleRecord br : brs) { //书本的交易量

int tradeSum = Integer.valueOf(br.getTRADE_SUM()); //书的单价

double bookPrice = Double.valueOf(br.getBook().getBOOK_PRICE()); result += (bookPrice * tradeSum); } return result; }

//获取一次交易中所有书本的交易量

private int getAmount(Collection brs) { int result = 0; //遍历书的交易记录,计算总价 for (BookSaleRecord br : brs) { result += Integer.valueOf(br.getTRADE_SUM()); } return result; }

//设置参数中的每一个BookSaleRecord的book属性 private void setBook(Collection brs) { for (BookSaleRecord br : brs) { //调书本的数据访问层接口 Book book = bookDao.find(br.getBOOK_ID_FK()); br.setBook(book); } }

//获取一次交易中所有书本的名字, 以逗号隔开

private String getBookNames(Collection brs) { if (brs.size() == 0) return \ StringBuffer result = new StringBuffer(); for (BookSaleRecord br : brs) { Book book = br.getBook(); result.append(book.getBOOK_NAME() + \ } //去掉最后的逗号并返回 }

return result.substring(0, result.lastIndexOf(\

以上代码中的getTotalPrice方法用于得到一次交易的价格;getAmount方法用于得到一次交易的书本总数;setBook方法用于设置书本销售记录对象(BookSaleRecord)中的book属性,当然,在那之前要为BookSaleRecord类添加book属性;getBookNames方法是将所有交易中涉及的书本的名称集合起来,用逗号隔开。这样,获取全部的交易记录时,得到的每一个交易记录对象(SaleRecord),

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

共分享92篇相关文档

文档简介:

第9章 图书进存销系统 ImageIO.write(bi2, formatName, new FileOutputStream(output)); return output; } //返回一个Image对象,当参数bi的宽比高大的时候,使用最大的宽来压缩图片。 //当参数bi的高比宽大的时候,使用最大的高来压缩图片 private static Image getImage(BufferedImage bi) { if (bi.getWidth() > bi.getHeight()) { return bi.getScaledInstance(MAX_WIDTH, -10, Image.SCALE_AREA_AVERAGING); } else { return bi.getS

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价: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