zoukankan      html  css  js  c++  java
  • 学生选课系统数据存储用shelve

    工程目录:

    #bin/run.py
    from core.main import Run
    Run.login()
    
    #core/ADM.py
    #-*-coding:utf-8 -*-
    __author__ = 'MrChu'
    import hashlib
    import shelve
    #shelve={'Student':[{'name':'xxx','passWord':'xxx','course':[]},{...},{...}],
                  #         'Administrators':[{'name':'xxx',passWord':'xxx'},{...},{...}],
                  #         'Course':['xxx','xxx','xxx']
    class GetMd5:#MD5加密
        @classmethod
        def get_md5(self,msg):
            md5=hashlib.md5(b'salt!@#$%^&*')#加盐
            md5.update(msg.encode('utf-8'))
            return md5.hexdigest()
    class Course:#课程类
        all_course_list=[]#所有课程列表
        @classmethod
        def add_new_course(cls,course):
            Course.all_course_list.append(course)
    class Administrators:#管理员类
        def __init__(self,name,pwd):#管理员初始化方法
            self.adm_list=[]#管理员账号列表
            self.stu_list=[]#学生账号列表
            self.name=name#账号
            self.pwd=pwd#密码
            self.gongNeng_list =['new_Course','new_student','show_all_course','show_all_student','show_all_stu_course']#功能列表
        def login(self,name,pwd):#管理员登录方法
            #读取管理员信息文件
            f = shelve.open(r'../db/data', writeback=True)
            self.adm_list = f['Administrators']
            self.stu_list = f['Student']
            Course.all_course_list = f['Course']
            # print(self.stu_list)
            f.close()
            dic={}
            dic['name'] = name
            dic['passWord']=GetMd5.get_md5(pwd)
            if dic in self.adm_list:#拼接传入的name和加盐的pwd,与文件数据作对比
                print('登录成功')
                self.main_run()#运行管理员主程序方法
            else:
                print('登录失败,请重新输入')
        def main_run(self):#管理员主程序方法
            print('欢迎进入管理员课程维护系统')
            while 1:
                print('1.创建课程')
                print('2.创建学生账号')
                print('3.查看所有课程')
                print('4.查看所有学生')
                print('5.查看所有学生的选课情况')
                num=input('请选择要操作的序号(按Q退出维护系统)>>>')
                if num.upper()=='Q':
                    break
                func=getattr(self,self.gongNeng_list[int(num)-1])#反射通过输入的值运行相应的方法
                func()
        def new_Course(self):#创建新课程
            f = shelve.open(r'../db/data', writeback=True)  # 读学生的文件
            while 1:
                course=input('请输入新建课程(按Q退出):')
                if course.upper() == 'Q':
                    break
                if course in Course.all_course_list:#如果输入课程在课程类全部课程列表中
                    print('已有此课程')
                else:
                    Course.add_new_course(course)#把课程添加到课程类全部课程列表中
                    f['Course']=Course.all_course_list
                    print('创建课程成功')
            f.close()
        def new_student(self):#创建新的学生对象
            f = shelve.open(r'../db/data', writeback=True)  # 读学生的文件
            while 1:
                name=input('请输入创建账号(按Q退出):')
                if name.upper()=='Q':
                    break
                psd=input('请输入创建密码:')
                for el in self.stu_list:#遍历管理员类的学生账号列表
                        if name==el['name']:#如果有此账号
                            print('已有此账号')
                            break
                else:
                    dic={}
                    dic['name']=name
                    dic['passWord']=GetMd5.get_md5(psd)
                    dic['course']=[]
                    self.stu_list.append(dic)#把学生账号添加入管理员类的学生账号列表
                    f['Student']=self.stu_list#追加写入学生信息文件
                    print('创建学生账号成功')
            f.close()
        def show_all_course(self):#显示所有课程方法
            print('现有课程有:')
            for el in Course.all_course_list:
                print(el)
        def show_all_student(self):#显示所有学生方法
            print('所有的学生有:')
            for el in self.stu_list:
                    print(el['name'])
        def show_all_stu_course(self):#显示所有学生的选课信息方法
            print('所有学生选课情况如下:')
            for el in self.stu_list:
                try:
                    print(el['name'],el['course'])
                except KeyError as e:
                    pass
        def zhuce(self,name,psd):#注册管理员方法
            #读取管理员信息文件
            f=shelve.open(r'../db/data',writeback=True)
            self.adm_list=f['Administrators']#把管理员账号放到管理员类的管理员账号列表
            for el in self.adm_list:
                    if name==el['name']:#判断账号是否存在
                        print('已经存在此管理员')
                        break
            else:
                #把新创建的管理员账号秘密追加写入管理员信息文件
                dic = {}
                dic['name'] =name
                dic['passWord']=GetMd5.get_md5(psd)
                self.adm_list.append(dic)
                f['Administrators']=self.adm_list
                print('创建管理员账号成功')
            f.close()
    
    #core/main.py
    #-*-coding:utf-8 -*-
    __author__ = 'MrChu'
    import shelve
    from .import STU
    from .import ADM
    #shelve={'Student':[{'name':'xxx','passWord':'xxx','course':[]},{...},{...}],
                  #         'Administrators':[{'name':'xxx',passWord':'xxx'},{...},{...}],
                  #         'Course':['xxx','xxx','xxx']  }
    class Run:
        @classmethod
        def login(self):
            while 1:
                print('1.管理员登录')
                print('2.学生登录')
                print('3.注册管理员账号')
                num = input("请选择登录方式(按'Q'退出程序)>>>")
                if num.upper() == 'Q':
                    break
                if int(num) == 1:
                    while 1:
                        name = input('请输入登录账号(按Q返回主登录页面):')
                        if name.upper() == 'Q':
                            break
                        pwd = input('请输入密码:')
                        ad=ADM.Administrators(name,pwd)
                        func=getattr(ad,'login')
                        func(name,pwd)
                elif int(num)==2:
                    while 1:
                        name = input('请输入登录账号(按Q返回主登录页面):')
                        if name.upper() == 'Q':
                            break
                        pwd = input('请输入密码:')
                        stu=STU.Student(name,pwd)
                        func=getattr(stu,'login')
                        func(name,pwd)
                elif int(num) == 3:
                    while 1:
                        name = input('请输入注册账号(按Q返回主登录页面):')
                        if name.upper() == 'Q':
                            break
                        pwd = input('请输入密码')
                        ad = ADM.Administrators(name, pwd)
                        func = getattr(ad, 'zhuce')
                        func(name, pwd)
    
    if __name__=="__main__":
        Run.login()
    
    #core/STU.py
    #-*-coding:utf-8 -*-
    __author__ = 'MrChu'
    import hashlib
    import shelve  #shelve={'Student':[{'name':'xxx','passWord':'xxx','course':[]},{...},{...}],
                  #         'Administrators':[{'name':'xxx',passWord':'xxx'},{...},{...}],
                  #         'Course':['xxx','xxx','xxx']                                        }
    class GetMd5:#MD5加密
        @classmethod
        def get_md5(self,msg):
            md5=hashlib.md5(b'salt!@#$%^&*')#加盐
            md5.update(msg.encode('utf-8'))
            return md5.hexdigest()
    class Course:#课程类
        all_course_list=[]#所有课程列表
        @classmethod
        def add_new_course(cls,course):
            Course.all_course_list.append(course)
    class Student:#学生类
        def __init__(self,name,pwd):#学生初始化方法
            self.name=name #学生账号
            self.pwd=GetMd5.get_md5(pwd) #学生密码
            self.course_list=[]#学生已选课程列表
            self.student=[]#学生字典组成的列表[{'name':'xxx','passWord':'xxx','course':[]},{...},{...}]
            self.gongNeng_list=['show_all_course','choice_course','show_chioce_course','del_course']#功能列表
        def __str__(self):#打印学生对象的方法
            return '学生账号对象'
        def login(self,name,pwd):#学生登录方法
            f = shelve.open(r'../db/data', writeback=True)  #读学生的文件
            self.student=f['Student']
            Course.all_course_list = f['Course']
            for el in self.student:
                if name==el['name']and GetMd5.get_md5(pwd)==el['passWord']:
                    for i in range(len(self.student)):
                        if self.student[i]['name'] == self.name:
                            self.course_list = f['Student'][i]['course']
                            f.close()
                    print('登录成功')
                    self.main_run()#运行主程序方法
                    break
            else:
                print('登录失败,请重新输入')
        def main_run(self):#主程序方法
            print('欢迎进入学生选课系统')
            while 1:
                print('1.查看所有课程')
                print('2.选择课程')
                print('3.查看所选课程')
                print('4.删除已选课程')
                num=input('请选择要操作的序号(按Q退出)>>>')
                if num.upper()=='Q':
                    break
                func=getattr(self,self.gongNeng_list[int(num)-1])#反射通过输入的值运行相应的方法
                func()
        def show_all_course(self):#显示所有课程的方法
            print('现有课程有:')
            for el in Course.all_course_list:#遍历课程类的全部课程列表
                print(el)
        def choice_course(self):#选课的方法
            while 1:
                    course = input('请输入要选择的课程(按Q退出):')
                    if course.upper() == 'Q':
                        break
                    if course in Course.all_course_list:#所选课程在课程类的全部课程列表中,可以选课
                        if course in self.course_list:
                            print('已选了此门课程,不能重复选择')
                        else:
                            self.course_list.append(course)#把课程放到学生对象的已选课程列表
                            lst=[]
                            for el in self.student:
                                if el['name']==self.name:
                                    dic={}
                                    dic['name']=self.name
                                    dic['passWord']=self.pwd
                                    dic['course']=self.course_list
                                    lst.append(dic)
                                else:
                                    lst.append(el)
                            f = shelve.open(r'../db/data', writeback=True)#读学生的信息
                            # print(lst)
                            f['Student']=lst
                            f.close()
                            print('选课成功')
                    else:
                        print('没有此课程')
    
        def show_chioce_course(self):#显示所选课程列表
            print('您所选的课程有:')
            for el in self.course_list:#遍历学生对象的已选课程列表
                print(el)
        def del_course(self):#删除学生已选课程列表的内容
            while 1:
                course = input('请输入要删除的课程(按Q退出):')
                if course.upper()=='Q':
                    break
                if course in self.course_list:
                    self.course_list.remove(course)
                    lst = []
                    for el in self.student:
                        if el['name'] == self.name:
                            dic = {}
                            dic['name'] = self.name
                            dic['passWord'] = self.pwd
                            dic['course'] = self.course_list
                            lst.append(dic)
                        else:
                            lst.append(el)
                    f = shelve.open(r'../db/data', writeback=True)  # 读学生的信息
                    # print(lst)
                    f['Student'] = lst
                    f.close()
                    print('删除成功')
                    break
                else:
                    print('没有此课程')
    
  • 相关阅读:
    Luogu-P2295 MICE
    Luogu-P2627 修剪草坪
    Loj-10176-最大连续和
    Luogu-P1886 滑动窗口
    Luogu-P3807 【模板】卢卡斯定理
    Luogu-P1879 [USACO06NOV]玉米田Corn Fields
    Luogu-P1896 [SCOI2005]互不侵犯
    Loj-SGU 223-国王
    Luogu-P2657 [SCOI2009]windy数
    素数
  • 原文地址:https://www.cnblogs.com/PythonMrChu/p/9784244.html
Copyright © 2011-2022 走看看