作者: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)支持对选修课程的存储,支持文件的写入和读取。
学生选课管理系统主要设计流程图如下所示。
如上图所示,列出了主要功能的程序流程图。
这里对主要功能实现进行详细讲解。
课程信息浏览功能实现对所有选修课程的展示,代码实现如下所示。
// 浏览课程信息
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;
}
}
选修课程通过链表存储,存储的课程信息包括:课程编号、课程名称、课程性质、实验或上机学时、总学时、授课学时、学分以及开课。
课程信息录入功能实现对选修课程信息的添加,代码实现如下所示。
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;
}
}
如上述代码所示,录入的选修课程信息包括:课程编号、课程名称、课程性质、实验或上机学时、授课学时、学分以及总学时。
课程信息删除功能实现对选修课程信息的删除,代码实现如下所示。
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;
即可。如果课程编号不存在,则输出“未查找到课程信息!”。
课程信息修改功能实现选修课程信息的修改,代码实现如下所示。
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);
}
如上代码所示,实现了对已有选课信息的修改。首先,需要输入课程编号,根据课程编号在选修课程列表中进行查找,如果找到对应选修课程信息,展示可以修改的内容,选择后修改对应的内容。否则,如果查找不到对应课程,则输出“未查找到课程信息!”。
选修课程功能实现对选修课程的选择,代码实现如下所示。
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例」后可联系作者获取源码
感觉有帮助记得「一键三连」支持下哦!有问题可在评论区留言,感谢大家的一路支持!猿哥将持续输出「优质文章」回馈大家!