模擬購物和信用卡
好久沒寫博文了,看了下距離before篇的時間確實有點長,真是感覺時間越來越不夠用了…… 好了不扯了,進入主題:
先交代一下,此程式純粹是為了練習Python各種元素的用法而假想出來的,距離現在已有段時間,此時筆者只是簡單的掌握了列表、字典、模組(sys、os、pickle)檔案讀寫等基本語法。
功能模型思路:
1、錢、沒錢怎麼買東西…… 所以每次購物需要帶錢(現金+信用卡)
2、既然是購物程式那麼要有商品列表和價格的對照表以便使用者購買,使用者不能買超出自己支付能力的商品,購買商品成功應當加入使用者的購物列表,並且實時的顯示使用者的餘額,購物刷卡沒有手續費。
3、當使用者現金不夠時可以用信用卡支付,信用卡付款金額 = 商品價格 - 現金(身上的錢)
4、信用卡可以提現金,但是有手續費。
5、應當提供還款介面。
6、可以檢視信用卡的明細,比如說什麼時間買過什麼東西,花了多少錢等……
7、退出
邏輯模型思路:
1、購物
print 購物列表,任意使用者可以光臨,money為使用者的所有錢,quit為退換主選單,如果現錢不夠可以刷卡
2、提現
10%的利息
3、還錢
4、檢視賬單(函式和Pickle)
最大額度 = 15000
可用額的 = 11000 (購買商品不能大於此額度)
虧欠金額 = 4000 (此金額不能大於15000)
######################################
DATE EVENT DATA INTEREST
1 car 20000 0
2 還款 -20000 0
3 提現 1000 100
5、退出
程式碼如下:
#!/usr/bin/env python
#Author: Created by soulboy
#Function: Shopping with a credit card
import sys
import os
import pickle
salary = int(raw_input("Inpuet your salary:").strip()) #初始化每次購物的現金
def dump(): #把pickle.dump方法定義為函式方便呼叫
output = file('data.pkl','wb')
pickle.dump(maxoverdraft,output) #信用卡最大透支額度
pickle.dump(available,output) #可用額度
pickle.dump(overdraft,output) #虧欠額度
pickle.dump(bill,output) #用bill字典來儲存以日期為Key儲存信用卡的明細
output.close()
f = str(os.path.isfile('data.pkl')) #定義pickle的檔案data,用來儲存序列化資料物件
if 'False' in f: #如果程式是首次執行,會初始化如下物件並儲存至當前目錄data.pkl檔案中
maxoverdraft = 15000
available = 15000
overdraft = 0
bill = {}
dump()
def load(): #從data.pkl檔案中按順序讀取序列化資料物件並重新賦值
global maxoverdraft #宣告全域性變數方便在區域性變數在函式外呼叫
global available
global overdraft
global bill
pkl_file = file('data.pkl','rb')
maxoverdraft = pickle.load(pkl_file)
available = pickle.load(pkl_file)
overdraft = pickle.load(pkl_file)
bill = pickle.load(pkl_file)
pkl_file.close()
def information(): #定義資訊方便各功能模組重複呼叫
print '''
maxoverdraft = %s $ #最大透支額度
available = %s $ #可用額度
overdraft = %s $''' %(maxoverdraft,available,overdraft) #虧欠額度
def welcome(): #主選單函式
print '''[1]:Go shopping !
[2]:Withdraw money !
[3]:Repayment !
[4]:Credit card list !
[5]:Exit !
'''
def authentication(): #密碼認證函式,本程式中信用卡號為:soulboy,密碼為:soulboy
while True:
count = 0
account = raw_input("Please input your username:")
if account == 'soulboy':
password = raw_input("Please input your password:")
if password == 'soulboy':break
while password != 'soulboy': #實時顯示剩餘密碼重試次數
count += 1
chance = 3 - count
password = raw_input("Error password and try again,you have %s chance:"%(chance))
if count == 3:break
if count == 3:continue
else:break
else:
print "Sorry, the %s is not exist and please check yourself:" % account
while True:
welcome()
print "Your Salary: %s $" % salary
option = raw_input("Based on the digital option:").strip()
if option == '1':
shoplist = []
while True:
products = ['house','car','phone','computer','clothes'] #商品列表中的元素依次與價格列表中的元素一一對應
pirce = [600000,200000,4000,8000,200]
print "########################## The list of goods ##########################"
for p in products:
print "%s t %s" %(p,pirce[products.index(p)]) #透過商品列表的座標取出商品對應的價格
choice = raw_input("please choice by it's name:")
result = products.count(choice)
if choice == 'quit':
print '''
Your shopping list: %s
Remaining salary: %s
welcome to next shopping
#######################################################################''' % (shoplist,salary) #顯示購物列表、剩餘現金
break
elif result == 0: #商品名稱不存在提示重輸
print " %s not in goods list, input right name:" % choice
continue
pgoods = pirce[products.index(choice)]
if pgoods > salary: #當商品價格大於現金
selection = raw_input("not engouh money for %s, you will use credit card ?[yes] or [no]:" %(choice)) #是否刷卡
if selection == 'yes':
authentication() #安全認證
load() #讀取data.pkl檔案中
total = salary + available
if total >= pgoods: #當信用卡和現金大於商品價格時
date = raw_input("Input your date:") #輸入交易日期
event = choice #事件
interest = 0 #利息
data = pgoods - salary #資料
bill[date] = [event,data,interest] #以日期key其他元素為value儲存至字典中
overdraft = overdraft + data
available = available - pgoods + salary
dump() #儲存至data.pkl檔案中
shoplist.append(choice) #新增商品至購物列表
salary = 0 #現金清0
print '''%s add your shopping list %s
salary left:%s $
credit car left: %s $''' %(choice,shoplist,salary,available)
else: #錢不夠
print "Sorry not engouh money ! "
else:
salary = salary - pgoods #現金大於產品價格
shoplist.append(choice)
print "%s add your shopping list %s ,and your money left:%s $" %(choice,shoplist,salary)
elif option == '2': #提現金
authentication()
date = raw_input("Input the date:") #日期
while True:
load()
information()
print '''Your Salary: %s $
withdrawal:[yes]
quit:[no]''' % salary
select = raw_input("your choice:[yes] or [no]") #是否繼續
if select == 'no':break
withdrawal = int(raw_input("Input the withdrawal amount and the fee is 10%:"))
if withdrawal > available: #提取金額不能大於可用金額
print "Beyond the maximun amount:"
continue
else:
salary += withdrawal #現金增加
data = withdrawal + withdrawal / 10
interest = withdrawal / 10 #手續費為提取金額的10%
available = available - data
event = "remove"
overdraft += data
bill[date] = [event,data,interest]
dump() #和之前一樣
print "The sucess of the transaction and you salary: %s $" % salary
continue
elif option == '3': #還錢介面
date = raw_input("Input the date:") #日期
authentication()
while True:
load()
information()
print '''Your Salary: %s $
repayment:[yes]
quit:[no]''' % salary
select = raw_input("your choice:[yes] or [no]")
if select == 'no':break
repayment = int(raw_input("Input the repayment amount:"))
if repayment > salary: #還錢金額不能大於你現金
print "You don't have so much!"
elif repayment > overdraft: #還錢金額最多等於虧欠額度
excess = repayment - overdraft
salary = salary - repayment + excess
event = "back"
data = -overdraft
interest = 0
available += overdraft
overdraft -= overdraft
bill[date] = [event,data,interest]
dump()
else: #正常情況下
salary = salary - repayment
available += repayment
overdraft -= repayment
event = "back"
data = -repayment
interest = 0
bill[date] = [event,data,interest]
dump()
elif option == '4': #檢視信用卡明細
load()
print '''#######################################################################
DATE EVENT DATA INTEREST'''
for k,v in bill.items():
print "%s %s %s %s" %(k,v[0],v[1],v[2])
information()
print "#######################################################################"
dump()
elif option == '5': #退出
sys.exit()
補充說明:日期這塊是手動輸入的,當時還沒看到date模組,使用的時候每次日期儘量別重複,安全認證函式在檢視信用卡明細的時候沒有呼叫主要是為了方便檢視,日期忘記排序了,執行效果應該如下:
071810307.png
©著作權歸作者所有:來自51CTO部落格作者ftmoonfans的原創作品,如需轉載,請註明出處,否則將追究法律責任
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1747/viewspace-2820300/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 購物車模組
- JavaScript模擬拋物效果JavaScript
- js模擬拋物運動和慣性運動JS
- Laravel 高併發搶購模擬Laravel
- 得物App資料模擬平臺的探索和實踐APP
- python初學:第二步——模擬實現一個ATM + 購物商城程式Python
- 11.20 CW 模擬賽 T3.貨物分組
- 阿里雲物聯網平臺裝置模擬器阿里
- JavaScript模擬拋物運動的程式碼實現JavaScript
- 硬幣購物
- JavaScript(購物Demo)JavaScript
- 父子元件通訊——模擬12306購票新增乘車人元件
- unity3D 兩點拋物線模擬炮彈Unity3D
- 淘物購物商城——原型設計原型
- 在雲中生成和模擬iOSiOS
- day83:luffy:新增購物車&導航欄購物車數字顯示&購物車頁面展示
- 網上購物框架框架
- ATM+購物車
- flutter 購物車功能Flutter
- 模擬
- qsort的模擬實現和練習
- 淘寶買家授權API系列:新增購物車商品、刪除購物車商品、獲取購物車商品列表API
- 2024.11.20 NOIP模擬 - 模擬賽記錄
- 10.6 模擬賽(NOIP 模擬賽 #9)
- IGN 前瞻:國風城市建設模擬遊戲《天神鎮物語》遊戲
- 織物影像的配準和拼接演算法的MATLAB模擬,對比SIFT,SURF以及KAZE演算法Matlab
- 芒果圈購物網站網站
- python之購物車程式Python
- 購物系統專案
- 廣告電商系統開發和模式架構分析之購物車模組(第四章)模式架構
- 有限元模擬 有限體積模擬
- Cisco Packet Tracer Student(思科網路模擬器)模擬集線器和嗅探攻擊
- Simdroid模擬軟體特點和優勢
- ADOV路由和DSR路由matlab對比模擬路由Matlab
- stem32 程式編譯和proteus模擬編譯
- 模擬Oracle行遷移和行連結Oracle
- JavaScript進階之模擬call,apply和bindJavaScriptAPP
- SAP 長期計劃編制和模擬