目录
要求
效果图
?功能实现简释
一些方法
代码
要求
年末了,突然想起这学期还没发过一篇文章。想想还是发点什么吧,正好昨天在一个群里看到了一个java小程序的需求,今天无事可做,也稍微写了一下。实现了一些我觉得有必要的东西。
●编写一个模拟书店库存管理的Java应用程序,要求实现如下功能:
1.编写图书概况管理程序,管理书籍名称、书号、出版社、单价和库存等信息:
2.编写图书信息录入方法
3.编写图书信息删除方法
后面的要求就不写了(实际上是我懒得实现,没啥意义)
效果图
?
?
?
?功能实现简释
- 首先是录入,删除操作时的信息输入方法。有着直接从终端控制台输入比较low的主观想法(也许是我的想法比较幼稚)。我采用的是新生成一个小的对话窗体。然后来到了想说的第一个点,就是,我们所希望的是在输入信息完点确定后,对话窗关闭。然后继续在JFrame上进行显示操作。注意,关闭窗口的方式不能用EXIT_ON_CLOSE,那样会连着主窗口一起关闭。
- 就是删除操作了,录入操作比较简单,只需要直接写入就行。但根据编号进行删除就不是那么容易。我的想法很简单也很暴力,就是用一个新的文本文件去保存没有被删掉的信息。然后用该文件去覆写保存书本信息的文件。这种简单粗暴的文件保存方法,我从c一直沿用到java。接下来,就说一说暂存文件(上面提到的新的文本文件)的写入。在,我们读取到输入的编号的时候。我们就对书籍信息的文件进行一遍检索。建议使用BufferedReader,可以一行一行的读取。由于我们储存的信息格式是固定的(书名+“ ”+编号)。所以,使用StringTokenizer便理所当然了,将信息拆分成一个个字符串之后,就可以获得每本书的编号。用一个List集合去保存书籍信息,然后写入暂存文件就行了。判断编号是否与输入相同不能直接用==,用String类的equals方法(我写的时候没注意,错了几次才发现)
- 在JTextArea里,想主动换行,可以使用"\r\n";文件记得关闭输入,输出流
- 额,由于本人不是太爱整洁。所以,分类在我这基本是不现实的。。。导致,我往往会将所有功能实现在一个类的一个或几个方法中。。。
一些方法
setViewportView(); //JScrollPane添加组件,界面的方法(不是add!!!)
FileWriter out = new FileWriter(filename,boolean); //后边的参数,true是追加,false是不追加。
List<String>name = new ArrayList<String>(); //字符串集合,常用方法,name.size()集合大小,name.get(index)获取集合的序号index元素。
代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class BookSystem extends JFrame{
private JPanel ShowArea;
private JPanel MenuArea;
public void MyFrame(){
JFrame jf = new JFrame("图书管理系统");
jf.setBounds(200,200,400,400);
jf.setLayout(new BorderLayout());
JPanel ShowArea = new JPanel();
JPanel MenuArea = new JPanel();
//显示区
JTextArea area = new JTextArea();
area.setLineWrap(true);
area.setEnabled(true);
area.setSize(350,200);
area.setRows(15);
ShowArea.add(area);
JScrollPane js = new JScrollPane();
js.setBounds(20,20,400,200);
js.setViewportView(ShowArea);
jf.add(js,BorderLayout.NORTH);
//功能区
JButton jb1 = new JButton("录入");
JButton jb2 = new JButton("删除");
JButton jb3 = new JButton("刷新");
//监听
//录入
jb1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFrame Mess = new JFrame("录入信息");
Mess.setBounds(250,250,300,150);
Mess.setLayout(new BorderLayout());
JPanel jp1 = new JPanel();
JPanel jp2 = new JPanel();
JPanel jp3 = new JPanel();
jp1.add(new JLabel("书名"));
jp2.add(new JLabel("编号"));
JTextField name = new JTextField();
name.setColumns(15);
jp1.add(name);
JTextField no = new JTextField();
no.setColumns(15);
jp2.add(no);
JButton jb = new JButton("确定");
jp3.add(jb);
//生成信息窗口
jb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String name1 = name.getText();
String no1 = no.getText();
try {
FileWriter out = new FileWriter("E:\\图书管理\\src\\book.txt",true);
BufferedWriter bufferedWriter = new BufferedWriter(out);
bufferedWriter.write(name1+" "+no1);
bufferedWriter.newLine();
bufferedWriter.flush();
bufferedWriter.close();
Mess.dispose();
}
catch (IOException a){
System.out.println(a.toString());
}
}
});
Mess.add(jp1,BorderLayout.NORTH);
Mess.add(jp2,BorderLayout.CENTER);
Mess.add(jp3,BorderLayout.SOUTH);
Mess.setVisible(true);
Mess.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
});
//删除操作
jb2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFrame jf = new JFrame("删除");
jf.setBounds(250,250,300,150);
jf.setLayout(new BorderLayout());
JPanel jp = new JPanel();
JPanel jp2 = new JPanel();
JTextField no = new JTextField();
no.setColumns(15);
JButton jb = new JButton("确定");
jp.add(new JLabel("编号"));
jp.add(no);
jp2.add(jb);
//确定
jb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String num = no.getText();
try{
FileReader in = new FileReader("E:\\图书管理\\src\\book.txt");
FileWriter out = new FileWriter("E:\\图书管理\\src\\temp.txt",false);
BufferedReader bufferedReader = new BufferedReader(in);
BufferedWriter bufferedWriter = new BufferedWriter(out);
String str;
List<String>name = new ArrayList<String>();
while((str=bufferedReader.readLine())!=null){
name.add(str);
}
for(int i=0;i<name.size();i++){
StringTokenizer fx = new StringTokenizer(name.get(i)," ");
String temp_num="";
while(fx.hasMoreTokens()){
temp_num = fx.nextToken();
}
if(!num.equals(temp_num)){
bufferedWriter.write(name.get(i));
bufferedWriter.newLine();
}
}
bufferedReader.close();
bufferedWriter.flush();
bufferedWriter.close();
//保存删除后的数据
FileReader in_ = new FileReader("E:\\图书管理\\src\\temp.txt");
FileWriter out_ = new FileWriter("E:\\图书管理\\src\\book.txt",false);
BufferedReader bufferedReader_ = new BufferedReader(in_);
BufferedWriter bufferedWriter_ = new BufferedWriter(out_);
String str_;
while((str_=bufferedReader_.readLine())!=null){
bufferedWriter_.write(str_);
bufferedWriter_.newLine();
}
bufferedReader_.close();
bufferedWriter_.flush();
bufferedWriter_.close();
}catch (IOException a){
System.out.println(e.toString());
}
jf.dispose();
}
});
jf.add(jp,BorderLayout.NORTH);
jf.add(jp2,BorderLayout.SOUTH);
jf.setVisible(true);
jf.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
});
//刷新
jb3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
FileReader in = new FileReader("E:\\图书管理\\src\\book.txt");
BufferedReader bufferedReader = new BufferedReader(in);
String str,str2="";
while((str=bufferedReader.readLine())!=null){
str2 += str + "\r\n";
}
area.setText(str2);
in.close();
}
catch (IOException a){
System.out.println(a.toString());
}
}
});
MenuArea.setLayout(new FlowLayout());
MenuArea.add(jb1);
MenuArea.add(jb2);
MenuArea.add(jb3);
jf.add(MenuArea,BorderLayout.SOUTH);
jf.setVisible(true);
jf.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
BookSystem book = new BookSystem();
book.MyFrame();
}
}
|