C语言学生选修课程管理系统课程设计

因为是大一的小白,所以如果有很多不规范的地方还请各位大神能为我指点一下!在这里非常感谢大家的阅读和指导!

一、题目内容的描述

课程设计题目为“学生选修课程系统设计”,假定有n门课程,每门课程有:课程编号,课程名称,课程性质(公共课、必修课、选修课),总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。

二、应用程序功能的详细说明

学生选修课程系统能提供以下功能:

系统以菜单方式工作

课程信息录入功能,即输入

课程信息浏览功能,即输出

课程信息查询功能,即算法

能通过以下查询方式查询学生选修课程

按学分查询

按课程性质查询

学生选修课程(可选项)

三、数据结构设计,设计输入数据类型、格式和内容限制

系统内包含预处理指令#include<文件名>,int整型变量,char字符及字符串变量,float浮点型变量,以及赋值表达式和struct结构体,其中的结构体包含int整型变量,char字符及字符串变量,float浮点型变量。运用表达式语句,函数调用语句,以及控制语句if else语句、switch语句、break语句,return语句。定义并运用多个函数体作为系统功能运行的基本及提示

int allChoose();          //总菜单

int output(int m, int n); //课程信息输出函数

int input();              //1.课程信息录入

int alloutput();          //2.全部课程显示

int search();             //3.课程信息查询

int change();             //4.课程信息修改

int choose();             //5.选修课程选择

int information();        //6.学生课程信息查看

int back();               //返回总菜单功能

四、模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等)

运用函数及函数功能:

int allChoose();总菜单

int output(int m, int n); 课程信息输出函数

int input();课程信息录入

int alloutput();全部课程显示

int search();课程信息查询

int change();课程信息修改

int choose();选修课程选择

int information();学生课程信息查看

int back();返回总菜单功能

系统入口为主函数int main(),无返回值,主函数中调用函数int allChoose()作为系统总菜单,作为运用系统功能的提示。

int allChoose()函数中调用input()函数作为录入函数,调用alloutput()函数作为输入函数,调用search()函数用于查询课程,调用change()函数用于修改课程信息,调用choose()函数用于学生选择课程,并调用int allChoose()函数用于返回总菜单。

int input();函数中调用了int back();函数用于返回总菜单。

int alloutput();函数中调用了int output(int m, int n);函数用于课程信息输出,及int back();函数用于返回总菜单。

int search();函数中调用了int output()函数用于课程信息输出和int back()函数用于返回总菜单。

int change();函数中调用了int output()函数用于课程信息输出和int back()函数用于返回总菜单。

int choose();函数中调用了int output()函数用于课程信息输出和int back()函数用于返回总菜单。

int information();函数中调用了int output()函数用于课程信息输出和int back()函数用于返回总菜单。

int back()函数中调用int allChoose()函数用于输入1后返回主菜单。出口返回值均为0.

五、以上函数的返回主要模块的算法描述

1.以程序流程图的方式给出

2.简要的语言描述

进入系统,按照所需功能输入相应编号,根据系统提示进行下一步操作,若进入课程信息录入,输入课程数量后按照系统提示输入相应内容;进入课程信息浏览功能,则系统显示已输入的课程信息并提示返回总菜单重新选择功能;进入课程信息查询功能,则输入所需查询方式对应的编号,再输入对应信息查询,显示对应课程后提示返回主菜单继续选择所需功能;进入课程信息修改功能,显示所有课程信息,输入所需修改课程的对应编号,然后根据提示输入所需修改的信息对应的编号开始修改,修改后显示修改成功提示返回主菜单进入下一轮功能选择;进入学生选修课程功能,显示所有课程信息,输入想选的课程编号,未选过该课程则显示“课程选择成功”,已选过该课程则显示“课程已选”,显示结果后均提示返回主菜单进行下一步选择;回到主菜单后输入0则退出系统。

六、运行及调试分析(测试数据及测试结果)

进入系统主菜单:

输入1,进入课程录入功能

输入课程信息进行录入:

输入课程信息后返回主菜单:

返回主菜单后输入2,进入浏览功能后并再次返回主菜单:

输入3后进入查询功能:

输入查询方式对应的数字开始查询:

查询后返回主菜单进入修改功能,选择需要修改的课程对应的编号,再选择需要修改的信息:

返回主菜单后进入选课功能,输入课程编号开始选课,选课成功输入选择成功,课程已选则显示课程已选:

再次返回主菜单后输入0退出系统:

七、课程设计总结

C语言课程设计的主要目标是使学生能够熟练掌握C语言的语法,掌握基本的数据结构与算法,以及培养解决实际问题的能力。

在本次课程设计中,我深刻体会到了C语言的强大功能和灵活性。同时,我也认识到了编程中细节的重要性,一个小小的错误可能导致整个程序的崩溃。此外,与团队成员的合作也让我学到了很多沟通与协作的技巧。

虽然我在C语言课程设计中取得了一定的成果,但我知道自己还有许多不足之处。在未来的学习中,我将更加注重实践和独立思考,努力提高自己的编程能力和解决问题的能力。同时,我也希望能够更加深入地学习C语言的底层机制和高级特性,如内存管理、文件操作等。此外,我也意识到持续学习的重要性。随着技术的发展和编程语言的更新换代,我将保持对新技术的关注和学习,以适应不断变化的行业环境。

总的来说,这次的课程设计是一次非常宝贵的学习经历。通过这次课程设计,我不仅掌握了C语言的语法和基本数据结构,更重要的是培养了解决实际问题的能力。我相信,这次学习的经验将对我未来的学习和职业生涯产生积极的影响。

八、参考文献(至少三个)

谭浩强编著《C程序设计(第五版)》

黑马程序员编著《C语言程程设计案例式教程》

郭翠英编著《C语言课程设计案例精编》

九、附录  程序的源代码清单

#include <stdio.h>
#include <string.h>
int allChoose();          //总菜单
int output(int m, int n); //课程信息输出函数
int input();              //1.课程信息录入
int alloutput();          //2.全部课程显示
int search();             //3.课程信息查询
int change();             //4.课程信息修改
int choose();             //5.选修课程选择
int information();        //6.学生课程信息查看
int back();               //返回总菜单功能
struct course//建立结构体
{
    int number;
    char name[20], nature[16];
    int totalTime, time1, time2;
    float credit;
    char term[10];
    int t;       //用于标记是否被学生选择
} classList[10]; //最多录入10个课程
int i = 0; //使结构体添加从classList[0]开始
int main()
{
    printf("*****************学生选修课程系统*****************\n");
    allChoose();
}
int allChoose()//总菜单
{
    int n = 0;
    printf("请选择端口:\n");
    printf("1.课程信息录入\n");
    printf("2.课程信息浏览\n");
    printf("3.课程信息查询\n");
    printf("4.课程信息修改\n");
    printf("5.学生选修课程\n");
    printf("0.退出\n");
    printf("请输入数字(1/2/3/4/5/0):");
    scanf("%d", &n);
    if (n == 1)
        input();
    else if (n == 2)
    {
        if (i == 0)
        {
            printf("\n请先录入课程!\n\n");
            allChoose();
        }
        else
            alloutput();
    }
    else if (n == 3)
        search();
    else if (n == 4)
        change();
    else if (n == 5)
        choose();
    else if (n == 0) //退出系统
    {
        printf("退出成功!");
        return 0;
    }
    else
    {
        printf("输入错误,请重新输入:");
    }
    return 0;
}
int input()//课程信息录入
{
    printf("请输入课程数目\n");
    int c;
    scanf("%d", &c);
    for (i = i; i < c; i++)
    {
        printf("\n1.课程信息录入\n");
        printf("添加新的课程:\n");
        printf("输入课程编号:");
        scanf("%d", &classList[i].number); //课程编号
        printf("输入课程名称:");
        scanf("%s", classList[i].name); //课程名称
        printf("输入课程性质(选修/必修):");
        scanf("%s", classList[i].nature); //课程性质
        printf("输入总学时:");
        scanf("%d", &classList[i].totalTime); //总学时
        printf("输入授课学时:");
        scanf("%d", &classList[i].time1); //授课学时
        printf("输入实验/上机学时:");
        scanf("%d", &classList[i].time2); //实验/上机学时
        printf("输入学分:");
        scanf("%f", &classList[i].credit); //学分
        printf("输入开课学期:");
        scanf("%s", classList[i].term); //开课学期
        classList[i].t = 0;//默认t为0,即未被学生选择
    }
    printf("录入成功!\n");
    back(); //返回总菜单
    return 0;
}
int output(int m, int n)//课程信息输出函数
{
    for (m = m; m < n; m++) //循环输出目标课程
    {
        printf("课程编号:%d  名称:%s  性质:%s  总学时:%d  授课学时:%d  实验/上机学时:%d  学分:%.1f  开课学期:%s  \n", classList[m].number, classList[m].name, classList[m].nature, classList[m].totalTime, classList[m].time1, classList[m].time2, classList[m].credit, classList[m].term);
    }
    return 0;
}
int alloutput()//全部课程显示
{
    printf("\n2.全部课程显示\n");
    output(0, i); //控制output中for循环次数使全部课程显示
    printf("显示成功!\n");
    back(); //返回总菜单
    return 0;
}
int search()//课程信息查询
{
    int m, num, j;
    char name[20], nature[16];
    printf("\n3.课程信息查询\n");
    printf("请输入要查询的方式(1.课程学分/2.课程性质):");
    scanf("%d", &m);
    if (m == 1) //1.课程学分查询
    {
        printf("1.根据课程学分查询\n");
        printf("请输入课程学分:");
        scanf("%d", &num);
        for (j = 0; j < i; j++)
        {
            if (num == classList[j].credit) //将a与已有课程的编号number比较
                output(j, j + 1);            //控制输出函数只输出classList[j]的信息
        }
    }
    else if (m == 2) //课程性质查询
    {
        printf("2.根据课程性质查询\n");
        printf("请输入课程性质(选修/必修):");
        scanf("%s", nature);
        for (j = 0; j < i; j++)
        {
            if (!strcmp(nature, classList[j].nature)) //将a与已有课程的性质nature比较
                output(j, j + 1);                       //控制输出函数只输出classList[j]的信息
        }
    }
    else //当输入的数字不是1/2时重新输入
    {
        printf("错误输入,请重新输入!\n");
    }
    back(); //返回总菜单
    return 0;
}

//课程信息修改
int change()
{
    int j, n;
    printf("\n4.课程信息修改\n");
    output(0, i); //控制output中for循环次数使全部课程显示,便于选择修改的课程
    printf("\n请输入要修改的课程编号:");
    scanf("%d", &n);
    for (j = 0; j < i; j++)
    {
        if (n == classList[j].number) //将n与已有课程的编号number比较
        {
            output(j, j + 1); //控制输出函数只输出class[j]的信息
            break;
        }
    }
    printf("\n请输入要修改的信息编号\n");
    printf("1.课程编号\n2.课程名称\n3.课程性质\n4.总学时\n5.授课学时\n6.实验/上机学时\n7.学分\n8.开课学期\n");
    int b; scanf("%d", &b);
    if (b == 1)
    {
        printf("输入新的课程编号:");
        scanf("%d", &classList[j].number); //新的课程编号
    }
    else if (b == 2) {
        printf("输入新的课程名称:");
        scanf("%s", classList[j].name);
    }//新的课程名称
    else if (b == 3) {
        printf("输入新的课程性质(选修/必修):");
        scanf("%s", classList[j].nature);
    } //新的课程性质
    else if (b == 4) {
        printf("输入新的总学时:");
        scanf("%d", &classList[j].totalTime);
    }//新的总学时
    else if (b == 5) {
        printf("输入新的授课学时:");
        scanf("%d", &classList[j].time1);
    }//新的授课学时
    else if (b == 6) {
        printf("输入新的实验/上机学时:");
        scanf("%d", &classList[j].time2);
    } //新的实验/上机学时
    else if (b == 7) {
        printf("输入新的学分:");
        scanf("%f", &classList[j].credit);
    } //新的学分
    else if (b == 8) {
        printf("输入新的开课学期:");
        scanf("%s", classList[j].term);
    }//新的开课学期
    classList[j].t = 0;             //t依然为0,即未被学生选择
    printf("修改成功!\n");
    back(); //返回总菜单
    return 0;
}

//选修课程选择
int choose()
{
    int j, n = 0, a;
    printf("\n2.选修课程显示\n");
    output(0, i); //控制output中for循环次数使全部课程显示
    printf("请输入要选择的课程编号:");
    scanf("%d", &n);
    for (j = 0; j < i; j++)
    {
        if (n == classList[j].number)
        {
            if (classList[j].t == 1) //如果t=1说明该课程已经选择
                printf("课程已选");
            else
            {
                classList[j].t = 1; //用t=1等于表示学生已选
                printf("课程%d选择成功\n", n);
                break;
            }
        }
    }
    back(); //返回总菜单
    return 0;
}

//学生课程信息查看
int information()
{
    int j;
    printf("\n4.学生课程信息\n");
    printf("-->已选课程<--\n");
    for (j = 0; j < i; j++)
    {
        if (classList[j].t == 1) //判断结构体中t是否为1
            output(j, j + 1);     //控制输出函数只输出class[j]的信息
    }
    printf("显示成功!\n");
    back(); //返回总菜单
    return 0;
}

//返回总菜单
int back()
{
    int a = 0;
    printf("\n");
    printf("返回总菜单(请输入1):");
    scanf("%d", &a);
    if (a == 1)
        allChoose(); //返回总菜单
    else
    {
        printf("错误输入,请重新输入:");
    }
    return 0;
}

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值