校園管理系統(02) 需求: 從“學生選課系統” 這幾個字就可以看出來,我們最核心的功能其實只有 選課。 角色: 學生、管理員 功能: 登陸 : 管理員和學生都可以登陸,且登陸之后可以自動區分身份 選課 : 學生可以自由的為自己選擇課程 創建用戶 : 選課系統是面向本校學生的,因此所有的用戶都應該由管理員完 成 查看選課情況 :每個學生可以查看自己的選課情況,而管理員應該可以查看 所有學生的信息 工作流程: 登陸 :用戶輸入用戶名和密碼 判斷身份 :在登陸成果的時候應該可以直接判斷出用戶的身份 是學生、講師 還是管理員 學生用戶 :對於學生用戶來說,登陸的工作幾乎不變 1、查看所有課程 2、選擇課程 3、查看所選課程 4、退出程序 管理員用戶:管理員用戶也可以做更多的事情 1、創建課程 2、創建學生學生賬號 3、查看所有課程 4、查看所有學生 5、查看所有學生的選課情況 # 講師進階需求 6、創建講師 7、為講師指定班級 8、創建班級 9、為學生指定班級 10、退出程序 講師用戶 :對於講師用戶來說,可以完成的功能如下 1、查看所有課程 2、查看所教班級 3、查看班級中的學生 4、退出程序
學生選課流程
readme文件信息

import os import sys base_path = os.path.dirname(os.path.dirname(__file__)) sys.path.append(base_path) from core import cores if __name__ == '__main__': cores.start()

userinfo = r'D:\python_23\day07\db\userinfo' courseinfo = r'D:\python_23\day07\db\courseinfo' select_course = r'D:\python_23\day07\db\select_course' gradeinfo = r'D:\python_23\day07\db\gradeinfo' tearch_grade = r'D:\python_23\day07\db\tearch_grade' student_grade = r'D:\python_23\day07\db\student_grade'

#登錄 import hashlib def md5(arg): # 這是加密函數,將傳進來的函數加密 md5_pwd = hashlib.md5(bytes('123', encoding='utf-8')) md5_pwd.update(bytes(arg, encoding='utf-8')) return md5_pwd.hexdigest() # 返回加密的數據 from conf import settings def login(): usr = input('please user:') pwd = input('please password: ') with open(settings.userinfo,'r') as f: for line in f: user,passwd,identify = line.strip().split('|') if user == usr and passwd == md5(pwd): print('登錄成功') return {'user':user,'identify':identify} else: print('登錄失敗,輸入正確的賬號密碼') return {'user': user, 'identify': None}

