• 功能要求
角色:学校、学员、课程、讲师
要求:
1. 创建学校
2. 创建课程
3. 课程包含,周期,价格,通过学校创建课程
4. 通过学校创建班级, 班级关联课程、讲师
5. 创建学员时,选择学校,关联班级
5. 创建讲师角色时要关联学校,
6. 提供两个角色接口
6.1 学员视图, 可以注册, 交学费, 选择班级,
6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 创建学员的成绩
6.3 管理视图,创建讲师, 创建班级,创建课程
7. 上面的操作产生的数据都通过pickle序列化保存到文件里
8. 增加日志文件,能同时输出到控制台
9. 用户认证采用装饰
10.增加try捕捉错误信息
  • 开发环境
  1. python 3.6.1
  2. PyCharm 2016.2.3
  • 数据流图与业务功能图
  1. 主程序数据流图  

 

   2.业务功能图

  • 目录结构


  • 程序设计

 #!/usr/bin/env python
#coding=utf-8
__author__ = 'yinjia' import os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) BASE_ADMIN_DIR = os.path.join(BASE_DIR, "db", "admin") BASE_STUDENTS_DIR = os.path.join(BASE_DIR, "db", "students") BASE_TEACHER_DIR = os.path.join(BASE_DIR,"db","teacher") TEACHER_DB_DIR = os.path.join(BASE_DIR, "db", "teacher_list") COURSE_DB_DIR = os.path.join(BASE_DIR, "db", "course_list") SHOOL_DB_DIR = os.path.join(BASE_DIR,"db", "shool_list") STUDENTS_DB_DIR = os.path.join(BASE_DIR,"db", "students_list") SCHOOLCLASS_DB_DIR = os.path.join(BASE_DIR,'db','schoolclass_list') SCORE_DB_DIR = os.path.join(BASE_DIR,'db','score_list') BASE_LOG_DIR = os.path.join(BASE_DIR,'log','AAP_')

settings.py


 #!/usr/bin/env python
