/* 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;
}
0 komentar:
Posting Komentar