Python学习day5作业

Python学习day5作业

ATM和购物商城

作业需求

ATM:

  1. 指定最大透支额度

  2. 可取款

  3. 定期还款(每月指定日期还款,如15号)

  4. 可存款

  5. 定期出账单

  6. 支持多用户登陆,用户间转帐

  7. 支持多用户

  8. 管理员可添加账户、指定用户额度、冻结用户等

购物车:

  1. 商品信息- 数量、单价、名称

  2. 用户信息- 帐号、密码、余额

  3. 用户可充值

  4. 购物历史信息

  5. 允许用户多次购买,每次可购买多件

  6. 余额不足时进行提醒

  7. 用户退出时 ,输出当次购物信息

  8. 用户下次登陆时可查看购物历史

  9. 商品列表分级显示

1. 程序说明

购物商城实现功能如下:

博客

多用户登录

商品按二级菜单显示

充值功能

多次购买,每次购买多件

余额不足提示充值

可查看购物历史

ATM实现功能如下:

指定最大透支额度

可取款

定期还款(每月指定日期还款,如15号)

可存款

定期出账单

支持多用户登陆,用户间转帐

支持多用户

管理员可添加账户、指定用户额度、冻结用户等

​ygqygq2的博客地址​

作业地址:​​https://git.oschina.net/ygqygq2/python_homework/tree/master/day5作业​​​

2. 基本流程图

Python学习day5作业-ATM和购物商城_python

3. 程序测试帐号

用户/密码:

ATM普通用户:1000/abc、1001/1001

ATM管理用户:admin/abc

购物商城:test/test

4. 程序结构:

.
├── Atm # ATM主程目录
│ ├── __init__.py
│ ├── api # ATM程序API目录
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ │ ├── __init__.cpython-35.pyc
│ │ │ └── pay1.cpython-35.pyc
│ │ └── pay.py # ATM支付api
│ ├── bin # ATM执行文件目录
│ │ ├── __init__.py
│ │ ├── atm.py # ATM执行程序,普通用户登录入口
│ │ └── manager.py # ATM管理员登录入口
│ ├── conf # ATM配置目录
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ │ ├── __init__.cpython-35.pyc
│ │ │ └── settings.cpython-35.pyc
│ │ └── settings.py # ATM配置文件
│ ├── core # ATM主要逻辑程序目录
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ │ ├── __init__.cpython-35.pyc
│ │ │ ├── accounts.cpython-35.pyc
│ │ │ ├── auth.cpython-35.pyc
│ │ │ ├── bill_date.cpython-35.pyc
│ │ │ ├── db_handler.cpython-35.pyc
│ │ │ ├── logger.cpython-35.pyc
│ │ │ ├── main.cpython-35.pyc
│ │ │ └── transaction.cpython-35.pyc
│ │ ├── accounts.py # 用于从文件里加载和存储账户数据
│ │ ├── auth.py # 用于帐户认证和帐户操作
│ │ ├── bill_date.py # 根据年-月,生成帐单起止时间模块
│ │ ├── db_handler.py # 数据库连接引擎
│ │ ├── logger.py # 日志记录模块
│ │ ├── main.py # 主逻辑程序
│ │ └── transaction.py # 记账\还钱\取钱等所有的与账户金额相关的操作模块
│ ├── db # 用户数据存储目录
│ │ ├── __init__.py
│ │ ├── account_sample.py # 生成一个初始的账户数据 ,把这个数据存成一个以这个账户id为文件名的文件,放在accounts目录就行了,程序自己去会这里找
│ │ └── accounts # 存各个用户的账户数据,一个用户一个文件
│ │ ├── 1000.json # 一个普通用户账户文件
│ │ └── admin.json # 一个管理员用户示例文件
│ ├── docs # 程序说明文档目录
│ │ └── __init__.py
│ └── log # 日志根目录
│ ├── __init__.py
│ ├── access.log # 用户访问和操作的相关日志
│ ├── accounts # 存各个用户的帐单数据,一个用户一个文件
│ │ └── 1000.bills # 一个普通用户的帐单文件
│ └── transactions.log # 所有的交易还款等日志
├── README.md # readme文件
└── Shopping_mall # 购物商城程序目录
├── bin # 购物商城执行文件目录
│ ├── __init__.py
│ └── shopping_mall.py # 购物商城入口程序
├── conf # 购物商城配置目录
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-35.pyc
│ │ ├── goods.cpython-35.pyc
│ │ └── settings.cpython-35.pyc
│ ├── goods.py # 购物商城商品价格列表
│ └── settings.py # 购物商城配置文件
├── core # 购物商城主要逻辑程序目录
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-35.pyc
│ │ ├── accounts.cpython-35.pyc
│ │ ├── auth.cpython-35.pyc
│ │ ├── db_handler.cpython-35.pyc
│ │ ├── logger.cpython-35.pyc
│ │ ├── main.cpython-35.pyc
│ │ └── shopping.cpython-35.pyc
│ ├── accounts.py # 用于从文件里加载和存储账户数据
│ ├── auth.py # 用于帐户认证和帐户操作
│ ├── db_handler.py # 数据库连接引擎
│ ├── logger.py # 日志记录模块
│ └── main.py # 主逻辑程序
├── db # 用户数据存储目录
│ └── accounts # 存各个用户的账户数据,一个用户一个文件
│ ├── __init__.py
│ └── test.json # 一个普通用户账户文件
└── log
├── access.log # 用户访问和操作的相关日志
└── test_shopping.log # 用户购物历史日志

