财务支票快速打印小程序
2021-07-19吴吉哲
吴吉哲
摘要:日常財务办公中经常需要填写支票,例如现金支票,转账支票。支票里的内容大部分内容重复,也容易出错,未及时发现可能会造成不必要的损失。本文介绍了一款基于Java编程语言开发的"支票快速打印"软件,不但可以快速转换数字大小写,形成准确的支票模板,并且可以连接使用打印机快速打印支票,有效减轻工作人员的工作量,提高准确率。
关键词:财务;Java;软件
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2021)15-0236-03
1 引言
支票(Cheque)是出票人签发的,委托办理支票存款业务的银行或者其他金融机构在见票时无条件支付确定的金额给收款人或者持票人的票据。在历史上,资本家将巨额款项存入金钱买卖业的金银佃工商人处,收款的金银佃工商人向富商签发收据。该收据为见票即付的无记名证券,富商凭收据向商人取款。后来,收款的金银佃工商人在收到存款时,向存款人交付存折,内附数张空白的提款凭证。存款人可以在提款凭证上做必要填写,然后凭此向收受存款的商人请求支付。现代支票就是从这种提款凭证发展而来。
支票的出现使得人们可以对事先存储在银行的金钱进行支取,这样不仅方便了交易,而且可以确保安全,促进了经济和商业的发展。而在现在的社会,支票更是随处可见,大到金融企业,小到老百姓,都会用到支票。在支票的填写上,银行考虑到安全性,同时也为了规范书写,设定了很多填写规范。但是这导致了在日常烦琐的财务工作中增添了不必要的工作量。开发实现这一款程序,既节约了人力成本,也提高了工作效率和书写支票准确率。
2 技术选取
本系统基于Java语言的桌面应用,主要涉及Java的IO文件读入存取技术、excel处理技术、swing界面技术,同时运用Photoshop和AI软件进行用户界面图片的设计。
3 软件相关设计
3.1 系统思路设计
首先,进入用户界面,用户输入日期、收款单位、金额、密码等基本信息,点击“生成Excel”按钮,软件后台会自动根据用户选择的支票类型选择不同的支票模板参数,生成excel表格,将用户输入的信息自动写入,并弹出交由用户确认,确认无误后点击“打印”按钮,即可开始打印支票。
3.2 代码实现
本系统需要实现的代码包括六个类。
1)Frame.java
此类主要生成一个用户界面的对象,用户可以在此界面输入日期、收款单位、金额、密码等基本信息,并且操作生成表格或者进行打印。
public class Frame extends JFrame{
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JTextField copname = new JTextField("", 25);
JButton bt = new JButton("生成EXCEL");
JTextField data = new JTextField("开票日期:", 25);
JTextField datablank = new JTextField("", 25);
JTextField datatip = new JTextField("格式:20170901", 25);
JTextField amount = new JTextField("开票金额:", 25);
JTextField amountblank = new JTextField("", 25);
JTextField amounttip = new JTextField("格式:10000.00", 25);
JTextField use = new JTextField("用途:", 25);
JTextField useblank = new JTextField("", 25);
JTextField password = new JTextField("密码:", 25);
JTextField passwordblank = new JTextField("", 25);
JTextField cop = new JTextField("收款单位:", 25);
public Frame() {
JFrame frame = new JFrame();
frame.setSize(800, 500);
panel2.setSize(500, 400);
frame.setTitle("支票打印小");
(省略控件设置代码)
为界面内的按钮设置监听事件,点击进入监听事件。
bt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
NewReceiver(copname.getText().toString(),datablank.getText().toString(),passwordblank.getText().toString(), useblank.getText().toString(), amountblank.getText().toString());}});}}
2)ImageComponent.java
此類主要生成界面美化对象,便于后台调用。
public class ImageComponent extends JComponent{
private static final int DEFAULT_WIDTH = 330;
private static final int DEFAULT_HEIGHT= 500;
private Image image;
public ImageComponent(){image = new ImageIcon("log.jpg").getImage();}
public void paintComponent(Graphics g){
if(image == null) return;
int imageWidth = image.getWidth(this);
int imageHeight = image.getHeight(this);
g.drawImage(image,0,0,null);
for(int i=0;i*imageWidth<=getWidth();i++){
for(int j=0;j*imageHeight<=getHeight();j++){
if(i+j>0){g.copyArea(0, 0, imageWidth, imageHeight, i*imageWidth, j*imageHeight);}}
}
publicDimension getPreferredSize(){return new Dimension(DEFAULT_WIDTH,DEFAULT_HEIGHT);
}}
3)Reciver.java
功能实现的主类。根据用户输入的时间、金额,自动还换算为大写的数据,并且将所有数据整合,生成可以打印的支票固定格式的excel表格。
public class Receiver {
public Receiver(String copname,String data,String password,String use,String amount) {(省略构造方法参数)}
private void changetoBig(String data, String amount) {
final String UNIT = "万千佰拾亿仟佰拾万仟佰拾元角分";
final String DIGIT = "零壹贰叁肆伍陆柒捌玖";
final double MAX_VALUE = 9999999999999.99D;
int year = Integer.parseInt(data.substring(0, 4));
int month =Integer.parseInt(data.substring(4, 6));
int day = Integer.parseInt(data.substring(6, 8));
String[]Daxie = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖","拾"};
String BigYear;
String BigMonth;
String BigDay;
String SmallData = year+"年"+month+"月"+day+"日";
excel.test(8, 2, String.valueOf(year));
excel.test(8, 3, String.valueOf(month));
excel.test(8, 4, String.valueOf(day));
int y1 = year/1000;
inty2 = year%1000/100;
int y3 = year%100/10;
int y4 = year%100%10;
BigYear = Daxie[y1]+Daxie[y2]+Daxie[y3]+Daxie[y4];
excel.test(2, 10, BigYear);
int m1 = month/10;
int m2 = month%10;
if(m1==0){BigMonth = Daxie[0]+Daxie[m2];
}else if(m2==0){BigMonth = Daxie[m1]+Daxie[10];
}else{BigMonth = Daxie[m1]+Daxie[10]+Daxie[m2];
}excel.test(2, 12, BigMonth);
int d1 = day/10;
int d2 = day%10;
if(d1==0){BigDay = Daxie[0]+Daxie[d2];
}else if(d2==0){BigDay = Daxie[d1]+Daxie[10];
}else{BigDay = Daxie[d1]+Daxie[10]+ Daxie[d2];
}excel.test(2, 13, BigDay);
double v = Double.parseDouble(amount);
if (v < 0 || v > MAX_VALUE) {System.out.println("参数非法!");}
long l = Math.round(v * 100);
xiaoxie(l,v);
if (l == 0) {System.out.println("零元整");}
String strValue = l + "";
int i = 0;
int j = UNIT.length() - strValue.length();
String rs = "";
boolean isZero = false;
for (; i < strValue.length(); i++, j++) {
char ch = strValue.charAt(i);
if (ch == '0') {isZero = true;
if (UNIT.charAt(j) == '亿' || UNIT.charAt(j) == '万'|| UNIT.charAt(j) == '元') {
rs = rs + UNIT.charAt(j);
isZero = false;}} else {
if (isZero) {rs = rs + "零";isZero = false;}
rs = rs + DIGIT.charAt(ch - '0') + UNIT.charAt(j);}}
rs = rs.replaceAll("亿万", "亿");
rs += "整";
excel.test(5, 9, rs);
System.out.println(rs);
try {ToPrint();} catch (IOException e) {e.printStackTrace();}}
(省略其他执行方法)
4)ToExcel.java
此类为实现写入Excel的功能类。
ppublic class ToExcel {
public void test(int x, int y, String value) {
try {
HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(filePath));
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row = sheet.getRow(x);
HSSFCell cell = row.createCell(y);
HSSFFont f = wb.createFont();
f.setFontName("宋体");
HSSFCellStyle style = wb.createCellStyle();
(省略固定支票格式代码)
style.setFont(f);
cell.setCellStyle(style);
cell.setCellValue(value);
FileOutputStream os;
os = new FileOutputStream(filePath);
wb.write(os);
os.close();
} catch (Exception e) {e.printStackTrace();}}
在操作軟件时,生成的对象如果不用java虚拟机回收,会一直存在,可能会影响软件后续使用,建议在该类里加一个清理数据的方法public void clear()。
4结语
本软件使用java编程语言,独立开发,实现了快速打印支票的功能,体现了java的结构简单、独立性好等特点,可有效减少财务人员的工作量,提高工作效率,具有一定的推广前景。
参考文献:
[1] 王昊欣,姜学东.JAVA编程语言在计算机软件开发中的应用[J].电子测试,2017(13):73-74.
[2] 秦鹏珍.基于Java的拼图游戏实现[J].电子技术与软件工程,2019(13):237-238.
[3] 姜雪垠.网上答题系统的设计与实现[J].中国管理信息化,2017,20(20):153-154.
【通联编辑:唐一东】