要求:
1. 创建北京、上海 2 所学校 class
2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
3. 课程包含,周期,价格,通过学校创建课程
4. 通过学校创建班级, 班级关联课程、讲师
5. 创建学员时,选择学校,关联班级
5. 创建讲师角色时要关联学校,
上面的操作产生的数据都通过pickle序列化保存到文件里


思路分析:
project的文件结构

bin#主程序进入
bin.py
core#逻辑程序
schoole.py
class School
teacher.py
class Teacher
course.py
class Course
clas_s.py
class Class
student.py
class Student
lib#特殊功能
base.py#文件写入和md5计算
class Write
class Md5
log.py#日志类文件
db#数据库
school#学校数据
student#学生数据
teacher#老师数据
course#课程数据
class_s#班级数据

 构思功能

1.bin为主文件,调用其他模块所以需要加一个环境变量,我有2层文件夹,所以使用os,sys模块添加

import os, sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

2.school创建一个类,学校要包含 学校名称  学校地址  学校网站  学校电话 校长 如下:

 class School(bace.write):
def __init__(self, name, xiaozhang, address,www):
self.name = name#学校名称
self.xz = xiaozhang#校长
self.addr = address#学校地址
self.www = www#学校网站
self.phone = phone #学校联系电话

3.需要将school创建的对象写入文件,用pickle将文件写入。因为需要一个文件绝对路径,所以需要拼接一个,要保证每次都不一样,固使用time时间戳和md5转换成一个文件名。再os拼接文件路径。

 import os, pickle, time, hashlib

 PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

 def Md5():
'''生成一个文件名称'''
t = time.time() # 读取时间戳
obj = hashlib.md5() # 创建MD5对象
obj.update(str(t).encode("utf-8"))
return obj.hexdigest() def file(type):
'''
返回文件绝对路径
:param type: 存在哪个路径
:param filename: 文件名称
:return: 返回文件的绝对路径
'''
return os.path.join(PATH,"db",type,Md5()) class write:
'''写入文件'''
def __init__(self,addr):
self.path = addr#文件的绝对路径
def save(self):
with open(self.path,"wb") as f:
pickle.dump(self,f)

文件名称,写入文件

4.我可以写入文件,也可以读取文件。而且文件还不止一个,读取文件夹内文件有os模块即可,多个文件用for循环。可以将读取的对象加编号,打印用于用户方便选择。自己写,俺不写了!

 SCHOOLE_PATH = os.path.join(PATH,"school")  #学校的数据库文件夹拼接
def read():
li = []#用于存读取的对象
file_li = os.listdir(SCHOOLE_PATH)#读取文件夹内的所有文件
for i in file_li:#循环文件列表
file = os.path.join(SCHOOLE_PATH,i)#拼接文件路径
with open(file,"rb") as f:#打开文件
a =pickle.load(f)#读取数据
li.append(a)#将对象添加到列表中
print(a.name)#可以打印此对象的数据属性
return li#将对象列表返回用于其他关联

5.读取都可以了,就可以做下一个类了。teacher类同学校,在生成构造方法init 可以将学校的对象取出放在老师对象中即可就是使用组合方法。其他同理。

 def t_bin():
'''老师逻辑'''
path = os.path.join(BASE_PATH, "db", "school")#老师数据文件路径
print("1.查看老师 2.添加老师 3.老师离职")
user_c = str(input(">>>")).strip()
if user_c == "":
a = teacher.Teacher.show()#老师类里写的 类方法
elif user_c == "":
a = school.School.show()#调用学校类的类方法读取所有学校数据
scc = str(input(">>>")).strip()#选择学校
if scc.isdigit():
scc = int(scc)
else:
return 0
xx = teacher.user_input()#老师模块的输入函数,返回一个元组
s = teacher.Teacher(xx[0], xx[1], xx[2], a[scc - 1])#此处绑定对象就可以
s.save()#执行一个储存的方法,来自继承
elif user_c == "":
pass
else:
print("\33[31;1m输入错误\33[1m")

