Rabu, 11 Juni 2014

Program Gaji C++ dg array dan user defined function

Sebuah perusahaan PT. AMHARLE akan membuat aplikasi penggajian karyawan dengan ketentuan sebagai berikut:

Gaji Pokok(Gapok)
Gaji pokok dihitung berdasarkan lama kerja (tahun) sebagai berikut:
<= 1Tahun = 850000
2 s/d 3Tahun = 1000000
4 s/d 5Tahun = 1250000
> 5tahun     = 2500000

Tunjangan Transport
tunjangan transport dihitung per hari sebesar 25000

Tunjangan Keluarga
Tunjangan keluarga diberikan untuk yang menikah sebesar 150000 jika belum miliki anak.
Jika sudah memiliki anak sebesar 150000 ditambah 75000 per anak (maksimal jumlah anak 3)

Bonus Ketertiban
Bonus ketertiban dihitung dari hari masuk tepat waktu sebesar 20000

Bonus Level
bonus level ditentukan sebagai berikut:
kode                Nama              besar bonus
1                      Junior              125000
2                      Senior              200000
3                      Expert              350000

Total gaji adalah hasil penjumlahan dari Gapok, Tunjangan Transport, tunjangan Keluarga, bonus ketertiban dan bonus level.

Program:

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<cstring>

/*
jumkar untuk menyimpan jumlah karyawan
atrinputpeg adalah jumlah atribut input data karyawan selain nama
 (Lama kerja, Jumlah masuk kerja, Jumlah masuk tepat waktu,
 level karyawan (1/2/3), Status menikah (Y/T) dan Jumlah Anak)
atroutputpeg adalah jumlah atribut output data karyawan selain nama
 (gaji pokok, tunjangan transport, tunjangan keluarga, bonus ketertiban,
 bonus level dan total gaji)
*/

#define jumkar 100
#define atrinputpeg 6
#define atroutputpeg 6

int tgl, bln, thn;
int lagi, i;
char y, statusmenikah;
string namakaryawan[jumkar];
int indatapeg[jumkar][atrinputpeg];
long outdatapeg[jumkar][atroutputpeg];


/*
function gapok untuk menghitung gaji pokok dimana
ketentuan besarnya gaji pokok berdasarkan lama kerja (tahun)
*/
long gapok (int lamakerja)
{
long gajipokok;
   if (lamakerja<=1)
{
    gajipokok = 850000;
   }
   else if(lamakerja<=3)
   {
    gajipokok = 1000000;
   }
   else if(lamakerja<=5)
   {
    gajipokok = 1250000;
   }
   else
   {
    gajipokok = 2500000;
   }
   return (gajipokok);
}

/*
function ttrans untuk menghitung tunjangan transport dimana perhari 25000
*/
long ttrans (int harikerja)
{
return (harikerja * 25000);
}

/*
function tkel untuk menghitung tunjangan keluarga diberikan untuk
yang menikah sebesar 150000 jika belum miliki anak.
Jika sudah memiliki anak sebesar 150000 ditambah 75000 per anak
(maksimal jumlah anak 3)
*/
long tkel (int status, int anak)
{
long tunjangankel;
   if (status == 1)
   {
    if (anak <= 3)
      {
      tunjangankel = 150000 + anak*75000;
      }
      else
      {
      tunjangankel = 150000 + 3*75000;
      }
   }
   else
   {
    tunjangankel = 0;
   }
   return (tunjangankel);
}

/*
function bket untuk menghitung bonus ketertiban,
yang dihitung dari hari masuk tepat waktu sebesar 20000
*/
long bket (int haritepat)
{
return (haritepat * 20000);
}

// function blevel untuk menghitung bonus level
long blevel (int kodelevel)
{
switch (kodelevel)
   {
    case 1: return (125000); break;
      case 2: return (200000); break;
      default: return (350000); break;
   }
}

