求个课题代码,用基础C++语言写

毕业生选题管理系统模拟毕业生选择指导teacher提供的毕业课题。teacher可增加、删除、修改课题,学生可选择课题,teacher和学生都可以查看当前已经选择的结果。

。稍等给你找现成的,csdn自己的论坛搜索:https://blog.csdn.net/weixin_46047285/article/details/106878142

#include<iostream>
#include<cstring>
#include<fstream>
#include<cstdlib> 
using namespace std;
char A; //题目A 
int a = 0; //题目A的计数器 
char B;
int b = 0;
char C;
int c = 0;
class Student {//定义一个学生类

    friend class course;
public:

    int stuid; // 学号
    char stuname[10]; // 姓名  
    char clas[10]; // 年级
    char specialty[10]; // 专业
    string StuID;//登陆密码
public:
    void add(); // 添加学生信息
    void total(); // 统计信息
    void display(); // 显示信息
    void write(int n); // 向文件中写入数据
    int read(); // 从文件中读数据
}stu[40];

class Course { //定义一个课程设计类
    friend class Student;
private:

    string couId; // 课程编号
    char couName[10]; // 课程名称
    char couTitle; // 选题题目
    char couTeacher[30]; // 指导教师
public:
    void search(); // 查询信息
    void searchsid(); // 按学号查询信息
    void alter(); // 修改信息
    void del(); // 删除信息
}Cou[40];

//1. 向文件中写入数据
void Student::write(int n)
{
    fstream myfile;//1.创建流对象
    myfile.open("student.txt", ios::out | ios::binary);
    if (!myfile)
    {
        cout << "该文件不能打开 !" << endl;
        abort();//功能: 终止程序的执行。返回值依赖于执行,可以通过返回值显示错误。
    }
    int count = n;
    myfile << count << endl << endl;
    for (int i = 0; i <= count; i++)
    {
        myfile << stu[i].stuid << " " << stu[i].stuname << " " << stu[i].clas << " " << stu[i].specialty << " " << Cou[i].couId << " " << Cou[i].couName << " " << Cou[i].couTitle << " " << Cou[i].couTeacher << " " << endl;

    }
    myfile.close();

}
//2.从文件中读数据
int Student::read()
{

    fstream myfile;//定义流对象
    myfile.open("student.txt", ios::in | ios::binary);
    if (!myfile)
    {
        cout << "该文件不能打开 !" << endl;
        abort();
    }
    int count;
    myfile.seekg(0);
    myfile >> count;
    for (int i = 0; i <= count; i++)
    {
        myfile >> stu[i].stuid >> stu[i].stuname >> stu[i].clas >> stu[i].specialty >> Cou[i].couId >> Cou[i].couName >> Cou[i].couTitle >> Cou[i].couTeacher;
        cout << endl;
    }
    myfile.close();
    return count;
}

//录入功能
void Student::add()
{

    int n = read();;

    int i = 0;
    char sign;
    cout << endl << "是否输入增加的学生的相关信息 :(Y or N) " << endl;
    cin >> sign;
    while (sign != 'N')
    {
    loop:
        cout << "学号 :";
        cin >> stu[i].stuid;
        cout << endl;
        cout << "学生登陆密码 :";
        cin >> stu[i].StuID;
        cout << endl;
        int c = 0;
        while (c < i)
        {
            c++;
            if (stu[i].stuid == stu[i - c].stuid)
            {
                cout << "你输入的学号已经存在 ! 请重新输入 " << endl;
                goto loop;
            }
        }
        cout << "请录入学生基本信息:" << endl;
        cout << "姓名 :";
        cin >> stu[i].stuname;
        cout << endl;
        cout << "年级 :";
        cin >> stu[i].clas;
        cout << endl;
        cout << "专业 :";
        cin >> stu[i].specialty;
        cout << endl;
        cout << "请录入课程设计信息:" << endl;

        cout << "请输入......" << endl;
        cout << "课程编号 :" << endl;

        cin >> Cou[i].couId;
        cout << endl;
        cout << "课程名称 :";
        cin >> Cou[i].couName;
        cout << endl;
        cout << "进入选题程序......" << endl;
        int id;//学号
        string password;//登录密码

        cout << "选题题目 :本系统每个课程有3道题目[A,B,C],每道题目限定3名学生" << endl;
        for (int j = 0; j < 3; j++)
        {
            cout << "用户名:[学号]" << endl;
            cin >> id;
            cout << "登录密码:" << endl;
            cin >> password;
            if (id == stu[i].stuid && password == stu[i].StuID) {
                cout << "登录成功,请选题:" << endl;
                cin >> Cou[i].couTitle;
                if (Cou[i].couTitle == 'A') {
                    a++;
                    if (a > 3)
                        cout << "选择A题目人数已满" << endl;
                    break;
                }
                if (Cou[i].couTitle == 'B') {
                    b++;
                    if (b > 3)
                        cout << "选择B题目人数已满" << endl;
                    break;
                }
                if (Cou[i].couTitle == 'C') {
                    c++;
                    if (c > 3)
                        cout << "选择C题目人数已满" << endl;
                    break;
                }
                break;
            }
            else {
                if (2 - j == 0) {
                    cout << "3次登录失败,账号被锁定,请与指导老师联系!" << endl;
                }
                else {
                    cout << "选题程序登录失败,你还有" << 2 - j << "次机会登录!" << endl;
                }
            }
        }


        cout << endl;
        cout << "指导教师 :";
        cin >> Cou[i].couTeacher;
        cout << endl;
        cout << "提示:是否继续写入学生信息 ?(Y/N)";
        cin >> sign; // 输入判断  
        i++;
    }
    write(i);
}

