國立屏東大學 資訊工程學系 程式設計

Contact.c原始程式


#include <stdio.h>
#include "Contact.h"
#include <string.h>

Contact getAContact()
{
    int i=0;
    Contact c;
    char tempName[31]; 
    char *p, tempc;
    
    printf("Name: ");
//    scanf(" %s %s", c.name.firstname, c.name.lastname);
    fgets(tempName,32,stdin);

    p=tempName;
    i=0;
    while(*p!=' ')
    {
        c.name.firstname[i]=*p;
        i++;
        p++;    
    }
    c.name.firstname[i]='\0';
    i=0;
    p++;
    while(*p!='\n')
    {
        c.name.lastname[i]=*p;
        i++;
        p++;
    }
    c.name.lastname[i]='\0';
  
    printf("Gender (M/F): ");

    scanf(" %c",&tempc);
    
    if(tempc=='F') 
        c.gender=Female;
    else if(tempc=='M') 
        c.gender=Male;
    
    short month, day, year; 
    printf("Birthday (YYYY/MM/DD): ");

    scanf(" %hd/%hd/%hd", &year, &month, &day);

    c.birthday.month = (month-1);    
    c.birthday.day=day;
    c.birthday.year=year;

    printf("Phone Type (L/M): ");
    scanf(" %c",&tempc);
     
    if(tempc=='L')
    {
        c.phonetype=LandLine;
        char area[4];
        char number[8];
        printf("Number: ");
        scanf(" (%[^)])%s",area, number);
        strcpy(c.phone.landline.areacode, area);    
        strcpy(c.phone.landline.number, number);
    }
    else if(tempc=='M')
    {
        c.phonetype=MobilePhone;
        char number[11];
        printf("Number: ");
        scanf(" %s", number);
        strcpy(c.phone.mobile.number, number);
        printf("Carrier (C/T/F): ");
        scanf(" %c", &tempc);
        
        if(tempc=='C')
            c.phone.mobile.carrier=CHT;
        else if(tempc=='T')
            c.phone.mobile.carrier=TWN;
        else if(tempc=='F')
            c.phone.mobile.carrier=FET;
    }
    
    printf("Address: ");
    scanf(" %[^\n]",c.address);
    getchar();
    
    return c;
}

void showDate(Date d)
{
    char months[][10]={"January", "February", "March", "April", "May", "June",
             "July","August", "September", "October", "November", "December"};

    printf("%s %d", months[d.month], d.day);
    switch(d.day)
    {
        case 1:
        case 21:
        case 31:
            printf("st");
            break;
        case 2:
        case 22:
            printf("nd");
            break;
        case 3:
        case 23:
            printf("rd");
            break;
        default:
            printf("th");
            break;
    }
    printf(", %d", d.year);         
}

void showAContact(Contact c)
{
    printf("%s %s (", c.name.firstname, c.name.lastname);
    if(c.gender==Male)
        printf("Male");
    else
        printf("Female");
    printf(") ");
    showDate(c.birthday);
    if(c.phonetype==LandLine)
        printf(", (%s)%s,", c.phone.landline.areacode, c.phone.landline.number);
    else
    {
        printf(", %s(", c.phone.mobile.number);
        if(c.phone.mobile.carrier==CHT)
            printf("ChungHwa Telecom");
        else if(c.phone.mobile.carrier==TWN)
            printf("Taiwan Mobile");
        else
            printf("FarEasTone");
        printf("),");
    }
    printf(" %s\n", c.address);
}

int compareAge(Contact a, Contact b)
{
    // return 1 if a is older
    // return 0 if a and b have the same birthday
    // return -1 if b is older
    int adays, bdays;
    adays=a.birthday.year*365+a.birthday.month*30+a.birthday.day;
    bdays=b.birthday.year*365+b.birthday.month*30+b.birthday.day;
    
    if(adays>bdays)
        return -1;
    else if(adays<bdays)
        return 1;
    return 0;
}

void sortContacts(Contact contacts[])
{
    int i,j;
    
    for(i=0;i<numContact-1;i++)
    {
        for(j=0;j<numContact-i-1;j++)
        {
            if( compareAge(contacts[j],contacts[j+1])==1)
            {
                Contact temp;
                temp=contacts[j];
                contacts[j]=contacts[j+1];
                contacts[j+1]=temp;
            }
        }
    }
}