#coding=utf-8
__author__ = 'yinjia' import os,sys,time,logging,pickle
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
from lib import models
from config import settings
from lib.models import *
from bin import students
from bin import admin
from bin import teacher def Auth(type):
"""
统一入口用户注册、认证
:param type: 判断属于哪认证类型:students、admin、teacher
:return: 返回认证结果
"""
def inner(func):
def wrapper():
logger = Logger('auth').getlog()
auth_msg = ["注册", "登录"]
if type == "students_auth":
func()
for x, y in enumerate(auth_msg, 1):
print("%s%s%s" % (x, ".", y))
while True:
inp = str(input("\33[35;0m请按序号选择[输入q|Q退出]:\33[0m")).strip().lower()
if inp == "":
use = str(input("\33[36;0m请输入用户名:\33[0m")).strip()
pwd = str(input("\33[36;0m请输入密码:\33[0m")).strip()
obj = models.Students()
if obj.register(use,pwd):
logger.error("[用户名]" + use + ":不能注册,当前已存在账户!")
else:
logger.info("[用户名]" + use + ":注册成功")
elif inp == "":
use = str(input("\33[36;0m请输入用户名:\33[0m")).strip()
pwd = str(input("\33[36;0m请输入密码:\33[0m")).strip()
if os.path.exists(os.path.join(settings.BASE_STUDENTS_DIR, use)):
try:
students_obj = pickle.load(open(os.path.join(settings.BASE_STUDENTS_DIR,use),'rb'))
except IOError as e:
logger.error(e)
if students_obj.login(use,pwd):
logger.info("[用户名]" + use + ":登录成功!")
students.main(students_obj)
else:
logger.error("[用户]" + use + ":密码错误!")
else:
logger.error("[用户名]" + use + "不存在!")
elif inp == "q":
print("\33[32;0m谢谢您的光临,再见!\33[0m".center(40, "*"))
sys.exit()
else:
logger.error("无效选择!") elif type == "admin_auth":
func()
for x, y in enumerate(auth_msg, 1):
print("%s%s%s" % (x, ".", y))
while True:
inp = str(input("\33[35;0m请按序号选择[输入q|Q退出]:\33[0m")).strip().lower()
if inp == "":
use = str(input("\33[36;0m请输入用户名:\33[0m")).strip()
pwd = str(input("\33[36;0m请输入密码:\33[0m")).strip()
obj = models.Admin()
if obj.register(use,pwd):
logger.error("[用户名]" + use + ":不能注册,当前已存在账户!")
else:
logger.info("[用户名]" + use + ":注册成功")
elif inp == "":
use = str(input("\33[36;0m请输入用户名:\33[0m")).strip()
pwd = str(input("\33[36;0m请输入密码:\33[0m")).strip()
if os.path.exists(os.path.join(settings.BASE_ADMIN_DIR, use)):
try:
admin_obj = pickle.load(open(os.path.join(settings.BASE_ADMIN_DIR,use),'rb'))
except IOError as e:
logger.error(e)
if admin_obj.login(use,pwd):
logger.info("[用户名]" + use + ":登录成功")
admin.main(admin_obj)
else:
logger.error("[用户名]" + use + ":密码错误!")
else:
logger.error("[用户]" + use + "不存在!") elif inp == "q":
print("\33[32;0m谢谢您的光临,再见!\33[0m".center(40, "*"))
sys.exit()
else:
logger.error("无效选择!") elif type == "teacher_auth":
func()
for x, y in enumerate(auth_msg, 1):
print("%s%s%s" % (x, ".", y))
while True:
inp = str(input("\33[35;0m请按序号选择[输入q|Q退出]:\33[0m")).strip().lower()
if inp == "":
use = str(input("\33[36;0m请输入用户名:\33[0m")).strip()
pwd = str(input("\33[36;0m请输入密码:\33[0m")).strip()
obj = models.TeacherAuth()
if obj.register(use,pwd):
logger.error("[用户名]" + use + ":不能注册,当前已存在账户!")
else:
logger.info("[用户名]" + use + ":注册成功")
elif inp == "":
use = str(input("\33[36;0m请输入用户名:\33[0m")).strip()
pwd = str(input("\33[36;0m请输入密码:\33[0m")).strip()
if os.path.exists(os.path.join(settings.BASE_TEACHER_DIR, use)):
try:
teacher_obj = pickle.load(open(os.path.join(settings.BASE_TEACHER_DIR,use),'rb'))
except IOError as e:
logger.error(e)
if teacher_obj.login(use,pwd):
logger.info("[用户名]" + use + ":登录成功")
teacher.main(teacher_obj)
else:
logger.error("[用户名]" + use + ":密码错误!")
else:
logger.error("[用户名]" + use + "不存在!") elif inp == "q":
print("\33[32;0m谢谢您的光临,再见!\33[0m".center(40, "*"))
sys.exit()
else:
logger.error("无效选择!")
else:
pass
return wrapper
return inner @Auth(type="students_auth")
def students_auth():
print("\33[32;0m学生登录认证\33[0m".center(40,"*"))
return True @Auth(type="admin_auth")
def admin_auth():
print("\33[32;0m管理员登录认证\33[0m".center(40,"*"))
return True @Auth(type="teacher_auth")
def teacher_auth():
print("\33[32;0m讲师登录认证\33[0m".center(40,"*"))
return True def main():
main_msg = ["学生视图", "讲师视图", "管理视图","退出"]
print("\33[32;0m学员选课系统\33[0m".center(40, "*"))
for i, j in enumerate(main_msg, 1):
print("%s%s%s" % (i, ".", j))
while True:
inp = str(input("\33[35;0m请按序号选择:\33[0m")).strip()
if inp == "":
students_auth()
elif inp == "":
teacher_auth()
elif inp == "":
admin_auth()
elif inp == "":
print("\33[32;0m谢谢您的光临,再见!\33[0m".center(40, "*"))
sys.exit()
else:
print("无效选择!")

auth.py

 #!/usr/bin/env python
