bin:

#启动
import os,sys
BaseDir = os.path.dirname(os.path.dirname(os.path.abspath(sys.argv[0])))
sys.path.append(BaseDir)
from core.main import homeif __name__ == "__main__":home.show_home()

config:

#settingsimport os,sysBaseDir = os.path.dirname(os.path.dirname(os.path.abspath(sys.argv[0])))
sys.path.append(BaseDir)
school_db = os.path.join(BaseDir,'data',"school") #创建数据保存文件路径

module:

#班级类
class classes:def __init__(self,id,course):self.id = idself.course = courseself.course_student = {}  #该门课程学生字典{学生名:学生实例}
#课程
class course:def __init__(self,name,period,price):self.name = nameself.period = periodself.price = price
#学生类
class student:def __init__(self,name,age):self.name = nameself.age = age
#老师类
class teacher:def __init__(self,name,salary):self.name = nameself.salary = salaryself.classes = {}    #一个老师可以对应多个班级def teacher_add_classes(self,classes_id,classes):self.classes[classes_id] = classes  #{班id:班级实例}
#学校类
from config import settings
from module.classes import classes
from module.teacher import teacher
from module.student import student
from module.course import courseclass school:def __init__(self,name,addr):self.name = nameself.addr = addrself.course = {}   #{课程名:课程实例}self.teacher = {}  #{老师名:老师实例}self.classes = {}  #{班级名:班级实例}def create_classes(self,classes_id,course_obj):classes_obj = classes(classes_id,course_obj) #班级的实例self.classes[classes_id] = classes_obj  #将班级实例放入班级的字典def show_classes(self): #显示班级关联课程for key in self.classes:classes_obj = self.classes[key]print("班级:%s,关联课程:%s"%(classes_obj.id,classes_obj.course.name))def show_classes_course(self): #显示班级课程信息for key in self.classes:classes_obj = self.classes[key]course_obj = classes_obj.courseprint("班级【%s】当前课程信息:\n课程:%s,课程周期:%s,课程价格:%s"%(classes_obj.id,course_obj.name,course_obj.period, course_obj.price))def create_course(self,name,period,price): #创建课程course_obj = course(name,period,price)self.course[name] = course_objdef show_course(self): #显示课程信息for key in self.course:course_obj = self.course[key]print("课程:%s,课程周期:%s,课程价格:%s"%(course_obj.name,course_obj.period,course_obj.price))def create_teacher(self,teacher_name,teacher_salary,classes_id): #创建老师teacher_obj = teacher(teacher_name,teacher_salary)classes_obj = self.classes[classes_id]teacher_obj.teacher_add_classes(classes_id,classes_obj) #将课程关联到老师self.teacher[teacher_name] = teacher_objdef update_teacher(self,teacher_name,classes_id): #更新老师的课程信息teacher_obj = self.teacher[teacher_name]class_obj = self.classes[classes_id]teacher_obj.teacher_add_classes(classes_id,class_obj)def show_teacher(self):for key in self.teacher:teacher_obj = self.teacher[key]class_list = []for key2 in teacher_obj.classes:class_list.append(key2)print("姓名:%s,薪资:%s,授课班级:%s" % (teacher_obj.name, teacher_obj.salary,class_list))def create_student(self,name,age,classes_id):student_obj = student(name,age)class_obj = self.classes[classes_id]class_obj.course_student[name] = student_obj  #将学生对象以名字为键添加到classes下面的学生信息字典中self.classes[classes_id] = class_obj   #将新的数据更新只self.classes中def show_teacher_classesinfo(self,teacher_name):#该老师对应的实例teacher_obj = self.teacher[teacher_name]#获取老师授课班级的实例for key in teacher_obj.classes:class_obj = teacher_obj.classes[key]student_list= []for key2 in class_obj.course_student: #遍历学员信息student_list.append(key2)print("班级:%s,关联课程%s,学员:%s"%(class_obj.id,class_obj.course.name,student_list))

core:

#main
import shelve,os,sys,time
from config import settings
from module.school import school#启动Home
class home:#显示登录页面项目@classmethoddef show_home(cls):home = {'1':manage_student,'2':manage_teacher,'3':manage_school,'q':exit}while True:print("\n\033[1m\033[36m社会大学选课系统\n\033[0m""\033[4m1.学生视图\n\033[0m""\033[4m2.老师视图\n\033[0m""\033[4m3.管理员视图\n\033[0m""\033[4mq.退出系统\n\033[0m")inp = input("\033[34;0m输入访问页面id >>:\033[0m").strip()if inp in home:obj = home[inp]obj() #执行功能else:print("\033[31m输入有误!请重新输入\033[0m")continue#管理员创建学校,创建课程,创建老师,创建班级,创建学员,及查询信息信息功能
class manage_school:def __init__(self):if os.path.exists(settings.school_db+".dat"):self.school_db = shelve.open(settings.school_db)self.run_manage()self.school_db.close()else:print("初始化系统信息....")self.initialize_school()self.run_manage()self.school_db.close()def initialize_school(self): #预设创建两所学校self.school_db = shelve.open(settings.school_db)sh = school("上海","上海市")bj = school("北京","北京市")self.school_db["北京"] = bjself.school_db["上海"] = sh# self.school_db.close() 初始化后不需要关闭,run_manage()运行操作def run_manage(self):while True:# 显示已有学校schs = []for key in self.school_db:print("名称:%s  坐标:%s" % (key, self.school_db[key].addr))schs.append(key)print("\033[32m添加学校,输入#\033[5m")sch = input("\033[34;0m输入需要管理的学校名称,b.返回上一层>>:\033[0m").strip()if sch == "#":self.add_school()elif sch in schs:self.sch = sch #学校名称self.sch_obj = self.school_db[sch] #获取学校实例 {'name': '北京', 'addr': '北京市', 'course': {}, 'teacher': {}, 'classes': {}}# print(self.sch_obj.__dict__)#管理员管理操作执行,字典操作while True:print("\033[32m\n社会大学%s校区管理后台\n\033[4m""\033[4m1.添加课程 \n\033[0m""\033[4m2.添加班级 \n\033[0m""\033[4m3.添加老师 \n\033[0m""\033[4m4.查看课程 \n\033[0m""\033[4m5.查看班级 \n\033[0m""\033[4m6.查看老师 \n\033[0m""\033[4mb.返回上一层\n\033[0m""\033[4mq.退出程序 \n\033[0m"%self.sch_obj.name)operation_items = {"1":self.add_course,"2":self.add_classes,"3":self.add_teacher,"4":self.check_course,"5":self.check_classes,"6":self.check_teacher,"q":exit}oper_id = input("\033[34;0m输入操作项序号:>>\033[0m").strip()if oper_id in operation_items:func = operation_items[oper_id]func()elif oper_id =="b":breakelse:print("\033[31m输入有误,请重新输入!\033[0m")elif sch == "b":breakelse:print("\033[31m学校名称错误,请重新输入!\033[4m")def add_school(self):sch_name = input("输入学校名称:>>").strip()sch_addr = input("输入学校坐标:>>").strip()if sch_name not in self.school_db:self.school_db[sch_name] = school(sch_name,sch_addr)print("\033[36m【%s】校区创建成功!\n\033[0m"%sch_name)else:print("\033[31m【%s】学校已经存在!\n\033[4m"%sch_name)def add_course(self):course_name = input("输入课程名称:>>").strip()course_period = input("输入该课程的周期(月):>>").strip()course_price = input ("输入该课程的价格(元):>>").strip()self.sch_obj.create_course(course_name,course_period,course_price)self.school_db[self.sch]=self.sch_objprint("\033[36m【%s】课程创建成功!\n\033[0m" % course_name)def add_classes(self):sch_course = self.sch_obj.courseclasses_id = input("输入班级名称:>>").strip()course_name = input("输入课程名字:>>").strip()if sch_course:if course_name in sch_course:course_obj = sch_course[course_name]self.sch_obj.create_classes(classes_id, course_obj)self.school_db[self.sch] = self.sch_objprint("\033[36m【%s】班级创建成功!\n\033[0m" % classes_id)else:print("\033[31m该课程不存在,请创建该课程\033[4m")def add_teacher(self):teacher_name = input("输入老师名字:>>").strip()teacher_salary = input("薪水(元):>>").strip()classes_id= input("输入授课班级名称:").strip()if teacher_name not in self.sch_obj.teacher:if classes_id in self.sch_obj.classes:self.sch_obj.create_teacher(teacher_name,teacher_salary,classes_id)self.school_db[self.sch] = self.sch_objprint("\033[36m【%s】老师新增成功!\n\033[0m" % teacher_name)else:print("\033[31m输入班级不存在!\033[0m")else:print("\033[31m该老师已经存!\033[0m")def check_course(self):if not self.sch_obj.course:print("\033[31m当前无课程!\033[0m")else:print("\033[42m所有课程信息:\033[0m")for key in self.sch_obj.course:course_obj = self.sch_obj.course[key]print("课程:%s, 周期: %s月, 价格: %s元 "%(course_obj.name,course_obj.period,course_obj.price))def check_teacher(self):if not self.sch_obj.teacher:print("\033[31m当前无讲师!请添加!\033[0m")else:print("\033[42m所有老师信息:\033[0m")for key in self.sch_obj.teacher:teacher_obj = self.sch_obj.teacher[key]teacher_classes_list = []for key2 in teacher_obj.classes:d={}classes_obj = teacher_obj.classes[key2]course_name = classes_obj.course.named[key2] =course_nameteacher_classes_list.append(d)print("姓名:%s, 薪水:%s块/月,授课班级及对应课程: %s"%(teacher_obj.name,teacher_obj.salary,teacher_classes_list))#当前班级信息def check_classes(self):if not self.sch_obj.classes:print("\033[31m当前无班级,请创建班级!\033[4m")else:print("\033[42m所有班级信息:\033[0m")for key in self.sch_obj.classes:classes_obj = self.sch_obj.classes[key]for key2 in self.sch_obj.teacher:teacher_obj = self.sch_obj.teacher[key2]for key3 in teacher_obj.classes:if classes_obj.id == teacher_obj.classes[key3].id:print("班级:%s,关联课程:%s,周期:%s月,价格:%s,授课老师:%s"%(classes_obj.id,classes_obj.course.name,classes_obj.course.period,classes_obj.course.price,teacher_obj.name))breakelse:continue#学员视图,学员选择班级,学院缴费,学院注册
class manage_student:def __init__(self):if os.path.exists(settings.school_db+".dat"):self.school_db = shelve.open(settings.school_db)self.run_manage_student()self.school_db.close()else:print("\033[31m系统管理员还未创建相应的学校,课程,老师,请联系系统管理员!\033[0m")#学员注册,选课一起进行def regist_student(self):print("\n\033[34m当前校区开设课程:\33[0m")for key in self.sch_obj.classes:classes_obj = self.sch_obj.classes[key]course_obj = classes_obj.courseprint("班级:%s,课程:%s,周期:%s,价格:%s" % (key, course_obj.name, course_obj.period, course_obj.price))student_name = input ("姓名:>>").strip()student_age = input("年龄:>>").strip()classes_id = input("选择需要培训的课程对应的班级:>>").strip()if classes_id in self.sch_obj.classes:classes_obj = self.sch_obj.classes[classes_id]self.sch_obj.create_student(student_name,student_age,classes_obj.id)self.school_db[self.sch] = self.sch_obj# 提示注册成功后显示课程信息print("恭喜%s学员注册成功!\n课程信息:%s,周期:%s,价格:%s" % (student_name,classes_obj.course.name,classes_obj.course.period,classes_obj.course.price))else:print("\033[31m班级输入错误!\033[0m")#查看学员信息def check_student(self):student_name = input("\033[34;0m输入要查看的学员名字:\033[0m>>").strip()print("该学员信息:")for key in self.sch_obj.classes:classes_obj = self.sch_obj.classes[key]if student_name in classes_obj.course_student:for key2 in classes_obj.course_student:if key2 == student_name:classes_id = classes_obj.idcoures_name = classes_obj.course.namecourse_period = classes_obj.course.periodcourse_price = classes_obj.course.pricefor key4 in self.sch_obj.teacher:for key3 in self.sch_obj.teacher[key4].classes:if key3 ==classes_id:classes_teacher = self.sch_obj.teacher[key4].nameprint("\033[34m学员: %s\n班级: %s\n授课老师: %s\n课程: %s, 周期: %s月, 价格: %s元\033[0m"%(student_name,classes_id,classes_teacher,coures_name,course_period,course_price))breakelse:print("\033[31m无该学员!\033[0m")def run_manage_student(self):while True:# 显示已有学校schs = []print("\n\033[34m所有校区:\033[0m")for key in self.school_db:print("校名:%s        位置:%s" % (key, self.school_db[key].addr))schs.append(key)# print("\033[32m添加学校,输入#\033[5m")sch = input("\033[34;0m选择注册校区(b.返回上一层)>>:\033[0m").strip()if sch in schs:self.sch = sch #学校名称self.sch_obj = self.school_db[sch] #获取学校实例 {'name': '北京', 'addr': '北京市', 'course': {}, 'teacher': {}, 'classes': {}}# print(self.sch_obj.__dict__)operation_items = {"1": self.regist_student,"2": self.check_student,"q":exit}while True:print("\033[32m选择操作项>\n\033[0m""\033[4m1.注册成为学员\n\033[0m""\033[4m2.查看学员信息\n\033[0m""\033[4mb.返回上一层\n\033[0m""\033[4mq.退出程序\n\033[0m")oper = input("输入操作对应序号:>>").strip()if oper in operation_items:func = operation_items[oper]func()elif oper == "b":breakelse:print("\033[31m输入有误,请重新输入!\033[0m")elif sch == "b":breakelse:print("\033[31m输入有误,请重新输入!\033[0m")continueclass manage_teacher:def __init__(self):if os.path.exists(settings.school_db+".dat"):self.school_db = shelve.open(settings.school_db)self.run_manage_teacher()self.school_db.close()else:print("请创建相应学校课程班级!")exit()def run_manage_teacher(self):while True:# 显示已有学校schs = []print("\n\033[34m所有校区:\033[0m")for key in self.school_db:print("校名:%s      位置: %s" % (key, self.school_db[key].addr))schs.append(key)# print("\033[32m添加学校,输入#\033[5m")sch = input("\033[34;0m选择校区(b.返回上一层)>>:\033[0m").strip()if sch in schs:self.sch = sch #学校名称self.sch_obj = self.school_db[sch] #获取学校实例 {'name': '北京', 'addr': '北京市', 'course': {}, 'teacher': {}, 'classes': {}}# print(self.sch_obj.__dict__)operation_items = {"1": self.check_teacher_classes,"q": exit}while True:print("\033[32m选择操作项>\n\033[0m""\033[4m1.查看授课班级信息\n\033[0m""\033[4mb.返回上一层\n\033[0m""\033[4mq.退出程序\n\033[0m")oper = input("\033[34;0m输入操作项序号>>:\033[0m")if oper in operation_items:func = operation_items[oper]func()elif oper =="b":breakelse:print("\033[31m输入有误,请重新输入!\033[0m")elif sch == "q":breakelse:print("\033[31m输入有误,请重新输入!\033[0m")#查看该老师名下的班级信息def check_teacher_classes(self):teacher_name = input("\033[34;0m输入老师名字>>:\033[0m")print("\n\033[34m%s老师授课班级信息如下:\033[0m"%teacher_name)if teacher_name in self.sch_obj.teacher:teacher_obj = self.sch_obj.teacher[teacher_name]for key in teacher_obj.classes:classes_obj = teacher_obj.classes[key]classes_name = classes_obj.idcourse_name = classes_obj.course.namestudent = []for key2 in classes_obj.course_student:student_obj = classes_obj.course_student[key2]student_name = student_obj.namestudent.append(student_name)print("班级%s,课程: %s\n学员:%s\n"%(classes_name,course_name,student))else:print("\033[31m暂无该【%s】老师信息!\n\033[0m"%teacher_name)if __name__ == "__main__":home().show_home()

