### ATM系统项目说明文档
> 运用基础阶段所学习的python的知识,来模拟出银行的ATM系统。
>
> 要求:使用面向对象编程来完成这个项目
## ATM系统的主要功能:
1. 注册:用户名,手机号,身份证号(18位),密码(两次确认,长度6位)
2. 查询:账号必须存在,密码(三次机会,不对就锁卡)
3. 取款:账号必须存在,密码(三次机会,不对就锁卡),取款金额不能大于存款
4. 存款:账号必须存在,存款金额不能低于0
5. 转帐:你的账户,转款账户都必须存在,密码(三次机会,不对就锁卡),转账金额不能超过余额
6. 锁卡:账号必须存在,可以使用密码冻结,还可以使用身份证号冻结
7. 解卡:账号必须存在,只能使用身份证号进行解锁
8. 补卡:使用身份证进行补卡,每个身份证只能有一张卡,之前的卡作废
9. 改密:愿密码进行改密,也可以使用身份证进行改密
10. 退出: 保存数据
## 项目分析
> 根据需求进行分析,思考如何对项目进行设计和架构
### 思考问题一:如果使用面向对象编程思想来完成
当前的项目功能和项目演示中,大家看到了几个对象?
#### 银行卡对象:Card 存储银行卡信息
+ 卡号。 cardid
+ 密码 password
+ 余额。 money
+ 是否锁卡。islock
#### 用户对象:Person 存储用户信息
+ 用户名。 name
+ 身份证号. userid
+ 手机号. phone
+ 卡. card. 银行卡对象
#### 控制器对象: Controller 具体的操作控制类
> 控制器对象中主要就是去实现ATM这个系统中的操作
>
> 在上面定义的那十个方法
1. 注册 :regiser
2. 查询:query
3. 取款:get_money
4. 存款:add_money
5. 转帐:save_money
6. 锁卡:lock
7. 解卡:unlock
8. 补卡:new_card
9. 改密:change_pwd
10. 退出: save
#### 视图对象: Views。 显示操作界面的
欢迎界面,操作界面
### 思考问题二:如何存储数据?
肯定是用文件进行存储。
卡号:用户 ==> user_dict ==> user.txt
身份证:卡号 ==> user_id_dict ==> userid.txt
### 开发周期
花4个小时左右的时间,去分析这个项目,可以先动手尝试一部分
花4-10个小时左右,可以去完成和实现这个项目
### 扩展功能
给当前ATM增加一个 交易记录 的功能
就像存折一样,每次对金额的变动都需要记录下来
每个银行卡都有自己的交易记录
记录的格式:
[2019/12/12 12:12:12] 存款 200 元,余额 300 元。
[2019/12/12 13:13:13] 转账 向用户:张三,卡号:100100 转账 100 元,余额 200 元。