面向对象作业——校园选课系统

角色:

学校、学员、课程、讲师

要求:

1. 创建北京、上海 2 所学校

2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开

3. 课程包含,周期,价格

4. 班级关联课程、讲师

5. 创建学员时,选择学校,关联班级

6. 创建讲师角色时要关联学校

7. 提供三个角色视图

7.1 学员视图, 登陆, 查看课程、查看班级

7.2 讲师视图, 讲师可查看自己教学的班级、课程。

进阶需求:可管理自己的班级, 查看班级学员列表 , 修改所管理的学员的成绩

7.3 管理视图,创建讲师, 创建班级,创建课程

7. 上面的操作产生的数据都通过pickle序列化保存到文件里

一 、分析需求

创建北京、上海 2 所学校 分析:创建学校类

创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开

分析:创建课程类,通过课程类去创建课程,并自动判断地点,当课程为go是地点为上海,为Linux或python时地点为北京

课程包含,周期,价格 分析:课程包含的周期、价格属性

班级关联课程、讲师 分析:可以创建班级的时候需输入关联的课程,创建讲师的时候需输入关联的班级;一个班级对应一个课程 一个班级对应一个讲师

创建学员时,选择学校,关联班级 分析:创建学员时需要输入所属的班级,并自动关联课程和学校

创建讲师角色时要关联学校 分析:创建教师时根据教师所教的课程自动关联学校

提供三个角色视图 分析:让用户可选择角色

7.1 学员视图, 登陆, 查看课程、查看班级 分析:学员角色可以有的功能

7.2 讲师视图, 讲师可查看自己教学的班级、课程。 分析:教师角色有的功能

进阶需求:可管理自己的班级, 查看班级学员列表 , 修改所管理的学员的成绩

7.3 管理视图,创建讲师, 创建班级,创建课程 分析:管理员有的功能

二、 readme(程序说明文件)

运行环境:python3.6

主程序为While 循环,先让用户选择角色,进入所需的角色后提示选择相应的功能

选择功能时必须先登录,如没有登录,则会跳转让用户登录

角色功能:

1 学生

(1)登录 (2)查看班级 (3)查看课程 (4)返回上层目录 (5)注销

2 教师

(1)登录 (2)查看所教的班级 (3)查看所教的课程 (4)查看班级学员 (5)返回上层目录 (6)注销

3 管理员

(1)登录 (2)创建学校 (3)创建班级 (4)创建讲师 (5)创建课程 (6)创建学员 (7)返回上层 (8)注销

程序说明:

1 函数initalize用来进行初始化,创建程序所需的文件

classinfo.txt 文件用来存放班级信息,

格式为:班级名=地点=课程=讲师

例如:s22=北京=python=taibai

courseinfo.txt 文件用来存课程信息

格式为:课程=周期=价格=地点

例如:python=6个月=9999=北京

managerinfo.txt 文件用来存管理员信息

格式为:用户名=密码

例如:admin=123

schoolinfo.txt 文件用来存学校信息

格式为:学校名=地点

例如:oldboy=北京

studentinfo.txt 文件用来存学生信息

格式为:姓名=密码=班级=课程

例如:abc=123=s22=python

teacherinfo.txt 用来存教师信息

格式为:姓名=密码=课程=所教班级=地点

例如:taibai=123=python=s22=北京

2 函数 myinput 用来进行输入,如果输入为空则重新输入

3 函数 login 用来进行登录,如果登录成则修改对应的状态信息,并记录用户名

4 学校类 School 有两个属性,学校地点和学校名

5 班级类 Class 有四个属性,分别为班级名称、班级地点、班级课程、班级授课老师

6 课程类 Course 有四个属性,分别是课程名称、课程周期、课程价格、课程地点

7 老师类 Teacher 有一个记录状态的字典、四个属性、两个方法、一个装饰器

字典status_dict用来记录用户名和登录状态

属性分别为老师姓名、老师密码、老师所教课程、所教班级

方法 view_class 用来查看课程和班级

方法 viem_student用来查看班级的学生

装饰器decorator_t 用来进行登录判断,如果没有登录则让用户登录

8 学生类 Student 有一个记录状态的字典、三个属性、两个方法、一个装饰器

