Saturday, 5 May 2012

Storing names and birthdates in C


#include<stdio.h>
#include<conio.h>


int convert(int mm,int dd,int yy);


main()
{
int mm,dd,yy,count=0;
int day_of_week;

typedef struct{
unsigned month : 4;
unsigned day   : 5;
unsigned year  : 7;
}date;

struct {
char name[30];
date birthdate;
}student[40];

static char *weekday[] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
static char *month[] = {"January","February","March","April","May","June","July","August","September","October","November","December"};

printf("Data Entry Routine\nType \'END\' when finished\n");
printf("\nName:  ");
scanf("%[^\n]",student[count].name);

while(strcmp(student[count].name,"END")!=0)
{
printf("Birthdate(mm dd yyyy): ");
scanf("%d %d %d",&mm,&dd,&yy);

student[count].birthdate.month=mm;
student[count].birthdate.day=dd;
student[count].birthdate.year=yy-1900;

printf("\nName: ");
scanf(" %[^\n]",student{++count].name);
}

count=0;
while(strcmp(student[count].name,"END")!=0)
{
day_of_week = convert(student[count].birthdate.month,
student[count].birthdate.day,
student[count].birthdate.year);
printf("\n%s      ",student[count].name);
printf("%s %s %s,%d\n",weekday[day_of_week],
month[student[count].birthdate.month-1],
student[count].birthdate.day,
student[count].birthdate.year+1900);
++count;
}
getch();
}

int convert(int mm,int dd,int yy)
{
long ydays,ncycles;
int nyears,day;

ndays=(long)(30.42*(mm-1))+dd;
if(mm==2) ++days;
if((mm>2)&&(mm<8)) --days;
if((yy%4==0)&&(mm>2))++days;

ncycles=yy%4;
ndays+=ncycles+1461;

nyears=yy%4;
if(nyears>0)
{
ndays+=365*nyears+1;
}
if(ndays>59)
{
--days;
}
days = ndays%7;
return(day);
}

No comments:

Post a Comment