学生选课系统数据存文件
#ADM.py #-*-coding:utf-8 -*- __author__ = 'MrChu' import hashlib 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):#管理员登录方法 with open('administrators.txt',mode='r',encoding='utf-8')as f:#读取管理员信息文件 for line in f: if line=='':#去空行 continue self.adm_list.append(line.strip().split('|')[0])#把管理员账号放到管理员类的管理员账号列表 if name+'|'+GetMd5.get_md5(pwd) ==line.strip():#拼接传入的name和加盐的pwd,与文件数据作对比 print('登录成功') self.main_run()#运行管理员主程序方法 break else: print('登录失败,请重新输入') def main_run(self):#管理员主程序方法 with open('student.txt',mode='r',encoding='utf-8')as f:#读学生的文件 for line in f: if line=='':#去空行 continue self.stu_list.append(line.strip().split('|')[0])#把学生账号添加到管理员类的学生账号列表 with open('course.txt',mode='r',encoding='utf-8')as f:#读取课程文件 for line in f: if line=='':#去空行 continue Course.all_course_list.append(line.strip())#把所有的课程放到课程类的课程列表中 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):#创建新课程 while 1: course=input('请输入新建课程(按Q退出):') if course.upper() == 'Q': break if course in Course.all_course_list:#如果输入课程在课程类全部课程列表中 print('已有此课程') else: Course.add_new_course(course)#把课程添加到课程类全部课程列表中 with open('course.txt',mode='a',encoding='utf-8')as f:#在课程文件中追加写入新课程 f.write(course+'\n') print('创建课程成功') def new_student(self):#创建新的学生对象 while 1: name=input('请输入创建账号(按Q退出):') if name.upper()=='Q': break psd=input('请输入创建密码:') for el in self.stu_list:#遍历管理员类的学生账号列表 if name==el:#如果有此账号 print('已有此账号') else: self.stu_list.append(name)#把学生账号添加入管理员类的学生账号列表 with open('student.txt',mode='a',encoding='utf-8')as f:#追加写入学生信息文件 f.write(name+'|'+GetMd5.get_md5(psd)+'\n') print('创建学生账号成功') 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) def show_all_stu_course(self):#显示所有学生的选课信息方法 with open('student_chioce_course.txt', mode='r', encoding='utf-8')as f: for line in f: print(line.strip()) def zhuce(self,name,psd):#注册管理员方法 with open('administrators.txt',mode='r',encoding='utf-8')as f:#读取管理员信息文件 for line in f: if line=='': continue self.adm_list.append(line.strip().split('|')[0])#把管理员账号放到管理员类的管理员账号列表 if name in self.adm_list:#判断账号是否存在 print('已经存在此管理员') else: with open('administrators.txt', mode='a', encoding='utf-8')as f:#把新创建的管理员账号秘密追加写入管理员信息文件 f.write(name + '|' + GetMd5.get_md5(psd) + '\n')#账号拼接加盐密码写入 print('创建管理员账号成功')
#STU.py #-*-coding:utf-8 -*- __author__ = 'MrChu' import hashlib 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.choiced_course_name_lst=[]#已经选课姓名列表 self.name=name #学生账号 self.pwd=GetMd5.get_md5(pwd) #学生密码 self.course_list=[]#学生已选课程列表 self.gongNeng_list=['show_all_course','choice_course','show_chioce_course','del_course']#功能列表 self.dic={}#存放每个学生已经选课的情况 def __str__(self):#打印学生对象的方法 return '学生账号对象' def login(self,name,pwd):#学生登录方法 with open('student_chioce_course.txt',mode='r',encoding='utf-8')as f:#读取学生已经选取的课程文件 for line in f: if line=='': continue self.choiced_course_name_lst.append(line.strip().split('|')[0])#截取已经选课学生姓名放入学生类已经选课姓名列表 with open('student.txt', mode='r', encoding='utf-8')as f:#读学生文件 for line in f: if name+'|'+GetMd5.get_md5(pwd) == line.strip():#拼接传入的name和pwd与文件中的数据对比 if self.name in self.choiced_course_name_lst: print('此学生已经提交了选课方案,不能再次登陆') break else: print('登录成功') self.main_run()#运行主程序方法 break else: print('登录失败,请重新输入') def main_run(self):#主程序方法 with open('course.txt',mode='r',encoding='utf-8')as f:#读全部的课程文件 for line in f: if line=='':#去除空行 continue Course.all_course_list.append(line.strip())#把所有的课程放到课程类的课程列表中 print('欢迎进入学生选课系统') while 1: print('1.查看所有课程') print('2.选择课程') print('3.查看所选课程') print('4.删除已选课程') num=input('请选择要操作的序号(按Q退出)>>>') if num.upper()=='Q': response=self.tiJiao() if response==1: 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:#所选课程在课程类的全部课程列表中,可以选课 self.course_list.append(course)#把课程放到学生对象的已选课程列表 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) print('删除成功') else: print('没有此课程') def tiJiao(self):#提交按钮方法 content=input('您是否确认提交选课,确认后不可修改,输入 Y 或者 N ?') if content.upper()=='Y': course_str = '' # 设置一个空字符串 for el in self.course_list: # 遍历学生对象的已选课程列表 course_str += el + '|' # 动态拼接已选的所有课程 course_str = course_str.rstrip('|') # 去除右边的'|' with open('student_chioce_course.txt', mode='a', encoding='utf-8')as f: # 打开学生已选课程文件 f.write(self.name + '|' + course_str + '\n') # 拼接学生姓名写入学生的选课信息 return 1 elif content.upper()=='N': return 0 else: print('输入有误') return -1
#main.py #-*-coding:utf-8 -*- __author__ = 'MrChu' import STU import ADM 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()