一 程序目录结构

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. VB数据集

    dim Re as recordset dim rs1 as recordsetre.movelast '移动到数据表的最后re.movefirst '移动到数据表的最前re.movenext '移动 ...

  2. 牛客练习赛14 D比较月亮大小 (实现)

    链接:https://ac.nowcoder.com/acm/contest/82/D来源:牛客网 题目描述 点点是一名出色的狼人.众所周知,狼人只有在满月之夜才会变成狼. 同时,月亮的大小随着时间变 ...

  3. python3-安装第三方模块

    在Python中,安装第三方模块,是通过包管理工具pip完成的. 如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了. 如果你正在使用Windows,请参考安装Python一节的内容 ...

  4. 给虚拟机CentOS7扩容(lvm方式)

    虚拟机中centos7原有容量不够了,需要进行扩容. 可以使用图形工具gparted来进行操作,安装和使用可自行百度.但需要注意的是,这篇文章提到:一定要用parted中的mkfs命令格式化分区,用系 ...

  5. Eclipse Debug模式的开启与关闭问题简析_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 默认情况下,eclipse中右键debug,当运行到设置的断点时会自动跳到debug模式下.但由于我的eclipse环境 ...

  6. LeetCode--114--二叉树展开为链表(python)

    给定一个二叉树,原地将它展开为链表. 例如,给定二叉树 1 / \  2   5 / \     \ 3 4      6将其展开为: 1  \   2   \    3  \       4  \ ...

  7. sigmoid和softmax的应用意义区别

    转载自:https://baijiahao.baidu.com/s?id=1636737136973859154&wfr=spider&for=pc写的很清楚,并举例佐证,容易理解,推 ...

  8. webstorm 点击右上角运行run 启动vue项目

    点击右上角框 -> 编辑结构 点击加号 新增一个npm项目 前提:node环境已经安装完成,npm包管理器 1.进行定位到项目的路径2.安装依赖包,npm install3.启动服务,npm r ...

  9. Eclipse设置类和方法的注释模板

    一.打开设置模板的窗口:Window->Preference->Java->Code Style->Code Template展开Comments,最常用的就是类和方法的注释, ...

  10. Laya layout算法

    /** * <p>重置对象的 <code>X</code> 轴(水平方向)布局.</p> * @private */ public function r ...