#coding=utf-8
__author__ = 'yinjia' import os,sys,time,logging,pickle
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
from lib import models
from config import settings
from lib.models import *
from bin import auth logger = Logger('admin').getlog() def create_shools(admin_obj):
"""
创建学校
:param admin_obj:
:return:
"""
school_list = []
while True:
school_name = str(input("\33[36;0m请输入校区名[输入q退出]:\33[0m")).strip().lower()
if school_name == "q":
break
school_addr = str(input("\33[36;0m请输入校区地址:\33[0m")).strip()
obj = models.School(school_name,school_addr,admin_obj)
school_list.append(obj)
if os.path.exists(settings.SHOOL_DB_DIR):
try:
exists_list = pickle.load(open(settings.SHOOL_DB_DIR,'rb'))
school_list.extend(exists_list)
except IOError as e:
logger.error(e)
try:
pickle.dump(school_list,open(settings.SHOOL_DB_DIR,'wb'))
except IOError as e:
logger.error(e) def create_schoolclass(admin_obj):
"""
创建班级
:param admin_obj:
:return:
"""
schoolclass_list = []
print(' 序号 校区 校址 创建时间 管理员')
print('------------------------------------------------------')
school_list = pickle.load(open(settings.SHOOL_DB_DIR, 'rb'))
for num, item in enumerate(school_list, 1):
print("%3s%5s%5s%25s%10s" % (num, item.school_name, item.school_addr,
item.create_time, item.create_admin.username))
while True:
schoolclass_name = str(input("\33[36;0m请输入班级名[输入q退出]:\33[0m")).strip().lower()
if schoolclass_name == "q":
break
school_num = str(input("\33[36;0m请序号选择校区:\33[0m")).strip()
obj = models.SchoolClass(school_list[int(school_num) - 1],schoolclass_name,admin_obj)
schoolclass_list.append(obj)
if os.path.exists(settings.SCHOOLCLASS_DB_DIR):
try:
exists_list = pickle.load(open(settings.SCHOOLCLASS_DB_DIR,'rb'))
schoolclass_list.extend(exists_list)
except IOError as e:
logger.error(e)
try:
pickle.dump(schoolclass_list,open(settings.SCHOOLCLASS_DB_DIR,'wb'))
except IOError as e:
logger.error(e) def create_teacher(admin_obj):
"""
创建讲师
:param admin_obj:
:return:
"""
teacher_list = []
print(' 序号 校区 班级 创建时间 管理员')
print('------------------------------------------------------')
school_list = pickle.load(open(settings.SCHOOLCLASS_DB_DIR, 'rb'))
for num, item in enumerate(school_list, 1):
print("%3s%5s%8s%25s%10s" % (num, item.schoolBJ.school_name, item.schoolclass_name,
item.create_time, item.create_admin.username))
while True:
teacher_name = str(input("\33[36;0m请输入讲师姓名[输入q退出]:\33[0m")).strip().lower()
if teacher_name == "q":
break
age = str(input("\33[36;0m请输入讲师年龄:\33[0m")).strip()
salary = str(input("\33[36;0m请输入讲师工资:\33[0m")).strip()
num = str(input("\33[36;0m请序号选择班级:\33[0m")).strip()
obj = models.Teacher(school_list[int(num) - 1],school_list[int(num) - 1],teacher_name,age,salary,admin_obj)
teacher_list.append(obj)
if os.path.exists(settings.TEACHER_DB_DIR):
try:
exists_list = pickle.load(open(settings.TEACHER_DB_DIR,'rb'))
teacher_list.extend(exists_list)
except IOError as e:
logger.error(e)
try:
pickle.dump(teacher_list,open(settings.TEACHER_DB_DIR,'wb'))
except IOError as e:
logger.error(e)
def create_course(admin_obj):
"""
创建课程
:param admin_obj:
:return:
"""
course_list = []
print(' 序号 校区 班级 讲师 年龄 工资 创建时间 管理员')
print('---------------------------------------------------------------------------')
teacher_list = pickle.load(open(settings.TEACHER_DB_DIR, 'rb'))
for num, item in enumerate(teacher_list, 1):
print("%3s%5s%8s%5s%4s%11s%23s%10s" % (
num, item.schoolname.schoolBJ.school_name, item.schoolclass.schoolclass_name,
item.teacher_name, item.age, item.salary,
item.create_time, item.create_admin.username))
while True:
course_name = str(input("\33[36;0m请输入课程名[输入q退出]:\33[0m")).strip().lower()
if course_name == "q":
break
course_cost = str(input("\33[36;0m请输入课时费:\33[0m")).strip()
course_cycle = str(input("\33[36;0m请输入课程周期:\33[0m")).strip()
num = str(input("\33[36;0m请序号选择校区:\33[0m")).strip()
obj = models.Course(teacher_list[int(num) - 1], teacher_list[int(num) - 1],
teacher_list[int(num) - 1],course_name,course_cost,course_cycle, admin_obj)
course_list.append(obj)
if os.path.exists(settings.COURSE_DB_DIR):
try:
exists_list = pickle.load(open(settings.COURSE_DB_DIR, 'rb'))
course_list.extend(exists_list)
except IOError as e:
logger.error(e)
try:
pickle.dump(course_list, open(settings.COURSE_DB_DIR, 'wb'))
except IOError as e:
logger.error(e) def main(admin_obj):
logger = Logger('auth').getlog()
while True:
print("\33[32;0m综合管理中心\33[0m".center(40, "*"))
msg = ["创建校区", "查看校区详情","创建班级", "查看班级详情","创建讲师", '查看讲师详情',"创建课程","查看课程详情"]
for x, y in enumerate(msg, 1):
print("%s%s%s" % (x, ".", y))
inp = str(input("\33[35;0m请按序号选择[输入q|Q退出]:\33[0m")).strip().lower()
if inp == '':
create_shools(admin_obj)
elif inp == '':
print(' 序号 校区 校址 创建时间 管理员')
print('------------------------------------------------------')
info_list = pickle.load(open(settings.SHOOL_DB_DIR, 'rb'))
for num, item in enumerate(info_list, 1):
print("%3s%5s%5s%25s%10s" % (num, item.school_name, item.school_addr,
item.create_time, item.create_admin.username))
input("\33[35;0m>>>>>>>>>按任意键退出...\33[0m")
elif inp == '':
create_schoolclass(admin_obj)
elif inp == '':
print(' 序号 校区 班级 创建时间 管理员')
print('------------------------------------------------------')
school_list = pickle.load(open(settings.SCHOOLCLASS_DB_DIR, 'rb'))
for num, item in enumerate(school_list, 1):
print("%3s%5s%8s%25s%10s" % (num, item.schoolBJ.school_name, item.schoolclass_name,
item.create_time, item.create_admin.username))
input("\33[35;0m>>>>>>>>>按任意键退出...\33[0m")
elif inp == '':
create_teacher(admin_obj)
elif inp == '':
print(' 序号 校区 班级 讲师 年龄 工资 创建时间 管理员')
print('---------------------------------------------------------------------------')
teacher_list = pickle.load(open(settings.TEACHER_DB_DIR, 'rb'))
for num, item in enumerate(teacher_list, 1):
print("%3s%5s%8s%5s%4s%11s%23s%10s" % (num, item.schoolname.schoolBJ.school_name, item.schoolclass.schoolclass_name,
item.teacher_name, item.age, item.salary,
item.create_time, item.create_admin.username))
input("\33[35;0m>>>>>>>>>按任意键退出...\33[0m")
elif inp == '':
create_course(admin_obj)
elif inp == '':
print(' 序号 校区 班级 讲师 课程名 课时费 周期 创建时间 管理员')
print('--------------------------------------------------------------------------------------')
teacher_list = pickle.load(open(settings.COURSE_DB_DIR, 'rb'))
for num, item in enumerate(teacher_list, 1):
print("%3s%5s%8s%5s%8s%8s%9s%23s%10s" % (
num, item.course_schoolname.schoolname.schoolBJ.school_name, item.course_schoolclass.schoolclass.schoolclass_name,
item.course_teacher_name.teacher_name,
item.course_name,item.cost,item.cycle,item.create_time, item.create_admin.username))
input("\33[35;0m>>>>>>>>>按任意键退出...\33[0m")
elif inp == 'q':
print("\33[32;0m谢谢您的光临,再见!\33[0m".center(40, "*"))
sys.exit()
else:
logger.error("无效选择!") def register():
auth.main()