5. 程序测试

  1. 管理员登录失败

    ​python Atm/bin/manager.py​

################ATM admin manager#################
account:a
password:a
Account [a] does not exist!
account:a
password:a
Account [a] does not exist!
account:a
password:a
Account [a] does not exist!
2017-01-27 01:47:07,377 - access - ERROR - account [a] too many login attempts


Process finished with exit code 0
  1. 管理员登录(不允许普通用户登录)

    ​python Atm/bin/manager.py​

################ATM admin manager#################
account:1000
password:abc
Permission denied


Process finished with exit code 0
################ATM admin manager#################
account:admin
password:abc


------- Admin erea ---------
1. 添加账户
2. 查询用户信息
3. 用户信息修改(冻结帐户、用户信用卡额度等)
4. 生成全部用户帐单
5. 退出


>>:1001
Option does not exist!


------- Admin erea ---------
1. 添加账户
2. 查询用户信息
3. 用户信息修改(冻结帐户、用户信用卡额度等)
4. 生成全部用户帐单
5. 退出


>>:1
account id:1001
password:1001
Account [1001] is exist,try another account.
account id:1002
password:1002
account [1002] added sucessed


------- Admin erea ---------
1. 添加账户
2. 查询用户信息
3. 用户信息修改(冻结帐户、用户信用卡额度等)
4. 生成全部用户帐单
5. 退出
>>:2
Please input your query account id:1002
pay_day :22
credit :15000
status :0
balance :15000
id :1002
enroll_date :2017-01-27
expire_date :2022-01-26


------- Admin erea ---------
1. 添加账户
2. 查询用户信息
3. 用户信息修改(冻结帐户、用户信用卡额度等)
4. 生成全部用户帐单
5. 退出


>>:2
Please input your query account id:1001
pay_day :22
credit :15000
status :0
id :1001
balance :15000
enroll_date :2017-01-27
expire_date :2022-01-26


------- Admin erea ---------
1. 添加账户
2. 查询用户信息
3. 用户信息修改(冻结帐户、用户信用卡额度等)
4. 生成全部用户帐单
5. 退出


>>:>>:3
account id:1001
You can choose the items like this:
{
"password": "abc",
"credit": 15000,
"status": 0,
"expire_date": "2021-01-01",
"pay_day": 22
}
Input modify items(json):{"credit":20000,"pay_day": 23}
Account infomation updated!


------- Admin erea ---------
1. 添加账户
2. 查询用户信息
3. 用户信息修改(冻结帐户、用户信用卡额度等)
4. 生成全部用户帐单
5. 退出


>>:2
Please input your query account id:1001
pay_day :23
credit :20000
status :0
balance :15000
id :1001
enroll_date :2017-01-27
expire_date :2022-01-26


------- Admin erea ---------
1. 添加账户
2. 查询用户信息
3. 用户信息修改(冻结帐户、用户信用卡额度等)
4. 生成全部用户帐单
5. 退出


>>:>>:2
Please input your query account id:0
Get account [0] info pemission denied!


------- Admin erea ---------
1. 添加账户
2. 查询用户信息
3. 用户信息修改(冻结帐户、用户信用卡额度等)
4. 生成全部用户帐单
5. 退出


>>>>:2
Please input your query account id:0
Get account [0] info pemission denied!


------- Admin erea ---------
1. 添加账户
2. 查询用户信息
3. 用户信息修改(冻结帐户、用户信用卡额度等)
4. 生成全部用户帐单
5. 退出


>>>>:2
Please input your query account id:0
Get account [0] info pemission denied!


------- Admin erea ---------
1. 添加账户
2. 查询用户信息
3. 用户信息修改(冻结帐户、用户信用卡额度等)
4. 生成全部用户帐单
5. 退出


>>:4
------------------Account bill:-------------------
-----------------------End------------------------
------------------Account bill:-------------------
expire_date :2021-01-01
credit :15000
enroll_date :2016-01-02
status :0
balance :4265.0
pay_day :22
id :1000
Today is not the bill generation day!
Account [1000] need to repay [10735.0]
-----------------------End------------------------
------------------Account bill:-------------------
expire_date :2022-01-26
id :1001
pay_day :23
status :0
balance :15000
enroll_date :2017-01-27
credit :20000
Today is not the bill generation day!
Account [1001] need to repay [5000]
-----------------------End------------------------
------------------Account bill:-------------------
expire_date :2022-01-26
credit :15000
pay_day :22
status :0
balance :15000
enroll_date :2017-01-27
id :1002
Today is not the bill generation day!
Account [1002] needn't to repay.
-----------------------End------------------------
------------------Account bill:-------------------
-----------------------End------------------------


------- Admin erea ---------
1. 添加账户
2. 查询用户信息
3. 用户信息修改(冻结帐户、用户信用卡额度等)
4. 生成全部用户帐单
5. 退出


>>:5
###################Bye,thanks!####################
  1. 普通用户登录(不允许管理员登录)

    ​python Atm/bin/atm.py​

##################Welcome to ATM##################
account:1000
password:abc


------- Oldboy Bank ---------
1. 账户信息
2. 还款(示例)
3. 取款(示例)
4. 转账
5. 存款
6. 账单
7. 退出


>>:1
status :0
pay_day :22
enroll_date :2016-01-02
balance :4265.0
expire_date :2021-01-01
credit :15000
id :1000


------- Oldboy Bank ---------
1. 账户信息
2. 还款(示例)
3. 取款(示例)
4. 转账
5. 存款
6. 账单
7. 退出


>>:2
--------- BALANCE INFO --------
Credit : 15000
Balance: 4265.0
Tip: [b] to back
Input repay amount:200
2017-01-28 09:49:30,934 - transaction - INFO - account:1000 action:repay amount:200.0 interest:0.0
New Balance:4465.0
Tip: [b] to back
Input repay amount:b


------- Oldboy Bank ---------
1. 账户信息
2. 还款(示例)
3. 取款(示例)
4. 转账
5. 存款
6. 账单
7. 退出


>>:3
--------- BALANCE INFO --------
Credit : 15000
Balance: 4465.0
Tip: [b] to back
Input withdraw amount:200
2017-01-28 09:49:44,162 - transaction - INFO - account:1000 action:withdraw amount:200.0 interest:10.0
New Balance:4255.0
Tip: [b] to back
Input withdraw amount:b


------- Oldboy Bank ---------
1. 账户信息
2. 还款(示例)
3. 取款(示例)
4. 转账
5. 存款
6. 账单
7. 退出


>>:4
--------- BALANCE INFO --------
Credit : 15000
Balance: 4255.0


(Tip: input [b] to back)
Input receiver:1001
Input transfer amount:200
2017-01-28 09:50:06,723 - transaction - INFO - account:1000 action:transfer amount:200.0 interest:10.0
New Balance:4045.02017-01-28 09:50:06,723 - transaction - INFO - account:1001 action:receive amount:200.0 interest:0.0


Input receiver:b


------- Oldboy Bank ---------
1. 账户信息
2. 还款(示例)
3. 取款(示例)
4. 转账
5. 存款
6. 账单
7. 退出


