qfxx第3周2作业

本周的qfxx课程重点讲解了编程实践,作业涵盖了关键概念的应用,包括算法设计、数据结构和问题解决策略。同学们在完成作业过程中深入理解了所学知识。
摘要由CSDN通过智能技术生成
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/7/23 0023 17:17
# @Author  : joker-syc
# @Site    : 
# @File    : zuoye.py
# @Software: PyCharm

'''
将音乐播放器改写为面向对象
'''
#!/usr/bin/python3
#-*- coding: utf-8 -*-
#-*- author:zhangjiao -*-
'''
1.给歌词解析器添加音乐
2.写一个音乐播放器

'''
import pygame
import os
import time
import _thread
class songPlay:
    musicDir=r'D:\CloudMusic'
    musicList=[]
    nowMusic=''
    value=0.5
    def getMusic(self):
        if not os.path.exists(self.musicDir):
            print("指定播放目录不存在")
        else:
            musicName=os.listdir(self.musicDir)
            for a in musicName:
                musicAddress=os.path.join(self.musicDir,a)
                self.musicList.append(musicAddress)
            # print(musicList)
    def playMusic(self,music):
        mm = pygame.mixer.music.load(music)
        pygame.mixer.music.set_volume(self.value)
        pygame.mixer.music.play()
        pygame.mixer.music.set_endevent(pygame.USEREVENT + 1)

    def stopMusic(self):
        pygame.mixer.music.stop()

    # def backplay():


    def nextMusic(self):
        if self.musicList.index(self.nowMusic)==len(self.musicList)-1:
            self.nowMusic=self.musicList[0]
            self.playMusic(nowMusic)
        else:
            self.nowMusic=self.musicList[self.musicList.index(self.nowMusic)+1]
            self.playMusic(self.nowMusic)

    def lastMusic(self):
        if self.musicList.index(self.nowMusic)==0:
            self.nowMusic=self.musicList[-1]
            self.playMusic(self.nowMusic)
        else:
            self.nowMusic=self.musicList[self.musicList.index(self.nowMusic)-1]
            self.playMusic(self.nowMusic)

    def increase(self):
        try:
            self.value+=0.1
            pygame.mixer.music.set_volume(self.value)
        except:
            print("已到达最大音量")

    def reduce(self):
        try:
            self.value-=0.1
            pygame.mixer.music.set_volume(self.value)
        except:
            print("已到达最小音量")

    @staticmethod
    def welcome():
        print('''
        *************************
        * 欢迎来到酷我音乐播放器 *
        *************************
        ''')
        pygame.mixer.init()

    @staticmethod
    def select():
        print('''
        **************************
        * 1.播放       2.停止     *
        * 3.下一曲     4.上一曲   *
        * 5.增大音量   6.减少音量 *
        *      0.退出             *
        ***************************
        ''')
        return input("请选择您要操作的选项:")

    def center(self):
        self.nowMusic=self.musicList[0]
        songPlay.welcome()
        while 1:
            a=songPlay.select()
            if a=='0':
                return 0
            elif a=='1':
                self.playMusic(self.nowMusic)
                continue
            elif a=='2':
                self.stopMusic()
                continue
            elif a=='3':
                self.nextMusic()
                continue
            elif a=='4':
                self.lastMusic()
                continue
            elif a=='5':
                self.increase()
                continue
            elif a=="6":
                self.reduce()
                continue

    @staticmethod
    def manyThread(threadName):
        print(threadName+"\n")
        center()
if __name__=="__main__":
    playsong=songPlay()
    playsong.getMusic()
    playsong.center()
    # 此时创建的是一个守护线程:会随着主线程的结束而结束
    # 主线程执行的速度非常快,主线程执行结束,就直接退出了,因此我们的子线程根本不会被创建
    # 多线程必须要在程序还处于"活"的状态时才能执行,这就是while 1 的作用,让程序不停下来,停留在cpu中.
    # try:
        # _thread.start_new_thread(manyThread,('thread1',))   #似乎这里当子线程执行这个后,主线程就去下一行了(子线程访问后,主线程就不管了),使得主线程过早结束,子线程还没发挥作用就被销毁了
        # time.sleep(10)
        # _thread.start_new_thread(manyThread,('thread2',))
        # time.sleep(100)
    # except:
    #     print("实验多线程失败")

    # while 1:
    #     pass

