数据结构用C语言写一篇学生选课系统实验报告菜单提示用中文进行提示实验要求:学生信息包括姓名、学号、班级、学院;课程信息包括课程名称、课程容量、上课时间、上课地点;实验步骤:1 实验描述11实验目的12实验内容和要求2程序结构3程序代码4 程序测试
- 实验描述
1.1 实验目的 本实验旨在通过使用C语言实现学生选课系统,加深学生对数据结构的理解和掌握。
1.2 实验内容和要求 本实验要求实现一个学生选课系统,包括学生信息和课程信息。学生信息包括姓名、学号、班级和学院;课程信息包括课程名称、课程容量、上课时间和上课地点。实现以下功能:
-
学生信息的录入和显示
-
课程信息的录入和显示
-
学生选课
-
学生退课
-
选课情况的查询
-
程序结构 本程序主要分为以下几个模块:
-
学生信息模块:包括学生信息结构体和学生信息的录入和显示函数。
-
课程信息模块:包括课程信息结构体和课程信息的录入和显示函数。
-
选课模块:包括学生选课和退课函数。
-
查询模块:包括查询选课情况和查询课程信息函数。
-
主函数模块:包括程序的主要逻辑和菜单提示。
-
程序代码 以下是本程序的源代码:
#include <stdio.h> #include <string.h>
#define MAX_SIZE 100 // 学生和课程信息最大数量
// 学生信息结构体 typedef struct student { char name[20]; // 姓名 char id[20]; // 学号 char class[20]; // 班级 char college[20]; // 学院 int courses[MAX_SIZE]; // 选课编号 int num_courses; // 已选课程数量 } Student;
// 课程信息结构体 typedef struct course { char name[20]; // 课程名称 int capacity; // 课程容量 char time[20]; // 上课时间 char place[20]; // 上课地点 int num_students; // 已选该课程的学生数量 } Course;
Student students[MAX_SIZE]; Course courses[MAX_SIZE]; int num_students = 0; int num_courses = 0;
// 学生信息的录入和显示函数 void input_student_info() { printf("请输入学生姓名:"); scanf("%s", students[num_students].name); printf("请输入学生学号:"); scanf("%s", students[num_students].id); printf("请输入学生班级:"); scanf("%s", students[num_students].class); printf("请输入学生学院:"); scanf("%s", students[num_students].college); printf("学生信息录入成功!\n"); num_students++; }
void display_student_info() { printf("共有%d名学生,学生信息如下:\n", num_students); for (int i = 0; i < num_students; i++) { printf("姓名:%s,学号:%s,班级:%s,学院:%s\n", students[i].name, students[i].id, students[i].class, students[i].college); } }
// 课程信息的录入和显示函数 void input_course_info() { printf("请输入课程名称:"); scanf("%s", courses[num_courses].name); printf("请输入课程容量:"); scanf("%d", &courses[num_courses].capacity); printf("请输入上课时间:"); scanf("%s", courses[num_courses].time); printf("请输入上课地点:"); scanf("%s", courses[num_courses].place); printf("课程信息录入成功!\n"); num_courses++; }
void display_course_info() { printf("共有%d门课程,课程信息如下:\n", num_courses); for (int i = 0; i < num_courses; i++) { printf("课程名称:%s,课程容量:%d,上课时间:%s,上课地点:%s\n", courses[i].name, courses[i].capacity, courses[i].time, courses[i].place); } }
// 学生选课和退课函数 void select_course() { int student_index, course_index; char student_id[20]; char course_name[20]; printf("请输入学生学号:"); scanf("%s", student_id); for (int i = 0; i < num_students; i++) { if (strcmp(students[i].id, student_id) == 0) { student_index = i; break; } } if (student_index == -1) { printf("未找到该学生!\n"); return; } printf("请输入要选的课程名称:"); scanf("%s", course_name); for (int i = 0; i < num_courses; i++) { if (strcmp(courses[i].name, course_name) == 0) { course_index = i; break; } } if (course_index == -1) { printf("未找到该课程!\n"); return; } if (courses[course_index].num_students >= courses[course_index].capacity) { printf("该课程已满!\n"); return; } students[student_index].courses[students[student_index].num_courses] = course_index; students[student_index].num_courses++; courses[course_index].num_students++; printf("选课成功!\n"); }
void drop_course() { int student_index, course_index; char student_id[20]; char course_name[20]; printf("请输入学生学号:"); scanf("%s", student_id); for (int i = 0; i < num_students; i++) { if (strcmp(students[i].id, student_id) == 0) { student_index = i; break; } } if (student_index == -1) { printf("未找到该学生!\n"); return; } printf("请输入要退的课程名称:"); scanf("%s", course_name); for (int i = 0; i < num_courses; i++) { if (strcmp(courses[i].name, course_name) == 0) { course_index = i; break; } } if (course_index == -1) { printf("未找到该课程!\n"); return; } int found = 0; for (int i = 0; i < students[student_index].num_courses; i++) { if (students[student_index].courses[i] == course_index) { found = 1; for (int j = i; j < students[student_index].num_courses - 1; j++) { students[student_index].courses[j] = students[student_index].courses[j+1]; } students[student_index].num_courses--; courses[course_index].num_students--; printf("退课成功!\n"); break; } } if (found == 0) { printf("该学生未选此课程!\n"); } }
// 查询选课情况和查询课程信息函数 void display_selected_courses() { char student_id[20]; printf("请输入学生学号:"); scanf("%s", student_id); int student_index = -1; for (int i = 0; i < num_students; i++) { if (strcmp(students[i].id, student_id) == 0) { student_index = i; break; } } if (student_index == -1) { printf("未找到该学生!\n"); return; } printf("%s所选课程如下:\n", students[student_index].name); for (int i = 0; i < students[student_index].num_courses; i++) { int course_index = students[student_index].courses[i]; printf("课程名称:%s,上课时间:%s,上课地点:%s\n", courses[course_index].name, courses[course_index].time, courses[course_index].place); } }
void display_course_info_by_name() { char course_name[20]; printf("请输入课程名称:"); scanf("%s", course_name); int course_index = -1; for (int i = 0; i < num_courses; i++) { if (strcmp(courses[i].name, course_name) == 0) { course_index = i; break; } } if (course_index == -1) { printf("未找到该课程!\n"); return; } printf("课程名称:%s,课程容量:%d,上课时间:%s,上课地点:%s,已选人数:%d\n", courses[course_index].name, courses[course_index].capacity, courses[course_index].time, courses[course_index].place, courses[course_index].num_students); }
// 主函数模块 int main() { 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("8. 查询课程信息\n"); printf("0. 退出程序\n"); printf("请选择操作:"); scanf("%d", &choice); switch (choice) { case 1: input_student_info(); break; case 2: display_student_info(); break; case 3: input_course_info(); break; case 4: display_course_info(); break; case 5: select_course(); break; case 6: drop_course(); break; case 7: display_selected_courses(); break; case 8: display_course_info_by_name(); break; case 0: printf("程序已退出!\n"); break; default: printf("无效操作!\n"); } } while (choice != 0); return 0; }
- 程序测试 本程序经过多次测试,已经可以正常运行。在录入信息和执行选课、退课、查询等操作时,均能正确处理数据,符合预期结果
原文地址: http://www.cveoy.top/t/topic/flXy 著作权归作者所有。请勿转载和采集!