#登錄 import sys import os from core import auth from conf import settings import pickle import hashlib def md5(arg): # 這是加密函數,將傳進來的函數加密 md5_pwd = hashlib.md5(bytes('123', encoding='utf-8')) md5_pwd.update(bytes(arg, encoding='utf-8')) return md5_pwd.hexdigest() # 返回加密的數據 class Die: def show_select_courese(self): with open(settings.courseinfo,'rb') as f: while True: try: obj = pickle.load(f) print('課程名字:%s,課程價格:%s,課程周期:%s,教導老師:%s' % (obj.name, obj.price, obj.period, obj.tearch)) except EOFError: break class Course: def __init__(self,name,price,period,tearch): self.name = name self.price = price self.period = period self.tearch = tearch class Student: operat_list = [('查看可選課程','show_courese'),('選擇課程','choose_course'),('查看已選課程','show_select_courese'),('退出','exit')] courses_list1 = [] def __init__(self,name): self.name = name def show_courese(self): Die.show_select_courese(self.name) def choose_course(self): Die.show_select_courese(self.name) with open(settings.select_course, 'ab') as f1: cours = input('請選擇要學習課程名字:') if cours in Student.courses_list1: print('課程已存在') else: Student.courses_list1.append(cours) pickle.dump({self.name: Student.courses_list1}, f1) print('用戶%s,添加課程%s成功' % (self.name, cours)) # pickle.dump({ret['user']:Student.courses_list1},f1) # print('用戶%s,添加課程%s成功'%(ret['user'],cours)) def show_select_courese(self): with open(settings.select_course, 'rb') as f1: while True: try: obj = pickle.load(f1) print(obj) except EOFError: break def exit(self): exit('歡迎再來') class Manager(Die): operat_list = [('創建課程', 'create_course'), ('創建學生', 'create_student'), ('查看可選課程', 'show_select_course'), ('查看所有學生', 'show_select_student'), ('查看所有學生和已選課程', 'show_stu_course'), ('創建講師', 'create_tearch'), ('為講師指定班級', 'tearch_grade'), ('創建班級', 'create_grade'), ('為學生指定班級', 'select_stu_grade'), ('退出', 'exit')] def __init__(self,name): self.name = name def create_course(self): name = input('請輸入課程:') price = input('價格:') period = input('周期:') tearch = input('tearch:') course = Course(name,price,period,tearch) with open(settings.courseinfo,'ab') as f: pickle.dump(course,f) print('課程創建成功') def create_student(self): user = input('請輸入創建的學生名字: ') pwd = input('請輸入密碼: ') ret = input('輸入學生的類別,例如Student:') if ret == 'Student': course = '\n%s|%s|%s'%(user,md5(pwd),ret) with open(settings.userinfo,'a') as f: f.write('%s'%course) print('%s創建成功'%user) else: print('您輸入的不是Student') def show_select_course(self): Die.show_select_courese(self.name) def show_select_student(self): with open(settings.userinfo,'r') as f: for i in f: name,pwd,identify = i.strip().split('|') if identify == 'Manager' or identify == 'Tearch': pass else: print(name) def show_stu_course(self): with open(settings.select_course, 'rb') as f1: while True: try: obj = pickle.load(f1) for x,y in obj.items(): print('用戶%s一共學習了%s課程'%(x,y)) # print(obj) except EOFError: break def create_tearch(self): user = input('請輸入創建的講師名字: ') pwd = input('請輸入密碼: ') ret = input('輸入講師的類別,例如Tearch:') if ret == 'Tearch': course = '\n%s|%s|%s'%(user,md5(pwd),ret) with open(settings.userinfo,'a') as f: f.write('%s'%course) print('%s老師創建成功'%user) else: print('您輸入的不是Student') def tearch_grade(self): grade_list = [] with open(settings.userinfo,'r') as f: for line in f: name,pwd,identify = line.strip().split('|') with open(settings.gradeinfo,'rb') as f1: obj = pickle.load(f1) grade_list.append(obj) if identify == 'Tearch': print('可以為%s老師分配班級有\n(%s)班'%(name,obj)) print('-------------') grade = int(input('請輸入班級號')) with open(settings.tearch_grade,'ab') as f2: pickle.dump({name:grade_list},f2) print('%s老師已經為%s班的講師'%(name,grade)) def create_grade(self): grade = input('請輸入您要創建的班級號') with open(settings.gradeinfo,'ab') as f: pickle.dump(grade,f) print('%s號班級已經創建成功'%grade) def select_stu_grade(self): stu_grade = [] with open(settings.userinfo,'r') as f: with open(settings.gradeinfo, 'rb') as f1: obj = pickle.load(f1) for line in f: name, pwd, identify = line.strip().split('|') if identify == 'Manager' or identify == 'Tearch': pass else: print('請為下面(%s)學生選擇班級,\n可選班級有(%s)號班級\n'%(name,obj)) ret = input('請輸入要選擇的班級號') # stu_grade.append('ret') with open(settings.student_grade,'ab') as f3: pickle.dump({name:ret},f3) print('學生%s已經加入到%s班級'%(name,ret)) def exit(self): exit('歡迎下次再來') class Tearch(Die): operat_list = [('查看所有課程', 'select_course'), ('查看所教班級', 'select_grade'), ('查看班級中學生', 'select_grade_stu'), ('退出', 'exit')] def __init__(self,name): self.name = name def select_course(self): Die.show_select_courese(self.name) def select_grade(self): with open(settings.tearch_grade,'rb') as f: obj = pickle.load(f) for x,y in obj.items(): print('%s老師交的班級有%s'%(x,y)) def select_grade_stu(self): with open(settings.student_grade,'rb') as f: obj = pickle.load(f) for x,y in obj.items(): print('%s號班級里一共有%s位學生'%(y,x)) def start(): ret = auth.login() if ret['identify']: cls = getattr(sys.modules[__name__],ret['identify']) obj = cls(ret['user']) while True: for index,i in enumerate(cls.operat_list,1): print(index,i[0]) ind = int(input('please num')) print('----------------') func = cls.operat_list[ind-1][1] getattr(obj,func)() print('----------------')
db下的文件
courseinfo ##課程名字數據文件 gradeinfo ##班級號數據文件 select_course ##選課數據文件 student_grade ##學生所在班級數據文件 tearch_grade ##老師所在班級數據文件 userinfo ##存放用戶密碼和身份的數據文件 admin|4297f44b13955235245b2497399d7a93|Manager
log暫時沒放