/*
function utama tanpa nilai balik untuk mendefinisikan menu utama
dimana terdapat pilihan 1 s.d 4
*/
void utama ()
{
   int pilihan;
   clrscr();
   cout <<"Aplikasi Penggajian Karyawan PT. AMHARLE \n";
   cout <<"Menu Utama: \n";
   cout <<"1. Atur Tanggal Penggajian \n";
cout <<"2. Entri Data \n";
cout <<"3. List Data \n";
cout <<"4. Exit \n";
cout <<"Pilihan Anda (1-4) ? ";
   cin>>pilihan;
   switch (pilihan)
   {
    //pilihan pertama untuk mengatur tanggal
      case 1:
      {
      clrscr();
         cout<< " Masukkan Tanggal, Bulan dan Tahun Penggajian \n";
    cout<< " Tanggal : "; cin>>tgl;
    cout<< " Bulan   : "; cin>>bln;
cout<< " Tahun : "; cin>>thn;
         cout<< "\n Kembali ke menu utama (tekan sembarang tombol)\n";
         getch();
         utama ();
         break;
      }
      //pilihan kedua untuk input data karyawan
      case 2:
      {
      clrscr();
         lagi = 0;
         i = 1;
         while (lagi<1)
    {
          cout<<"\nNama : "; cin>>namakaryawan[i];
      cout<<"\Lama kerja(tahun): "; cin>>indatapeg[i][1];
      cout<<"\Jumlah masuk kerja: "; cin>>indatapeg[i][2];
      cout<<"\Jumlah masuk tepat waktu: "; cin>>indatapeg[i][3];
      cout<<"\Level Karyawan (1/2/3): "; cin>>indatapeg[i][4];
     cout<<"\Status Menikah (Y/T): "; cin>>statusmenikah;
      if ((statusmenikah == 'Y') || (statusmenikah == 'y'))
     {
      indatapeg[i][5] = 1;
        cout<<"\Jumlah anak : "; cin>>indatapeg[i][6];
      }
     else if ((statusmenikah == 'T') || (statusmenikah == 't'))
      {
      indatapeg[i][5] = 0;
        indatapeg[i][6] = 0;
      }

      //menghitung besarnya gaji pokok berdasarkan lama kerja (tahun)
      outdatapeg[i][1]= gapok(indatapeg[i][1]);

      //menghitung besarnya tunjangan transport dihitung perhari sebesar 25000
      outdatapeg[i][2] = ttrans(indatapeg[i][2]);

//menghitung besarnya tunjangan keluarga
      outdatapeg[i][3]= tkel (indatapeg[i][5],indatapeg[i][6]);

      //menghitung besarnya bonus ketertiban dihitung dari hari masuk tepat waktu
outdatapeg[i][4] = bket(indatapeg[i][3]);

      //menghitung besarnya bonus level
      outdatapeg[i][5] = blevel (indatapeg[i][4]);

      //menghitung total gaji (gaji bersih) setiap karyawan
      outdatapeg[i][6] = outdatapeg[i][1]+outdatapeg[i][2]+outdatapeg[i][3]+outdatapeg[i][4]+outdatapeg[i][5];

      cout<<"\nULANGI LAGI [Y/T] ? ";
      y = getche();
    {
    if (y=='Y'||y=='y')
          lagi =- 1;
          i++;
      }
      lagi++;
      cout<<"\n";
         }
      cout<< " Kembali ke menu utama (tekan sembarang tombol)\n";
         getch();
         utama ();
         break;
      }

      //pilihan ketiga untuk menampilkan data karyawan yang telah diinputkan
      case 3:
      {
      clrscr();
    cout <<"\nList gaji karyawan PT. AMHARLE Yogyakarta\n";
  cout <<"Tanggal " << tgl << " " << bln << " " << thn << "\n";
  cout <<"+---+---------+-------+-------+-------+--------+-------+-------+-------+-------+\n";
  gotoxy(1,5); cout <<"|No.";
  gotoxy(5,5); cout<<"| Nama";
  gotoxy(15,5);cout<<"| LK(Th)";
  gotoxy(23,5);cout<<"| Level";
  gotoxy(31,5);cout<<"| Gapok";
gotoxy(39,5);cout<<"| T.Trans";
  gotoxy(48,5);cout<<"| T.Kel";
  gotoxy(56,5);cout<<"| B.Ket";
  gotoxy(64,5);cout<<"|B.Level";
  gotoxy(72,5);cout<<"| Total |";
gotoxy(1,6); cout <<"+---+---------+-------+-------+-------+--------+-------+-------+-------+-------+\n";

    //menghitung total gaji semua karwayan (gajikeluar)
  for (int j=1;j<i;j++)
  {
    gotoxy(1,6+j); cout <<"|"<<j;
  gotoxy(5,6+j); cout<<"|"<<namakaryawan[j];
    gotoxy(15,6+j);cout<<"|"<<indatapeg[j][1];
  if (indatapeg[j][4]==1)
      {
      gotoxy(23,6+j);cout<<"|Junior";
      }
      else if (indatapeg[j][4]==2)
     {
      gotoxy(23,6+j);cout<<"|Senior";
     }
      else if (indatapeg[j][4]==3)
     {
        gotoxy(23,6+j);cout<<"|Expert";
     }
    gotoxy(31,6+j);cout<<"|"<<outdatapeg[j][1];
     gotoxy(39,6+j);cout<<"|"<<outdatapeg[j][2];
  gotoxy(48,6+j);cout<<"|"<<outdatapeg[j][3];
  gotoxy(56,6+j);cout<<"|"<<outdatapeg[j][4];
    gotoxy(64,6+j);cout<<"|"<<outdatapeg[j][5];
  gotoxy(72,6+j);cout<<"|"<<outdatapeg[j][6];
      gotoxy(80,6+j);cout<<"|";
  }
gotoxy(1,6+i); cout <<"+---+---------+-------+-------+-------+--------+-------+-------+-------+-------+\n";
         cout<< "\n Kembali ke menu utama (tekan sembarang tombol)\n";
         getch();
         utama ();
         break;
      }

      //pilihan keempat untuk keluar dari aplikasi
      case 4:
      {
      cout<<"\nSelesai \n";
         cout<<"Terimakasih";
         getch();
         break;
      }
   }
}

void main() {
clrscr();
   utama();
}

1 komentar: