精华内容
下载资源
问答
  • 学生选课系统,JSP开发实例,课设必备,新手入门好资料
  • 学生选课系统实例

    2012-01-14 21:07:14
    利用powerbuilder开发的学生选课系统,包括注册,登陆,查询等功能
  • config文件夹下为设置文件,涉及系统参数配置:setting db文件夹为数据类文件,涉及系统的输入输出数据:admin,students lib文件夹下为公用模块文件 log为日志文件夹 bin文件夹 administrator #...

    程序目录:

    1. bin文件夹下为可执行文件:administrator,students
    2. config文件夹下为设置文件,涉及系统参数配置:setting
    3. db文件夹为数据类文件,涉及系统的输入输出数据:admin,students
    4. lib文件夹下为公用模块文件
    5. log为日志文件夹

     

    • bin文件夹
    1. administrator
      #!/usr/bin/env python
      # -*- coding;utf-8 -*-
      
      import random
      import time
      import pickle
      import os
      import sys
      from config import settings
      from lib import models
      from lib.models import *
      sys.path.append(os.path.dirname(os.path.dirname(__file__)))
      
      def create_course(admin_obj):
          teacher_list = pickle.load(open(settings.TEACHER_DB_DIR, "rb"))
          for num, item in enumerate(teacher_list, 1):
              print(num, item.name, item.age, item.create_time, item.create_admin.username)
          Course_list = []
          while True:
              name = input("请选择课程名称...:")
              if name == "q":
                  break
              cost = input("请选择课时费...:")
              if cost == "q":
                  break
              num = input("选择老师(序号):")
              if num == "q":
                  break
              obj = models.Course(name, cost, teacher_list[int(num) - 1], admin_obj)
              Course_list.append(obj)
      
          if os.path.exists(settings.COURSE_DB_DIR):
              exists_list = pickle.load(open(settings.COURSE_DB_DIR, "rb"))
              Course_list.extend(exists_list)
          pickle.dump(Course_list, open(settings.COURSE_DB_DIR, "wb"))
      
      def create_teacher(admin_obj):
          teacher_list = []
          while True:
              teacher_name = input("请输入老师姓名(q表示退出):")
              if teacher_name == "q":
                  break
              teacher_age = input("请输入老师年龄:")
              obj = models.Teacher(teacher_name, teacher_age, admin_obj)
              teacher_list.append(obj)
          if os.path.exists(settings.TEACHER_DB_DIR):
              exists_list = pickle.load(open(settings.TEACHER_DB_DIR, "rb"))
              teacher_list.extend(exists_list)
          pickle.dump(teacher_list, open(settings.TEACHER_DB_DIR, "wb"))
      
      def login(user, pwd):
          if os.path.exists(os.path.join(settings.BASE_ADMIN_DIR, user)):
              # 从文件中将管理员对象读取出来(里面封装了用户信息以及提供了登录方法)
              admin_obj = pickle.load(open(os.path.join(settings.BASE_ADMIN_DIR, user), "rb"))
              if admin_obj.login(user, pwd):
                  print("登陆成功!")
                  while True:
                      se1 = input("1、创建老师;2、创建课程;(q表示退出)\n>>>")
                      if se1 == '1':
                          create_teacher(admin_obj)
                      elif se1 == '2':
                          create_course(admin_obj)
                      elif se1 == "q":
                          break
                  return 2
              else:
                  return 1
          else:
              return 0
      
      def register(user, pwd):
          admin_obj = models.Admin()
          admin_obj.register(user, pwd)
      
      def main():
          inp = input("1、管理员登录;2、管理员注册;(q表示退出) \n>>>")
          while True:
              if inp == "1":
                  user = input("请输入用户名:")
                  pwd = input("请输入密码:")
                  ret = login(user, pwd)
                  if ret == 1:
                      print("用户名或密码错误!")
                  elif ret == 0:
                      print("用户不存在!")
                  elif ret == 2:
                      print("退出成功!")
                      break
              elif inp == "2":
                  user = input("请输入用户名:")
                  pwd = input("请输入密码:")
                  register(user, pwd)
                  print("注册成功!")
              elif inp == "q":
                  print("退出成功!")
                  break
      
      if __name__ == "__main__":
          main()
    2. students
      #!/usr/bin/env python
      # -*- coding;utf-8 -*-
      import random
      import time
      from lib import models
      import os
      import sys
      import pickle
      from config import settings
      from lib.models import Course, Admin, Teacher
      sys.path.append(os.path.dirname(os.path.dirname(__file__)))
      
      def course_info(student_obj):
          course_list = pickle.load(open(settings.COURSE_DB_DIR, "rb"))
          for num, item in enumerate(student_obj.course_list, 1):
              print(num, item.course_name, item.cost, item.teacher_obj.name)
      
      def select_course(student_obj):
          """
          学生选课
          :param student_obj:
          :return:
          """
          course_list = pickle.load(open(settings.COURSE_DB_DIR, "rb"))
          for num, item in enumerate(course_list, 1):
              print(num, item.course_name, item.cost, item.teacher_obj.name)
          while True:
              num = input("请选择课程(q退出)\n>>>")
              if num == "q":
                  break
              select_course_obj = course_list[int(num) - 1]
              if select_course_obj not in student_obj.course_list:
                  student_obj.course_list.append(select_course_obj)
          pickle.dump(student_obj, open(os.path.join(settings.BASE_STUDENTS_DIR, student_obj.username), "wb"))
      
      def register(user, pwd):
          """
          学生注册
          :param user:
          :param pwd:
          :return:
          """
          obj = models.Students()
          obj.register(user, pwd)
      
      def login(user, pwd):
          """
          学生登录
          :param user:
          :param pwd:
          :return:
          """
          if os.path.exists(os.path.join(settings.BASE_STUDENTS_DIR, user)):
              student_obj = pickle.load(open(os.path.join(settings.BASE_STUDENTS_DIR, user), "rb"))
              while True:
                  if student_obj.login(user, pwd):
                      inp = input("1、选课;2、上课;3、查看课程信息(q表示退出!)\n>>>")
                      if inp == "1":
                          select_course(student_obj)
                      elif inp == "3":
                          course_info(student_obj)
                      elif inp == '2':
                          pass
                      elif inp == 'q':
                          break
                  else:
                      print("用户名或密码错误!")
                      return 1
          else:
              print("用户不存在")
              return 0
      
      def main():
          inp = input("1、登录;2、注册;\n>>>")
          user = input("请输入用户名:\n>>>")
          pwd = input("请输入密码:\n>>>")
          if inp == "1":
              ret = login(user, pwd)
          elif inp == '2':
              ret = register(user, pwd)
              if ret:
                  print("注册成功!")
      
      if __name__ == "__main__":
          main()
    • config配置文件
      #!/usr/bin/env python
      # -*- coding;utf-8 -*-
      import os
      
      BASE_DIR = os.path.dirname(os.path.dirname(__file__))
      
      BASE_ADMIN_DIR = os.path.join(BASE_DIR, "db", "admin")
      
      BASE_STUDENTS_DIR = os.path.join(BASE_DIR, "db", "students")
      
      TEACHER_DB_DIR = os.path.join(BASE_DIR, "db", "teacher_list")
      
      COURSE_DB_DIR = os.path.join(BASE_DIR, "db", "course_list")
      
      LOG_PATH = os.path.join(BASE_DIR, "log")
    • db数据文件:用来存放管理员和学生的注册用户名密码,以及选课开课信息。注意:开课信息和学生选课信息不能混淆,注意存放路径
    • lib公用模块文件
      #!/usr/bin/env python
      # -*- coding;utf-8 -*-
      import random
      import time
      import pickle
      import os
      from config import settings
      
      class Teacher:
          """
          封装老师的相关信息
          """
          def __init__(self, name, age, admin):
              self.name = name
              self.age = age
              self.__assets = 0
              self.create_time = time.strftime("%Y-%m-%d %H:%M:%S")
              self.create_admin = admin
      
          def gain(self, cost):
              """
              增加资产
              :param cost: 增加的数量
              :return: 收入
              """
              self.__assets += cost
      
          def decrease(self, cost):
              """
              减少资产
              :param cost: 减少的数量
              :return: 收入
              """
              self.__assets -= cost
      
      class Admin:
          """
          封装管理员的信息
          """
          def __init__(self):
              self.username = None
              self.password = None
      
          def login(self, user, pwd):
              """
              管理员登录
              :param user: 用户名
              :param pwd: 密码
              :return:
              """
              if self.username == user and self.password == pwd:
                  return True
              else:
                  return False
      
          def register(self, user, pwd):
              """
              管理员注册
              :param user:
              :param pwd:
              :return:
              """
              self.username = user
              self.password = pwd
      
              path = os.path.join(settings.BASE_ADMIN_DIR, self.username)
      
              pickle.dump(self, open(path, "xb"))
              return True
      
      class Course:
          """
          课程相关信息
          """
          def __init__(self, course_name, cost, teacher_obj, admin ):
              self.course_name = course_name
              self.cost = cost
              self.teacher_obj = teacher_obj
              self.create_time = time.strftime("%Y-%m-%d %H:%M:%S")
              self.create_admin = admin
      
          def have_lesson(self):
              """
              课程上课,自动给相关联的任课老师增加课时费
              :return: 课程内容返回给上课者
              """
              self.teacher.gain(self.cost)
              content = random.randrange(10, 100)
      
      class Students:
          """
          学生相关信息
          """
          def __init__(self):
              self.username = None
              self.password = None
              self.course_list = []
              self.study_dict = {}
      
          def select_course(self,course_obj):
              """
              学生选课
              :param course_obj:
              :return:
              """
              self.course_list.append(course_obj)
      
          def study(self,course_obj):
              """
              学生上课
              :param course_obj:
              :return:
              """
              class_result = course_obj.have_lesson()
              if course_obj in self.study_dict.keys():
                  self.study_dict[course_obj].append(class_result)
              else:
                  self.study_dict[course_obj] = [class_result,]
      
          def login(self, user, pwd):
              """
              学生登录
              :param user:
              :param pwd:
              :return:
              """
              if self.username == user and self.password == pwd:
                  return True
              else:
                  return False
      
          def register(self, user, pwd):
              """
              学生注册
              :param user:
              :param pwd:
              :return:
              """
              self.username = user
              self.password = pwd
      
              path = os.path.join(settings.BASE_STUDENTS_DIR, self.username)
              try:
                  pickle.dump(self, open(path, "xb"))
              except Exception as f:
                  return False
              else:
                  return True
    • 日志文件:保存系统相关操作记录

    转载于:https://www.cnblogs.com/nixingguo/p/6494075.html

    展开全文
  • 采用eclipse和MySQL开发的学生在线选课系统。功能如下: 1、权限控制:采用过滤器实现用户登录和权限的控制。同时,每个学生一个账户(学号)可以登录系统进行个人信息的管理,并完成选课操作;管理员(固定为admin...
  • JSP做的学生网上选课系统,数据库Mysql,可作初学Java Web开发的参考实例项目,编写工具Myeclipse,直接导入即可查看
  • 本书以多个实用的信息管理系统(包括教务实验课选课系统、电子购物商城、物业管理系统、图书借阅系统、个人办公系统、公司内部管理系统)为案例,详细讲述了信息管理系统的开发过程,对目标设计、系统开发背景、系统...
  • ASP.NET信息管理系统开发实例导航的配套源代码,第1章 教务实验课选课系统 第2章 电子购物商城 第3章 物业管理系统 第4章 图书借阅系统系统 第5章 个人办公系统 第6章 公司内部管理系统
  • ASP.NET信息管理系统开发实例导航 简介: 本书以多个实用的信息管理系统(包括教务实验课选课系统、电子购物商城、 物业管理系统、图书借阅系统、个人办公系统、公司内部管理系统)为案例,详细讲述了信息管理系统的...
  • ASP.NET信息管理系统开发实例导航 简介: 本书以多个实用的信息管理系统(包括教务实验课选课系统、电子购物商城、 物业管理系统、图书借阅系统、个人办公系统、公司内部管理系统)为案例,详细讲述了信息管理系统的...
  • ASP.NET信息管理系统开发实例导航 简介: 本书以多个实用的信息管理系统(包括教务实验课选课系统、电子购物商城、 物业管理系统、图书借阅系统、个人办公系统、公司内部管理系统)为案例,详细讲述了信息管理系统的...
  • 《ASP.NET信息管理系统开发实例导航》 本书以多个实用的信息管理系统(包括教务实验课选课系统、电子购物商城、物业管理系统、图书借阅系统、个人办公系统、公司内部管理系统)为案例,详细讲述了信息管理系统的...
  • 《ASP.NET信息管理系统开发实例导航》 本书以多个实用的信息管理系统(包括教务实验课选课系统、电子购物商城、物业管理系统、图书借阅系统、个人办公系统、公司内部管理系统)为案例,详细讲述了信息管理系统的...
  • 创建北京、上海两所学校(分析:通过学校类实例化两个学校实例) 2.创建Linux、python、go三个课程,Linux\go在北京开,Linux在上海开(创建Linux、python、go三门课程) 3.课程包含:周期、价格,通过学校来创建...

    程序要求:
    1.创建北京、上海两所学校(分析:通过学校类实例化两个学校实例

    2.创建Linux、python、go三个课程,Linux\go在北京开,Linux在上海开(创建Linux、python、go三门课程

    3.课程包含:周期、价格,通过学校来创建课程(分析:通过学校实例来创建课程,课程包含三个属性:名字、周期、价格

    4.通过学校来创建班级,班级关联课程、讲师(分析:通过学校实例来创建班级,班级要关联课程、讲师

    5.创建学员时,选择学校、关联班级(分析:选择学校后通过学校实例创建学员,学员关联班级

    6.创建讲师时要关联学校(分析:通过学校实例来创建讲师,并关联班级

    7.创建讲师角色时要关联学校提供的两个角色接口(同上

    8.学员视图:可以注册、交学费、选择班级

    9.讲师视图:讲师可以管理自己的班级,上课选择班级、查看班级学员列表、修改所管理的学员的成绩

    10.管理视图:创建讲师、创建班级、创建课程

    11。上面的操作产生的数据都保存在文件里

    由上述分析可知:需要创建5个类:学校、学员、班级、课程、讲师

    5个类的对应关系:

    一个学校对应多个班级、学员、课程、讲师

    一个班级对应多个学员、一个课程、一个讲师

    一个讲师对应多个班级、多个学员,(可通过班级找到学员、课程)

    一个学员对应多个班级

    有以上可知:可由学校类的属性中保存班级、学员、课程、讲师的实例字典,由班级类的属性中保

                         存学员实例字典,课程实例。由讲师类的属性中保存班级实例字典

    功能需求:三个视图,即8、9、10所要求的功能

    以下是程序的目录结构:

    以下是程序的全部代码:

    bin目录下的start

     1 # -*- coding:utf-8 -*-
     2 #!/user/bin/env.python
     3 #Author:Mr Wu
     4 
     5 import os,sys
     6 
     7 BASE_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
     8 sys.path.insert(0,BASE_dir)
     9 from core import main
    10 
    11 if __name__ == '__main__':
    12     obj = main.intersection_center()
    13     obj.intersection()
    View Code

    conf目录下的settings

     1 '''定义数据库的绝对路径'''
     2 import os
     3 if os.sep == "\\":
     4     BASE_dir = "\\".join(os.path.abspath(os.path.dirname(__file__)).split("\\")[:-1])
     5     database_dir = os.path.join(BASE_dir,"database")
     6 else:
     7     BASE_dir = "/".join(os.path.abspath(os.path.dirname(__file__)).split("/")[:-1])
     8     database_dir = os.path.join(BASE_dir,"database")
     9 
    10 school_db_file = os.path.join(database_dir,"school")
    View Code

    core目录下的main:

    import os,sys,shelve
    BASE_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.insert(0,BASE_dir)
    from modules import School
    from conf import settings
    
    class intersection_center(object):
        '''开始交互'''
        def __init__(self):
            pass
        def intersection(self):
            while True:
                print("\033[1;30m欢迎来到学生选课系统\033[0m\n"
                      "1:\033[1;31m管理视图\033[0m\n"
                      "2:\033[1;32m讲师视图\033[0m\n"
                      "3:\033[1;33m学员视图\033[0m\n"
                      "q:\033[1;34m退出\033[0m\n")
                user_choice = input("\033[1;30m input your choice ID>>>:\033[0m")
                if user_choice == "1":
                    manage_view()
                elif user_choice == "2":
                    teacher_view()
                elif user_choice == "3":
                    student_view()
                elif user_choice == "q":
                    print("\033[1;30m感谢您使用学生信息管理系统\033[0m")
                    break
                else:
                    print("\033[1;31m输入错误!\033[0m")
    
    class manage_view(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.manage_intersection()
                self.school_db.close()
            else:
                print("\033[1;31m系统提示:开始创建学校\033[0m")
                self.create_school()
                self.manage_intersection()
                self.school_db.close()
        def create_school(self):
            '''创建学校'''
            self.school_db = shelve.open(settings.school_db_file)
            for i in range(2):
                school_name = input("\033[1;30m input school name>>>:\033[0m")
                school_address = input("\033[1;30m input school address>>>:\033[0m")
                self.school_db[school_name] = School.School(school_name,school_address)
        def manage_intersection(self):
            '''管理视图交互'''
            count = 0
            print("\033[1;30m学校名称:\033[0m")
            for key in self.school_db:
                print(key)
            while count < 3:
                self.school_name = input("\033[1;30m输入要管理的学校名称>>>:\033[0m")
                if self.school_name in self.school_db:
                    self.school = self.school_db[self.school_name]
                    while True:
                        print("\033[1;30m欢迎来到管理视图\033[0m\n"""
                              "1:\033[1;31m创建班级\033[0m\n"
                              "2:\033[1;32m创建课程\033[0m\n"
                              "3:\033[1;33m招聘讲师\033[0m\n"
                              "4:\033[1;34m查看班级\033[0m\n"
                              "5:\033[1;35m查看讲师\033[0m\n"
                              "6:\033[1;36m查看课程\033[0m\n"
                              "b:\033[1;37m返回\033[0m\n")
                        user_choice = input("\033[1;30m input your choice ID>>>:\033[0m")
                        if user_choice == "1":
                            self.create_class()
                        elif user_choice == "2":
                            self.create_course()
                        elif user_choice == "3":
                            self.create_teacher()
                        elif user_choice == "4":
                            self.show_class()
                        elif user_choice == "5":
                            self.show_teacher()
                        elif user_choice == "6":
                            self.show_course()
                        elif user_choice == "b":
                            print("\033[1;35m感谢您使用管理视图\033[0m")
                            break
                        else:
                            print("\033[1;31m输入错误!\033[0m")
                    break
                else:
                    print("\033[1;31m输入错误,请重新输入\033[0m")
                    count += 1
    
        def create_class(self):
            '''创建班级'''
            while True:
                class_number = input("\033[1;30m输入班级编号>>>:\033[0m")
                if class_number in self.school.classes:
                    print("\033[1;31m这个班级已经存在!\033[0m")
                    continue
                else:
                    course_name = input("\033[1;30m输入关联的课程名称>>>:\033[0m")
                    if course_name in self.school.courses:
                        self.school.create_class(class_number,course_name)
                        print("\033[1;30m创建班级:\033[0m[\033[1;33m%s班]成功\033[0m,\033[1;30m开设课程:\033[0m[\033[1;33m%s\033[0m]"%(class_number,course_name))
                        if_continue = input("\033[1;30m是否继续创建班级? Y/N>>>:\033[0m")
                        if if_continue == "Y":
                            continue
                        elif if_continue == "N":
                            self.school_db.update({self.school_name:self.school})
                            break
                        else:
                            print("\033[1;31m输入错误!\033[0m")
                    else:
                        print("\033[1;31m此课程不存在,请先创建此课程!\033[0m")
                        break
    
        def create_teacher(self):
            '''招聘教师'''
            while True:
                tea_name = input("\033[1;30m输入讲师的名字>>>:\033[0m")
                if tea_name in self.school.teachers:
                    print("\033[1;31m这个讲师已经存在!\033[0m")
                    continue
                else:
                    tea_age = input("\033[1;30m输入讲师的年龄>>>:\033[0m")
                    tea_sex = input("\033[1;30m输入讲师的性别>>>:\033[0m")
                    tea_salary = input("\033[1;30m输入讲师的薪资>>>:\033[0m")
                    while True:
                        class_number_str = input("\033[1;30m输入关联的班级编号(格式:int,int...)>>>:\033[0m")
                        class_number_list = class_number_str.split(",")
                        count = 0
                        for class_number in class_number_list:
                            if class_number in self.school.classes:
                                count += 1
                        if count == len(class_number_list):
                            self.school.create_teacher(tea_name,tea_age,tea_sex,tea_salary,class_number_list)
                            print("讲师:[%s] 关联班级:[%s班]"%(tea_name,class_number_str))
                            break
                        else:
                            print("\033[1;31m关联的班级中有不存在的班级,请检查后重新输入!\033[0m")
                    if_continue = input("\033[1;30m是否继续招聘讲师? Y/N>>>:\033[0m")
                    if if_continue == "Y":
                        continue
                    elif if_continue == "N":
                        print("\033[1;30m招聘讲师:[%s]成功\033[0m \033[1;33m薪资:[%s]\033[0m"%(tea_name,tea_salary))
                        self.school_db.update({self.school_name:self.school})
                        break
                    else:
                        print("\033[1;31m输入错误!\033[0m")
                        break
    
        def create_course(self):
            '''创建课程'''
            while True:
                course_name = input("\033[1;30m输入课程名字>>>:\033[0m")
                if course_name in self.school.courses:
                    print("\033[1;31m这个课程已经存在!\033[0m")
                    continue
                else:
                    course_time = input("\033[1;30m输入课程周期>>>:\033[0m")
                    course_price = input("\033[1;30m输入课程价格>>>:\033[0m")
                    self.school.create_course(course_name,course_time,course_price)
                    print("\033[1;30m创建课程:\033[0m\033[1;33m[%s]成功\033[0m,\033[1;30m课程周期:\033[0m\033[1;33m[%s]\033[0m"%(course_name,course_time))
                    if_continue = input("\033[1;30m是否继续创建课程? Y/N>>>:\033[0m")
                    if if_continue == "Y":
                        continue
                    elif if_continue == "N":
                        self.school_db.update({self.school_name:self.school})
                        break
                    else:
                        print("\033[1;31m输入错误!\033[0m")
                        break
    
        def show_class(self):
            '''班级信息'''
            while True:
                self.school.show_classes()
                if_continue = input("\033[1;30m是否继续查看班级信息? Y/N>>>:\033[0m")
                if if_continue == "Y":
                    continue
                elif if_continue == "N":
                    break
                else:
                    print("\033[1;301输入错误!\033[0m")
    
        def show_teacher(self):
            '''讲师信息'''
            while True:
                self.school.show_teachers()
                if_continue = input("\033[1;30m是否继续查看讲师信息? Y/N>>>:\033[0m")
                if if_continue == "Y":
                    continue
                elif if_continue == "N":
                    break
                else:
                    print("\033[1;31m输入错误!\033[0m")
    
        def show_course(self):
            '''课程信息'''
            while True:
                self.school.show_courses()
                if_continue = input("\033[1;30m是否继续查看课程信息? Y/N>>>:\033[0m")
                if if_continue == "Y":
                    continue
                elif if_continue == "N":
                    break
                else:
                    print("\033[1;31m输入错误!\033[0m")
    
    class teacher_view(object):
        '''讲师视图'''
        def __init__(self):
            if os.path.exists(settings.school_db_file+".dat"):
                self.school_db = shelve.open(settings.school_db_file)
                self.teacher_intersection()
                self.school_db.close()
            else:
                print("\033[1;31m抱歉学校还未建成!\033[0m")
    
        def teacher_intersection(self):
            '''讲师交互'''
            count = 0
            while count < 3:
                self.school_name = input("\033[1;30m请输入您就职学校的名字>>>:\033[0m")
                if self.school_name in self.school_db:
                    self.school = self.school_db[self.school_name]
                    tea_name = input("\033[1;30m输入您的名字>>>:\033[0m")
                    if tea_name in self.school.teachers:
                        self.teacher = self.school.teachers[tea_name]
                        while True:
                            print("\033[1;30m欢迎来到讲师视图\033[0m\n"
                                  "1:\033[1;31m上课选择班级\033[0m\n"
                                  "2:\033[1;32m查看学员列表\033[0m\n"
                                  "b:\033[1;33m返回\033[0m\n")
                            user_choice = input("\033[1;30minput your choice ID>>>:\033[0m")
                            if user_choice == "1":
                                self.select_class()
                            elif user_choice == "2":
                                self.show_student()
                            elif user_choice == "b":
                                print("\033[1;33m感谢您使用讲师视图\033[0m")
                                break
                            else:
                                print("\033[1;31m输入错误!\033[0m")
                        break
                    else:
                        print("\033[1;31m输入错误!\033[0m")
                        count += 1
                else:
                    print("\033[1;31m输入错误!\033[0m")
                    count += 1
    
        def show_student(self):
            '''查看学员列表'''
            while True:
                print("\033[1;30m班级列表:\033[0m")
                for key in self.teacher.classes:
                    print("\033[1;36m班级编号:%s 开设课程:%s\033[0m"%(key,self.teacher.classes[key].course_obj.course_name))
                class_number = input("\033[1;30m输入您想查看的班级编号>>>:\033[0m")
                if class_number in self.teacher.classes:
                    class_obj = self.teacher.classes[class_number]
                    for key in class_obj.student_list:
                        stu_name = key
                        stu_age = class_obj.student_list[stu_name].stu_age
                        print("\033[1;30m学员名字:%s\033[0m \033[1;31m学员年龄:%s\033[0m"%(stu_name,stu_age))
                    if_continue = input("\033[1;30m是否继续查看学员列表? Y/N>>>:\033[0m")
                    if if_continue == "Y":
                        continue
                    elif if_continue == "N":
                        break
                    else:
                        print("\033[1;31m输入错误!\033[0m")
                else:
                    print("\033[1;31m班级编号不存在!\033[0m")
    
        def select_class(self):
            '''上课选择班级'''
            while True:
                for class_number in self.teacher.classes:
                    class_obj = self.teacher.classes[class_number]
                    course_name = class_obj.course_obj.course_name
                    print("\033[1;30m班级编号:%s\033[0m \033[1;31m开设课程:m%s\033[0m"%(class_number,course_name))
                select_class = input("\033[1;30m输入您想要上课的班级编号>>>:\033[0m")
                if select_class in self.teacher.classes:
                    print("\033[1;35m讲师%s今天给%s班上课....\033[0m"%(self.teacher.tea_name,select_class))
                    if_continue = input("\033[1;30m是否重新选择上课班级? Y/N>>>:\033[0m")
                    if if_continue == "Y":
                        continue
                    elif if_continue == "N":
                        break
                    else:
                        print("\033[1;31m输入错误!\033[0m")
                else:
                    print("\033[1;31m输入错误!\033[0m")
    
    
    class student_view(object):
        '''学员视图'''
        def __init__(self):
            if os.path.exists(settings.school_db_file+".dat"):
                self.school_db = shelve.open(settings.school_db_file)
                self.student_interaction()
                self.school_db.close()
            else:
                print("\033[1;31m抱歉学校还未建成!\033[0m")
        def student_interaction(self):
            '''学生交互'''
            while True:
                print("\033[1;30m欢迎来到学生视图\033[0m\n"
                      "1:\033[1;31m注册\033[0m\n"
                      "2:\033[1;32m查看课程\033[0m\n"
                      "b:\033[1;33m返回\033[0m\n")
                user_choice = input("\033[1;30m input your choice ID>>>:\033[0m")
                if user_choice == "1":
                    self.registered_class()
                elif user_choice == "2":
                    self.show_course()
                elif user_choice == "b":
                    print("\033[1;35m感谢您使用学生视图\033[0m")
                    break
                else:
                    print("\033[1;35m输入错误!\033[0m")
        def registered_class(self):
            '''注册学校、班级、缴费'''
            while True:
                print("\033[1;30m学校名称:\033[0m")
                for key in self.school_db:
                    print(key)
                self.school_name = input("\033[1;30m输入您想要注册的学校>>>:\033[0m")
                if self.school_name in self.school_db:
                    self.school = self.school_db[self.school_name]
                    for key in self.school.classes:
                        class_obj = self.school.classes[key]
                        course_name = class_obj.course_obj.course_name
                        course_price = class_obj.course_obj.course_price
                        print("\033[1;33m班级编号:%s\033[0m \033[1;34m课程名称:%s\033[0m \033[1;35m课程价格:%s\033[0m"%(key,course_name,course_price))
                    class_number = input("\033[1;30m输入您想要注册的班级编号>>>:\033[0m")
                    if class_number in self.school.classes:
                        class_obj = self.school.classes[class_number]
                        course_money = class_obj.course_obj.course_price
                        stu_name = input("\033[1;30m输入您的名字>>>:\033[0m")
                        if stu_name in class_obj.student_list:
                            print("\033[1;31m您已经报名此班级,请选择其他班级\033[0m")
                        else:
                            stu_age = input("\033[1;30m输入您的年龄>>>:\033[0m")
                            stu_sex = input("\033[1;30m输入您的性别>>>:\033[0m")
                            if_pay = input("\033[1;30m您选中的课程费用为:%s,是否支付费用? Y/N>>>:\033[0m"%(course_money))
                            if if_pay == "Y":
                                print("\033[1;39m注册班级:[%s班]成功 , 学习课程:[%s]\033[0m"%(class_number,class_obj.course_obj.course_name))
                            elif if_pay == "N":
                                continue
                            else:
                                print("\033[1;31m输入错误!\033[0m")
                            self.school.create_student(stu_age,stu_sex,stu_name,class_number)
                            self.school_db.update({self.school_name:self.school})
                            break
                    else:
                        print("\033[1;31m不存在此班级编号!\033[0m")
                else:
                    print("\033[1;31m不存在此学校!\033[0m")
        def show_course(self):
            '''查看课程信息'''
            while True:
                class_number = input("\033[1;30m输入您上课的班级编号>>>:\033[0m")
                if class_number in self.school.classes:
                    class_obj = self.school.classes[class_number]
                    course_obj = class_obj.course_obj
                    course_name = course_obj.course_name
                    course_time = course_obj.course_time
                    course_price = course_obj.course_price
                    print("\033[1;32m课程:%s\033[0m \033[1;33m周期:%s\033[0m \033[1;34m价格:%s\033[0m"%(course_name,course_time,course_price))
                    if_continue = input("\033[1;30m是否继续查看课程信息? Y/N>>>:\033[0m")
                    if if_continue == "Y":
                        continue
                    elif if_continue == "N":
                        break
                    else:
                        print("\033[1;31m输入错误\033[0m")
                else:
                    print("\033[1;31m不存在此班级编号!\033[0m")
    View Code

    modules目录:

    Class:

    1 class Class(object):
    2     def __init__(self,class_number,course_obj):
    3         self.class_number = class_number
    4         self.course_obj = course_obj
    5         self.student_list = {}
    View Code

    Teacher:

    1 class Teacher(object):
    2     def __init__(self,tea_name,tea_age,tea_sex,tea_salary):
    3         self.tea_name = tea_name
    4         self.tea_age = tea_age
    5         self.tea_sex = tea_sex
    6         self.tea_salary = tea_salary
    7         self.classes = {}
    8     def teacher_add_class(self,class_number,class_obj):
    9         self.classes[class_number] = class_obj
    View Code

    School:

    from modules import Course,Class,Student,Teacher
    import pickle
    class School(object):
        '''学校类'''
        def __init__(self,school_name,school_address):
            self.school_name = school_name
            self.school_address = school_address
            self.teachers = {} #讲师实例
            self.classes = {} #班级实例
            self.courses = {} #课程实例
            #self.students = {} #待扩展
        def create_class(self,class_number,course_name):
            '''创建班级、班级关联课程'''
            class1 = Class.Class(class_number,self.courses[course_name])
            self.classes[class_number] = class1
    
        def create_teacher(self,tea_name,tea_age,tea_sex,tea_salary,class_number_list):
            '''招聘讲师'''
            teacher = Teacher.Teacher(tea_name,tea_age,tea_sex,tea_salary)
            for class_number in class_number_list:
                teacher.teacher_add_class(class_number,self.classes[class_number])
            self.teachers[tea_name ] = teacher
    
        def create_student(self,stu_age,stu_sex,stu_name,class_number):
            '''创建学员,关联班级'''
            student = Student.Student(stu_name,stu_age,stu_sex)
            self.classes[class_number].student_list[stu_name] = student
    
        def create_course(self,course_name,course_time,course_price):
            '''创建课程'''
            course = Course.Course(course_name,course_time,course_price)
            self.courses[course_name] = course
    
        def show_teachers(self):
            '''查看教师信息'''
            for key in self.teachers:
                tea_obj = self.teachers[key]
                print("名字:%s 年龄:%s 性别:%s 薪资:%s"%(tea_obj.tea_name,tea_obj.tea_age,tea_obj.tea_sex,tea_obj.tea_salary))
    
        def show_classes(self):
            '''查看班级信息'''
            for key in self.classes:
                class_obj = self.classes[key]
                print("班级编号:%s 开设课程:%s"%(class_obj.class_number,class_obj.course_obj.course_name))
    
        def show_courses(self):
            '''查看课程信息'''
            for key in self.courses:
                course_obj = self.courses[key]
                print("课程:%s 周期:%s 价格:%s"%(course_obj.course_name,course_obj.course_time,course_obj.course_price))
    View Code

    Course·:

    class Course(object):
        def __init__(self,course_name,course_time,course_price):
            self.course_name = course_name
            self.course_time = course_time
            self.course_price = course_price
    View Code

    Student:

    1 class Student(object):
    2     def __init__(self,stu_name,stu_age,stu_sex):
    3         self.stu_name = stu_name
    4         self.stu_age = stu_age
    5         self.stu_sex = stu_sex
    View Code

     以下是程序执行过程、结果

    开始界面:

    管理视图

     

    创建课程:

    创建班级:

     招聘讲师:

     查看班级:

    查看讲师:

    查看课程:

    讲师视图

    上课选班级:

     

    查看学员列表:

    学员视图:

    注册:

    查看课程:

     开发过程中遇到的问题:

    1.数据存储问题:学校、班级、讲师、课程、学员之间的信息相互关联,如果将其分开存文件,那么如果有一处的信息变动,那么与之相关联的文件也要修改,这样做十分麻烦。

    所以把班级实例、讲师实例、课程实例、学员实例都保存在学校实例中,这样只需要存学校一个文件即可

    2.数据序列化问题:开始的时候我使用的是pickle序列化,这样在每个方法中都必须打开-关闭文件才能将文件中的数据更新,这样做十分麻烦。解决方法:使用shelve数据序列化,

    在交互开始的时候打开文件,在交互结束的时候再关闭文件,在交互的过程中使用sellf.school_d.update({self.school_name:sellf.school})来更新文件中的数据,这样做十分简略

    转载于:https://www.cnblogs.com/BUPT-MrWu/p/9881972.html

    展开全文
  • 本书以多个实用的信息管理系统(包括教务实验课选课系统、电子购物商城、物业管理系统、图书借阅系统、个人办公系统、公司内部管理系统)为案例,详细讲述了信息管理系统的开发过程,对目标设计、系统开发背景、系统...
  • Microsoft公司推出.NET平台,将Web开发集中于一个开发环境中,大大方便了Web系统开发,提高了开发效率,因此,非常多的读者都希望能掌握ASP.NET的实用技术。 信息管理系统是最为广泛开发和应用的,针对现有ASP.NET...
  • 本书以多个实用的信息管理系统(包括教务实验课选课系统、电子购物商城、物业管理系统、图书借阅系统、个人办公系统、公司内部管理系统)为案例,详细讲述了信息管理系统的开发过程,对目标设计、系统开发背景、系统...
  • asp.net2.0实例开发:包含学生管理系统、学生选课系统
  • JAVAEE企业级软件开发实例选课系统,Javaee课上的一个实例开发,也是我们大作业。开发平台是eisilips ..
  • 由jsp,Servlet组成MVC开发模式的在线选课系统
  • 学生选课系统C语言版

    2008-10-24 23:23:16
    对于想要深入了解c语言开发实例,这个项目是一个很好的参考,学生选课是一个很好的实战项目,值得参考一下!不好意思,积分高了一点!(那是因为有开发文档)
  • 简单的学生选课系统(php+mysql)

    热门讨论 2010-11-19 20:59:43
    本系统使用PHP语言和MYSQL作为数据库而开发出来的,只是简单的一个选课系统,作为数据库编程的入门实例
  • C语言学习者的经典实例,难得可贵。通过此资源可以加深对C语言的理解,并掌握一定的开发经验。
  • 本书后半部分为数据库综合实例,介绍企业开发中的劳力管理系统、订单管理系统、库存管理系统、图书借阅系统和学生选课系统等内容。通过本书的学习读者能详细掌握基于MVC的框架Struts,使用J SP解析XML、报表和统计图...
  • 一个由Delphi/Access架构的学生信息管理系统源码实例,实现学生信息的录入、修改、删除、...本套信息管理系统可作为一个简单的入门的Delphi数据库系统开发实例,帮助Delphi新手学习Delphi与Access方面一些常用的操作。
  • 本文并不想介绍Struts,Spring,Hibernate的原理系统架构等,本文的目的是通过一个较复杂地实例介绍如何整合Struts,Spring,Hibernate,网上很多资料介绍的例子虽然也能达到目的,但功能都比较单一,复杂的例子时会...
  • 最后一部分精选5个典型的网站案例,包括在线选课管理系统、招聘管理系统、网上鲜花销售系统、用户权限管理系统及博客船系统等进行讲解,并提供部份源代码。这些实例源码都已经过测试,运行通过,并且收集在本书配套...
  • 2、注册和登录模块 3、访问统计模块 4、新闻管理和发布模块 5、在线选课管理系统 6、在线招聘管理系统 7、网上鲜花销售系统 8、用户权限管理系统 9、博客 适合初学者

空空如也

空空如也

1 2 3 4
收藏数 62
精华内容 24
关键字:

选课系统开发实例