python學生選課系統


校園管理系統(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()
bin下的start.py
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'
conf下的settings.py
#登錄
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}
core下的auth.py
#登錄
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('----------------')
core下的cores.py

db下的文件

courseinfo  ##課程名字數據文件
gradeinfo   ##班級號數據文件
select_course  ##選課數據文件
student_grade  ##學生所在班級數據文件
tearch_grade    ##老師所在班級數據文件
userinfo            ##存放用戶密碼和身份的數據文件  admin|4297f44b13955235245b2497399d7a93|Manager

log暫時沒放

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM