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++深入探索类和对象之封装及class与struct的区别
C++ 类与对象涉及的知识点非常广泛,所以我准备写成几个特定的部分来作为博文分享,这次的blog将详细讲解类的属性、行为、访问权限,class与struct的区别以及具体案例,希望能够对你们有帮助,解决入门小白或者对这方面了解不多的朋友们,那么接下来开始今天的内容2022-05-05
最新评论