C语言实现学生考勤系统

 更新时间:2022年03月16日 09:49:58   作者:rds.  
这篇文章主要为大家详细介绍了C语言实现学生考勤系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言实现学生考勤系统的具体代码,供大家参考,具体内容如下

项目要求:

学生考勤系统

功能:学生考勤系统应包含各班学生的全部信息。每个学生是一条记录,包括姓名、性别、学号、出勤情况等。本系统可模拟考勤过程,记录考勤结果,并能够在课程结束后按照设定的考勤评分标准自动给出每个学生的考勤分数。

分步实施:

(1)初步完成总体设计,搭好框架,确定人机对话界面,确定函数个数;
(2)最低要求:建立一个文件,包括同一个班的10个学生的必要信息,能对文件进 行补充、修订、删除。

采用结构体数组读入读出文件(二进制形式写进data.txt文件)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

const int N = 1010;
const int LEN = 20;
const int CLAstunumber = 10;//每个班CLAstunumber人 

typedef struct
{
    char attdate[LEN];//日期
    int atts;//出勤情况 0缺勤 1出勤  
}attdent;


typedef struct
{
    char stname[LEN];
    char sex[LEN];
    int stnumber;
    int core;
    attdent stattdent[N];//最多纪录N个日期的考勤情况    
}studentinf;
int cnt;//记录日期数组用到哪里 

studentinf students[CLAstunumber];

void menu()
{
    printf("========================================================\n");
    printf("0.学生信息录入\n");
    printf("1.开始考勤\n");
    printf("2.修改学生考勤纪录\n");
    printf("3.生成并查看学生考勤分数\n");
    printf("4.读取数据\n");
    printf("5.保存数据\n");
    printf("6.退出\n");
    printf("========================================================\n");
}

void studentinput()
{
    //录入操作 
    for(int i = 0 ; i < CLAstunumber; i ++)
    {
        printf("----------------------------------------\n");
        printf("请输入学生姓名:                       |\n");
        studentinf student1;
        scanf("%s",student1.stname);
        printf("请输入学生性别:                       |\n");
        scanf("%s",student1.sex);
        printf("请输入学生学号:                       |\n");
        scanf("%d",&student1.stnumber);
        student1.core = 0;
        //(student1.stattdent[N]).attdate[LEN] = '0';
        students[i] = student1;
        printf("----------------------------------------\n");
    }
}

void attcheck()
{
    //考勤操作 
    for(int i = 0;i < CLAstunumber ; i ++)
    {
        students[i];
        printf("------------------------------\n");
        printf("姓名:%s\n",students[i].stname);
        printf("性别:%s\n",students[i].sex);
        printf("学号:%d\n",students[i].stnumber);
        printf("请输入时间:XXXX/XX/XX\n");
        scanf("%s",(students[i].stattdent[cnt]).attdate);
        printf("请输入该学生出勤情况:(0表示缺勤,1表示出勤)\n");
        scanf("%d",&(students[i].stattdent[cnt]).atts);
        cnt ++;
        printf("------------------------------\n");
        
    }
}

void changeinf()
{
    //遍历修改
    char fname[LEN];
    char fdate[LEN];
    printf("----------------------------------\n");
    printf("请输入学生姓名:\n");
    scanf("%s",fname);
    int stand1;//退出第一层for标准 
    for(int i = 0;i < CLAstunumber; i ++) 
    {
        if(!strcmp(fname,students[i].stname))
        {
            printf("学生姓名:%s\n",students[i].stname);
            printf("请输入时间:(XXXX/XX/XX)\n");
            scanf("%s",fdate);
            for(int j = 0;j < cnt ; j ++)
            {
                if(!strcmp(fdate,(students[i].stattdent[j]).attdate))
                printf("学生:%s",fname);
                printf("考勤时间:%s\n",fdate);
                printf("出勤情况:%d\n",(students[i].stattdent[j]).atts);
                printf("请输入修改后的出勤情况:\n");
                scanf("%d",&(students[i].stattdent[j]).atts);
                printf("修改成功!\n");
                stand1 = 1;
                break;
            }
            if(stand1 == 1) break;
        }
    }
    printf("----------------------------------\n");
}

