从零开始学Python04作业源码:模拟ATM电子银行(仅供参考)

  • bin目录:程序启动入口

ATM_start.py:

 1 #!/usr/bin/python
 2 # -*- coding: utf-8 -*-
 3 # 模拟ATM电子银行+登录账户权限控制+管理员管理模块
 4 # 本程序可以在windows下运行基于python2.7.8版本开发
 5 # 管理员账号:admin   密码:123123
 6 # python04_homework
 7 # __author__:Mr.chen
 8 # 程序启动入口
 9 
10 import sys
11 sys.path.append('..')
12 from src import user_business
13 
14 
15 
16 user_business.Main()

 

  • crontab目录:定时任务触发入口

Auto_mission.py

1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
3 # 计划任务定时触发启动文件
4 
5 import sys
6 sys.path.append('..')
7 from lib import common
8 
9 common.Traverse_folder()

 

  • lib目录:公共类文件

common.py

  1 #!/usr/bin/python
  2 # -*- coding: utf-8 -*-
  3 # 公共方法层
  4 
  5 import os,time,random,pickle
  6 
  7 DIR = os.path.dirname(__file__)
  8 DIR = DIR.replace('lib','db/')
  9 
 10 
 11 TAG = True      #循环控制标志
 12 
 13 
 14 def Exit():
 15     '''
 16     系统退出
 17     :return:None
 18     '''
 19     print ('程序退出!')
 20     exit()
 21 
 22 
 23 def MD5(password):
 24     '''
 25     加密函数
 26     :param firstsite: 密码字符串
 27     :return: 加密字符串
 28     '''
 29     import hashlib
 30     return hashlib.md5(password).hexdigest()
 31 
 32 
 33 def Verification_input():
 34     '''
 35     登录验证码校验
 36     :return: True
 37     '''
 38     while TAG:
 39         re = Verification_Code()
 40         code = raw_input('请输入括号里的验证码,不区分大小写({0}):'.format(re))
 41         if code.strip().lower() != re.lower():
 42             print('您输入的验证码有误,请重新输入!')
 43         else:
 44             return True
 45 
 46 
 47 def Verification_Code():
 48     '''
 49     生成随机的6位验证码:大小写字母数字的组合
 50     :return: 验证码
 51     '''
 52     code = ''
 53     b = random.randrange(0, 5)
 54     c = random.randrange(0, 5)
 55     for i in range(6):
 56         if i == b:
 57             a = random.randrange(1, 9)
 58             code = code + str(a)
 59         else:
 60             a = random.randrange(65, 90)
 61             if i == c:
 62                 code = code + chr(a).lower()
 63             else:
 64                 code = code + chr(a)
 65     return code
 66 
 67 
 68 
 69 def pwd_money_check(user):
 70     '''
 71     用户银行卡密码登录验证
 72     :return: True or False
 73     '''
 74     while TAG:
 75         pwd = raw_input('请输入6位银行卡密码:')
 76         if pwd.isdigit() and len(pwd) == 6:
 77             pwd_money = log_info_specific_read(user, 'pwd_money')
 78             if pwd_money == False:
 79                 print ('用户日志不存在!')
 80                 return False
 81             else:
 82                 if MD5(pwd) == pwd_money:
 83                     print ('密码验证成功!')
 84                     return True
 85                 else:
 86                     return False
 87         else:
 88             print ('您的输入有误!')
 89 
 90 
 91 ###########################前台请求输入方法组##################################################################
 92 
 93 def name_login_input():
 94     '''
 95     键盘输入登录名
 96     :return:新用户名
 97     '''
 98     while TAG:
 99         name_login = raw_input('请输入登陆用户的用户名(n=返回上级菜单):')
