Sử dụng text file để lưu trữ dữ liệu dạng CSDL

package baitapFile;import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.Scanner;import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

public class QuanLyHH_GUI extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;

private DefaultTableModel dtm;
private JTable table;
private JTextField tfID,tfName,tfPrice;
private JButton btnAdd,btnSave,btnDelete,btnUpdate,btnExit;

private ListProducts dsHang;

public QuanLyHH_GUI() {
super(“Quản lý hàng hóa”);setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(400,300);setLocation(150,100);
CreateGUI();
LoadDatabase();
LockText(true);
//tự động cập nhật khi đóng ứng dụng
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
UpdateDatabase();
System.exit(1);
}
});
}
void CreateGUI() {
String []header={“Mã số SP”,”Tên sản phẩm”,”Đơn giá”};
dtm=new DefaultTableModel(header,0);
table=new JTable(dtm);
this.add(new JScrollPane(table));
table.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
try {
int row=table.getSelectedRow();
tfID.setText(table.getValueAt(row, 0).toString());
tfName.setText(table.getValueAt(row, 1).toString());
tfPrice.setText(table.getValueAt(row, 2).toString());
} catch (Exception e1) {}
}
});

Box b=Box.createVerticalBox();
Box b1=Box.createHorizontalBox();Box b2=Box.createHorizontalBox();
Box b3=Box.createHorizontalBox();Box b4=Box.createHorizontalBox();
b.add(Box.createVerticalStrut(10));
b.add(b1);b.add(Box.createVerticalStrut(8));
b.add(b2);b.add(Box.createVerticalStrut(8));
b.add(b3);b.add(Box.createVerticalStrut(8));
b.add(b4);b.add(Box.createVerticalStrut(8));
JLabel l1,l2,l3;
b1.add(l1=new JLabel(“Mã số sản phẩm:”,JLabel.RIGHT));b1.add(tfID=new JTextField(20));
b2.add(l2=new JLabel(“Tên sản phẩm:”,JLabel.RIGHT));b2.add(tfName=new JTextField(20));
b3.add(l3=new JLabel(“Đơn giá:”,JLabel.RIGHT));b3.add(tfPrice=new JTextField(20));
l2.setPreferredSize(l1.getPreferredSize());
l3.setPreferredSize(l1.getPreferredSize());
this.add(b,BorderLayout.NORTH);

b4.add(btnAdd=new JButton(“Thêm”));btnAdd.addActionListener(this);
b4.add(Box.createHorizontalStrut(10));
b4.add(btnSave=new JButton(“Lưu”));btnSave.addActionListener(this);
b4.add(Box.createHorizontalStrut(10));btnSave.setEnabled(false);
b4.add(btnUpdate=new JButton(“Sửa”));btnUpdate.addActionListener(this);
b4.add(Box.createHorizontalStrut(10));
b4.add(btnDelete=new JButton(“Xóa”));btnDelete.addActionListener(this);
b4.add(Box.createHorizontalStrut(10));
b4.add(btnExit=new JButton(“Thoát”));btnExit.addActionListener(this);
}

@Override
public void actionPerformed(ActionEvent e) {
Object o=e.getSource();
if(o.equals(btnExit)){
UpdateDatabase();
System.exit(1);
}
if(o.equals(btnAdd)) {
if(btnAdd.getText().equals(“Thêm”)) {
LockText(false);
btnAdd.setText(“Hủy bỏ”);
btnSave.setEnabled(true);
btnUpdate.setEnabled(false);
btnDelete.setEnabled(false);
}
else {
LockText(true);
btnAdd.setText(“Thêm”);
btnSave.setEnabled(false);
btnUpdate.setEnabled(true);
btnDelete.setEnabled(true);
}
}
else if(o.equals(btnSave)) {
if(btnAdd.isEnabled()) //Nút lưu của nút thêm
{
try {
String id=tfID.getText();
String name=tfName.getText();
if(id.trim().equals(“”)||name.trim().equals(“”)) {
JOptionPane.showMessageDialog(null, “Không cho rỗng”);
return;
}
double price=Double.parseDouble(tfPrice.getText());
Product p=new Product(id,name,price);
String []row= {id,name,price+””};
dsHang.ThemHang(p);
dtm.addRow(row);
}catch (Exception ex) {
JOptionPane.showMessageDialog(null, “Dữ liệu bị lỗi rồi\n” +
“”+ex.getMessage());
}
}
else {//nút lưu của nút sửa

}
}
}
/*** Nạp dữ liệu lúc chương trình khởi động     */
void LoadDatabase() {
dsHang=new ListProducts();//khởi động danh sách
try {
File f=new File(“database.txt”);
if(!f.exists()) f.createNewFile();
//đọc danh mục hàng
Scanner input=new Scanner(new FileInputStream(f));
while(input.hasNextLine()) {
String line=input.nextLine();
if(line.trim()!=””) {
String items[]=line.split(“;”);
//tạo 1 mặt hàng
Product p=new Product();
p.setProductID(items[0]);
p.setProductName(items[1]);
p.setPrice(Double.parseDouble(items[2]));
//đưa vào danh mục
dsHang.ThemHang(p);
dtm.addRow(items);
LockText(true);
btnAdd.setText(“Thêm”);
btnSave.setEnabled(false);
btnUpdate.setEnabled(true);

btnDelete.setEnabled(true);
}
}
input.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//Cập nhật dữ liệu xuống databse khi thoát ứng dụng
void UpdateDatabase() {
try {
PrintWriter out
=new PrintWriter(
new FileOutputStream(“database.txt”),true);
for (int i = 0; i < dsHang.Count(); i++) {
Product p=dsHang.GetProduct(i);
out.println(p);
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, “Không lưu xuống db được\n”+e.toString());
}
}
//Khóa textBox
private void LockText(boolean state) {
tfID.setEditable(!state);
tfName.setEditable(!state);
tfPrice.setEditable(!state);
}

//hàm main
public static void main(String[] args) {
new QuanLyHH_GUI().setVisible(true);
}
}