【C语言】用C语言制作简单的“学生管理系统”,涉及循环、结构体和数组等。

【C语言】用C语言制作简单的“学生管理系统”,涉及循环、结构体和数组等。,第1张

CSDN话题挑战赛第2期
参赛话题:学习笔记

学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢?
 

导言

学生菜单系统是基于前阶段的C语言学习,从实际出发,巩固C语言基础的练习,通过多种函数的不同运用,检验知识点的牢固可靠性。

系统设计概述

整个学生系统将会被分成几个内容,将大任务分为多个小任务,并将其合理连接起来,独立而又有联系,对逻辑能力有一定要求(没错,我是木头)


设计多个模块 
  1. 开发团队信息(即首页,目前来说是次要,直接运用printf即可)
  2. 模拟系统密码登录(通过循环对不同密码情况进行判定,从而使系统做出不同反应,一般包含①密码正确,进入系统②密码错误,退出系统,这两种情况)根据平时实际情况,多次输入密码错误,也可以添加这一项内容,实现更完整的功能还原
  3. 学生信息录入版块(运用结构体和数组,对学生多项信息进行输入,可包括姓名,学号,性别,年龄,成绩等。由于是模拟班级或者学校系统,所以会模拟多个学生信息录入的过程,此过程可运用循环实现)
  4. 计算分数版块(使用简单的运算法则即可完成,此处还可细分两种,一种是计算成绩总分,另一种是计算平均分)
  5. 信息修改版块(通过学生学号查找,进行修改、添加或删除等 *** 作)
  6. 成绩排序版块(运用冒泡法,对学生一一对比,按学生总分进行排序输出)
  7. 系统退出

详细代码 *** 作

所涉及的头函数:

#include
#include
#include
#include

自定义函数:

showAuthor();      团队信息
checkLogin();    密码检测
MainMenu();    主菜单
input();        信息录入
add();        添加信息
Delete();        删除信息
countScore();        等级评定
oderbyScore()          成绩排序

结构体定义:

使用结构体将所需学生信息罗列出来,定义一个数组,保存各项内容本文内容的系统包括的信息如下:学号,姓名,年龄,性别,手机号码,数学、英语、体育和语文的成绩,总分和平均分。(此处成绩不分为两个函数了,直接进行计算)

struct student        //结构体
{
    
    char sno[10];            //学号
    char sname[10];          //姓名
    int sage;                //年龄
    char ssex[10];           //性别
    char stel[20];           //手机号码
    float Math;              //数学成绩
    float C;                 //语文成绩
    float English;           //英语成绩
    float Sport;             //体育
    float Score;             //总成绩
    float Aver;              //平均分
};
struct student p[100];    //数组
详细设计

首先,进入系统显示的团队信息printf即可,无需过于复杂

模板如下

void showAuthor()   //  显示团队信息
{
    printf("========= ===**小九出品   $   必属良品**==============\n");
    printf("\n");
    printf("=============技术不精**被逼无奈**实属下策=============\n");
    printf("\n");
    printf(" *   *   *   开发团队信息    *   *   *   *\n");
    printf("\n");
    printf("====================**盗版必究**======================\n");
    printf("\n");
}

其次呢,我们进入系统肯定得设置一串密码吧,由于学艺不精,这密码暂时只设置包含数字的吧,初始密码123456,暂且用 int 混过去。接着回想登录过程,有正误之分,那必然少不了else-if的参与,通过判定密码值,来确定循环条件中的0和1

而后,可设定一个计数器 cnt,用while循环实现当cnt=n次时,系统锁定自动退出

注:在这几项过程中,很明显若是单纯的一个画面,那必然导致文字繁多画面杂乱

我们就可以利用好system("cls");清屏特点,再适当时候,进行画面清楚

运用好这点,也可以配合Sleep(n);实现计时器的倒计时特点

