学习银行转账系统-代码摘取csdn
生活随笔
收集整理的這篇文章主要介紹了
学习银行转账系统-代码摘取csdn
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
變成思想理解
1數據庫:2個字段,名字和余額
2.程序設計部分 ,例如A轉賬20到B賬戶 ,實現方法A余額-20,B余額增加20即可
代碼不是自己縮寫,在原有基礎上做了修改,并加了具體代碼注釋
官方代碼如下(代碼有點小多,不過注釋解釋的很明白了,不明白可以私信 我,經過調整,運行正常,這次是固定金額的,等下次設置自定義金額,原賬戶,和目標賬戶,做一個交互式系統):
#銀行轉賬系統,參數,原卡號,新卡號,轉賬金額#先建立數據庫test_3和表bankdata #加載mysql相關類包mysql或者pymysql import pymysql #數據庫配置信息,存儲格式字典 def Conn():config = {#本機ip'host': '127.0.0.1',#mysql固定端口3306'port': 3306,#數據用戶名,密碼,編碼格式'user': 'root','passwd': '1234','charset':'utf8',}#數據建立鏈接對象常用方法conn = pymysql.connect(**config)#數據庫創建游標方法cursor = conn.cursor()try:#用python創建數據庫語句,在學習中,下次有機會自己模仿編寫下#創建數據庫DB_NAME = 'test_3'#執行數據庫語句有游標對象執行cursor.execute('DROP DATABASE IF EXISTS %s' %DB_NAME)cursor.execute('CREATE DATABASE IF NOT EXISTS %s' %DB_NAME)conn.select_db(DB_NAME)#創建表也是同上,游標對象,里面%s是字符串格式化操作,之前學習過TABLE_NAME = 'bankData'cursor.execute('CREATE TABLE %s(id int primary key,money int(30))' %TABLE_NAME)#批量插入紀錄,批量插入方法利用列表[元祖1,元祖2]進行批量插入操作values = []for i in range(20):values.append((int(i),int(156*i)))cursor.executemany('INSERT INTO bankData values(%s,%s)',values)#出了查詢有fetchall,其他操作需要提交事物conn.commit()#查詢數據條目count = cursor.execute('SELECT * FROM %s' %TABLE_NAME)print ('total records:{}'.format(cursor.rowcount))#獲取表名信息desc = cursor.descriptionprint ("%s %3s" % (desc[0][0], desc[1][0]))#scroll方法是游標滾動到第10個位置cursor.scroll(10,mode='absolute')results = cursor.fetchall()for result in results:print (result)except:import tracebacktraceback.print_exc()#發生錯誤時會滾conn.rollback()finally:#關閉游標連接cursor.close()#關閉數據庫連接conn.close()#構建系統import pymysql #轉賬類實現方法,操作上面的方法 class TransferMoney(object):#構造方法:注意的是要有__,之前版本可那個直接init就可以,但是這個版本不可以def __init__(self, conn):self.conn = connself.cur = conn.cursor()#實現方法,第一判斷人物是否存在def transfer(self, source_id, target_id, money):if not self.check_account_avaialbe(source_id):raise Exception("賬戶不存在")if not self.check_account_avaialbe(target_id):raise Exception("賬戶不存在")#第二判斷有足夠余額,具體方法在下面介紹if self.has_enough_money(source_id, money):try:#減少增加轉賬金額self.reduce_money(source_id, money)self.add_money(target_id, money)except Exception as e:print("轉賬失敗:", e)self.conn.rollback()else:self.conn.commit()print("%s給%s轉賬%s金額成功" % (source_id, target_id, money))def check_account_avaialbe(self, acc_id):"""判斷帳號是否存在, 傳遞的參數是銀行卡號的id"""select_sqli = "select * from bankData where id=%d;" % (acc_id)print("execute sql:", select_sqli)res_count = self.cur.execute(select_sqli)if res_count == 1:return Trueelse:raise Exception("賬戶%s不存在" %(acc_id))return Falsedef has_enough_money(self, acc_id, money):"""判斷acc_id賬戶上金額> money"""#查找acc_id存儲金額?select_sqli = "select money from bankData where id=%d;" % (acc_id)print("execute sql:", select_sqli)self.cur.execute(select_sqli) # ((1, 500), )#獲取查詢到的金額錢數;fetchone百度下就是查詢返回值單個元祖,就是一行記錄,500acc_money = self.cur.fetchone()[0]#判斷if acc_money >= money:return Trueelse:return Falsedef add_money(self, acc_id, money):update_sqli = "update bankData set money=money+%d where id=%d" % (money, acc_id)print("add money:", update_sqli)self.cur.execute(update_sqli)def reduce_money(self, acc_id, money):update_sqli = "update bankData set money=money-%d where id=%d" % (money, acc_id)print("reduce money:", update_sqli)self.cur.execute(update_sqli)#析構方法def __del__(self):self.cur.close()self.conn.close()if __name__ == '__main__':#1. 連接數據庫,conn = pymysql.connect(host = '127.0.0.1' # 連接名稱,默認127.0.0.1,user = 'root' # 用戶名,passwd='1234' # 密碼,port= 3306 # 端口,默認為3306,db='test_3' # 數據庫名稱,charset='utf8',autocommit=True, # 如果插入數據,自動提交給數據庫)trans = TransferMoney(conn)trans.transfer(15, 12, 200)總結
以上是生活随笔為你收集整理的学习银行转账系统-代码摘取csdn的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做一个有胆识的有为青年
- 下一篇: js实现table合并相同列单元格