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");
	}
	 
}
  • 5
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rds.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值