C/C++ 学生选课管理系统(源码 + 详解)

作者:Linux猿

简介:CSDN博客专家,华为云享专家,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

关注专栏:C/C++课程设计100例 优质好文持续更新中……

欢迎小伙伴们点赞、收藏⭐、留言


目录

一、主要功能需求

二、主要设计思路

三、功能实现

3.1 课程信息浏览

3.2 课程信息录入

3.3 课程信息删除

3.4 课程信息修改

3.5 选修课程

四、总结


C/C++ 学生选课管理系统(源码 + 详解)_第1张图片

 本篇文章主要对学生选课管理系统进行详细的讲解,包括对功能需求、设计思路、主要功能实现等的讲解。

一、主要功能需求

(1)支持课程信息浏览;

(2)支持课程信息查询;

(3)支持课程信息录入;

(4)支持课程信息删除;

(5)支持课程信息修改;

(6)支持课程信息写入文件;

(7)支持选修课程;

(8)支持查看选修课程;

(9)支持删除选修课程;

(10)支持对选修课程的存储,支持文件的写入和读取。

二、主要设计思路

学生选课管理系统主要设计流程图如下所示。

C/C++ 学生选课管理系统(源码 + 详解)_第2张图片

如上图所示,列出了主要功能的程序流程图。

三、功能实现

这里对主要功能实现进行详细讲解。

3.1 课程信息浏览

课程信息浏览功能实现对所有选修课程的展示,代码实现如下所示。

// 浏览课程信息
void viewCourse(LinkList *head)
{
    while (true) {
        system("cls");
        int x = sx, y = sy;
        if (head->next == NULL) {
            getCoord(x, ++y); printf("没有课程信息!");
        } else {
            LinkList *p = head;
            while (p->next != NULL) {
                p = p->next;
                printDivideLine(x - 1, ++y, 40);
                getCoord(x, ++y); printf("课程编号:%s", p->ID);
                getCoord(x, ++y); printf("课程名称:%s", p->name);
                getCoord(x, ++y); printf("课程性质:%s", p->property);
                getCoord(x, ++y); printf("实验或上机学时:%d", p->experiment_hours);
                getCoord(x, ++y); printf("总学时:%d", p->hours);
                getCoord(x, ++y); printf("授课学时:%d", p->teach_hours);
                getCoord(x, ++y); printf("学分:%d", p->credit);
                getCoord(x, ++y); printf("开课:%s", p->course);
                printDivideLine(x - 1, ++y, 40);
            }
        }
        returnMenu(x, ++y);
        break;
    }
}

选修课程通过链表存储,存储的课程信息包括:课程编号、课程名称、课程性质、实验或上机学时、总学时、授课学时、学分以及开课。 

3.2 课程信息录入

课程信息录入功能实现对选修课程信息的添加,代码实现如下所示。

void addCourse(LinkList *end)
{
    while (true) {
        system("cls");
        int x = sx, y = sy;
        LinkList *in = (LinkList*)malloc(sizeof(LinkList));
        getCoord(x, ++y); printf("请输入课程编号: ");
        scanf("%s", in->ID);
        getCoord(x, ++y); printf("请输入课程名称: ");
        scanf("%s", in->name);
        getCoord(x, ++y); printf("请输入课程性质: ");
        scanf("%s", in->property);
        getCoord(x, ++y); printf("请输入实验或上机学时: ");
        scanf("%d",&in->experiment_hours);
        getCoord(x, ++y); printf("请输入授课学时: ");
        scanf("%d",&in->teach_hours);
        getCoord(x, ++y); printf("请输入学分: ");
        scanf("%d",&in->credit);
        getCoord(x, ++y); printf("请输入总学时: ");
        scanf("%d",&in->hours);
        getCoord(x, ++y); printf("请输入开课: ");
        scanf("%s", in->course);

        end->next = in;
        in->next = NULL;
        end = in;
        char ch = continueMenu(x, y += 2);
        if (ch == 'Q') break;
    }
}

如上述代码所示,录入的选修课程信息包括:课程编号、课程名称、课程性质、实验或上机学时、授课学时、学分以及总学时。

3.3 课程信息删除

课程信息删除功能实现对选修课程信息的删除,代码实现如下所示。

void deleteCourse(LinkList *head)
{
    system("cls");
    int x = sx, y = sy;
    LinkList *pre = head;
    LinkList *p = head->next;

    getCoord(x, ++y); printf("请输入将要删除的课程编号: ");
    char id[30];
    scanf("%s", id);

    bool flag = false;
    while (p != NULL) {
        if (!strcmp(p->ID, id)) {
            flag = true;
            break;
        }
        pre = p;
        p = p->next;
    }
    if (flag) {
        pre->next = pre->next->next;
        getCoord(x, ++y);  printf("删除课程信息成功!");
    } else {
        getCoord(x, ++y);  printf("未查找到课程信息!");
    }

    returnMenu(x, ++y);
}

