C Program – Analisa pendapatan penduduk

Keterangan : program ini menggunakan struktur binary tree. Tree hampir sama dengan link list namun tree itu strukturnya berhierarki layaknya pohon. Yakni memiliki root(akar), batang, dan daun.

Source code :

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

/* deklarasi tree dan dllc */
struct penduduk{
int gaji;
char pekerjaaan[30];
struct penduduk *kanan;
struct penduduk *kiri;
};

struct penduduk *pohon=NULL;
/* direktori vsriabel global */
char daerah[30];
int banyakSample;
int Min,Max,jmla=0,jmlb=0,allgaji;
char MinJob[30],MaxJob[30];
/* deklarasi prototype fungsi */
void addToTree(struct penduduk **root,int b, char c[30]);
void kepala();
void BEGIN();
void getMin(struct penduduk *root);
void getMax(struct penduduk *root);
void exitGate();
void resetAndRepeat();
void rupiah(int bil);
void kurang(struct penduduk *root, int a);
void lebih(struct penduduk *root, int a);
void preOrder(struct penduduk *root);
void inOrder(struct penduduk *root);
void postOrder(struct penduduk *root);
void cetak();
void addData(int jml);
void inputSample();
int isEmptyPohon();
void keMenu();
void menumenu();
void back();
void exitAndCetak();
int isEmptyGaji();
FILE *pdata;
int main()
{
system("cls");
pdata=fopen("hasil.txt","w");
kepala();
BEGIN();
return 0;
}
void kepala(){
printf("n ==============================================================================");
printf("ntt PROGRAM ANALISA PENDAPATAN PERKAPITA");
printf("n ==============================================================================n");
}
void BEGIN(){
printf("n Note : Program ini akan menganalisa sejumlah inputan data gaji dari beberapa"
"n orang yang berbeda sesuai dengan jumlah data yang diinginkan. Inputan"
"n yang sama akan otomatis ditolak oleh sistem. Hasil analisa berupa data"
"n gaji terkecil, gaji terbesar, nilai rata-rata, prosentase sample"
"n dengan gaji di bawah rata-rata dan di atas rata-rata. Dan hasil akan"
"n dicetak dalam dokument .txtn"
"n User dapat mengulang inputan jika terjadi kesalahan dalam menginput"
"n datannn");
fflush(stdin);
printf("n TEKAN Y UNTUK MELANJUTKAN PROSES ... ");
char key=getch();
if(key=='y'|| key=='Y')
inputSample();
else exitGate();
}
void exitGate(){
system("cls");
printf("n ... Program diakhiri, Terimakasih ... n");
printf("nt Author : Iin Aryani");
printf("nt NIM : 218nnn");
getchar();getchar();
exit(1);
}
void inputSample(){
system("cls");
kepala();
printf("n Banyak sampel yang akan dianalisa : ");
scanf("%d",&banyakSample);
system("cls");
kepala();
addData(banyakSample);
printf("n Data sample berhasil diinputkan.");
tanya:
printf("n Masuk ke menu kelola? Y/T ");
char key=getch();
if(key=='y'||key=='Y')
menumenu();
else {fflush(stdin);
printf("n Keluar dan cetak hasil? Y/T ");
key=getch();
if(key=='y'||key=='Y')
exitAndCetak();
else goto tanya;}
}
int isEmptyPohon(){
if(pohon==NULL) return 1;
else return 0;
}
void addData(int jml){
int tmp_gaji;
char tmp_job[30];
printf("n Masukkan data sample"
"n --------------------nn");
while(jml!=0){
printf(" Gaji : ");
scanf("%d",&tmp_gaji);
fflush(stdin);
printf(" Pekerjaan : ");
gets(tmp_job);
/* add ke tree penduduk */
addToTree(&pohon,tmp_gaji,tmp_job);
jml--;
}
}
void addToTree(struct penduduk **root,int b, char c[30]){
struct penduduk *baru;
if((*root) == NULL){
baru = malloc(sizeof(struct penduduk));
baru->gaji=b;
strcpy(baru->pekerjaaan,c);
baru->kiri = NULL;
baru->kanan = NULL;

(*root) = baru;
(*root)->kiri = NULL;
(*root)->kanan = NULL;
printf("n --------------------------n");
}
else if(b < (*root)->gaji){
addToTree(&(*root)->kiri,b,c);
}
else if(b > (*root)->gaji){
addToTree(&(*root)->kanan,b,c);
}
else if(b == (*root)->gaji)
printf("Data sudah ada!");
}
void menumenu(){
system("cls");
kepala();
printf("n Menu kelola : n"
"n 1. Reset dan dan ulangi input"
"n 2. Lihat entri pre-order"
"n 3. Lihat entri in-order"
"n 4. Lihat entri post-order"
"n 5. Keluar dan cetak hasiln"
"n .... ");
char key=getch();
system("cls");
switch(key){
case '1':resetAndRepeat();break;
case '2':printf("n ========================"
"n PreOrder Moden "
"n ========================nn");
preOrder(pohon);break;
case '3':printf("n ========================"
"n InOrder Moden "
"n ========================nn");
inOrder(pohon);break;
case '4':printf("n ========================"
"n PostOrder Moden "
"n ========================nn");
postOrder(pohon);break;
case '5':exitAndCetak();break;
default: printf("n Please choose a valid option ... ");break;
}
back();
}
void exitAndCetak(){
cetak();
exitGate();
}
void resetAndRepeat(){
pohon=NULL;
inputSample();
}
void preOrder(struct penduduk *root){
if(isEmptyPohon()==1){
printf("n Data kosong ... ");
back();
}
if(root != NULL){
printf("n Gaji : %d"
"n Pekerjaan : %s"
"n--------------------------------",
root->gaji,
root->pekerjaaan);
preOrder(root->kiri);
preOrder(root->kanan);
}
}

void inOrder(struct penduduk *root){
if(isEmptyPohon()==1){
printf("n Data kosong ... ");
back();
}
if(root != NULL){
inOrder(root->kiri);
printf("n Gaji : %d"
"n Pekerjaan : %s"
"n--------------------------------",
root->gaji,
root->pekerjaaan);
inOrder(root->kanan);
}
}
void postOrder(struct penduduk *root){
if(isEmptyPohon()==1){
printf("n Data kosong ... ");
back();
}
if(root != NULL){
postOrder(root->kiri);
postOrder(root->kanan);
printf("n Gaji : %d"
"n Pekerjaan : %s"
"n--------------------------------",
root->gaji,
root->pekerjaaan);
}
}
void back(){
getchar();
getchar();
menumenu();
}
void getallgaji(struct penduduk *root){
if(root!=NULL){
getallgaji(root->kiri);
getallgaji(root->kanan);
allgaji+=root->gaji;
}
}
void cetak(){
getallgaji(pohon);
int allGaji=allgaji;
getMin(pohon);
getMax(pohon);
int minGaji,maxGaji,rataRata;
char minGajiJob[30],maxGajiJob[30];
minGaji=Min;
strcpy(minGajiJob,MinJob);
maxGaji=Max;
strcpy(maxGajiJob,MaxJob);
rataRata=allGaji/banyakSample;
kurang(pohon,rataRata);
lebih(pohon,rataRata);
int kurangdari=jmla,lebihdari=jmlb;
float persenkurang=(float)(kurangdari*100/banyakSample);
float persenlebih=(float)(lebihdari*100/banyakSample);
fprintf(pdata,
"n ==========================================="
"n HASIL ANALISA"
"n ===========================================n"
"n Jumlah input sample : %d orang",banyakSample);
fprintf(pdata,"n Jumlah seluruh gaji : Rp ");rupiah(allGaji);
fprintf(pdata,",00n");
fprintf(pdata,"n Gaji terkecil : Rp ");rupiah(minGaji);
fprintf(pdata,",00");
fprintf(pdata,"n Dengan pekerjaan : %sn",minGajiJob);
fprintf(pdata,"n Gaji terbesar : Rp ");rupiah(maxGaji);
fprintf(pdata,",00");
fprintf(pdata,"n Dengan pekerjaan : %sn",maxGajiJob);
fprintf(pdata,"n Rata-rata penghasilan : Rp ");rupiah(rataRata);
fprintf(pdata,",00n");
fprintf(pdata,"n Presentase penghasilan < rata-rata :");
fprintf(pdata,"n Jumlah : %d orang yaitu %1.2f persenn",jmla,persenkurang);
fprintf(pdata,"n Presentase penghasilan > rata-rata :");
fprintf(pdata,"n Jumlah : %d orang yaitu %1.2f persen",jmlb,persenlebih);
fprintf(pdata,"nn ===========================================n");
fclose(pdata);
printf("n ... Opening hasil.txt .... ");
system("hasil.txt");
}
void getMin(struct penduduk *root){
if(root != NULL){
getMin(root->kanan);
Min=root->gaji;
strcpy(MinJob,root->pekerjaaan);
getMin(root->kiri);
}
}
void getMax(struct penduduk *root){
if(root != NULL){
getMax(root->kiri);
Max=root->gaji;
strcpy(MaxJob,root->pekerjaaan);
getMax(root->kanan);
}
}
void rupiah(int num){
char bil[20];
itoa(num,bil,10);
int a=0,i;
for(i=0;i<bil[i];i++){
a++;
}
int jml=a;
for (i=0;i<a;i++){
if(jml%3==1&&jml!=1)fprintf(pdata,"%c.",bil[i]);
else fprintf(pdata,"%c",bil[i]);
jml--;
}
}
void kurang(struct penduduk *root,int a){
if(root != NULL){
kurang(root->kiri,a);
kurang(root->kanan,a);
if(root->gaji<a)jmla+=1;
}
}
void lebih(struct penduduk *root,int a){
if(root != NULL){
lebih(root->kiri,a);
lebih(root->kanan,a);
if(root->gaji>a)
jmlb+=1;
}
}

About Iin aryani

I don't wanna be a "Copycat" but, something they need to copy.

Posted on 22 September 2012, in Open Source ( C Program ), Pemrograman C and tagged . Bookmark the permalink. Leave a comment.

Komentar untuk penulis

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: