python基础-10 程序目录结构 学生选课系统面向对象练习

时间:2023-03-09 06:05:05
python基础-10 程序目录结构 学生选课系统面向对象练习

一 程序目录结构

1 bin文件夹 二进制文件、代码程序  2 conf 配置文件  3 帮助文档  4 头文件库文件等

二 学生选课系统部分代码 未完待续

1 包内的__init__.py文件
在包下的脚本内 导入包内 的其他包下的文件也叫模块,在2.7下导入没有__init__.py 会报错。在3.5有没有这个文件以后没有影响了。 讲解:
1 老师类 : 需要有添加时间 加工资 减工资
2 管理员类: 封装管理员用户名密码

bin 目录

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
import os, sys, pickle sys.path.append(os.path.dirname(os.path.dirname(__file__)))
from lib.models import *
from conf import settings def create_curriculum(admin_obj):
curriculum_list = []
if os.path.exists(settings.Teacher_dir):
teacher_show = pickle.load(open(settings.Teacher_dir, "rb"))
for i, item in enumerate(teacher_show, 1): # 从1开始
print(i, item.teacher_name)
while True:
curriculum_name = input("请输入课程名(q退出):")
if curriculum_name == "q":
break
curriculum_cost = input("请输入费用:")
curriculum_teacher = input("请输入老师编号:")
curriculum_obj = Curriculum(curriculum_name, curriculum_cost,
teacher_show[int(curriculum_teacher) - 1].teacher_name, admin_obj)
curriculum_list.append(curriculum_obj)
if os.path.exists(settings.Curriculum_dir):
exist_curriculum = pickle.load(open(settings.Curriculum_dir, "rb"))
curriculum_list.append(exist_curriculum)
pickle.dump(curriculum_list, open(settings.Curriculum_dir, "wb"))
else:
print("还没有老师请先创建老师") def create_teacher(admin_obj):
teacher_list = []
while True:
name = input("教师名字:(q退出)")
if name == "q":
break
age = input("年龄")
teacher_obj = Teacher(name, age, admin_obj) # 创建老师
teacher_list.append(teacher_obj)
if os.path.exists(settings.Teacher_dir):
exists_teacher = pickle.load(open(settings.Teacher_dir, "rb"))
teacher_list.extend(exists_teacher)
pickle.dump(teacher_list, open(settings.Teacher_dir, "wb")) def login(user, pwd):
path = os.path.join(settings.Base_admin_dir, user) # 用户名创建一个路径
if os.path.exists(path): # 判断路径是否存在,存在就是说明用户正确。
admin_obj = pickle.load(open(path, "rb")) # 获取用户名对应的对象。
if admin_obj.login(user, pwd): # 执行这个对象的登陆方法
print("登录成功")
while True:
inp = input("1、创建课程。2、创建老师(其他退出)\n>>>")
if inp == "":
create_curriculum(admin_obj)
continue
elif inp == "":
create_teacher(admin_obj)
continue
else:
break
else:
print("密码错误")
else:
print("账号不存在") def register(user, pwd):
admin_obj = Admin()
if admin_obj.register(user, pwd):
print("管理员注册成功")
else:
print("管理员已存在") def main():
inp = input("管理员1、登陆。2、注册。(其他退出)\n>>>")
user = input("账号:")
pwd = input("密码:")
if inp == "":
login(user, pwd)
elif inp == "":
register(user, pwd)
else:
pass if __name__ == "__main__":
main()

administrator.py

 #!/usr/bin/env python