//查询学生信息、课程设计信息
void Course::search()
{
    Student stu;
    int n = stu.read();
    cout << "查询学生信息、课程设计信息:[确认查询:1]" << endl;
    cout << endl;
    int c;
    Course g;
    cout << "请输入选择 :";
    cin >> c;
    switch (c)
    {
    case 1:
        g.searchsid();
    default:
        cout << "输入错误 , 请重新输入 !" << endl;
    }
    stu.write(n);
}
//登录学号,密码,查询学生信息、课程设计信息
void Course::searchsid()
{
    Student st;
    int n = st.read();
    int s;
    int i = 0;
    cout << endl << "查找学生信息 :" << endl;
    cout << "请输入需要查找学生的学号 :" << endl;
    cin >> s;
    string id;
    cout << "请输入学生登陆密码:";
    cin >> id;
    while ((stu[i].stuid - s) != 0 && i < n && (id == stu[i].StuID)) i++; // 查找判断  
    if (i == n)
    {
        cout << "登陆失败" << endl;
        cout << "提示:对不起,无法找到该学生的信息! " << endl;
    }
    else
    {
        cout << "查询中,请等待......" << endl;
        cout << "---------------查询结果如下----------------" << endl;
        cout << "学号 : " << stu[i].stuid << endl;
        cout << "姓名 : " << stu[i].stuname << endl;
        cout << "年级 : " << stu[i].clas << endl;
        cout << "专业 : " << stu[i].specialty << endl;

        cout << "课程编号 : " << Cou[i].couId << endl;
        cout << "课程名称 : " << Cou[i].couName << endl;
        cout << "选题题目 : " << Cou[i].couTitle << endl;
        cout << "指导教师 : " << Cou[i].couTeacher << endl;
    }
}

//修改学生信息、课程设计信息
void Course::alter()
{
    Student st;
    int n = st.read();
    int s;
    int i = 0;
    cout << endl << "修改学生信息 :" << endl;
    cout << "请输入需要修改学生的学号 :" << endl;
    cin >> s;
    while ((stu[i].stuid - s) != 0 && i < n) i++; // 查找判断  
    if (i == n)
    {
        cout << "提示:对不起,无该学生的信息 !!!" << endl; // 输入失败信息
    }
    else
    {
        cout << "该学生的信息 :" << endl;
        cout << "学号: " << stu[i].stuid << '\n' << "姓名: " << stu[i].stuname << "年级: " << stu[i].clas << '\n' << "专业: " << '\n' << stu[i].specialty << '\n'
            << "课程编号 : " << Cou[i].couId << '\n' << "课程名称 : " << Cou[i].couName << '\n' << "选题题目 : " << Cou[i].couTitle << '\n' << "指导教师 : " << Cou[i].couTitle << '\n' << endl;
        cout << "请重新输入该学生的信息 " << endl;
        cout << "学号 :";
        cin >> stu[i].stuid;
        cout << endl;
        cout << "姓名 :";
        cin >> stu[i].stuname;
        cout << endl;
        cout << "年级 :";
        cin >> stu[i].clas;
        cout << endl;
        cout << "专业 :";
        cin >> stu[i].specialty;
        cout << endl;

        cout << "请重新输入课程设计信息:" << endl;
        cout << "课程编号 :";
        cin >> Cou[i].couId;
        cout << endl;
        cout << "课程名称 :";
        cin >> Cou[i].couName;
        cout << endl;
        cout << "进入选题程序......" << endl;
        int id;//学号
        string password;//登录密码

        cout << "选题题目 :本系统每个课程有3道题目[A,B,C],每道题目限定3名学生" << endl;
        for (int j = 0; j < 3; j++)
        {
            cout << "用户名:[学号]" << endl;
            cin >> id;
            cout << "登录密码:" << endl;
            cin >> password;
            if (id == stu[i].stuid && password == stu[i].StuID) {
                cout << "登录成功,请选题:" << endl;
                cin >> Cou[i].couTitle;
                if (Cou[i].couTitle == 'A') {
                    a++;
                    if (a > 3)
                        cout << "选择A题目人数已满" << endl;
                    break;
                }
                if (Cou[i].couTitle == 'B') {
                    b++;
                    if (b > 3)
                        cout << "选择B题目人数已满" << endl;
                    break;
                }
                if (Cou[i].couTitle == 'C') {
                    c++;
                    if (c > 3)
                        cout << "选择C题目人数已满" << endl;
                    break;
                }
                break;
            }
            else {
                if (2 - j == 0) {
                    cout << "3次登录失败,账号被锁定,请与指导老师联系!" << endl;
                }
                else {
                    cout << "选题程序登录失败,你还有" << 2 - j << "次机会登录!" << endl;
                }
            }
        }
        cout << endl;
        cout << "指导老师 :";
        cin >> Cou[i].couTitle;
        cout << endl;
        char c;
        cout << "是否保存数据 ?(y/n)" << endl;
        cin >> c;
        if (c == 'y')
            cout << "修改成功 !" << endl;
        st.write(n);
    }
}
//删除学生信息、课程设计信息
void  Course::del()
{
    Student st;
    int n = st.read();
    int s;
    int i = 0, j;
    cout << endl << "删除学生信息 :" << endl;
    cout << "请输入需要删除学生的学号 :" << endl;
    cin >> s;
    while ((stu[i].stuid - s) != 0 && i < n) i++; // 查找判断  
    if (i == n)
    {
        cout << "提示:记录为空 !!!" << endl; // 返回失败信息
    }
    else
    {
        for (j = i; j < n - 1; j++) // 删除操作  
        {
            stu[j].stuid = stu[j + 1].stuid;
            strcpy(stu[j].stuname, stu[j + 1].stuname);
            strcpy(stu[j].clas, stu[j + 1].clas);
            strcpy(stu[j].specialty, stu[j + 1].specialty);
            // Cou[i].couId >> Cou[i].couName >> Cou[i].couTitle >> Cou[i].couTeacher;
            Cou[j].couId = Cou[j + 1].couId;
            strcpy(Cou[j].couName, Cou[j].couName);
            //strcpy(Cou[j].couTitle, Cou[j].couTitle);
            Cou[j].couTitle = Cou[j].couTitle;
            strcpy(Cou[j].couTeacher, Cou[j].couTeacher);
        }
        cout << "提示:已成功删除 !" << endl; // 返回成功信息
    }
    cout << "你要删除的信息如下 :" << endl;
    cout << "姓名 :" << stu[i].stuname << endl;
    cout << "学号 :" << stu[i].stuid << endl;
    cout << "年级班级 :" << stu[i].clas << endl;
    cout << "专业 :" << stu[i].specialty << endl;

    cout << "课程编号 :" << Cou[i].couId << endl;
    cout << "课程名称 :" << Cou[i].couName << endl;
    cout << "选题题目 :" << Cou[i].couTitle << endl;
    cout << "指导老师 :" << Cou[i].couTeacher << endl;
    st.write(n - 1);
}
//统计学生信息、课程设计信息
void Student::total()
{
    {
        int n = read();
        char c[10];
        cout << "请输入需要查找的课程名称 :" << endl;
        cin >> c;
        for (int i = 0; i < n; i++)
            if (strcmp(Cou[i].couName, c) == 0)
            {
                cout << "你要统计的信息如下 :" << endl;
                cout << "姓名 :" << stu[i].stuname << endl;
                cout << "学号 :" << stu[i].stuid << endl;
                cout << "年级班级 :" << stu[i].clas << endl;
                cout << "专业 :" << stu[i].specialty << endl;

                cout << "课程编号 :" << Cou[i].couId << endl;
                cout << "课程名称 :" << Cou[i].couName << endl;
                cout << "选题题目 :" << Cou[i].couTitle << endl;
                cout << "指导老师 :" << Cou[i].couTeacher << endl;
            }
            else
            {
                cout << "没有找到该课程的记录! " << endl;
            }
    }
}
//显示学生信息、课程设计信息
void Student::display()
{
    int n = read();
    cout << endl << "显示全部学生信息: " << endl;
    if (!stu)
        cout << "没有记录" << endl;
    else
    {
        for (int i = 0; i < n; i++) // 循环输入  

            cout << "学号: " << stu[i].stuid << '\n' << "姓名: " << stu[i].stuname << "年级: " << stu[i].clas << '\n' << "专业: " << '\n' << stu[i].specialty << '\n'
            << "课程编号 : " << Cou[i].couId << '\n' << "课程名称 : " << Cou[i].couName << '\n' << "选题题目 : " << Cou[i].couTitle << '\n' << "指导教师 : " << Cou[i].couTeacher << '\n' << endl;

    }
}