6.写组合逻辑 bin内,将每个模块的逻辑写到一个函数内

 #!/usr/bin/env python
# -*- coding=utf-8 -*-
# Time: 2016/12/15 AM11:11
# author: 郑建文
# Filename: bin.py
# blog:www.hairuinet.com
# Version: 1.0 import os, sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from core import school, teacher, coures, class_school, student
from lib import log sys.path.append(os.path.dirname(os.path.abspath(__file__)))
BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) def s_bin():
'''school逻辑'''
print("学校系统".center(50, "+"))
print("1.查看学校 2.添加学校")
user_c = str(input(">>>")).strip()
if user_c == "":
school.School.show()
elif user_c == "":
date = school.user_input()
a = school.School(date[0], date[1], date[2])
a.save()
else:
print("输入有误") def t_bin():
'''老师逻辑'''
path = os.path.join(BASE_PATH, "db", "school")
print("1.查看老师 2.添加老师 3.老师离职")
user_c = str(input(">>>")).strip()
if user_c == "":
a = teacher.Teacher.show()
elif user_c == "":
a = school.School.show()
scc = str(input(">>>")).strip()
if scc.isdigit():
scc = int(scc)
else:
return 0
xx = teacher.user_input()
s = teacher.Teacher(xx[0], xx[1], xx[2], a[scc - 1])
s.save()
elif user_c == "":
pass
else:
print("\33[31;1m输入错误\33[1m") def c_bin():
'''课程逻辑'''
print("1.查看课程 2.添加课程 3.删除课程")
user_c = str(input(">>>")).strip()
if user_c == "":
coures.Course.show()
elif user_c == "":
s = school.School.show()
u_s = str(input("选择学校:")).strip()
data = coures.user_input()
t = teacher.Teacher.show()
c_t = str(input("选择老师:")).strip()
kc = coures.Course(data[0], data[1], data[2], \
t[int(c_t) - 1], s[int(u_s) - 1])
kc.save()
else:
print("输入错误") def cls_bin():
while True:
print("\33[36;1m1.查看班级 2.新班开课 3.返回\33[1m")
user_c = str(input(">>>")).strip()
if user_c == "":
class_school.Class.show()
elif user_c == "":
print("班级开课系统".center(50, "+"))
a = school.School.show()
u_a = input("选择校区:").strip()
xx = class_school.user_input()
t = teacher.Teacher.show()
u_t = input("选择任教老师:").strip()
bj = class_school.Class(xx, a[int(u_a) - 1], t[int(u_t) - 1])
bj.save()
elif user_c == '':
break
else:
print("输入错误") def st_bin():
while True:
print("1.学生列表 2.学生入学 3.返回")
user_c = str(input(">>>")).strip()
if user_c == "":
student.Student.show()
elif user_c == "":
print("学生入学".center(50, "+"))
s = school.School.show()
u_s = input("选择学校:").strip()
c = coures.Course.show()
u_c = input("选择课程:").strip()
cls = class_school.Class.show()
u_cla = input("选择班级:").strip()
xx = student.user_input()
data = student.Student(xx[0], xx[1], c[int(u_c) - 1], \
cls[int(u_cla) - 1], s[int(u_s) - 1])
data.save() if __name__ == '__main__':
logg = log.log("DEBUG")
logg.file("INFO","系统启动一次")
while True:
print("\33[32;1m学校CRM选课系统\33[1m".center(50, "="))
print("1.学校系统\n2.老师系统\n3.课程系统\n4.班级系统\n5.学生系统")
menu = {"": s_bin, "": t_bin, "": c_bin, "": cls_bin, "": st_bin}
user_c = input(">>>").strip()
if menu.get(user_c, 0):
menu[user_c]()
else:
print("输入错误!\n\n")

原文阅读:www.hairuinet.com

