• python 面向对象 class 老男孩选课系统


    要求:
    1. 创建北京、上海 2 所学校 class
    2. 创建linux , python , go 3个课程 , linuxpy 在北京开, 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创建一个类,学校要包含 学校名称  学校地址  学校网站  学校电话 校长 如下:

    1 class School(bace.write):
    2     def __init__(self, name, xiaozhang, address,www):
    3         self.name = name#学校名称
    4         self.xz = xiaozhang#校长
    5         self.addr = address#学校地址
    6         self.www = www#学校网站
    7         self.phone = phone #学校联系电话
    View Code

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

     1 import os, pickle, time, hashlib
     2 
     3 PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
     4 
     5 def Md5():
     6     '''生成一个文件名称'''
     7     t = time.time()  # 读取时间戳
     8     obj = hashlib.md5()  # 创建MD5对象
     9     obj.update(str(t).encode("utf-8"))
    10     return obj.hexdigest()
    11 
    12 def file(type):
    13     '''
    14     返回文件绝对路径
    15     :param type: 存在哪个路径
    16     :param filename: 文件名称
    17     :return: 返回文件的绝对路径
    18     '''
    19     return os.path.join(PATH,"db",type,Md5())
    20 
    21 class write:
    22     '''写入文件'''
    23     def __init__(self,addr):
    24         self.path = addr#文件的绝对路径
    25     def save(self):
    26         with open(self.path,"wb") as f:
    27             pickle.dump(self,f)
    文件名称,写入文件

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

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

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

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

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

      1 #!/usr/bin/env python
      2 # -*- coding=utf-8 -*-
      3 # Time: 2016/12/15 AM11:11
      4 # author: 郑建文
      5 # Filename: bin.py
      6 # blog:www.hairuinet.com
      7 # Version: 1.0
      8 
      9 import os, sys
     10 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
     11 from core import school, teacher, coures, class_school, student
     12 from lib import log
     13 
     14 sys.path.append(os.path.dirname(os.path.abspath(__file__)))
     15 BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
     16 
     17 
     18 def s_bin():
     19     '''school逻辑'''
     20     print("学校系统".center(50, "+"))
     21     print("1.查看学校 2.添加学校")
     22     user_c = str(input(">>>")).strip()
     23     if user_c == "1":
     24         school.School.show()
     25     elif user_c == "2":
     26         date = school.user_input()
     27         a = school.School(date[0], date[1], date[2])
     28         a.save()
     29     else:
     30         print("输入有误")
     31 
     32 
     33 def t_bin():
     34     '''老师逻辑'''
     35     path = os.path.join(BASE_PATH, "db", "school")
     36     print("1.查看老师 2.添加老师 3.老师离职")
     37     user_c = str(input(">>>")).strip()
     38     if user_c == "1":
     39         a = teacher.Teacher.show()
     40     elif user_c == "2":
     41         a = school.School.show()
     42         scc = str(input(">>>")).strip()
     43         if scc.isdigit():
     44             scc = int(scc)
     45         else:
     46             return 0
     47         xx = teacher.user_input()
     48         s = teacher.Teacher(xx[0], xx[1], xx[2], a[scc - 1])
     49         s.save()
     50     elif user_c == "3":
     51         pass
     52     else:
     53         print("33[31;1m输入错误33[1m")
     54 
     55 
     56 def c_bin():
     57     '''课程逻辑'''
     58     print("1.查看课程 2.添加课程 3.删除课程")
     59     user_c = str(input(">>>")).strip()
     60     if user_c == "1":
     61         coures.Course.show()
     62     elif user_c == "2":
     63         s = school.School.show()
     64         u_s = str(input("选择学校:")).strip()
     65         data = coures.user_input()
     66         t = teacher.Teacher.show()
     67         c_t = str(input("选择老师:")).strip()
     68         kc = coures.Course(data[0], data[1], data[2], 
     69                            t[int(c_t) - 1], s[int(u_s) - 1])
     70         kc.save()
     71     else:
     72         print("输入错误")
     73 
     74 
     75 def cls_bin():
     76     while True:
     77         print("33[36;1m1.查看班级 2.新班开课 3.返回33[1m")
     78         user_c = str(input(">>>")).strip()
     79         if user_c == "1":
     80             class_school.Class.show()
     81         elif user_c == "2":
     82             print("班级开课系统".center(50, "+"))
     83             a = school.School.show()
     84             u_a = input("选择校区:").strip()
     85             xx = class_school.user_input()
     86             t = teacher.Teacher.show()
     87             u_t = input("选择任教老师:").strip()
     88             bj = class_school.Class(xx, a[int(u_a) - 1], t[int(u_t) - 1])
     89             bj.save()
     90         elif user_c == '3':
     91             break
     92         else:
     93             print("输入错误")
     94 
     95 
     96 def st_bin():
     97     while True:
     98         print("1.学生列表 2.学生入学 3.返回")
     99         user_c = str(input(">>>")).strip()
    100         if user_c == "1":
    101             student.Student.show()
    102         elif user_c == "2":
    103             print("学生入学".center(50, "+"))
    104             s = school.School.show()
    105             u_s = input("选择学校:").strip()
    106             c = coures.Course.show()
    107             u_c = input("选择课程:").strip()
    108             cls = class_school.Class.show()
    109             u_cla = input("选择班级:").strip()
    110             xx = student.user_input()
    111             data = student.Student(xx[0], xx[1], c[int(u_c) - 1], 
    112                                    cls[int(u_cla) - 1], s[int(u_s) - 1])
    113             data.save()
    114 
    115 
    116 if __name__ == '__main__':
    117     logg = log.log("DEBUG")
    118     logg.file("INFO","系统启动一次")
    119     while True:
    120         print("33[32;1m学校CRM选课系统33[1m".center(50, "="))
    121         print("1.学校系统
    2.老师系统
    3.课程系统
    4.班级系统
    5.学生系统")
    122         menu = {"1": s_bin, "2": t_bin, "3": c_bin, "4": cls_bin, "5": st_bin}
    123         user_c = input(">>>").strip()
    124         if menu.get(user_c, 0):
    125             menu[user_c]()
    126         else:
    127             print("输入错误!
    
    ")
    View Code

    原文阅读:www.hairuinet.com 

    From Hairui 转载请注明出处!谢谢
  • 相关阅读:
    Java三大框架
    单例模式和工厂模式(百度文库)
    使用java代码编辑oracle数据库
    extends 与implements的区别和用法
    介绍MVC编程架构模式
    接口具体是什么东西
    Servlet和JSP的本质和区别
    用户注册,登录,留言系统
    页面跳转的五种方法
    cookie的长度和限制数量
  • 原文地址:https://www.cnblogs.com/hairuipython/p/6211170.html
Copyright © 2020-2023  润新知