1、老师的要求是做学校管理、学生、老师的接口,本文档,只做了学校管理的接口

2、具体要求:

角色:学校、学员、课程、讲师
要求: 1. 创建北京、上海 2 所学校
2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
3. 课程包含,周期,价格,通过学校创建课程
4. 通过学校创建班级, 班级关联课程、讲师
5. 创建学员时,选择学校,关联班级
  创建讲师角色时要关联学校,
6. 提供两个角色接口    
6.1 学员视图, 可以注册, 交学费, 选择班级,    
6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩    
6.3 管理视图,创建讲师, 创建班级,创建课程
7. 上面的操作产生的数据都通过pickle序列化保存到文件里

3、用到的知识点

类:分别定义学校、老师、学生,学校下有课程、班级、老师列表作为属性,有获取课程列表、班级列表和老师列表的方法

用户界面:根据用户身份选择不同的管理接口

pickle:用户通过程序进行的修改,通过pickle dump到文件中,学校的信息进schooldump文件,老师的进teacherdump文件,学生的进studentdump文件。用load能读出dump进去的对象,然后通过类的方法实现一些功能。

4、代码

类定义classdefine.py:

#学校类
#属性:地点,课程,班级,老师
#方法:开设课程,建立班级,招募老师
class School(object):
def __init__(self,location):
self.location=location
self.courselist=[]
self.grouplist=[]
self.teacherlist=[]
print("%s 学校成立。"%self.location) def creatcouse(self):
coname = input("请输入课程名字:")
coprice = input("请输入课程价格:")
coperiod = input("请输入课程周期:")
coobj = Course(coname, coprice, coperiod)
self.courselist.append(coobj)
return def creatteacher(self):
tname = input("请输入老师姓名:")
tage = input("请输入老师年龄:")
tgender = input("请输入老师性别:")
tobj = Teacher(tname, tgender, tage)
self.teacherlist.append(tobj)
return def creatgroup(self):
cname=input("请输入课程名字:")
gname=input("请输入班级名字:")
gteacher=input("请输入带班老师名字:")
gobj=Group(cname,gname,gteacher)
self.grouplist.append(gobj) def getcourses(self):
lenth=len(self.courselist)
if lenth==0:
print("%s学校不开设课程:"%self.location)
else:
print("%s 学校开设以下课程:" % (self.location))
i=0
while i<lenth:
print(self.courselist[i].name)
i+=1
return def getteacher(self):
lenth=len(self.teacherlist)
if lenth==0:
print("%s学校没有老师:"%self.location)
else:
print("%s 学校有以下老师:" % (self.location))
i=0
while i<lenth:
print(self.teacherlist[i].name)
i+=1
return def getgroup(self):
lenth=len(self.grouplist)
if lenth==0:
print("%s学校没有班级:"%self.location)
else:
print("%s 学校有以下班级:" % (self.location))
i=0
while i<lenth:
print(self.grouplist[i].name)
i+=1
return
#课程类
#属性:课程名字、价格、课程时长
class Course(object):
def __init__(self,name,price,period):
self.name=name
self.price=price
self.period=period
#班级类
#属性:课程名字,班级名字、带班老师名字
class Group(object):
def __init__(self,cname,gname,gteacher):
self.cname=cname
self.gname=gname
self.teacher=gteacher #人类,作为老师和学生类的基类
#属性:姓名、性别、年龄
class People(object):
def __init__(self,name,gender,age):
self.name=name
self.gender=gender
self.age=age #老师类
#属性:人的基础上增加 所属学校,可以教授的课程列表,管理的班级列表
class Teacher(People):
def __init__(self,name,gender,age):
super(Teacher,self).__init__(name,gender,age)
self.courselist=[] #学生类
#属性:人的基础上增加 所属学校,班级列表
class Student(People):
def __init__(self,name,gender,age):
super(Student,self).__init__(name,gender,age)
self.grouplist=[]

学校管理接口schoolmanage.py:

from selectsystem.classdefine.classdefine import *
import pickle
# 创建两个学校SH和BJ,分别代表上海和北京分校
SH= School("上海")
BJ = School("北京") def schoolmanage():
#学校管理视图
print("学校管理视图")
chooseshool=input("请选择您要管理的学校。\n1、上海\n2、北京\n3、退出\n")
while True:
if chooseshool=="":
schoolobj=SH
break
elif chooseshool=="":
schoolobj=BJ
break
elif chooseshool=="":
exit()
else:
chooseshool=input("请选择您要管理的学校。\n1、上海\n2、北京\n3、退出\n") while True:
choice1 = input("请选择您要做的操作。\n1、创建课程\n2、招聘教师\n3、为课程创建班级\n4、保存\n5、目前学校信息\n6、退出\n")
if choice1=="":
schoolobj.creatcouse()
continue
elif choice1=="":
schoolobj.creatteacher()
continue
elif choice1=="":
schoolobj.creatgroup()
elif choice1=="":
with open(r"C:\Users\chinalife\workspace\selectsystem\doc\schooldump", 'wb') as fd:
pickle.dump(schoolobj, fd, 0)
continue
elif choice1=='':
with open(r"C:\Users\chinalife\workspace\selectsystem\doc\schooldump", 'rb') as fd:
schoolobj=pickle.load(fd)
schoolobj.getcourses()
schoolobj.getteacher()
schoolobj.getgroup()
elif choice1=='':
break
else:
choice1 = input("请选择您要做的操作。\n1、招聘教师\n2、创建课程\n3、为课程创建班级\n4、退出\n")

主程序入口main.py:

from selectsystem.classdefine.classdefine import *
from selectsystem.code.schoolmanage import *
from selectsystem.code.teachermanage import *
from selectsystem.code.studentmanage import * role=input("Who are you?Administor, teacher or student?")
if role=="Administor":
schoolmanage()
elif role=="teacher":
teachermanage()
elif role=="student":
studentmanage()

目前老师的管理接口和学生的管理接口还没有细化,但是学校的管理接口已经做好,类似的写逻辑就可以了。

5、后续可以改进的地方

首先,主程序入口仅靠用户输入自己的身份,实属简单做法,可以将之前做的用户登录验证的功能加进来。

第二,在学校管理接口中,增加班级、关联老师,全凭输入,可以加入验证功能,保证只能在已设课程下新建班级,选择已聘用的老师,即范围限定在学校对象中的课程列表和老师列表中。即数据校验功能,防止输入不合理的数据

 

python--学校管理系统(只做了学校管理的接口)的更多相关文章

  1. [terry笔记]学校管理系统

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

  2. Asp.Net Core 项目实战之权限管理系统(6) 功能管理

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  3. python脚本实现集群检测和管理

    python脚本实现集群检测和管理 场景是这样的:一个生产机房,会有很多的测试机器和生产机器(也就是30台左右吧),由于管理较为混乱导致了哪台机器有人用.哪台机器没人用都不清楚,从而产生了一个想法-- ...

  4. python主要用来做什么

    python这门编程语言在国外极受欢迎,但在国内使用还不是极普遍. 由于python编程效率极高,现在国内的使用者也开始变得越来越多. python主要用来做什么?这个语言到底有哪些作用呢? 下面主是 ...

  5. BAT线下战争:巨额投资或培养出自己最大对手(包括美团、58、饿了么在内的公司都在计划推出自己的支付工具和金融产品,腾讯只做2不做O)

    BAT线下战争:巨额投资或培养出自己最大对手 2015年10月12日09:49   <财经>杂志    我有话说(18人参与) 收藏本文        BAT大举投资线下公司,看似咄咄逼人 ...

  6. 基于Quqrtz.NET 做的任务调度管理工具

    基于Quqrtz.NET 做的任务调度管理工具 国庆前,需求让我看了一下任务调度的数据表设计.和之前一样,有100多个字段,p1 ~ p100, 我说这是干嘛啊!按这写,写死去了! 然后在网上搜了一下 ...

  7. 学了 Python 能用来做这些!

    来源商业新知网,原标题:学了 Python 能用来做什么? 说起编程语言,Python 也许不是使用最广的,但一定是现在被谈论最多的.随着近年大数据.人工智能的兴起,Python 越来越多的出现在人们 ...

  8. 为什么学Python语言,只需四步全面了解Python语言

    为什么学Python语言,只需四步全面了解Python语言每个时代都会悄悄犒赏会选择的人,Python现在风口的语言Python--第三大主流编程语言Python , 是一种面向对象的解释型计算机程序 ...

  9. 安装python发行版本,并用conda来管理Environments,Python,packages

    简介:anaconda指的是一个开源的python发行版本,其包含了conda.Python等180多个科学包及其依赖项. 因为包含了大量的科学包,Anaconda 的下载文件比较大(约 515 MB ...

随机推荐

  1. hdu--1258--Sum It Up(Map水过)

    Sum It Up Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total S ...

  2. VS 2017开发插件

    codemaid 代码清洁工具 commentsPlus 注释以斜体方式展示,并提供额外的注释格式 viasfora 尖括号颜色设置 reshaper 必备

  3. vTPM环境部署(ubuntu)

    注:1.系统:ubuntu16.04LTS2.ISO镜像:/home/huanghaoxiang/ubuntu-server.iso3.IMG路径:/home/TPM-Machine4.Login: ...

  4. webpack入门篇--1.简单介绍

    简单介绍: webpack是一个模块打包工具,给js准备的打包工具,可以把很多的模块打包成很少的文件 目标: 1.切分依赖数,分到不同代码块里,按需加载,懒加 载 2.任何静态资源都可以被视为一个模块 ...

  5. IPV6与IPV4的区别

    IPv4协议的地址长度是32位,IPv6协议的地址长度是128位. 1.表示方式 IPv4地址表示为点分十进制格式,32位的地址分成4个8位分组,每个8位以十进制数显式,中间用点号分隔. 而IPv6采 ...

  6. asp.net core MVC 全局过滤器之ExceptionFilter异常过滤器(一)

    本系类将会讲解asp.net core MVC中的内置全局过滤器的使用,将分为以下章节 asp.net core MVC 过滤器之ExceptionFilter异常过滤器(一) asp.net cor ...

  7. .NET 体系结构(.net core、.net framework、xamarin之间的关系)

    这是一张来自官方的图. 图中.NET FRAMEWORK..NET CORE和XAMARIN是三个不同的运行时,这三个运行时在.NET STANDARD LIBRARY之上,它们都包含一些基础的组件, ...

  8. Yii2 在模块modules间跳转时,url自动加模块名

    如目的地址product/detail, 当前模块是admin, 访问时如果目的url'product/detail',会变成'admin/product/detail'. 解决方法:url改成'/p ...

  9. DRAM(MT48LC8M32B2)学习

    Micron公司,型号为MT48LC8M32B2的DRAM,其86PIN的 TSOP封装引脚定义 Micron公司,型号为MT48LC8M32B2的DRAM,其86PIN的 TSOP封装引脚定义如上图 ...

  10. JDBC获取数据库Connection的工具抽取

    使用JDBC获取数据库的连接,大字分为三个步骤 1.获取驱动包名,定义URL,database_username,database_password 2.获取Connection对象 3.利用Conn ...