程序名称: 选课系统

角色:学校、学员、课程、讲师
要求:
1. 创建北京、上海 2 所学校
2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
3. 课程包含,周期,价格,通过学校创建课程 
4. 通过学校创建班级, 班级关联课程、讲师
5. 创建学员时,选择学校,关联班级
6. 创建讲师角色时要关联学校, 
7. 提供两个角色接口
8. 学员视图, 可以注册, 交学费, 选择班级,
9. 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩 
10. 管理视图,创建讲师, 创建班级,创建课程

11. 上面的操作产生的数据都通过pickle序列化保存到文件里

之前low的代码:

移步-》》http://www.cnblogs.com/lianzhilei/p/5832691.html

想法:

选课系统是在第六节课学完面向对象时Alex给留的练习作业,当时写的程序得了个B+,当时写出了觉得自己还挺厉害的,不过现在看之前的代码惨不忍睹,纯粹为了实现要求而实现的功能,程序的扩展性很差;刚好最近复习到面向对象的内容,觉得这个作业确实不错(逻辑性很强),准备重新写一下,加上之前看过天帅的代码框架,觉得有一些启发,下面就开始搞起来!

写这个博客的目的,一是为了方便自己以后用到时去查询,二是记录下自己的思路,以后再看的时候,明白当前的想法(有想法的对比,才能看出自己进步了多少)

开始搞:

写程序的第一步就会遇到问题,因为alex给出的要求确实太乱了,这么多关联关系根本理不清,首先先把要求换成自己能懂得话,把逻辑关系重新屡一下

先来个框架:

  三个视图:学员视图 讲师视图 管理视图  三个视图即为三个管理接口

  五个角色:学校、学员、课程、讲师、班级  五个角色即需要定义5个类

把要求对应成自己看懂的话:

  ① 创建北京、上海 2 所学校    分析:定义学校类,通过类去创建学校实例
  ② 创建linux , python , go 3个课程 ,linux\py 在北京开,go 在上海开  分析:定义课程类,通过课程类去创建课程实例

   ③ 课程包含,周期,价格,通过学校创建课程   分析:课程类里要包含周期、价格  课程实例通过学校类去创建

  ④ 班级关联课程、班级关联讲师  分析:可以创建班级的时候需输入关联的课程,创建讲师的时候需输入关联的班级;一个班级对应一个课程 一个班级对应一个讲师

  ⑤ 通过学校创建班级, 班级关联课程、讲师   分析:跟④一样

  ⑥ 创建学员时,选择学校,关联班级  分析:定义学员类,创建时选择学校,选择班级,通过学校类创建学员实例,班级类里面要有包含学员的信息的字典

  ⑦ 创建讲师角色时要关联学校  分析:之前一样,依然通过学校类去创建讲师实例

  ⑧ 学员视图 可以注册, 交学费, 选择班级    分析:看⑥ 学员选择班级后,通过班级关联的课程,打印课程的学费

  ⑨ 讲师视图, 讲师可以.....bala....bala      分析:讲师视图登录需要讲师名,通过讲师名可以找到对应的班级实例,班级实例里包含班级名,课程名,学员信息等

  注:一个班级对应一个课程 一个班级对应一个讲师

    一个课程可有多个班级

    一个讲师可教授多个班级

    一个学员可学习多个班级的课

分析下管理视图:

        管理视图具有的功能创建讲师, 创建班级,创建课程,这些都是通过学校创建(即通过学校类的方法调用),除了创建以外我们还需要增加查询讲师、班级、课程的功能(查看相应的信息),管理视图要有6个功能

分析下讲师视图:

        讲师视图可查看所授课的班级,班级学生信息  讲师视图具有2个功能

分析下学生视图:

       学生视图,要选择学校,选择班级(显示班级的名称,课程,价钱),添加到对应的班级内

咋做数据库呢?!

        看看注里面的内容就知道对应关系比较多,对应关系比较多就意味着,一个数据改了所有跟它有关系的数据都有变动,比如班级s14关联讲师alex,学生eric报名后,讲师alex自己的班级学生信息里就要能查到eric的个人信息;当然如果用数据库去做的话,非常简单;but 咱还没学数据库呢,只能用文件的方式存在本地,如果存多个文件的话,一个文件修改另一个文件也跟着修改(互相关联),所以为了简便,就只定义一个伪数据库;通过shelve模块,存储类型{“北京”:北京实例,“上海”:上海实例}

看我怎么做的类定义(只看__init__):

内容最小的学员类:只包含姓名,年龄,可扩展其他信息,关联信息不再这存

class Student(object):
'''学生类,包含姓名,年龄'''
def __init__(self,student_name,student_age):
self.student_name = student_name
self.student_age = student_age

都跟它有关系,但是他是被关系的课程类:只包含周期,价格,名称,可扩展其他信息,被关联,啥关联信息都不用存

class Course():
'''定义课程类,包含名称,价格,周期'''
def __init__(self,course_name,course_price,course_time):
self.course_name = course_name
self.course_price = course_price
self.course_time = course_time

跟三个都有关系,还一一对应(课程、讲师)的班级类:看④⑥  包含班级名,课程对应课程类(对应关系在本类里保存),班级学生成员字典,存放学生类,与讲师关联信息不再本类存

class Class(object):
'''班级类,包含名称,课程,学生'''
def __init__(self,class_name,course_obj):
self.class_name = class_name
self.class_courese = course_obj
self.class_student = {} #学生字典 {学生名:学生实例}

关联性单一,只跟班级相好的讲师类:看⑨  包含讲师名、薪资;讲师关联班级(对应关系在本类保存)班级成员列表,存放班级名(做判断,不会重复);通过班级名查看班级类里面的班级信息(包含学生),避免存双份数据

class Teacher(object):
'''讲师类,定义teacher_name,teacher_salary,包含teacher_class'''
def __init__(self, teacher_name, teacher_salary):
self.teacher_name = teacher_name
self.teacher_salary = teacher_salary
self.teacher_calss = [] #班级列表 [s14,15] def teacher_add_class(self,class_name,class_obj):
self.teacher_calss[class_name] = class_obj

内容最大,跟班级、课程、讲师都有关系的学校类:  包含学校名,学校地址,存放课程实例、班级实例、讲师实例,都是字典形式

class School(object):
'''学校类,包含名称,地址,课程,班级,教师'''
def __init__(self,school_name,school_addr):
self.school_name = school_name
self.school_addr = school_addr
self.school_course = {} #学校所有的课程实例 {"课程名“:课程实例}
self.school_class = {}
self.school_teacher = {} #类型与course一致
#self.school_student = {} #可扩展学生

框架有了,类有了,业务逻辑还不so easy?!

直接放目录架构:

代码区:

程序入口bin下的start.py:  注:判断了系统环境,添加了环境变量,调用了主业务区main.py

import os
import sys
import platform if platform.system() == "Windows":
BASE_DIR = "\\".join(os.path.abspath(os.path.dirname(__file__)).split("\\")[:-1]) else:
BASE_DIR = "/".join(os.path.abspath(os.path.dirname(__file__)).split("/")[:-1]) sys.path.insert(0,BASE_DIR)
#print(sys.path) from core import main
from conf import settings if __name__ == '__main__':
obj = main.Manage_center()
obj.run()

start.py

配置文件conf下的settings.py:  注:定义了数据库路径

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#-Author-Lian import os
import sys
import platform if platform.system() == "Windows":
BASE_DIR = "\\".join(os.path.abspath(os.path.dirname(__file__)).split("\\")[:-1])
database_path = os.path.join(BASE_DIR,"database") else:
BASE_DIR = "/".join(os.path.abspath(os.path.dirname(__file__)).split("/")[:-1])
database_path = os.path.join(BASE_DIR, "database") school_db_file = os.path.join(database_path,"school")

settings.py

主业务core下的main.py:  注:定义了4个类,管理中心,学员视图,讲师视图,学校视图

import os
import sys
import shelve
from conf import settings
from modules.school import School class Manage_center(object):
def __init__(self):
pass def run(self):
while True:
print("\n欢迎进入CLASS_SYSTEM系统\n"
"1 学生视图\n"
"2 教师视图\n"
"3 学校视图\n"
"q 退出学员管理系统\n")
user_choice = input("\033[34;0m请输入您要登录的视图:\033[0m")
if user_choice == '':
Manage_student()
elif user_choice == '':
Manage_teacher()
elif user_choice == '':
Manage_school()
elif user_choice == 'q':
print("\033[34;1m感谢使用学员管理系统,退出\033[0m")
break
else:
print("\033[31;1m请输入正确的选项\033[0m") class Manage_school(object):
'''学校管理视图'''
def __init__(self):
if os.path.exists(settings.school_db_file+".dat"): #shelve会生成三个文件,其中有.dat结尾
self.school_db = shelve.open(settings.school_db_file) #打开学校数据库文件
self.run_manage() #运行管理视图
self.school_db.close() #关闭数据库文件
else:
print("\33[31;1m系统信息:初始化数据库\33[0m")
self.initialize_school() #初始化数据库
self.run_manage()
self.school_db.close() def initialize_school(self):
'''实例化两个学校北京/上海'''
self.school_db = shelve.open(settings.school_db_file)
self.school_db['北京'] = School('北京', '中国.北京')
self.school_db['上海'] = School('上海', '中国.上海') def run_manage(self):
'''运行学校管理视图 '''
while True:
for key in self.school_db:
print("学校名称:",key)
choice_school = input("\33[34;0m输入选择管理的学校名:\33[0m").strip()
if choice_school in self.school_db:
self.choice_school = choice_school
self.school_obj = self.school_db[choice_school]
while True:
print("\n欢迎来到老男孩%s校区\n"
"添加课程 add_course\n"
"增加班级 add_class\n"
"招聘讲师 add_teacher\n"
"查看课程 check_course\n"
"查看班级 check_class\n"
"查看讲师 check_teacher\n"
"退出程序 exit"% self.school_obj.school_name)
user_func = input('''\033[34;0m输入要操作的命令:\033[0m''').strip()
if hasattr(self,user_func):
getattr(self,user_func)()
else:
print("\33[31;1m输入错误:请输入正确的学校名\33[0m") def add_course(self):
course_name = input('''\033[34;0m输入要添加课程的名称:\033[0m''').strip()
course_price = input('''\033[34;0m输入要添加课程的价格:\033[0m''').strip()
course_time = input('''\033[34;0m输入要添加课程的时长:\033[0m''').strip()
if course_name in self.school_obj.school_course: #判断课程是否已经添加过
print("\33[32;1m课程存在\33[0m")
self.school_obj.create_course(course_name, course_price, course_time)
print("\33[32;1m课程更新完成\33[0m")
else:
self.school_obj.create_course(course_name,course_price,course_time)
print("\33[32;1m课程添加成功\33[0m")
self.school_db.update({self.choice_school: self.school_obj}) #更新数据库数据 def add_class(self):
class_name = input('''\033[34;0m输入要添加班级的名称:\033[0m''').strip()
course_name = input('''\033[34;0m输入要关联的课程:\033[0m''').strip()
if class_name not in self.school_obj.school_class:
if course_name in self.school_obj.school_course:
course_obj = self.school_obj.school_course[course_name]
self.school_obj.create_class(class_name,course_obj)
self.school_db.update({self.choice_school: self.school_obj}) # 更新数据库数据
print("\33[32;1m班级创建成功\33[0m")
else:
print("\33[31;1m系统错误:关联的课程不存在\33[0m")
else:
print("\33[31;1m系统错误:班级已经存在\33[0m") def add_teacher(self):
teacher_name = input('''\033[34;0m输入要招聘教师的名称:\033[0m''').strip()
teacher_salary = input('''\033[34;0m输入教师的薪资:\033[0m''').strip()
teacher_class = input('''\033[34;0m输入要关联的班级:\033[0m''').strip()
if teacher_class in self.school_obj.school_class: #判断班级是否存在
class_obj = self.school_obj.school_class[teacher_class] #获取班级名对应的实例
if teacher_name not in self.school_obj.school_teacher: #判断招聘教师是否存在,不存在创建,存在更新
self.school_obj.create_teacher(teacher_name,teacher_salary,teacher_class,class_obj)
print("\33[32;1m新讲师招聘成功\33[0m")
else:
self.school_obj.update_teacher(teacher_name, teacher_class, class_obj)
print("\33[32;1m讲师已经存在,信息更新完成\33[0m") self.school_db.update({self.choice_school: self.school_obj}) # 更新数据库数据
else:
print("\33[31;1m系统错误:关联的班级不存在\33[0m") def check_course(self):
self.school_obj.show_course() def check_class(self):
self.school_obj.show_class() def check_teacher(self):
self.school_obj.show_teacher() def exit(self):
self.school_db.close()
sys.exit("\033[32;1m欢迎下次使用学员管理系统\033[0m") class Manage_student(object):
'''学生视图'''
def __init__(self):
if os.path.exists(settings.school_db_file + ".dat"): # shelve会生成三个文件,其中有.dat结尾
self.school_db = shelve.open(settings.school_db_file) # 打开学校数据库文件
self.run_manage() # 运行管理视图
self.school_db.close() # 关闭数据库文件
else:
print("\033[31;1m数据库文件不存在,请先创建学校\033[0m")
exit() def run_manage(self):
print("\n欢迎进入学员视图")
for key in self.school_db:
print("学校名称:", key)
choice_school = input("\33[34;0m输入选择注册的学校名:\33[0m").strip()
if choice_school in self.school_db:
self.choice_school = choice_school
self.school_obj = self.school_db[choice_school]
student_name = input('''\033[34;0m输入学生的姓名:\033[0m''').strip()
student_age = input('''\033[34;0m输入学生的年龄:\033[0m''').strip()
self.school_obj.show_class_course()
class_choice = input('''\033[34;0m输入上课的班级:\033[0m''').strip()
if class_choice in self.school_obj.school_class:
self.school_obj.create_student(student_name,student_age,class_choice)
self.school_db.update({self.choice_school: self.school_obj}) # 更新数据库数据
print("\33[32;1m学生注册成功\33[0m")
else:
print("\33[31;1m系统错误:输入的班级不存在\33[0m")
else:
print("\33[31;1m系统错误:输入的学校不存在\33[0m") class Manage_teacher(object):
'''教师视图'''
def __init__(self):
if os.path.exists(settings.school_db_file + ".dat"): # shelve会生成三个文件,其中有.dat结尾
self.school_db = shelve.open(settings.school_db_file) # 打开学校数据库文件
self.run_manage() # 运行管理视图
self.school_db.close() # 关闭数据库文件
else:
print("\033[31;1m数据库文件不存在,请先创建学校\033[0m")
exit() def run_manage(self):
for key in self.school_db:
print("学校名称:", key)
choice_school = input("\33[34;0m输入选择学校名:\33[0m").strip()
if choice_school in self.school_db:
self.choice_school = choice_school
self.school_obj = self.school_db[choice_school]
teacher_name = input('''\033[34;0m输入登录讲师的姓名:\033[0m''').strip()
while True:
if teacher_name in self.school_obj.school_teacher:
print("\n欢迎来到教师中心\n"
"查看班级 check_class\n"
"退出程序 exit" )
user_func = input('''\033[34;0m输入要操作的命令:\033[0m''').strip()
if hasattr(self, user_func):
getattr(self, user_func)(teacher_name)
else:
print("\033[31;1m讲师不存在\033[0m") def check_class(self,teacher_name):
self.school_obj.show_teacher_classinfo(teacher_name) def exit(self,*args):
self.school_db.close()
sys.exit("\033[32;1m欢迎下次使用学员管理系统\033[0m")

main.py

数据文件database:  注:不用管,自动初始化生成

注:不用管,自动初始化生成

database

模块modules下的school: 

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#-Author-Lian
from modules.course import Course
from modules.classs import Class
from modules.teacher import Teacher
from modules.student import Student class School(object):
'''学校类,包含名称,地址,课程,班级,教师'''
def __init__(self,school_name,school_addr):
self.school_name = school_name
self.school_addr = school_addr
self.school_course = {} #学校所有的课程实例
self.school_class = {}
self.school_teacher = {}
#self.school_student = {} def create_course(self,course_name,course_price,course_time):
'''创建课程'''
course_obj = Course(course_name,course_price,course_time)
self.school_course[course_name] = course_obj def show_course(self):
'''查看课程信息'''
for key in self.school_course:
course_obj = self.school_course[key]
print("\33[32;1m课程:%s\t价格:%s\t周期:%s月\33[0m"%(course_obj.course_name,course_obj.course_price,
course_obj.course_time,)) def create_class(self,class_name,courese_obj):
'''创建班级'''
class_obj = Class(class_name,courese_obj)
self.school_class[class_name] = class_obj def show_class(self):
for key in self.school_class:
class_obj = self.school_class[key]
print("\33[32;1m班级:%s\t关联课程:%s\33[0m" % (class_obj.class_name, class_obj.class_courese.course_name)) def show_class_course(self):
for key in self.school_class:
class_obj = self.school_class[key]
course_obj = class_obj.class_courese
print("\33[32;1m班级:%s\t关联课程:%s\t价格:%s\t周期:%s月\33[0m" % (class_obj.class_name, course_obj.course_name,
course_obj.course_price,course_obj.course_time)) def create_teacher(self,teacher_name, teacher_salary,class_name,class_obj):
'''创建讲师'''
teacher_obj = Teacher(teacher_name, teacher_salary)
teacher_obj.teacher_add_class(class_name,class_obj)
self.school_teacher[teacher_name] = teacher_obj def update_teacher(self,teacher_name,class_name,class_obj):
'''更新教师信息'''
teacher_obj = self.school_teacher[teacher_name]
teacher_obj.teacher_add_class(class_name,class_obj) def show_teacher(self):
'''查看讲师信息'''
for key in self.school_teacher:
teacher_obj = self.school_teacher[key]
class_list = []
for i in teacher_obj.teacher_calss:
class_list.append(i)
print("\33[32;1m讲师:%s\t薪资:%s\t关联班级:%s\33[0m" % (teacher_obj.teacher_name, teacher_obj.teacher_salary,
class_list ))
def create_student(self,student_name,student_age,class_choice):
'''注册学生'''
student_obj = Student(student_name,student_age) #生成学生实例
class_obj = self.school_class[class_choice] #获取学生所注册班级的实例对象
class_obj.class_student[student_name]=student_obj #班级实例里添加学生信息
self.school_class[class_choice] = class_obj #学校班级字典更新 def show_teacher_classinfo(self,teacher_name):
teacher_obj = self.school_teacher[teacher_name]
for i in teacher_obj.teacher_calss:
class_obj = self.school_class[i]
student_list = []
for k in class_obj.class_student:
student_list.append(k)
print("\33[32;1m班级:%s\t关联课程:%s\t学员:%s\33[0m" % (class_obj.class_name, class_obj.class_courese.course_name,
student_list))

