qfxx第3周2作業

#!/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("無效操作")






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章