1. 程式人生 > > 購物系統程式練習_PYTHON版

購物系統程式練習_PYTHON版

單機版購物程式(python版)
 #程式名稱:單機版購物系統Python版(本程式的C語言版參見本空間2013年12月17日日誌《本週成果物》)
#程式描述:實現單機版購物系統的登入,註冊,新增商品,新增訂單,頁面跳轉等功能。
#編寫日期:2014.3.22-2014.4.2,2014.7.8-2014.7.9
#編寫人:劉琳澤
#編寫解釋環境:Windows 7 家庭高階版    Python3.3.5rc1 IDLE

#因在python中,不存在函式宣告,故函式呼叫時被調函式必須在主調函式前,故本程式看似倒序,最外層的歡迎語句在最下方



 
#宣告引用檔案
import time
import sys
import os
#import users
#會員資訊儲存模組
database=[                                                #用列表儲存會員資訊,因為是單機版系統,會員資訊僅在當前開啟的程式中有效
    ['admin','admin'],                                   #系統管理員賬號密碼
    ['luke','123']                                          #提供測試用普通使用者賬號
        ]
#商品資訊儲存模組
goodlist=[                                                                              #實現方法、功用、效果等同上
    ['ID','name','quantity','price','state','discount'],
    ['001','蘋果','1000','3.5','0','10'],
    ['002','香蕉','200','5','1','9']
    ]
#訂單資訊儲存模組
orderlist=['ID','username','name','quantity']                                           #實現方法、功用、效果等同上
 #對比類模組,可進行註冊和登入的使用者名稱、密碼校驗和商品是否存在的校驗
class cpr():                                                                           
    def regcpr(self,username,password):                                               #對比方法,用於註冊時校驗使用者名稱和密碼是否存在的對比
        if [username,password] in database:                                            
            return 0                                                                                    #存在返回0
        else:
            return 1                                                                                   #不存在返回1
    def logincpr(self,username,password):                                           #對比方法,用於登入時校驗使用者名稱和密碼是否存在且是否配套
        if [username,password] in database:                                           #存在性校驗
            if [username,password]==['admin','admin']:                           #校驗要登入的使用者名稱是否是管理員賬號admin且密碼是否為admin
                return 0                                                                            #是admin且密碼與之配套返回0
            else:
                return 1                                                                            #不是admin或者密碼與之不配套返回1
        else:
            return 2                                                                            #使用者名稱不存在返回2
    def goodscpr1(self,ID):                                                #對比方法,用於新增商品時校驗商品ID是否已存在和在新增訂單時校驗ID
        print(ID)
        for x in range(0,1001):
            if ID==goodlist[x][0]:                                                     
                return 0                                                                #存在則返回0
            else:
                return 1                                                                #不存在則返回1
    def goodscpr2(self,name):                                               #對比方法,用於新增商品時校驗商品名稱是否已存在
        print(name)
        for x in range(0,1001):
            if name==goodlist[x][1]:
                return 0
            else:
                return 1
#新增訂單模組
def order(username):
    cls=os.system('cls')                                                                #系統清屏命令
    print(username,",歡迎您新增訂單!")
    ID=input("請輸入您要訂購的商品ID編號:")                           #要求輸入訂購的商品ID編號
    goodIDcpr2=cpr()
    cprresult3=goodIDcpr2.goodscpr1(ID)                                   #呼叫對比類中的方法
    if cprresult3==1:
        quantity2=input("請輸入您想要的數量:")
        for x in range(len(goodlist)):                      #以goodlist的索引位置的序號為範圍進行迴圈查詢要訂購的商品ID所代表的商品的價格
            if goodlist[x][0]!='ID':
                key3=goodlist[x]
                if key3[0]==ID:
                    key4=goodlist.index(key3)
                    price=float(quantity2)*float(goodlist[key4][3])*float(goodlist[key4][5])*0.1            #計算訂單價格
                    name=goodlist[key4][1]
                    print("您的訂單資訊如下:")
                    print(username,ID,name,price)                                       #輸出訂單資訊
                    y=0
                    key='y'
                    while(key=='Y' or key=='y'):
                        y=y+1
                        key=input("確認訂單請輸入y後按回車:")                              #確認訂單
                        if key=='Y' or key=='y':
                            print("您的訂單已生成!系統將返回使用者介面。")
                            orderlist.insert(0,[[ID,username,name,price]])                   #將訂單插入訂單列表
                            time.sleep(3)
                            puserGUI(username)
                        else:
                            print("您輸入的字母有誤!")                                 
                            key2=input("是想取消訂單嗎?是選擇1,系統將返回使用者介面,否選擇2重新輸入:")          #不確認將詢問使用者意圖
                            if key2==1:
                                puserGUI(username)
                            if key2==2:
                                key='y'
    else:
        print("您輸入的商品不存在,系統將返回使用者介面。")                              #輸入ID號有誤時顯示的提示資訊
        time.sleep(3)
        puserGUI()   
#新增商品模組
def goodin():
    cls=os.system('cls')
    print("管理員,歡迎您新增商品!請按照提示進行操作!")                          #管理員新增商品
    key='y'
    x=0
    while(key=='y' or key=='Y'):
        x=x+1
        ID=input("請輸入商品ID號碼:")                                                               #索要新的ID號
        goodIDcpr=cpr()
        cprresult1=goodIDcpr.goodscpr1(ID)                                                      #校驗ID是否存在
        if cprresult1==1:
            name=input("請輸入商品名稱:")                                                        #索要商品名稱
            goodnamecpr=cpr()
            cprresult2=goodnamecpr.goodscpr2(name)                                       #校驗商品名稱是否存在
            if cprresult2==1:
                quantity=input("請輸入商品數量:")
                price=input("請輸入商品價格:")
                state=input("請輸入商品的折扣狀態(0代表不打折,1代表打折中):")
                discount=input("請輸入商品的折扣額度(1-10代表折扣的額度,10代表不打折):")
                goodlist.insert(0,[ID,name,quantity,price,state,discount])
                if x==5:
                    print("您最多一次新增5種商品,系統將回到管理首頁")                      #最多允許一次新增5中商品
                    time.sleep(3)
                    auserGUI()
                else:
                    key=input("商品新增成功!還要繼續新增嗎?需要請輸入y後按回車:")
                    if key!='y':
                        print("您輸入的字母有誤!系統將返回管理首頁。")
                        auserGUI()
            else:
                print("您輸入的商品名稱已存在,請重新輸入:")
                key='y'
        else:
            print("您輸入的ID號碼已存在,請重新輸入:")
            key='y'
       
#註冊模組
def regGUI():
    cls=os.system('cls')
    print("歡迎註冊本購物系統!")
    key1=input("開始註冊嗎?開始請輸入y後按回車,否則按任意鍵返回主頁面。\n")               #為避免使用者誤操作點入註冊介面
    if key1=='y' or key1=='Y':
        key2='y'
        while(key2=='y' or key2=='Y'):
            username=input("請輸入您要註冊的使用者名稱:")
            password=input("請輸入您的密碼")
            cpr1=cpr()
            result=cpr1.regcpr(username,password)                                   #呼叫對比類方法校驗使用者名稱和密碼是否已存在
            if result==0:
                print("您要註冊的使用者名稱已存在!請重新註冊其他使用者名稱!重新註冊輸入y後按回車,否則輸入任意鍵退出註冊:")
                key5=input()
                key2=key5
            elif result==1:
                x=1
                while(x<6):                                                                             #防止非人為原因引起的註冊失敗,系統自動重複5次
                    database.insert(0,[username,password])
                    key4=1
                    while(key4==1):
                        result2=cpr1.regcpr(username,password)
                        if result2==0:           
                            print("您註冊的使用者已成功!系統將進入登入介面。")
                            time.sleep(3)
                            loginGUI()
                        else:
                            key4=key4+1
                            if key4==6:
                                print("註冊失敗,系統將返回主頁面,請重新嘗試註冊")
                                time.sleep(3)
                                mainGUI()
                            else:
                                print("註冊未成功,系統正在重試")
                                time.sleep(3)
                    x=x+1             
    else:
        mainGUI()
#普通使用者介面
def puserGUI(username):
    cls=os.system('cls')
    print(username,",歡迎您進入本購物系統!")                                          #普通使用者操作介面的歡迎語句
    key3='y'
    while(key3=='y' or key3=='Y'):
        print("1.檢視商品列表")
        print("2.購買商品")
        print("3.退出系統")
        key=input("請選擇您要進行的操作的序號後點擊回車鍵:")                             #選擇相應功能
        if key=='1':
            cls=os.system('cls')
            for x in range(len(goodlist)):
                print(goodlist[x])
            print("1.購買商品")
            print("2.退出系統")
            key2=input("請選擇您要進行的操作的序號後點擊回車鍵:")
            x=1
            while(x==1):
                if key2=='1':
                    order(username)
                elif key2=='2':
                    mainGUI()
                else:
                    print("您輸入的序號有誤,請重新輸入。")
                    x='1'
        elif key=='2':
            order(username)
        elif key=='3':
            mainGUI()
        else:
            print("您輸入的序號有誤,請重新輸入:")
            key3='y'
#管理使用者介面
def auserGUI():
    cls=os.system('cls')
    print("管理員,歡迎您!")
    print("1.檢視商品列表")
    print("2.新增商品")
    print("3.退出管理系統")
    key=input("請選擇您要進行的操作的序號後點擊回車鍵:")
    if key=='1':
        cls=os.system('cls')
        for x in range(len(goodlist)):
            print(goodlist[x])
        print("1.新增商品")
        print("2.退出管理系統")
        key2=input("請選擇您要進行的操作的序號後點擊回車鍵:")
        x=1
        while(x==1):
            if key2=='1':
                goodin()
            elif key2=='2':
                mainGUI()
            else:
                print("您輸入的序號有誤,請重新輸入。")
                time.sleep(2)
    elif key=='2':
        goodin()
    elif key=='3':
        mainGUI()
#登入模組
def loginGUI():
    cls=os.system('cls')
    print("1.登入系統")
    print("2.返回主頁面")
    print("3.退出本程式")
    key=input("請輸入序號確認您的操作:")
    if key=='1':
        print("歡迎登入本系統!")
        key2='y'
        while(key2=='y' or key2=='Y'):
            username=input("請輸入您的使用者名稱:")
            password=input("請輸入您的密碼:")
            cpr2=cpr()
            result=cpr2.logincpr(username,password)                                 #校驗登入名和密碼是否存在和配套
            if result==0:
                auserGUI()
            elif result==1:
                puserGUI(username)
            elif result==2:
                print("您輸入的使用者名稱未註冊或輸入的使用者名稱密碼不匹配,系統將返回主頁面,請先註冊後再登入。")
                time.sleep(3)
                mainGUI()
    if key=='2':
        mainGUI()
    if key=='3':
        print("系統將退出!")
        time.sleep(3)
        sys.exit()
 
#主介面模組
def mainGUI():
    cls=os.system('cls')
    key='y'
    while key=='y' or key=='Y':
        print('1.註冊賬戶')
        print('2.登入系統')
        print('3.退出程式')       
        ordnum=input("請選擇您想要進行的操作序號:\n")
        if ordnum=='1':
            regGUI()
        elif ordnum=='2':
            loginGUI()
        elif ordnum=='3':
            sys.exit()
        else:
            key=input("您輸入的序號有誤,是否重新選擇?重新選擇請輸入y,否則輸入任意值。")
       
       
           
#歡迎介面
print("歡迎使用本購物系統!")                                                                                 #歡迎語句
time.sleep(2)                                                                                              #系統在當前頁面靜止2秒
mainGUI()                                                                                                  #跳轉主介面