字典status_dict用来记录用户名和登录状态

方法view_class用来查看自己的班级

方法view_course用来查看自己的课程

装饰器decorator_s 用来进行登录判断,如果没有登录则让用户登录

9 管理员类 Manager 有一个记录状态的字典、二个属性、五个方法、一个装饰器

字典status_dict用来记录用户名和登录状态

方法create_school用来创建学校

方法create_course用来创建课程

方法create_class 用来创建班级

方法create_teacher用来创建教师并自动关联地点

方法create_student用来创建学生并自动关联课程

装饰器decorator_s 用来进行登录判断,如果没有登录则让用户登录

三、全部代码如下

1 代码基本信息

#!/usr/bin/python3

# -*- coding: UTF-8 -*-

# Author:zengzeng

# Version: 4.0

2 定义初始化函数,创建程序所需的文件

def initialize():

'初始化,创建所需的文件'

print("""初始化开始...\n将创建程序所需文件:

'classinfo.txt', 'courseinfo.txt', 'managerinfo.txt',

'schoolinfo.txt', 'studentinfo.txt', 'teacherinfo.txt',""")

with open('classinfo.txt', 'w+', encoding='utf-8') as f1:

f1.write('s22=北京=python=taibai\n')

with open('courseinfo.txt', 'w+', encoding='utf-8') as f2:

f2.write('python=6个月=9999=北京\n')

with open('managerinfo.txt', 'w+', encoding='utf-8') as f3:

f3.write('admin=123\n')

with open('schoolinfo.txt', 'w+', encoding='utf-8') as f4:

f4.write('oldboy=北京\n')

with open('studentinfo.txt', 'w+', encoding='utf-8') as f5:

f5.write('abc=123=s22=python\n')

with open('teacherinfo.txt', 'w+', encoding='utf-8') as f6:

f6.write('taibai=123=python=s22=北京\n')

print("初始化完成!")

3 定义输入函数,用来判断输入是否为空

def myinput(content):

'''content为输入时的提示语'''

info = input("%s" % content).strip()

if len(info) == 0:

print("不能为空,请重新输入")

return myinput(content)

else:

return info

4 定义登录函数

def login(file, role):

"file 为存用户信息的文件,role为类名"

i = 0

while i < 3:

username = input("请输入用户名:").strip()

password = input("请输入密码:").strip()

with open(file, 'r', encoding='utf-8') as fl:

for line in fl:

line_list = line.strip().split('=')

if username == line_list[0] and password == line_list[1]:

print("登录成功")

# 登录成功后,记录用户登录状态

# global status_dict

role.status_dict['username'] = username

role.status_dict['status'] = True

return True

else:

print("账号或密码不正确,请重新输入")

i += 1

else:

print("错误三次,请稍后再试")

return login()

5 定义学校类

class School:

def __init__(self, location, school_name):

self.location = location

self.school_name = school_name

6 定义班级类

class Class:

def __init__(self, class_name, class_loaction, class_course, class_teacher):

self.class_name = class_name

self.class_location = class_loaction

self.class_course = class_course

self.class_teacher = class_teacher

7 定义课程类

class Course:

def __init__(self, course_name, course_time, course_price, course_location):

self.course_name = course_name

self.course_time = course_time

self.course_price = course_price

self.course_location = course_location

8 定义老师类

class Teacher:

'''定义老师类,可记录登录状态,可具有查看所带班级和所教课程的功能'''

status_dict = {

'username': None,

'status': False

}

def __init__(self, teacher_name, teacher_passwd='passwd', teach_course='course', teach_class='class'):

self.teacher_name = teacher_name

self.teacher_passwd = teacher_passwd

self.teach_course = teach_course

self.teach_class = teach_class

def decorator_t(f):

def inner(*args, **kwargs):

# 判断登录状态

if Teacher.status_dict['status']:

ret = f(*args, **kwargs)

return ret

else:

print("您还没有登陆,请输入账号密码进行登陆!")

return login('teacherinfo.txt', Teacher)

return inner

@decorator_t

def view_class(self, teach_name, list_index):

'''查看所教的班级'''

with open('teacherinfo.txt', encoding='utf-8') as t2:

for line in t2:

if line.strip().split('=')[0] == Teacher.status_dict['username']:

