本课程为Java编程入门级教程,通过构建简单的ATM机系统,帮助初学者掌握基本语法、流程控制及面向对象编程等核心概念。
### 账户类设计(满分50分)
#### 版本1:满分10 分
设计`Account1` 类,包含以下内容:
- 一个名为 `id` 的私有整型数据域,默认值为 0,长度限制在6位。
- 一个名为 `balance`的私有双精度浮点类型的数据域,默认值设为 0。
- 一个存储当前利率(默认值为0)的私有双精度浮点类型变量 `annualInterestRate`。所有账户均采用统一的年利率设置。
- 一个用于记录开户日期的时间类数据域名为 `dateCreated`。
构造方法:
- 创建无参构造函数,初始化所有字段至其默认值;
- 提供带特定ID和初始余额的构造器(要求初始余额非负);
访问与修改方法:
- 实现对私有变量 id、balance 和 annualInterestRate 的读写操作。
- 为 `dateCreated` 数据域提供只读接口。
其他成员方法:
- 定义名为 `getMonthlyInterestRate`的方法,返回月度利率值;
- 创建一个名为 `withdraw`的函数,允许从账户中扣除特定金额。需确保余额不会被透支,并且每次操作后更新交易记录。
- 实现存款功能通过定义 `deposit` 方法来实现。
数据域:
- 对双精度浮点类型的数据保留两位小数。
- 成员方法和数据领域进行合理性的检查以保证程序的健壮性。
#### 测试类 ATMMachine1
创建一个包含 100个账户的对象数组,其 id 设为从0到99,并将所有账户初始化余额设为 1000 美元。
主菜单如下:
- Main menu
- 选项一:查询余额;
- 选项二:取款操作;
- 选项三:存款交易;
#### 版本2: 满分20 分
在 `Account1` 类的基础上扩展为名为 `Account2` 的新类,增加如下特性:
- 新增一个私有字符串类型的数据域用于存储账号密码(仅限字母或数字组成且长度范围6至10位),显示时以星号表示。
- 一个新的客户姓名的私有数据字段命名为 name;
- 提供一个记录交易历史的 ArrayList 类型的新变量,每个交易项为 Transaction 类的一个实例。Transaction类定义参考教材中文版 P327 或英文版P404。
构造方法:
- 实现带初始余额和随机生成ID(确保不重复)的构造器,并且如果初始余额参数小于零,则抛出自定义异常并处理。
重写的方法:
- 重新设计 `withdraw` 方法,规定取款金额必须是100元的整数倍,单日提取上限为5,000美元。每次操作后更新交易记录。
- 同样修改存款方法以确保每次存入时也需添加一笔新的交易记录。
新增的方法:
- 设计一个名为 `changePassword` 的函数允许用户在旧密码正确、新密码满足要求且两次输入一致的情况下更改账户的登录密码。
测试类 ATMMachine2
主菜单如下(参考教材中文版 P296 或英文版P367):
- Main menu
- 选项零:创建一个新账号;
- 选项一:查询余额;
- 选项二:取款操作;
- 选项三:存款交易;
- 选项四: 查看账户的详细交易记录;
- 选项五: 更改密码;
- 选项六: 结束程序;
#### 版本3 : 满分20 分
基于 `Account2` 类,开发一个GUI界面模拟ATM系统。该应用程序应具备以下特性:
- 界面模仿实体键盘布局。
- 用户信息和交易记录存储在名为accounts.dat的文件中,并通过此文件进行读写操作以实现数据持久化。
- 所有用户交互均配有简洁友好的提示语。
以上便是本次作业的设计要求,希望每位同学都能根据上述指导完成高质量的作品。