100         if name_login == 'n':
101             return
102         elif os.path.exists('db/'+name_login+'_log'):
103             print('你输入的用户名已存在,请重新输入!')
104         elif len(name_login) != len(name_login.strip()) or len(name_login.strip().split()) != 1:
105             print('登录名不能为空,且不能有空格,请重新输入!')
106         else:
107             return name_login
108 
109 
110 def pwd_login_input():
111     '''
112     键盘输入登录密码
113     :return:新登录密码
114     '''
115     while TAG:
116         pwd_login = raw_input('请输入登陆密码(n=返回上级菜单):')
117         if pwd_login == 'n':
118             return
119         elif len(pwd_login) < 8:
120             print('您输入的密码不能小于8位数(8位以上字母数字+至少一位大写字母组合),请重新输入!')
121         elif len(pwd_login.strip().split()) != 1:
122             print('您输入的密码不能有空格,密码也不能为空,请重新输入!')
123         elif pwd_login.isdigit():
124             print('密码不能全为数字(8位以上字母数字+至少一位大写字母组合),请重新输入!')
125         elif pwd_login.lower() == pwd_login:
126             print('请至少保留一位的大写字母(8位以上字母数字+至少一位大写字母组合),请重新输入!')
127         else:
128             pwd_login = MD5(pwd_login)
129             return pwd_login
130 
131 
132 def account_input():
133     '''
134     键盘输入银行卡号
135     :return: 新银行卡号
136     '''
137     while TAG:
138         account = raw_input('请输入银行卡号(如果没有可以为空)(n=返回上级菜单):')
139         if account.strip() == '':
140             account = 'empty'
141             return account
142         elif account == 'n':
143             return
144         elif len(account.strip()) < 16:
145             print('银行卡号是不能小于16位的纯数字,请重新输入!')
146         elif account.isdigit() != True:
147             print('银行卡号是不能小于16位的纯数字,请重新输入!')
148         else:
149             return account
150 
151 
152 def pwd_money_input():
153     '''
154     键盘输入银行卡密码
155     :return: 新银行卡密码
156     '''
157     while TAG:
158         pwd_money = raw_input('请输入银行卡的6位数字取款(转账)密码(n=返回上级菜单):')
159         if pwd_money == 'n':
160             return
161         elif len(pwd_money.strip()) != 6:
162             print('取款密码只能是6位纯数字,请重新输入!')
163         elif pwd_money.strip().isdigit() != True:
164             print('取款密码只能是6位纯数字,请重新输入!')
165         else:
166             pwd_money = MD5(pwd_money)
167             return pwd_money
168 
169 
170 
171 
172 ##################################数据读取写入方法组####################################################################
173 
174 
175 def log_info_read(user):
176     '''
177     指定用户日志文件全部读取
178     :param user:用户名
179     :return:dict字典
180             如果无文件返回False
181     '''
182     if os.path.exists(DIR+user+'_log'):
183         with open(DIR+user+'_log','r') as f:
184             dict = pickle.load(f)
185             return dict
186     else:
187         return False
188 
189 
190 def log_info_specific_read(user,text):
191     '''
192     指定用户日志文件指定内容读取
193     :param user: 用户名
194     :param text: 预读取的字段名
195     :return: 指定的字段内容
196             如果无文件返回False
197     '''
198     if os.path.exists(DIR+user+'_log'):
199         with open(DIR+user+'_log','r') as f:
200             dict = pickle.load(f)
201             re = dict[text]
202             return re
203     else:
204         return False
205 
206 
207 def log_info_write(user,dict = None):
208     '''
209     指定用户日志文件全部写入
210     :param user:用户名
211     :param dict: 日志字典
212     :return: True or False
213     '''
214     #if os.path.exists(user+'_log'):
215     #print (DIR+user+'_log')
216     with open(DIR+user+'_log','w') as f:
217         pickle.dump(dict,f)
218         return True
219 
220 
221 def log_info_specific_write(user,dict):
222     '''
223     指定用户日志文件指定内容写入
224     :param user: 用户名
225     :param dict: 预修改的字典内容
226     :return: True or False
227     '''
228     dictt = log_info_read(user)
229     if dictt == False:
230         print ('用户日志文件不存在!')
231         return  False
232     dictt[dict.keys()[0]] = dict[dict.keys()[0]]
233     re = log_info_write(user,dictt)
234     if re == True:
235         return True
236     else:
237         return False
238 
239 
240 def log_info_billing_write(user,text):
241     '''
242     指定用户日志文件流水数据写入
243     :param user: 用户名
244     :param text: 用户流水数据
245     :return: True or False
246     '''
247 
248     dict = log_info_read(user)
249     if dict == False:
250         print ('用户日志文件不存在!')
251         return False
252     dict['Not_out_billing'].append(text)
253     re = log_info_write(user, dict)
254     if re == True:
255         return True
256     else:
257         return False
258 
259 
260 ###############################windows计划任务执行方法组#######################################################
261 
262 
263 def Autopay(user):
264     '''
265     自动还款模块
266     :param user: 用户
267     :return: True or False
268     '''
269     dict = log_info_read(user)
270     tm = time.localtime()
271     tm_text = str(tm.tm_year) + '-' + str(tm.tm_mon) + '-' + str(tm.tm_mday) + ' ' + str(tm.tm_hour) + ':' + str(tm.tm_min)
272     if time.localtime().tm_mday == int(dict['Repayment_date']) and dict['Debt_Bill_amount'] != '0':
273         if int(dict['cash']) >= int(dict['Debt_Bill_amount']):
274             print ('用户{0}日期吻合触发自动还款!'.format(user))
275             dict['cash'] = str(int(dict['cash']) - int(dict['Debt_Bill_amount']))
276             dict['Actual_overdraft'] = str(int(dict['Actual_overdraft'])-int(dict['Debt_Bill_amount']))
277             text = '{0}:触发“自动还款”操作,还款成功,还款总额为:{1},电子现金余额为{2},总透支金额为{3}'.format(tm_text,dict['Debt_Bill_amount'],dict['cash'],dict['Actual_overdraft'])
278             # log_info_billing_write(user,'{0}:触发“自动还款”操作,还款成功,还款总额为:{1},电子现金余额为{2},总透支金额为{3}'.format(tm_text,dict['Debt_Bill_amount'],dict['cash'],dict['Actual_overdraft']))
279             dict['Not_out_billing'].append(text)
280             dict['Debt_Bill_amount'] = '0'
281             log_info_write(user, dict)
282             print ('用户{0}自动还款成功!'.format(user))
283             return True
284         else:
285             print ('用户{0}自动还款失败!电子现金账户余额不足!请存够钱再行尝试'.format(user))
286             log_info_billing_write(user,'{0}:触发“自动还款”操作,还款失败,失败原因:电子现金余额不足。还款总额为:{1},电子现金余额为{2},总透支金额为{3}'.format(tm_text,dict['Debt_Bill_amount'],dict['cash'],dict['Actual_overdraft']))
287             return False
288     else:
289         return
290 
291 
292 def AutoBilling(user):
293     '''
294     账单自动生成模块
295     :param user: 用户
296     :return:True or False
297     '''
298     dict = log_info_read(user)
299     time_year = time.localtime().tm_year
300     time_mon = time.localtime().tm_mon
301     time_mday = time.localtime().tm_mday
302     date = str(time_year)+'-'+str(time_mon)
303 
304     text = '''
305                             亲爱的{0},您的{1}年{2}月账单如下:
306 
307                           账单总金额为:{3}(当期+历史欠账),最后还款日为下月{4}日
308                             请您按时还款,谢谢您的使用,再见!'''.format(user,str(time_year),str(time_mon),dict['Actual_overdraft'],dict['Repayment_date'])
309     if date not in dict['Debt_record']:
310         dict['Debt_record'][date] = text
311         dict['Debt_Bill_amount'] = dict['Actual_overdraft']
312     if date not in dict['Has_been_out_billing']:
313         dict['Has_been_out_billing'][date] = dict['Not_out_billing']
314         dict['Not_out_billing'] = []
315     log_info_write(user,dict)
316 
317 
318 
319 
320 def Traverse_folder():
321     '''
322     根据条件遍历某文件夹里的全部文件内容,
323     找出符合条件的文件后调用自动执行模块
324     (需windows计划任务触发)
325     :return:None
326     '''
327     list = os.listdir(DIR)
328     time_year = time.localtime().tm_year
329     time_mon = time.localtime().tm_mon
330     time_mday = time.localtime().tm_mday
331     for i in list:
332         if i == '__init__.py' or i == '__init__.pyc':
333             continue
334         else:
335             name = i.strip().split('_')[0]
336             dict = log_info_read(name)
337             if dict['billing_day'] == str(time_mday):
338                 AutoBilling(name)
339             if dict['Repayment_date'] == str(time_mday):
340                 Autopay(name)
341 
342 
343 def test():
344     '''
345     自动还款测试函数
346     :return:None
347     '''
348     dict = log_info_read('chensiqi')
349     dict['Debt_Bill_amount'] = '4000'
350     dict['cash'] = '5000'
351     dict['Actual_overdraft'] = '5000'
352     dict ['Repayment_date'] = '6'
353     log_info_write('chensiqi',dict)
354     print (dict['Not_out_billing'])

 

  • src目录:业务逻辑文件

