选课系统作业

本文介绍了一个简单的选课系统的实现细节,包括学校、课程、讲师及学员等核心模块的设计与功能实现,支持注册、登录、交学费等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、作业需求
程序名称: 选课系统

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

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

三、源代码

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "Sam"
# Date: 2017/7/4

import sys,os
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
from src import core

if __name__ == '__main__':
    core.func()
start.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "Sam"
# Date: 2017/7/4

STUDENTDB_PATH=r'F:\python文件\选课系统\db\student'
TEACHERDB_PATH=r'F:\python文件\选课系统\db\teacher'
COURSE_PATH=r'F:\python文件\选课系统\db\course'
SCHOOL_PATH=r'F:\python文件\选课系统\db\school'
CLASS_PATH=r'F:\python文件\选课系统\db\class'
settings.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "Sam"
# Date: 2017/7/4



from src import models
from conf import settings
import pickle
import os

s1 = models.School('北京校区', '中国北京')
s2 = models.School('上海校区', '中国上海')
python = s1.create_course('Python', 19800, '6mons')
linux = s1.create_course('Linux', 17800, '4mons')
go = s2.create_course('Go', 9000, '4mons')
school_obj=None

def func():
    while True:
        print('欢迎进入老男孩选课系统'.center(30,'*'),
                  '\n1.北京校区\n'
                  '2.上海校区\n'
                  '3.退出程序')
        res=input('请选择学校: ').strip()
        global school_obj
        if res == '1':
            school_obj=s1
        elif res == '2':
            school_obj=s2
        elif res == '3':
            break
        else:
            print('输入错误')
            continue

        while True:
            print('请选择视图'.center(30,'*'))
            cmd=input('1.学生视图\n'
                      '2.老师视图\n'
                      '3.管理员视图\n'
                      '4.返回上一级\n'
                      '5.退出选课系统: ').strip()
            if cmd == '1':
                student_view()
            elif cmd == '2':
                teacher_view()
            elif cmd == '3':
                admin_viwe()
            elif cmd == '4':
                break
            elif cmd == '5':
                exit()
            else:
                print('输入错误,请重新输入!')
                continue
    return school_obj

def student_view():
    '''学生视图'''
    while True:
        tag = True
        print('欢迎进入学生视图,请选择功能'.center(30,'*'))
        cmd=input('1.注册信息\n'
                  '2.登录\n'                          #循环选择功能
                  '3.返回上级\n'
                  '4.退出程序: ').strip()
        if cmd == '1':
            while True:
                print('欢迎注册学生信息'.center(30, '-'))
                name=input('name: ').strip()
                name_id=input('name_id: ').strip()      #注册信息
                age=input('age: ').strip()
                sex=input('sex: ').strip()
                if not name:
                    print('姓名必填')
                    continue
                break
            student_obj=models.Student(name,name_id,age,sex)
            student_obj.save()
        elif cmd == '2':
            while tag:
                print('请登录'.center(30,'-'))
                name = input('请输入用户名: ')
                name_id = input('请输入用户id: ')                #登录,如果数据库中有这个人的文件,继续,否则打印用户不存在
                res = os.listdir(settings.STUDENTDB_PATH)
                for item in res:
                    file_path = r'%s\%s' % (settings.STUDENTDB_PATH, item)
                    with open(file_path, 'rb') as f:
                        student_obj = pickle.load(f)
                        if name == student_obj.name and name_id == student_obj.user_id:
                            while tag:
                                cmd=input('登录成功\n'
                                      '1.交学费\n'
                                      '2.选择班级\n'
                                      '3.返回上级\n'
                                      '4.退出程序\n'
                                      '请选择功能: ').strip()
                                if cmd == '1':          #交学费
                                    money = int(input('请输入缴纳金额: '))
                                    student_obj.tuition+=money
                                    print('缴纳成功,学费余额为%s' %student_obj.tuition)
                                    student_obj.save()
                                elif cmd == '2':        #选择班级
                                    res = os.listdir(settings.CLASS_PATH)
                                    for item in res:
                                        file_path = r'%s\%s' % (settings.CLASS_PATH, item)
                                        with open(file_path, 'rb') as f:
                                            class_obj = pickle.load(f)
                                            print('班级名称:<%s> 班级所学课程<%s>' % (class_obj.name, class_obj.course))
                                    course_cmd = input('请选择班级:')
                                    res = os.listdir(settings.CLASS_PATH)
                                    for item in res:
                                        file_path = r'%s\%s' % (settings.CLASS_PATH, item)
                                        with open(file_path, 'rb') as f:
                                            class_obj = pickle.load(f)
                                        if course_cmd == class_obj.name:
                                            for i in class_obj.student:
                                                if student_obj.id == i.id:
                                                    print('班级已有此人')         #如果班级里已有此人,则结束村换
                                                    tag=False
                                                else:
                                                    class_obj.student.append(student_obj)
                                                    student_obj.student_class.append(class_obj)
                                                    student_obj.save()
                                                    class_obj.save()
                                                    print('班级添加成功')
                                                    student_obj.tell_info()
                                elif cmd == '3':
                                    tag=False
                                elif cmd == '4':
                                    exit()
                                else:
                                    continue
                        else:
                            print('用户不存在')
                            tag=False
        elif cmd == '3':
            return
        elif cmd == '4':
            exit()
        else:continue

def teacher_view():
    '''讲师视图'''
    tag = True  #添加一个标志位
    while tag:
        print('请登录'.center(30,'-'))
        name=input('请输入用户名: ').strip()
        name_id=input('请输入用户id: ').strip()
        res = os.listdir(settings.TEACHERDB_PATH)
        for item in res:
            file_path = r'%s\%s' % (settings.TEACHERDB_PATH, item)
            with open(file_path, 'rb') as f:
                teacher_obj = pickle.load(f)
                if name == teacher_obj.name and name_id == teacher_obj.user_id:
                    while tag:
                        print('欢迎进入讲师视图'.center(30,'*'))
                        cmd=input('1.管理班级\n'
                                  '2.选择上课班级\n'
                                  '3.查看班级学员列表\n'
                                  '4.修改学员成绩\n'
                                  '5.返回上一级\n'
                                  '6.退出选课系统\n'
                                  '请选择功能: ').strip()
                        if cmd == '1':
                            for i in teacher_obj.teacher_class:
                                i.tell_info()
                        elif cmd == '2':
                            res = os.listdir(settings.CLASS_PATH)
                            for item in res:
                                file_path = r'%s\%s' % (settings.CLASS_PATH, item)
                                with open(file_path, 'rb') as f:
                                    class_obj = pickle.load(f)
                                    print('班级名称:<%s> 班级所学课程<%s>' % (class_obj.name, class_obj.course))
                            class_cmd = input('请选择班级:')
                            res = os.listdir(settings.CLASS_PATH)
                            for item in res:
                                file_path = r'%s\%s' % (settings.CLASS_PATH, item)
                                with open(file_path, 'rb') as f:
                                    class_obj = pickle.load(f)
                                if class_obj.name == class_cmd:
                                    class_obj.teacher.append(teacher_obj)
                                    teacher_obj.teacher_class.append(class_obj)
                                    teacher_obj.save()
                                    class_obj.save()
                                    teacher_obj.tell_info()
                        elif cmd == '3':
                            for i in teacher_obj.teacher_class:
                                for j in i.student:
                                    j.tell_info()
                        elif cmd == '4':
                            name=input('请输入想要修改的学生姓名:').strip()
                            name_id=input('请输入学生id: ').strip()
                            num=int(input('请输入要修改的成绩: ').strip())
                            res = os.listdir(settings.STUDENTDB_PATH)
                            for item in res:
                                file_path = r'%s\%s' % (settings.STUDENTDB_PATH, item)
                                with open(file_path, 'rb') as f:
                                    student_obj = pickle.load(f)
                                    if name == student_obj.name and name_id == student_obj.user_id:
                                        student_obj.grade+=num
                                        print('%s 的成绩已修改为 %s' %(student_obj.name,num))
                                        student_obj.save()
                        elif cmd == '5':
                            tag=False
                        elif cmd == '6':
                            exit()
                        else:
                            continue

