一 程序目录结构

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. UVa10426

    GCD Extreme(II) Input: Standard Input Output: Standard Output Given the value of N, you will have to ...

  2. python3-使用__slots__

    正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: class Student(object): pa ...

  3. wepy相关

    1.根据官方文档: $ npm install @wepy/cli -g # 全局安装 WePY CLI 工具 $ wepy init standard myproj # 使用 standard 模板 ...

  4. Jmeter性能测试请求超时:目前遇见有三种情况

    1.请求连接超时.连不上服务器.一般是因为线程太多 2.连接成功,但是读取超时.等不到服务器返回的数据,一般是这次请求查询的量很大,比如查了5度的顶点.(timeout小于server的最大等待时间) ...

  5. 理解厂商前缀 -webkit- / -moz- / -ms- / -o-

    CSS3规范如果想要达到W3C的推荐标准状态还需要不断改进.浏览器则通常在W3C开发标准的过程中就会体现这些特性.这样,标准在最终敲定之前就能知道哪些地方还能进一步改进. 在包含某个特性的的初始阶段, ...

  6. POJ 3691 DNA repair ( Trie图 && DP )

    题意 : 给出 n 个病毒串,最后再给出一个主串,问你最少改变主串中的多少个单词才能使得主串中不包含任何一个病毒串 分析 : 做多了AC自动机的题,就会发现这些题有些都是很套路的题目.在构建 Trie ...

  7. 【bozj2287】【[POJ Challenge]消失之物】维护多值递推

    (上不了p站我要死了) Description ftiasch 有 N 个物品, 体积分别是 W1, W2, -, WN. 由于她的疏忽, 第 i 个物品丢失了. "要使用剩下的 N - 1 ...

  8. Spring Cloud Commons教程(三)忽略网络接口

    有时,忽略某些命名网络接口是有用的,因此可以将其从服务发现注册中排除(例如,在Docker容器中运行).可以设置正则表达式的列表,这将导致所需的网络接口被忽略.以下配置将忽略“docker0”接口和以 ...

  9. Codeforces Round #603 (Div. 2)F. Economic Difficulties

    F. Economic Difficulties 题目链接: https://codeforces.com/contest/1263/problem/F 题目大意: 两棵树,都有n个叶子节点,一棵树正 ...

  10. Elasticsearch的聚合操作

    ES的聚合: Metrics 简单的对过滤出来的数据集进行avg,max等操作,是一个单一的数值. bucket 可以理解为将过滤出来的数据集按条件分成多个小数据集,然后Metrics会分别作用在这些 ...