day_4 实现ATM机取款、查询余额、退出等功能

取款

这是接着昨天存款的功能写的,我发现存款和取款就是差在一个加一个减而已。

    def withdrawal(self):
        """用来实现在线取款功能"""
        money = input("请输入金额:")
        if self._db.update_user(self._current_user,
                                "balance", int(money) -
                                           self._current_user.get_balance()):
            self._current_user.set_balance(int(money) -
                                           self._current_user.get_balance())
            status = "成功"
            print("取成功")
        else:
            status = "失败"
            print("取款失败")
        item = Item(self._current_user, "取款", int(money), status)
        if self._db.insert_log(item):
            return True

接下来是查询余额、和退出

但是这两个功能实现起来太简单了,就直接代码了,也懒得测试了。

# -----------------查询余额------------------
    def check_money(self):
        print(self._current_user)
        return True

    # -----------------退出账号------------------
    def quit(self):
        self._current_user = None

接下来就是写run()方法来调用这些个方法了,如何让他们之间的逻辑完整。

ATM机首先应该是插卡,然后识别卡号,输入密码登录的这样的一种功能,但是我现在肯定不能直接去做一个RFID卡来,那不现实,所以,就把流程改成:

如果有卡则先登陆。没有卡先注册,所以一开始就只有两个选项,所以就是下面这样。

    def run(self):
        while True:
            print("欢迎使用------DK--ATM 机-------------\n")
            print("1. 登录\n")
            print("2. 注册\n")
            print("------------------------------------\n")
            code = input("(1/2):")
            if code == '1':
                self._login()
                break
            elif code == '2':
                self.open_an_account()
                break
        self.menu()

下面的menu是一个现实所有功能的方法:

    def menu(self):
        """"""
        while True:
            print(self._current_user)
            print("1. 存款\n")
            print("2. 取款\n")
            print("3. 查询\n")
            print("4. 退出\n")
            print('-' * 36)
            code = input("(1/2/3/4):")
            if code == '1':
                self.deposit()
            elif code == '2':
                self.withdrawal()
            elif code == '3':
                self.check_money()
            elif code == '4':
                self.quit()
                break

最后使用的效果如下:


image.png
image.png
image.png
image.png
image.png

。。。emmmmm好像不太对,怎么取了200就成 - 的了呢????

奥。原来是前面的取款的时候减错了,。。

现在改过来:

    def withdrawal(self):
        """用来实现在线取款功能"""
        money = input("请输入金额:")
        if self._db.update_user(self._current_user,
                                "balance", self._current_user.get_balance() -
                                           int(money)):
            self._current_user.set_balance(self._current_user.get_balance() -
                                           int(money))
            status = "成功"
            print("取款成功")
        else:
            status = "失败"
            print("取款失败")
        item = Item(self._current_user, "取款", int(money), status)
        if self._db.insert_log(item):
            return True

现在用前面注册的来登录:

image.png
image.png
image.png
image.png
image.png

emmmm 还有点小瑕疵。就是,我退出当前账号后并不是想退出程序,而是换一个账号,现在需要把他换成退出登陆的当前的账号后,返回那一个登录和注册的界面。

    def quit(self):
        self._current_user = None
        self.run()
        return True

现在改成这样就好了,在推车当前登录的账号后,就直接回到第一个菜单。

image.png

就像现在这样,嗯么么么,差不对都完成了吧!!!!

恭喜恭喜,同喜同喜。

奥对了,还有数据库的相关记录还么有看。

image.png

你可能感兴趣的:(day_4 实现ATM机取款、查询余额、退出等功能)