void checkcore()
{
    //生成考勤分数 = 出勤次数即分数 
    for(int i = 0;i < CLAstunumber; i++)
    {
        printf("----------------------------\n");
        printf("学生姓名:%s\n",students[i].stname);
        printf("学生性别:%s\n",students[i].sex);
        printf("学生学号:%d\n",students[i].stnumber);
        //计算分数
        students[i].core = 0;
        for(int j = 0;j < cnt ; j ++)
        {
            students[i].core += (students[i].stattdent[j]).atts;    
        } 
        printf("考勤分数:%d\n",students[i].core);    
        printf("----------------------------\n");
    }
    
}

void readdata()
{
    FILE *fp = NULL;
    fp = fopen("data.txt","rb");
    
    //读出 
    int i = 0;
    while(!feof(fp))
    {
        fread(&students[i],sizeof(studentinf),1,fp);
        i ++;
    }
    i --;
    
    cnt = i;
    
    fclose(fp);      
    printf("读取成功!\n");
}

void savedata()
{
    FILE *fp = NULL;
    fp = fopen("data.txt","wb");
    //写入
    for(int i = 0;i < CLAstunumber  ; i ++)
    {
        fwrite(&students[i],sizeof(studentinf),1,fp);
    }
    
    fclose(fp);  
    printf("保存成功!\n");    
}

int main()
{
    menu();
    int op;
    while(1)
    {
        scanf("%d",&op);
        if(op == 0)
        {
            system("cls");
            studentinput();
            menu();
        }
        else if(op == 1)
        {
            system("cls");
            attcheck();
            menu();
        } 
        else if(op == 2)
        {
            changeinf();
            menu();
        }
        else if(op == 3)
        {
            system("cls");
            checkcore();
            menu();
        }
        else if(op == 4)
        {
            system("cls");
            readdata();
            menu();
        }
        else if(op == 5)
        {
            system("cls");
            savedata();
            menu();
        }
        else if(op == 6)
        {
            break;
        }
        else printf("input error!\n");
    }
     
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 使用C++的ORM框架QxORM详解

    使用C++的ORM框架QxORM详解

    这篇文章主要介绍了使用C++的ORM框架QxORM的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 基于C语言实现迷宫游戏的示例代码

    基于C语言实现迷宫游戏的示例代码

    这篇文章主要介绍了基于C语言如何实现简单的迷宫游戏,对于学习游戏开发的朋友相信有一定的借鉴价值,需要的朋友可以参考下
    2022-05-05
  • 浅析c与c++中struct的区别

    浅析c与c++中struct的区别

    c与c++中struct的区别你是否了解,下面小编就详细的为大家介绍一下
    2013-07-07
  • C语言实现访问及查询MySQL数据库的方法

    C语言实现访问及查询MySQL数据库的方法

    这篇文章主要介绍了C语言实现访问及查询MySQL数据库的方法,涉及C语言基于libmysql.lib实现访问MySQL数据库的相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • 深入解析C++编程中线程池的使用

    深入解析C++编程中线程池的使用

    这篇文章主要介绍了深入解析C++编程中线程池的使用,包括线程池的封装实现等内容,需要的朋友可以参考下
    2015-11-11
  • C语言修炼之路灵根孕育源流出 初识C言大道生下篇

    C语言修炼之路灵根孕育源流出 初识C言大道生下篇

    C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言
    2022-03-03
  • C语言植物大战数据结构堆排序图文示例

    C语言植物大战数据结构堆排序图文示例

    这篇文章主要为大家介绍了C语言植物大战数据结构堆排序的图文示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • 关于C语言 文件读写 feof 函数

    关于C语言 文件读写 feof 函数

    这篇文章主要给大家分享的是关于C语言文件读写 feof 函数 ,feof 是 C 语言标准库函数,其功能是检测文件结束符,如果文件结束,则返回非 0 值,否则返回 0,感兴趣的小伙伴请跟小编一起来看看下面文章的内容吧
    2021-10-10
  • Qt6远程连接MySQL数据库的简单易上手版

    Qt6远程连接MySQL数据库的简单易上手版

    在Qt应用程序里,可实现远程MySQL服务器的连接操作,本文就来介绍一下Qt6远程连接MySQL数据库,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • C语言实现Flappy Bird小游戏

    C语言实现Flappy Bird小游戏

    这篇文章主要为大家详细介绍了C语言实现Flappy Bird小游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12

最新评论