一、系统目录
二、实现代码
2.1 bin
2.1.1 run.py
程序的入口
from src import main
if __name__ == '__main__':
main.main()
2.2 confg
2.2.1 settings
配置文件
import os
import sys
#path路径
BASIC_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASIC_PATH)
db_path = os.path.join(BASIC_PATH,'db')
teacher_path = os.path.join(db_path,'teacher_db')
#define类型
db_type={
1:'teacher_db',
2:'les_db',
3:'students_db',
4:'class_db'
}
auth_type = {
1:'学生',
2:'管理员'
}
#string
condition = False
manager_name = 'admin'
manager_passwd = '1234'
welcome = '''
-------------------------%s-------------------------------
'''
welcome1 = welcome%'欢迎登录选课系统'
welcome2 = welcome%'欢迎进入选课系统'
admin_choice = '''
作为管理员,您有以下选择:
1、添加新老师
2、添加新课程
3、添加新班级
4、退出登陆
'''
noteach_choice = '''
1、添加新教师
2、查看现有教师
'''
students_choice ={1:'''
1、学员注册
2、学员登陆
3、返回上一级
''',
2:'''
1、选择班级
2、查看班级详情
3、查看课程情况
4、退出登录
'''
}
main_choice = '''
1、管理员
2、学生
'''
2.3 db
以一个对象为一个文件的方式存放类对象,名称为该对象的id号
例:
2.3.1 class_db
2.3.2 les_db
2.3.3 studengts_db
2.3.4 teacher_db
2.4 lib
2.4.1 common
存放常用且通用的函数
import uuid
from confg import settings
import os
import pickle
#获得唯一ID号
def get_id():
m = str(uuid.uuid1())
return m
#db_type:对象类别,db_id:对象id号,读取db包下相应的类对象,并返回
def db_fileopen_read(db_type,db_id):
path = os.path.join(settings.db_path,db_type,db_id)
f = open(path,'rb')
m = pickle.load(f)
f.close()
return m
#将db_type类型的对象db_write,以其id号为名称存入相应数据库包中
def db_fileopen_write(db_type,db_id,db_write):
path = os.path.join(settings.db_path,db_type,db_id)
f = open(path,'wb')
f.seek(0)
f.truncate()
pickle.dump(db_write,f)
f.close()
#以列表的形式返回某db_type类型下所有文件的id号
def get_id_list(db_type):
path = os.path.join(settings.db_path,db_type)
db_list = os.listdir(path)
n = 0
for i in db_list:
if i == '__init__.py':
del db_list[n]
n += 1
return db_list
#以列表形式返回某db_type类型下的所有类对象
def get_object(db_type):
db_list = get_id_list(db_type)
b = []
for i in db_list:
obj =db_fileopen_read(db_type,i)
b.append(obj)
return b
#以列表形式返回某db_type类型下所有对象的名字
def get_obj_name(db_type):
m = get_object(db_type)
# print(m)
obj_name=[]
for i in m:
obj_name.append(i.name)
return obj_name
#展示列表信息
def show_list(li):
for i in li:
print(i)
#通过类对象的名字返回类对象本身
def name_obj(db_type,name):
obj = get_object(db_type)
for i in obj:
if name == i.name:
return i
else:
return False
#验证密码是否正确
def athu(db_passwd,passwd):
if db_passwd == passwd:
settings.condition =True
print(settings.welcome1)
return True
else:
return False
2.4.2 modle
定义类,类中常有的静态方法:
get_all:得到该类下的所有对象
get_name:得到该类下的所有对象名称
普通方法:
introduction:介绍类对象的基本情况
from confg import settings
from lib import common
class Teacher:
def __init__(self,name,sex,age):
self.name = name
self.age = age
self.sex = sex
self.id = common.get_id()
@staticmethod
def get_all():
a= common.get_object(settings.db_type[1])
return a
@staticmethod
def get_name():
b = common.get_obj_name(settings.db_type[1])
return b
class Classes:
def __init__(self,name,lesson):
self.name = name
self.lesson = lesson
self.id = common.get_id()
@staticmethod
def get_all():
a= common.get_object(settings.db_type[4])
return a
@staticmethod
def get_name():
b = common.get_obj_name(settings.db_type[4])
return b
def introduction(self):
print('班级名称:%s'
%self.name)
print('班级应上的课程有:')
for i in self.lesson:
print(i.name)
def lesson_list(self):
les_name_list = []
for i in self.lesson:
les_name_list.append(i.name)
return les_name_list
class Student:
def __init__(self,name,passwd,sex,age):
self.name = name
self.passwd = passwd
self.sex = sex
self.age = age
self.id = common.get_id()
self.cls = None
class Lessons:
def __init__(self,name,time,cost,teacher):
self.name = name
self.time = time
self.cost = cost
self.teacher = teacher
self.id = common.get_id()
@staticmethod
def get_all():
b = common.get_object(settings.db_type[2])
return b
@staticmethod
def get_name():
a = common.get_obj_name(settings.db_type[2])
return a
def introduction(self):
print('''课程详情:
课程名称:%s
上课时间:%s
上课老师:%s'''%(self.name,self.time,self.teacher.name))
2.5 src
2.5.1 admin.py
管理员视图
from confg import settings
from lib import modle,common
def create_tea():
while 1:
name = input('请输入新加入老师的姓名:')
sex = input('请输入%s老师的性别:'%name)
age = input('请输入%s老师的年龄:'%name)
new_teacher = modle.Teacher(name,sex,age)
common.db_fileopen_write(settings.db_type[1],new_teacher.id,new_teacher)
print('成功录入新老师%s'%name)
m = int(input('继续录入新老师?(是:1;否:0)'))
if m == 0:
break
return new_teacher
def create_les():
while 1:
name = input('请输入新课程的名称:')
time = input('新课程的开课时间:')
cost = input('一学期的费用:')
tea = modle.Teacher.get_all()
tea_name = input('请输入授课老师:')
teanamelist = modle.Teacher.get_name()
if tea_name not in teanamelist:
print('系统中没有%s老师的记录,您有以下选择:%s'%(tea_name,settings.noteach_choice))
c1 = input('请选择:')
if c1 == '1':
new_tea = create_tea()
new_les = modle.Lessons(name,time,cost,new_tea)
common.db_fileopen_write(settings.db_type[2],new_les.id,new_les)
print('成功添加新课程')
elif c1 == '2':
print('有%s位老师可以选择,如下:'%len(tea))
for i in teanamelist:
print(i)
tea_choice = input('请选择:')
teacher = modle.Teacher.get_all()
cho_tea = teacher[tea_choice]
new_les = modle.Lessons(name,time,cost,cho_tea)
common.db_fileopen_write(settings.db_type[2],new_les.id,new_les)
print('成功添加新课程')
else:
for i in tea:
if tea_name == i.name:
common.db_fileopen_write(settings.db_type[2],i.id,i)
print('成功添加新课程')
m = int(input('继续添加新课程?(是:1;否:0)'))
if m == 0:
break
def creat_class():
while 1:
cls_name = input('请输入新班级的名字')
print('有以下课程可供选择:')
les_name = modle.Lessons.get_name()
common.show_list(les_name)
les_list = []
while 1:
les_choice = input('请选择(输入exit退出):')
if les_choice == 'exit':
break
else:
if les_choice in les_name:
les_list.append(les_choice)
else:
print('%s课程还未存在。'%les_choice)
les_obj_list = modle.Lessons.get_all()
cls_les_list = []
for i in les_obj_list:
if i.name in les_list:
cls_les_list.append(i)
new_cls = modle.Classes(cls_name,cls_les_list)
common.db_fileopen_write(settings.db_type[4],new_cls.id,new_cls)
print('成功添加班级!')
m = int(input('继续添加班级?(是:1;否:0)'))
if m == 0:
break
def admin_main():
settings.condition = True
print(settings.welcome1)
while 1 :
print(settings.admin_choice)
m=int(input('请选择:'))
if m == 1:
create_tea()
elif m == 2:
create_les()
elif m == 3:
creat_class()
elif m == 4:
settings.condition = False
break
2.5.2 student.py
学生视图
from confg import settings
from lib import modle,common
import re
def student_zhuce():
while 1 :
name= input('请输入您的姓名:')
passwd1 = input('请输入您的密码:')
n = 3
m = 0
while n>0:
passwd2 = input('请再次输入您的密码:')
if passwd1 == passwd2:
xinxi = input('请输入您的基本信息:性别以及年龄,请以‘,’分隔')
sex,age = re.split(r',',xinxi)
new_student = modle.Student(name,passwd1,sex,age)
common.db_fileopen_write(settings.db_type[3],new_student.id,new_student)
m = 1
print('注册成功!')
break
else:
print('输入错误')
n -= 1
if m == 1:
break
def auth_stu():
if settings.condition is not False:
print('您已登录')
else:
stu_name = input('请输入您的名字:')
stu_passwd = input('请输入您的密码')
obj = common.name_obj(settings.db_type[3],stu_name)
if obj is not False:
passwd = obj.passwd
stu = common.athu(passwd,stu_passwd)
if stu:
print('登陆成功')
settings.condition = True
return obj
else:
print('登陆失败')
return False
else:
print('登录失败')
return False
def stu_cls(stu):
if stu.cls is None:
print('现有以下班级:')
cls_list = modle.Classes.get_name()
for i in cls_list:
print(i)
choice_cls = ''
while 1:
choice_cls = input('请输入选择的班级')
if choice_cls not in cls_list:
print('输入错误,请重新输入')
else:
break
cls = common.name_obj(settings.db_type[4],choice_cls)
stu.cls = cls
common.db_fileopen_write(settings.db_type[3],stu.id,stu)
print('选择成功')
else:
print('您已经在%s班级中了'%stu.cls.name)
def see_lesson(stu):
print('您所要上的课程:')
for i in stu.cls.lesson:
print(i.name)
while 1:
see_les = input('请输入您想要查看的课程:(输入exit退出)')
less_name_list = stu.cls.lesson_list()
if see_les == 'exit':
break
elif see_les in less_name_list:
see_les_obj = common.name_obj(settings.db_type[2],see_les)
see_les_obj.introduction()
break
else:
print('输入错误')
def student_main():
while 1:
print('作为学生,您有以下选择:%s'%settings.students_choice[1])
stu_choice = int(input('请输入您的选择:'))
if stu_choice == 1:
student_zhuce()
elif stu_choice == 2:
stu = auth_stu()
if stu is not False:
while 1:
print('你有以下选择:%s'%settings.students_choice[2])
stu_choice2 = int(input('请选择:'))
if stu_choice2 == 1:
stu_cls(stu)
elif stu_choice2 == 2:
if stu.cls is not None:
stu.cls.introduction()
else:
print('您还未选择班级')
elif stu_choice2 == 3:
if stu.cls is not None:
see_lesson(stu)
else:
print('您还未选择班级,无法查看课程')
elif stu_choice2 == 4:
settings.condition = False
break
else:
print('输入错误')
elif stu_choice == 3:
break
else:
print('输入错误')
2.5.3 main.py
主逻辑视图
from src import admin
from src import student
from confg import settings
def main():
print(settings.welcome2)
while 1:
print(settings.main_choice)
shengfen = int(input('您的身份是:'))
if shengfen == 1:
admin.admin_main()
elif shengfen == 2:
student.student_main()
三、运行结果
主界面
3.1 管理员视图
3.1.1 添加新老师
3.1.2 添加新课程
3.1.3 添加新班级
3.2 学生视图
3.2.1 学员注册
3.2.2 学员登录
3.2.3 选择班级
3.2.4 查看班级详情
3.2.5 查看课程情况
3.3 返回上一级