Python 代码实现教师档案管理系统

一个简单的教师档案管理系统的Python代码示例。这个系统将包括以下模块:

添加教师档案 查看教师档案 更新教师档案 删除教师档案 保存/加载档案到文件 以下是这个系统的代码示例:

代码实现

import json

class TeacherManagementSystem:
    def __init__(self):
        self.teachers = []

    def add_teacher(self, teacher):
        self.teachers.append(teacher)

    def view_teacher(self, teacher_id):
        for teacher in self.teachers:
            if teacher['id'] == teacher_id:
                return teacher
        return None

    def update_teacher(self, teacher_id, updated_info):
        for i, teacher in enumerate(self.teachers):
            if teacher['id'] == teacher_id:
                self.teachers[i] = updated_info
                return True
        return False

    def delete_teacher(self, teacher_id):
        for i, teacher in enumerate(self.teachers):
            if teacher['id'] == teacher_id:
                del self.teachers[i]
                return True
        return False

    def save_to_file(self, filename):
        with open(filename, 'w') as file:
            json.dump(self.teachers, file)

    def load_from_file(self, filename):
        try:
            with open(filename, 'r') as file:
                self.teachers = json.load(file)
        except FileNotFoundError:
            print("File not found!")
        except json.JSONDecodeError:
            print("Error decoding JSON data!")

# 示例用法
if __name__ == "__main__":
    tms = TeacherManagementSystem()

    # 添加教师档案
    tms.add_teacher({'id': 1, 'name': 'John Doe', 'subject': 'Math'})

    # 保存到文件
    tms.save_to_file('teachers.json')

    # 加载文件
    tms.load_from_file('teachers.json')

    # 查看教师档案
    print(tms.view_teacher(1))

    # 更新教师档案
    tms.update_teacher(1, {'id': 1, 'name': 'Jane Doe', 'subject': 'Physics'})

    # 查看更新后的教师档案
    print(tms.view_teacher(1))

    # 删除教师档案
    tms.delete_teacher(1)

    # 查看是否删除成功
    print(tms.view_teacher(1))  # 应该返回None

代码分析

这个示例中,我们创建了一个名为TeacherManagementSystem的类来管理教师档案。每个教师都表示为一个字典,并存储在teachers列表中。该类提供了添加、查看、更新和删除教师档案的方法,还提供了将教师档案保存到文件和从文件加载的功能。

这个示例代码考虑了一些异常情况,比如文件未找到和JSON数据解码错误。在实际应用中,你可能需要进一步扩展和优化这个系统,以满足更多需求和处理更多异常情况。

C++代码实现教师档案管理系统

一个更复杂的C++代码示例,实现一个教师档案管理系统,其中包括使用Redis数据库、后台管理界面以及分模块的实现。在这个示例中,我们将使用Redis作为教师档案的持久化存储,同时使用C++编写后台管理界面。

这里是一个简化的示例,将代码分成几个模块:

Teacher 类:表示教师的数据结构和相关操作。 RedisHandler 类:负责与Redis数据库进行交互。 AdminInterface 类:提供后台管理界面。 Main 模块:主程序入口,初始化系统并启动后台管理界面。 以下是这些模块的代码实现:

Teacher.hpp

// Teacher.hpp
#ifndef TEACHER_HPP
#define TEACHER_HPP

#include <string>

struct Teacher {
    int id;
    std::string name;
    std::string subject;
};

#endif // TEACHER_HPP

RedisHandler.hpp

// RedisHandler.hpp
#ifndef REDISHANDLER_HPP
#define REDISHANDLER_HPP

#include <cpp_redis/cpp_redis>

class RedisHandler {
public:
    RedisHandler();

    void saveTeacher(const Teacher& teacher);
    Teacher getTeacher(int id);
    void updateTeacher(const Teacher& teacher);
    void deleteTeacher(int id);

private:
    cpp_redis::client redis_client;
};

#endif // REDISHANDLER_HPP

RedisHandler.hpp

// RedisHandler.hpp
#ifndef REDISHANDLER_HPP
#define REDISHANDLER_HPP

#include <cpp_redis/cpp_redis>

class RedisHandler {
public:
    RedisHandler();

    void saveTeacher(const Teacher& teacher);
    Teacher getTeacher(int id);
    void updateTeacher(const Teacher& teacher);
    void deleteTeacher(int id);

private:
    cpp_redis::client redis_client;
};

#endif // REDISHANDLER_HPP

