资源说明:#include
#include
#include
#define MAX 100 //最多学生人数
struct Stu1 //学生信息
{ char no[10];
char name[20];
char sex[5];
int age;
char classroom[20];
};
struct date //日期
{
int year;
int month;
int day;
};
struct Stu2 //考勤
{
int late[MAX]; //迟到次数
int early[MAX]; //早退次数
int absence[MAX]; //旷课节数
struct date dat;
};
typedef struct Stu3 //统计
{
int late[MAX];
int early[MAX];
int absence[MAX];
}statistic;
void input_stud() //学生信息初始化
{
FILE *fp;
struct Stu1 stu;
int i,n;
printf("\n学生人数(<=100): ");
scanf("%d",&n);
if((fp=fopen("student1.dat","wb+"))==NULL)
{
printf("\t>>不能建立student1.dat文件\n");
exit(0);
}
printf("\n******************************************************************************\n");
printf("学号 \t姓名\t性别\t年龄\t班级\n");
for(i=0;i>不能建立student1.bin文件\n");
exit(0);
}
fseek(fp,0,2);
n=ftell(fp)/sizeof(struct Stu1);
printf("\n******************************************************************************\n");
printf(" 输入信息: 学号 \t姓名\t性别\t年龄\t班级\n");
printf(" 学生信息: ");
scanf("%s%s%s%d%s",stun.no,stun.name,stun.sex,&stun.age,stun.classroom);
printf("1,确定 2,取消\n");
printf("请选择: ");
scanf("%d",&t);
switch(t)
{
case 1:rewind(fp);
i=0;
while(i>学号重复\n");
else
{
fseek(fp,0,2);
fwrite(&stun,sizeof(struct Stu1),1,fp);
}break;
case 2:break;
}
printf("******************************************************************************\n");
fclose(fp);
}
void update_stud() //按学号修改学生信息
{
FILE *fp;
struct Stu1 stu;
int i,n,t;
char no[10];
if((fp=fopen("student1.dat","rb+"))==NULL)
{
printf("\t>>不能打开student1.dat文件\n");
exit(1);
}
fseek(fp,0,2);
n=ftell(fp)/sizeof(struct Stu1);
printf("\n******************************************************************************\n");
printf("要修改的学号: ");
scanf("%s",no);
i=0;
rewind(fp);
while(i>无该学号的学生\n");
printf("******************************************************************************\n");
fclose(fp);
}
void create_attend(int t) //考勤记录
{
FILE *fp1,*fp2;
int i,n,p;
struct Stu1 stu;
struct Stu2 attend;
switch(t)
{
case 2:if((fp1=fopen("student2.dat","ab+"))==NULL)
{
printf("\t>>不能打开student2.dat文件\n");
exit(0);
}
break;
case 1:if((fp1=fopen("student2.dat","wb+"))==NULL)
{
printf("\t>>不能建立student2.dat文件\n");
exit(0);
}
}
fseek(fp1,0,2);
if((fp2=fopen("student1.dat","rb+"))==NULL)
{
printf("\t>>不能打开student1.dat文件\n");
exit(2);
}
fseek(fp2,0,2);
n=ftell(fp2)/sizeof(struct Stu1);
printf("\n年.月.日: ");
scanf("%d%d%d",&attend.dat.year,&attend.dat.month,&attend.dat.day);
printf("\n******************************************************************************\n");
printf("学号 \t姓名\t迟到\t早退\t旷课\n");
rewind(fp2);
for(i=0;i>不能打开student1.dat文件\n");
exit(3);
}
fseek(fp1,0,2);
n=ftell(fp1)/sizeof(struct Stu1);
rewind(fp1);
if((fp2=fopen("student2.dat","rb+"))==NULL)
{
printf("\t>>不能打开student2.dat文件\n");
exit(4);
}
fseek(fp2,0,2);
m=ftell(fp2)/sizeof(struct Stu2);
if(m>0)
rewind(fp2);
printf("\n学号: ");
scanf("%s",s);
for(i=0;i>不能打开student1.dat文件\n");
exit(5);
}
fseek(fp1,0,2);
n=ftell(fp1)/sizeof(struct Stu1);
rewind(fp1);
if((fp2=fopen("student2.dat","rb+"))==NULL)
{
printf("\t>>不能打开student2.dat文件\n");
exit(6);
}
fseek(fp2,0,2);
x=ftell(fp2)/sizeof(struct Stu2);
if(x>0)
rewind(fp2);
printf("\n日期: ");
scanf("%d%d%d",&y,&m,&d);
while(x)
{
fread(&attend,sizeof(struct Stu2),1,fp2);
if(y==attend.dat.year && m==attend.dat.month && d==attend.dat.day) break;
x--;
}
if(x==0)
printf("对不起,该日期不存在,谢谢!\n");
else
{
printf("\n******************************************************************************\n");
printf("学号 \t姓名\t性别\t年龄\t班级\t迟到\t早退\t旷课\t扣学分\n");
rewind(fp2);
for(i=0;i>不能打开student1.dat文件\n");
exit(5);
}
fseek(fp,0,2);
n=ftell(fp)/sizeof(struct Stu1);
rewind(fp);
printf("\n******************************************************************************\n");
printf("学号 \t姓名\t性别\t年龄\t班级\n");
for(i=0;i>不能打开student1.dat文件\n");
exit(7);
}
fseek(fp1,0,2);
n=ftell(fp1)/sizeof(struct Stu1);
rewind(fp1);
if((fp2=fopen("student2.dat","rb+"))==NULL)
{
printf("\t>>不能打开student2.dat文件\n");
exit(8);
}
fseek(fp2,0,2);
x=ftell(fp2)/sizeof(struct Stu2);
if(x>0)
rewind(fp2);
printf("请选择: ");
while(scanf("%d",&t)==1)
{
if(t==0) break;
p=x;
printf("\n学号、日期: ");
scanf("%s%d%d%d",s,&y,&m,&d);
rewind(fp1);
rewind(fp2);
for(i=0;i>不能打开student1.dat文件\n");
exit(9);
}
fseek(fp1,0,2);
n=ftell(fp1)/sizeof(struct Stu1);
rewind(fp1);
if((fp2=fopen("student2.dat","rb+"))==NULL)
{
printf("\t>>不能打开student2.dat文件\n");
exit(10);
}
fseek(fp2,0,2);
x=ftell(fp2)/sizeof(struct Stu2);
if(x>0)
rewind(fp2);
for(i=0;i>不能打开student1.dat文件\n");
exit(11);
}
fseek(fp1,0,2);
n=ftell(fp1)/sizeof(struct Stu1);
rewind(fp1);
if((fp2=fopen("student2.dat","rb+"))==NULL)
{
printf("\t>>不能打开student2.dat文件\n");
exit(12);
}
fseek(fp2,0,2);
x=ftell(fp2)/sizeof(struct Stu2);
if(x>0)
rewind(fp2);
printf("\n删除学号: ");
scanf("%s",no);
printf("1,确定 2,取消\n");
printf("请选择: ");
scanf("%d",&p);
switch(p)
{
case 1:if(n>0 && x>0)
{
for(i=0;i>不能打开student1.dat文件\n");
exit(13);
}
fclose(fp1);
case 1:if((fp2=fopen("student2.dat","wb"))==NULL)
{
printf("\t>>不能打开student2.dat文件\n");
exit(13);
}
}
printf("\t>>记录已删\n");
printf("\n1,仅删除考勤记录 2,全部删除 0,返回\n");
printf("请选择: ");
}
case 2:break;
}
printf("******************************************************************************\n");
fclose(fp2);
}
void main()
{
int t,p1,p2;
system("color 3e");
printf("\n 欢迎使用\n");
printf("\n 考勤管理程序\n");
printf("\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n\n");
printf("1,初始化(学生信息和考勤初始化) 2,添加(添加学生和考勤记录)\n\n");
printf("3,按学号显示考勤记录 4,按日期显示考勤记录\n\n");
printf("5,查找(修改和显示) 6,显示学生信息(含修改)\n\n");
printf("7,统计(单个显示和全显示) 8,删除\n\n");
printf("9,全删 0,返回\n\n");
printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n\n");
printf("请选择: ");
while(scanf("%d",&t)==1)
{
if(t==0)
{
system("cls");
printf("\n\n\n\n\n\n\n\n\n 再见!\n\n\n\n");
printf("\n\n\n\n\n\n\n 设计者: 邱河成\n");
printf("\n 班级: 计算111班 \n\n\n\n");
break;
}
switch(t)
{
case 1:system("cls");
printf("\n1,学生信息初始化 2,考勤初始化 0,返回\n");
printf("请选择: ");
while(scanf("%d",&p1)==1)
{
if(p1==0) break;
switch(p1)
{
case 1:system("cls");input_stud();break;
case 2:system("cls");create_attend(t);break;
}
system("cls");
printf("\n1,学生信息初始化 2,考勤初始化 0,返回\n");
printf("请选择: ");
}
break;
case 2:system("cls");
printf("\n1,添加学生 2,添加考勤记录 0,返回\n");
printf("请选择: ");
while(scanf("%d",&p2)==1)
{
if(p2==0) break;
switch(p2)
{
case 1:system("cls");add_stud();break;
case 2:system("cls");create_attend(t);break;
}
system("cls");
printf("\n1,添加学生 2,添加考勤记录 0,返回\n");
printf("请选择: ");
}
break;
case 3:system("cls");get_attend();system("pause");break;
case 4:system("cls");disp_attend();system("pause");break;
case 5:system("cls");find_attend();system("pause");break;
case 6:system("cls");disp_stud();system("pause");break;
case 7:system("cls");total_attend();system("pause");break;
case 8:system("cls");del_stud();system("pause");break;
case 9:system("cls");dela_stud();system("pause");break;
}
system("cls");
printf("\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n\n");
printf("1,初始化(学生信息和考勤初始化) 2,添加(添加学生和考勤记录)\n\n");
printf("3,按学号显示 4,按日期显示\n\n");
printf("5,查找(修改和显示) 6,显示学生信息(含修改)\n\n");;
printf("7,统计(单个显示和全显示) 8,删除\n\n");
printf("9,全删 0,返回\n\n");
printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n\n");
printf("请选择: ");
}
}
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。