国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python選課系統開發程序

2020-01-04 17:24:11
字體:
來源:轉載
供稿:網友

本文程序針對Python選課系統進行開發,供大家參考,具體內容如下

角色:學校、學員、課程、講師
要求:
1. 創建北京、上海 2 所學校
2. 創建linux , python , go 3個課程 , linux/py 在北京開, go 在上海開
3. 課程包含,周期,價格,通過學校創建課程
4. 通過學校創建班級, 班級關聯課程、講師
5. 創建學員時,選擇學校,關聯班級
5. 創建講師角色時要關聯學校,
6. 提供兩個角色接口
7. 學員視圖, 可以注冊, 交學費, 選擇班級,
8. 講師視圖, 講師可管理自己的班級, 上課時選擇班級, 查看班級學員列表 , 修改所管理的學員的成績
9. 管理視圖,創建講師, 創建班級,創建課程
10. 上面的操作產生的數據都通過pickle序列化保存到文件里 

程序:

1、最最重要的readme:

### 作者介紹:
* author:lzl
### 博客地址:
* http://www.cnblogs.com/lianzhilei/p/5813986.html

### 功能實現
    1. 創建北京、上海 2 所學校
    2. 創建linux , python , go 3個課程 , linux/py 在北京開, go 在上海開
    3. 課程包含,周期,價格,通過學校創建課程
    4. 通過學校創建班級, 班級關聯課程、講師
    5. 創建學員時,選擇學校,關聯班級
    5. 創建講師角色時要關聯學校,
    6. 提供兩個角色接口
    6.1 學員視圖, 可以注冊, 交學費, 選擇班級,
    6.2 講師視圖, 講師可管理自己的班級, 上課時選擇班級, 查看班級學員列表 , 修改所管理的學員的成績
    6.3 管理視圖,創建講師, 創建班級,創建課程
    7. 上面的操作產生的數據都通過pickle序列化保存到文件里
    (所有功能均實現)

###程序需知
    1. 當前數據庫已建立好信息,可以直接進行查看增加
        北京  課程:Python   講師:金角大王     班級:S14      學員:我要學python
              課程:Linux    講師:銀角大王     班級:L01      學員:我要學Linux
        上海  課程:Go       講師:天棚元帥     班級:G01      學員:我要學GO
    2. 也可以把database下的兩個數據庫文件刪除掉,數據清空,執行程序,數據庫進行初始化,初始化只生成北京、上海學校名
    3. 數據庫結構main_dict 儲存主要的邏輯結構:
        {學校名:{課程名1:{"teacher":講師,"grade":班級},課程名2:{"teacher":講師2,"grade":班級2}},
        學校名:{課程名3:{"teacher":講師3,"grade":班級3},課程名4:{"teacher":講師4,"grade":班級4}}}
        存儲的數據類型都為實例對象
       數據庫結構teacher_dict 存儲講師與班級的對應關系,用于方便講師登錄系統認證,結構為
        {講師:{grade:班級}
        兩個數據庫文件均可擴展
    4. 程序實現了以下嚴格限制:
       ①一個學校里面不能出現同名的課程
       ②一個課程只能有一個講師
       ③講師被聘用后,不能再進行聘用,一個講師也只能教一門課程(教python,就不能再教linux了)
       ④班級只能對應一門課程,班級名只能出現一次,不能重復(python班級s14,linux的班級就不能再出現s14班級了)

###后期擴展
     程序沒有定義學生類,后期可定義類,添加學生屬性(年齡,成績),對可學生成績信息進行修改,把功能添加到教師中心,很顯然
     我沒時間了。。。。。
     程序按功能分出不同的模塊,可以更簡潔

2、程序目錄結構:

Python,選課系統

3、數據庫:

main_dict和teacher_dict兩個數據庫文件可不創建,運行程序自動生成  

4、程序main.py

#!/usr/bin/env python# -*- coding:utf-8 -*-#-Author-Lian import pickle,osBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#數據地址__db_main = BASE_DIR + r"/database/main_dict"__db_teacher = BASE_DIR + r"/database/teacher_dict" class School(object): #創建學校 def __init__(self,name,addr): self.name = name self.addr = addr def cat_school(self): print("學校名:【%s】/t地址:【%s】"%(self.name,self.addr))  def hire_teacher(self,dict,course,teacher,file): #數據庫添加講師信息 dict[self][course] = {"teacher":teacher} file_oper(file,"wb", dict)  def create_course(self,dict,course,file): # 數據庫添加課程資料 dict[self][course]={} file_oper(file,"wb", dict) def create_grade(self,dict,teacher_dict,course,grade,teacher,file1,file2): #數據庫添加班級信息 dict[self][course]["grade"] = grade file_oper(file1, "wb", dict) teacher_dict[teacher] = {"grade":grade} file_oper(file2, "wb", teacher_dict)class Course(): #創建課程 def __init__(self,name,price,time): self.name = name self.price = price self.time = time def cat_course(self): #查看課程信息 print("課程:【%s】/t價格:【¥%s】/t周期:【%s個月】"  %(self.name,self.price,self.time))class Grade(): # 創建班級 def __init__(self,name,course,teacher): student = set([]) self.name = name self.course = course self.teacher = teacher self.student = student  def cat_grade(self): #查看班級信息 print("班級:【%s】/t課程:【%s】/t講師:【%s】"  %(self.name, self.course, self.teacher))  def add_student(self,student_name,dict,teacher,file): self.student.add(student_name) dict[teacher]={"grade":self} file_oper(file, "wb", dict)class People(): def __init__(self,name,age): self.name = name self.age = ageclass Teacher(People): # 創建講師 def __init__(self,name,age,school,course,role="講師"): super(Teacher,self).__init__(name,age) self.role = role self.school = school self.course = course def cat_teacher(self): #查看老師資料和課程 print('課程【%s】/t講師【%s】'%(self.course,self.name))def file_oper(file,mode,*args): #數據庫寫入、讀取操作 if mode == "wb": with open(file, mode) as f:  dict = args[0]  f.write(pickle.dumps(dict)) if mode == "rb": with open(file, mode) as f:  dict = pickle.loads(f.read())  return dictdef information(dict,mode,*args): '''通過匹配mode模式,打印相應的輸出信息''' if args: dict_info, set_info = {}, args[0] else: dict_info,set_info = {},set([]) if dict: for key in dict:  if mode == "course":  key.cat_course()  if mode == "main":  key.cat_school()  if mode == "teacher" and key == "teacher":  dict[key].cat_teacher()  # dict_info[key] = dict[key]  set_info.add(dict[key].name)  if mode == "grade" and key == "grade":  dict[key].cat_grade()  set_info.add(dict[key].name)  if mode == "teacher_center":  pass  if type(key) != str: #key值不是字符串  dict_info[key.name] = key return dict_info,set_info def school_center(): #學校管理中心 Flag = True while Flag: dict_main = file_oper(__db_main,"rb") #主字典 res_dict = information(dict_main,"main")[0] #打印學校信息 school_name = input("/33[34;0m輸入要選擇的學校名/33[0m:").strip() if school_name in res_dict:  school = res_dict[school_name]  #匹配選擇的學校  while Flag:  print("/33[32;1m歡迎進入【%s】學校/33[0m".center(50, "*")%school.name)  choice = options(list_school) #打印當前選項  if choice == "1":   while True:   print("/33[32;0m學校【%s】目前已經有的班級信息/33[0m".center(40, "-")%school.name)   teacher_dict = file_oper(__db_teacher,"rb")   res_course = information(dict_main[school], "None")[0]   set_info = set([])   if res_course: # 打印課程與講師對應關系    for i in res_course:    k = res_course[i]    res_grade = information(dict_main[school][k], "grade",set_info)[1]   if_cont = input("/n/33[34;0m是否要創建班級 【y】創建 【b】退出/33[0m:")   if if_cont == "y":    grade_name = input("/33[34;0m輸入要創建班級的名稱/33[0m:").strip()    course_name = input("/33[34;0m輸入要班級要上的課程/33[0m:").strip()    if course_name in res_course:    course = res_course[course_name]    if dict_main[school][course]:     teacher = dict_main[school][course]["teacher"]     if grade_name not in res_grade:     grade = Grade(grade_name, course_name, teacher.name)     school.create_grade(dict_main, teacher_dict, course, grade, teacher, __db_main,       __db_teacher)     else:     print("/33[31;0m錯誤:當前班級已經存在/33[0m")    else:     print("/33[31;0m錯誤:當前課程還沒有講師/33[0m")    else:    print("/33[31;0m錯誤:課程【%s】不存在,請先創建課程/33[0m" % course_name)   if if_cont == "b":    break   if choice == "2":   #招聘講師   while True:   print("/33[32;0m學校【%s】目前已經有的課程與講師/33[0m".center(40, "-")%school.name)   res_course = information(dict_main[school],"None")[0]   set_info = set([])   if res_course:   #打印課程與講師對應關系    for i in res_course:    k = res_course[i]    res_teacher = information(dict_main[school][k], "teacher",set_info)[1]    if not res_teacher:     print("課程【%s】/t講師【None】" %(i))   if_cont = input("/n/33[34;0m是否要招聘講師 【y】招聘 【b】退出/33[0m:")   if if_cont == "y":    teacher_name = input("/33[34;0m輸入要招聘講師的名字/33[0m:").strip()    teacher_age = input("/33[34;0m輸入要招聘講師的年齡/33[0m:").strip()    course_name = input("/33[34;0m輸入講師【%s】要授課的課程/33[0m:"%teacher_name).strip()    if course_name in res_course:     course = res_course[course_name] #創建講師并寫入數據庫     if teacher_name not in res_teacher:     teacher = Teacher(teacher_name,teacher_age,school.name,course_name)     school.hire_teacher(dict_main, course, teacher, __db_main)     else:     print("/33[31;0m錯誤:教師【%s】已經被聘用/33[0m" %teacher_name)    else:    print("/33[31;0m錯誤:課程【%s】不存在,請先創建課程/33[0m" %course_name)   if if_cont == "b":    break  if choice == "3":   #創建課程   while True:   print("/33[32;0m學校【%s】目前已經有的課程/33[0m".center(40,"-")%school.name)   res_dict = information(dict_main[school],"course")[0] #打印課程信息賦值給字典course_dict   if_cont = input("/n/33[34;0m是否要創建課程 【y】創建 【b】退出/33[0m:")   if if_cont == "y":    course_name = input("/33[34;0m輸入要創建的課程/33[0m:").strip()    if course_name not in res_dict: #課程不存在,創建    price = input("/33[34;0m輸入課程 【%s】 的價格/33[0m:" % (course_name))    time = input("/33[34;0m輸入課程 【%s】 的周期(月)/33[0m:" % (course_name))    course = Course(course_name, price, time) #創建課程course    school.create_course(dict_main,course, __db_main) #關聯學校和課程    else:     #課程存在    print("/33[31;0m錯誤:當前課程 【%s】 已經存在/33[0m" % (course_name))   if if_cont == "b":    break   if choice == "4":   Flag = False if Flag:  print("/33[31;0m錯誤:輸入的學校 【%s】 不存在/33[0m"%(school_name))def teacher_center(): #講師中心 print("/33[32;1m歡迎進入講師中心/33[0m".center(50, "*")) teacher_dict = file_oper(__db_teacher, "rb") dict_info = information(teacher_dict,"teacher_center")[0] #驗證登錄 teacher_name = input("/n/33[34;0m輸入要登錄講師的名字/33[0m:").strip() if teacher_name in dict_info:  while True:  print("/33[32;1m歡迎進入講師【%s】的管理中心/33[0m".center(40, "*")%teacher_name)  choice = options(list_teacher)  teacher = dict_info[teacher_name]  grade = teacher_dict[teacher]["grade"]  if choice == "1":   print("/33[32;0m講師【%s】的班級信息/33[0m".center(40,"-")%teacher.name)   print("學校【%s】/t課程【%s】/t班級【%s】/t"%(teacher.school,teacher.course,grade.name))   any = input("/n/33[34;0m輸入任意鍵退出當前/33[0m:")  if choice == "2":   print("/33[32;0m講師【%s】的班級學員列表/33[0m".center(40, "-") % teacher.name)   print("班級【%s】/n學員【%s】"%(grade.name,grade.student))   any = input("/n/33[34;0m輸入任意鍵退出當前/33[0m:")  if choice == "3":   break else:  print("/33[31;0m錯誤:講師【%s】 不存在/33[0m"%(teacher_name))def student_center(): #學員中心 print("/33[32;1m歡迎進入學員中心中心/33[0m".center(50, "*")) while True: choice = options(list_student)  #打印學生中心選項 if choice == "1":  student_name = input("/33[34;0m輸入學員的名字/33[0m:")  dict = file_oper(__db_main, "rb")  teacher_dict = file_oper(__db_teacher,"rb")  school_dict = information(dict,"main")[0] #打印當前可選的學校  school_name = input("/33[34;0m輸入要選擇的學校名/33[0m:").strip()  if school_name in school_dict:  school = school_dict[school_name]  if dict[school]:   course_dict = information(dict[school],"course")[0] # 打印當前學校下的課程   course_name = input("/33[34;0m輸入要選擇的課程/33[0m:").strip()   if course_name in course_dict:   course = course_dict[course_name]   if dict[school][course].get("grade"):    for i in teacher_dict:    if course.name == i.course:     teacher = i     grade = teacher_dict[teacher]["grade"]    print("課程【%s】的費用為【%s】"%(course.name,course.price))    if_pay = input("/33[34;0m是否支付當前費用 支付【y】/33[0m:")    if if_pay == "y":  #上面全部匹配成功,選課成功    grade.add_student(student_name,teacher_dict,teacher,__db_teacher)    print("/33[31;0m選課成功/33[0m")    any = input("/n/33[34;0m輸入任意鍵退出當前/33[0m:")   else:    print("/33[31;0m錯誤:課程沒有班級/33[0m")   else:   print("/33[31;0m錯誤:課程不存在/33[0m")  else:   print("/33[31;0m錯誤:當前學校沒有課程/33[0m") if choice == "2":  breakdef options(list): #打印可選擇的操作模式,并返回選擇值 for i, v in enumerate(list): print(i+1, v) choice = input("/33[34;0m選擇要進入模式/33[0m:") return choice def start(): '''程序開始''' while True: print("/33[35;1m歡迎進入選課系統/33[0m".center(50, "#")) choice = options(list_main) #打印選項 if choice == "1":  student_center() #學生中心 if choice == "2":  teacher_center() #教師中心 if choice == "3":  school_center()  #學校中心 if choice == "4":  breakdef init_database(): '''數據庫初始化,不存在則創建,存在跳過''' bj = School("北京","北京市") sh = School("上海","上海市") if not os.path.exists(__db_teacher): dict = {bj:{},sh:{}} file_oper(__db_main,"wb",dict) if not os.path.exists(__db_teacher): dict = {} file_oper(__db_teacher,"wb",dict)if __name__ == '__main__': init_database() #初始化數據庫 list_main = ["學生中心", "講師中心", "學校中心","退出"] list_school = ["創建班級", "招聘講師", "創建課程","返回"] list_teacher = ["查看班級", "查看班級學員列表","返回" ] list_student = ["學員注冊","返回"] start()

5、程序運行過程的簡略圖

Python,選課系統

Python,選課系統

*********************學生中心***********************

Python,選課系統

*********************講師中心***********************

Python,選課系統

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 开封县| 吉水县| 苗栗市| 临夏市| 伊金霍洛旗| 盐池县| 靖州| 紫金县| 东丰县| 卫辉市| 玉山县| 桃江县| 安远县| 黎川县| 大埔县| 灌南县| 保亭| 咸丰县| 渭源县| 宝鸡市| 金沙县| 烟台市| 吐鲁番市| 秭归县| 尼玛县| 临城县| 利津县| 绵阳市| 桐梓县| 武宁县| 汝阳县| 财经| 延长县| 上栗县| 久治县| 靖安县| 汤阴县| 丹巴县| 同德县| 无锡市| 东乌珠穆沁旗|