void checkLogin()   //密码检测登录
{
    int PW = 123456;        //密码

    printf("请输入系统密码:");

    for(cnt=0;cnt!=3;)
    {
        scanf("%d",&password);
        if(password==PW)
        {
            n=1;
            printf("登录成功,3秒后自动进入系统\n");
            Sleep(1000);
            printf("登录成功,2秒后自动进入系统\n");
            Sleep(1000);
            printf("登录成功,1秒后自动进入系统\n");
            Sleep(1000);
            system("cls");
            break;
        }
        else
        {
            cnt++;
            while(cnt==3)
        {
            printf("系统锁定,无法输入密码,3秒后系统自动关闭\n");
            Sleep(2000);
            system("cls");
            printf("系统锁定,无法输入密码,2秒后系统自动关闭\n");
            Sleep(1200);
            system("cls");
            printf("系统锁定,无法输入密码,1秒后系统自动关闭\n");
            Sleep(1200);
            system("cls");
            exit(0);
        }
            printf("密码错误,再次输入密码:");
        }

    }
}

密码输入完成后,必然有主菜单,清屏d出主菜单界面,就可以用简单的循环来实现,同时编辑出上下左右的边框,美观!(全局变量中一定要定义好画布大小,否则该功能无法实现)

void MainMenu()     //主菜单
{
    int i,j;
    printf("—————欢迎使用小九牌伪劣系统—————\n");
    printf("\n");
    printf("\n");
    for(i=6;i<=high;i++)
    {
        for(j=0;j<=width;j++)
        {
            if((i==6)||(i==high))
            {
                printf("#");        //上下边框
            }
            else if((i==7)&&(j==16))
            {
                printf("1.信息录入\t");
            }
            else if((i==9)&&(j==16))
            {
                printf("2.添加信息\t");
            }
            else if((i==11)&&(j==16))
            {
                printf("3.删除信息\t");     //待完善
            }
            else if((i==13)&&(j==16))
            {
                printf("4.等级评定\t");     //待完善
            }
            else if((i==15)&&(j==16))
            {
                printf("5.成绩修改\t");     //待完善
            }
            else if((i==17)&&(j==16))
            {
                printf("6.成绩排序\t");     //待完善
            }
            else if((i==19)&&(j==16))
            {
                printf("0.退出系统\t");     //待完善
            }
            else if((j==0)||(j==width))
            {
                printf("1");
            }
            else
            {
                printf(" ");
            }
        }
        printf("\n");
    }
}

效果如下:

 接着就是菜单的跳转功能,此处就要运用到一个与它必然相关的选择Switch-case

 运用不同的case n:,跳转到不同的函数,进行相应的 *** 作。格式重复,十分简单。

while(1)
    {
        printf("请输入你的选择(0-6)");
        scanf("%d",&num_choose);
    switch(num_choose)
    {
        case 1:
        input();
        system("cls");
        break;

        case 2:
        add();
        system("cls");
        break;

        case 3:
        Delete();
        system("cls");
        break;

        case 4:
        countScore();
        system("cls");
        break;

        case 5:
        oderbyScore();
        system("cls");
        break;

        case 6:
        modifyScore();
        system("cls");
        break;

        case 0:
        system("cls");
        break;

        default:printf("结束\a");system("cls");
    }
    }

后面就以一个自定义函数为例,运用结构体和数组,实现学生信息的录入

这里的第一步,自然是判断学生的人数,根据实际判断条件,给while的 *** 作与否提供数值,当学生人数超出范围,那自然要重新输入。

再运用i定义出不同的p[i],给不同学号i的学生留出空间

