1.站立式会议
1.1 会议照片
1.2 会议内容
昨天已完成的工作:
已初步完成主界面设计和数据库编写记录
今天计划完成的工作
项目模块 | 需要实现的功能 | 负责人 | 预计用时 |
---|---|---|---|
数据库模块 | 数据库记录的备份、恢复和退出 | 王伊若 | 2h |
主界面模块 | 账目记录的增删改功能及界面 | 王伊若 | 6h |
主界面模块 | 完善主界面设计,报告界面前期准备 | 黄锐 | 3h |
主界面模块 | 查询界面功能 | 黄锐 | 5h |
主界面模块 | 软件帮助说明功能 | 江佳哲 | 3h |
主界面模块 | 用户信息界面 | 叶尔森 | 3h |
工作中遇到的困难:
在添加账目的监听器方法中忘记考虑支出分类和收入分类的不同,还需要“分类”下拉列表框的事件监听器,下拉列表框的监听事件就是为了动态获取用户所选择的分类名称。
2.项目燃尽图
3.模块的最新(运行)截图:
数据库的备份
备份事件处理代码如下:
/**
* “备份”菜单项的事件监听器
*
* @param actionEvent 事件
*/
@FXML
public void backupMenuItemEvent(ActionEvent actionEvent) throws IOException {
//实例化文件选择器
FileChooser fileChooser = new FileChooser();
//设置打开文件选择框默认输入的文件名
fileChooser.setInitialFileName("Database_Backup_" + dateTools.dateFormat(new Date(), "yyyy-MM-dd") + ".sql");
//打开文件选择框
File result = fileChooser.showSaveDialog(null);
if (result != null) {
String savePath = result.getAbsolutePath();
// 实例化Properties对象
Properties properties = new Properties();
// 加载properties配置文件
FileInputStream fis = new FileInputStream(new File("tally_book\\src\\tallybook_system\\properties\\db.properties"));
properties.load(fis);
// 通过键名获取对应的值
String databaseName = properties.get("databaseName").toString();
String user = properties.get("user").toString();
String password = properties.get("password").toString();
// 调用备份方法需要提供MySQL的用户名、密码和数据库名,这些数据从properties文件中读取
boolean b = JDBCUtils.backup(user, password, savePath, databaseName);
if (b) {
SimpleTools.informationDialog(Alert.AlertType.INFORMATION, "提示", "信息", "备份数据库成功!");
} else {
SimpleTools.informationDialog(Alert.AlertType.ERROR, "提示", "错误", "备份数据库失败!");
}
// 关闭流
fis.close();
}
}
运行程序:
备份成功后用记事本打开,可以看到如下信息:
添加账目
添加功能的实现在AddAccountFrameController的addButtonEvent()方法中,代码如下:
// 类型
String type = selectedRadioButton;
// 金额,把从文本框得到的string类型数据转换为float类型
float money = Float.parseFloat(moneyTextField.getText());
// 分类
String classification = selectedCoboboxItem;
// 备注
String memo = memoTextArea.getText();
// 日期
String date = datePickerTextField.getValue().toString();
// 将用户输入的数据封装到Record实体类中
Record record = new Record(Session.getUser().getUserId(), type, money, classification, memo, date);
// 实例化RecordDao对象
RecordDao recordDao = new RecordDao();
// 添加数据到数据库
boolean b = recordDao.addRecord(record);
// 对添加操作的结果进行判断处理
if (b) {
SimpleTools.informationDialog(Alert.AlertType.INFORMATION, "提示", "信息", "添加账目成功!");
// 清空用户选择
outputRadioButton.setSelected(false);
inputRadioButton.setSelected(false);
moneyTextField.setText("");
classificationComboBox.getItems().clear();
memoTextArea.setText("");
datePickerTextField.getEditor().setText("");
} else {
SimpleTools.informationDialog(Alert.AlertType.ERROR, "提示", "错误", "添加账目失败!");
}
选中“收入”单选按钮,下面的分类全都是“收入”的分类名称:
选中“支出”单选按钮,下面的分类全都是“支出”的分类名称:
选中“日期”单选按钮,下面表格方便用户选时间:
收入和支出成功添加:
可以在主界面查看添加成功的记录:
删除账目
查询、删除按钮的事件监听器代码如下:
/**
* ”查询“按钮的事件监听器
*
* @param actionEvent 事件
*/
@FXML
public void checkButtonEvent(ActionEvent actionEvent) {
// 实例化Record对象
Record record = new Record();
// 实例化RecordDao对象
RecordDao recordDao = new RecordDao();
// 通过记录ID和用户ID查询账目记录
Record checkedRecord = recordDao.selectRecordByIdAndUserId(Integer.parseInt(idTextField.getText()), Session.getUser().getUserId());
String info = "";
if (checkedRecord.getRecordType() == null && checkedRecord.getRecordClassification() == null) {
info = "无此查询结果!";
} else {
info =
"类型:\t\t" + checkedRecord.getRecordType() + "\n"
+ "金额:\t\t" + checkedRecord.getRecordMoney() + "\n"
+ "分类:\t\t" + checkedRecord.getRecordClassification() + "\n"
+ "备注:\t\t" + checkedRecord.getRecordMemo() + "\n"
+ "日期:\t\t" + checkedRecord.getRecordDate() + "\n";
}
// 显示查询结果
contentLabel.setText(info);
}
/**
* ”删除“按钮的事件监听器
*
* @param actionEvent 事件
*/
@FXML
public void deleteButtonEvent(ActionEvent actionEvent) {
// 将string类型数据转换为int类型数据
int id = Integer.parseInt(idTextField.getText());
// 实例化RecordDao对象
RecordDao recordDao = new RecordDao();
// 根据ID删除记录
boolean b = recordDao.deleteRecord(new Record(id));
if (b) {
SimpleTools.informationDialog(Alert.AlertType.INFORMATION, "提示", "信息", "删除数据成功!");
// 删除成功后就清除窗体数据
idTextField.setText("");
contentLabel.setText("");
} else {
SimpleTools.informationDialog(Alert.AlertType.ERROR, "提示", "错误", "删除数据失败!");
}
}
界面:
输入序号查询如下:
运行程序,执行功能如下:
数据库前后对比:
修改账目
查询按钮的事件处理代码如下:
/**
* ”更改“按钮的事件监听器
*
* @param actionEvent 事件
*/
@FXML
public void alterButtonEvent(ActionEvent actionEvent) {
// 序号
int id = Integer.parseInt(idTextField.getText());
//类型
String type = "";
if (inputRadioButton.isSelected()) {
type = inputRadioButton.getText();
} else if (outputRadioButton.isSelected()) {
type = outputRadioButton.getText();
}
// 金额,把从文本框得到的string类型数据转换为float类型
float money = Float.parseFloat(moneyTextField.getText());
// 分类
String classification = classificationComboBox.getSelectionModel().getSelectedItem().toString();
// 备注
String memo = memoTextArea.getText();
// 日期
String date = datePickerText.getValue().toString();
// 将用户修改的数据封装到实体类中
Record record = new Record(Session.getUser().getUserId(), id, type, money, classification, memo, date);
// 实例化RecordDao对象
RecordDao recordDao = new RecordDao();
// 执行修改操作
boolean b = recordDao.updateRecord(record);
// 对修改结果进行判断
if (b) {
SimpleTools.informationDialog(Alert.AlertType.INFORMATION, "提示", "信息", "修改账目成功!");
} else {
SimpleTools.informationDialog(Alert.AlertType.ERROR, "提示", "错误", "修改账目失败!");
}
}
界面:
查询功能测试如下:
修改账目,运行程序成功:
数据库前后对比:
4.每人每日总结
成员 | 总结 |
---|---|
王伊若 | 由于明确的分工,我们的效率提高了很多,希望再接再厉 |
黄锐 | 明天继续努力 |
江佳哲 | 在团队协作方面不太熟练,进度有点慢,会尽力加快步伐 |
叶尔森 | 熟悉了github的团队协作,初步尝试了代码的签入 |