使用shelve保存数据,数据文件自动生成保存。

先执行管理员操作创建学员,老师,课程,班级后才能进行相应的老师和学生页面操作。

python3 简单选课系统相关推荐

  1. 基于列表框的简单选课窗体开发。编写Windows应用程序,设计实现一个简单选课系统,要求:(1)点击“添加”按钮,将把在第一文本框中的输入的课程名称添加到左边的列表框中,且所添加的课程不能为空,不能

    基于列表框的简单选课窗体开发.编写Windows应用程序,设计实现一个简单选课系统,要求: (1)点击"添加"按钮,将把在第一文本框中的输入的课程名称添加到左边的列表框中,且所添加 ...

  2. python最简单选课系统作业_python之路——作业:学生选课系统

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

  3. JAVA 控制台式简单学生选课系统

    学校要求做个小作业,查了好多资料都找不到能参考的,只好自己写了一套,供给需要的同学进行参考. 仅供参考 编写一个基于命令行的选课系统,系统包含一个主菜单 //1.录入课程信息(可以反复多次录入多个课程 ...

  4. 大学生数据库课程设计之学生选课系统(一个超级简单的系统)

    大学数据库课程设计–一个简单的学生选课系统 一.系统简介 一个超级简单的学生选课系统,使用Windows窗体设计界面,使用C#语言实现各种功能,数据库使用的是SQL.由于时间原因,做的非常仓促,系统中 ...

  5. Python3实现简易学生选课系统

    1.要求说明 ▶ 系统可教师学生双端登录.老师可以在该系统创建课程和给参与课程的学生打分:学生可以选择课程和查询分数以及查询学分. web页面简单实现-Django+Mysql学生选课系统/学分管理系 ...

  6. python3自学之路作业 选课系统

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

  7. 简单学生选课系统之登录界面

    图片 代码: checkcode.jsp var code ; //在全局定义验证码 //产生验证码 function createCode(){code = ""; var co ...

  8. 国科大教务选课系统课程余量监测python3脚本

    国科大教务选课系统课程余量监测python脚本 初衷: 果壳同学都知道,在国科大选课,很多课还没找到就被抢光了.所以,有一个想法,可以写一个python自动选课的脚本,到了时间自动秒选课程.可是,谁能 ...

  9. Django+Mysql学生选课系统/学分管理系统

    前言 ▶之前报名了学校Python比赛,题目很高大上,不过放心,我做的完全达不到这个深度.这个项目其实需要改进的地方还很多,不过作为简单的选课系统来说,基本功能均已实现.后续会继续完善上传到GitHu ...