teach_course = line.strip().split('=')[list_index]

print("您所教的%s为:%s" % (teach_name, teach_course))

break

else:

pass

else:

print("没有查到信息")

@decorator_t

def view_student(self):

'''查看班级的学生'''

with open('teacherinfo.txt', encoding='utf-8') as t3:

for line in t3:

if line.strip().split('=')[0] == Teacher.status_dict['username']:

teach_course = line.strip().split('=')[3]

with open('studentinfo.txt', encoding='utf-8') as t4:

user_list = []

for i in t4:

course_name = i.strip().split('=')[2]

user_name = i.strip().split('=')[0]

if course_name == teach_course:

user_list.append(user_name)

print("学员列表如下:", user_list)

9 定义学生类

class Student:

'''定义学生类,可记录登录状态,有查看班级和课程的功能'''

status_dict = {

'username': None,

'status': False

}

def __init__(self, student_name, student_passwd='passwd', student_class='class1'):

self.student_name = student_name

self.student_passwd = student_passwd

self.student_class = student_class

def decorator_s(f):

def inner(*args, **kwargs):

# 判断登录状态

if Student.status_dict['status']:

ret = f(*args, **kwargs)

return ret

else:

print("您还没有登陆,请输入账号密码进行登陆!")

return login('studentinfo.txt', Student)

return inner

@decorator_s

def view_class(self):

'''查看自己的班级'''

with open('studentinfo.txt', 'r', encoding='utf-8') as fl:

for line in fl:

line_list = line.strip().split('=')

# 判断用户名

# if stu1.student_name.upper()==line_list[0].upper():

if Student.status_dict['username'].upper() == line_list[0].upper():

student1 = Student(line_list[0], line_list[1], line_list[2])

student1.student_course = line_list[3]

with open('classinfo.txt', encoding='utf-8') as vcc:

for i in vcc:

class_info = i.strip().split('=')

if class_info[0].upper() == student1.student_class.upper():

class2 = Class(class_info[0], class_info[1], class_info[2], class_info[3])

print("您的班级为:", class2.class_name)

print("班级详情如下:\n 班级名称:%s,所教课程:%s,地点:%s,老师:%s" \

% (class2.class_name, class2.class_course, \

class2.class_location, class2.class_teacher))

break

else:

pass

else:

print("班级不存在")

else:

pass

@decorator_s

def view_course(self):

'''查看自己的课程'''

with open('studentinfo.txt', 'r', encoding='utf-8') as fl, \

open('courseinfo.txt', 'r', encoding='utf-8') as vc2:

for line in fl:

line_list = line.strip().split('=')

if Student.status_dict['username'].upper() == line_list[0].upper():

stu_class = line_list[3]

for i in vc2:

info = i.strip().split('=')

if info[0].upper() == stu_class.upper():

# course = i.split('=')[0]

course1 = Course(info[0], info[1], info[2], info[3])

print("您的课程为:", course1.course_name)

print("课程详细为:\n 课名称:%s,周期:%s,价格:%s,地点:%s" \

% (course1.course_name, course1.course_time, \

course1.course_price, course1.course_location))

break

else:

pass

else:

print("没有此课程信息")

10 定义管理员类

class Manager:

status_dict = {

'username': None,

'status': False

}

def __init__(self, manager_name, manager_passwd='passwd'):

self.manager_name = manager_name

self.manager_passwd = manager_passwd

def decorator_m(f):

def inner(*args, **kwargs):

# 判断登录状态

if Manager.status_dict['status']:

ret = f(*args, **kwargs)

return ret

else:

print("您还没有登陆,请输入账号密码进行登陆!")

return login('managerinfo.txt', Manager)

return inner

@decorator_m

def create_school(self):

'''管理员创建学校'''

school_name = myinput("请输入校名:")

location = myinput("请输入所在地点:").strip()

school1 = School(location, school_name)

with open('schoolinfo.txt', 'a+', encoding='utf-8') as s1:

s1.write("%s=%s\n" % (school1.school_name, school1.location))

print("学校 %s 创建成功!" % school_name)

print("学校名称:%s,学校地点:%s" % (school_name, location))

@decorator_m

def create_course(self):

'''管理员创建课程'''

