RSS
email

Program C dengan GUI Linux (Info.c)


/* info.c */
/* programmer: Andi WRE
harus dibuat file info.txt terlebih dahulu*/

#include
#include
#include
#include
#define TAHUN 2009
#define BULAN 11
#define TANGGAL 21

/* prototype fungsi */
void doparent(char[], int, int, int);
void dochild1(int, int, int);
int validasi(int, int, int *);   /* validasi input */

int main(){
  int rv=0,i,tanggal,bulan,tahun, cek;
  pid_t pid1;
  char name[20];

  printf("Masukkan nama anda: ");
  scanf("%s", name);
 
  do {
     printf("Tanggal lahir: ");
     cek = validasi(1,31,&tanggal);
  } while(cek == 0);

  do {
     printf("Bulan lahir: ");
     cek = validasi(1,12,&bulan);
  } while(cek == 0);

  do {
     printf("Tahun lahir: ");
     cek = validasi(1900,2010,&tahun);
  } while(cek == 0);

  pid1=fork(); /* buat proses child1 */
  if(pid1 == -1) {
    perror("Fork gagal");
    exit(EXIT_FAILURE);
  }

  if(pid1==0) {
    dochild1(tanggal, bulan, tahun);
  }
  else
     doparent(name, tanggal, bulan, tahun);
}

// fungsi doparent() menuliskan informasi nama dan tanggal
// lahir, kemudian menuliskan apapun yang dituliskan dalam
// berkas info.txt
//
void doparent(char *fname, int tanggal, int bulan, int tahun){
  FILE *pf; /* pointer file */
  char buff;
  int i = 0;

/* ambil nama file yang isinya ingin dibaca*/
  pf=fopen("info.txt","r"); /* buka file untuk dibaca */
 
  if(pf==NULL){
    perror("PARENT: Error : \n");
    exit(EXIT_FAILURE); /* exit jika buka file gagal */
  }
 
// tampilkan informasi
  printf("Nama : %s\n", fname);
  printf("Tanggal lahir : %d ", tanggal);
  switch(bulan) {
    case 1: printf("Januari "); break;
    case 2: printf("Februari "); break;
    case 3: printf("Maret "); break;
    case 4: printf("April "); break;
    case 5: printf("Mei "); break;
    case 6: printf("Juni "); break;
    case 7: printf("Juli "); break;
    case 8: printf("Agustus "); break;
    case 9: printf("September "); break;
    case 10: printf("Oktober "); break;
    case 11: printf("November "); break;
    case 12: printf("Desember ");
  }
  printf(" %d\n", tahun);
  printf("Informasi : \n");
  buff=getc(pf); /* baca karakter pertama */
  while(buff!=EOF){
    putc(buff,stdout); /* cetak karakter */
    buff=getc(pf); /* baca karakter berikutnya sampai EOF */
  }
  fclose(pf); /* tutup file */
}

// fungsi dochild1() menuliskan informasi tentang umur dan
// tahun - tahun dimana berulang tahun secara mundur
// dimulai dari tahun terakhir sampai tahun lahir
//
void dochild1(int tanggal, int bulan, int tahun){
  int i, usia, thn_sekarang;
  FILE *pf=fopen("umur.txt","w");
 
  if(pf==NULL){
    printf("CHILD1: Error\n");
    exit(EXIT_FAILURE);
  }
 
  usia = TAHUN - tahun;  // prediksi awal
  thn_sekarang = TAHUN;
  if(bulan > BULAN) {
     usia--;
     thn_sekarang--;
  }
  else if(bulan == BULAN)
    if(tanggal < TANGGAL) {
      usia--;
      thn_sekarang--;
    }
 
  printf("Usia anda: %d tahun\n", usia);
  fprintf(pf, "Usia anda: %d tahun\n", usia);
  for(i = 0; i <= usia; i++)
    fprintf(pf, "%d\n", thn_sekarang - i);  

  fclose(pf);
}

// fungsi validasi() akan meminta input dan
// mengecek apakah dalam kisaran min sampai max
//

int validasi(int min, int max, int *nilai)
{
   int flag;
  
   scanf("%d", nilai);
   if((*nilai >= min) && (*nilai <= max))
      flag = 1;    /* inputan valid */
   else
      flag = 0;    /* inputan tidak valid */
   
   return flag;
}

 

Bookmark and Share

0 komentar:

Posting Komentar

 

Friends

ON-LINE