一 程序目录结构

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

python基础-10 程序目录结构 学生选课系统面向对象练习的更多相关文章

  1. Python基础之软件目录结构规范

    设计一个层次清晰的目录结构,就是为了达到这两点: 可读性高:不熟悉项目的人,一眼就能看懂目录结构. 可维护性高:随着时间的推移,代码/配置的规模增加,项目结构不会混乱,仍然能够组织良好. 目录组织方式 ...

  2. python实现学生选课系统 面向对象的应用:

    一.要求: 选课系统 管理员: 创建老师:姓名.性别.年龄.资产 创建课程:课程名称.上课时间.课时费.关联老师 使用pickle保存在文件 学生: 学生:用户名.密码.性别.年龄.选课列表[].上课 ...

  3. python开发项目:学生选课系统

    程序要求:1.创建北京.上海两所学校(分析:通过学校类实例化两个学校实例) 2.创建Linux.python.go三个课程,Linux\go在北京开,Linux在上海开(创建Linux.python. ...

  4. 『Python基础-10』字典

    # 『Python基础-10』字典 目录: 1.字典基本概念 2.字典键(key)的特性 3.字典的创建 4-7.字典的增删改查 8.遍历字典 1. 字典的基本概念 字典一种key - value 的 ...

  5. 十. Python基础(10)--装饰器

    十. Python基础(10)--装饰器 1 ● 装饰器 A decorator is a function that take a function as an argument and retur ...

  6. C语言基础知识-程序流程结构

    C语言基础知识-程序流程结构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.概述 C语言支持最基本的三种程序运行结构:顺序结构,选择结构,循环结构. 顺序结构:程序按顺序执行, ...

  7. 学生选课系统 c语言

    /********************************* *主题:学生选修课程系统设计 * *设计要求: *1.添加功能:程序能够任意添加课程和学生记录,可提供选择界面供用户选择所需要添加 ...

  8. JAVA | 学生选课系统

    这里使用JAVA语言编写的简易的学生选课系统,展现的都是这个系统核心代码. 其中有不足欢迎批评和指正! 链接数据库的代码 package connection;//连接数据库student impor ...

  9. Java项目实例之---学生选课(面向对象复习)

    学生选课(面向对象复习) 设计一个学生选课的程序,分别有学生类(Student)和课程类(Course) 学生类的属性有:学号(String),姓名(String),性别(char),所选科目(Cou ...

随机推荐

  1. linux c++下遍历文件

    https://blog.csdn.net/u013617144/article/details/44807333

  2. 1134. Vertex Cover (25)

    A vertex cover of a graph is a set of vertices such that each edge of the graph is incident to at le ...

  3. POJ 3741 Raid (平面最近点对)

    $ POJ~3741~Raid $ (平面最近点对) $ solution: $ 有两种点,现在求最近的平面点对.这是一道分治板子,但是当时还是想了很久,明明知道有最近平面点对,但还是觉得有点不对劲. ...

  4. 初学oracle第三天

    体系结构 Oracle 采取的是 Client/Server 架构. 3.1 Client   3.1.1 Sqlplus 这是一个轻量级的功能强大的客户端, 是 dba 必须掌握的工具. 我们可以配 ...

  5. 【NOIP2016A组模拟7.13】亚瑟王之宫

    题目 分析 我们定义\(dis_{x,y,x1,y2}\)表示\((x,y)\)到\((x1,y1)\)的距离.这个用spfa求. 接着,枚举两个集合点\((x,y).(x1,y1)\), 得出这两个 ...

  6. CSS盒子模型中的Padding属性

    CSS padding 属性 CSS padding 属性定义元素边框与元素内容之间的空白区域,不可见.如果想调整盒子的大小可以调整内容区,内边距,边框. CSS padding 属性定义元素的内边距 ...

  7. WEB上传一个文件夹

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 先说下要求: PC端全平台支持,要求支持Windows,Mac,Linux 支持所 ...

  8. luogu P1428 小鱼比可爱 x

    P1428 小鱼比可爱 题目描述 人比人,气死人:鱼比鱼,难死鱼.小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度.参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示 ...

  9. javascript之alter的坑

    1.注意在使用alert返回两数之和时,会出现0.1+0.2并不等于0.3的bug 解决方法: var f=0.1; var g=0.2; alert((parseFloat(f)*100+parse ...

  10. es的索引库模板

    在实际的生产中,如果要插入大批量数据的时候需要使用多个索引库,如果我们还是手工指定每个索引的配置信息settings和mappings,是非常耗时的: 针对这种情况,es有index template ...