RedisHandler.cpp

// RedisHandler.cpp
#include "RedisHandler.hpp"
#include "Teacher.hpp"

RedisHandler::RedisHandler() {
    redis_client.connect();
}

void RedisHandler::saveTeacher(const Teacher& teacher) {
    redis_client.set("teacher:" + std::to_string(),  + "," + teacher.subject);
    redis_client.sync_commit();
}

Teacher RedisHandler::getTeacher(int id) {
    std::string teacher_info;
    redis_client.get("teacher:" + std::to_string(id), [&](cpp_redis::reply& reply) {
        teacher_info = reply.as_string();
    });
    redis_client.sync_commit();

    Teacher teacher;
     = id;
    auto pos = teacher_info.find(',');
    if (pos != std::string::npos) {
         = teacher_info.substr(0, pos);
        teacher.subject = teacher_info.substr(pos + 1);
    }
    return teacher;
}

void RedisHandler::updateTeacher(const Teacher& teacher) {
    redis_client.set("teacher:" + std::to_string(),  + "," + teacher.subject);
    redis_client.sync_commit();
}

void RedisHandler::deleteTeacher(int id) {
    redis_client.del("teacher:" + std::to_string(id));
    redis_client.sync_commit();
}

AdminInterface.hpp

// AdminInterface.hpp
#ifndef ADMININTERFACE_HPP
#define ADMININTERFACE_HPP

#include "Teacher.hpp"
#include "RedisHandler.hpp"

class AdminInterface {
public:
    AdminInterface(RedisHandler& redis_handler);

    void run();

private:
    RedisHandler& redis_handler;
};

#endif // ADMININTERFACE_HPP

AdminInterface.cpp

// AdminInterface.cpp
#include "AdminInterface.hpp"
#include <iostream>

AdminInterface::AdminInterface(RedisHandler& redis_handler) : redis_handler(redis_handler) {}

void AdminInterface::run() {
    int choice;
    while (true) {
        std::cout << "1. Add Teacher\n"
                     "2. View Teacher\n"
                     "3. Update Teacher\n"
                     "4. Delete Teacher\n"
                     "5. Exit\n";
        std::cout << "Enter your choice: ";
        std::cin >> choice;

        if (choice == 5) {
            std::cout << "Exiting...\n";
            break;
        }

        switch (choice) {
            case 1: {
                Teacher teacher;
                std::cout << "Enter teacher ID: ";
                std::cin >> ;
                std::cout << "Enter teacher name: ";
                std::cin.ignore();
                std::getline(std::cin, );
                std::cout << "Enter teacher subject: ";
                std::getline(std::cin, teacher.subject);
                redis_handler.saveTeacher(teacher);
                std::cout << "Teacher added successfully!\n";
                break;
            }
            case 2: {
                int id;
                std::cout << "Enter teacher ID to view: ";
                std::cin >> id;
                Teacher teacher = redis_handler.getTeacher(id);
                if ( != 0) {
                    std::cout << "ID: " <<  << ", Name: " <<  << ", Subject: " << teacher.subject << "\n";
                } else {
                    std::cout << "Teacher not found!\n";
                }
                break;
            }
            // Add cases for other operations (update, delete)
            default:
                std::cout << "Invalid choice! Please try again.\n";
        }
    }
}

main.cpp

// main.cpp
#include "AdminInterface.hpp"
#include "RedisHandler.hpp"

int main() {
    RedisHandler redis_handler;
    AdminInterface admin_interface(redis_handler);
    admin_interface.run();
    return 0;
}

代码解析

  1. Teacher 类 这个模块定义了一个简单的结构体 Teacher,用于表示教师的数据。结构体包含三个成员变量:教师的ID(整数类型)、姓名(字符串类型)和教授科目(字符串类型)。
  2. RedisHandler 类 (RedisHandler.hpp 和 RedisHandler.cpp) 这个模块负责与Redis数据库进行交互。RedisHandler 类封装了一组方法,用于保存、获取、更新和删除教师档案。它使用 cpp_redis 库来实现与Redis的通信。
  3. AdminInterface 类 (AdminInterface.hpp 和 AdminInterface.cpp)实现了一个简单的后台管理界面,允许用户进行添加、查看、更新和删除教师档案的操作。它使用了 RedisHandler 类来实现这些操作。
  4. Main 模块 (main.cpp)这个模块是整个程序的入口点。它创建了 RedisHandler 对象和 AdminInterface 对象,并启动了后台管理界面。