'''

ATM系统
卡:卡号,密码,金额,锁
用户:name,iscard,phonenum,card
ATM系统:
属性:用户列表  登录状态
行为: 1.登陆   2.开户     3.查询   4.取款     5.存款   0.退出
6.转账   7.改密     8.锁卡   9.解锁


温馨提示:一开始就要把类变量给设置清楚,不然调试的时候就很迷
'''
import random

#用户的一切操作都需要通过ATM类
class ATM:
    # userMessage={}             #key: name='' value: [phonenum='',cardId=[]]
    # cardMessage={}             #key: carId='' value: [password='',money=0,freeze=True,userName='']

    nowUser=''                 #当前系统用户
    nowCard=''
    lock=[False,3]

    def __init__(self):
        ATM.nowUser=''
        ATM.nowCard = ''
        Card.nowCardId=''
        ATM.lock=[False,3]

    def login(self):
        cardId = input("请输入你的卡号\n")
        if Card.isExist(cardId) and Card.ifLock(cardId):
            if Card.isRight(cardId):
                ATM.nowUser=Card.cardMessage[cardId][-1]
                ATM.nowCard=cardId
                Card.nowCardId=cardId
                print('你已经成功登入ATM')
            else:
                if ATM.lock[1]<=0:
                    ATM.lock[1]-=1
                    print('密码错误,当前可继续输入密码次数为%d'%self.lock[1])
                    self.login()
                else:
                    Card.cardMessage[cardId][-2]=False
                    print('此卡已冻结')
        else:
            print('卡号不存在')

    def creatNewUser(self):
        userName=input("请输入新开户的用户名\n")
        if Men.ifNewUser(userName):
            phoneNumber=input("请输入电话号码\n")
            men=Men()
            men.addUser(userName,phoneNumber)
        else:
            print("用户名重复,请重新输入")
            self.creatNewUser()

    def selectUser(self):
        print(Men.select(ATM.nowUser))

    def getMoney(self):
        money=input("请输入取钱数\n")
        if money>Card.cardMessage[ATM.nowCard][1]:
            print("取的数目大于当前用户的存款金额,请重新输入")
            self.getMoney()
        else:
            card=Card()
            card.getMoney(money)

    def inMoney(self):
        money=int(input("请输入存钱数\n"))
        card=Card()
        card.inMoney(money)

    def Transfer_accounts(self):
        cardId=input("请输入转账的账户\n")
        if cardId in Card.cardMessage:
            money=int(input('请输入转账的钱数\n'))
            if money<Card.cardMessage[ATM.nowCard][1]:
                card=Card.Transfer_accounts(money,cardId)
            else:
                print("当前账户的余额不足\n")
        else:
            print('不存在此卡号,请重新输入')
            self.Transfer_accounts()

    def changePasswd(self):
        if ATM.nowUser=='' and ATM.nowCard=='':
            print('当前未登录')
        else:
            card=Card()
            card.changePasswd()

    def lockCard(self):
        if ATM.nowUser == '' and ATM.nowCard == '':
            print('当前未登录')
        else:
            card=Card()
            card.lockCard()

    def unlock(self):
        if ATM.nowUser == '' and ATM.nowCard == '':
            print('当前未登录')
        else:
            card=Card()
            card.unlockCard()

    @staticmethod
    def welcome():
        print('''
           **********************
           *                    *
           *  welcome to bank   *
           *                    *
           **********************
           ''')

    @staticmethod
    def select():
        print('''
           **********************
           *  1.登陆   2.开户    *
           *  3.查询   4.取款    *
           *  5.存款   0.退出    *
           *  6.转账   7.改密    *
           *  8.锁卡   9.解锁    *
           **********************
           ''')
        num = input("请选择服务项目:")
        return num

