目錄表

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

作業15

動態結構體陣列


turnin code c.hw15

due date: April 15, 23:59

目的

練習使用動態結構體陣列

第1題

本次作業延續自作業14。設計一個程式用以管理多個聯絡人資訊。每個聯絡人包含以下資訊:

同作業14,下列標頭檔已定義了相關的結構體、列舉資料型別與union:

#include <stdio.h>
#include <string.h>
 
#define numContact 10
 
typedef enum {Male, Female} Gender;
 
typedef enum {Januray, February, March, April, May, June, July,
              August, September, October, November, December} Month;
 
typedef struct
{
  Month month;
  short day;
  int   year;
} Date;
 
typedef struct
{
  char firstname[20];
  char lastname[10];
} Name;
typedef enum {CHT, TWN, FET} Carrier;
 
typedef struct
{
  char number[10];
  Carrier carrier;
} Mobile;
 
typedef struct
{
  char areacode[4];
  char number[8];
} Landline;
 
typedef enum {LandLine, MobilePhone} PhoneType;
 
typedef struct
{
  Name name;
  Gender gender;
  Date birthday;
  PhoneType phonetype;
  union
  {
    Landline landline;
    Mobile mobile;
  } phone;
  char address[50];
} Contact;
 
Contact getAContact();
void showAContact(Contact c);
void sortContacts(Contact cs[]);

上述的「getAContact()」、「showAContact()」與「sortContacts()」函式,已在作業14中完成實作。

本次作業請修改上述函式之實作,並提供「main.c」程式,其中必須包含「main()」函式,以取多不定數目的聯絡人資料的讀取,最後並將資料排序後輸出。

注意,「numContact」定義了聯絡人的個數(#define numContact 10)。由於與本題要求不同,你可以忽視此常數,但不可以變動contact.h檔案內容。

  1. 程式執行結果參考:

[9:19 user@ws hw15] ./a.out 
Name: Amy Wang   <---- 一律為firstname lastname
Gender (M/F): F
Birthday (YYYY/MM/DD): 1977/3/5    <---- 假設使用者不會輸入錯誤的日期 
Phone Type (L/M): L
          Number: (08)7238700      <---- 區碼用括號標示
Address: No.51, Mingsheng E. Rd., Pingtung City
 
Name: Cheng-Kung Liu
Gender (M/F): M
Birthday (YYYY/MM/DD): 1995/12/3
Phone Type (L/M): M
          Number: 0918123456
 Carrier (C/T/F): T
Address: No.99, ChongHui St., Taipei City
 
.... 略
 
Name: Quit
 
Cheng-Kung Liu (Male) December 3rd, 1995, 0918123456(Taiwan Mobile), No. 99, ChongHui St., Taipei City.
Amy Wang (Female) March 5th, 1977, (08)7238700, No.51, Mingsheng E. Rd., Pingtung City.
... 略
[9:19 user@ws hw15]

本題要求以動態結構體陣列的方式來儲存及管理聯絡人資料,初始時陣列大小為10,當空間不足時,動態地調整陣列大小(增加10筆空間)。

注意:

提示: