【python_自动化运维教程作业】【day2】餐饮店自助点餐系统

在网上看到了金角大王(Alex)老师的课,老师讲课很幽默,开始记录每一次学习作业的内容,欢迎大家交流以及代码的使用。

 1. day2作业内容
     程序:购物车程序
     需求:
              1.启动程序后,让用户输入工资,然后打印商品列表
              2.允许用户根据商品编号购买商品
              3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
              4.可随时退出,退出时,打印已购买商品和余额
              5.用户入口:
                   5.1商品信息存储在文件里
                   5.2已购商品,余额的记录(采用文本储存)
              6.商家入口:
                   6.1可添加商品,修改商品价格
 2. day2代码
      登入时需先输入账户名称,管理员账号:PyDragon,用户账号:大龙 。对应了两个不同的操作界面,并每次结束程序和开始程序时都从本地文本文件中读取列表信息,实现数据在本地的存储。
      具体代码如下:

#coding:utf-8
#引入python内置函数os
import os

#购物系统类
class shoppingSystem():
    FoodName = None
    FoodCost = 0
    Function = None
    Cost = 0
    System = True
    UserName = None
    Salary = 0
    Money = 0
    user_and_salaryList = [["大龙",0]]
    productList = []
    buyList = []
    tplt = "{0:>4}\t{1:>4}\t{2:>6}"
    # {1:{3}^8} 1表示位置,{3}表示用第3个参数来填充,^表示居中,8表示占8个位置,chr(12288)中文空格
    tplt_1 = "{0:>4}\t{1:{3}^8}\t{2:>0}"

    #数据文件导入初始化
    def init_file(self):
        self.read_data(self.buyList,'buyList')
        self.read_data_2(self.productList,'productList')

    #用户名登入
    def MainShop(self):
        self.read_money('money')
        self.UserName = input("输入用户名:")
        if self.GM():
            self.GM_display()
            self.GM_function()
        elif self.check_user():
            self.display()
            self.buy()
        else:
            print("用户名不存在,请重新输入")
            self.MainShop()

    #判断是否为管理员用户名
    def GM(self):
        if self.UserName == 'PyDragon':
            return 1

    #主界面显示
    def display(self):
        print(self.tplt.format('购买编号','食物名称','单价(元)',chr(12288)))
        for index,item in enumerate(self.productList):
            print(self.tplt_1.format(index,item[0],item[1],chr(12288)))
        print('当前账户剩余:'+str(self.Money)+'元')
        print('已购清单(F)  退出系统(Q)')

    #管理员主界面显示
    def GM_display(self):
        print('----------------管理员后台界面-----------------')
        print('增加食品(A) 删除食品(D) 修改价格(C) 查询菜单(L)')
        print('退出系统(Q)')
        print('-----------------------------------------------')

    #管理员功能
    def GM_function(self):
        self.Function = input("执行功能按键编号:")
        if self.Function == 'a':
            self.function_a()
        elif self.Function == 'd':
            self.function_d()
        elif self.Function == 'c':
            self.function_c()
        elif self.Function == 'l':
            self.function_l()
        elif self.Function == 'q':
            self.save_data_2(self.productList,'productList')
            exit()
        else:
            print('输入错误,请重新输入执行功能')
            self.GM_function()

    #管理员更改食物价格
    def function_c(self):
        self.FoodName = input("输入要更改的食物名称:")
        self.FoodCost = input("输入"+'\033[1;32;0m'+str(self.FoodName)+'\033[0m'+"新价格")
        if self.FoodCost.isdigit():
            if not self.check_food():
                i = self.find_food_number()
                self.productList[i][1] = self.FoodCost
                print(('\033[1;32;0m'+str(self.FoodName)+'\033[0m')+'修改成功')
                print('继续修改(C)  返回主菜单(R)')
                choose = input()
                if choose == 'c':
                    self.function_c()
                elif choose == 'r':
                    self.GM_display()
                    self.GM_function()
                else:
                    print('输入错误,自动返回主菜单')
                    self.GM_display()
                    self.GM_function()
            else:
                print('食物名重复,请重新核对输入')
                self.function_a()
        else:
            self.GM_display()
            print('\033[1;31;0m价格非法输入,退回至主菜单\033[0m')
            self.GM_function()

    #管理员添加食物功能
    def function_a(self):
        self.FoodName = input("输入食物名称:")
        self.FoodCost = input("输入"+'\033[1;32;0m'+str(self.FoodName)+'\033[0m'+"单价")
        if self.FoodCost.isdigit():
            if self.check_food():
                self.productList.append([self.FoodName,int(self.FoodCost)])
                print(('\033[1;32;0m'+str(self.FoodName)+'\033[0m')+'添加成功')
                print('继续添加(A)  返回主菜单(R)')
                choose = input()
                if choose == 'a':
                    self.function_a()
                elif choose == 'r':
                    self.GM_display()
                    self.GM_function()
                else:
                    print('输入错误,自动返回主菜单')
                    self.GM_display()
                    self.GM_function()
            else:
                print('食物名重复,请重新核对输入')
                self.function_a()
        else:
            self.GM_display()
            print('\033[1;31;0m价格非法输入,退回至主菜单\033[0m')
            self.GM_function()

    #管理员查看食物功能
    def function_l(self):
        self.show_food()
        print('返回主菜单(R)')
        choose = input()
        if choose == 'r':
            self.GM_display()
            self.GM_function()
        else:
            print('输入错误,自动返回主菜单')
            self.GM_display()
            self.GM_function()

    #管理员删除食物功能
    def function_d(self):
        self.FoodName = input('请输入要删除的食物名称:')
        if self.check_food():
            print('食物名称不存在,请检查确认后重新输入')
            self.function_d()
        for i in range(len(self.productList)):
            if self.FoodName == self.productList[i][0]:
                self.productList.remove(self.productList[i])
                print("删除"+'\033[1;31;0m'+str(self.FoodName)+'\033[0m'+"成功")
                break
        print('继续删除(D)   返回主菜单(R)')
        choose = input()
        if choose == 'd':
            self.function_d()
        elif choose == 'r':
            self.GM_display()
            self.GM_function()
        else:
            print('输入错误,自动返回主菜单')
            self.GM_display()
            self.GM_function()

    #展示食物清单
    def show_food(self):
        print('------------食物清单-------------')
        print(self.tplt.format('购买编号','食物名称','单价(元)',chr(12288)))
        for index,item in enumerate(self.productList):
            print(self.tplt_1.format(index,item[0],item[1],chr(12288)))
        print('---------------------------------')

    #检查食物是否重名
    def check_food(self):
        for i in range(len(self.productList)):
                if self.FoodName == self.productList[i][0]:
                    return 0
        else:
            return 1

    #c查询食物编号
    def find_food_number(self):
        for i in range(len(self.productList)):
                if self.FoodName == self.productList[i][0]:
                    return i
        else:
            return -1

    #用户名核对
    def check_user(self):
        for i in range(len(self.user_and_salaryList)):
            if self.UserName == self.user_and_salaryList[i][0]:
                self.Salary = input("认证成功,输入存储金额:")
                try:
                    self.user_and_salaryList[i][1] += int(self.Salary)
                    self.Money += self.user_and_salaryList[i][1]
                except Exception as e:
                    print("请输入纯数字金额,异常:",e)
                    self.check_user()
                return 1

    #购买功能
    def buy(self):
        while self.System:
                choose = input("输入你所要购买的食物编号:")
                if choose == 'q':
                    self.save_data_1(self.buyList,'buyList')
                    self.save_data_2(self.productList,'productList')
                    self.save_money('money')
                    print('-----------------------')
                    print('欢迎使用本系统,下次再见')
                    print('-----------------------')
                    exit()
                elif choose == 'f':
                    print('------------购买清单--------------')
                    for i in self.buyList:
                        print(i)
                    print('账户当前余额:',self.Money)
                    print('----------------------------------')
                    self.return_way()
                elif choose.isdigit():
                    choose = int(choose)
                    if 0 <= choose < len(self.productList):
                        if self.Money >= self.productList[choose][1]:
                            self.Money -= self.productList[choose][1]
                            self.Cost += self.productList[choose][1]
                            self.buyList.append(self.productList[choose][0])
                            self.display()
                            print("-------------------------------------")
                            print('购买成功,请继续输入编号购买或按Q键退出')
                            print("-------------------------------------")
                        else:
                            self.display()
                            print("-------------------")
                            print("余额不足,请重新选择")
                            print("-------------------")
                        self.buy()
                    else:
                        print("-----------------")
                        print("请输入有效食物编号")
                        print("-----------------")
                else:
                    print('输入错误')
                    self.buy()

    #返回上级菜单
    def return_way(self):
        R = input('按R键返回上一级菜单')
        if R == 'r':
            self.display()
        else:
            self.return_way()

    #存储一维清单列表至本地文件
    def save_data_1(self,self_list,list_name):
        file_handle = open(list_name+'.txt','w',encoding="utf-8")
        for item in self_list:
            file_handle.write(item)
            file_handle.write('\n')
        file_handle.close()

    #存储二维清单列表至本地文件
    def save_data_2(self,self_list,list_name):
        file_handle = open(list_name+'.txt','w',encoding="utf-8")
        #删除原文件数据再写入
        file_handle.truncate()
        for item in self_list:
            file_handle.write(str(item[0]))
            file_handle.write(' ')
            file_handle.write(str(item[1]))
            file_handle.write('\n')
        file_handle.close()

    #读取二维清单列表内容
    def read_data_2(self,self_list,list_name):
        rs = os.path.exists(list_name+'.txt')
        if rs == True:
            file_handle = open(list_name+'.txt',mode='r',encoding="utf-8")
            contents = file_handle.readlines()
            for msg in contents:
                #去除\n
                msg = msg.strip('\n')
                #使用 空格分割存储成一维数组food
                food = msg.split(' ')
                food[1] = int(food[1])
                self_list.append(food)
            file_handle.close()

    #读取一维清单列表内容
    def read_data(self,self_list,list_name):
        rs = os.path.exists(list_name+'.txt')
        if rs == True:
            # 1,打开文件
            file_handle = open(list_name+'.txt',mode='r',encoding="utf-8")
            #2.读取所有行
            contents = file_handle.readlines()
            #3.取出每一个元素
            for msg in contents:
                msg = msg.strip('\n')
                self_list.append(msg)
            file_handle.close()

    #存储Money至本地文件
    def save_money(self,list_name):
        file_handle = open(list_name+'.txt','w',encoding="utf-8")
        file_handle.truncate()
        file_handle.write(str(self.Money))
        file_handle.close()

    #读取Money
    def read_money(self,list_name):
        rs = os.path.exists(list_name+'.txt')
        if rs == True:
            file_handle = open(list_name+'.txt',mode='r',encoding="utf-8")
            try:
                self.Money = int(file_handle.readline())
            except Exception as e:
                print("请检查文件中的数据是否正确,异常:"+ str(e) )
            finally:
                file_handle.close()
                
#window系统执行入口
if __name__ == '__main__':
    shoppingSystem().init_file()
    shoppingSystem().MainShop()

3. 总结
   3.1 如果要对数据进行添删改查时注意不要使用元组,元组不能进行更改,这里要使用列表
   3.2 元组通常用于创建不可更改的数据,并告诉使用者这个数据不能更改
   3.3 通过引号隔开对可变参数进行字体颜色的修改 '\033[1;31;0m'+str(self.FoodName)+'\033[0m'
   3.4 在进行判断时用 == ,在进行赋值时用 = 


"IE编程改善分析:敲代码是最快提升你编程能力的手段" ——————————by.PyDragon

你可能感兴趣的:(【python_自动化运维教程作业】【day2】餐饮店自助点餐系统)