选课系统(面向对象)(详解)(python) 您所在的位置:网站首页 学生选课系统运行界面 选课系统(面向对象)(详解)(python)

选课系统(面向对象)(详解)(python)

2023-08-15 01:26| 来源: 网络整理| 查看: 265

想要完整代码来这里哦 选课系统(面向对象)(演示视频与完整代码)

选课系统的制作 前言需求一、需求分析(一)角色1.用户(管理员、老师、学生)2.对象(学区、课程)3.关系(1)学生——学区、课程、分数(2)老师——课程(3)学区——课程 (二)数据结构1.类的私有属性和方法2.类与类的关联3.持久化存储(1)ID与密码(Json)(2)对象(pkl) (三)交互界面1.注册与登录2.流程 二、代码实现(一)定义类及基本属性1.用户(管理员、老师、学生)2.对象(学区、课程) (二)定义持久化存储的变量及方法1.首先是存储ID与密码的三个字典和存储对象数据类型的五个字典2.将他们分别按顺序存储在两个列表中3.定义把数据存储在文件中的函数 (三)定义一些类的基础方法和一些基础函数1.管理员函数(1)创建学区(2)创建老师(账户)(3)创建课程 注意:`choose_school()`函数暂未定义,但我们知道它的作用是选择一个学区并返回它的实例对象,后来,我们把这个函数定义在学生下(其实定义在哪都无所谓)2.老师类方法函数 3.学生函数 总结(1)例: `admin_inter.py` (五)编写主交互界面的内容1.初始化 总结(2)至此我们的选课系统就算完成了。注意事项:1.同一身份下的用户名不能相同,否则会被覆盖2.运行前别忘了初始化(创建/清空存储信息的文件)

前言

制作一个在终端运行的选课系统

需求

在这里插入图片描述 在这里插入图片描述

一、需求分析 (一)角色 1.用户(管理员、老师、学生) 属性方法管理员用户名,id,密码创建学校、创建老师(账户)、创建课程老师用户名,id,密码 ,课程列表选择(要教授的)课程、查看课程、查看学生、修改学生分数学生用户名,id,密码 ,所属学区,课程列表,分数选择课程、查看课程、查看分数 2.对象(学区、课程) 属性学区名称课程名称、价格、周期、所属学区、(教授的)老师、学生列表 3.关系 (1)学生——学区、课程、分数

学生可选一个学区、多门课程,每门课程一个分数

(2)老师——课程

一门课一个老师教,一个老师多门课

(3)学区——课程

一个学区多门课

(二)数据结构 1.类的私有属性和方法 2.类与类的关联

