团队作业4-第4篇Scrum博客

这个作业属于哪个课程 网工1934-软件工程
这个作业要求在哪里 团队作业4

1 站立式会议

1.1 会议照片

1.2 会议内容

昨天已完成的工作:

已初步完成主界面设计和数据库编写记录

今天计划完成的工作

项目模块 需要实现的功能 负责人 预计用时
数据库模块 数据库记录的备份、恢复和退出 李晓兰 2h
主界面模块 账目记录的增删改功能及界面 李晓兰 6h
主界面模块 完善主界面设计,报告界面前期准备 郭海燕 3h
主界面模块 查询界面功能 周凤秀 5h
主界面模块 软件帮助说明功能 苏培霓 3h
主界面模块 用户信息界面 杨芳 3h

工作中遇到的困难:

  1. 在添加账目的监听器方法中忘记考虑支出分类和收入分类的不同,还需要“分类”下拉列表框的事件监听器,下拉列表框的监听事件就是为了动态获取用户所选择的分类名称。

2.项目燃尽图

3 代码/文档签入记录

4 模块的最新(运行)截图:

数据库的备份

备份事件处理代码如下:


    /**
     * “备份”菜单项的事件监听器
     *
     * @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, "提示", "错误", "修改账目失败!");
        }
    }

界面:


查询功能测试如下:


修改账目,运行程序成功:


数据库前后对比:

5 每人每日总结

成员 总结
郭海燕 由于明确的分工,我们的效率提高了很多,希望再接再厉。
李晓兰 今天完成了项目中比较重要的功能,虽然过程中遇到了一些困难,但还是解决了,希望后面能再接再厉。
苏培霓 明天继续努力!
杨芳 在团队协作方面,不太熟练,进度有点慢,会尽力加快步伐。
周凤秀 熟悉了github的团队协作,初步尝试了代码的签入
posted @ 2021-11-24 22:39  ghy2021  阅读(28)  评论(0编辑  收藏  举报