python【项目】:选课系统【简易版】
- 功能要求
角色:学校、学员、课程、讲师
要求:
1. 创建学校
2. 创建课程
3. 课程包含,周期,价格,通过学校创建课程
4. 通过学校创建班级, 班级关联课程、讲师
5. 创建学员时,选择学校,关联班级
5. 创建讲师角色时要关联学校,
6. 提供两个角色接口
6.1 学员视图, 可以注册, 交学费, 选择班级,
6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 创建学员的成绩
6.3 管理视图,创建讲师, 创建班级,创建课程
7. 上面的操作产生的数据都通过pickle序列化保存到文件里
8. 增加日志文件,能同时输出到控制台
9. 用户认证采用装饰
10.增加try捕捉错误信息
- 开发环境
- python 3.6.1
- PyCharm 2016.2.3
- 数据流图与业务功能图
- 主程序数据流图
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【项目】:选课系统【简易版】的更多相关文章
- Python作业-选课系统
目录 Python作业-选课系统 days6作业-选课系统: 1. 程序说明 2. 思路和程序限制 3. 选课系统程序目录结构 4. 测试帐户说明 5. 程序测试过程 title: Python作业- ...
- Python开发【项目】:选课系统-改良版
程序名称: 选课系统 角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. ...
- Python开发程序:选课系统-改良版
程序名称: 选课系统 角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. ...
- python之选课系统详解[功能未完善]
作业需求 思路:1.先写出大体的类,比如学校类,学生类,课程类-- 2.写出类里面大概的方法,比如学校类里面有创建讲师.创建班级-- 3.根据下面写出大致的代码,并实现其功能 遇到的困 ...
- python编辑选课系统
一.需求分析 1. 创建北京.上海 2 所学校 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开 3. 课程包含,周期,价格,通过学校创建课 ...
- Python作业选课系统(第六周)
作业需求: 角色:学校.学员.课程.讲师.完成下面的要求 1. 创建北京.上海 2 所学校 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开 ...
- Python 28 选课系统的讲解
1.首先我们要对每一个新的项目有一个明确的思路,脑子是好东西,但是好记性不如烂笔头,所以,要把能想到的都写下来 2.然后就是创建项目的整体结构框架,比如说:conf ( 配置文件 ) .core ( ...
- [ python ] 面向对象 - 选课系统
根据源程序进行改写: 原程序地址:http://www.cnblogs.com/lianzhilei/p/5985333.html 如有侵权立即删除. 感谢原作者将完整的代码提供参考. ...
- select 项目<选课系统>
"""1. 创建北京.上海 2 所学校 学校类对象 属性:名字,地址 行为: 2. 创建linux , python , go 3个课程 , linux\py 在北京开, ...
- 一个简单的python选课系统
下面介绍一下自己写的python程序,主要是的知识点为sys.os.json.pickle的模块应用,python程序包的的使用,以及关于类的使用. 下面是我的程序目录: bin是存放一些执行文件co ...
随机推荐
- BZOJ2595:[Wc2008]游览计划——题解(插头dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=2595 Description Input 第一行有两个整数,N和 M,描述方块的数目. 接下来 N行 ...
- python之快速排序
快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另 ...
- bzoj3748 Kwadraty
Claris 当然是要用来%的 但是,,其他dalao,,比如JL的红太阳commonc.题解能不能稍微加几句话,蒟蒻看不懂啊. 在这里解释一下,Claris的题解.(因为我弱,想了半天才明白,所以觉 ...
- 【bzoj3173】最长上升子序列
Portal --> bzoj3173 Solution 感觉自己需要智力康复qwq 首先题目给的这个序列肯定是一个\(1-n\)的排列,并且插入的顺序是从小到大 仔细思考一下会发现如果知道了最 ...
- 学习笔记:使用opencv做双目测距(相机标定+立体匹配+测距).
最近在做双目测距,觉得有必要记录点东西,所以我的第一篇博客就这么诞生啦~ 双目测距属于立体视觉这一块,我觉得应该有很多人踩过这个坑了,但网上的资料依旧是云里雾里的,要么是理论讲一大堆,最后发现还不知道 ...
- String的indexOf方法
indexOf(String.indexOf 方法)字符串的IndexOf()方法搜索在该字符串上是否出现了作为参数传递的字符串,如果找到字符串,则返回字符的起始位置 (0表示第一个字符,1表示第二个 ...
- protobuf手册
1. c++快速上手 https://developers.google.com/protocol-buffers/docs/cpptutorial 2. c++使用手册 https://develo ...
- 手脱JDPack
1.PEID查壳 JDPack 2.载入OD,入口是一个pushad入栈,可以使用ESP,下硬件访问断点,shift+F9 0040E000 > pushad ; //入口 0040E001 E ...
- 理解PV操作和信号量
对于信号量,可以认为是一个仓库,有两个概念,容量和当前的货物个数. P操作从仓库拿货,如果仓库中没有货,线程一直等待,直到V操作,往仓库里添加了货物,为了避免P操作一直等待下去,会有一个超时时间. V ...
- NOIP模拟赛15
NOIP2017金秋冲刺训练营杯联赛模拟大奖赛第一轮Day1 T1 天天去哪儿吃 直接枚举 #include<cstdio> #include<algorithm> using ...