def admin_viwe():
    '''管理员视图'''
    print('请用管理员的身份登录,用户名:sam,密码:666'.center(30,'*'))  #管理员有固定的用户名密码
    name=input('请输入用户名: ')
    password=input('请输入密码: ')
    if name == 'sam' and password == '666':
        while True:
            print('欢迎进入管理员视图'.center(30,'-'))
            cmd=input('1.创建讲师\n'
                      '2.创建班级\n'
                      '3.创建课程\n'
                      '4.返回\n'
                      '5.退出选课系统\n'
                      '请选择功能: ')
            if cmd == '1':
                name=input('请输入讲师姓名: ').strip()
                user_id=input('请输入讲师id: ').strip()
                age=input('请输入讲师年纪: ').strip()
                sex=input('请输入讲师性别: ').strip()
                salary=input('请输入讲师薪资: ').strip()
                if not name:
                    print('名字不能为空')
                    continue
                teacher = school_obj.create_teacher(name,user_id,age,sex,salary)
                teacher.save()
                school_obj.save()
                print('%s 老师的信息创建成功' %teacher.name)
                teacher.tell_info()
            elif cmd == '2':
                name = input('请输入班级名: ').strip()
                course = input('请输入班级课程: ').strip()
                if not name or not course:
                    print('输入错误')
                    continue
                class_obj=school_obj.create_class(name,course)
                class_obj.save()
                school_obj.save()
                print('%s 班级创建成功' %class_obj.name)
                class_obj.tell_info()
            elif cmd == '3':
                course = input('请输入课程名字: ').strip()
                price = input('请输入课程价钱: ').strip()
                period = input('请输入课程周期: ').strip()
                if not course or not price or not period:
                    print('输入错误')
                    continue
                course_obj = school_obj.create_course(course,price,period)
                course_obj.save()
                school_obj.save()
                print('%s 课程创建成功' %course_obj.course)
                course_obj.tell_course()
            elif cmd == '4':
                return
            elif cmd == '5':
                exit()
            else:
                continue
    else:
        print('用户名密码错误')

if __name__ == '__main__':
    func()
core.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "Sam"
# Date: 2017/7/4
from conf import settings
import pickle
import hashlib
import os

class School:
    '''学校类'''
    def __init__(self,school_name,school_site):
        self.school_name=school_name
        self.school_site=school_site
        self.school_courses=[]  #为学校所有的课程创建一个空列表
        self.school_terchers=[] #创建一个空列表存放老师
        self.school_class=[]    #创建一个空列表存放班级

    def create_class(self,name,course):
        '''创建班级'''
        class_obj=Class(name,course)
        self.school_class.append(class_obj)
        return class_obj

    def create_course(self,course,price,period):
        '''创建课程'''
        course_obj=Course(course,price,period)
        self.school_courses.append(course_obj)
        return course_obj

    def create_teacher(self,name,user_id,age,sex,salary):
        '''创建老师'''
        teacher_obj=Teacher(name,user_id,age,sex,salary)
        self.school_terchers.append(teacher_obj)
        return teacher_obj

    def create_student(self,name,user_id,age,sex,classroom):
        '''创建学生'''
        student_obj=Student(name,user_id,age,sex)
        classroom.student.append(student_obj)
        return student_obj

    def save(self):
        '''保存信息'''
        with open(r'%s\%s' %(settings.SCHOOL_PATH,self.school_name),'wb') as f:
            pickle.dump(self,f)

class Class:
    '''班级类'''
    def __init__(self,name,course):
        self.name=name
        self.teacher=[]
        self.course=course
        self.student=[]
    def tell_info(self):
        '''查看班级信息'''
        print('''
        -------%s info---------
        name:%s
        teacher:%s
        course:%s
        student:%s
        ''' %(self.name,self.name,self.teacher,self.course,self.student))
    def save(self):
        '''保存班级信息'''
        with open(r'%s\%s' %(settings.CLASS_PATH,self.name),'wb') as f:
            pickle.dump(self,f)

class Course:
    '''课程类'''
    def __init__(self,course,price,period):
        self.course=course
        self.price=price
        self.period=period
    def tell_course(self):
        '''查看课程信息'''
        print('''
        --------%s info---------
        COURSE:%s
        PRICE:%s
        PERIOD:%s
        ''' %(self.course,self.course,self.price,self.period))
    def save(self):
        '''保存课程信息'''
        with open(r'%s\%s' %(settings.COURSE_PATH,self.course),'wb') as f:
            pickle.dump(self,f)

class People:
    def __init__(self,name,user_id,age,sex):
        self.user_id=user_id
        self.name=name
        self.age=age
        self.sex=sex
        self.courses=[]
        self.id=self.create_id()

    def tell_crouse(self):
        '''查看课程'''
        for obj in self.courses:
            obj.tell_crouse()

    def create_id(self):
        '''加密'''
        m = hashlib.md5()
        m.update(self.name.encode('utf-8'))
        m.update(str(self.user_id).encode('utf-8'))
        return m.hexdigest()