course_name = myinput("请输入课程名:").strip()

course_time = myinput("请输入课程周期:").strip()

course_price = myinput("请输入课程价格:").strip()

course_location = myinput("请输入课程所在地点:").strip()

cour1 = Course(course_name, course_time, course_price, course_location)

with open('courseinfo.txt', 'a+', encoding='utf-8') as cou1:

cou1.write("%s=%s=%s=%s\n" % (cour1.course_name, cour1.course_time, \

cour1.course_price, cour1.course_location))

print("创建课程 %s 成功" % cour1.course_name)

print("课程名称:%s,课程周期:%s,课程价格:%s,课程地点:%s" \

% (cour1.course_name, cour1.course_time, cour1.course_price, cour1.course_location))

@decorator_m

def create_class(self):

'''管理员创建班级'''

while True:

class_name = myinput("请输入班级名:").strip()

with open('teacherinfo.txt', 'r', encoding='utf-8') as cc2:

class_name_list = cc2.readlines()

name_info = []

for info in class_name_list:

name_info.append(info.strip().split('=')[0])

if class_name in name_info:

print("班级 %s 已经存在,请重新输入" % class_name)

print("已经存在班级列表:", name_info)

else:

class_location = myinput("请输入班级所在校区:").strip()

class_course = myinput("请输入班级的课程:").strip()

class_teacher = myinput("请输入授课老师:").strip()

c1 = Class(class_name, class_location, class_course, class_teacher)

with open('classinfo.txt', 'a+', encoding='utf-8') as cf1:

cf1.write(

"%s=%s=%s=%s\n" % (c1.class_name, c1.class_location, c1.class_course, c1.class_teacher))

print("创建班级 %s 成功!" % c1.class_name)

print("班级名称:%s,班级地点:%s,班级课程:%s,班级教课老师:%s" \

% (c1.class_name, c1.class_location, c1.class_course, c1.class_teacher))

return False

@decorator_m

def create_teacher(self):

'''管理员创建老师'''

while True:

teacher_name = myinput("请输入教师姓名:").strip()

with open('teacherinfo.txt', 'r', encoding='utf-8') as t2:

teacher_name_list = t2.readlines()

name_info = []

for info in teacher_name_list:

name_info.append(info.strip().split('=')[0])

if teacher_name in name_info:

print("老师已存在,请重新输入")

print("已有老师列表:", name_info)

else:

teacher_passwd = myinput("请输入教师的密码:").strip()

while True:

###根据老师所教课程,自动判断所在校区,linux、python在北京,go在上海

teach_course = input("请输入教师所教课程:").strip()

if teach_course.upper() == 'python'.upper() or teach_course.upper() == 'linux'.upper():

teacher_location = '北京'

elif teach_course.upper() == 'go'.upper():

teacher_location = '上海'

else:

print("输入有误,请重新输入,课程只有python,linux,go")

return True

teach_class = myinput("请输入教师所教班级:").strip()

t1 = Teacher(teacher_name, teacher_passwd, teach_course, teach_class)

with open('teacherinfo.txt', 'a+', encoding='utf-8') as ct1:

ct1.write('%s=%s=%s=%s=%s\n' % (

t1.teacher_name, t1.teacher_passwd, t1.teach_course, t1.teach_class, teacher_location))

print("创建教师: %s 成功!并且以自动添加地点:%s" % (t1.teacher_name, teacher_location))

print("创建教师的信息如下:\n'姓名':%s,'密码':%s,'所教课程':%s,'所教班级':%s,'地点':%s" \

% (t1.teacher_name, t1.teacher_passwd, \

t1.teach_course, t1.teach_class, teacher_location))

return False

@decorator_m

def create_student(self):

'''管理员创建学生'''

student_name = myinput("请输入学员姓名:").strip()

student_passwd = myinput("请输入学员密码:").strip()

while True:

student_class = myinput("请输入学员所属班级:").strip()

with open('classinfo.txt', 'r', encoding='utf-8') as c2:

content = c2.readlines()

class_info = []

for info in content:

a = info.strip().split('=')[0].upper()

class_info.append(a)

class_course = info.strip().split('=')[2].upper()

if student_class.upper() in class_info:

s1 = Student(student_name, student_passwd, student_class)