>>:5
--------- BALANCE INFO --------
Credit : 15000
Balance: 4045.0


(Tip: input [b] to back)
Input your save amount:400
2017-01-28 09:53:45,354 - transaction - INFO - account:1000 action:save amount:400.0 interest:0.0
New Balance:4445.0


------- Oldboy Bank ---------
1. 账户信息
2. 还款(示例)
3. 取款(示例)
4. 转账
5. 存款
6. 账单
7. 退出


>>:6
Please input the date you will query like [2016-12]>>>2016-12
Account [1000] bills:
--------------------------------------------------
bill_date: 2017-1 account_id: 1000 need_repay: 10555


bill_date: 2017-1 account_id: 1000 need_repay: 10555


Account [1000] history log:
--------------------------------------------------
--------------------------------------------------


------- Oldboy Bank ---------
1. 账户信息
2. 还款(示例)
3. 取款(示例)
4. 转账
5. 存款
6. 账单
7. 退出


>>:6
Please input the date you will query like [2016-12]>>>2017-01
Account [1000] bills:
--------------------------------------------------
bill_date: 2017-1 account_id: 1000 need_repay: 10555


bill_date: 2017-1 account_id: 1000 need_repay: 10555


Account [1000] history log:
--------------------------------------------------
2017-01-25 21:33:43,281 - transaction - INFO - account:1000 action:pay amount:10000.0 interest:0.0
2017-01-25 22:16:26,609 - transaction - INFO - account:1000 action:pay amount:100.0 interest:0.0
2017-01-25 22:16:52,347 - transaction - INFO - account:1000 action:pay amount:100.0 interest:0.0
2017-01-26 21:47:42,372 - transaction - INFO - account:1000 action:repay amount:100.0 interest:0.0
2017-01-26 21:51:13,819 - transaction - INFO - account:1000 action:repay amount:100.0 interest:0.0
2017-01-26 21:51:24,608 - transaction - INFO - account:1000 action:withdraw amount:500.0 interest:25.0
2017-01-26 21:53:16,352 - transaction - INFO - account:1000 action:withdraw amount:200.0 interest:10.0
2017-01-28 09:49:30,934 - transaction - INFO - account:1000 action:repay amount:200.0 interest:0.0
2017-01-28 09:49:44,162 - transaction - INFO - account:1000 action:withdraw amount:200.0 interest:10.0
2017-01-28 09:50:06,723 - transaction - INFO - account:1000 action:transfer amount:200.0 interest:10.0
2017-01-28 09:53:45,354 - transaction - INFO - account:1000 action:save amount:400.0 interest:0.0
--------------------------------------------------


------- Oldboy Bank ---------
1. 账户信息
2. 还款(示例)
3. 取款(示例)
4. 转账
5. 存款
6. 账单
7. 退出


>>:7
###################Bye,thanks!####################


Process finished with exit code 1
  1. 购物商城已注册用户登录

    ​python Shopping_mall/bin/shopping_mall.py​

------------Welcome to shopping mall!-------------


--------------------------------------------------
1. Login
2. Sign up
3. Logout
--------------------------------------------------


>>:1
Please input your user name and password!
user:test
password:test
Input [y|yes] to view your purchase history,[others] means not.
Please input:y
User test shopping history:
--------------------------------------------------
2017-01-17 17:15:39,199 - shopping - INFO - account:test action:shopping product_number:2 goods:Tea cost:29378
2017-01-17 17:22:13,163 - shopping - INFO - account:test action:shopping product_number:1 goods:Coffee cost:29348
2017-01-24 21:55:50,796 - shopping - INFO - account:test action:shopping product_number:2 goods:Milk cost:29230
2017-01-25 00:05:46,534 - shopping - INFO - account:test action:shopping product_number:1 goods:Coffee cost:29200
2017-01-25 00:06:07,089 - shopping - INFO - account:test action:shopping product_number:1 goods:Coffee cost:29170
2017-01-25 00:36:53,038 - shopping - INFO - account:test action:shopping product_number:1 goods:Coffee cost:29140
2017-01-25 21:33:07,174 - shopping - INFO - account:test action:shopping product_number:1 goods:Coffee cost:30110
-------------------Species list-------------------
0 --> Mobile phone
1 --> Car
2 --> Drink
-----------------------End------------------------
[q|b] to quit;[c] to check;[t] to top up
Input your choice:t
Do you want to charge more money?[y|n|b]y
Please use your ATM account to pay.
Please input your top-up amount:1000
account:abc
password:a
Account [abc] does not exist!
account:1000
password:abc
2017-01-28 10:31:52,106 - transaction - INFO - account:1000 action:pay amount:1000.0 interest:0.0
Pay successed
Your balance is [41310]
-------------------Species list-------------------
0 --> Mobile phone
1 --> Car
2 --> Drink
-----------------------End------------------------
[q|b] to quit;[c] to check;[t] to top up
Input your choice:2
---->Enter Drink
-------------------Product list-------------------
0.Milk 59
1.Coffee 30
2.Tea 311
-----------------------End------------------------
[q|quit] to quit;[b|back] to back;[c|check] to check
Please choice the product:1
Please input the number of product:2
Added [2] [Coffee] into shopping cart,your balance is [40250]
2017-01-28 10:32:07,465 - shopping - INFO - account:test action:shopping product_number:2 goods:Coffee cost:40250
-------------------Product list-------------------
0.Milk 59
1.Coffee 30
2.Tea 311
-----------------------End------------------------
[q|quit] to quit;[b|back] to back;[c|check] to check
Please choice the product:b
-------------------Species list-------------------
0 --> Mobile phone
1 --> Car
2 --> Drink
-----------------------End------------------------
[q|b] to quit;[c] to check;[t] to top up
Input your choice:0
---->Enter Mobile phone
-------------------Product list-------------------
0.Iphone7 6188
1.Iphone7 plus 7888
2.Xiaomi5 2888
-----------------------End------------------------
[q|quit] to quit;[b|back] to back;[c|check] to check
Please choice the product:0
Please input the number of product:1
2017-01-28 10:32:20,656 - shopping - INFO - account:test action:shopping product_number:1 goods:Iphone7 cost:34062
Added [1] [Iphone7] into shopping cart,your balance is [34062]
-------------------Product list-------------------
0.Iphone7 6188
1.Iphone7 plus 7888
2.Xiaomi5 2888
-----------------------End------------------------
[q|quit] to quit;[b|back] to back;[c|check] to check
Please choice the product:c
*********You purchased products as below**********
Goods Price Number Cost
Iphone7 6188 1 6188
Coffee 30 2 60
***********************End************************
You total cost: 6248
Your balance is [34062]
-------------------Product list-------------------
0.Iphone7 6188
1.Iphone7 plus 7888
2.Xiaomi5 2888
-----------------------End------------------------
[q|quit] to quit;[b|back] to back;[c|check] to check
Please choice the product:b
-------------------Species list-------------------
0 --> Mobile phone
1 --> Car
2 --> Drink
-----------------------End------------------------
[q|b] to quit;[c] to check;[t] to top up
Input your choice:q
*********You purchased products as below**********
Goods Price Number Cost
Iphone7 6188 1 6188
Coffee 30 2 60
***********************End************************
You total cost: 6248
Your balance is [34062]
###################Bye,thanks!####################


Process finished with exit code 1
  1. 购物商城新注册用户

    ​python Shopping_mall/bin/shopping_mall.py​

------------Welcome to shopping mall!-------------


--------------------------------------------------
1. Login
2. Sign up
3. Logout
--------------------------------------------------


>>:2
user:test01
password:test01
-------------------Species list-------------------
0 --> Drink
1 --> Mobile phone
2 --> Car
-----------------------End------------------------
[q|b] to quit;[c] to check;[t] to top up
Input your choice:c
*********You purchased products as below**********
Goods Price Number Cost
***********************End************************
You total cost: 0
Your balance is [0]
-------------------Species list-------------------
0 --> Drink
1 --> Mobile phone
2 --> Car
-----------------------End------------------------
[q|b] to quit;[c] to check;[t] to top up
Input your choice:q
*********You purchased products as below**********
Goods Price Number Cost
***********************End************************
You total cost: 0
Your balance is [0]
###################Bye,thanks!####################


Process finished with exit code 1