class Teacher(People):
    def __init__(self,name,user_id,age,sex,salary):
        People.__init__(self,name,user_id,age,sex)
        self.salary=salary
        self.teacher_class=[]

    def tell_info(self):
        '''查看老师信息'''
        print('''
        --------%s info---------
        NAME:%s
        ID:%s
        AGE:%s
        SEX:%s
        SAL:%s
        CLASS:%s
        ''' %(self.name,self.name,self.user_id,self.age,self.sex,self.salary,self.teacher_class))
    def save(self):
        '''保存老师信息'''
        with open(r'%s\%s' % (settings.TEACHERDB_PATH, self.id), 'wb') as f:
            pickle.dump(self, f)

class Student(People):
    def __init__(self,name,user_id,age,sex):
        People.__init__(self,name,user_id,age,sex)
        self.student_class=[]
        self.tuition=0
        self.grade=0
    def __str__(self):
        return self.name
    def tell_info(self):
        '''查看学生信息'''
        print('''
        ---------%s info----------
        NAME:%s
        ID:%s
        AGE:%s
        SEX:%s
        CLASS:%s
        TUITION:%s
        GRADE:%s
        ''' %(self.name,self.name,self.id,self.age,self.sex,self.student_class,
              self.tuition,self.grade))
    def save(self):
        '''保存学生信息'''
        with open(r'%s\%s' %(settings.STUDENTDB_PATH,self.id),'wb') as f:
            pickle.dump(self,f)
models.py

 

 

转载于:https://www.cnblogs.com/78pikaqiu/p/7141312.html

### Python 开发学生选课系统示例 #### 创建项目环境 为了构建一个稳定可靠的学生选课系统,建议使用虚拟环境来隔离依赖项。通过命令行工具安装并激活虚拟环境: ```bash python -m venv myenv source myenv/bin/activate # Linux 或 macOS myenv\Scripts\activate # Windows ``` 接着,在环境中安装必要的包,如 `PyQt6` 和 `mysql-connector-python`。 ```bash pip install PyQt6 mysql-connector-python ``` #### 数据库连接模块 定义用于处理 MySQL 数据库操作的基础类,以便于后续的功能扩展和维护[^1]。 ```python import mysql.connector class DatabaseConnection: def __init__(self, host="localhost", user="root", password="", database=""): self.connection = None try: self.connection = mysql.connector.connect( host=host, user=user, passwd=password, db=database ) if self.connection.is_connected(): print("Successfully connected to the database.") except Exception as e: print(f"Error connecting to MySQL platform: {e}") def execute_query(self, query, params=None): cursor = self.connection.cursor() result = None try: cursor.execute(query, params) result = cursor.fetchall() self.connection.commit() except Exception as error: print(f"The error '{error}' occurred") finally: if cursor is not None and self.connection is not None: cursor.close() return result def close_connection(self): if self.connection is not None: self.connection.close() ``` #### 主窗口设计 利用 Qt Designer 设计图形化界面,并将其转换成 Python 文件。这里展示如何加载 `.ui` 文件以及初始化主窗口中的组件[^2]。 ```python from PyQt6 import uic from PyQt6.QtWidgets import QApplication, QMainWindow class MainWindow(QMainWindow): def __init__(self): super().__init__() uic.loadUi('main_window.ui', self) if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() app.exec_() ``` #### 功能逻辑实现 针对具体业务需求编写相应的函数,比如添加新课程、删除已有课程、显示所有可选项等。下面给出部分核心方法的伪代码表示形式[^3]。 ```python def add_course(course_name, teacher_name, max_students): """向数据库中插入一条新的课程记录""" pass def remove_course_by_id(course_id): """根据ID移除指定的一门课程""" pass def list_all_courses(): """获取当前学期开设的所有课程列表""" pass def enroll_student(student_id, selected_courses_ids): """允许某位同学注册选定的若干门科目""" # 验证是否有重复报名情况发生 existing_selections = get_current_enrollment_status(student_id) conflicting_timeslots = check_time_conflicts(selected_courses_ids + existing_selections) if conflicting_timeslots: raise ValueError("Selected courses contain time conflicts!") total_credits = sum([get_credit_hours(cid) for cid in selected_courses_ids]) if total_credits > MAX_CREDITS_PER_SEMESTER: raise ValueError("Total credits exceed limit!") update_database_with_new_selections(student_id, selected_courses_ids) def drop_selected_courses(student_id, deselected_courses_ids): """取消已登记的选择""" pass ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值