如上代码所示,根据课程编号删除课程信息,因为选课信息是通过链表存储,所以记录待删除节点的前一个节点,直接执行:

pre->next = pre->next->next;

即可。如果课程编号不存在,则输出“未查找到课程信息!”。 

3.4 课程信息修改

课程信息修改功能实现选修课程信息的修改,代码实现如下所示。

void modifyCourse(LinkList *head)
{
    system("cls");
    int x = sx, y = sy;
    LinkList *p = head->next;

    getCoord(x, ++y); printf("请输入将要修改的课程编号: ");
    char id[30];
    scanf("%s", id);

    bool flag = false;
    while (p != NULL) {
        if (!strcmp(p->ID, id)) {
            flag = true;
            break;
        }
        p = p->next;
    }
    if (flag) {
        getCoord(x, ++y); ++y; printf("请输入要修改的项:");
        getCoord(x, ++y); ++y; printf("1) 课程编号");
        getCoord(x, ++y); ++y; printf("2) 课程名称");
        getCoord(x, ++y); ++y; printf("3) 课程性质");
        getCoord(x, ++y); ++y; printf("4) 实验或上机学时");
        getCoord(x, ++y); ++y; printf("5) 授课学时");
        getCoord(x, ++y); ++y; printf("6) 学分");
        getCoord(x, ++y); ++y; printf("7) 总学时");
        getCoord(x, ++y); ++y; printf("8) 开课");
        getCoord(x, ++y); ++y; printf("请输入:");
        int id;
        scanf("%d", &id);
        switch (id) {
        case 1:
            getCoord(x, ++y); ++y; printf("请输入课程编号:");
            scanf("%s", p->ID);
            break;
        case 2:
            getCoord(x, ++y); ++y; printf("请输入课程名称:");
            scanf("%s", p->name);
            break;
        case 3:
            getCoord(x, ++y); ++y; printf("请输入课程性质:");
            scanf("%s", p->property);
            break;
        case 4:
            getCoord(x, ++y); ++y; printf("请输入实验或上机学时:");
            scanf("%d", &p->experiment_hours);
            break;
        case 5:
            getCoord(x, ++y); ++y; printf("请输入授课学时:");
            scanf("%d", &p->teach_hours);
            break;
        case 6:
            getCoord(x, ++y); ++y; printf("请输入学分:");
            scanf("%d", &p->credit);
            break;
        case 7:
            getCoord(x, ++y); ++y; printf("请输入总学时:");
            scanf("%d", &p->hours);
            break;
        case 8:
            getCoord(x, ++y); ++y; printf("请输入开课:");
            scanf("%s", p->course);
            break;
        }
        getCoord(x, ++y);  printf("修改课程信息成功!");
    } else {
        getCoord(x, ++y);  printf("未查找到课程信息!");
    }
    returnMenu(x, ++y);
}

 如上代码所示,实现了对已有选课信息的修改。首先,需要输入课程编号,根据课程编号在选修课程列表中进行查找,如果找到对应选修课程信息,展示可以修改的内容,选择后修改对应的内容。否则,如果查找不到对应课程,则输出“未查找到课程信息!”。

3.5 选修课程

选修课程功能实现对选修课程的选择,代码实现如下所示。

void chooseCourse(LinkList *head)
{
    while (true) {
        system("cls");
        int x = sx, y = sy;
        getCoord(x, ++y); printf("请输入课程编号: ");
        char id[30];
        scanf("%s", id);
        bool flag = false;
        LinkList *p = head->next;
        while (p != NULL) {
            if (!strcmp(p->ID, id)) {
                flag = true;
                break;
            }
        }
        if (flag) {
            getCoord(x, ++y); printf("选修课程成功!");
            printCourse(p, x, ++y);
            addCourseToFile(p);
        } else {
            getCoord(x, ++y); printf("未查询到课程信息!");
        }
        y += 8;
        char ch = continueMenu(x, ++y);
        if (ch == 'Q') break;
    }
}

如上代码所示,选修课程是对在选修课程列表里的课程进行选择,选修课程是依据课程编号进行选择,在选修课程列表中根据课程编号查找,将其添加到已选课列表里。如果未查询到选修课程信息,则输出“未查询到课程信息”。

四、总结

本篇文章实现了学生选课管理系统,主要是对学生选课进行管理,实现了对选课信息的录入、查询、浏览以及删除等操作,学生可以根据录入的选课信息选修课程。


订阅专栏「C/C++/Java课程设计100例」后可联系作者获取源码


感觉有帮助记得「一键三连支持下哦!有问题可在评论区留言,感谢大家的一路支持!猿哥将持续输出「优质文章回馈大家!


你可能感兴趣的:(C/C++面试通关集锦,C/C++学生选课管理系统,学生选课管理系统,C/C++大作业,C/C++毕业设计)