#include<stdio.h>
#include<string.h>
int SIZE;
int CLASS;
struct student
{
char name[9];
char sex[4];
int number;
int count;
int score;
}stu[300];
void main()
{
void start();
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("######################################\n");
printf("# 学生考勤系统 #\n");
printf("# 欢 迎 您 #\n");
printf("######################################\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("######################################\n");
printf("\t请输入班级人数:\n");
printf("######################################\n");
scanf("%d",&SIZE);
printf("\n");
printf("######################################\n");
printf("\t请输入课程节数:\n");
printf("######################################\n");
scanf("%d",&CLASS);
printf("\n");
printf("\n");
printf("\n");
printf("\n");
start();
}
void start()
{
char x;
void found();
void search();
void add();
void mark();
printf("######################################\n");
printf("# 请选择所需功能,输入对应数字: #\n");
printf("# 1.建立学生列表 #\n");
printf("# 2.查找学生信息 #\n");
printf("# 3.模拟考勤过程 #\n");
printf("# 4.计算考勤分数 #\n");
printf("# 5.退出 #\n");
printf("# #\n");
printf("######################################\n");
scanf("%s",&x);
switch(x)
{
case'1':found();break;
case'2':search();break;
case'3':add();break;
case'4':mark();break;
case'5':break;
default :printf("****输入有误,请重输 :\n");start();
}
}
void found()
{
int a;
printf("####################\n");
printf(" 开始建表。\n");
printf("####################\n");
FILE *fp;
for(a=0;a<SIZE;a++)
{
printf("请输入第%d个学生的个人信息:\n",a+1);
printf("姓名:");
scanf("%s",stu[a].name);
printf("性别:");
scanf("%s",stu[a].sex);
printf("学号:");
scanf("%d",&stu[a].number);
stu[a].count=0;
stu[a].score=0;
}
fp=fopen("stud","w");
for(a=0;a<SIZE;a++)
{
if(fwrite(&stu[a],sizeof(struct student),1,fp)!=1)
printf("文件输入错误。\n");
}
fclose(fp);
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("建表如下:\n");
fp=fopen("stud","r");
printf("姓名 \t性别 \t学号 \t缺课数 \t考勤分数 \n");
printf("----------------------------------------------\n");
for(a=0;a<SIZE;a++)
{
fread(&stu[a],sizeof(struct student),1,fp);
printf("%s \t%s \t%d \t%d \t%d\n",stu[a].name,stu[a].sex,stu[a].number,stu[a].count,stu[a].score);
}
fclose(fp);
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("#######################################\n");
printf("# 记录完毕 #\n");
printf("# 欢迎下次再来。 #\n");
printf("#######################################\n");
start();
}
void search()
{
char b;
void search1();
void search2();
printf("****************************************\n");
printf(" 请选择:\n");
printf(" 1.按姓名查找。\n");
printf(" 2.按学号查找。\n");
printf("****************************************\n");
scanf("%s",&b);
switch(b)
{
case'1':search1();break;
case'2':search2();break;
default :printf("****输入有误,请重输:");search();
}
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("#######################################\n");
printf("# 查找完毕 #\n");
printf("# 欢迎下次再来。 #\n");
printf("#######################################\n");
start();
}
void search1()
{
int c;
char student_name[9];
FILE *fp;
fp=fopen("stud","r");
printf("姓名 \t性别 \t学号 \t缺课数 \t考勤分数 \n");
printf("----------------------------------------------\n");
for(c=0;c<SIZE;c++)
{
fread(&stu[c],sizeof(struct student),1,fp);
printf("%s \t%s \t%d \t%d \t%d\n",stu[c].name,stu[c].sex,stu[c].number,stu[c].count,stu[c].score);
}
fclose(fp);
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("请输入要查询学生姓名:");
scanf("%s",student_name);
printf("\n");
printf("\n");
printf("\n");
printf("\n");
for(c=0;c<SIZE;c++)
{
if(strcmp(student_name,stu[c].name)==0)
{
printf("已查到*******************************************\n");
printf("姓名:%s 性别:%s 学号:%d 缺课数:%d\n",stu[c].name,stu[c].sex,stu[c].number,stu[c].count);
}
}
}
void search2()
{
int c;
int d;
FILE *fp;
fp=fopen("stud","r");
printf("姓名 \t性别 \t学号 \t缺课数 \t考勤分数 \n");
printf("----------------------------------------------\n");
for(c=0;c<SIZE;c++)
{
fread(&stu[c],sizeof(struct student),1,fp);
printf("%s \t%s \t%d \t%d \t%d\n",stu[c].name,stu[c].sex,stu[c].number,stu[c].count,stu[c].score);
}
fclose(fp);
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("请输入要查询学生学号:");
scanf("%d",&d);
printf("\n");
printf("\n");
printf("\n");
printf("\n");
for(c=0;c<SIZE;c++)
{
if(d==stu[c].number)
{
printf("已查到 *********************************************\n");
printf("姓名:%s 性别:%s 学号:%d 缺课数:%d\n",stu[c].name,stu[c].sex,stu[c].number,stu[c].count);
}
}
}
void add()
{
int e,f,y;
struct name
{
char nam[9];
}na[300];
FILE *fp;
fp=fopen("stud","r");
for(e=0;e<SIZE;e++)
{
fread(&stu[e],sizeof(struct student),1,fp);
printf("%s \t%s \t%d \t%d \t%d\n",stu[e].name,stu[e].sex,stu[e].number,stu[e].count,stu[e].score);
}
fclose(fp);
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("***************************\n");
printf(" 模拟考勤开始。\n");
printf("***************************\n");
for(e=0;e<CLASS;e++)
{
printf("请输入第%d节课未到的学生姓名并以“over”结束:",e+1);
for(y=0;y<=SIZE;y++)
{
scanf("%s",na[y].nam);
for(f=0;f<SIZE;f++)
{
if(strcmp(na[y].nam,stu[f].name)==0)
stu[f].count++;
}
if(strcmp(na[y].nam,"over")==0)
break;
}
}
fp=fopen("stud","w");
for(e=0;e<SIZE;e++)
{
if(fwrite(&stu[e],sizeof(struct student),1,fp)!=1)
printf("文件输入错误。\n");
}
fclose(fp);
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("模拟考勤完毕,结果如下:\n");
fp=fopen("stud","r");
printf("姓名 \t性别 \t学号 \t缺课数 \n");
printf("-------------------------\n");
for(f=0;f<SIZE;f++)
{
fread(&stu[f],sizeof(struct student),1,fp);
printf("%s \t%s \t%d \t%d\n",stu[f].name,stu[f].sex,stu[f].number,stu[f].count);
}
fclose(fp);
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("#######################################\n");
printf("# 考勤完毕 #\n");
printf("# 欢迎下次再来。 #\n");
printf("#######################################\n");
start();
}
void mark()
{
int g;
FILE *fp;
fp=fopen("stud","r+");
printf("姓名 \t性别 \t学号 \t缺课数\n");
printf("----------------------------------------------\n");
for(g=0;g<SIZE;g++)
{
fread(&stu[g],sizeof(struct student),1,fp);
printf("%s \t%s \t%d \t%d\n",stu[g].name,stu[g].sex,stu[g].number,stu[g].count);
}
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("********************************\n");
printf(" 评分开始。\n");
printf("********************************\n");
for(g=0;g<SIZE;g++)
{
stu[g].score=(100-stu[g].count*5);
if(stu[g].score<0)
stu[g].score=0;
}
fclose(fp);
fp=fopen("stud","w");
for(g=0;g<SIZE;g++)
{
if(fwrite(&stu[g],sizeof(struct student),1,fp)!=1)
printf("文件输入错误。\n");
}
fclose(fp);
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("结果如下:\n");
fp=fopen("stud","r");
printf("姓名 \t性别 \t学号 \t缺课数 \t考勤分数 \n");
printf("----------------------------------------------\n");
for(g=0;g<SIZE;g++)
{
fread(&stu[g],sizeof(struct student),1,fp);
printf("%s \t%s \t%d \t%d \t%d\n",stu[g].name,stu[g].sex,stu[g].number,stu[g].count,stu[g].score);
}
fclose(fp);
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("#######################################\n");
printf("# 评分完毕 #\n");
printf("# 欢迎下次再来。 #\n");
printf("#######################################\n");
start();
}