首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >银行系统程序

银行系统程序
EN

Code Review用户
提问于 2017-04-13 15:26:26
回答 1查看 6.8K关注 0票数 4

我正在使用Python创建一个银行系统程序,这个程序的要求非常基本:

  1. 注册和维护客户详细信息
  2. 通过存款和提款更新帐户余额

我已经成功地编写了基本功能,现在我需要任何关于如何改进我的代码的反馈,以便创建一个具有清晰、简洁和结构化代码的程序。我非常感谢任何类型的反馈,无论是编码特定的反馈还是对我的一般编码的反馈,因为我一般都是编程初学者。

PS:我知道这个程序需要错误处理,我已经在做了。

代码语言:javascript
运行
复制
import pyodbc

cnxn = pyodbc.connect('Driver={ODBC Driver 13 for SQL Server};Server=GLOBALGROWTH\SQLEXPRESS;Database=IDLBANKSYS;Trusted_Connection=yes;')
cursor = cnxn.cursor()

class CLIMenu(object):

    def __init__(self, options: list):
        self.options=options

    def PrintCLIMenu(self):
        print('=' * 30, '\tIDL BANKING SYSTEM', '=' * 30, sep='\n')
        print()
        print("PLEASE ENTER THE NUMBER CORRESPONDING TO YOUR DESIRED COMMAND IN THE PROMPT BELOW :\n ", *self.options,
              sep='\n')
        print()
    def GetUserInput(self):
        return input(">>>: ")

def RegisterCustomer():
    RegisterCustomerForm = [input("NATIONAL IDENTITY CARD NUMBER : "), input("FULL NAME IN CAPITALS : "),
                                input("DATE OF BIRTH AS DD/MM/YYYY : "),
                                input("ADDRESS : "), input("CONTACT NUMBER : "), input("EMAIL ADDRESS : ")]
    cursor.execute("INSERT into customer VALUES(?,?,?,?,?,?)", *RegisterCustomerForm)
    cnxn.commit()
    print("REGISTRATION SUCCESSFUL")
    cursor.execute("INSERT into account VALUES(?,?,0)", RegisterCustomerForm[0], RegisterCustomerForm[1])
    cnxn.commit()

def ViewCustomer():
        CustToView=input("PLEASE ENTER THE NATIONAL IDENTITY CARD NUMBER OF THE CUSTOMER YOU WISH TO VIEW : ")
        cursor.execute("SELECT * FROM customer WHERE Cust_NIC=?",CustToView)
        columns = [column[0] for column in cursor.description]
        print('\t'.join(str(i) for i in columns),end="")
        print('\n')
        for row in cursor.fetchall():
            print ('\t'.join(str(j)for j in row))
        input("\n==========PRESS ENTER KEY TO RETURN TO THE PREVIOUS MENU==========")

def ViewAllCustomers():
    cursor.execute("SELECT * FROM customer")
    columns = [column[0] for column in cursor.description]
    print('\t'.join(str(i) for i in columns), end="")
    print('\n')
    for row in cursor.fetchall():
        print('\t'.join(str(j) for j in row))
    input("\n==========PRESS ENTER KEY TO RETURN TO THE PREVIOUS MENU==========")

class Transaction:

    def __init__(self,acct,amt):
        self.acct=acct
        self.amt=amt

    def Deposit(self):
        cursor.execute("UPDATE account SET Acct_Bal=Acct_Bal+? WHERE Acct_NO=?",self.amt,self.acct)
        cnxn.commit()
        print("YOU'VE DEPOSITED %s TO ACCOUNT NUMBER %s" % (self.amt,self.acct))
    def Withdrawal(self):
        cursor.execute("UPDATE account SET Acct_Bal=Acct_Bal-? WHERE Acct_NO=?",self.amt,self.acct)
        cnxn.commit()
        print("YOU'VE  WITHDRAWN  %s FROM ACCOUNT NUMBER %s" % (self.amt, self.acct))


if __name__=='__main__':
    while True:
        MainMenu=CLIMenu(['\t1.ACCESS CUSTOMER DETAILS','\t2.ACCESS TRANSACTION PORTAL','\t3.EXIT'])
        MainMenu.PrintCLIMenu()
        UserInput=MainMenu.GetUserInput()
        if UserInput =='1':
            while True:
                CustomerMenu = CLIMenu(['\t1.REGISTER CUSTOMER', '\t2.VIEW CUSTOMER',
                                              '\t3.VIEW ALL CUSTOMERS','\t4.GO TO PREVIOUS MENU'])
                CustomerMenu.PrintCLIMenu()
                UserInput=CustomerMenu.GetUserInput()
                if UserInput == '1':
                    RegisterCustomer()
                    continue
                if UserInput == '2':
                    ViewCustomer()
                    continue
                if UserInput == '3':
                    ViewAllCustomers()
                    continue
                if UserInput == '4':
                    break
        elif UserInput == '2':
            AcctToTransact=input("PLEASE ENTER THE ACCOUNT NUMBER : ")
            AmtToTransact=input("PLEASE ENTER THE TRANSACTION AMOUNT : ")
            trnsct=Transaction(AcctToTransact,AmtToTransact)
            TransactionMenu = CLIMenu(['\t1.DEPOSIT MONEY',
                                             '\t2.WITHDRAW MONEY', '\t3.GO TO PREVIOUS MENU'])
            TransactionMenu.PrintCLIMenu()
            UserInput = TransactionMenu.GetUserInput()
            if UserInput == '1':
                trnsct.Deposit()
                continue
            if UserInput == '2':
                trnsct.Withdrawal()
                continue
            if UserInput == '3':
                continue
        elif UserInput == '3':
            break

cnxn.close()
quit()
EN

回答 1

Code Review用户

回答已采纳

发布于 2017-11-14 16:38:19

  1. 您将使用相同的For循环两次(以及后面的打印)。您应该将其解压缩到一个新函数中,并调用它两次。
  2. 在主函数中,应该提取在if条件下的代码,将elif下的代码提取为新函数。
  3. 应该用字典替换用于ifUserInput语句。参见一个示例这里
票数 3
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/160668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档