欢迎来到代码驿站!

C代码

当前位置:首页 > 软件编程 > C代码

C语言实现学生考勤系统

时间:2023-01-03 08:30:37|栏目: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语言详细分析宏定义的使用

栏    目:C代码

下一篇:没有了

本文标题:C语言实现学生考勤系统

本文地址:http://www.codeinn.net/misctech/222886.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有