admin.py

 #!/usr/bin/env python
#coding=utf-8
__author__ = 'yinjia' import os,sys,time,logging,pickle
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
from lib import models
from config import settings
from lib.models import *
from bin import auth,teacher
logger = Logger('admin').getlog() def select_course(students_obj):
"""
选择课程
:param students_obj:
:return:
"""
print(' 序号 校区 班级 讲师 课程名 课时费 周期 ')
print('-------------------------------------------------------')
try:
course_list = pickle.load(open(settings.COURSE_DB_DIR, 'rb'))
except IOError as e:
logger.error(e)
else:
for num, item in enumerate(course_list, 1):
print("%3s%5s%8s%5s%8s%8s%9s" % (
num, item.course_schoolname.schoolname.schoolBJ.school_name,
item.course_schoolclass.schoolclass.schoolclass_name,
item.course_teacher_name.teacher_name,
item.course_name, item.cost, item.cycle))
while True:
num = str(input("\33[36;0m请序号选择课程名[输入q退出]:\33[0m")).strip().lower()
if num == "q":
break
select_course_obj = course_list[int(num) - 1]
students_obj.course_list.append(select_course_obj)
try:
pickle.dump(students_obj, open(os.path.join(settings.BASE_STUDENTS_DIR,students_obj.username),'wb'))
except IOError as e:
logger.error(e) def course_info(students_obj):
"""
查看选课信息
:param students_obj:
:return:
"""
print(' 序号 校区 班级 讲师 课程名 课时费 周期 ')
print('-------------------------------------------------------')
for num, item in enumerate(students_obj.course_list, 1):
print("%3s%5s%8s%5s%8s%8s%9s" % (
num, item.course_schoolname.schoolname.schoolBJ.school_name,
item.course_schoolclass.schoolclass.schoolclass_name,
item.course_teacher_name.teacher_name,
item.course_name, item.cost, item.cycle))
input("\33[35;0m>>>>>>>>>按任意键退出...\33[0m") def result_info(students_obj):
"""
查看学习详情
:param students_obj:
:return:
"""
print(' 学员 校区 班级 课程 成绩')
print('---------------------------------')
try:
students_dic = pickle.load(open(settings.SCORE_DB_DIR, 'rb'))
except IOError as e:
logger.error(e)
else:
for i, item in students_dic.items():
for x, y in item.score_schoolname.items():
print("%3s%6s%9s%5s%5s" % (x.username, y.course_schoolname.schoolname.schoolBJ.school_name,
y.course_schoolclass.schoolclass.schoolclass_name, y.course_name, item.score))
input("\33[35;0m>>>>>>>>>按任意键退出...\33[0m") def study(students_obj):
"""
学员上课
:param students_obj:
:return:
"""
print(' 序号 校区 班级 讲师 课程名 课时费 周期 ')
print('-------------------------------------------------------')
for num, item in enumerate(students_obj.course_list, 1):
print("%3s%5s%8s%5s%8s%8s%9s" % (
num, item.course_schoolname.schoolname.schoolBJ.school_name,
item.course_schoolclass.schoolclass.schoolclass_name,
item.course_teacher_name.teacher_name,
item.course_name, item.cost, item.cycle))
while True:
num = str(input("\33[36;0m请按序号选择课程上课[输入q退出]:\33[0m")).strip().lower()
if num == "q":
break
obj = students_obj.course_list[int(num) - 1]
if students_obj in students_obj.study_dict.keys():
students_obj.study_dict[students_obj].append(obj)
else:
students_obj.study_dict[students_obj] = obj
try:
pickle.dump(students_obj.study_dict, open(settings.STUDENTS_DB_DIR, 'wb'))
except IOError as e:
logger.error(e) def main(students_obj):
while True:
print("\33[32;0m学员学习中心\33[0m".center(40, "*"))
msg = ['选课','上课','查看选课信息','查看学习成绩']
for x, y in enumerate(msg, 1):
print("%s%s%s" % (x, ".", y))
inp = str(input("\33[35;0m请按序号选择[输入q|Q退出]:\33[0m")).strip().lower()
if inp == '':
select_course(students_obj)
elif inp == '':
study(students_obj)
elif inp == '':
course_info(students_obj)
elif inp == '':
result_info(students_obj)
elif inp == 'q':
print("\33[32;0m谢谢您的光临,再见!\33[0m".center(40, "*"))
sys.exit()
else:
logger.error("无效选择!") def register():
auth.main()

