C语言-学生管理系统(结构体+数组实现)

news2024/9/24 17:58:50

1. 学生管理系统功能介绍

前面文章里介绍了结构体类型,知道结构体类型里可以存放不同的数据类型,属于一个有序的集合。

这篇文章就使用结构体知识点完成一个小练习,使用结构体+数组设计一个简单的学生管理系统,作为结构体知识点的巩固练习。

功能如下:

(1). 欢迎界面提示

(2). 输入密码登录

(3). 功能: 录入学生信息、按照学号排序、按照成绩排序、输出所有学生信息、输出指定学生信息(学号、姓名、成绩)、计算成绩平均值值输出打印、删除指定学生信息、增加新的学生信息。

(4). 功能模块采用菜单方式选择
在这里插入图片描述

2. 框架设计

#include <stdio.h>
#include <stdlib.h>void  Display_info(void);char buff_user[50];
char buff_password[50];
int main()
{
    int a,i;
    printf("------欢迎使用xxxx学生管理系统------\n");for(i=1;i<=3;i++)
    {
        printf("请输入用户名:");
        scanf("%s",buff_user);
        printf("请输入密码:");
        system("stty -echo"); //系统函数---调用系统的命令 关闭回显
        scanf("%s",buff_password);
        printf("\n");
        system("stty echo"); //系统函数---调用系统的命令 开回显
        //比较密码是否正确
        if(strcmp(buff_user,"wbyq")!=0 || strcmp(buff_password,"123456")!=0)
        {
            printf("密码或者用户错误.请重新输入,剩余次数:%d\n",3-i);
        }
        else break;
    }
    
    //比较密码是否正确
    if(strcmp(buff_user,"wbyq")!=0 || strcmp(buff_password,"123456")!=0)
    {
        printf("系统安全退出.\n");
        return 0;  //exit();  //终止进程
    }/*
#include <stdlib.h>
void exit(int status);   比如: exit(0);
*/
    while(1)
    {
        Display_info();
        scanf("%d",&a);
        switch (a)
        {
        case 1:
            printf("选择录取学生信息\n");
            break;
        case 2:
            printf("输出学生信息\n");
            break;
         //............
        default:
            break;
        }
    }
    return 0;
}//显示提示信息
void  Display_info(void)
{
    printf("------欢迎使用xxxx学生管理系统------\n");
    printf("1. 录取学生信息\n");
    printf("2. 输出学生信息\n");
    printf("3. 打印成绩平均值\n");
    printf("4. 增加学生信息\n");
    printf("5. 按照成绩排序输出学生信息.\n");
    printf("6. 删除指定学生信息\n");
    printf("请选择功能:\n");
}

3. 完整代码