#生成新的卡号    查询卡号是否存在
class Card:
    cardMessage = {'123':['123',10,True,'沙雕']}  # key: carId='' value: [password='',money=0,freeze=True,userName='']
    nowCardId=''
    addNewUser=''

    #申请新卡之前,必须有账户,userName
    # def creat(self,userName):
    #     newCard=self.creatNewCard()
    #     print("你的卡号为%S,请牢记"%newCard)
    #     self.cardMessage[newCard]=[self.setPasswd(),0,True,userName]
    #     return newCard

    def addCard(self):
        newCard=self.creatNewCard()
        print("你的卡号为%s,请牢记" % newCard)
        Card.cardMessage[newCard] = [self.setPasswd(), 0, True,self.addNewUser ]
        print(Card.cardMessage)
        return newCard


    def creatNewCard(self):
        newCard = ''
        for a in range(6):
            newCard += str(random.randint(1, 6))
        if self.isExist(newCard):
            self.creatNewCard()
        else:
            return newCard

    @classmethod
    def isExist(cla,cardId):
        if cardId in Card.cardMessage:
            return True
        else:
            return False

    @classmethod
    def isRight(cla,cardId):
        if input("请输入该卡的密码\n")==cla.cardMessage[cardId][0]:
            return True
        else:
            return False

    def setPasswd(self,*args):
        if args==():
            passwd=input("请输入密码\n")
            return passwd
        else:
            passwd = input("请输入重置的密码\n")
            return passwd

    def changePasswd(self):
        self.setPasswd(Card.nowCardId)

    @classmethod
    def ifLock(self,cardId):
        if Card.cardMessage[cardId][-2]:
            return True
        else:
            return False

    def lockCard(self):
        # if Card.cardMessage[cardId][-2]:
            Card.cardMessage[Card.nowCardId][-2]=False
            print("冻结成功\n")
        # else:
        #     print("该卡已冻结\n")

    def unlockCard(self):
        # if Card.cardMessage[cardId][-2]:
        #     print("该卡已解冻,无需再解冻\n")
        # else:
            Card.cardMessage[Card.nowCardId][-2]=True
            print("解冻成功\n")

    def getMoney(self,money):
        Card.cardMessage[Card.nowCardId][1]-=money
        print('取款成功')

    def inMoney(self,money):
        Card.cardMessage[Card.nowCardId][1]+=money
        print('存款成功')

    def Transfer_accounts(self,money,card2):
        #转账功能实现
        try:
            Card.cardMessage[Card.nowCardId][1]-=money
            Card.cardMessage[card2][1]+=money
            print("转账成功")
        except:
            print("转账失败")

class Men:
    userMessage = {'沙雕': ["1", "123"]}  # key: name='' value: [phonenum='',cardId=[]]

    def addUser(self,newUserName,phonenum):
        card=Card()
        Card.addNewUser=newUserName
        Men.userMessage[newUserName]=[phonenum,card.addCard()]

    @classmethod
    def select(self,nowUserName):
        return Men.userMessage[nowUserName]

    @classmethod
    def ifNewUser(cla,userName):
        if userName in cla.userMessage:
            return False
        else:
            return True



if __name__ == '__main__':
    ATM.welcome()
    atm=ATM()
    while 1:
        nun=ATM.select()
        if nun=='1':
            atm.login()
        elif nun=='2':
            atm.creatNewUser()
        elif nun=='3':
            atm.selectUser()
        elif nun=='4':
            atm.getMoney()
        elif nun=='5':
            atm.inMoney()
        elif nun=='0':
            break
        elif nun=='6':
            atm.Transfer_accounts()
        elif nun=='7':
            atm.changePasswd()
        elif nun=='8':
            atm.lockCard()
        elif nun=='9':
            atm.unlock()
        else:
            print("无效操作")






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值