students.py

 #!/usr/bin/env python
#coding=utf-8
__author__ = 'yinjia' import os,sys,time,logging,pickle
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
from lib import models
from config import settings
from lib.models import *
from bin import auth
logger = Logger('admin').getlog() def Create_Score(teacher_obj):
score_dic = {}
print(' 学员 校区 班级 课程 ')
print('------------------------------')
try:
students_dic = pickle.load(open(settings.STUDENTS_DB_DIR, 'rb'))
except IOError as e:
logger.error(e)
else:
for i, item in students_dic.items():
print(i.username,item.course_schoolname.schoolname.schoolBJ.school_name,
item.course_schoolclass.schoolclass.schoolclass_name,
item.course_name)
while True:
students_name = str(input("\33[36;0m请输入学员[输入q退出]:\33[0m")).strip()
if students_name == "q":
break
score = str(input("\33[36;0m请输入学员成绩:\33[0m")).strip()
obj = models.Score(students_name,students_dic,students_dic,students_dic,score) if teacher_obj in score_dic.keys():
score_dic[teacher_obj].append(obj)
else:
score_dic[teacher_obj] = obj
if os.path.exists(settings.SCORE_DB_DIR):
try:
exists_dic = pickle.load(open(settings.SCORE_DB_DIR, 'rb'))
except IOError as e:
logger.error(e)
else:
if teacher_obj in exists_dic.keys():
score_dic[teacher_obj].append(exists_dic)
try:
pickle.dump(score_dic, open(settings.SCORE_DB_DIR, 'wb'))
except IOError as e:
logger.error(e) def show_info(teacher_obj):
print(' 学员 校区 班级 课程 成绩')
print('---------------------------------')
try:
students_dic = pickle.load(open(settings.SCORE_DB_DIR, 'rb'))
except IOError as e:
logger.error(e)
else:
for i, item in students_dic.items():
for x,y in item.score_schoolname.items():
print("%3s%6s%9s%5s%5s" % (x.username,y.course_schoolname.schoolname.schoolBJ.school_name,
y.course_schoolclass.schoolclass.schoolclass_name,y.course_name,item.score))
input("\33[35;0m>>>>>>>>>按任意键退出...\33[0m") def main(teacher_obj):
while True:
print("\33[32;0m学员学习中心\33[0m".center(40, "*"))
msg = ['创建学员成绩','查看学员信息']
for x, y in enumerate(msg, 1):
print("%s%s%s" % (x, ".", y))
inp = str(input("\33[35;0m请按序号选择[输入q|Q退出]:\33[0m")).strip().lower()
if inp == '':
Create_Score(teacher_obj)
elif inp == '':
show_info(teacher_obj)
elif inp == 'q':
print("\33[32;0m谢谢您的光临,再见!\33[0m".center(40, "*"))
sys.exit()
else:
logger.error("无效选择!") def register():
auth.main()

