一个简单的学生选课管理系统实现(c语言)

该程序使用c语言实现了一个简单的学生选课管理系统。共有n门课程,每门课程信息包括:课程编号、课程性质、学分、理论授课学时、实验或上机学时、开课学期、上课时间等信息,学生可按要求(如总学分不得少于15)自行选课。该程序具有下列功能:
(1)能从文件导入课程信息;
(2)能从键盘录入课程信息和学生选课信息;
(3)能按特定要求查询相关课程信息;
(4)按输入课程编号修改课程相关信息;
(5)输入课程编号显示该课程选课人数及选课学生信息;
(6)输入学号显示该生选课情况;
(7)能将学生选课信息导出到指定文件。

#include 
#include 
#include 
 
// 定义课程结构体
typedef struct {
    char courseID[10];
    char courseNature[20];
    int credit;
    int theoryHours;
    int practiceHours;
    char semester[10];
    char classTime[30];
} Course;
 
// 定义学生结构体
typedef struct {
    char studentID[10];
    char courseID[10];
} StudentCourse;
 
// 从文件中导入课程信息
void importCourses(Course courses[], int *numCourses) {
    FILE *file = fopen("D:/courses.txt", "r");
    if (file == NULL) {
        printf("无法打开文件!\n");
        return;
    }
 
    *numCourses = 0;
    while (fscanf(file, "%s %s %d %d %d %s %[^\n]s", courses[*numCourses].courseID, courses[*numCourses].courseNature,
                  &courses[*numCourses].credit, &courses[*numCourses].theoryHours, &courses[*numCourses].practiceHours,
                  courses[*numCourses].semester, courses[*numCourses].classTime) != EOF) {
        (*numCourses)++;
    }
 
    fclose(file);
}
 
void exportCourses(Course courses[], int numCourses) {
    FILE *file = fopen("D:/courses.txt", "w");
    if (file == NULL) {
        printf("无法打开文件!\n");
        return;
    }
 
    for (int i = 0; i < numCourses; i++) {
        fprintf(file, "%s %s %d %d %d %s %s\n", courses[i].courseID, courses[i].courseNature,
                courses[i].credit, courses[i].theoryHours, courses[i].practiceHours,
                courses[i].semester, courses[i].classTime);
    }
 
    fclose(file);
 
    printf("课程信息已成功导出!\n");
}
 
// 录入课程信息和学生选课信息
void inputCourseInfo(Course courses[], int *numCourses) {
    printf("请输入课程信息:\n");
    printf("课程编号 课程性质 学分 理论学时 实践学时 开课学期 上课时间\n");
    scanf("%s %s %d %d %d %s %[^\n]s", courses[*numCourses].courseID, courses[*numCourses].courseNature,
          &courses[*numCourses].credit, &courses[*numCourses].theoryHours, &courses[*numCourses].practiceHours,
          courses[*numCourses].semester, courses[*numCourses].classTime);
 
    (*numCourses)++;
    
    exportCourses(courses, *numCourses);  // 录入课程信息后立即保存到文件
}
 
void inputStudentCourse(StudentCourse studentCourses[], int *numStudentCourses) {
    printf("请输入学生选课信息:\n");
    printf("学号 课程编号\n");
    scanf("%s %s", studentCourses[*numStudentCourses].studentID, studentCourses[*numStudentCourses].courseID);
 
    (*numStudentCourses)++;
}
 
// 按特定要求查询相关课程信息
void searchCourseInfo(Course courses[], int numCourses, char courseID[]) {
    // 在课程数组中查找指定课程编号的课程信息
    for (int i = 0; i < numCourses; i++) {
        if (strcmp(courses[i].courseID, courseID) == 0) {
            printf("课程编号:%s\n", courses[i].courseID);
            printf("课程性质:%s\n", courses[i].courseNature);
            printf("学分:%d\n", courses[i].credit);
            printf("理论学时:%d\n", courses[i].theoryHours);
            printf("实践学时:%d\n", courses[i].practiceHours);
            printf("开课学期:%s\n", courses[i].semester);
            printf("上课时间:%s\n", courses[i].classTime);
            return;
        }
    }
 
    printf("未找到该课程!\n");
}
 