user_business.py

  1 #!/usr/bin/python
  2 # -*- coding: utf-8 -*-
  3 # 用户业务层
  4 
  5 import os,random,time,sys
  6 sys.path.append('..')
  7 from src import admin_business
  8 from lib import common
  9 
 10 
 11 DIR = os.path.dirname(__file__)
 12 DIR = DIR.replace('src','db/')
 13 
 14 
 15 LOGINING = []      #用户时时登录列表
 16 ERROR = []      #账户临时锁定字典
 17 TAG = True      #循环控制标志
 18 
 19 
 20 
 21 def login_status(func):
 22     '''
 23     装饰器用于用户登录状态验证
 24     :param func: 对象
 25     :return: 对象
 26     '''
 27     def inner():
 28         if LOGINING == []:
 29             log = '用户状态未登录...'
 30         else:
 31             log = '{0}登录中...'.format(LOGINING[0])
 32         func(log)
 33     return inner
 34 
 35 
 36 def Permission_checking(func):
 37     '''
 38     装饰器用于用户功能权限验证
 39     :param func:对象
 40     :return:对象
 41     '''
 42     def inner():
 43         if LOGINING == []:
 44             print ('您尚未登录,请登录后再来!')
 45             return
 46         func()
 47     return inner
 48 
 49 
 50 def Account_checking(func):
 51     '''
 52     装饰器对用户是否创建银行卡及银行卡状态进行验证
 53     :param func: 对象
 54     :return: 对象
 55     '''
 56     def inner():
 57         re = common.log_info_specific_read(LOGINING[0],'account')
 58         ree = common.log_info_specific_read(LOGINING[0],'status')
 59         reee = common.log_info_specific_read(LOGINING[0],'pwd_money')
 60         if re == 'empty':
 61             print ('您尚未关联银行卡,请关联后再来!')
 62             return
 63         elif ree == '1':
 64             print ('您的银行卡已经被管理员冻结!请解冻后再来')
 65             return
 66         elif reee == 'empty':
 67             print ('您的银行卡密码还未设定,请设定后再来!')
 68             return
 69         func()
 70     return inner
 71 
 72 
 73 @login_status
 74 def User_Manage(log = None):
 75     '''
 76     用户管理界面,用户登录及注册
 77     :param log: 用户登录状态标志
 78     :return: None
 79     '''
 80     while TAG:
 81         text = '''
 82                           欢迎光临用户管理模块     {0}
 83 
 84                              1,用户登录
 85                              2,用户注册
 86                              3,返回菜单    '''.format(log)
 87 
 88         print (text)
 89         choose = raw_input('请输入索引进行选择:')
 90         if choose == '1':
 91             Login()
 92         elif choose == '2':
 93             User_registration()
 94         elif choose == '3':
 95             return
 96         else:
 97             print ('您的输入有误,请重新输入!')
 98 
 99 