teacher.py

  • 类模板定义

  • 效果演示



python【项目】:选课系统【简易版】的更多相关文章

  1. Python作业-选课系统

    目录 Python作业-选课系统 days6作业-选课系统: 1. 程序说明 2. 思路和程序限制 3. 选课系统程序目录结构 4. 测试帐户说明 5. 程序测试过程 title: Python作业- ...

  2. Python开发【项目】:选课系统-改良版

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

  3. Python开发程序:选课系统-改良版

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

  4. python之选课系统详解[功能未完善]

    作业需求 思路:1.先写出大体的类,比如学校类,学生类,课程类--   2.写出类里面大概的方法,比如学校类里面有创建讲师.创建班级-- 3.根据下面写出大致的代码,并实现其功能       遇到的困 ...

  5. python编辑选课系统

    一.需求分析 1. 创建北京.上海 2 所学校 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开 3. 课程包含,周期,价格,通过学校创建课 ...

  6. Python作业选课系统(第六周)

    作业需求: 角色:学校.学员.课程.讲师.完成下面的要求 1. 创建北京.上海 2 所学校 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开 ...

  7. Python 28 选课系统的讲解

    1.首先我们要对每一个新的项目有一个明确的思路,脑子是好东西,但是好记性不如烂笔头,所以,要把能想到的都写下来 2.然后就是创建项目的整体结构框架,比如说:conf ( 配置文件 ) .core (  ...

  8. [ python ] 面向对象 - 选课系统

    根据源程序进行改写:    原程序地址:http://www.cnblogs.com/lianzhilei/p/5985333.html  如有侵权立即删除.    感谢原作者将完整的代码提供参考.  ...

  9. select 项目<选课系统>

    """1. 创建北京.上海 2 所学校 学校类对象 属性:名字,地址 行为: 2. 创建linux , python , go 3个课程 , linux\py 在北京开, ...

  10. 一个简单的python选课系统

    下面介绍一下自己写的python程序,主要是的知识点为sys.os.json.pickle的模块应用,python程序包的的使用,以及关于类的使用. 下面是我的程序目录: bin是存放一些执行文件co ...

随机推荐

  1. 【JavaScript】基本类型和引用类型的值、引用类型

    一.前言        接着上一篇继续记笔记 二.内容         动态的属性 var person = new Object(); person.name = "Nicholas&qu ...

  2. MyBatis之自查询,使用 递归实现 N级联动

    A:首先先看下一个简单的面试题 斐波那契数列 计算数组{1,1,2,3,5,8.......} 第30位值 规律:1 1 从第三项开始,每一项都是前两项之和 有两种实现方式 第一种方式: public ...

  3. 解题:ZJOI 2006 游戏排名系统

    题面 跟i207M学了学重载运算符后找前驱后继,然后就是练练无旋树堆 #include<map> #include<cstdio> #include<string> ...

  4. 【loj2472】IIIDX

    Portal --> loj2472 Solution 感觉是一道很有意思的贪心题啊ovo(想了一万个假做法系列==) 比较直观的想法是,既然一个数\(i\)只会对应一个\(\lfloor\fr ...

  5. Android NDK 编译选项设置[zhuan]

    http://crash.163.com/#news/!newsId=24 在Android NDK开发中,有两个重要的文件:Android.mk和Application.mk,各尽其责,指导编译器如 ...

  6. 音视频处理之FFmpeg程序的介绍与使用20180302

    一.FFMPEG程序介绍与使用 主要介绍一下ffmpeg工程包含的三个exe的使用方法. 1. FFMPEG程序介绍 1.1.下载 ffmpeg的官方网站是:http://ffmpeg.org/ 下载 ...

  7. php优秀网摘

    1.thinkphp的目录结构设计经验总结 说明:thinkphp3.2.3对类没有深刻的认识,对项目规模和架构有很糟糕的影响.这里写的目录结构和设计模式相当于对3.2添加了面向对象架构.第二个链接是 ...

  8. Kubernetes - Deploy Guestbook example on Kubernetes

    This scenario explains how to launch a simple, multi-tier web application using Kubernetes and Docke ...

  9. bzoj 2844: albus就是要第一个出场 高斯消元

    LINK 题意:看题目不如看样例解释.给出有n个数的集合,对这些子集中的数求异或,升序统计所有子集得到的数(重复会被计入),询问一个数x,问这个数出现的第一个位置 思路:在这里要求一个所有可能出现的异 ...

  10. PowerShell入门

    最近需要写个Windows的脚本,以前一直使用cmd.exe来写批处理脚本,这次接触到了PowerShell,准备把学习过程中学到的知识点整理在这里: 相关文章: 1.https://www.cnbl ...