// 按输入课程编号修改课程相关信息
void modifyCourseInfo(Course courses[], int numCourses, char courseID[]) {
    // 在课程数组中查找指定课程编号的课程信息
    for (int i = 0; i < numCourses; i++) {
        if (strcmp(courses[i].courseID, courseID) == 0) {
            printf("请输入修改后的课程信息:\n");
            printf("课程性质 学分 理论学时 实践学时 开课学期 上课时间\n");
            scanf("%s %d %d %d %s %[^\n]s", courses[i].courseNature,
                  &courses[i].credit, &courses[i].theoryHours, &courses[i].practiceHours,
                  courses[i].semester, courses[i].classTime);
            printf("课程信息修改成功!\n");
            return;
        }
    }
 
    printf("未找到该课程!\n");
}
 
// 输入课程编号显示该课程选课人数及选课学生信息
void displayCourseStudents(StudentCourse studentCourses[], int numStudentCourses, char courseID[]) {
    int count = 0;  // 初始化选课人数为0
 
    printf("课程编号:%s\n", courseID);
 
    printf("选课学生信息:\n");
    for (int i = 0; i < numStudentCourses; i++) {
        if (strcmp(studentCourses[i].courseID, courseID) == 0) {
            printf("学号:%s\n", studentCourses[i].studentID);
            count++;  // 每找到一个匹配的选课记录,选课人数加1
        }
    }
 
    printf("选课人数:%d\n", count);  // 输出选课人数
 
    if (count == 0) {
        printf("暂无学生选修该课程!\n");
    }
}
 
 
// 输入学号显示该生选课情况
void displayStudentCourses(StudentCourse studentCourses[], int numStudentCourses, char studentID[]) {
    printf("学号:%s\n", studentID);
    printf("选课情况:\n");
 
    int count = 0;
    for (int i = 0; i < numStudentCourses; i++) {
        if (strcmp(studentCourses[i].studentID, studentID) == 0) {
            printf("课程编号:%s\n", studentCourses[i].courseID);
            count++;
        }
    }
 
    if (count == 0) {
        printf("未找到该生选课信息!\n");
    }
}
 
// 将学生选课信息导出到文件
void exportStudentCourses(StudentCourse studentCourses[], int numStudentCourses) {
    FILE *file = fopen("D:/studentcourses.txt", "w");
    if (file == NULL) {
        printf("无法打开文件!\n");
        return;
    }
 
    for (int i = 0; i < numStudentCourses; i++) {
        fprintf(file, "%s %s\n", studentCourses[i].studentID, studentCourses[i].courseID);
    }
 
    fclose(file);
 
    printf("学生选课信息已成功导出!\n");
}
 
int main() {
    Course courses[100]; // 最多支持100门课程
    int numCourses = 0;
 
    StudentCourse studentCourses[1000]; // 最多支持1000名学生选课
    int numStudentCourses = 0;
 
    int choice;
    char courseID[10];
    char studentID[10];
 
    while (1) {
        printf("\n");
        printf("学生选课管理系统\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("9. 退出系统\n");
        printf("请输入选项:");
        scanf("%d", &choice);
 
        switch (choice) {
            case 1:
                importCourses(courses, &numCourses);
                printf("课程信息导入成功!\n");
                break;
            case 2:
                inputCourseInfo(courses, &numCourses);
                break;
            case 3:
                inputStudentCourse(studentCourses, &numStudentCourses);
                break;
            case 4:
                printf("请输入要查询的课程编号:");
                scanf("%s", courseID);
                searchCourseInfo(courses, numCourses, courseID);
                break;
            case 5:
                printf("请输入要修改的课程编号:");
                scanf("%s", courseID);
                modifyCourseInfo(courses, numCourses, courseID);
                break;
            case 6:
                printf("请输入要查询的课程编号:");
                scanf("%s", courseID);
                displayCourseStudents(studentCourses, numStudentCourses, courseID);
                break;
            case 7:
                printf("请输入要查询的学号:");
                scanf("%s", studentID);
                displayStudentCourses(studentCourses, numStudentCourses, studentID);
                break;
            case 8:
                exportStudentCourses(studentCourses, numStudentCourses);
                break;
            case 9:
                printf("感谢使用学生选课管理系统!\n");
                exit(0);
            default:
                printf("无效的选项!\n");
        }
    }
 
    return 0;
}
 
 

你可能感兴趣的:(C语言基础入门,c语言)