# _*_ coding:utf-8 _*_
import pickle, os, sys sys.path.append(os.path.dirname(os.path.dirname(__file__)))
from lib.models import *
from conf import settings def login(user, pwd):
student_path = os.path.join(settings.Student_dir, user)
if os.path.exists(student_path):
student_obj = pickle.load(open(student_path, "rb"))
if student_obj.login(user, pwd):
print("登录成功")
while True:
inp = input("1、上课。2、选课。3、查看课表。(其他退出)")
if inp == "":
study_curriculum(student_obj)
continue
elif inp == "":
select_curriculum(student_obj)
continue
elif inp == "":
curriculum_info(student_obj)
continue
else:
break
else:
print("登录失败")
else:
print("学生账号不存在") def register(user, pwd):
student_obj = Student() if student_obj.register(user, pwd):
print("学生注册成功")
else:
print("学生已存在") def curriculum_info(student_obj):
print("已选课程信息:")
if student_obj.curriculum:
for i in student_obj.curriculum:
print(i.curriculum_name, i.curriculum_teacher, i.curriculum_cost)
else:
print("课表为空")
print("已上课表信息:")
if student_obj.study:
for i in student_obj.study:
print(i.curriculum_name, str(student_obj.study[i]) + "次")
pass
else:
print("已上课表为空") def study_curriculum(student_obj): for i, item in enumerate(student_obj.curriculum, 1):
print(i, item.curriculum_name, item.curriculum_teacher, item.curriculum_cost)
while True:
inp = input("输入上课序号:(q退出)")
if inp == "q":
break
else:
if student_obj.curriculum_study(student_obj.curriculum[int(inp) - 1]):
print("上课成功")
continue
else:
print("还没选课")
continue
pickle.dump(student_obj, open(os.path.join(settings.Student_dir,student_obj.username), "wb")) def select_curriculum(student_obj):
print("所有课程")
curriculum_obj = pickle.load(open(settings.Curriculum_dir, "rb"))
for i, item in enumerate(curriculum_obj, 1):
print(str(i) + ":", item.curriculum_name, item.curriculum_cost, item.curriculum_teacher)
while True:
inp = input("请输入选课序号:(q退出)")
if inp == "q":
break
else:
select_curriculum_obj = curriculum_obj[int(inp) - 1]
if student_obj.select_curriculum(select_curriculum_obj):
print("选课成功")
continue
else:
print("已有课程,不用在选")
pickle.dump(student_obj, open(os.path.join(settings.Student_dir,student_obj.username), "wb")) def main():
inp = input("学生 1、登录。2、注册(任意推出)\n>>>")
user = input("账号:")
pwd = input("密码:")
if inp == "":
login(user, pwd)
elif inp == "":
register(user, pwd)
else:
pass if __name__ == "__main__":
main()

student.py

conf目录

 import os

 Base_dir = os.path.dirname(os.path.dirname(__file__))
Base_admin_dir = os.path.join(Base_dir, "db", "admin")
Teacher_dir = os.path.join(Base_dir, "db", "teacher")
Curriculum_dir = os.path.join(Base_dir, "db", "curriculum")
Student_dir = os.path.join(Base_dir, "db", "student")

settings.py

db目录

管理员目录 存放密码文件 admin

学生目录 存放密码文件 student

lib 目录

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
import pickle, os, time
from conf import settings class Admin:
"""
管理员类,注册、登陆。
""" def __init__(self):
self.username = None
self.password = None def register(self, name, pwd):
self.username = name
self.password = pwd
path = os.path.join(settings.Base_admin_dir, self.username)
if os.path.exists(path):
return False
else: pickle.dump(self, open(path, 'xb')) # xb如果没有就新建一个
return True def login(self, name, pwd):
if name == self.username and pwd == self.password:
return True
else:
return False class Student:
"""
管理员类,注册、登陆。
""" def __init__(self):
self.username = None
self.password = None self.curriculum = []
self.study = {} def select_curriculum(self, curriculum_obj):
if curriculum_obj in self.curriculum:
return False
else:
self.curriculum.append(curriculum_obj)
return True def curriculum_study(self, curriculum):
if curriculum not in self.curriculum:
return False
elif curriculum not in self.study:
self.study[curriculum] = 1
return True
else:
self.study[curriculum] += 1
return True def register(self, name, pwd):
self.username = name
self.password = pwd
path = os.path.join(settings.Student_dir, self.username)
if os.path.exists(path):
return False
else: pickle.dump(self, open(path, 'xb')) # xb如果没有就新建一个
return True def login(self, name, pwd):
if name == self.username and pwd == self.password:
return True
else:
return False class Curriculum:
def __init__(self, name, cost, teacher, admin):
self.curriculum_name = name
self.curriculum_teacher = teacher
self.curriculum_cost = cost
self.create_time = time.strftime('%Y-%m-%d %H:%M:%S')
self.create_admin = admin.username class Teacher:
def __init__(self, name, age, admin):
self.teacher_name = name
self.teacher_age = age
self.create_time = time.strftime('%Y-%m-%d %H:%M:%S')
self.create_admin = admin.username

models.py