最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python選課系統(tǒng)開發(fā)程序

 更新時間:2016年09月02日 11:57:11   作者:Assassinの  
這篇文章主要為大家詳細介紹了Python選課系統(tǒng)開發(fā)程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文程序針對Python選課系統(tǒng)進行開發(fā),供大家參考,具體內(nèi)容如下

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

程序: 

1、最最重要的readme: 

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

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

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

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

2、程序目錄結構: 

3、數(shù)據(jù)庫: 

main_dict和teacher_dict兩個數(shù)據(jù)庫文件可不創(chuàng)建,運行程序自動生成  

4、程序main.py 

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#-Author-Lian 

import pickle,os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
#數(shù)據(jù)地址
__db_main = BASE_DIR + r"\database\main_dict"
__db_teacher = BASE_DIR + r"\database\teacher_dict"
 
class School(object):
 #創(chuàng)建學校

 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):
 #數(shù)據(jù)庫添加講師信息
 dict[self][course] = {"teacher":teacher}
 file_oper(file,"wb", dict)
 
 def create_course(self,dict,course,file):
 # 數(shù)據(jù)庫添加課程資料
 dict[self][course]={}
 file_oper(file,"wb", dict)
 def create_grade(self,dict,teacher_dict,course,grade,teacher,file1,file2):
 #數(shù)據(jù)庫添加班級信息
 dict[self][course]["grade"] = grade
 file_oper(file1, "wb", dict)
 teacher_dict[teacher] = {"grade":grade}
 file_oper(file2, "wb", teacher_dict)

class Course():
 #創(chuàng)建課程
 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():
 # 創(chuàng)建班級
 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 = age
class Teacher(People):
 # 創(chuàng)建講師
 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):

 #數(shù)據(jù)庫寫入、讀取操作

 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 dict

def 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】目前已經(jīng)有的班級信息\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是否要創(chuàng)建班級 【y】創(chuàng)建 【b】退出\33[0m:")
   if if_cont == "y":
    grade_name = input("\33[34;0m輸入要創(chuàng)建班級的名稱\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錯誤:當前班級已經(jīng)存在\33[0m")

    else:

     print("\33[31;0m錯誤:當前課程還沒有講師\33[0m")

    else:

    print("\33[31;0m錯誤:課程【%s】不存在,請先創(chuàng)建課程\33[0m" % course_name)
   if if_cont == "b":
    break
 
  if choice == "2":
   #招聘講師
   while True:
   print("\33[32;0m學?!?s】目前已經(jīng)有的課程與講師\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] #創(chuàng)建講師并寫入數(shù)據(jù)庫
     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】已經(jīng)被聘用\33[0m" %teacher_name)
    else:
    print("\33[31;0m錯誤:課程【%s】不存在,請先創(chuàng)建課程\33[0m" %course_name)
   if if_cont == "b":
    break
  if choice == "3":
   #創(chuàng)建課程
   while True:
   print("\33[32;0m學?!?s】目前已經(jīng)有的課程\33[0m".center(40,"-")%school.name)
   res_dict = information(dict_main[school],"course")[0] #打印課程信息賦值給字典course_dict
   if_cont = input("\n\33[34;0m是否要創(chuàng)建課程 【y】創(chuàng)建 【b】退出\33[0m:")
   if if_cont == "y":
    course_name = input("\33[34;0m輸入要創(chuàng)建的課程\33[0m:").strip()
    if course_name not in res_dict: #課程不存在,創(chuàng)建
    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) #創(chuàng)建課程course
    school.create_course(dict_main,course, __db_main) #關聯(lián)學校和課程
    else:     #課程存在
    print("\33[31;0m錯誤:當前課程 【%s】 已經(jīng)存在\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":
  break

def 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歡迎進入選課系統(tǒng)\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":
  break

def init_database():
 '''數(shù)據(jù)庫初始化,不存在則創(chuàng)建,存在跳過'''
 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() #初始化數(shù)據(jù)庫
 list_main = ["學生中心", "講師中心", "學校中心","退出"]
 list_school = ["創(chuàng)建班級", "招聘講師", "創(chuàng)建課程","返回"]
 list_teacher = ["查看班級", "查看班級學員列表","返回" ]
 list_student = ["學員注冊","返回"]
 start()

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

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

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Python根據(jù)給定模型進行特征權值計算

    Python根據(jù)給定模型進行特征權值計算

    在機器學習中,特征權重的計算是理解模型如何做出預測的重要步驟,本文將詳細介紹如何使用Python根據(jù)給定模型計算特征權重,希望對大家有一定的幫助
    2024-11-11
  • Pytorch數(shù)據(jù)類型Tensor張量操作的實現(xiàn)

    Pytorch數(shù)據(jù)類型Tensor張量操作的實現(xiàn)

    本文主要介紹了Pytorch數(shù)據(jù)類型Tensor張量操作的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • 使用Python快速搭建文件傳輸服務的方法

    使用Python快速搭建文件傳輸服務的方法

    這篇文章主要介紹了使用Python快速搭建一個文件傳輸服務,這樣任何一個人都能打開瀏覽器把他電腦上的文件傳給我了,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • Python使用tkinter實現(xiàn)小時鐘效果

    Python使用tkinter實現(xiàn)小時鐘效果

    這篇文章主要為大家詳細介紹了Python使用tkinter實現(xiàn)小時鐘效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • python判斷、獲取一張圖片主色調(diào)的2個實例

    python判斷、獲取一張圖片主色調(diào)的2個實例

    一幅圖片,想通過程序判斷獲得其主要色調(diào),應該怎么樣處理?本文通過python實現(xiàn)判斷、獲取一張圖片的主色調(diào)方法,需要的朋友可以參考下
    2014-04-04
  • python 非線性規(guī)劃方式(scipy.optimize.minimize)

    python 非線性規(guī)劃方式(scipy.optimize.minimize)

    今天小編就為大家分享一篇python 非線性規(guī)劃方式(scipy.optimize.minimize),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python數(shù)據(jù)分析之DataFrame內(nèi)存優(yōu)化

    python數(shù)據(jù)分析之DataFrame內(nèi)存優(yōu)化

    pandas處理幾百兆的dataframe是沒有問題的,但是我們在處理幾個G甚至更大的數(shù)據(jù)時,就會特別占用內(nèi)存,對內(nèi)存小的用戶特別不好,所以對數(shù)據(jù)進行壓縮是很有必要的,本文就介紹了python DataFrame內(nèi)存優(yōu)化,感興趣的可以了解一下
    2021-07-07
  • Python告訴你木馬程序的鍵盤記錄原理

    Python告訴你木馬程序的鍵盤記錄原理

    今天小編就為大家分享一篇關于Python告訴你木馬程序的鍵盤記錄原理,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Python實現(xiàn)字典去除重復的方法示例

    Python實現(xiàn)字典去除重復的方法示例

    這篇文章主要介紹了Python實現(xiàn)字典去除重復的方法,涉及Python字典遍歷、文件讀取、去除重復等相關操作技巧,需要的朋友可以參考下
    2017-07-07
  • 使用Python分析文本數(shù)據(jù)的詞頻并詞云圖可視化

    使用Python分析文本數(shù)據(jù)的詞頻并詞云圖可視化

    這篇文章主要給大家介紹了關于如何使用Python分析文本數(shù)據(jù)的詞頻并詞云圖可視化,文章中有詳細的圖文介紹和代碼示例,對我們的學習或工作有一定的幫助,需要的朋友可以參考下
    2023-09-09

最新評論

大竹县| 蓬安县| 和平区| 嘉义市| 大港区| 大邑县| 武夷山市| 通榆县| 太白县| 闽侯县| 闻喜县| 十堰市| 甘谷县| 莲花县| 合山市| 尼木县| 进贤县| 正阳县| 永宁县| 上栗县| 祁阳县| 东乡族自治县| 中西区| 乐业县| 西林县| 沽源县| 旌德县| 思茅市| 土默特右旗| 介休市| 延庆县| 和硕县| 庄河市| 苏州市| 宁国市| 太仆寺旗| 渑池县| 平湖市| 宝清县| 大连市| 剑川县|