吳吉哲
摘要:日常財務(wù)辦公中經(jīng)常需要填寫支票,例如現(xiàn)金支票,轉(zhuǎn)賬支票。支票里的內(nèi)容大部分內(nèi)容重復(fù),也容易出錯,未及時發(fā)現(xiàn)可能會造成不必要的損失。本文介紹了一款基于Java編程語言開發(fā)的"支票快速打印"軟件,不但可以快速轉(zhuǎn)換數(shù)字大小寫,形成準(zhǔn)確的支票模板,并且可以連接使用打印機(jī)快速打印支票,有效減輕工作人員的工作量,提高準(zhǔn)確率。
關(guān)鍵詞:財務(wù);Java;軟件
中圖分類號:TP311? ? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2021)15-0236-03
1 引言
支票(Cheque)是出票人簽發(fā)的,委托辦理支票存款業(yè)務(wù)的銀行或者其他金融機(jī)構(gòu)在見票時無條件支付確定的金額給收款人或者持票人的票據(jù)。在歷史上,資本家將巨額款項存入金錢買賣業(yè)的金銀佃工商人處,收款的金銀佃工商人向富商簽發(fā)收據(jù)。該收據(jù)為見票即付的無記名證券,富商憑收據(jù)向商人取款。后來,收款的金銀佃工商人在收到存款時,向存款人交付存折,內(nèi)附數(shù)張空白的提款憑證。存款人可以在提款憑證上做必要填寫,然后憑此向收受存款的商人請求支付。現(xiàn)代支票就是從這種提款憑證發(fā)展而來。
支票的出現(xiàn)使得人們可以對事先存儲在銀行的金錢進(jìn)行支取,這樣不僅方便了交易,而且可以確保安全,促進(jìn)了經(jīng)濟(jì)和商業(yè)的發(fā)展。而在現(xiàn)在的社會,支票更是隨處可見,大到金融企業(yè),小到老百姓,都會用到支票。在支票的填寫上,銀行考慮到安全性,同時也為了規(guī)范書寫,設(shè)定了很多填寫規(guī)范。但是這導(dǎo)致了在日常煩瑣的財務(wù)工作中增添了不必要的工作量。開發(fā)實現(xiàn)這一款程序,既節(jié)約了人力成本,也提高了工作效率和書寫支票準(zhǔn)確率。
2 技術(shù)選取
本系統(tǒng)基于Java語言的桌面應(yīng)用,主要涉及Java的IO文件讀入存取技術(shù)、excel處理技術(shù)、swing界面技術(shù),同時運(yùn)用Photoshop和AI軟件進(jìn)行用戶界面圖片的設(shè)計。
3 軟件相關(guān)設(shè)計
3.1 系統(tǒng)思路設(shè)計
首先,進(jìn)入用戶界面,用戶輸入日期、收款單位、金額、密碼等基本信息,點(diǎn)擊“生成Excel”按鈕,軟件后臺會自動根據(jù)用戶選擇的支票類型選擇不同的支票模板參數(shù),生成excel表格,將用戶輸入的信息自動寫入,并彈出交由用戶確認(rèn),確認(rèn)無誤后點(diǎn)擊“打印”按鈕,即可開始打印支票。
3.2 代碼實現(xiàn)
本系統(tǒng)需要實現(xiàn)的代碼包括六個類。
1)Frame.java
此類主要生成一個用戶界面的對象,用戶可以在此界面輸入日期、收款單位、金額、密碼等基本信息,并且操作生成表格或者進(jìn)行打印。
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("支票打印小");
(省略控件設(shè)置代碼)
為界面內(nèi)的按鈕設(shè)置監(jiān)聽事件,點(diǎn)擊進(jìn)入監(jiān)聽事件。
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
此類主要生成界面美化對象,便于后臺調(diào)用。
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
功能實現(xiàn)的主類。根據(jù)用戶輸入的時間、金額,自動還換算為大寫的數(shù)據(jù),并且將所有數(shù)據(jù)整合,生成可以打印的支票固定格式的excel表格。
public class Receiver {
public Receiver(String copname,String data,String password,String use,String amount) {(省略構(gòu)造方法參數(shù))}
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("參數(shù)非法!");}
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();}}
(省略其他執(zhí)行方法)
4)ToExcel.java
此類為實現(xiàn)寫入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虛擬機(jī)回收,會一直存在,可能會影響軟件后續(xù)使用,建議在該類里加一個清理數(shù)據(jù)的方法public void clear()。
4結(jié)語
本軟件使用java編程語言,獨(dú)立開發(fā),實現(xiàn)了快速打印支票的功能,體現(xiàn)了java的結(jié)構(gòu)簡單、獨(dú)立性好等特點(diǎn),可有效減少財務(wù)人員的工作量,提高工作效率,具有一定的推廣前景。
參考文獻(xiàn):
[1] 王昊欣,姜學(xué)東.JAVA編程語言在計算機(jī)軟件開發(fā)中的應(yīng)用[J].電子測試,2017(13):73-74.
[2] 秦鵬珍.基于Java的拼圖游戲?qū)崿F(xiàn)[J].電子技術(shù)與軟件工程,2019(13):237-238.
[3] 姜雪垠.網(wǎng)上答題系統(tǒng)的設(shè)計與實現(xiàn)[J].中國管理信息化,2017,20(20):153-154.
【通聯(lián)編輯:唐一東】