100 def Login():
101     '''
102     用户登录功能模块
103     :return: None
104     '''
105     global ERROR
106     num = 0
107     while TAG:
108         user = raw_input('请输入用户名:')
109         pwd = raw_input('请输入密码:')
110         ree = Login_check(user,pwd)
111         if ree == True:
112             print ('用户名和密码校验成功!')
113             break
114         elif ree == '1':
115             print('没有这个用户名,请注册后再来!')
116             return
117         elif num == 2:
118             print ('您已经连续输错3次,账号已经锁定!')
119             ERROR.append(user)
120             return
121         elif ree == '2':
122             print ('密码输入错误,请重新输入!')
123             num += 1
124             continue
125         elif ree == '3':
126             print('这个账号已经被锁定!')
127             return
128     common.Verification_input()
129     LOGINING.insert(0,user)
130     Main()
131 
132 
133 
134 def Login_check(user,pwd):
135     '''
136     用户登录验证功能模块:
137     :param user: 用户名
138     :param pwd: 登录密码
139     :return: 1:用户名不存在
140              2:用户名密码不匹配
141              3:用户名存在于锁定列表中
142              True:登录信息正确
143     '''
144     if user == 'admin' and pwd == '123123':
145         LOGINING.insert(0,'admin')
146         admin_business.admin_manage('admin')
147     re = common.log_info_read(user)
148     if user in ERROR:
149         return '3'
150     elif os.path.exists(DIR+user+'_log') == False:
151         return '1'
152     elif re['pwd_login'] != common.MD5(pwd):
153         return '2'
154     else:
155         return True
156 
157 
158 def User_registration():
159     '''
160     用户注册功能模块
161     :return: None
162     '''
163     while TAG:
164         name_login = common.name_login_input()     #得到新用户名
165         if name_login == None:
166             return
167         pwd_login = common.pwd_login_input()        #得到新登录密码
168         if pwd_login == None:
169             return
170         account = common.account_input()            #得到新银行卡号
171         if account == None:
172             return
173         if account != 'empty':
174             pwd_money = common.pwd_money_input()    #得到新取款密码
175             if pwd_money == None:
176                 return
177         else:
178             pwd_money = 'empty'
179         common.Verification_input()                 #进行验证码验证
180         while TAG:
181             information = '''
182                     您要注册的信息如下:
183 
184                     登录用户名:{0}
185                     登录的密码:{1}
186                     银行卡账号:{2}
187                     银行取款码:{3}    '''.format(name_login,pwd_login,account,pwd_money)
188             print (information)
189             decide = raw_input('注册信息是否确认?(y/n):')
190             if decide == 'y':
191                 tm = time.localtime()
192                 tm_text = str(tm.tm_year) +'-'+ str(tm.tm_mon) +'-'+ str(tm.tm_mday) +' '+ str(tm.tm_hour) +':'+ str(tm.tm_min)
193                 #user_information = '{0}|{1}|{2}|{3}|{4}|15000|活跃|10000'.format(name_login,pwd_login,account,pwd_money,tm_text)
194                 dict_info = {'name_login':name_login,       #用户名
195                              'pwd_login':pwd_login,         #登录密码
196                              'account':account,             #银行卡号
197                              'pwd_money':pwd_money,         #银行卡密码
198                              'tm_text':tm_text,             #注册时间
199                              'billing_day':'15',            #账单日
200                              'Repayment_date':'1',          #还款日
201                              'status':'0',                  #账户状态(0:活跃  1:冻结)
202                              'cash':'0',                    #现金电子余额
203                              'Actual_overdraft':'0',        #总透支金额
204                              'Overdraft_limit':'15000',     #透支额度上限
205                              'Debt_Bill_amount':'0',        #账单欠账金额记录
206                              'Debt_record':{},              #已出账单历史记录
207                              'Has_been_out_billing':{},     #已出账单流水历史记录
208                              'Not_out_billing':[]           #未出账单流水记录
209                               }
210                 common.log_info_write(name_login,dict_info)
211                 print ('注册成功!')
212                 LOGINING.insert(0,name_login)
213                 User_Manage()
214                 Main()
215             elif decide == 'n':
216                 break
217             else:
218                 print ('您的输入有误,请重新输入!')
219 
220 
221 
222 #def Log_Pretreatment(firstsite)
223 
224 
225 
226 @login_status
227 def Main(log = None):
228     '''
229     用户功能选择界面
230     :param log: 用户登录状态标志
231     :return: None
232     '''
233     while TAG:
234         text = '''
235                              欢迎光临ATM电子银行         {0}
236 
237                                1,用户管理
238                                2,个人信息
239                                3,存款取款
240                                4,时时转账
241                                5,还款设置
242                                6,查询账单
243                                7,退出系统     '''.format(log)
244         print (text)
245         Choose = {'1': User_Manage,
246                 '2': User_information,
247                 '3': User_Save_Money,
248                 '4': User_Transfer_Money,
249                 '5': User_Pay_back_Money,
250                 '6': Select_Billing,
251                 '7': common.Exit
252                 }
253         choose = raw_input('请输入索引进行选择:')
254         # print (choose)
255         if choose in Choose:
256             Choose[choose]()
257         else:
258             print ('您输入有误,请重新输入!')
259 
260 
261 
262 @Permission_checking
263 def User_information():
264     '''
265     个人信息查询模块
266     :return:
267     '''
268     while TAG:
269         dict = common.log_info_read(LOGINING[0])
270         if dict['status'] == '0':
271             lab = '正常'
272         else:
273             lab = '冻结'
274         if dict['account'] == 'empty':
275             labb = '未绑定'
276         else:
277             labb = dict['account']
278         text = '''
279                          您的个人注册信息如下:
280 
281                             登录名:{0}
282                             银行卡号:{1}
283                             注册时间:{2}
284                             账单日(每月):{3}
285                             还款日(每月):{4}
286                             银行卡状态:{5}
287                             电子现金余额:{6}
288                             银行卡已透支额度:{7}
289                             银行卡透支额度上限:{8}
290                             '''.format(dict['name_login'],labb,dict['tm_text'],dict['billing_day'],
291                                    dict['Repayment_date'],lab,dict['cash'],
292                                    dict['Actual_overdraft'],dict['Overdraft_limit'])
293         print(text)
294         print ('''
295                            您可以进行如下操作:
296                             1,修改登录密码
297                             2,绑定银行卡
298                             3,修改银行卡密码
299                             4,返回菜单
300               ''')
301         while TAG:
302             decide = raw_input('你想做点什么?')
303             if decide == '1':
304                 pwd_login = common.pwd_login_input()
305                 if pwd_login == None:
306                     return
307                 else:
308                     dict['pwd_login'] = pwd_login
309                     common.log_info_write(LOGINING[0],dict)
310                     print('登录密码修改成功')
311                     break
312             elif decide == '2':
313                 if dict['account'] != 'empty':
314                     print ('您已经绑定过银行卡了!不能再次绑定!')
315                     break
316                 else:
317                     account = common.account_input()
318                     if account == None:
319                         return
320                     else:
321                         dict['account'] = account
322                         common.log_info_write(LOGINING[0], dict)
323                         print ('银行卡绑定成功!')
324                         break
325             elif decide == '3':
326                 if dict['account'] == 'empty':
327                     print ('您尚未绑定银行卡,请绑定后再来!')
328                     break
329                 else:
330                     pwd_money = common.pwd_money_input()
331                     if pwd_money == None:
332                         return
333                     else:
334                         dict['pwd_money'] = pwd_money
335                         common.log_info_write(LOGINING[0], dict)
336                         print ('银行卡密码修改成功!')
337                         break
338             elif decide == '4':
339                 return
340             else:
341                 print ('您的输入有误!')
342 
343 
344 
345 
346 @Permission_checking
347 @Account_checking
348 @login_status
349 def User_Save_Money(log = None):
350     '''
351     用户存款取款模块
352     :return:True or False
353     '''
354     while TAG:
355         cash = common.log_info_specific_read(LOGINING[0],'cash')
356         Actual_overdraft = common.log_info_specific_read(LOGINING[0],'Actual_overdraft')
357         Overdraft_limit = common.log_info_specific_read(LOGINING[0],'Overdraft_limit')
358         tm = time.localtime()
359         tm_text = str(tm.tm_year) + '-' + str(tm.tm_mon) + '-' + str(tm.tm_mday) + ' ' + str(tm.tm_hour) + ':' + str(tm.tm_min)
360 
361         text = '''
362                     自助存取款功能界面      {0}
363 
364                        1,取款
365                        2,存款
366                        3,返回     '''.format(log)
367         print (text)
368         print ('您的电子账户现金为{0}元,透支额度上限为{1}元,已经透支的额度为{2}元'.format(cash, Overdraft_limit, Actual_overdraft))
369         choose = raw_input('请问你想做点什么?:')
370         if choose == '1':
371             while TAG:
372                 money = raw_input('请输入你想提取的金额:')
373                 re = common.pwd_money_check(LOGINING[0])
374                 if re == False:
375                     print ('密码校验错误!')
376                     break
377                 elif money.isdigit():
378                     if int(cash) >= int(money):
379                         cash = str(int(cash)-int(money))
380                         common.log_info_specific_write(LOGINING[0],{'cash':cash})
381                         #common.log_info_specific_write(LOGINING[0], {'billing': cash})
382                         common.log_info_billing_write(LOGINING[0],'{0}:您进行了“提款”操作,提款金额为{1},现金余额为{2},总透支金额为{3}'
383                                                       .format(tm_text,money,cash,Actual_overdraft))
384                         break
385                     else:
386                         a = int(Actual_overdraft)+int(money)-int(cash)
387                         if a <= int(Overdraft_limit):
388                             Actual_overdraft = str(a)
389                             common.log_info_specific_write(LOGINING[0], {'cash': '0'})
390                             common.log_info_specific_write(LOGINING[0], {'Actual_overdraft': Actual_overdraft})
391                             common.log_info_billing_write(LOGINING[0], '{0}:您进行了“提款”操作,提款金额为{1},电子现金余额为{2},总透支金额为{3}'
392                                                           .format(tm_text,money,'0',Actual_overdraft))
393                             break
394                         else:
395                             a = str(int(Overdraft_limit) - int(Actual_overdraft))
396                             print ('您想提取的金额已超透支额度上限,您最多还能提取{0}元'.format(a))
397                             break
398                 else:
399                     print ('您的输入有误!')
400         elif choose == '2':
401             while TAG:
402                 money = raw_input("请输入你想存入的金额:")
403                 re = common.pwd_money_check(LOGINING[0])
404                 if re == False:
405                     print ('密码校验错误!')
406                     break
407                 elif money.isdigit():
408                     cash = str(int(cash)+int(money))
409                     common.log_info_specific_write(LOGINING[0], {'cash': cash})
410                     common.log_info_billing_write(LOGINING[0], '{0}:您进行了“存款”操作,存款金额为{1},电子现金余额为{2},总透支额度为{3}'
411                                                   .format(tm_text, money, cash,Actual_overdraft))
412                     break
413                 else:
414                     print ('您的输入有误!')
415 
416         elif choose == '3':
417             return
418         else:
419             print ('您的输入有误!')
420 
421 
422 
423 @Permission_checking
424 @Account_checking
425 @login_status
426 def User_Transfer_Money(log = None):
427     '''
428     用户时时转账模块
429     :return:
430     '''
431     while TAG:
432         dictt = common.log_info_read(LOGINING[0])
433         tm = time.localtime()
434         tm_text = str(tm.tm_year) + '-' + str(tm.tm_mon) + '-' + str(tm.tm_mday) + ' ' + str(tm.tm_hour) + ':' + str(tm.tm_min)
435         text = '''
436                    时时转账功能界面           {0}
437                     1,时时转账
438                     2,返回菜单
439                                 '''.format(log)
440         print (text)
441         while TAG:
442             decide = raw_input('请问你想做点什么?')
443             if decide == '1':
444                 name = raw_input('请输入你想转账的人的用户名:')
445                 if os.path.exists(DIR +name+'_log') == False:
446                     print ('没有这个用户存在!请重新输入!')
447                     break
448                 elif common.log_info_specific_read(name, 'account') == 'empty':
449                     print ('对方没有关联银行卡!')
450                     break
451                 else:
452                     card = raw_input('请输入你想要转账的对方的银行卡号:')
453                     account = common.log_info_specific_read(name, 'account')
454                     if card == account:
455                         print ('银行卡号验证成功!')
456                         money = raw_input('请输入你想要转账的金额:')
457                         re = common.pwd_money_check(LOGINING[0])
458                         if re == False:
459                             print ('密码校验错误!')
460                             break
461                         elif int(dictt['cash']) < int(money):
462                             print ('您没有足够的现金转账!')
463                             break
464                         elif money.isdigit():
465                             dict = common.log_info_read(name)
466                             dict['cash'] = str(int(dict['cash'])+int(money))
467                             common.log_info_write(name,dict)
468                             text = '{0}:银行卡为{1}的用户 向您转账{2}元,电子现金账户余额为{3},总透支额度为{4}'\
469                                 .format(tm_text,dictt['account'],money,dict['cash'],dict['Actual_overdraft'])
470                             common.log_info_billing_write(name,text)
471                             dictt['cash'] = str(int(dictt['cash'])-int(money))
472                             common.log_info_write(LOGINING[0], dictt)
473                             text = '{0}:您进行了“转账”操作,转账金额为{1},对方银行卡号为{2},电子现金余额为{3},总透支额度为{4}'\
474                                 .format(tm_text,money,dict['account'],dictt['cash'],dictt['Actual_overdraft'])
475                             common.log_info_billing_write(LOGINING[0], text)
476                             print ('转账成功!')
477                     else:
478                         print ('您的银行卡号输入错误!')
479                         break
480             elif decide == '2':
481                 return
482             else:
483                 print ('您的输入有误!')
484 
485 
486 @Permission_checking
487 @Account_checking
488 def User_Pay_back_Money():
489      '''
490      用户定期还款设置模块
491      :return:
492      '''
493      dict = common.log_info_read(LOGINING[0])
494      print ('您目前的自动还款设置为每月的{0}日还款').format(dict['Repayment_date'])
495      while TAG:
496         decide = raw_input('你想重新设置自动还款日吗?(y/n):')
497         if decide == 'y':
498             day = raw_input('请输入您想设置的日期(1----10):')
499             if day.isdigit() and int(day) <= 10:
500                 dict['Repayment_date'] = day
501                 common.log_info_write(LOGINING[0],dict)
502                 print ('自动还款日期修改成功!')
503                 return
504             else:
505                 print ('您的输入有误!')
506         elif decide == 'n':
507             return
508         else:
509             print ('您的输入有误!')
510 
511 
512 @Permission_checking
513 @Account_checking
514 @login_status
515 def Select_Billing(log = None):
516     '''
517     用户账单查询模块
518     :return:
519     '''
520 
521     dictt = {}
522     while TAG:
523         num = 0
524         dict = common.log_info_read(LOGINING[0])
525         tm = time.localtime()
526         tm_text = str(tm.tm_year) + '-' + str(tm.tm_mon) + '-' + str(tm.tm_mday) + ' ' + str(tm.tm_hour) + ':' + str(tm.tm_min)
527 
528         text = '''
529                       账单功能如下:           {0}
530                     1,账单查询
531                     2,未出账单流水记录查询
532                     3,返回菜单
533                                   '''.format(log)
534         print (text)
535         while TAG:
536             choose = raw_input('请输入索引进行选择:')
537             if choose == '1':
538                 num = 0
539                 if len(dict['Debt_record'].keys()) != 0:
540                     for i in dict['Debt_record'].keys():
541                         num += 1
542                         dictt[str(num)] = i
543                         print ('{0},{1}账单'.format(str(num),i))
544                     while TAG:
545                         choose = raw_input('请输入你的选择:')
546                         if choose in dictt:
547                             print (dict['Debt_record'][dictt[choose]])
548                             print ('{0}月账单流水信息如下:'.format(dictt[choose]))
549                             for i in dict['Has_been_out_billing'][dictt[choose]]:
550                                 print (i)
551                             break
552                         else:
553                             print ('你的输入有误!')
554                 else:
555                     print ('目前您没有任何账单生成!')
556                     break
557             elif choose == '2':
558                 print ('未出账单流水记录如下:')
559                 for line in dict['Not_out_billing']:
560                     print (line)
561                 break
562             elif choose == '3':
563                 return
564             else:
565                 print ('您的输入有误!')