int main()
{
    char choice;
    cout << "\n\n\ ********------欢迎使用课程设计选题管理系统------******** \n\n";
    cout << "|----------------- 1.[录入]+[选题]功能   --------------|\n";
    cout << "|----------------- 2.查询功能            --------------|\n";
    cout << "|----------------- 3.修改功能            --------------|\n";
    cout << "|----------------- 4.删除功能            --------------|\n";
    cout << "|----------------- 5.统计功能            --------------|\n";
    cout << "|----------------- 6.打印功能[学生+课程] --------------|\n";
    cout << "|----------------- 0.退出选题系统功能    --------------|\n";
    cout << endl;
    cout << "请输入对应功能的序号: ";
    cin >> choice;
    Course g;
    Student st;
    if (choice == '0')
    {
        cout << "感谢您使用课程设计选题管理系统!" << endl;
        exit(0);
    }
    else if (choice == '1')
    {
        st.add();
        system("pause");
        main();
    }
    else if (choice == '2')
    {
        g.search();
        system("pause");
        main();
    }
    else if (choice == '3')
    {
        g.alter();
        system("pause");
        main();
    }
    else if (choice == '4')
    {
        g.del();
        system("pause");
        main();
    }
    else if (choice == '5')
    {
        st.total();
        system("pause");
        main();
    }
    else if (choice == '6')
    {
        st.display();
        system("pause");
        main();
    }
    else
    {
        cout << "输入错误,请重新输入您的选择: ";
        main();
    }
    return 0;
}


回答部分参考、引用ChatGpt以便为您提供更准确的答案:

根据您提供的情况和图片,无法直接确定问题的具体原因。然而,从您描述的现象可以推测出可能的一些原因和解决方法:

  1. 插件冲突:某些VSCode插件可能与您的代码产生冲突,导致按下运行按钮后出现问题。您提到只安装了一个翻译插件,但无法排除其他插件可能的干扰。您可以尝试禁用所有插件,然后逐个启用它们,以确定是否是特定插件导致的问题。
  2. 配置问题:您可以检查您的VSCode配置和工作区设置,确保没有配置错误或冲突。特别是,检查运行和调试配置,例如任务配置、启动配置等,确保它们正确设置。
  3. 代码错误:检查您的代码,特别是按下运行按钮后出现问题的代码部分。确保代码没有语法错误、逻辑错误或其他错误。您可以使用VSCode的代码分析工具或其他静态代码分析工具进行检查。
  4. 环境问题:某些特定环境因素可能导致代码无法正常运行。确保您的开发环境和运行时环境是正确配置的,包括所需的软件版本、库和依赖项。