student.py

模块modules下的class:

class Class(object):
'''班级类,包含名称,课程,学生'''
def __init__(self,class_name,course_obj):
self.class_name = class_name
self.class_courese = course_obj
self.class_student = {} #学生字典

class.py

模块modules下的course:

class Course():
'''定义课程类,包含名称,价格,周期'''
def __init__(self,course_name,course_price,course_time):
self.course_name = course_name
self.course_price = course_price
self.course_time = course_time

course.py

模块modules下的student:

class Student(object):
'''学生类,包含姓名,年龄'''
def __init__(self,student_name,student_age):
self.student_name = student_name
self.student_age = student_age

student.py

模块modules下的teacher:

class Teacher(object):
'''讲师类,定义teacher_name,teacher_salary,包含teacher_class'''
def __init__(self, teacher_name, teacher_salary):
self.teacher_name = teacher_name
self.teacher_salary = teacher_salary
self.teacher_calss = [] #班级列表 [s14,15] def teacher_add_class(self,class_name,class_obj):
self.teacher_calss[class_name] = class_obj

teacher.py

运行示例图:

学校视图:

学生视图:

讲师视图:

 

 

												

Python开发程序:选课系统-改良版的更多相关文章

  1. Python开发【项目】:选课系统-改良版

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

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

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

  3. python面向对象编程小程序- 选课系统

    选课系统 花了一晚上写的,可能还存在不足 1.程序框架 2.文件夹建立 D:/选课系统 |___api | |___common_api.py |___bil | |___common.py |___ ...

  4. [ python ] 作业:选课系统

    功能代码实现源地址:https://www.cnblogs.com/lianzhilei/p/5832691.html    如有侵权,立即删除 本文主要是分析 选课系统 实现思路及上面代码的实现过程 ...

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

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

  6. python day 12: 选课系统

    目录 python day 12 1. 通过类来创建选课系统 1.1 类库models.py 2. 配置文件setting.py 3. administrator.py 4. student.py p ...

  7. Python全栈开发:选课系统实例

    程序目录: bin文件夹下为可执行文件:administrator,students config文件夹下为设置文件,涉及系统参数配置:setting db文件夹为数据类文件,涉及系统的输入输出数据: ...

  8. Python开发程序:生产环境下实时统计网站访问日志信息

    日志实时分析系统 生产环境下有需求:要每搁五分钟统计下这段时间内的网站访问量.UV.独立IP等信息,用直观的数据表格表现出来 环境描述: 网站为Nginx服务,系统每日凌晨会对日志进行分割,拷贝到其他 ...

  9. Python开发程序:FTP程序

    作业:开发一个支持多用户在线的FTP程序 要求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ,且只能访问自己的家目录 对用户进行磁盘配额,每个用户的可用空间不同 允许用户在ftp se ...