admin_business.py

  1 #!/usr/bin/python
  2 # -*- coding: utf-8 -*-
  3 # 管理员业务层
  4 
  5 
  6 from lib import common
  7 import user_business
  8 import os
  9 DIR = os.path.dirname(__file__)
 10 DIR = DIR.replace('src','db/')
 11 
 12 
 13 LOGINING = []      #用户时时登录列表
 14 TAG = True      #循环控制标志
 15 
 16 
 17 def admin_manage(log = None):
 18     '''
 19     管理员操作界面,只有管理员能进
 20     :param log: 用户登录状态标志
 21     :return: None
 22     '''
 23     while TAG:
 24         text = '''
 25                           欢迎光临管理员操作界面        {0}
 26 
 27                              1,添加用户银行卡号
 28                              2,指定用户透支额度
 29                              3,冻结用户银行卡号
 30                              4,系统退出             '''.format(log)
 31         print (text)
 32         while TAG:
 33             choose = raw_input('管理员你好,你想做点什么?:')
 34             if choose in {'1','2','3','4'}:
 35                 if choose == '1':
 36                     admin_add_bankcard()
 37                     break
 38                 elif choose == '2':
 39                     admin_Overdraft_limit()
 40                     break
 41                 elif choose == '3':
 42                     admin_Freeze_bankcard()
 43                     break
 44                 elif choose == '4':
 45                     common.Exit()
 46             else:
 47                 print ('您的输入有误!')
 48 
 49 
 50 def admin_add_bankcard():
 51     '''
 52     给没有关联银行卡的用户关联银行卡号
 53     :return:None
 54     '''
 55     dict = {}
 56     print ('尚未建立银行卡关联信息的账户如下:\n')
 57     list = os.listdir(DIR)
 58     num = 0
 59     for i in list:
 60         if i == '__init__.py' or i == '__init__.pyc':
 61             continue
 62         else:
 63             re_dict = common.log_info_read(i.strip().split('_')[0])
 64             if re_dict['account'] == 'empty':
 65                 num += 1
 66                 print ('{0} 登录名称:{1}  \n'.format(num,re_dict['name_login']))
 67                 dict[str(num)] = re_dict['name_login']
 68     while TAG:
 69         choose = raw_input('输入索引选择你想添加银行卡的用户(n = 返回上级菜单):')
 70         if choose == 'n':
 71             return
 72         elif choose in dict:
 73             account = common.account_input()
 74             re_dict = common.log_info_read(dict[choose])
 75             re_dict['account'] = account
 76             common.log_info_write(dict[choose],re_dict)
 77             print ('用户{0}的银行卡关联成功'.format(dict[choose]))
 78         else:
 79             print('您输入的信息有误!')
 80 
 81 
 82 
 83 def admin_Overdraft_limit():
 84     '''
 85     修改用户银行卡的透支额度
 86     :return:None
 87     '''
 88     dict = {}
 89     print ('所有用户额度信息如下:\n')
 90     list = os.listdir(DIR)
 91     num = 0
 92     for i in list:
 93         if i == '__init__.py' or i == '__init__.pyc':
 94             continue
 95         else:
 96             re_dict = common.log_info_read(i.strip().split('_')[0])
 97             num += 1
 98             print ('{0} 登录名称:{1}  透支额度为:{2}  \n'.format(num, re_dict['name_login'],re_dict['Overdraft_limit']))
 99             dict[str(num)] = re_dict['name_login']
