您的位置:首页 > 其它

第六周作业——选课系统

2017-09-20 20:17 399 查看
选课系统:

角色:学校、学员、课程、讲师

要求:

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

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

3. 课程包含,周期,价格,通过学校创建课程

4. 通过学校创建班级, 班级关联课程、讲师

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

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

6. 提供两个角色接口

6.1 学员视图, 可以注册, 交学费, 选择班级,

6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩

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

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



1、管理员默认帐号admin密码为admin
2、所有现有学生,老师的用户名会自动显示清单,密码跟用户名一致
如lzd,id也为lzd
3、目录结构
选课作业
├── zuoye #目录
│ ├── bin # 执行文件 目录
│ │ ├── start.py # 主程序 执行程序
│ │
│ ├── conf #配置文件
│ │ └── settings.py
│ ├── src #主要程序逻辑都 在这个目录 里
│ │ ├── core.py #核心代码程序
----── db #数据库
├── class #班级文件
└── course #课程文件
└── school #学校文件
└── student #学生文件
└── teacher #老师文件

start.py

#!/usr/bin/env python
#-*- coding:utf-8 -*-
#Author:lzd

import sys,os
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
from src import core

if __name__ == '__main__':
core.func()


setting.py

#!/usr/bin/env python
#-*- coding:utf-8 -*-
#Author:lzd
import os
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

STUDENTDB_PATH=BASE_DIR+r'\db\student'
TEACHERDB_PATH=BASE_DIR+r'\db\teacher'
COURSE_PATH=BASE_DIR+r'\db\course'
SCHOOL_PATH=BASE_DIR+r'\db\school'
CLASS_PATH=BASE_DIR+r'\db\class'


core.py

#!/usr/bin/env python
#-*- coding:utf-8 -*-
#Author:lzd

from src import models
from conf import settings
import pickle
import os

s1 = models.School('北京校区', '中国北京')
s2 = models.School('上海校区', '中国上海')
python = s1.create_course('Python', 19800, '6mons')
linux = s1.create_course('Linux', 17800, '4mons')
go = s2.create_course('Go', 9000, '4mons')
school_obj=None

def func():
while True:
print('欢迎进入LZD选课系统'.center(30,'*'),
'\n1.北京校区\n'
'2.上海校区\n'
'3.退出程序')
res=input('请选择学校: ').strip()
global school_obj
if res == '1':
school_obj=s1
elif res == '2':
school_obj=s2
elif res == '3':
break
else:
print('输入错误')
continue

while True:
print('请选择视图'.center(30,'*'))
cmd=input('1.学生视图\n'
'2.老师视图\n'
'3.管理员视图\n'
'4.返回上一级\n'
'5.退出选课系统: ').strip()
if cmd == '1':
student_view()
elif cmd == '2':
teacher_view()
elif cmd == '3':
admin_view()
elif cmd == '4':
break
elif cmd == '5':
exit()
else:
print('输入错误,请重新输入!')
continue
# return school_obj

def student_view():
'''学生视图'''
while True:
tag = True
print('欢迎进入学生视图,请选择功能'.center(30,'*'))
cmd=input('1.注册信息\n'
'2.登录\n'                          #循环选择功能
'3.返回上级\n'
'4.退出系统: ').strip()
if cmd == '1':
while True:
print('欢迎注册学生信息'.center(30, '-'))
name=input('name: ').strip()
name_id=input('name_id: ').strip()      #注册信息
age=input('age: ').strip()
sex=input('sex: ').strip()
if not name:
print('姓名必填')
continue
break
student_obj=models.Student(name,name_id,age,sex)
student_obj.save()
print("%s注册成功!"%name)
elif cmd == '2':
while tag:
print('请登录'.center(30, '-'))
res = os.listdir(settings.STUDENTDB_PATH)
print("当前所有学生用户名清单如下:")
for item in res:
file_path = r'%s\%s' % (settings.STUDENTDB_PATH, item)
with open(file_path, 'rb') as f:
student_obj = pickle.load(f)
print(student_obj.name)

