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

Posted Linux猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++ 学生选课管理系统(源码 + 详解)相关的知识,希望对你有一定的参考价值。

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


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


PHP基于B/S模式下的学生选课管理系统源码分享

大家好,我是全微毕设团队的创始人,本团队擅长JAVA(SSM,SSH,SPRINGBOOT)、PYTHON、PHP、C#、安卓等多项技术。

今天将为大家分析一个学生选课管理系统,本系统采用目前最流行的B/S结构和myeclipse编辑器、PHP开发语言,MySQL数据库设计并实现的。

随着教育规模的不断壮大,信息变得越来越多。同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的学生选课管理系统来管理学校信息,会使管理工作系统化、规范化,也会提高学校形象,提高管理效率。

本学生选课管理系统是针对目前学生选课管理的实际需求,从实际工作出发,对过去的学生选课管理系统存在的问题进行分析,结合计算机系统的结构、概念、模型、原理、方法,在计算机各种优势的情况下,采用目前最流行的B/S结构和myeclipse编辑器、MySQL数据库设计并实现的 。本学生选课管理系统主要包括登录模块、教师信息管理模块、学生信息管理模块、课程信息管理模块、和退出模块等多个模块。它帮助学生选课管理实现了信息化、网络化,通过测试,实现了系统设计目标,相比传统的管理模式,本系统合理的利用了网络数据资源,有效的减少了学生选课管理的经济投入,大大提高了学生选课管理的效率。

 

sql建表语句

/*
Navicat MySQL Data Transfer

Source Server : localhost_3306
Source Server Version : 50160
Source Host : localhost:3306
Source Database : phpxsxkglxt06

Target Server Type : MYSQL
Target Server Version : 50160
File Encoding : 65001

Date: 2018-05-14 14:39:11
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `allusers`
-- ----------------------------
DROP TABLE IF EXISTS `allusers`;
CREATE TABLE `allusers` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(50) DEFAULT NULL,
`pwd` VARCHAR(50) DEFAULT NULL,
`cx` VARCHAR(50) DEFAULT 普通管理员,
`addtime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=gb2312;

-- ----------------------------
-- Records of allusers
-- ----------------------------
INSERT INTO `allusers` VALUES (2, hsg, hsg, 管理员, 2018-05-13 21:51:02);

-- ----------------------------
-- Table structure for `jiaoshixinxi`
-- ----------------------------
DROP TABLE IF EXISTS `jiaoshixinxi`;
CREATE TABLE `jiaoshixinxi` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`gonghao` VARCHAR(50) DEFAULT NULL,
`xingming` VARCHAR(50) DEFAULT NULL,
`mima` VARCHAR(50) DEFAULT NULL,
`chushengnianyue` VARCHAR(50) DEFAULT NULL,
`shenfenzheng` VARCHAR(300) DEFAULT NULL,
`xingbie` VARCHAR(50) DEFAULT NULL,
`zhicheng` VARCHAR(50) DEFAULT NULL,
`zhaopian` VARCHAR(50) DEFAULT NULL,
`zhujiaokecheng` VARCHAR(50) DEFAULT NULL,
`dianhua` VARCHAR(50) DEFAULT NULL,
`beizhu` VARCHAR(500) DEFAULT NULL,
`addtime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=gb2312;

-- ----------------------------
-- Records of jiaoshixinxi
-- ----------------------------
INSERT INTO `jiaoshixinxi` VALUES (8, 101, 陈小东, 101, 1973-03-24 20:32:07, 566316522189695666, , 教授, uploadfile/1490358749eeml.jpg, C语言, 86316662, fdaf, 2018-05-13 21:51:02);
INSERT INTO `jiaoshixinxi` VALUES (9, 102, 许小敏, 102, 1983-03-24 20:32:42, 584984829665561, , 实习教授, uploadfile/1490358778ja5u.jpg, PHP, 13869566326, fdfdaf, 2018-05-13 21:51:02);
INSERT INTO `jiaoshixinxi` VALUES (10, 103, 刘小华, 103, 1970-03-24 20:48:27, 854959295262626215, , 副教授, uploadfile/1490359730e60n.jpg, 数据结构, 82166565, fdff, 2018-05-13 21:51:02);
INSERT INTO `jiaoshixinxi` VALUES (11, 104, 104, 104, 2018-05-14 01:22:51, 345454534543533333, , 请问, uploadfile/1526232194sc3z.jpg, PS, 65756756, qweqweqe, 2018-05-14 01:23:21);

-- ----------------------------
-- Table structure for `kechengxinxi`
-- ----------------------------
DROP TABLE IF EXISTS `kechengxinxi`;
CREATE TABLE `kechengxinxi` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`kechengbianhao` VARCHAR(50) DEFAULT NULL,
`kechengmingcheng` VARCHAR(300) DEFAULT NULL,
`xuefen` VARCHAR(50) DEFAULT NULL,
`xueshi` VARCHAR(50) DEFAULT NULL,
`kexuanrenshu` VARCHAR(50) DEFAULT NULL,
`renkejiaoshi` VARCHAR(50) DEFAULT NULL,
`beizhu` VARCHAR(500) DEFAULT NULL,
`addtime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`skdd` VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=gb2312;

-- ----------------------------
-- Records of kechengxinxi
-- ----------------------------
INSERT INTO `kechengxinxi` VALUES (5, 001, 标准C++基础, 100, 50, 60, 101, fdafd, 2018-05-13 21:51:02, 1号楼301教室);
INSERT INTO `kechengxinxi` VALUES (6, 002, 数据库基础, 100, 60, 50, 103, fdafdf, 2018-05-13 21:51:02, 2号楼201室);
INSERT INTO `kechengxinxi` VALUES (7, 131231, 234234, 100, 45, 50, 104, 45435345, 2018-05-14 01:24:38, 5435345);

-- ----------------------------
-- Table structure for `xuankejilu`
-- ----------------------------
DROP TABLE IF EXISTS `xuankejilu`;
CREATE TABLE `xuankejilu` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`kechengbianhao` VARCHAR(50) DEFAULT NULL,
`kechengmingcheng` VARCHAR(300) DEFAULT NULL,
`xuefen` VARCHAR(50) DEFAULT NULL,
`xueshi` VARCHAR(50) DEFAULT NULL,
`renkejiaoshi` VARCHAR(50) DEFAULT NULL,
`xuankeren` VARCHAR(50) DEFAULT NULL,
`chengji` VARCHAR(50) DEFAULT NULL,
`pingyu` VARCHAR(500) DEFAULT NULL,
`beizhu` VARCHAR(500) DEFAULT NULL,
`addtime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=gb2312;

-- ----------------------------
-- Records of xuankejilu
-- ----------------------------
INSERT INTO `xuankejilu` VALUES (5, 001, 标准C++基础, 100, 50, 101, 001, 90, fdfdf, fdfdfa, 2018-05-13 21:51:02);
INSERT INTO `xuankejilu` VALUES (6, 002, 数据库基础, 100, 60, 103, 003, 80, fdfdf, fdafdf, 2018-05-13 21:51:02);
INSERT INTO `xuankejilu` VALUES (7, 131231, 234234, 100, 45, 104, 123, 80, ertertertert, 234234, 2018-05-14 01:25:01);

-- ----------------------------
-- Table structure for `xueshengxinxi`
-- ----------------------------
DROP TABLE IF EXISTS `xueshengxinxi`;
CREATE TABLE `xueshengxinxi` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`xuehao` VARCHAR(50) DEFAULT NULL,
`mima` VARCHAR(50) DEFAULT NULL,
`xingming` VARCHAR(50) DEFAULT NULL,
`xingbie` VARCHAR(50) DEFAULT NULL,
`banji` VARCHAR(50) DEFAULT NULL,
`zhuanye` VARCHAR(50) DEFAULT NULL,
`xueyuan` VARCHAR(50) DEFAULT NULL,
`minzu` VARCHAR(50) DEFAULT NULL,
`jiguan` VARCHAR(50) DEFAULT NULL,
`chushengriqi` VARCHAR(50) DEFAULT NULL,
`ruxuenianfen` VARCHAR(50) DEFAULT NULL,
`zhaopian` VARCHAR(50) DEFAULT NULL,
`beizhu` VARCHAR(500) DEFAULT NULL,
`addtime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=gb2312;

-- ----------------------------
-- Records of xueshengxinxi
-- ----------------------------
INSERT INTO `xueshengxinxi` VALUES (2, 001, 001, 吴明翰, , 16届计算机1班, 计算机编程, 信息学院, , 浙江, 1995-03-24, 2018-05-13, uploadfile/1490358843a175.jpg, fafdf, 2018-05-13 21:51:02);
INSERT INTO `xueshengxinxi` VALUES (3, 002, 002, 林晓琴, , 16届计算机1班, 计算机编程, 信息学院, , 苗江, 1995-03-01, 2018-05-13\r\n2016-07-01\r\n2017-02-01\r\n, uploadfile/1490358866cfj9.jpg, fafdf, 2018-05-13 21:51:02);
INSERT INTO `xueshengxinxi` VALUES (4, 003, 003, 林立行, , 17届化学2班, 化学, 化工学院, 满族, 北京, 1995-03-24, 2018-05-13, uploadfile/14903598271bt6.jpg, fafdf, 2018-05-13 21:51:02);
INSERT INTO `xueshengxinxi` VALUES (7, 123, 123, 123, , 1班, 计算机, 理工, 123, 123213, 2018-05-14, 2018-05-14, uploadfile/1526232229csjw.jpg, 234234234, 2018-05-14 01:23:51);
 

 

 

源码下载

以上是关于C/C++ 学生选课管理系统(源码 + 详解)的主要内容,如果未能解决你的问题,请参考以下文章

基于JavaWeb学生选课系统开发与设计(附源码资料)

PHP基于B/S模式下的学生选课管理系统源码分享

JavaEE项目《高校学生在线选课系统》开发教程(附源码资料)

用数据结构(c语言版)编写的学生选课系统

基于javaweb基于ssm框架学生信息管理(选课)系统设计与实现(项目源码)

JavaWeb SSM SpringBoot学生信息管理系统(源码+可运行《精品毕设》)主要功能:登陆学生管理班级管理教师管理课程选课管理考勤管理请假管理成绩管理统计修改密码等