void input()   //信息录入
{
    int i,j,k=1;

    printf("请输入学生人数(0-100):");
    scanf("%d",&j);
    while((j<0)||(j>100))
    {
        printf("请重新输入学生人数(0-100):");
        scanf("%d",&j);
    }
    n=j;
    for(i=0;i

有输入就有修改选项,接下来就是删除信息板块

详细看代码,就不过多赘述了。 

void Delete()       //删除信息
{
    int i,j,k,n=100;
	printf("请输入要删除的学生的学号:");
	scanf("%d",&k);
	for(i=0;i100))
    {
		printf("学号不存在!请输入正确的学号:\n");
    }
    else
	{
	    for(j=i;j

 


代码展示 

目前只实现了这几个板块,后续还将继续补充其他板块,使这个系统更完整,残缺的代码就展示出来吧,仅供参考,我会继续努力,进一步完善。

#include
#include
#include
#include

void HideCursor()
{
    CONSOLE_CURSOR_INFO cursor_info={1,0};  //0表示隐藏光标
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}

int high = 20;
int width = 42;
int password;
int n;
int cnt = 0;
int choice;
int num_choose;


struct student
{
    
    char sno[10];
    char sname[10];
    int sage;
    char ssex[10];
    char stel[20];
    float Math;
    float C;
    float English;
    float Sport;
    float Score;
    float Aver;
};
struct student p[100];

void showAuthor()   //  显示团队信息
{
    printf("========= ===**小九出品   $   必属良品**==============\n");
    printf("\n");
    printf("=============技术不精**被逼无奈**实属下策=============\n");
    printf("\n");
    printf(" *   *   *   开发团队信息    *   *   *   *\n");
    printf("\n");
    printf("====================**盗版必究**======================\n");
    printf("\n");
}

void MainMenu()     //主菜单
{
    int i,j;
    printf("—————欢迎使用小九牌伪劣系统—————\n");
    printf("\n");
    printf("\n");
    for(i=6;i<=high;i++)
    {
        for(j=0;j<=width;j++)
        {
            if((i==6)||(i==high))
            {
                printf("#");        //上下边框
            }
            else if((i==7)&&(j==16))
            {
                printf("1.信息录入\t");
            }
            else if((i==9)&&(j==16))
            {
                printf("2.添加信息\t");
            }
            else if((i==11)&&(j==16))
            {
                printf("3.删除信息\t");     //待完善
            }
            else if((i==13)&&(j==16))
            {
                printf("4.等级评定\t");     //待完善
            }
            else if((i==15)&&(j==16))
            {
                printf("5.成绩修改\t");     //待完善
            }
            else if((i==17)&&(j==16))
            {
                printf("6.成绩排序\t");     //待完善
            }
            else if((i==19)&&(j==16))
            {
                printf("0.退出系统\t");     //待完善
            }
            else if((j==0)||(j==width))
            {
                printf("1");
            }
            else
            {
                printf(" ");
            }
        }
        printf("\n");
    }
}

void checkLogin()   //密码检测登录
{
    int PW = 123456;        //密码

    printf("请输入系统密码:");

    for(cnt=0;cnt!=3;)
    {
        scanf("%d",&password);
        if(password==PW)
        {
            n=1;
            printf("登录成功,3秒后自动进入系统\n");
            Sleep(1000);
            printf("登录成功,2秒后自动进入系统\n");
            Sleep(1000);
            printf("登录成功,1秒后自动进入系统\n");
            Sleep(1000);
            system("cls");
            break;
        }
        else
        {
            cnt++;
            while(cnt==3)
        {
            printf("系统锁定,无法输入密码,3秒后系统自动关闭\n");
            Sleep(2000);
            system("cls");
            printf("系统锁定,无法输入密码,2秒后系统自动关闭\n");
            Sleep(1200);
            system("cls");
            printf("系统锁定,无法输入密码,1秒后系统自动关闭\n");
            Sleep(1200);
            system("cls");
            exit(0);
        }
            printf("密码错误,再次输入密码:");
        }

    }
}

void input()   //信息录入
{
    int i,j,k=1;

    printf("请输入学生人数(0-100):");
    scanf("%d",&j);
    while((j<0)||(j>100))
    {
        printf("请重新输入学生人数(0-100):");
        scanf("%d",&j);
    }
    n=j;
    for(i=0;i100))
    {
		printf("学号不存在!请输入正确的学号:\n");
    }
    else
	{
	    for(j=i;j

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/2990658.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-23
下一篇 2022-09-23

发表评论

登录后才能评论

评论列表(0条)