#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 100 // 最大可以处理的学生数量
#define MAX_COURSES 30 // 每个学生最多可以选修的课程数量
#define MAX_NAME_LEN 30 // 学生姓名最大长度
#define MAX_ID_LEN 10 // 学生学号和教师编号最大长度
#define MAX_COURSE_NAME_LEN 20 // 课程名称最大长度
// 学生结构体
typedef struct {
char name[MAX_NAME_LEN];
char id[MAX_ID_LEN];
int courses_num;
char courses[MAX_COURSES][MAX_COURSE_NAME_LEN];
double scores[MAX_COURSES];
} Student;
// 教师结构体
typedef struct {
char name[MAX_NAME_LEN];
char id[MAX_ID_LEN];
char course[MAX_COURSE_NAME_LEN];
} Teacher;
// 函数声明
void enroll(Student* student, const char* course_name);
void addScore(Student* student, const char* course_name, double score_input);
void printStudent(Student* student);
void printCourseInfo(const char* course_name);
void addTeacher(Teacher* teacher);
int main() {
// 创建学生数组
Student students[MAX_STUDENTS];
int num_students = 0;
// 创建教师数组
Teacher teachers[2];
int num_teachers = 0;
int choice;
do {
printf("\n======欢迎使用学生选课系统======\n");
printf("1.添加学生\n");
printf("2.学生选课\n");
printf("3.教师打分\n");
printf("4.查询学生信息\n");
printf("5.添加教师信息\n");
printf("6.查询教师信息\n");
printf("7.退出\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1: {
// 添加学生
if (num_students >= MAX_STUDENTS) {
printf("学生已达到系统处理能力,无法添加更多学生。\n");
break;
}
Student* student = &students[num_students];
printf("请输入学生姓名:");
scanf("%s", student->name);
printf("请输入学生学号:");
scanf("%s", student->id);
num_students++;
printf("学生添加成功。\n");
break;
}
case 2: {
// 学生选课
char course_name[MAX_COURSE_NAME_LEN];
printf("请输入课程名称:");
scanf("%s", course_name);
for (int i = 0; i < num_students; i++) {
Student* student = &students[i];
if (strcmp(student->id, "") != 0) { // 判断学生是否存在
enroll(student, course_name);
}
}
break;
}
case 3: {
// 教师打分
char teacher_id[MAX_ID_LEN];
printf("请输入教师编号:");
scanf("%s", teacher_id);
char course_name[MAX_COURSE_NAME_LEN];
int found = 0;
for (int i = 0; i < num_teachers; i++) {
if (strcmp(teachers[i].id, teacher_id) == 0) {
strcpy(course_name, teachers[i].course);
found = 1;
break;
}
}
if (!found) {
printf("无效的教师编号。\n");
break;
}
for (int i = 0; i < num_students; i++) {
Student* student = &students[i];
if (strcmp(student->id, "") != 0) { // 判断学生是否存在
addScore(student, course_name, 90); // 在此默认打分为90分
}
}
break;
}
case 4: {
// 查询学生信息
char student_id[MAX_ID_LEN];
printf("请输入学生学号:");
scanf("%s", student_id);
for (int i = 0; i < num_students; i++) {
Student* student = &students[i];
if (strcmp(student->id, student_id) == 0) { // 学生存在
printStudent(student);
break;
} else if (i == num_students - 1) { // 学生不存在
printf("学生不存在。\n");
}
}
break;
}
case 5: {
// 添加教师信息
if (num_teachers >= 2) {
printf("系统只能添加两个教师信息。\n");
break;
}
Teacher* teacher = &teachers[num_teachers];
addTeacher(teacher);
num_teachers++;
printf("教师添加成功。\n");
break;
}
case 6: {
// 查询教师信息
char teacher_id[MAX_ID_LEN];
printf("请输入教师编号:");
scanf("%s", teacher_id);
int found = 0;
for (int i = 0; i < num_teachers; i++) {
if (strcmp(teachers[i].id, teacher_id) == 0) {
printf("教师姓名:%s\n教师编号:%s\n授课课程:%s\n", teachers[i].name, teachers[i].id, teachers[i].course);
found = 1;
break;
}
}
if (!found) {
printf("教师不存在。\n");
}
break;
}
case 7: {
return 0;
}
default: {
printf("无效的选择,请重新选择。\n");
break;
}
}
} while (1);
return 0;
}
// 学生选课
void enroll(Student* student, const char* course_name) {
if (student->courses_num >= MAX_COURSES) {
printf("%s选课失败,已选课程数量超过限制。\n", student->name);
return;
}
for (int i = 0; i < student->courses_num; i++) {
if (strcmp(student->courses[i], course_name) == 0) {
printf("%s已经选过%s。\n", student->name, course_name);
return;
}
}
strcpy(student->courses[student->courses_num], course_name);
student->courses_num++;
printf("选课成功:%s选了%s。\n", student->name, course_name);
}
// 教师打分
void addScore(Student* student, const char* course_name, double score_input) {
double score;
do {
printf("请输入%s的成绩(0-100):", student->name);
scanf("%lf", &score);
} while (score < 0 || score > 100);
for (int i = 0; i < student->courses_num; i++) {
if (strcmp(student->courses[i], course_name) == 0) {
student->scores[i] = score;
printf("%s的%s课程已被打分为%.1f分。\n", student->name, course_name, score);
return;
}
}
printf("%s没有选择%s课程,无法打分。\n", student->name, course_name);
}
// 输出学生信息
void printStudent(Student* student) {
printf("学生姓名:%s\n学生学号:%s\n已选课程及成绩:\n", student->name, student->id);
if (student->courses_num == 0) {
printf("暂无课程\n");
} else {
for (int i = 0; i < student->courses_num; i++) {
if (student->scores[i] == -1) {
printf("%s:未打分\n", student->courses[i]);
} else {
printf("%s:%.1f分\n", student->courses[i], student->scores[i]);
}
}
}
}
// 添加教师信息
void addTeacher(Teacher* teacher) {
printf("请输入教师姓名:");
scanf("%s", teacher->name);
printf("请输入教师编号:");
scanf("%s", teacher->id);
printf("请输入教师授课课程:");
scanf("%s", teacher->course);
}
欢迎订阅专栏,数据结构实验,期末大作业,前端后端都有哦,想我发哪个方面的资源或文章可以私信我,免费的哦