READIN.CPP
#include <stdio.h>
FILE *fp;
struct Tdate
{
int year;
int month;
int date;
};
struct Tmark
{
float pol;
float chn;
float eng;
float com;
float oral;
};
struct Tinform
{
char name[20];
char sex;
float age;
char schoolrecord;
float worklen;
char wordsite[100];
Tmark mark;
float Sage;
float Srecord;
float Swlen;
float total;
};
void READIN()
{int I=0;
int i;
char a,b,c;
FILE *p;
struct Tdate now,nowline;
float age1[6]={0},age2[5]={0},age3[10]={0},age4[5]={0};
for(i=0,age1[0]=70.0;i<5;i++)
age1[i+1]=age1[i]+2;
for(i=0,age2[0]=84.0;i<4;i++)
age2[i+1]=age2[i]+4;
for(i=0,age3[0]=97.5;i<9;i++)
age3[i+1]=age3[i]-2.5;
for(i=0,age4[0]=74.0;i<5;i++)
age4[i+1]=age4[i]-1;
struct Tinform inf[50];
fp=fopen("filelist.dat","ab");
p=fopen("deadline.dat","rb");
printf("/n请输入今日日期(如2008年8月8日,可输入为2008 8 8,按回车键结束。):");
scanf("%d %d %d",&now.year,&now.month,&now.date);
fread(&nowline,sizeof(struct Tdate),1,p);
if(now.year>nowline.year)
{printf("/n* * * 日期已过期!* * */n");
c='N';
}
if(now.year==nowline.year && now.month>nowline.month)
{printf("/n* * * 日期已过期!* * */n");
c='N';
}
if(now.year==nowline.year && now.month==nowline.month && now.date>nowline.date)
{printf("/n* * * 日期已过期!* * */n");
c='N';
}
if(c=='N') goto END;//日期输错,则结束输入操作。
printf("/n若要继续请输入Y,否则输入N : ");
a=getchar();a=getchar();
while(a=='Y')
{
printf("/n请输入:/n姓名,性别(男:M 女:F),年龄,/n学历(D-博士,M-硕士,U-本科,O-其他),/n任科级干部年限,现工作单位,/n考试成绩(政治,语文,英语,计算机,口试)/n(注意:所有内容用空格隔开)/n");
scanf("%s %c %f %c %f %s %f %f %f %f %f",inf[I].name,&inf[I].sex,&inf[I].age,
&inf[I].schoolrecord,&inf[I].worklen,inf[I].wordsite,&inf[I].mark.pol,&inf[I].mark.chn,&inf[I].mark.eng,
&inf[I].mark.com,&inf[I].mark.oral);
if((inf[I].sex!='M' && inf[I].sex!='F') || (inf[I].age>55 || inf[I].age<30) || (inf[I].schoolrecord!='D' && inf[I].schoolrecord!='M' && inf[I].schoolrecord!='U' && inf[I].schoolrecord!='O') )
{if(inf[I].sex!='M' && inf[I].sex!='F')
printf("/n* * * 输入有误!性别请用‘M’或‘F’表示!* * */n");
if(inf[I].age>55 || inf[I].age<30)
printf("/n* * * 输入有误!年龄应在30—55岁之间!* * */n");
if(inf[I].schoolrecord!='D' && inf[I].schoolrecord!='M' && inf[I].schoolrecord!='U' && inf[I].schoolrecord!='O')
printf("/n* * * 输入有误!学历请用‘D’,‘M’,‘U’或‘O’表示!* * */n");
}
else
{
printf("/n请核对如下所输入信息:/n");
printf("姓名:%s 性别:%c 年龄:%.2f/n学历:%c 任科级干部年限:%.2f/n现工作单位:%s/n考试成绩:/n政治:%.2f 语文:%.2f 英语:%.2f /n计算机:%.2f 口试:%.2f/n",inf[I].name,inf[I].sex,inf[I].age,inf[I].schoolrecord,inf[I].worklen,inf[I].wordsite,inf[I].mark.pol,inf[I].mark.chn,inf[I].mark.eng,inf[I].mark.com,inf[I].mark.oral);
printf("若无误请输入Y,若有请输入N! ");
b=getchar();b=getchar();
if(b=='Y')
{
if(inf[I].age>=30.0 && inf[I].age<=35.0)
inf[I].Sage=age1[(int)(inf[I].age-30.0)];
if(inf[I].age>=36.0 && inf[I].age<=40.0)
inf[I].Sage=age2[(int)(inf[I].age-36.0)];
if(inf[I].age>=41.0 && inf[I].age<=50.0)
inf[I].Sage=age3[(int)(inf[I].age-41.0)];
if(inf[I].age>=51.0 && inf[I].age<=55.0)
inf[I].Sage=age4[(int)(inf[I].age-51.0)];
if(inf[I].schoolrecord=='D')
inf[I].Srecord=100.0;
if(inf[I].schoolrecord=='M')
inf[I].Srecord=75.0;
if(inf[I].schoolrecord=='U')
inf[I].Srecord=50.0;
if(inf[I].schoolrecord=='O')
inf[I].Srecord=0.0;
if(inf[I].worklen>=0.0 && inf[I].worklen<=1.0)
inf[I].Swlen=70*(inf[I].worklen);
if(inf[I].worklen>1.0 && inf[I].worklen<=2.0)
inf[I].Swlen=30*(inf[I].worklen)+40;
if(inf[I].worklen>2.0 && inf[I].worklen<=6.0)
inf[I].Swlen=(-20)*(inf[I].worklen)+140;
if(inf[I].worklen>6.0)
inf[I].Swlen=0;
inf[I].total=inf[I].mark.pol+inf[I].mark.chn+inf[I].mark.eng+inf[I].mark.com+inf[I].mark.oral+inf[I].Sage+inf[I].Srecord+inf[I].Swlen;
I++;
}
}
printf("/n继续输入下一条信息吗?(是:Y,否:N)-- ");
a=getchar();a=getchar();
}
for(i=0;i<I;i++)
fwrite(&inf[i],sizeof(struct Tinform),1,fp);
END:;
}