python 面向对象 class 老男孩选课系统的更多相关文章

  1. Python面向对象 组合(选课系统示例)

    # Author : Kelvin # Date : 2019/1/15 20:44 """ 学校与老师关联 课程与老师和学校关联 """ ...

  2. Python开发程序:选课系统-改良版

    程序名称: 选课系统 角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. ...

  3. 【原创】面向对象作业:选课系统中用pickle储存多个对象间组合引用关系的那些坑

    转载请注明出处:https://www.cnblogs.com/oceanicstar/p/9030121.html 想直接看结论先提前列出: 1.存储一个对象,文件不是真的给你存储的了对象这种东西, ...

  4. Python开发程序:选课系统

    本节作业: 选课系统 角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. ...

  5. python 入门基础23 选课系统 项目

    选课系统 代码地址:github_code # 选课系统 # 角色:学校.学员.课程.讲师 # 要求: # 1. 创建北京.上海 2 所学校 # 2. 创建linux , python , go 3个 ...

  6. Python实例---简单的选课系统

    要求 思路: 构造方法传递过去学校名称,同时利用UUID创建一个随机字符串,用这个字符串来作为要写入的文件名 利用类的__str__方法来实现类对象接口返回学校名称的操作 利用pickle的dumps ...

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

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

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

    一 程序目录结构 1 bin文件夹 二进制文件.代码程序  2 conf 配置文件  3 帮助文档  4 头文件库文件等 二 学生选课系统部分代码 未完待续 1 包内的__init__.py文件 在包 ...

  9. [ python ] 面向对象 - 选课系统

    根据源程序进行改写:    原程序地址:http://www.cnblogs.com/lianzhilei/p/5985333.html  如有侵权立即删除.    感谢原作者将完整的代码提供参考.  ...

随机推荐

  1. Linux系列:Ubuntu虚拟机设置固定IP上网(配置IP、网关、DNS、防止resolv.conf被重写)

    虚拟机里设置上网方式为NAT最方便,因为无需手动设置即可上网,但是NAT的上网方式默认是DHCP动态分配IP的,这意味着你每次重启虚拟机都 有不一样的IP地址,这对一般用户没任何问题.但是如果你的机子 ...

  2. HDU 4465 - Candy(概率与数学优化)

    2012成都Regional的B题,花了一个小时推出了式子,但是搞了好久发现都控制不了精度,后来突然想到组合数可以用log优化,改了之后就AC了 比较水的概率题 #include <stdio. ...

  3. vim的一些高级配置

    今天有幸看到一篇博文,有一些vim的高级配置 在linux或者unix下面的.vimrc文件中,在其中可以添加如下片段,可以实现解释上面你说的那些高级用法 " Ctrl + K 插入模式下光 ...

  4. c随机数的产生(续)

    经过反复调试得出: srand((unsigned) time(0))函数提供的应该是程序启动的时间或某个固定时间,在一个程序中只需提供一次即可.rand()函数会自动记录处理 经过反复调试得出: s ...

  5. Objective-C语法快速参考(C# 和 Objective-C 语法的比较)

    大部分有一点其他平台开发基础的初学者看到XCode ,第一感想是磨拳擦掌,看到 Interface  Builder 之后,第一感想是跃跃欲试,而看到Objective-C 的语法,第一感想就变成就望 ...

  6. Prepare a Nexus Maven private repository

    1. port nat mapping #ssh VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port_5002 ...

  7. c语言,strcat(),字符串拼接

    #include<stdio.h> #include<string.h> int main() {  char destination[25];  char  *zhang=& ...

  8. Amazon EC2上搭建VPN服务器

    Amazon EC2 提供了一年免费试用,Micro Instance,配置是 1G 内存,共享 CPU,和每月 15G 的流量.搭一个 VPN 服务器绰绰有余了.操作系统我选的是 Amazon Li ...

  9. 使用nexus创建maven私有仓库

    nexus安装 nexus下载 wget https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.11.1-01-bundl ...

  10. JVM笔记3:Java垃圾收集算法与垃圾收集器

    当前商业虚拟机的垃圾收集都采用"分代收集"算法,即根据对象生命周期的不同,将内存划分几块,一般为新生代和老年代,不同的代根据其特点使用最合适的垃圾收集算法 一,标记-清除算法: 该 ...