name = input('请输入用户名: ')
name_id = input('请输入用户id: ')                #登录,如果数据库中有这个人的文件,继续,否则打印用户不存在
for item in res:
file_path = r'%s\%s' % (settings.STUDENTDB_PATH, item)
with open(file_path, 'rb') as f:
student_obj = pickle.load(f)
if name == student_obj.name and name_id == student_obj.user_id:
while tag:
cmd=input('登录成功\n'
'1.交学费\n'
'2.选择班级\n'
'3.返回上一级\n'
'4.退出系统\n'
'请选择功能: ').strip()
if cmd == '1':          #交学费
money = int(input('请输入缴纳金额: '))
student_obj.tuition+=money
print('缴纳成功,学费余额为%s' %student_obj.tuition)
student_obj.save()
elif cmd == '2':        #选择班级
res = os.listdir(settings.CLASS_PATH)
for item in res:
file_path = r'%s\%s' % (settings.CLASS_PATH, item)
with open(file_path, 'rb') as f:
class_obj = pickle.load(f)
print('班级名称:<%s> 班级所学课程<%s>' % (class_obj.name, class_obj.course))
course_cmd = input('请选择班级:')
res = os.listdir(settings.CLASS_PATH)
for item in res:
file_path = r'%s\%s' % (settings.CLASS_PATH, item)
with open(file_path, 'rb') as f:
class_obj = pickle.load(f)
if course_cmd == class_obj.name:
for i in class_obj.student:
if student_obj.id == i.id:
print('班级已有此人')         #如果班级里已有此人,则结束
tag=False
else:
class_obj.student.append(student_obj)
student_obj.student_class.append(class_obj)
student_obj.save()
class_obj.save()
print('班级添加成功')
student_obj.tell_info()
elif cmd == '3':
tag=False
elif cmd == '4':
exit()
else:
continue
else:
print('用户不存在')
tag = False
elif cmd == '3':
return
elif cmd == '4':
exit()
else:continue

def teacher_view():
'''讲师视图'''
tag = True  #添加一个标志位
while tag:

res = os.listdir(settings.TEACHERDB_PATH)
print("当前所有老师用户名清单如下:")
for item in res:
file_path = r'%s\%s' % (settings.TEACHERDB_PATH, item)
with open(file_path, 'rb') as f:
teacher_obj = pickle.load(f)
print(teacher_obj.name)
print('请登录'.center(30, '-'))
name = input('请输入用户名: ').strip()
name_id = input('请输入用户id: ').strip()
for item in res:
file_path = r'%s\%s' % (settings.TEACHERDB_PATH, item)
with open(file_path, 'rb') as f:
teacher_obj = pickle.load(f)
if name == teacher_obj.name and name_id == teacher_obj.user_id:
while tag:
print('欢迎进入讲师视图'.center(30,'*'))
cmd=input('1.显示老师当前信息\n'
'2.选择上课班级\n'
'3.修改学员成绩\n'
'4.返回上一级\n'
'5.退出系统\n'
'请选择功能: ').strip()
if cmd == '1':
teacher_obj.tell_info()
elif cmd == '2':
res = os.listdir(settings.CLASS_PATH)
for item in res:
file_path = r'%s\%s' % (settings.CLASS_PATH, item)
with open(file_path, 'rb') as f:
class_obj = pickle.load(f)
print('班级名称:<%s> 班级所学课程<%s>' % (class_obj.name, class_obj.course))
class_cmd = input('请选择班级:')
res = os.listdir(settings.CLASS_PATH)
for item in res:
file_path = r'%s\%s' % (settings.CLASS_PATH, item)
with open(file_path, 'rb') as f:
class_obj = pickle.load(f)
if class_obj.name == class_cmd:
class_obj.teacher.append(teacher_obj)
teacher_obj.teacher_class.append(class_obj)
teacher_obj.save()
class_obj.save()
teacher_obj.tell_info()
elif cmd == '3':
res = os.listdir(settings.STUDENTDB_PATH)
print("当前所有学生用户名清单如下:")
for item in res:
file_path = r'%s\%s' % (settings.STUDENTDB_PATH, item)
with open(file_path, 'rb') as f:
student_obj = pickle.load(f)
print(student_obj.name)
name=input('请输入想要修改的学生姓名:').strip()
name_id=input('请输入学生id: ').strip()
num=int(input('请输入要修改的成绩: ').strip())
res = os.listdir(settings.STUDENTDB_PATH)
for item in res:
file_path = r'%s\%s' % (settings.STUDENTDB_PATH, item)
with open(file_path, 'rb') as f:
student_obj = pickle.load(f)
if name == student_obj.name and name_id == student_obj.user_id:
student_obj.grade+=num
print('%s 的成绩已修改为 %s' %(student_obj.name,num))
student_obj.save()
elif cmd == '4':
tag=False
elif cmd == '5':
exit()
else:
continue
else:
print("老师的id输入错误~")
def admin_view():
'''管理员视图'''
print('请用管理员的身份登录,用户名:"admin",密码:"admin"'.center(30,'*'))  #管理员有固定的用户名密码
name=input('请输入用户名: ')
password=input('请输入密码: ')
if name == 'admin' and password == 'admin':
while True:
print('欢迎进入管理员视图'.center(30,'-'))
cmd=input('1.创建讲师\n'
'2.创建班级\n'
'3.创建课程\n'
'4.返回上一级\n'
'5.退出系统\n'
'请选择功能: ')
if cmd == '1':
name=input('请输入讲师姓名: ').strip()
user_id=input('请输入讲师id: ').strip()
age=input('请输入讲师年纪: ').strip()
sex=input('请输入讲师性别: ').strip()
salary=input('请输入讲师薪资: ').strip()
if not name:
print('名字不能为空')
continue
teacher = school_obj.create_teacher(name,user_id,age,sex,salary)
teacher.save()
school_obj.save()
print('%s 老师的信息创建成功' %teacher.name)
teacher.tell_info()
elif cmd == '2':
name = input('请输入班级名: ').strip()
course = input('请输入班级课程: ').strip()
if not name or not course:
print('输入错误')
continue
class_obj=school_obj.create_class(name,course)
class_obj.save()
school_obj.save()
print('%s 班级创建成功' %class_obj.name)
class_obj.tell_info()
elif cmd == '3':
course = input('请输入课程名字: ').strip()
price = input('请输入课程价钱: ').strip()
period = input('请输入课程周期: ').strip()
if not course or not price or not period:
print('输入错误')
continue
course_obj = school_obj.create_course(course,price,period)
course_obj.save()
school_obj.save()
print('%s 课程创建成功' %course_obj.course)
course_obj.tell_course()
elif cmd == '4':
return
elif cmd == '5':
exit()
else:
continue
else:
print('用户名密码错误')