如果上述方法都没有解决问题,您可以尝试以下步骤:

  1. 更新VSCode和插件:确保您正在使用最新版本的VSCode和插件。更新通常包含错误修复和改进,可能会解决您遇到的问题。
  2. 重新安装VSCode:如果问题仍然存在,可以尝试重新安装VSCode,以确保您使用的是干净的安装。

请注意,由于无法直接查看代码和执行环境,以上只是一些常见的问题和解决方法。根据具体情况,您可能需要进一步调查和排查问题。

完整版得加钱哈哈,先来个简单的,引用gpt:

以下是一个简单的毕业生选题管理系统的C++代码实现,包括添加、删除、修改课题和学生选择课题的功能。

```c++

#include <iostream>
#include <vector>
#include <string>
using namespace std;

class Subject {
public:
    string name; // 课题名称
    int num_students; // 当前选择该课题的学生数量
};

class Student {
public:
    string name; // 学生姓名
    vector<string> selected_subjects; // 已选择的课题列表
};

void add_subject(vector<Subject>& subjects, const string& name) {
    subjects.push_back({name, 0});
}

void delete_subject(vector<Subject>& subjects, int index) {
    subjects.erase(subjects.begin() + index);
}

void modify_subject(vector<Subject>& subjects, int index, const string& new_name) {
    subjects[index].name = new_name;
}

void select_subject(Student& student, const string& subject_name) {
    for (auto& subject : student.selected_subjects) {
        if (subject == subject_name) return; // 如果已经选择了该课题,则直接返回
    }
    student.selected_subjects.push_back(subject_name); // 否则将该课题加入已选择的课题列表中
}

void view_results(const vector<Subject>& subjects) {
    for (const auto& subject : subjects) {
        cout << subject.name << ": " << subject.num_students << " students" << endl; // 输出每个课题的名称和当前选择该课题的学生数量
    }
}

int main() {
    vector<Subject> subjects; // 所有课题的列表
    int num_teachers = 3; // teacher的数量,可以根据实际情况进行修改
    int num_students = 5; // student的数量,可以根据实际情况进行修改
    int num_selections = 10; // 每个学生最多可以选择的课题数量,可以根据实际情况进行修改
    int num_iterations = num_students * num_selections; // 总的选择次数,可以根据实际情况进行修改
    int current_iteration = 0; // 目前正在进行的选择次数,初始化为0,每次增加1即可
    int teacher_index = 0; // teacher的索引,初始化为0,每次增加1即可
    int student_index = 0; // student的索引,初始化为0,每次增加1即可
    int selection = 0; // 每个学生当前选择的课题编号,初始化为0,根据实际情况进行修改
    int teacher_choice = selection % num_teachers; // teacher当前选择的课题编号,根据实际情况进行修改
    int teacher_num_students = num_students; // teacher当前选择的课题的学生数量,初始化为所有学生的总数,根据实际情况进行修改

以下是一个简单的毕业生选题管理系统模拟的C++代码示例,实现了老师和学生的基本功能。由于涉及到用户交互,所以使用了一些基本的输入输出语句。

#include <iostream>
#include <vector>
#include <string>

using namespace std;

// 定义课题结构体
struct Topic {
    string name; // 课题名称
    string desc; // 课题描述
    bool chosen; // 是否被选择
};

// 定义老师类
class Teacher {
public:
    // 增加课题
    void addTopic(string name, string desc) {
        Topic topic = {name, desc, false};
        topics.push_back(topic);
        cout << "成功添加课题:" << name << endl;
    }

    // 修改课题
    void modifyTopic(int index, string name, string desc) {
        if (index >= 0 && index < topics.size()) {
            topics[index].name = name;
            topics[index].desc = desc;
            cout << "成功修改课题:" << name << endl;
        } else {
            cout << "无效的课题编号!" << endl;
        }
    }

    // 删除课题
    void deleteTopic(int index) {
        if (index >= 0 && index < topics.size()) {
            topics.erase(topics.begin() + index);
            cout << "成功删除课题!" << endl;
        } else {
            cout << "无效的课题编号!" << endl;
        }
    }

    // 查看所有课题
    void viewAllTopics() {
        cout << "所有课题列表:" << endl;
        for (int i = 0; i < topics.size(); ++i) {
            cout << "[" << i << "] " << topics[i].name << endl;
        }
    }

    // 获取课题数
    int getTopicCount() {
        return topics.size();
    }

    // 获取课题
    Topic getTopic(int index) {
        return topics[index];
    }

private:
    vector<Topic> topics;
};

// 定义学生类
class Student {
public:
    // 选择课题
    void chooseTopic(int index) {
        if (index >= 0 && index < teacher.getTopicCount()) {
            Topic topic = teacher.getTopic(index);
            if (!topic.chosen) {
                topic.chosen = true;
                cout << "成功选择课题:" << topic.name << endl;
            } else {
                cout << "该课题已被选择!" << endl;
            }
        } else {
            cout << "无效的课题编号!" << endl;
        }
    }

    // 查看所选课题
    void viewMyTopics() {
        cout << "已选择的课题列表:" << endl;
        for (int i = 0; i < teacher.getTopicCount(); ++i) {
            Topic topic = teacher.getTopic(i);
            if (topic.chosen) {
                cout << "[" << i << "] " << topic.name << endl;
            }
        }
    }

    // 设置老师
    void setTeacher(Teacher t) {
        teacher = t;
    }

private:
    Teacher teacher;
};

// 测试程序
int main() {
    Teacher teacher;
    Student student;
    student.setTeacher(teacher);

    // 添加课题
    teacher.addTopic("高等数学论文", "研究高等数学的相关问题");
    teacher.addTopic("数据结构实验", "用 C++ 实现常见数据结构");
    teacher.addTopic("计算机组成原理大作业", "设计简单 CPU");

    // 查看所有课题
    teacher.viewAllTopics();

    // 修改课题
    teacher.modifyTopic(1, "数据结构实验2", "用 Python 实现常见数据结构");

    // 删除课题
    teacher.deleteTopic(2);

    // 学生选择课题
    student.chooseTopic(0);
    student.chooseTopic(1); // 选择被修改过的课题
    student.chooseTopic(3); // 选择不存在的课题

    // 查看已选课题
    student.viewMyTopics();

    return 0;
}


您自己尝试编写,可以基于以下思路:
设计数据结构:定义类Graduate、Topic、Teacher和DataManager,设计它们之间的关系。
实现基本功能:
Teacher:添加课题(新增Topic实例)、修改课题信息(修改Topic实例)、删除课题(删除Topic实例)
Student:选择课题(选定Topic实例)、查看已选课题(获取当前选择的Topic实例)
公共操作:查看所有课题(获取存储的所有Topic实例)
定义主函数,实现菜单界面和函数调用的逻辑。
显示菜单选项,根据用户选择调用对应函数执行操作。
调用DataManager来管理数据,例如添加、修改、删除课题时会调用DataManager的方法来操作Topic列表等。
执行操作后及时保存修改,以便下一次使用程序时可以加载已修改的数据。例如可以将数据保存在文件中,或者使用数据库等方式存储。

用户管理模块:实现用户注册、登录、注销和信息修改等功能,需要建立数据库表 user,包括字段 id、username、password、email等。具体实现代码如下:

# 用户注册
def register(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        email = request.POST['email']
        user = User(username=username, password=password, email=email)
        user.save()
        return redirect('/login/')
    return render(request, 'register.html')

# 用户登录
def login(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = User.objects.filter(username=username, password=password).first()
        if user:
            request.session['user_id'] = user.id
            return redirect('/')
        else:
            return render(request, 'login.html', {'error': '用户名或密码错误'})
    return render(request, 'login.html')

# 用户注销
def logout(request):
    del request.session['user_id']
    return redirect('/')

# 用户信息修改
def edit_profile(request):
    user_id = request.session.get('user_id')
    if user_id:
        user = User.objects.get(id=user_id)
        if request.method == 'POST':
            username = request.POST['username']
            password = request.POST['password']
            email = request.POST['email']
            user.username = username
            user.password = password
            user.email = email
            user.save()
            return redirect('/')
        return render(request, 'edit_profile.html', {'user': user})
    else:
        return redirect('/login/')

课题管理模块:实现课题的添加、修改、删除和查询等功能,需要建立数据库表 topic,包括字段 id、title、description、teacher、start_time、end_time等。具体实现代码如下:

# 课题添加
def create_topic(request):
    user_id = request.session.get('user_id')
    if user_id:
        teacher = User.objects.get(id=user_id)
        if request.method == 'POST':
            title = request.POST['title']
            description = request.POST['description']
            start_time = request.POST['start_time']
            end_time = request.POST['end_time']
            topic = Topic(title=title, description=description, teacher=teacher, start_time=start_time, end_time=end_time)
            topic.save()
            return redirect('/topics/')
        return render(request, 'create_topic.html', {'teacher': teacher})
    else:
        return redirect('/login/')

# 课题修改
def edit_topic(request, topic_id):
    user_id = request.session.get('user_id')
    if user_id:
        teacher = User.objects.get(id=user_id)
        topic = Topic.objects.get(id=topic_id, teacher=teacher)
        if request.method == 'POST':
            title = request.POST['title']
            description = request.POST['description']
            start_time = request.POST['start_time']
            end_time = request.POST['end_time']
            topic.title = title
            topic.description = description
            topic.start_time = start_time
            topic.end_time = end_time
            topic.save()
            return redirect('/topics/')
        return render(request, 'edit_topic.html', {'topic': topic})
    else:
        return redirect('/login/')

# 课题删除
def delete_topic(request, topic_id):
    user_id = request.session.get('user_id')
    if user_id:
        teacher = User.objects.get(id=user_id)
        topic = Topic.objects.get(id=topic_id, teacher=teacher)
        topic.delete()
        return redirect('/topics/')
    else:
        return redirect('/login/')

# 查看课题
def view_topic(request, topic_id):
    topic = Topic.objects.get(id=topic_id)
    return render(request, 'view_topic.html', {'topic': topic})
选课管理模块:实现毕业生的课题选择和取消选择功能,需要建立数据库表 selection,包括字段 id、topic、student等。具体实现代码如下:
Copy
# 选课或取消选课
def select_topic(request, topic_id):
    user_id = request.session.get('user_id')
    if user_id:
        student = User.objects.get(id=user_id)
        topic = Topic.objects.get(id=topic_id)
        selection = Selection.objects.filter(topic=topic, student=student).first()
        if selection:
            selection.delete()
        else:
            selection = Selection(topic=topic, student=student)
            selection.save()
        return redirect('/')
    else:
        return redirect('/login/')

结果查询模块:实现教师和毕业生的结果查询功能,需要查询 selection 表中的数据并关联 topic 和 user 表。具体实现代码如下:

# 教师查看课题选课情况
def view_selection(request, topic_id):
    user_id = request.session.get('user_id')
    if user_id:
        teacher = User.objects.get(id=user_id)
        topic = Topic.objects.get(id=topic_id, teacher=teacher)
        selections = Selection.objects.filter(topic=topic)
        return render(request, 'view_selection.html', {'topic': topic, 'selections': selections})
    else:
        return redirect('/login/')

# 毕业生查看已选课题
def view_my_selection(request):
    user_id = request.session.get('user_id')
    if user_id:
        student = User.objects.get(id=user_id)
        selections = Selection.objects.filter(student=student)
        return render(request, 'view_my_selection.html', {'selections': selections})
    else:
        return redirect('/login/')

可以根据具体的开发需求和实际的数据库表结构进行修改和扩展。

以上只是一个简单的思路,实现时还需要考虑边界条件、错误处理等问题。希望这些思路对您有所启发,祝顺利完成课题!

建议还是自己做吧,实在不行找chatgpt之类的找个参考

网上多的是啊 ,如有帮助给个采纳谢谢

img

#include<iostream>
#include<cstring>
#include<fstream>
#include<cstdlib> 
using namespace std;
char A; //题目A 
int a = 0; //题目A的计数器 
char B;
int b = 0;
char C;
int c = 0;
class Student {//定义一个学生类

    friend class course;
public:

    int stuid; // 学号
    char stuname[10]; // 姓名  
    char clas[10]; // 年级
    char specialty[10]; // 专业
    string StuID;//登陆密码
public:
    void add(); // 添加学生信息
    void total(); // 统计信息
    void display(); // 显示信息
    void write(int n); // 向文件中写入数据
    int read(); // 从文件中读数据
}stu[40];

class Course { //定义一个课程设计类
    friend class Student;
private:

    string couId; // 课程编号
    char couName[10]; // 课程名称
    char couTitle; // 选题题目
    char couTeacher[30]; // 指导教师
public:
    void search(); // 查询信息
    void searchsid(); // 按学号查询信息
    void alter(); // 修改信息
    void del(); // 删除信息
}Cou[40];

//1. 向文件中写入数据
void Student::write(int n)
{
    fstream myfile;//1.创建流对象
    myfile.open("student.txt", ios::out | ios::binary);
    if (!myfile)
    {
        cout << "该文件不能打开 !" << endl;
        abort();//功能: 终止程序的执行。返回值依赖于执行,可以通过返回值显示错误。
    }
    int count = n;
    myfile << count << endl << endl;
    for (int i = 0; i <= count; i++)
    {
        myfile << stu[i].stuid << " " << stu[i].stuname << " " << stu[i].clas << " " << stu[i].specialty << " " << Cou[i].couId << " " << Cou[i].couName << " " << Cou[i].couTitle << " " << Cou[i].couTeacher << " " << endl;
    }
    myfile.close();

}
//2.从文件中读数据
int Student::read()
{

    fstream myfile;//定义流对象
    myfile.open("student.txt", ios::in | ios::binary);
    if (!myfile)
    {
        cout << "该文件不能打开 !" << endl;
        abort();
    }
    int count;
    myfile.seekg(0);
    myfile >> count;
    for (int i = 0; i <= count; i++)
    {
        myfile >> stu[i].stuid >> stu[i].stuname >> stu[i].clas >> stu[i].specialty >> Cou[i].couId >> Cou[i].couName >> Cou[i].couTitle >> Cou[i].couTeacher;
        cout << endl;
    }
    myfile.close();
    return count;
}

//录入功能
void Student::add()
{

    int n = read();;

    int i = 0;
    char sign;
    cout << endl << "是否输入增加的学生的相关信息 :(Y or N) " << endl;
    cin >> sign;
    while (sign != 'N')
    {
    loop:
        cout << "学号 :";
        cin >> stu[i].stuid;
        cout << endl;
        cout << "学生登陆密码 :";
        cin >> stu[i].StuID;
        cout << endl;
        int c = 0;
        while (c < i)
        {
            c++;
            if (stu[i].stuid == stu[i - c].stuid)
            {
                cout << "你输入的学号已经存在 ! 请重新输入 " << endl;
                goto loop;
            }
        }
        cout << "请录入学生基本信息:" << endl;
        cout << "姓名 :";
        cin >> stu[i].stuname;
        cout << endl;
        cout << "年级 :";
        cin >> stu[i].clas;
        cout << endl;
        cout << "专业 :";
        cin >> stu[i].specialty;
        cout << endl;
        cout << "请录入课程设计信息:" << endl;

        cout << "请输入......" << endl;
        cout << "课程编号 :" << endl;

        cin >> Cou[i].couId;
        cout << endl;
        cout << "课程名称 :";
        cin >> Cou[i].couName;
        cout << endl;
        cout << "进入选题程序......" << endl;
        int id;//学号
        string password;//登录密码

        cout << "选题题目 :本系统每个课程有3道题目[A,B,C],每道题目限定3名学生" << endl;
        for (int j = 0; j < 3; j++)
        {
            cout << "用户名:[学号]" << endl;
            cin >> id;
            cout << "登录密码:" << endl;
            cin >> password;
            if (id == stu[i].stuid && password == stu[i].StuID) {
                cout << "登录成功,请选题:" << endl;
                cin >> Cou[i].couTitle;
                if (Cou[i].couTitle == 'A') {
                    a++;
                    if (a > 3)
                        cout << "选择A题目人数已满" << endl;
                    break;
                }
                if (Cou[i].couTitle == 'B') {
                    b++;
                    if (b > 3)
                        cout << "选择B题目人数已满" << endl;
                    break;
                }
                if (Cou[i].couTitle == 'C') {
                    c++;
                    if (c > 3)
                        cout << "选择C题目人数已满" << endl;
                    break;
                }
                break;
            }
            else {
                if (2 - j == 0) {
                    cout << "3次登录失败,账号被锁定,请与指导老师联系!" << endl;
                }
                else {
                    cout << "选题程序登录失败,你还有" << 2 - j << "次机会登录!" << endl;
                }
            }
        }


        cout << endl;
        cout << "指导教师 :";
        cin >> Cou[i].couTeacher;
        cout << endl;
        cout << "提示:是否继续写入学生信息 ?(Y/N)";
        cin >> sign; // 输入判断  
        i++;
    }
    write(i);
}

//查询学生信息、课程设计信息
void Course::search()
{
    Student stu;
    int n = stu.read();
    cout << "查询学生信息、课程设计信息:[确认查询:1]" << endl;
    cout << endl;
    int c;
    Course g;
    cout << "请输入选择 :";
    cin >> c;
    switch (c)
    {
    case 1:
        g.searchsid();
    default:
        cout << "输入错误 , 请重新输入 !" << endl;
    }
    stu.write(n);
}
//登录学号,密码,查询学生信息、课程设计信息
void Course::searchsid()
{
    Student st;
    int n = st.read();
    int s;
    int i = 0;
    cout << endl << "查找学生信息 :" << endl;
    cout << "请输入需要查找学生的学号 :" << endl;
    cin >> s;
    string id;
    cout << "请输入学生登陆密码:";
    cin >> id;
    while ((stu[i].stuid - s) != 0 && i < n && (id == stu[i].StuID)) i++; // 查找判断  
    if (i == n)
    {
        cout << "登陆失败" << endl;
        cout << "提示:对不起,无法找到该学生的信息! " << endl;
    }
    else
    {
        cout << "查询中,请等待......" << endl;
        cout << "---------------查询结果如下----------------" << endl;
        cout << "学号 : " << stu[i].stuid << endl;
        cout << "姓名 : " << stu[i].stuname << endl;
        cout << "年级 : " << stu[i].clas << endl;
        cout << "专业 : " << stu[i].specialty << endl;

        cout << "课程编号 : " << Cou[i].couId << endl;
        cout << "课程名称 : " << Cou[i].couName << endl;
        cout << "选题题目 : " << Cou[i].couTitle << endl;
        cout << "指导教师 : " << Cou[i].couTeacher << endl;
    }
}

//修改学生信息、课程设计信息
void Course::alter()
{
    Student st;
    int n = st.read();
    int s;
    int i = 0;
    cout << endl << "修改学生信息 :" << endl;
    cout << "请输入需要修改学生的学号 :" << endl;
    cin >> s;
    while ((stu[i].stuid - s) != 0 && i < n) i++; // 查找判断  
    if (i == n)
    {
        cout << "提示:对不起,无该学生的信息 !!!" << endl; // 输入失败信息
    }
    else
    {
        cout << "该学生的信息 :" << endl;
        cout << "学号: " << stu[i].stuid << '\n' << "姓名: " << stu[i].stuname << "年级: " << stu[i].clas << '\n' << "专业: " << '\n' << stu[i].specialty << '\n'
            << "课程编号 : " << Cou[i].couId << '\n' << "课程名称 : " << Cou[i].couName << '\n' << "选题题目 : " << Cou[i].couTitle << '\n' << "指导教师 : " << Cou[i].couTitle << '\n' << endl;
        cout << "请重新输入该学生的信息 " << endl;
        cout << "学号 :";
        cin >> stu[i].stuid;
        cout << endl;
        cout << "姓名 :";
        cin >> stu[i].stuname;
        cout << endl;
        cout << "年级 :";
        cin >> stu[i].clas;
        cout << endl;
        cout << "专业 :";
        cin >> stu[i].specialty;
        cout << endl;

        cout << "请重新输入课程设计信息:" << endl;
        cout << "课程编号 :";
        cin >> Cou[i].couId;
        cout << endl;
        cout << "课程名称 :";
        cin >> Cou[i].couName;
        cout << endl;
        cout << "进入选题程序......" << endl;
        int id;//学号
        string password;//登录密码

        cout << "选题题目 :本系统每个课程有3道题目[A,B,C],每道题目限定3名学生" << endl;
        for (int j = 0; j < 3; j++)
        {
            cout << "用户名:[学号]" << endl;
            cin >> id;
            cout << "登录密码:" << endl;
            cin >> password;
            if (id == stu[i].stuid && password == stu[i].StuID) {
                cout << "登录成功,请选题:" << endl;
                cin >> Cou[i].couTitle;
                if (Cou[i].couTitle == 'A') {
                    a++;
                    if (a > 3)
                        cout << "选择A题目人数已满" << endl;
                    break;
                }
                if (Cou[i].couTitle == 'B') {
                    b++;
                    if (b > 3)
                        cout << "选择B题目人数已满" << endl;
                    break;
                }
                if (Cou[i].couTitle == 'C') {
                    c++;
                    if (c > 3)
                        cout << "选择C题目人数已满" << endl;
                    break;
                }
                break;
            }
            else {
                if (2 - j == 0) {
                    cout << "3次登录失败,账号被锁定,请与指导老师联系!" << endl;
                }
                else {
                    cout << "选题程序登录失败,你还有" << 2 - j << "次机会登录!" << endl;
                }
            }
        }
        cout << endl;
        cout << "指导老师 :";
        cin >> Cou[i].couTitle;
        cout << endl;
        char c;
        cout << "是否保存数据 ?(y/n)" << endl;
        cin >> c;
        if (c == 'y')
            cout << "修改成功 !" << endl;
        st.write(n);
    }
}
//删除学生信息、课程设计信息
void  Course::del()
{
    Student st;
    int n = st.read();
    int s;
    int i = 0, j;
    cout << endl << "删除学生信息 :" << endl;
    cout << "请输入需要删除学生的学号 :" << endl;
    cin >> s;
    while ((stu[i].stuid - s) != 0 && i < n) i++; // 查找判断  
    if (i == n)
    {
        cout << "提示:记录为空 !!!" << endl; // 返回失败信息
    }
    else
    {
        for (j = i; j < n - 1; j++) // 删除操作  
        {
            stu[j].stuid = stu[j + 1].stuid;
            strcpy(stu[j].stuname, stu[j + 1].stuname);
            strcpy(stu[j].clas, stu[j + 1].clas);
            strcpy(stu[j].specialty, stu[j + 1].specialty);
            // Cou[i].couId >> Cou[i].couName >> Cou[i].couTitle >> Cou[i].couTeacher;
            Cou[j].couId = Cou[j + 1].couId;
            strcpy(Cou[j].couName, Cou[j].couName);
            //strcpy(Cou[j].couTitle, Cou[j].couTitle);
            Cou[j].couTitle = Cou[j].couTitle;
            strcpy(Cou[j].couTeacher, Cou[j].couTeacher);
        }
        cout << "提示:已成功删除 !" << endl; // 返回成功信息
    }
    cout << "你要删除的信息如下 :" << endl;
    cout << "姓名 :" << stu[i].stuname << endl;
    cout << "学号 :" << stu[i].stuid << endl;
    cout << "年级班级 :" << stu[i].clas << endl;
    cout << "专业 :" << stu[i].specialty << endl;

    cout << "课程编号 :" << Cou[i].couId << endl;
    cout << "课程名称 :" << Cou[i].couName << endl;
    cout << "选题题目 :" << Cou[i].couTitle << endl;
    cout << "指导老师 :" << Cou[i].couTeacher << endl;
    st.write(n - 1);
}
//统计学生信息、课程设计信息
void Student::total()
{
    {
        int n = read();
        char c[10];
        cout << "请输入需要查找的课程名称 :" << endl;
        cin >> c;
        for (int i = 0; i < n; i++)
            if (strcmp(Cou[i].couName, c) == 0)
            {
                cout << "你要统计的信息如下 :" << endl;
                cout << "姓名 :" << stu[i].stuname << endl;
                cout << "学号 :" << stu[i].stuid << endl;
                cout << "年级班级 :" << stu[i].clas << endl;
                cout << "专业 :" << stu[i].specialty << endl;

                cout << "课程编号 :" << Cou[i].couId << endl;
                cout << "课程名称 :" << Cou[i].couName << endl;
                cout << "选题题目 :" << Cou[i].couTitle << endl;
                cout << "指导老师 :" << Cou[i].couTeacher << endl;
            }
            else
            {
                cout << "没有找到该课程的记录! " << endl;
            }
    }
}
//显示学生信息、课程设计信息
void Student::display()
{
    int n = read();
    cout << endl << "显示全部学生信息: " << endl;
    if (!stu)
        cout << "没有记录" << endl;
    else
    {
        for (int i = 0; i < n; i++) // 循环输入  

            cout << "学号: " << stu[i].stuid << '\n' << "姓名: " << stu[i].stuname << "年级: " << stu[i].clas << '\n' << "专业: " << '\n' << stu[i].specialty << '\n'
            << "课程编号 : " << Cou[i].couId << '\n' << "课程名称 : " << Cou[i].couName << '\n' << "选题题目 : " << Cou[i].couTitle << '\n' << "指导教师 : " << Cou[i].couTeacher << '\n' << endl;

    }
}

int main()
{
    char choice;
    cout << "\n\n\ ********------欢迎使用课程设计选题管理系统------******** \n\n";
    cout << "|----------------- 1.[录入]+[选题]功能   --------------|\n";
    cout << "|----------------- 2.查询功能            --------------|\n";
    cout << "|----------------- 3.修改功能            --------------|\n";
    cout << "|----------------- 4.删除功能            --------------|\n";
    cout << "|----------------- 5.统计功能            --------------|\n";
    cout << "|----------------- 6.打印功能[学生+课程] --------------|\n";
    cout << "|----------------- 0.退出选题系统功能    --------------|\n";
    cout << endl;
    cout << "请输入对应功能的序号: ";
    cin >> choice;
    Course g;
    Student st;
    if (choice == '0')
    {
        cout << "感谢您使用课程设计选题管理系统!" << endl;
        exit(0);
    }
    else if (choice == '1')
    {
        st.add();
        system("pause");
        main();
    }
    else if (choice == '2')
    {
        g.search();
        system("pause");
        main();
    }
    else if (choice == '3')
    {
        g.alter();
        system("pause");
        main();
    }
    else if (choice == '4')
    {
        g.del();
        system("pause");
        main();
    }
    else if (choice == '5')
    {
        st.total();
        system("pause");
        main();
    }
    else if (choice == '6')
    {
        st.display();
        system("pause");
        main();
    }
    else
    {
        cout << "输入错误,请重新输入您的选择: ";
        main();
    }
    return 0;
}