with open('studentinfo.txt', 'a+', encoding='utf-8') as cs1:

cs1.write('%s=%s=%s=%s\n' \

% (s1.student_name, s1.student_passwd, s1.student_class, class_course))

print("学员 %s 添加成功!并自动关联班课程%s" % (s1.student_name, class_course))

print("学员姓名:%s,密码:%s,学员班级:%s" \

% (s1.student_name, s1.student_passwd, s1.student_class))

return False

else:

print("你所输入的班级不存在请重新输入,或先创建班级")

print("现在的班级有:%s" % [line for line in class_info])

11 主程序进程

#运行初始化函数

initialize()

while True:

# 这是主进程,控制整个程序

# 打印首页选择信息

print("""请选择角色:

1 学生

2 教师

3 管理员

4 退出系统""")

userchoice = input("请输入你的选择:").strip()

if userchoice == '1':

while True:

print("""请选择功能:

1 登录

2 查看班级

3 查看课程

4 返回上级

5 注销

""")

stu_choice = input("请输入你要选择的功能:").strip()

if stu_choice == '1':

login('studentinfo.txt', Student)

elif stu_choice == '2':

Student.view_class('a')

elif stu_choice == '3':

Student.view_course('b')

elif stu_choice == '4':

break

elif stu_choice == '5':

Student.status_dict['username'] = None

Student.status_dict['status'] = False

else:

print("输入有误,请重新输入")

elif userchoice == '2':

print("This is teacher view")

while True:

print("""请选择功能:

1 登录

2 查看所教的班级

3 查看所教的课程

4 查看班级学员列表

5 返回上级

6 注销

""")

stu_choice = input("请输入你要选择的功能:").strip()

if stu_choice == '1':

login('teacherinfo.txt', Teacher)

elif stu_choice == '2':

Teacher.view_class('a', '班级', 3)

elif stu_choice == '3':

Teacher.view_class('b', '课程', 2)

elif stu_choice == '4':

Teacher.view_student('c')

elif stu_choice == '5':

break

elif stu_choice == '6':

Teacher.status_dict['username'] = None

Teacher.status_dict['status'] = False

print("注销成功")

else:

print("输入有误,请重新输入")

elif userchoice == '3':

while True:

print("""请选择功能:

1 登录

2 创建学校

3 创建班级

4 创建讲师

5 创建课程

6 创建学员

7 返回上级

8 注销

""")

manager_choice = input("请输入所选的功能(1-8):").strip()

if manager_choice == '1':

login('managerinfo.txt', Manager)

elif manager_choice == '2':

Manager.create_school('a')

elif manager_choice == '3':

Manager.create_class('b')

elif manager_choice == '4':

Manager.create_teacher('c')

elif manager_choice == '5':

Manager.create_course('d')

elif manager_choice == '6':

Manager.create_student('e')

elif manager_choice == '7':

break

elif manager_choice == '8':

Manager.status_dict['username'] = None

Manager.status_dict['status'] = False

print("注销成功!")

else:

print("输入有误,请重新输入")

elif userchoice == '4':

print("欢迎再次使用本系统")

exit()

else:

print("输入有误")

四、运行结果如下

1 学生视图

1.1 主程序选择界面

1.2 学生登录

1.3 查看自己班级功能

1.4 注销功能

1.5 返回上级

2 教师视图

2.1 选择教师界面

2.2 教师登录界面

2.3 教师查看所带班级

2.4 教师查看班级学员

3 管理员视图

3.1 管理员登录

3.2 管理员创建班级

3.3 管理员创建老师

3.4 管理员注销

3.5 管理员返回上级

4 退出系统

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

python123注册需要输入真实姓名和学校吗_Python 校园选课系统相关推荐

  1. python123注册需要输入真实姓名和学校吗_python-----作业完成--学校选课系统

    选课系统: 角色:学校.学员.课程.讲师 要求: 1. 创建北京.上海 2 所学校 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开 3. ...

  2. python123课题的答案_python 练习 选课系统 项目

    选课系统 # 选课系统 # 角色:学校.学员.课程.讲师 # 要求: # 1. 创建北京.上海 2 所学校 # 2. 创建linux , python , go 3个课程 , linux\py 在北京 ...

  3. 如何通过API查询指定的手机号或邮箱查询是否注册支付宝以及真实姓名?

    相信很多朋友有这个需求 ,在这里推荐一个平台:帝京云.下面让我们康康如何使用吧: 打开帝京云进行注册 登录 点击财务充值[在此演示支付宝] 4.充值成功 5.回到首页点击新建应用 6.购买套餐 7.记 ...

  4. 请输入课程编号C语言,C语言 学生选课系统 程序

    void insert() { int i,j,flag=0; char num[15]; do{ flag = 0; printf("请输入课程编号:"); scanf(&quo ...

  5. python验证身份证号码大全_国服魔兽注册账号需要验证身份证及真实姓名

    网易<魔兽世界>注册中需要验证姓名和身份证号码,如果不吻合就无法通过验证. 同样的对象---网游企业,同样的内容---用户注册实名,不同的部委---文化部和新闻出版总署各自推行网游实名制. ...

  6. 正则-完美的身份证以及真实姓名

    验证真实姓名的正则(2-30位): var reg= /^(([a-zA-Z+\.?\·?a-zA-Z+]{2,30}$)|([\u4e00-\u9fa5+\·?\u4e00-\u9fa5+]{2,3 ...

  7. 才发现网易相册已于2019年5月8号停止运营,如何导出相册照片:http://photo.163.com/transfer/html/login , 使用相册帐号登录,提供真实姓名、手机号码

    网易相册已于2019年5月8号停止运营. 如果您想找回网易相册信息,麻烦您点击这里下载app之后登录邮箱, 在app中点击[我的]页面-[帮助与反馈]进入帮助中心, 点击[博客与相册]-[如何导出相册 ...

  8. Vue 正则表达式验证表单字段(如用户名/密码/真实姓名/身份证/手机号/邮箱)的合法性

    1. 给页面表单对象添加验证属性 由于我的项目使用的el-form,则给el-form添加属性  :rules="registerRules" ref="register ...

  9. js验证真实姓名与身份证号,手机号

    最近的项目中用的需要调用实名认证的接口,实名认证接口价格相比短信而言高了不是几分钱,所以说调用实名认证的条件就要严格把关,因此用到js验证真实姓名与js验证身份证号. 进入正题 1.js验证真实姓名 ...

最新文章

  1. 密码技术--国密证书及go语言生成自签国密证书
  2. 使用jquery调试ajax接口-2
  3. EduCoder 机器学习 逻辑回归
  4. java中用jdom 如何创建xml文档/将数据写入XML中
  5. 如何正确编写linux守护进程
  6. 去掉java文件中的注释_利用JavaParser去除java文件中的注释
  7. java锁机制ppt_总结:Java锁机制
  8. C语言中字符串的处理方式(一)
  9. win98 支持html5,win98支持1G以上内存的解决办法
  10. 移动硬盘格式化了?这样恢复数据
  11. 如何准备一场Java面试?
  12. 在线作图|如何绘制一张气泡图
  13. (转) latch 入门
  14. 桌面快捷方式小箭头隐藏与还原(亲测有效)
  15. Uber牵手戴姆勒共事自动驾驶,探索未来出行模式
  16. 花了三个月终于把所有的Python库全部整理了!祝你早日拿到高薪!
  17. Python脚本刷网页访问量或关键词搜索频率
  18. python必备常用英语词汇
  19. java.sql.SQLSyntaxErrorException问题常见解决方案:比如Table xxx doesn‘t exist;Unknown column ‘xxx‘ in ‘where...
  20. Unity 多机器的视频不卡帧同步

热门文章

  1. powerpc linux交叉编译器,PowerPC交叉编译环境(powerpc-linux-gcc)设置
  2. 支付宝 “应用证书配置”
  3. 后危机时代CIO应有的态度:化被动为主动
  4. java微信公众号分享页面,微信公众号分享功能防坑指南
  5. 修改Tortoisegit用户名、密码
  6. Python 会提高程序员的审美标准。
  7. 游戏服务器崩溃怎么修复,游戏服务器崩溃原因
  8. MySQL模糊查询特殊字符处理
  9. python中日期转字符串/字符串转日期
  10. 大排档的味道吃出酒店的价格