python 信用卡系统+购物商城见解
通过完成信用卡系统+购物商城 使自己在利用 字典和列表方面有了较大的提升,感悟很深,
下面将我对此次作业所展示的重点列表如下:
#!/usr/bin/env python3.5 # -*-coding:utf8-*- import pickle,os,datetime,sysBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR) # 加载用户信息 if os.path.exists(r'%s/config/user_acc.txt'% BASE_DIR):f = open("%s/config/user_acc.txt" % BASE_DIR, "rb")data = pickle.loads(f.read())f.close() else:data = [] # 加载ATM操作日志信息 if os.path.exists(r'%s/config/user_log.txt'% BASE_DIR):fl = open("%s/config/user_log.txt" % BASE_DIR, "rb")data_log = pickle.loads(fl.read())fl.close() else:data_log = [] # ATM 操作日志增加函数 def User_Action(cz_usercard,cz_flage,usercard,user_action,money=0):global data_logdata_log_add = {}data_log_add["cz_usercard"] = cz_usercarddata_log_add["cz_flage"] = cz_flagedata_log_add["cz_action"] = user_actiondata_log_add["cz_adduser"] = usercarddata_log_add["cz_time"] = datetime.datetime.now()data_log_add["cz_money"] = moneydata_log.append(data_log_add)fl = open("%s/config/user_log.txt" % BASE_DIR, "wb")pickle.dump(data_log, fl)fl.close() # 增加用户 def User_Add(cz_usercard,cz_flage,usercard,password,total_money,Repayment_Date,flage):global datadata_list = []for user_data in data:data_list.append(user_data["usercard"])if usercard not in data_list:# 增加用户user_dic ={}user_dic["usercard"] = usercarduser_dic["password"] = passworduser_dic["new_money"] = total_moneyuser_dic["total_money"] = total_moneyuser_dic["Repayment_Date"] = Repayment_Dateuser_dic["flage"] = flageuser_dic["state"] = "on"data.append(user_dic)f = open("%s/config/user_acc.txt" % BASE_DIR, "wb")pickle.dump(data, f)f.close()User_Action(cz_usercard,cz_flage,usercard,"增加用户")print("增加卡号[%s],成功!"%(usercard))else:print("增加信用卡卡号失败,原因:[“已存在”]") # 解冻信用卡 def User_thaw(usercard,cz_usercard,cz_flage):global data# 判断是否为管理员账号if cz_flage =="1":for x_name in data:if x_name["usercard"] == usercard:x_name["state"] = "on"f = open("%s/config/user_acc.txt" % BASE_DIR, "wb")pickle.dump(data, f)f.close()# 写日志User_Action(cz_usercard,cz_flage,usercard,"解冻用户")print("解冻用户[%s],成功!"%(usercard))# 用户冻结 def User_Frozen(usercard,cz_usercard,cz_flage):global data# 判断是否为管理员账号if cz_flage =="1":for x_name in data:if x_name["usercard"] == usercard:x_name["state"] = "off"f = open("%s/config/user_acc.txt" % BASE_DIR, "wb")pickle.dump(data, f)f.close()# 写日志User_Action(cz_usercard,cz_flage,usercard,"冻结用户")print("冻结用户[%s],成功!"%(usercard)) # 用户删除 def User_del(usercard,cz_usercard,cz_flage):global data# 判断是否为管理员账号if cz_flage =="1":for index,x_name in enumerate(data):if x_name["usercard"] == usercard:del data[index]f = open("%s/config/user_acc.txt" % BASE_DIR, "wb")pickle.dump(data, f)f.close()# 写日志User_Action(cz_usercard,cz_flage,usercard,"删除用户")print("删除用户[%s],成功!"%(usercard))#用户查询 def Select_User():for x_name in data:if x_name["flage"] =="1":user_type ="管理员"else:user_type= "信用卡用户"print("-"*100)print("用户类型:[%s],卡号:[%s],信用授予额度:[%s]元,信用卡当前余额:[%s]元,账单日:[%s]号"%(user_type,x_name["usercard"],x_name["total_money"],x_name["new_money"],x_name["Repayment_Date"])) # 信用卡额度调整 def card_limit(usercard,money,cz_usercard,cz_flage):global datafor x_name in data:if x_name["usercard"] == usercard:if x_name["total_money"] + money >= 0:x_name["total_money"] += moneyx_name["new_money"] += moneyUser_Action(cz_usercard,cz_flage,usercard,"调整信用卡额度",money)print("调整信用卡[%s],额度成功!"%(usercard))else:print("信用卡可用额度不能为负数!")f = open("%s/config/user_acc.txt" % BASE_DIR, "wb")pickle.dump(data, f)f.close()
#!/usr/bin/env python3.5 # -*-coding:utf8-*- import os,pickle,sys,datetimeBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR) from contrl.management import User_Action #加载ATM用户数据库 if os.path.exists(r'%s/config/user_acc.txt'% BASE_DIR):f = open("%s/config/user_acc.txt" % BASE_DIR, "rb")data_user = pickle.loads(f.read())f.close() # 加载ATM操作日志信息 if os.path.exists(r'%s/config/user_log.txt'% BASE_DIR):fl = open("%s/config/user_log.txt" % BASE_DIR, "rb")data_log = pickle.loads(fl.read())fl.close()# 消费明细 if os.path.exists(r'%s/config/user_list.txt'% BASE_DIR):f_list = open("%s/config/user_list.txt" % BASE_DIR, "rb")data_list = pickle.loads(f_list.read())f_list.close() else:data_list = []# 消费明细增加 def sale_add(usercard,usermoney_input,action,state,bills,remarks,Counter=0,interest=0):global data_usertoday =datetime.date.today()for x_data in data_user:if x_data["usercard"] == usercard:date = x_data["Repayment_Date"]# 计算账单日Statement_Date = today.replace(day=date)if today > Statement_Date:Statement_Date = Statement_Date + datetime.timedelta(days=+30) # 如果今天消费的日期 大于系统计算出来的账单日,则此笔消费的出账单为下个月data_list_dic = {}data_list_dic["usercard"] = usercarddata_list_dic["date"] = datetime.datetime.now()data_list_dic["money"] = usermoney_inputdata_list_dic["action"] = action # 1、信用卡取现 2、转账 3、消费 4、还款data_list_dic["state"] = state # 1、已欠款 2、已还清data_list_dic["bills"] = bills # 1、已出账单 2、未出账单data_list_dic["Counter"] = Counter # 手续费data_list_dic["interest"] = interest # 利息data_list_dic["Statement_Date"] = Statement_Date # 出账单日data_list_dic["remarks"] = remarksdata_list.append(data_list_dic)f_list = open("%s/config/user_list.txt" % BASE_DIR, "wb")pickle.dump(data_list,f_list)f_list.close()# 查询余额函数 def select_balance(usercard,flage):# 定义全局变量global data_userif flage =="2":for x_name in data_user:# 匹配用户信息if x_name["usercard"] == usercard:if x_name["new_money"] - x_name["total_money"] >=0:print("""您当前可用余额为:%s元,当前信用卡授权额度为%s元,出账单日为每月%s号,当前没有欠款,谢谢!"""%(x_name["new_money"],x_name["total_money"],x_name["Repayment_Date"]))else:print("""您当前可用余额为:%s元,当前信用卡授权额度为%s元,出账单日为每月%s号,当前总欠款%s元,请按时还款!"""%(x_name["new_money"],x_name["total_money"],x_name["Repayment_Date"],(x_name["total_money"]-x_name["new_money"]) ))else:print("请求参数出错,请检查后在试!") # 查询ATM操作日志 def select_log():print("ATM操作日志:")for index,x_log in enumerate(data_log):x_date = x_log["cz_time"]cz_user = x_log["cz_usercard"]x_action = x_log["cz_action"]x_money = x_log["cz_money"]x_user = x_log["cz_adduser"]print("-" *200)print("序号:[%s]|操作日期:[%s]|操作用户:[%s]|动作:[%s]|涉及金额:%s元|对象用户:[%s]" %(index+1,x_date,cz_user,x_action,x_money,x_user))# ATM 取现: def Take_Money(usercard,usermoney_input,flage):global data_user,data_listfor x_name in data_user:if x_name["usercard"] == usercard:# 判断可用额度是否满足取现的金额if x_name["new_money"] - usermoney_input >= 0:Counter = usermoney_input*0.05 # 取现手续费x_name["new_money"] -= (usermoney_input + Counter)# 写日志User_Action(usercard,flage,usercard,"信用卡取款",usermoney_input)# 写消费明细if x_name["new_money"] >= x_name["total_money"]:sale_add(usercard,usermoney_input,"1","2","2","取现",Counter)else:sale_add(usercard,usermoney_input,"1","1","2","取现",Counter)print("取现[%s],成功!"%(usermoney_input))else:print("您当前取现额度超过你信用卡的可用额度,不能取现!")f = open("%s/config/user_acc.txt" % BASE_DIR, "wb")pickle.dump(data_user, f)f.close()# 信用卡还款 def Card_Payment(usercard,money,flage="3"):global data_user,data_listfor x_name in data_user:if x_name["usercard"] == usercard:x_name["new_money"] += moneyif flage != "3":print("还款入账成功")sale_add(usercard,money,"4","2","2","还款入账")# 提前全额还款处理if x_name["new_money"] >= x_name["total_money"]:for list_name in data_list:if list_name ["usercard"] == usercard:if list_name ["state"] != "2":list_name ["state"] = "2"f_list = open("%s/config/user_list.txt" % BASE_DIR, "wb")pickle.dump(data_list,f_list)f_list.close()# 提前部分还款处理else:for list_name in data_list:if list_name ["usercard"] == usercard:if list_name ["state"] != "2":if list_name["money"] < money:money -= list_name["money"]list_name["state"] = "2"f_list = open("%s/config/user_list.txt" % BASE_DIR, "wb")pickle.dump(data_list,f_list)f_list.close()# 写还款日志User_Action(usercard,flage,usercard,"信用卡还款",money)f = open("%s/config/user_acc.txt" % BASE_DIR, "wb")pickle.dump(data_user, f)f.close() # 账户转账 def Transfer(usercard,flage,usercard_input,usermoney_input):global data_userfor input_name in data_user:if input_name["usercard"] == usercard:input_name["new_money"] -= usermoney_input# 写消费明细if input_name["new_money"] >= input_name["total_money"]:sale_add(usercard,usermoney_input,"2","2","2","转账")else:sale_add(usercard,usermoney_input,"2","1","2","转账")# 写日志User_Action(usercard,flage,usercard_input,"信用卡转账",usermoney_input)# 调用转账还款入账函数 Card_Payment(usercard_input,usermoney_input)print("转账成功!")f = open("%s/config/user_acc.txt" % BASE_DIR, "wb")pickle.dump(data_user, f)f.close() # 账单明细查询 def select_bill(usercard,bill_date):global data_list# 已出账单明细have_bill = []# 未出账单明细No_bills = []# 未出账单还款入账repayment = []# 未出账单已还清Already = []for index,x_name in enumerate(data_list):if x_name["usercard"] == usercard:# 欠款未出账单消费明细if x_name["state"] == "1" and x_name["bills"] == "2":No_bills.append(data_list[index])# 欠款已出账单消费明细elif x_name["state"] == "1" and x_name["bills"] == "1":have_bill.append(data_list[index])# 转账还款入账明细elif x_name["bills"] == "2" and x_name["action"] == "4":repayment.append(data_list[index])# 已还清未出账单明细elif x_name["bills"] == "2" and x_name["state"] == "2":Already.append(data_list[index])if len(have_bill) != 0:print("以下消费为已出账单未还清明细:")for index,have_bill_list in enumerate(have_bill):x_date = have_bill_list["date"]x_action = have_bill_list["remarks"]x_money = have_bill_list["money"]x_Counter = have_bill_list["Counter"]x_Statement_Date = have_bill_list["Statement_Date"]x_state = "未还清"x_interest = have_bill_list["interest"]print("-" *150)print("序号:[%s]|日期:[%s]|类型:[%s]|金额:[%s]元|手续费:%s元|状态:[%s]|此笔交易出账单日[%s]|累计利息为:%s元" %(index+1,x_date,x_action,x_money,x_Counter,x_state,x_Statement_Date,x_interest))if len(No_bills) != 0:print("以下消费为未出账单未还清明细:")for index,No_bills_list in enumerate(No_bills):x_date = No_bills_list["date"]x_action = No_bills_list["remarks"]x_money = No_bills_list["money"]x_Counter =No_bills_list["Counter"]x_Statement_Date = No_bills_list["Statement_Date"]x_state = "未还清"print("-" *100)print("序号:[%s]|日期:[%s]|类型:[%s]|金额:[%s]元|手续费:%s元|状态:[%s]|此笔交易出账单日[%s]" %(index+1,x_date,x_action,x_money,x_Counter,x_state,x_Statement_Date))if len(repayment) != 0:print("以下为未出账单还款明细:")for index,repayment_list in enumerate(repayment):x_date = repayment_list["date"]x_action = repayment_list["remarks"]x_money = repayment_list["money"]x_Counter = repayment_list["Counter"]x_state = "还款入账"print("-" *100)print("序号:[%s]|日期:[%s]|类型:[%s]|金额:[%s]元|手续费:%s元|状态:[%s]" %(index+1,x_date,x_action,x_money,x_Counter,x_state))if len(Already) != 0:print("以下为未出账单已还款或无需还款消费明细:")for index,Already_repayment_list in enumerate(Already):x_date = Already_repayment_list["date"]x_action = Already_repayment_list["remarks"]x_money = Already_repayment_list["money"]x_Counter = Already_repayment_list["Counter"]x_state = "正常"print("-" *100)print("序号:[%s]|日期:[%s]|类型:[%s]|金额:[%s]元|手续费:%s元|状态:[%s]" %(index+1,x_date,x_action,x_money,x_Counter,x_state))
在处理利息计算方面,这是我想到的方法:
#!/usr/bin/env python3.5 # -*-coding:utf8-*- import datetime,pickle,os,sys BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR) # 加载利息计算日志文件 if os.path.exists(r'%s/config/calculation_log.txt'% BASE_DIR):f_calculation = open("%s/config/calculation_log.txt" % BASE_DIR, "rb")data_calculation = pickle.loads(f_calculation.read())# 利息初始化文件# print(data_calculation) f_calculation.close() else:data_calculation = [] # 加载用户信息 if os.path.exists(r'%s/config/user_acc.txt'% BASE_DIR):f = open("%s/config/user_acc.txt" % BASE_DIR, "rb")data = pickle.loads(f.read())f.close() else:data = [] # 加载消费明细 if os.path.exists(r'%s/config/user_list.txt'% BASE_DIR):f_list = open("%s/config/user_list.txt" % BASE_DIR, "rb")data_list = pickle.loads(f_list.read())f_list.close() else:data_list = [] # 初始化利息计算文件列表 def calculation_computer():global data, data_calculation, data_list# 获取今天时间today = datetime.date.today()# 取昨天的时间yesterday = datetime.date.today()+datetime.timedelta(days=-1)for user_data in data:if user_data["flage"] == "2":# 获取 账单日x_data_date = user_data["Repayment_Date"]# 生成账单日期x_data_time = today.replace(day=x_data_date)# 如果文件内容不为空if len(data_calculation) != 0:for y_data in data_calculation:# 如果信用卡卡号在文件字典里存在关键字if user_data["usercard"] in y_data.keys():for x in y_data[user_data["usercard"]]:# 如果该字典里存在今天新加的记录则跳出if x["date"] == today:break# 如果字典里的日期与昨天有误差则进行增加elif yesterday > y_data[user_data["usercard"]][-1]["date"]:date = y_data[user_data["usercard"]][-1]["date"] + datetime.timedelta(days=1)y_data[user_data["usercard"]].append({"date":date,"money":0,"computer":"1"})continueelse:y_data[user_data["usercard"]].append({"date":today,"money":0,"computer":"1"})break# 如果全部循环后找不到key 则新增else:# 重复数据判断list_data = []for y_data in data_calculation:for k in y_data:list_data.append(k)# 如果要添加的数据在利息初始化文件中不存大if user_data["usercard"] not in list_data:if today > x_data_time:new_dic = {user_data["usercard"]:[{"date":x_data_time,"money":0,"computer":"1"}]}data_calculation.append(new_dic)elif today < x_data_time:new_dic = {user_data["usercard"]:[{"date":today,"money":0,"computer":"1"}]}data_calculation.append(new_dic)# 将所有利息数据写入文件中fl = open("%s/config/calculation_log.txt" % BASE_DIR, "wb")pickle.dump(data_calculation, fl)fl.close()# 如果文件内容为空else:# 时间按账单日开始记录if today > x_data_time:new_dic = {user_data["usercard"]:[{"date":x_data_time,"money":0,"computer":"1"}]}data_calculation.append(new_dic)elif today < x_data_time:new_dic = {user_data["usercard"]:[{"date":today,"money":0,"computer":"1"}]}data_calculation.append(new_dic)fl = open("%s/config/calculation_log.txt" % BASE_DIR, "wb")pickle.dump(data_calculation, fl)fl.close()calculation_computer() # 出账单及利息计算 def computer():global data, data_calculation, data_list# 调用利息初始化文件 calculation_computer()# 获取今天时间today = datetime.date.today()for x_data in data:if x_data["flage"] == "2":x_usercard = x_data["usercard"] # 获取计算信用卡卡号# 获取账单还款到期日,每月10号due_date = today.replace(day=10)# 如果到期还款日小于账单日,当前利息计算日 = 当月计算利息日-30天xx_time = due_date + datetime.timedelta(days=-30)# 加载消费明细账单for z_data in data_list:# 定位当前用户所有没有出账单的明细,如果今天大于或等于该笔消费出账单日if z_data["usercard"] == x_usercard and z_data["bills"] == "2" and today >= z_data["Statement_Date"]:# 则更改当前该笔消费为已出账单z_data["bills"] = "1"f_list_computer = open("%s/config/user_list.txt" % BASE_DIR, "wb")pickle.dump(data_list, f_list_computer)f_list_computer.close()# 调用利息计算初始化文件for xy_data in data_calculation:# 定位到当前用户下所有记账日if x_usercard in xy_data.keys():for date in xy_data[x_usercard]:if date["computer"] == "1":# 定位到当前用户下所有出账单的未还清的消费记录# 初始化记账日所有利息counter = 0for z1_data in data_list:# 如果记账日没有清算if z1_data["usercard"] == x_usercard and z1_data["bills"] == "1":# 如果记账日大于最后还款日大于账单日if date["date"] > due_date > z1_data["Statement_Date"] and z1_data["state"] == "1":z1_data["interest"] += (z1_data["money"]+z1_data["Counter"])*0.0005counter += (z1_data["money"]+z1_data["Counter"])*0.0005# 如果记账日小于出账单日或小于最后还款日elif date["date"] > xx_time > z1_data["Statement_Date"] and z1_data["state"] == "1":z1_data["interest"] += (z1_data["money"]+z1_data["Counter"])*0.0005counter += (z1_data["money"]+z1_data["Counter"])*0.0005x_data["new_money"] -= counter # 更新当前用户的余额f_list_computer = open("%s/config/user_list.txt" % BASE_DIR, "wb")pickle.dump(data_list,f_list_computer)f_list_computer.close()date["computer"] = "2"continuebreakfl = open("%s/config/calculation_log.txt" % BASE_DIR, "wb")pickle.dump(data_calculation, fl)fl.close()fx = open("%s/config/user_acc.txt" % BASE_DIR, "wb")pickle.dump(data, fx)fx.close()
转载于:https://www.cnblogs.com/IPYQ/p/5496944.html
python 信用卡系统+购物商城见解相关推荐
- python实现简单购物商城_如何用python语言实现简单购物商城
本文为大家分享用python语言实现购物商城小程序,供大家参考,具体内容如下,希望对大家学习python语言有所帮助. 软件版本:python3.x 功能:实现简单购物商城 1.允许用户选择购买多少件 ...
- javaweb JAVA JSP购物系统购物商城系统源码(jsp电子商务系统)购物系统mvc
javaweb JAVA JSP购物系统购物商城系统源码(jsp电子商务系统)购物系统mvc protected void doGet(HttpServletRequest req, HttpServ ...
- 商城管理系统服务器,基于Python实现的购物商城管理系统
完整项目地址: 简介 本项目使用Python语言编写,实现了顾客端和商家端. 功能 店主功能:注册.登录.修改店铺信息.添加商品.删除商品.修改商品.查找商品.查看交易记录. 顾客功能:注册.登录.修 ...
- javaweb JAVA JSP手机销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上手机店在线销售
JSP手机销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上手机店在线销售 常见的Javaweb题材有 理财系统,就业管理系统,汽车租赁,简易网盘,疫情数据查看,在线招标房,屋租 ...
- javaweb JAVA JSP水果销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上水果店在线销售
javaweb JAVA JSP水果销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上水果店在线销售 常见的Javaweb题材有 理财系统,就业管理系统,汽车租赁,简易网盘,疫情 ...
- javaweb JAVA JSP书店销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上书店在线销售
JSP书店销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上书店在线销售 常见的Javaweb题材有 理财系统,就业管理系统,汽车租赁,简易网盘,疫情数据查看,在线招标房,屋租赁 ...
- javaweb JAVA JSP零食销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上零食在线销售
JSP零食销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上零食在线销售 大家好,很高兴和大家分享Java项目和经验.不管同学们是出于什么需求.都希望各位计算机专业的同学有一个提 ...
- JSP眼镜销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上眼镜在线销售
JSP眼镜销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上眼镜在线销售
- javaweb JAVA JSP婴幼儿用品销售系统jsp购物系统购物商城系统源码(电子商务系统)网上在线销售
javaweb JAVA JSP婴幼儿用品销售系统jsp购物系统购物商城系统源码(电子商务系统)网上在线销售 常见的Javaweb题材有 理财系统,就业管理系统,汽车租赁,简易网盘,疫情数据查看,在线 ...
最新文章
- 背完这444句英语,你的口语绝对不成问题了
- 3种纯CSS实现中间镂空的12色彩虹渐变圆环方法
- 设计模式:迪米特原则
- Goalng软件包推荐
- git 查看分支编码_12个常用的Git命令,赶紧记一波!
- [高性能javascript笔记]1-加载和执行
- 一个适合于.NET Core的超轻量级工作流引擎:Workflow-Core
- Tomcat安装与配置教程(图文教学)
- 中公计算机岗位知识与技能,知识与技能的分类
- 必看 logit回归分析步骤汇总
- Spring5之IOC容器中IOC操作之Bean管理(二)之p名称空间注入、外部bean、内部bean、级联赋值
- 【高精】Oliver的成绩
- Python.习题八 文件与与异常(上)
- php取雅加达时间,2018雅加达亚运会赛程表完整版
- flask内容学习第三天(flak中的csrf跨站请求)
- 日本电产尼得科Nidec研发出超薄直线振动马达
- Android商家端线下支付流程详解
- java汉字转换为拼音首字母
- Mysql服务端(三)--- 索引及设计建议
- 【数据库】P1 数据库历史与发展