毕业生选题管理系统模拟毕业生选择指导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以便为您提供更准确的答案:
根据您提供的情况和图片,无法直接确定问题的具体原因。然而,从您描述的现象可以推测出可能的一些原因和解决方法:
如果上述方法都没有解决问题,您可以尝试以下步骤:
请注意,由于无法直接查看代码和执行环境,以上只是一些常见的问题和解决方法。根据具体情况,您可能需要进一步调查和排查问题。
完整版得加钱哈哈,先来个简单的,引用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之类的找个参考
网上多的是啊 ,如有帮助给个采纳谢谢
#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;
}