ATM+購物商城

知識內容:python

1.luffy買teslagit

2.ATM+購物商城github

 

 

 

1、luffy買teslajson

需求:app

 1 1.目錄結構說明
 2 account
 3     luffy.json --> 存儲用戶帳戶信息 {"money": 1000000, "credit": 300000}
 4     tesla.json --> 存儲tesla帳戶信息 {"money": 0}
 5 bin
 6     start.py --> 項目入口文件
 7 core
 8     withdraw.py --> 項目核心文件
 9 logs
10     bank.log --> 日誌文件
11 
12 2.功能說明
13 當執行start.py出現交互窗口以下:
14     ----Luffy Bank----
15     1.帳戶信息
16     2.轉帳
17     3.提現
18 (1)選擇1帳戶信息顯示luffy的當前帳戶餘額和信用額度(存在luffy.json中)
19 (2)選擇2轉帳直接在luffy帳戶中扣掉75萬和5%的稅費而且tesla帳戶增長75萬(存在tesla.json中)
20 (3)當選擇3提現,提現金額應該小於信用額度,利息爲5%,提現金額爲用戶自定義
21 (4)把用戶轉帳、登錄、提現操做均經過logging模塊記錄日誌在bank.log中

 

思路以及特殊技巧:函數

1.思路spa

start.py是程序的主入口,調用withdraw中的chose_func函數來執行代碼,chose_func函數的功能相似一個菜單,將各個功能鏈接在一塊兒,先完成用戶信息展現、用戶轉帳、提現這3個功能函數,而後經過裝飾器實現用戶登陸驗證而且用戶只用登陸一次後續就不用登陸,最後將日誌記錄寫成一個函數。參數爲日誌的等級和輸出信息,在須要輸出日誌的地方調用這個函數便可debug

 

2.特殊技巧日誌

如何讓start.py調用withdraw.py中的函數,利用os模塊得到項目的根目錄而後動態添加進系統環境變量中便可,代碼以下:code

 1 def main():
 2     # 動態添加
 3     sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
 4     # 導入核心模塊文件
 5     from core import withdraw
 6     withdraw.chose_func()
 7 
 8 
 9 # 項目主入口
10 if __name__ == '__main__':
11     main()

 

裝飾器實現用戶登陸:

 1 # 裝飾器函數 -> 實現登陸
 2 def login(func):
 3     def wrapper(*args, **kwargs):
 4         global flag
 5         if flag:                                # 未登陸就進行登陸驗證
 6             print("請先登陸而後進行操做")
 7             username = input("username: ")
 8             password = input("password: ")
 9             if username == _username and password == _password:
10                 # print("登陸成功!")
11                 logging_message("info", "%s login!" % username)
12                 flag = False                    # 登陸成功就把flag改成False,再使用別的功能就不用登陸
13                 func(*args, **kwargs)
14             else:
15                 # print("用戶名或密碼錯誤!")
16                 logging_message("warn", "wrong username or wrong password!")
17         else:                                   # 登陸過就不用驗證
18             func(*args, **kwargs)
19 
20     return wrapper

注:logging_message()是調用日誌輸出函數

 

日誌輸出函數:

 1 # 實現日誌功能 日誌位置: /logs/bank.log
 2 def logging_message(level, message):
 3     route = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  # 提取項目的絕對路徑
 4     route += r"\logs\bank.log"  # 加上項目文件的相對路徑
 5 
 6     # create logger
 7     logger = logging.getLogger(_username)  # 得到logger對象
 8     logger.setLevel(logging.DEBUG)  # 設置一個全局的日誌級別
 9 
10     # create console handler and set level to debug
11     ch = logging.StreamHandler()  # 把日誌打印到屏幕
12     ch.setLevel(logging.INFO)  # 設定屏幕的日誌級別
13 
14     # create file handler and set level to warning
15     fh = logging.FileHandler(route)  # 把日誌打印到文件
16     fh.setLevel(logging.INFO)  # 設定文件的日誌級別
17 
18     # create formatter 設置輸出格式
19     formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
20 
21     # add formatter to ch and fh 給屏幕和文件設置輸出格式
22     ch.setFormatter(formatter)
23     fh.setFormatter(formatter)
24 
25     # add ch and fh to logger 把日誌打印到指定的handler中
26     logger.addHandler(ch)
27     logger.addHandler(fh)
28 
29     # 'application' code
30     # 設置信息
31     if level == 'debug':
32         logger.debug(message)
33     if level == 'info':
34         logger.info(message)
35     if level == 'warn':
36         logger.warning(message)
37     if level == 'error':
38         logger.error(message)
39     if level == 'critical':
40         logger.critical(message)
41 
42     #  添加下面一句,在記錄日誌以後移除句柄
43     logger.removeHandler(ch)
44     logger.removeHandler(fh)

 

 

3.完整代碼:https://github.com/15387062910/python_train/tree/master/luffy_tesla

 

 

 

2、ATM+購物商城

需求:

 1 模擬實現一個ATM + 購物商城程序
 2 功能以下:
 3     額度 15000或自定義
 4     實現購物商城,買東西加入 購物車,調用信用卡接口結帳
 5     能夠提現,手續費5%
 6     每個月22號出帳單,每個月10號爲還款日,過時未還,按欠款總額 萬分之5 每日計息
 7     支持多帳戶登陸
 8     支持帳戶間轉帳
 9     記錄每個月平常消費流水
10     提供還款接口
11     ATM記錄操做日誌 
12     提供管理接口,包括添加帳戶、用戶額度,凍結帳戶等。。。
13     用戶認證用裝飾器

示例代碼 https://github.com/triaquae/py3_training/tree/master/atm 

簡易流程圖:https://www.processon.com/view/link/589eb841e4b0999184934329 

 

 

思路以及特殊技巧:

 

 

代碼實現:

相關文章
相關標籤/搜索