作者:Linux猿

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

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

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


目录

一、主要功能需求

二、主要设计思路

三、功能实现

3.1课程信息浏览

3.2课程信息录入

3.3课程信息删除

3.4课程信息修改

3.5选修课程

四、总结


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

一、主要功能需求

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

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

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

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

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

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

(7)支持选修课程;

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

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

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

二、主要设计思路

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

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

三、功能实现

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

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例」后可联系作者获取源码


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