(1)老师教授课程,所以老师有自己的课程(列表0

(2)学生有所属学区(属性),所学课程(列表)和每门课的分数(字典)

(3)学区存储旗下的课程(列表)

(4)课程有所属学区(属性)、教授老师(属性)和学生(列表)

3.持久化存储 (1)ID与密码(Json)

用字典存储ID与密码,用列表存储字典(不同用户的)

(2)对象(pkl)

用字典存储对象,用列表存储字典(不同用户的)

(三)交互界面 1.注册与登录 注册管理员、学生登录管理员、老师、学生 2.流程

初始化的作用在于创建/清空存储信息的文件,避免加载信息时出现错误

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

二、代码实现 (一)定义类及基本属性 1.用户(管理员、老师、学生)

先抽象出一个父类

class Role: def __init__(self, usr_name, number, password=None): self.usr_name = usr_name self.number = number self.password = password

再分别定义三个子类并初始化他们的属性

class Administrator(Role): pass class Student(Role): def __init__(self, usr_name, number, password, school): Role.__init__(self, usr_name, number, password) self.school = school self.subject_lst = [] # subject_lst: list[obj] self.score_dic = {} # score_dic: dict{subject_name: score} class Teacher(Role): def __init__(self, usr_name, number, password): Role.__init__(self, usr_name, number, password) self.subject_lst = [] # subject_lst: list[obj] 2.对象(学区、课程) class School: def __init__(self, name): self.name = name self.subject_lst = [] # subject_lst: list[str] class Subject: def __init__(self, name, price, cycle, school: object): self.name = name self.teacher = None # teacher: str self.information = [name, price, cycle, school.name, self.teacher] #定义information描述课程 self.school = school self.school.subject_lst.append(self.name) self.student_lst = [] # student_lst: list[str] (二)定义持久化存储的变量及方法 1.首先是存储ID与密码的三个字典和存储对象数据类型的五个字典 # Set variable admin_usr_password_dic = {} teacher_usr_password_dic = {} student_usr_password_dic = {} admin_dic = {} teacher_dic = {} student_dic = {} school_dic = {} subject_dic = {} 2.将他们分别按顺序存储在两个列表中 usr_password_data_lst = [admin_usr_password_dic, teacher_usr_password_dic,student_usr_password_dic] obj_information_lst = [admin_dic, teacher_dic, student_dic, school_dic, subject_dic] 3.定义把数据存储在文件中的函数

用JSON存储基本数据类型的数据 用PICKLE存储带有类数据类型的数据

# save data def save_usr_password(): with open('UserData.json', 'w', encoding='utf-8') as fp: #打开文件 json.dump(usr_password_data_lst, fp) #存储 fp.close() #关闭文件 def save_obj_information(): #同上 with open('UserData.pkl', 'wb') as fp: pickle.dump(obj_information_lst, fp) fp.close() (三)定义一些类的基础方法和一些基础函数 1.管理员 函数 (1)创建学区

实例化学区并存储

def create_a_school(): name_str = input('请输入学区名称:') name = School(name_str) #name: obj 实例化学区 obj_information_lst[3][name_str] = name save_obj_information() #存储 print('学区创建完毕') (2)创建老师(账户)

实例化老师(账户)并存储

def create_a_teacher(): usr_name_str = input('请输入教师姓名') number = input('请输入教师id') password = input('请输入密码') usr_name = Teacher(usr_name_str, number, password) # usr_name: obj #usr_name: obj 实例化老师(账户) obj_information_lst[1][usr_name_str] = usr_name usr_password_data_lst[1][number] = password save_obj_information() save_usr_password() #存储 print('教师创建完毕') (3)创建课程

实例化课程并存储

def create_a_subject(): name_str = input('请输入课程名称') price = input('请输入课程价格') cycle = input('请输入课程周期') school = choose_school() # school: obj name = Subject(name_str, price, cycle, school) obj_information_lst[4][name_str] = name save_obj_information() print('课程创建完毕') 注意:choose_school()函数暂未定义,但我们知道它的作用是选择一个学区并返回它的实例对象,后来,我们把这个函数定义在学生下(其实定义在哪都无所谓) 2.老师 类方法 def choose_subject(self, subject_name: str): self.subject_lst.append(obj_information_lst[4][subject_name].name) obj_information_lst[4][subject_name].teacher = self.usr_name def check_my_subject(self): print(self.subject_lst) 函数 # 2.teacher func def check_all_subject(): # school_dic can be empty!!! for schoolname, schoolobj in obj_information_lst[3].items(): print(schoolname, schoolobj.subject_lst) def further_check(usr_name): choise = input('1.further check\n2.choose subject\n3.end\n') if choise == '1': subject_name = input('subject name') print(obj_information_lst[4][subject_name].information) further_check(usr_name) elif choise == '2': subject_name = input('subject name') usr_name.choose_subject(subject_name) print('选课成功') further_check(usr_name) elif choise == '3': pass else: further_check(usr_name) 3.学生 函数 # 3.student func def choose_school(): print(obj_information_lst[3].keys()) school_str = input('请输入校区') school = obj_information_lst[3][school_str] return school 总结(1)

我们将以上代码写入文件class_information.py下,至此准备工作便做的差不多了

## (四)三个文件 ### 利用已完成的类与函数将三个流程图表达出来(已admin为例) 例: admin_inter.py import class_information def admin_inter(usr_name: object): print('1.create a school\n2.create a teacher\n3.create a subject\n4.log out') tem = input('make a choice') if tem == '1': class_information.create_a_school() admin_inter(usr_name) elif tem == '2': class_information.create_a_teacher() admin_inter(usr_name) elif tem == '3': class_information.create_a_subject() admin_inter(usr_name) elif tem == '4': print('log out successfully') pass else: print('请在目录里面选择') admin_inter(usr_name) (五)编写主交互界面的内容

调用

import pickle import json import class_information import admin_inter import student_inter import teacher_inter

代码顺序及流程图循序

# user-interface def weather_initial(): choice = input() if choice == '1': initial() else: pass load_information() 1.初始化 def initial(): with open('UserData.pkl', 'wb') as fp: pickle.dump(class_information.obj_information_lst, fp) fp.close() with open('UserData.json', 'w', encoding='utf-8') as fp: json.dump(class_information.usr_password_data_lst, fp) fp.close() def load_information(): with open('Userdata.pkl', 'rb') as fp: class_information.obj_information_lst = pickle.load(fp) fp.close() with open('UserData.json', 'r', encoding='utf-8') as fp: class_information.usr_password_data_lst = json.load(fp) fp.close() choose_status() def choose_status(): print('目录') print('1.Administrator') print('2.Teacher') print('3.Student') print('4.end') status = input('请选择身份:\n') if status == '1': log_or_register(status) elif status == '2': log_in(status) elif status == '3': log_or_register(status) elif status == '4': pass else: print('请在目录里面选择') choose_status() def log_or_register(status): choice = input("目录\n1.注册\n2.登录\n请输入你的选择:\n") if choice == '1': register(status) elif choice == '2': log_in(status) else: print('请在目录里面选择') log_or_register(status) def register(status): if status == '1': admin_inter.admin_register() else: student_inter.stu_register() class_information.save_usr_password() class_information.save_obj_information() choose_status() def log_in(status): if status == '1': tem = 0 elif status == '2': tem = 1 else: tem = 2 usr_name = input('请输入用户名') number = input('请输入id') password = input('请输入密码') if id in class_information.usr_password_data_lst[tem]: if password == class_information.usr_password_data_lst[tem][number]: print('log in successfully') enter(status, class_information.obj_information_lst[tem][usr_name]) else: print('password is not match id') log_in(status) else: print('no usr') log_in(status) def enter(status, usr: object): if status == '1': admin_inter.admin_inter(usr) elif status == '2': teacher_inter.teacher_inter(usr) elif status == '3': student_inter.student_inter(usr) class_information.save_usr_password() class_information.save_obj_information() choose_status() pass def main(): weather_initial()

我们注意到在register()中出现两个未定义的函数admin_register()和stu_register() 我们分别把他写入自己的文件中并调用 例

def admin_register(): usr_name_str = input('请输入用户名') number = input('请输入id') password = input('请输入密码') usr_name = class_information.Administrator(usr_name=usr_name_str, number=number, password=password) class_information.obj_information_lst[0][usr_name_str] = usr_name class_information.usr_password_data_lst[0][number] = password print('over') 总结(2) 至此我们的选课系统就算完成了。 注意事项: 1.同一身份下的用户名不能相同,否则会被覆盖 2.运行前别忘了初始化(创建/清空存储信息的文件)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有