一、需求:模拟实现一个ATM + 购物商城程序
额度 15000或自定义
实现购物商城,买东西加入 购物车,调用信用卡接口结账 其实是两套单独程序
可以提现,手续费5% 提现不能超过总余额一半
每月22号出账单,每月10号为还款日,过期未还,按欠款总额 万分之5 每日计息
支持多账户登录,每个用户有单独信息
支持账户间转账,
记录每月日常消费流水
提供还款接口
ATM记录操作日志
提供管理接口,包括添加账户、用户额度,冻结账户等。。。
二、需求分析:
角色:
管理员功能:
增删改查
记录日志
基本信息
额度 15000
普通用户功能:
可以提现,手续费5%
支持多账户登录
支持账户间转账
记录每月日常消费流水
提供还款接口
ATM记录操作日志
三、文件创建
刚开始的蒙比从不知道文件怎么创建开始?擦!怎么多需求,肯定不止一两个文件的,那多个文件又是怎么建的?我还特的心血来潮花一个早上去图去馆研究一下,最后挺乱的,后来看了视频,才发现有文件创建上是有开发规范的!
bin 用于执行可执行文件
conf 配置文件
db 用于存放用户数据
log 日志,记录相关信息
四、begin funny coding
这里我每次写一些,改一些,方便我这种小白看思路,想看最终版的直接拉到文章最后。
16/11/4 9:22
今天实现了检查帐户是否存在,信用卡是否超期的功能。自我感觉良好,哈哈~
学到的新技能:
1. 如何让字体打印出来有颜色??
print("\033[31;1mAccount[%s]doesnotexist!\033[0m" % account)
运行结果:Account [qee] does not exist! 打印出来是红色的
//代码效果参考:https://v.youku.com/v_show/id_XNjQwMDE5NTUwNA==.html
2.如何将一个文件内的字符串形式通过json转化为相应的字典格式??
用json.load()就好嘛,不过还是遇到一点小问题。
复制代码
account_file是文件的绝对路径
with open(account_file, "r", encoding="utf-8") as f: #打开文件
file_data = json.load(account_file)
print(file_data)
这样竟然出错了!!
错误信息:AttributeError: 'str' object has no attribute 'read'
复制代码
于是我去看了下json.load()的源码。
View Code
注意这一句return loads(fp.read(),……),我以为搞个文件的绝对路径就可以的,结果错误信息,当然是路径没有read()功能。
改正:
if os.path.isfile(account_file): #如果用户文件存在(即用户存在)
with open(account_file, "r", encoding="utf-8") as f: #打开文件
file_data = json.load(f)
print(file_data)
运行正确,GOOD!
3.如何把时间字符串转化为时间戳(忘了的)
先通过time.strptime()将时间字符串转成struct_time格式,再通过time.mktime()将struct_time转成时间戳。
11/4 文件形式
atm.py
复制代码
"""
ATM程序的执行文件
"""
import os
import sys
dir = os.path.dirname(os.path.dirname(os.path.abspath(file))) #找到路径
sys.path.insert(0, dir) #添加路径
print(dir)
将main.py里面所有代码封装成main变量
from core import main
if name == "main":
#这里我刚开始用run()就爆错了
main.run()
复制代码
settings.py
复制代码
1 """
2 初始化的配置
3 """
4
5 import logging
6 import os
7
8 #到ATM目录,方便后面创建帐户文件
9 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(file)))
//代码效果参考:https://v.youku.com/v_show/id_XNjQwMDE4NzkxNg==.html
10
11 LOGIN_LEVEL = logging.INFO #初始化日志级别
12
13
14 DATABASE = {
15 "db_tool":"file_storage", #文件存储,这里可拓展成数据库形式的
16 "name":"accounts", #db下的文件名
17 "path":"%s/db" % BASE_DIR
18 }
复制代码