國立屏東大學 資訊工程學系 程式設計
#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; } } } }