最新文章

  1. 金华杭州计算机学校录取分数线,2017年浙江金华各地中考录取分数线
  2. 关于一个简易的实时内存监控系统的思维导图
  3. 第十周项目3-血型统计
  4. jQuery对象插件封装步骤
  5. SharePoint 2010 工作流解决方案:将 SharePoint Designer 可重用工作流导入 Visual Studio...
  6. 配置Django实现数据库读写分离
  7. sqlite3_finalize sqlite3_close
  8. SpringCloud工作笔记039---spring cloud、javaweb中获取request对象的几种方法
  9. 医药/医疗/互联网医疗服务平台/问诊/挂号/开药/处方/医生/医院/问诊订单管理/移动端问诊医疗系统/医生端处方开药系统/web端医药服务平台管理/axure原型/rp源文件/健康咨询/视频问诊/统计
  10. Python模拟登录的几种方法
  11. 【优化求解】基于matlab遗传算法结合粒子群算法求解单目标优化问题【含Matlab源码 1659期】
  12. floyd算法MATLAB实现
  13. linux系统怎么关闭445端口,如何关闭window 系统的445端口等方法 预防勒索病毒
  14. Spring中的@DependsOn注解
  15. NetBean 6.0初探
  16. 计算机网络掉线,电脑网络经常掉线的解决方法
  17. CQF平衡树——SBT论文——Size Balanced Tree
  18. Win10切换共享文件夹账号
  19. 【台大郭彦甫】Matlab入门教程超详细学习笔记七:数值微积分(附PPT链接)
  20. 高度近视患者担心视网膜脱落,是不是杞人忧天?

热门文章

  1. 独家 | 爱奇艺如何用大数据助力娱乐工业革命?
  2. 阿里云部署Django项目
  3. PIN PUK1
  4. 2020春招---飞鱼科技 一面面经
  5. php模拟登陆正方教务系统(2018年)
  6. GCC: 优化: xmm寄存器的使用,sprintf
  7. 用计算机娱乐教学反思,计算机教学反思
  8. Jimage - 以图搜图
  9. 腾讯企业邮箱java-收发邮件
  10. 朝鲜APT组织使用带后门IDA软件攻击安全研究人员