学生选课系统数据存储用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('没有此课程')