#include <stdio.h>
#include <stdlib.h>struct STU
{
    char name[100]; //姓名
    int age; //年龄
    char number[100]; //学号
    float grade;//成绩
};//全局变量定义区域
char buff_user[50];
char buff_password[50];
struct STU stu_info[100];
int stu_cnt=0;  //存放学生总人数//函数声明区域
void  Display_info(void);
int SystemLogin(void);
void add_info(struct STU *stu,int flag);
void grade_sort(struct STU *stu);
void del_info(struct STU *stu);
void print_info(struct STU *stu);int main()
{
    int number;
    //1. 登录系统
    if(SystemLogin())
    {
        printf("系统安全退出.\n");
        exit(0);
    }//2.执行功能模块 
    while(1)
    {
        Display_info();
        scanf("%d",&number);
        switch (number)
        {
        case 1: //录入学生信息
            add_info(stu_info,1);
            break;
        case 2: //输出学生信息
            print_info(stu_info);
            break;
        case 3: //打印成绩平均值
            break;
        case 4: //增加学生信息
            add_info(stu_info,0);
            break;
        case 5: //按照成绩排序输出学生信息
            grade_sort(stu_info);
            break;
        case 6: //删除指定学生信息
            del_info(stu_info);
            break;
        case 7: //退出系统
            printf("-----系统安全退出------\n");
            exit(0); //退出当前进程
        default:
            break;
        }
    }
    return 0;
}//显示提示信息
void  Display_info(void)
{
    printf("\n\n");
    printf("------欢迎使用xxxx学生管理系统------\n");
    printf("1. 录入学生信息(按照要求录入信息)\n");
    printf("2. 输出学生信息\n");
    printf("3. 打印成绩平均值\n");
    printf("4. 增加学生信息\n");
    printf("5. 按照成绩排序输出学生信息.\n");
    printf("6. 删除指定学生信息\n");
    printf("7. 退出系统\n");
    printf("请选择功能:");
}/*
函数功能: 系统登录
返回值:  0表示成功 1表示失败 
*/
int SystemLogin(void)
{
    printf("------欢迎使用xxxx学生管理系统------\n");
    int i;
    for(i=1;i<=3;i++)
    {
        printf("请输入用户名:");
        scanf("%s",buff_user);
        printf("请输入密码:");
        system("stty -echo"); //系统函数---调用系统的命令 关闭回显
        scanf("%s",buff_password);
        printf("\n");
        system("stty echo"); //系统函数---调用系统的命令 开回显
        //比较密码是否正确
        if(strcmp(buff_user,"wbyq")!=0 || strcmp(buff_password,"123456")!=0)
        {
            printf("密码或者用户错误.请重新输入,剩余次数:%d\n",3-i);
        }
        else break;
    }
    //比较密码是否正确 
    if(strcmp(buff_user,"wbyq")!=0 || strcmp(buff_password,"123456")!=0)
    {
        return 1; 
    }
    return 0;
}/*
函数功能: 录入学生信息
int flag :1表示连续增加学生信息  0表示增加单个学生信息
*/
void add_info(struct STU *stu,int flag)
{
    int i;
    int tmp;
    int addr=stu_cnt; //学生总人数
    if(flag)
    {
        for(i=addr;i<sizeof(stu_info)/sizeof(stu_info[0]);i++)
        {
            printf("请输入学生姓名:");
            scanf("%s",stu[i].name);
            printf("请输入学生年龄:");
            scanf("%d",&stu[i].age);
            printf("请输入学号:");
            scanf("%s",stu[i].number);
            printf("请输入成绩:");
            scanf("%f",&stu[i].grade);
            
            stu_cnt++;  //记录总人数
            printf("是否继续录入?  0表示继续  1表示退出");
            scanf("%d",&tmp);
            printf("\n\n");
            if(tmp)break;
        }
    }
    else
    {
        printf("请输入学生姓名:");
        scanf("%s",stu[addr].name);
        printf("请输入学生年龄:");
        scanf("%d",&stu[addr].age);
        printf("请输入学号:");
        scanf("%s",stu[addr].number);
        printf("请输入成绩:");
        scanf("%f",&stu[addr].grade);
        stu_cnt++;  //记录总人数
    }
}//输出学生信息
void print_info(struct STU *stu)
{
    int i;
    printf("--------------------------------------------------\n");
    for(i=0;i<stu_cnt;i++)
    {
        printf("学生姓名:%s\n",stu[i].name);
        printf("学生年龄:%d\n",stu[i].age);
        printf("学号:%s\n",stu[i].number);
        printf("成绩:%f\n",stu[i].grade);
        printf("\n");
    }
    printf("--------------------------------------------------\n");
}//按照成绩排序输出学生信息
void grade_sort(struct STU *stu)
{
    int i,j;
    struct STU tmp;
    for(i=0;i<stu_cnt-1;i++)
    {
        for(j=0;j<stu_cnt-1-i;j++)
        {
            if(stu[j].grade<stu[j+1].grade)
            {
                tmp=stu[j];
                stu[j]=stu[j+1];
                stu[j+1]=tmp;
            }
        }
    }
}//1234567890
//删除指定学生信息
void del_info(struct STU *stu)
{
    char number[100];
    int i,j;
    printf("请输入要删除学生的学号:");
    scanf("%s",number);
    printf("--------------------------------------------------\n");
    for(i=0;i<stu_cnt;i++)
    {
        if(strcmp(stu[i].number,number)==0)
        {
            printf("成功删除以下学生信息:");
            printf("学生姓名:%s\n",stu[i].name);
            printf("学生年龄:%d\n",stu[i].age);
            printf("学号:%s\n",stu[i].number);
            printf("成绩:%f\n",stu[i].grade);
            for(j=i;j<stu_cnt-1;j++)
            {
                stu[j]=stu[j+1];
            }
            stu_cnt--; //减去总数量
            break;
        }
    }
    if(i==stu_cnt+1)
    {
        printf("没有找到该学号.\n");
    }
    printf("--------------------------------------------------\n");
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1014089.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apache Kafka 基于 S3 的数据导出、导入、备份、还原、迁移方案

在系统升级或迁移时&#xff0c;用户常常需要将一个 Kafka 集群中的数据导出&#xff08;备份&#xff09;&#xff0c;然后在新集群或另一个集群中再将数据导入&#xff08;还原&#xff09;。通常&#xff0c;Kafka集群间的数据复制和同步多采用 Kafka MirrorMaker&#xff0…

《向量数据库指南》——Milvus Cloud 版本迭代的依据的是用户的反馈和对市场趋势的判断

我认为需要将其分成两类情况。首先&#xff0c;从产品角度来看&#xff0c;我们必须聆听用户的声音。了解用户的需求、他们对产品的哪些方面感到不便&#xff0c;这是至关重要的。我们始终需要紧跟用户的反馈&#xff0c;因为用户的需求对产品的发展具有重要影响。 当然&#x…

python科研作图

1、气泡图 气泡图是一种在xy轴上显示三个维度的数据的有效方式。在气泡图中&#xff0c;基本上&#xff0c;每个气泡代表一个数据点。横坐标和纵坐标的位置代表两个维度&#xff0c;气泡的大小则代表第三个维度。 在这个例子中&#xff0c;我们用numpy库生成了一些随机数据&a…

亚马逊关于在澳大利亚销售儿童玩具和游戏的政策合规标准是什么?

亚马逊关于在澳大利亚销售儿童玩具和游戏的政策 在亚马逊澳大利亚商城中&#xff0c;设计用于或明确表示专供 14 岁及以下儿童玩耍用的所有商品或材料均视为儿童玩具。 商品根据以下标准确定为“儿童商品”&#xff1a; 预期用途&#xff1a; ASIN 是否可供儿童使用&#xff…

GPT的使用场景及开发方法

GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一系列以Transformer架构为基础的自然语言处理&#xff08;NLP&#xff09;模型&#xff0c;其中最知名的是GPT-3。它们可以用于多种自然语言处理任务和文本生成任务。以下是GPT的一些使用场景和开发调用方法&…

迅为iTOP-iMX6QPLUS-Android6.0下uboot添加网卡驱动

本文档介绍在 iTOP-iMX6Q 和 iTOP-iMX6Q-PLUS 安卓 6.0 的 uboot 上添加网卡驱 动&#xff0c;添加完网卡驱动以后&#xff0c;uboot 就可以正常使用网络了。 1 具体步骤 1.1 修改 mx6sabre_common.h 文件 在 iTOP-iMX6_android6.0.1 源码目录下输入以下命令&#xff0c;打…

基于matlab实现的平面波展开法二维声子晶体能带计算程序

Matlab 平面波展开法计算二维声子晶体二维声子晶体带结构计算&#xff0c;材料是铅柱在橡胶基体中周期排列&#xff0c;格子为正方形。采用PWE方法计算 完整程序: %%%%%%%%%%%%%%%%%%%%%%%%% clear;clc;tic;epssys1.0e-6; %设定一个最小量&#xff0c;避免系统截断误差或除零错…

数据预处理-分箱(Binning)和 WOE编码

数据预处理-分箱&#xff08;Binning&#xff09;和 WOE编码 1. 分箱 1.1 理论 1.1.1 定义 分箱就是将连续的特征离散化&#xff0c;以某种方式将特征值映射到几个箱(bin)中。 1.1.2 为什么要进行分箱&#xff1f; 引入非线性变换&#xff0c;增强模型性能。因为原始值和目…

基于springboot实现“闲一品”交易平台电商系统项目【项目源码+论文说明】分享

基于springboot实现“闲一品”交易平台电商系统项目 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;闲一品交易平台当然也不能排除在外。闲一品交易平台是以实际运用为开…

Light Image v6.1.8.0批量调整图片大小

Light Image Resizer&#xff0c;批量调整图片大小工具&#xff0c;图片批量添加水印&#xff0c; 批量转换图像格式、调整图片大小、缩放裁剪&#xff0c;图片格式转换、 重命名&#xff0c;排序&#xff1b;添加效果&#xff0c;旋转&#xff0c;自定义元数据&#xff0c;优…

安装深度(Deepin)系统

Deepin系统安装 Deepin是和Ubuntu一样&#xff0c;是一个基于Debian的Linux的发型版本。 Deepin相对于Ubuntu&#xff0c;Deepin更适合中国用户的使用习惯。 一 官网工具制作启动盘 制作启动盘、和安装系统&#xff0c;操作非常简单&#xff0c;nice&#xff01; 官网提供了…

【数据结构】串的模式匹配:简单的模式匹配算法,KMP算法

欢~迎~光~临~^_^ 目录 知识树 1、什么是串的模式匹配 2、简单的模式匹配算法 3、KMP算法 3.1 算法原理 3.2 C语言实现KMP算法 3.3 求next数组 3.4 KMP算法优化&#xff08;对next数组的优化&#xff09; 知识树 1、什么是串的模式匹配 串的模式匹配是在一个字符串中…

NSA SELinux将在Linux 6.6中去品牌化为SELinux

导读安全增强型 Linux (Security-Enhanced Linux&#xff0c;SELinux) 是一个 Linux 内核模块&#xff0c;也是 Linux 的一个安全子系统&#xff1b;提供了一个实施访问控制安全策略的安全模块&#xff0c;现在已被广泛用于增强生产型 Linux 服务器和其他系统的安全性。 安全增…

ChatGPT 或其它 AI,能用在文书创作上吗?

新的申请季已经正式开始&#xff0c;一些热门项目的ED截止日期也不再遥远&#xff0c;因此很多准留学生们都已经开始了关于文书的创作。 而随着科技的不断发展&#xff0c;以ChatGPT为首的一众AI工具也作为一种辅助手段愈发融入了我们的生活。 那么不免就会有一些同学在准备申…

基于springboot实现“闲一品”交易平台电商系统项目【项目源码+论文说明】

基于springboot实现“闲一品”交易平台电商系统项目 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;闲一品交易平台当然也不能排除在外。闲一品交易平台是以实际运用为开…

redis的基础底层篇 zset的详解

一 zset的作用以及结构 1.1 zset作用 redis的zset是一个有序的集合&#xff0c;和普通集合set非常相似&#xff0c;是一个没有重复元素的字符串集合。常用作排行榜等功能&#xff0c;以用户 id 为 value&#xff0c;关注时间或者分数作为 score 进行排序。 1.2 zset的底层结…

【计算机网络】Tcp详解

文章目录 前言Tcp协议段格式TCP的可靠性面向字节流应答机制超时重传流量控制滑动窗口&#xff08;重要&#xff09;拥塞控制延迟应答捎带应答标志位具体标志位三次握手四次挥手粘包问题TCP异常情况listen的第二个参数 前言 前面我们学习了传输层协议Udp&#xff0c;今天我们一…

春秋云镜 CVE-2013-2134

春秋云镜 CVE-2013-2134 S2-015 靶标介绍 2.3.14.3 之前的 Apache Struts 2 允许远程攻击者通过标记在通配符匹配期间未正确处理的所提出的操作名称的请求执行任何 OGNL 代码&#xff0c;这是与 CVE-2013-2135 不同的漏洞。 启动场景 漏洞利用 工具利用 得到flag flag{b92…

.360勒索病毒和.halo勒索病毒数据恢复|金蝶、用友、ERP等数据恢复

导言&#xff1a; 随着数字化时代的持续发展&#xff0c;网络安全威胁也变得前所未有地复杂和难以应对。在这个充满挑战的网络环境中&#xff0c;勒索病毒已经成为了一种极为危险和破坏性的威胁。最近引起广泛关注的是.360勒索病毒&#xff0c;一种可怕的恶意软件&#xff0c;…

基于深度学习的加密恶意流量检测

加密恶意流量检测 研究目标定位数据收集数据处理基于特征分类算法的数据预处理基于源数据分类算法的数据预处理 特征提取模型选择基于数据特征的深度学习检测算法基于特征自学习的深度学习检测算法 训练和评估精确性指标实时性指标 应用检验改进 摘录自&#xff1a;Mingfang ZH…