python第四次周末大作业

'''
选课系统开发 系统登录需要有两类用户:学生、管理员,针对不用用户提供不同功能:
学生用户 :对于学生用户来说,登陆之后有三个功能
1、查看所有课程
2、选择课程
3、查看所选课程
4、删除已选课程
管理员用户:管理员用户除了可以做一些查看功能之外,还有很多创建工作。
1、创建课程
2、创建学生学生账号
3、查看所有课程
4、查看所有学生
5、查看所有学生的选课情况
'''
import os



class Student:
    def __init__(self, login_name, login_pwd, sname, cour_lst=None):
        self.login_name = login_name
        self.login_pwd = login_pwd
        self.sname = sname
        self.cour_lst = [] if cour_lst==None else cour_lst

    @staticmethod
    def display_all_student():
        f = open("stu", mode="r", encoding="utf-8")
        i = 1
        for line in f:
            d = eval(line.strip())
            print(i, d['sname'], d['login_name'])
            i += 1
        f.close()



    def xuanke(self): # self是当前登录的学生
        while 1:
            # 显示所有课程
            Course.display_all_course()
            num = int(input("请输入你要选择的课程:")) # 3
            f = open("cour", mode="r", encoding="utf-8")
            for i in range(num):
                line = f.readline()

            if line.strip() in self.cour_lst: # 选过这个课
                print("你已经选过当前这门课了")

            else: # 没选过这个课
                self.cour_lst.append(line.strip())
                self.write_to_file() # 把学生信息同步到文件中
                print("选课成功")

            f.close()

            y = input("是否继续选课(Y/N)")
            if y.upper() != "Y":
                return

    def shanchu(self):

        for i in range(len(self.cour_lst)):
            print(i+1, self.cour_lst[i])
        num = int(input("请输入你要删除的课程"))
        self.cour_lst.pop(num-1)
        self.write_to_file()
        print("删除成功!!!")


    def write_to_file(self):
        with open("stu", mode="r", encoding="utf-8") as f1, \
            open("stu_副本", mode="w", encoding="utf-8") as f2:

            for line in f1:
                d = eval(line.strip())
                if d['login_name'] == self.login_name and d['login_pwd'] == self.login_pwd:
                    f2.write(str(self.__dict__) + "\n")
                else:
                    f2.write(line)
        os.remove("stu")
        os.rename("stu_副本", "stu")

class Course:
    def __init__(self, cname):
        self.cname = cname

    @staticmethod #
    def display_all_course():
        f = open("cour", mode="r", encoding="utf-8")
        i = 1
        for line in f:
            print(i, line.strip())
            i += 1
        f.close()

# 让整个程序跑起来
class Client:
    def __init__(self):
        self.stu = None # 记录登录的学生状态

    def admin_client(self): # 管理员

        while 1:
            menu = ("创建学生", "创建课程", "查看所有课程", "查看所有学生", "查看所有学生的选课情况", "退出")
            for i in range(len(menu)):
                print(i+1, menu[i])

            num = input("请输入你要执行的菜单:")
            if num == "1":
                sname = input("请输入学生的姓名:")
                login_name = input("请输入学生的登录名:")
                login_pwd = input("请输入学生的登录密码:")
                stu = Student(login_name, login_pwd, sname)
                # 把学生对象中的内容写入到文件中
                f = open("stu", mode="a", encoding="utf-8")
                f.write(str(stu.__dict__)+"\n")
                f.flush()
                f.close()


            elif num == "2":
                cname = input("请输入你的课程名称:")
                f = open("cour", mode="a", encoding="utf-8")
                f.write(cname+"\n")
                f.flush()
                f.close()

            elif num == "3":
                Course.display_all_course()  # 查看所有课程
            elif num == "4":
                Student.display_all_student() # 查看所有学生

            elif num == "5":
                f = open("stu", mode="r", encoding="utf-8")
                for line in f:
                    d = eval(line.strip())
                    print(d['sname'], d["cour_lst"])
                f.close()

            elif num == "6":
                print("=========管理员退出==============")
                return # exit()
            else:
                print("输入有误. 请重新选择菜单")

    def stu_client(self):

        while self.stu == None: # 用学生的登录状态来判断程序的走向

            uname = input("请输入学生用户名:")
            upwd = input("请输入学生的密码:")
            f = open("stu", mode="r", encoding="utf-8")
            for line in f:
                # {'login_name': 'baby', 'login_pwd': '123456', 'sname': '宝宝', 'cour_lst': []}
                d = eval(line.strip())
                if d['login_name'] == uname and d['login_pwd'] == upwd:
                    print("登录成功!")
                    # 灵魂
                    self.stu = Student(d['login_name'], d['login_pwd'], d['sname'], d['cour_lst'])
                    break
            else:
                print("登录失败")
            f.close()

        while 1:
            menu = ("查看所有课程", "选课", "查看已选的课程", "删除已选课程", "退出")
            for i in range(len(menu)):
                print(i+1, menu[i])

            num = input("请输入你要执行的菜单:")
            if num == "1":
                Course.display_all_course()
            elif num == "2":
                self.stu.xuanke() # 实例方法
            elif num == "3":
                for c in self.stu.cour_lst:
                    print(c)
            elif num == "4":
                self.stu.shanchu()
            elif num =='5':
                print("退出!!!!!")
                ###################################
                self.stu = None # 课上忘了写
                ###################################
                return

    def run(self):
        while 1:
            print("=========欢迎进入学生选课系统=============")
            print("=========1. 管理员=======================")
            print("=========2. 学生=========================")
            num = input("请问, 你是管理员(1)还是学生(2):")
            if num == "1":
                self.admin_client()
            elif num == "2":
                self.stu_client()
            else:
                print("您输入的内容有误. 请重新输入")

c = Client()
c.run()

 

posted @ 2018-12-26 21:53  崽崽1573  阅读(304)  评论(0编辑  收藏  举报