zoukankan      html  css  js  c++  java
  • 从零开始学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 ('尚未建立银行卡关联信息的账户如下:
    ')
     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}  
    '.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 ('所有用户额度信息如下:
    ')
     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}  
    '.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 ('所有已关联银行卡的用户的银行卡状态信息如下:
    ')
    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} 
    '.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('您输入的信息有误!')
    北京IT职业教育培训中心,欢迎来校咨询。微信号:yinsendemogui(添加时请注明博客园)
  • 相关阅读:
    nodejs-supervisor
    javascript数组操作(创建、元素删除、数组的拷贝)
    mysql索引优化-order/group
    php-kafka
    大流量高并发解决方案
    MySQL数据类型和常用字段属性总结
    php一致性hash算法
    面试中的排序算法总结
    PHP的运行机制与原理(底层)
    Mysql中的锁机制
  • 原文地址:https://www.cnblogs.com/chensiqiqi/p/6171254.html
Copyright © 2011-2022 走看看