随机推荐

  1. 爱特梅尔ATMEL全系列芯片解密单片机破解

    爱特梅尔ATMEL全系列芯片解密单片机破解 ATMEL芯片介绍: ATMEL公司为全球性的业界领先企业,致力于设计和制造各类微控制器.电容式触摸解决方案.先进逻辑.混合信号.非易失性存储器和射频 (R ...

  2. HTTP 头字段总结

    1. Accept: 告诉WEB服务器自己接受什么介质类型,/ 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-type.2. Accept-Charset: 浏览器申明自己接 ...

  3. markdown 常用语法 (在macdown内使用正常)

    顺便附上 MacDown的官网,我觉得MacDown挺好用的,推荐给大家! #一级标题 ##二级标题 ###三级标题 ####四级标题 #####五级标题 ######六级标题 *** ###使用分割 ...

  4. 【Oracle】oracle利用正则表达式拆分IP地址

    使用oracle提供的regexp_substr()函数,对将IPV4地址分成4段: select v.ip as ip_address, regexp_substr(v.ip,,) as A, re ...

  5. 洛谷 P2735 电网 Electric Fences Label:计算几何--皮克定理

    题目描述 在本题中,格点是指横纵坐标皆为整数的点. 为了圈养他的牛,农夫约翰(Farmer John)建造了一个三角形的电网.他从原点(0,0)牵出一根通电的电线,连接格点(n,m)(0<=n& ...

  6. BZOJ4566: [Haoi2016]找相同字符

    Description 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数.两个方案不同当且仅当这两 个子串中有一个位置不同. Input 两行,两个字符串s1,s2,长度分别 ...

  7. Mybatis拦截器 mysql load data local 内存流处理

    Mybatis 拦截器不做解释了,用过的基本都知道,这里用load data local主要是应对大批量数据的处理,提高性能,也支持事务回滚,且不影响其他的DML操作,当然这个操作不要涉及到当前所lo ...

  8. Linux查看进程PID信息

    ps -ef|grep 进程名 可检索到具体进程PID以及启动命令行信息 ls -l /proc/进程ID Linux在启动程序时会在 /proc/PID 目录下以PID为名称创建一个文件存储相关进程 ...

  9. Node.js的学习路线

    http://www.admin10000.com/document/4624.html 顺便关注一下博客:http://blog.fens.me/series-nodejs/ php socket框 ...

  10. tachyon of zybo cluster

    把Tachyon层加入spark和hadoop之间,以加速集群 官网:http://tachyon-project.org/ github:https://github.com/amplab/tach ...