100     while TAG:
101         choose = raw_input('输入索引选择你想修改额度的账户(n = 返回上级菜单):')
102         if choose == 'n':
103             return
104         elif choose in dict:
105             Quota = raw_input('你想把额度改成多少?:')
106             re_dict = common.log_info_read(dict[choose])
107             re_dict['Overdraft_limit'] = Quota
108             common.log_info_write(dict[choose], re_dict)
109             print ('用户{0}的额度修改成功!'.format(dict[choose]))
110         else:
111             print('您输入的信息有误!')
112 
113 
114 
115 def admin_Freeze_bankcard():
116     '''
117     冻结or解冻用户的银行卡号
118     :return:None
119     '''
120     dict = {}
121     print ('所有已关联银行卡的用户的银行卡状态信息如下:\n')
122     list = os.listdir(DIR)
123     num = 0
124     for i in list:
125         if i == '__init__.py' or i == '__init__.pyc':
126             continue
127         else:
128             re_dict = common.log_info_read(i.strip().split('_')[0])
129             if re_dict['account'] != 'empty':
130                 num += 1
131                 if re_dict['status'] == '0':
132                     lab = '活跃'
133                 else:
134                     lab = '冻结'
135                 print ('{0} 登录名称:{1}  账户状态:{2} \n'.format(num, re_dict['name_login'],lab))
136                 dict[str(num)] = re_dict['name_login']
137     while TAG:
138         choose = raw_input('输入索引选择用户来改变他的银行卡状态(活跃-->冻结-->活跃)(n = 返回上级菜单):')
139         if choose == 'n':
140             return
141         elif choose in dict:
142             re_dict = common.log_info_read(dict[choose])
143             if  re_dict['status'] == '0':
144                 labb = '冻结'
145                 labbb = '1'
146             else:
147                 labb = '活跃'
148                 labbb = '0'
149             decide = raw_input('你确定要将用户{0}的银行卡的状态改成{1}吗?(y/n):'.format(dict[choose],labb))
150             if decide == 'n':
151                 return
152             re_dict['status'] = labbb
153             common.log_info_write(dict[choose], re_dict)
154             print('用户{0}的银行卡的状态信息已经改变!'.format(dict[choose]))
155         else:
156             print('您输入的信息有误!')

 

posted @ 2016-11-28 19:56  陈思齐  阅读(4276)  评论(0编辑  收藏  举报