导入jxl.jar

一.实验要求

设计图形用户界面,用顺序存取文件方式分别完成新增、删除、修改、查询、显示功能:
新增:让用户能输入学生的信息(学号、姓名、电话、邮箱信息),检查无误后将数据存入文本文件;
删除:删除正在显示的学生信息;
修改:修改正在显示的一条学生信息,修改后可保存至文本文件;
查询:让用户输入姓名,一条条显示查询到的学生信息(借助“下一条”、“上一条”按钮查看下一条和上一条数据)。
显示:显示文件中存储的所有学生信息(借助“下一条”、“上一条”按钮查看下一条和上一条数据。

二.设计界面

java 增删改查 桌面程序 java图形界面实现增删改查_软件工程

Button:对应事件

添加:Add

显示:Show

查询:Select

删除:Delete

修改:Alter

保存:SaveInfo

上一条:Last

下一条:Next

还有个button叫保存当前值,没显示,事件为 AlterSave

java 增删改查 桌面程序 java图形界面实现增删改查_java 增删改查 桌面程序_02

三.Controller代码

package application;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.control.Alert.AlertType;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

public class ExcelController {

    @FXML
    private TextField idTextField;

    @FXML
    private TextField emailTextField;

    @FXML
    private TextArea infoTextArea;

    @FXML
    private TextField nameTextField;

    @FXML
    private Button saveButton;

    @FXML
    private TextField teleTextField;

    //学生信息的基本组成
    String id,name,telephone,email;
    //用于上一条下一条判断溢出以及记录现在文本框里显示的哪一条
    int AllShowCnt=0;
    int PartSelectCnt=0;
    //判断现在在查询阶段还是显示阶段
	boolean AllShow=false;
	boolean PartSelect=false;
	// 用于修改学生信息
	String OldInfo;
	String NewInfo;
    //保存所有学生信息,实时更新
    ArrayList<String> infoShow=new ArrayList<String>();
    //用于查询时保存查询到的学生信息
    ArrayList<String> infoSelect=new ArrayList<String>();
    
    //使用的文件
    File file;
    
    
  	//打开文件,没有就新创建,从文件里读取以前的数据
    @FXML
    void initialize() throws BiffException, IOException, RowsExceededException, WriteException
    {
    	file=new File("Information.xls");
    	if(!file.exists())
    		file.createNewFile();
    	LoadInfo();
    }
    
    //展示下一条
    @FXML
    void Next(ActionEvent event) {
    	//如果是显示所有
    	if(AllShow)
    	{
    		AllShowCnt++;
        	if(AllShowCnt>=infoShow.size())
        	{
        		AllShowCnt--;
        		Warning("已经到最后一个学生了!");
    	    	return;
        	}
        	infoTextArea.setText(infoShow.get(AllShowCnt));
    	}
    	//如果是查询
    	else if(PartSelect)
    	{
    		PartSelectCnt++;
        	if(PartSelectCnt>=infoSelect.size())
        	{
        		PartSelectCnt--;
        		Warning("已经到最后一个学生了!");
    	    	return;
        	}
        	infoTextArea.setText(infoSelect.get(PartSelectCnt));
    	}
    	//既不是查询又不是显示
    	else
    		Warning("请先点击显示或者查询按钮!");
    }

    //展示上一条
    @FXML
    void Last(ActionEvent event) {
    	if(AllShow)
    	{
    		AllShowCnt--;
        	if(AllShowCnt<0)
        	{
        		AllShowCnt++;
        		Warning("已经到第一个学生了!");
    	    	return;
        	}
        	infoTextArea.setText(infoShow.get(AllShowCnt));
    	}
    	else if(PartSelect)
    	{
    		PartSelectCnt--;
        	if(PartSelectCnt<0)
        	{
        		PartSelectCnt++;
        		Warning("已经到第一个学生了!");
    	    	return;
        	}
        	infoTextArea.setText(infoSelect.get(PartSelectCnt));
    	}
    	else
    		Warning("请先点击显示或者查询按钮!");
    }

    //增加一个信息
    @FXML
    void Add(ActionEvent event) throws IOException, RowsExceededException, WriteException {
    	//判断增加信息是否成功
    	if(!getInformation())
    		return;
    	String info=id+" "+name+" "+telephone+" "+email;
    	infoShow.add(info);
    	idTextField.setText("");
    	nameTextField.setText("");
    	teleTextField.setText("");
    	emailTextField.setText("");
    }

    //查询相同名字的学生信息
    @FXML
    void Select(ActionEvent event) {
    	String targetName = nameTextField.getText();
    	if(targetName.equals(""))
    	{
    		Warning("查询的名字不能为空!");
    		return;
    	}
    	//清空
    	infoSelect.clear();
    	for (String studentInfo : infoShow)
		{
			String []sInfo=studentInfo.split(" ");
			if(targetName.equals(sInfo[1]))
				infoSelect.add(studentInfo);
		}
    	infoTextArea.setText(infoSelect.get(0));
    	PartSelect=true;
    	AllShow=false;
    }

    //修改,记录以前的信息
    @FXML
    void Alter(ActionEvent event) {
    	OldInfo=infoTextArea.getText();
    	if(OldInfo.equals(""))
    	{
    		Warning("没有正在显示的学生信息!");
    		return;
    	}
    	saveButton.setVisible(true);
    }

    //展示第一条,并且触发AllShow
    @FXML
    void Show(ActionEvent event) throws BiffException, IOException {
    	infoTextArea.setText(infoShow.get(0));
    	AllShowCnt=0;
    	AllShow=true;
    	PartSelect=false;
    }

    //删除
    @FXML
    void Delete(ActionEvent event) {
    	String info=infoTextArea.getText();
    	if(info.equals(""))
    	{
    		Warning("没有正在显示的学生信息!");
    		return;
    	}
    	infoShow.remove(info);
    }

    //记录修改后的值
    @FXML
    void AlterSave(ActionEvent event) {
    	saveButton.setVisible(false);
    	NewInfo=infoTextArea.getText();
    	infoShow.set(AllShowCnt, NewInfo);
    }

    //获取学生信息
    private boolean getInformation()
    {
		id = idTextField.getText();
		name = nameTextField.getText();
		telephone = teleTextField.getText();
		email = emailTextField.getText();
		if(id.equals("")||name.equals("")||telephone.equals("")||email.equals(""))
		{	
			Warning("学生信息不能为空!");
	    	return false;
		}
		return true;
    }
    
    //将新增的学生写入文件
    public void SaveInfo() throws RowsExceededException, WriteException, IOException
	{
    	WritableWorkbook workbook=Workbook.createWorkbook(file);
    	WritableSheet sheet=workbook.createSheet("sheet1", 0);
    	//把表头写好
    	String head[]={"学号","姓名","电话","邮箱"};
    	
		// 首行标题内容
		for (int i = 0; i < head.length; i++)
		{
			// label表示一个单元格,第一个参数是列,第二个参数是行,第三个参数是内容
			Label label = new Label(i, 0, head[i]);
			sheet.addCell(label);
		}
	
		// 数据
		for (int i = 0; i < infoShow.size(); i++)
		{
			String info[]=infoShow.get(i).split(" ");
			for (int j = 0; j < 4; j++)
			{
				Label label = new Label(j, i+1, info[j]);
				sheet.addCell(label);
			}
		}
		workbook.write();
		workbook.close();
	}
    
    //从文件中读取全部信息,存在infoShow里面
    private void LoadInfo() throws BiffException, IOException 
    {
    	Workbook workbook=Workbook.getWorkbook(file);
    	Sheet sheet=workbook.getSheet(0);
    	for(int i=1;i<sheet.getRows();i++)
    	{
    		id=sheet.getCell(0,i).getContents();
    		name=sheet.getCell(1,i).getContents();
    		telephone=sheet.getCell(2,i).getContents();
    		email=sheet.getCell(3,i).getContents();
    		String info=id+" "+name+" "+telephone+" "+email;
    		infoShow.add(info);
    	}
    	for (String string : infoShow)
		{
			System.out.println(string);
		}
    	workbook.close();
    }
    
    //用于弹出警示
    private void Warning(String warningInfo)
    {
    	Alert alert = new Alert(AlertType.WARNING);
    	alert.setTitle("Warning Dialog");
    	alert.setContentText(warningInfo);
    	alert.showAndWait();
    }
}