if __name__ == '__main__':
func()


models.py

#!/usr/bin/env python
#-*- coding:utf-8 -*-
#Author:lzd

from conf import settings
import pickle
import hashlib
import os

class School:
'''学校类'''
def __init__(self,school_name,school_site):
self.school_name=school_name
self.school_site=school_site
self.school_courses=[]  #为学校所有的课程创建一个空列表
self.school_terchers=[] #创建一个空列表存放老师
self.school_class=[]    #创建一个空列表存放班级

def create_class(self,name,course):
'''创建班级'''
class_obj=Class(name,course)
self.school_class.append(class_obj)
return class_obj

def create_course(self,course,price,period):
'''创建课程'''
course_obj=Course(course,price,period)
self.school_courses.append(course_obj)
return course_obj

def create_teacher(self,name,user_id,age,sex,salary):
'''创建老师'''
teacher_obj=Teacher(name,user_id,age,sex,salary)
self.school_terchers.append(teacher_obj)
return teacher_obj

def create_student(self,name,user_id,age,sex,classroom):
'''创建学生'''
student_obj=Student(name,user_id,age,sex)
classroom.student.append(student_obj)
return student_obj

def save(self):
'''保存信息'''
with open(r'%s\%s' %(settings.SCHOOL_PATH,self.school_name),'wb') as f:
pickle.dump(self,f)

class Class:
'''班级类'''
def __init__(self,name,course):
self.name=name
self.teacher=[]
self.course=course
self.student=[]
def tell_info(self):
'''查看班级信息'''
print('''
-------%s info---------
name:%s
teacher:%s
course:%s
student:%s
''' %(self.name,self.name,self.teacher,self.course,self.student))
def save(self):
'''保存班级信息'''
with open(r'%s\%s' %(settings.CLASS_PATH,self.name),'wb') as f:
pickle.dump(self,f)

class Course:
'''课程类'''
def __init__(self,course,price,period):
self.course=course
self.price=price
self.period=period
def tell_course(self):
'''查看课程信息'''
print('''
--------%s info---------
COURSE:%s
PRICE:%s
PERIOD:%s
''' %(self.course,self.course,self.price,self.period))
def save(self):
'''保存课程信息'''
with open(r'%s\%s' %(settings.COURSE_PATH,self.course),'wb') as f:
pickle.dump(self,f)

class People:
def __init__(self,name,user_id,age,sex):
self.user_id=user_id
self.name=name
self.age=age
self.sex=sex
self.courses=[]
self.id=self.create_id()

def tell_crouse(self):
'''查看课程'''
for obj in self.courses:
obj.tell_crouse()

def create_id(self):
'''加密'''
m = hashlib.md5()
m.update(self.name.encode('utf-8'))
m.update(str(self.user_id).encode('utf-8'))
return m.hexdigest()

class Teacher(People):
def __init__(self,name,user_id,age,sex,salary):
People.__init__(self,name,user_id,age,sex)
self.salary=salary
self.teacher_class=[]

def tell_info(self):
'''查看老师信息'''
print('''
--------%s info---------
NAME:%s
ID:%s
AGE:%s
SEX:%s
SAL:%s
CLASS:%s
''' %(self.name,self.name,self.user_id,self.age,self.sex,self.salary,self.teacher_class))
def save(self):
'''保存老师信息'''
with open(r'%s\%s' % (settings.TEACHERDB_PATH, self.id), 'wb') as f:
pickle.dump(self, f)

class Student(People):
def __init__(self,name,user_id,age,sex):
People.__init__(self,name,user_id,age,sex)
self.student_class=[]
self.tuition=0
self.grade=0
def __str__(self):
return self.name
def tell_info(self):
'''查看学生信息'''
print('''
---------%s info----------
NAME:%s
ID:%s
AGE:%s
SEX:%s
CLASS:%s
TUITION:%s
GRADE:%s
''' %(self.name,self.name,self.id,self.age,self.sex,self.student_class,
self.tuition,self.grade))
def save(self):
'''保存学生信息'''
with open(r'%s\%s' %(settings.STUDENTDB_PATH,self.id),'wb') as f:
pickle.dump(self,f)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: