Senin, 24 Oktober 2016

Perancangan Perangkat Lunak – Sistem Perpustakaan

Use Case Diagram

Sequence Diagram Peminjaman Buku 



Sequence Diagram Pengembalian Buku


Class Diagram 


Code Implementasi


#include<iostream>
#include<stdlib.h>

using namespace std;

int n,n1;
int i;
int inc=0;
int inc1=0;

class book
{
public:
 int bookcode;
 char bookname[20];
 char authorname[20];
 int bookprice;
 int status;
public:
 void addbook()
 {
  status=1;
  cout<<"\t\t\t TAMBAH BUKU"<<endl<<endl;
  inc++;
  bookcode=100+inc;
  cout<<"\n\tKode Buku                :"<<bookcode<<endl;
  cout<<"\n\tNama Buku          :";
  cin>>bookname;
  cout<<"\n\tPenulis        :";
  cin>>authorname;
  cout<<"\n\tHarga         :";
  cin>>bookprice;
 }

 void display_book()
 {
  cout<<bookcode<<"\t\t"<<bookname<<"\t\t"<<authorname<<"\t\t"<<"\t\t"<<bookprice<<endl;
 }

 void book_status()
 {
  if(status==1)
  {
   cout<<"\t\tID Buku:"<<bookcode<<"\t\tStatus:Available"<<endl;
  }
  else
  {
   cout<<"\t\tID Buku:"<<bookcode<<"\t\tStatus:Issued"<<endl;
  }
 }
}; book b[10];

class member
{
public:
 int borrower_id;
 char studname[20];
 int bookcount;
public:
 void addstud()
 {
  cout<<"\t\tTambah Peminjam"<<endl;
  cout<<endl;
  inc1++;
  borrower_id=100+inc1;
  cout<<"\t\tID Peminjam            :"<<borrower_id<<endl;
  cout<<"\t\tNama   :";
  cin>>studname;
  cout<<endl;
  bookcount=2;
  cout<<"\t\tMaximum Buku:"<<bookcount<<endl<<endl;
 }
 
 void dispstud()
 {
  cout<<"\t"<<borrower_id<<"\t\t"<<studname<<endl;
 }
};member s[10];

class transaksi
{
public:
 int day,month,year;
 int day2,month2,year2;
 int iday,imon,iyear;
 int rday,rmon,ryear;
 int eday,emon,eyear;
 int yr1,yr2,m1,m2,d1,d2,mons1,mons2,mons,days,yrs,sum,j;
 int  loop;
 int fine;

public:
 void isdatecalc()
 {
  cout<<"\t\thari:";
  cin>>day;
  cout<<"\t\tbulan:";
  cin>>month;
  cout<<"\t\ttahun:";
  cin>>year;
  day2=day;
  month2=month;
  year2=year;
  day2=day2+20;

  if(((month2==1)||(month2==3)||(month2==5)||(month2==7)||(month2==8)||(month2==10)||(month2==12))&&((day2>31)))
  {
   day2=day2-31;
   month2=month2+1;
   if(month2==13)
   {
    year2++;
    month2=1;
   }
  }
  else if(((month2==4)||(month2==6)||(month2==9)||(month2==11))&&((day2>30)))
  {
   day2-=30;
   month2++;
  }
  else if(((year2%4==0)||(year2%400==0))&&(day2>29)&&(month==2))
  {
   day2-=29;
   month2++;
  }
  else if(((year2%4!=0)||(year2%100!=0)||(year2%400!=0))&&(day2>28)&&(month2==2))
  {
   day2-=28;
   month2++;
  }
  cout<<endl;
 }
 
 void isdate()
 {
  iday=day;
  imon=month;
  iyear=year;

  cout<<"\t\tTanggal pinjam:"<<iday<<"/"<<imon<<"/"<<iyear;
  cout<<endl;
 }
 
 void retdate()
 {
  rday=day2;
  rmon=month2;
  ryear=year2;
  cout<<"\t\tTanggal kembali:"<<rday<<"/"<<rmon<<"/"<<ryear<<endl;
  cout<<endl;
 }
 
 void edatecalc()
 {
  eday=rday;
  emon=rmon;
  eyear=ryear;
  eday=eday+20;
  if(((emon==1)||(emon==3)||(emon==5)||(emon==7)||(emon==8)||(emon==10)||(emon==12))&&((eday>31)))
  {
   eday=eday-31;
   emon=emon+1;
   if(emon==13)
   {
    eyear++;
    emon=1;
   }
  }
  else if(((emon==4)||(emon==6)||(emon==9)||(emon==11))&&((eday>30)))
  {
   eday-=30;
   emon++;
  }
  else if(((eyear%4==0)||(eyear%100==0)||(eyear%400==0))&&(eday>29)&&(emon==2))
  {
   eday-=29;
   emon++;
  }
  else if(((eyear%4!=0)||(eyear%100!=0)||(eyear%400!=0))&&(eday>28)&&(emon==2))
  {
   eday-=28;
   emon++;
  }
  cout<<endl;
  cout<<endl;

  cout<<"\t\tperpanjang tanggal kembali:"<<eday<<"/"<<emon<<"/"<<eyear<<endl;
 }
 void finecalc(){
  int mon[]={31,28,31,30,31,30,31,31,30,31,30,31};
  loop=365;
  sum=0;
  d1=rday;
  m1=rmon;
  yr1=ryear;
  cout<<endl;
  cout<<"\t\ttanggal kembali: "<<d1<<"/"<<m1<<"/"<<yr1<<endl;
  cout<<endl;
  cout<<"\t\tmasukkan tanggak kembali.."<<endl;
  cout<<endl;
  cout<<"\t\thari:";
  cin>>d2;
  cout<<endl;
  cout<<"\t\tbulan:";
  cin>>m2;
  cout<<endl;
  cout<<"\t\ttahun:";
  cin>>yr2;
  cout<<endl;
  days=d2-d1;
 
  yrs=yr2-yr1;
  if(m2>=m1)
  {
   mons=m1-m2;
   mons2=abs(mons);
  }
  else
  {
   mons=m2-m1;
   mons2=abs(mons);
  }
  sum=yrs*loop+mons+days+mons2;
  if(m2>m1)
  {
   j=m1;
  }
  else
  {
   j=m2;
  }
  if(mons2!=0)
  {
 
 
   for(i=0;i<mons2;i++)
   {
    sum=sum+mon[j];
    j++;
   }
  }
  cout<<endl;
  cout<<"\t\ttanggal kembali:"<<d2<<"/"<<m2<<"/"<<yr2<<endl;
  cout<<endl;
  fine=(sum+mons)*1;
 
  if((yr1%4==0)||(yr1%400==0)&&(m1==2))
  {
   fine=fine+1;
  }
       cout<<"\t\t\tJumlah denda"<<fine<<endl;
 }
}; transaksi is;


int main()
{
 int option,i;
 char ch2,ch3,ch4;
 int sbookcode,sstudid;
 int flag,flag1,pos,spos,ipos;
 int sflag,stpos;
 int book_id,borrower_id;
 int rbookcode,rstudid;
 int rflag1,rflag2;
 int rpos1,rpos2,l;
 do
 {
  cout<<"\t\t\tLIBRARY MANAGEMENT SYSTEM"<<endl<<endl;
  cout<<"\t\t\t\tMAINMENU"<<endl<<endl;
  cout<<"\t\t  ##############################################"<<endl<<endl;
  cout<<"\t\t \t1. TAMBAH BUKU            "<<endl;
  cout<<"\t\t \t2. LIHAT SEMUA BUKU       "<<endl;
  cout<<"\t\t \t3. TAMBAH DATA PEMINJAM   "<<endl;
  cout<<"\t\t \t4. LIHAT DATA PEMINJAM  "<<endl;
  cout<<"\t\t \t5. PINJAM BUKU            "<<endl;
  cout<<"\t\t \t6. KEMBALIKAN BUKU        "<<endl;
  cout<<"\t\t \t0. EXIT                   "<<endl<<endl;
  cout<<"\t\t  ##############################################"<<endl;
  cout<<endl;
  cout<<"\t\t\t\tPilih opsi:";
  cin>>option;
  switch(option)
  {
   case 1:
    cout<<"\t\tTambah Buku"<<endl<<endl;
    cout<<"\t\tMasukkan jumlah buku :";
    cin>>n;
    for(i=1;i<=n;i++)
    {
     cout<<"Kode buku:"<<100+i;
     b[i].addbook();
    }

    cout<<endl;
    cout<<endl;
    cout<<"\t\t<<-----Kembali ke Main Menu-----"<<endl;
    main();
    break;

   case 2:
    cout<<"\t\t\tDAFTAR BUKU"<<endl<<endl;
    cout<<"KODE BUKU\tJUDUL\tPENULIS \tHARGA"<<endl<<endl;
    for(i=1;i<=n;i++)
    {
     b[i].display_book();
    }
    cout<<endl;
    for(i=1;i<=n;i++)
    {
     b[i].book_status();
    }
    cout<<endl;
    cout<<"\t\t<<-----Kembali ke Main Menu-----"<<endl;
    main();
    break;

   case 3:
    cout<<"\t\tTAMBAH PEMINJAM"<<endl<<endl;
    cout<<"\t\tJumlah : ";
    cin>>n1;
    for(i=1;i<=n1;i++)
    {
     s[i].addstud();
    }
    cout<<endl;
    cout<<"\t\t<<-----Kembali ke Main Menu-----"<<endl;
    main();
    break;

   case 4:
    cout<<"\t\tLIST OF ALL ADDED STUDENTS"<<endl;
           cout<<"\t\t^^^^^^^^^^^^^^^^^^^^^^^^^^"<<endl;
    cout<<endl;
    cout<<"\t******************************************"<<endl;
    cout<<"\tSTUDENT ID\tSTUDENT NAME\tDEPT NAME"<<endl;
    cout<<"\t******************************************"<<endl;
   
     for(i=1;i<=n1;i++)
    {
       s[i].dispstud();
   
    }
    cout<<endl;
   
    cout<<"\t<<-----Back To Main Menu-----"<<endl;
    main();
    break;
    break;

   case 5:
    cout<<"\t\t PEMINJAMAN BUKU"<<endl<<endl;
    cout<<"\t\tID Peminjam:";
    cin>>borrower_id;
    for(i=1;i<=n1;i++)
    {
     if(borrower_id==s[i].borrower_id)
     {
      flag=1;
      spos=i;
     }
    }
    if(flag==1)
    {
     cout<<"\t\tKode Buku:";
     cin>>book_id;
     for(i=1;i<=n;i++)
     {
      if(book_id==b[i].bookcode)
      {
       flag1=1;
       ipos=i;
      }
     }
    }
    cout<<endl;

    if(flag==1)
    {
     if(flag1==1)
     {
      if(s[spos].bookcount!=0)
      {
       if(b[ipos].status==1)
       {
        s[spos].bookcount--;
        b[ipos].status=0;
        cout<<"\t\tTanggal Peminjaman"<<endl<<endl;
        is.isdatecalc();
        is.isdate();
        is.retdate();
        cout<<"\t\tBuku berhasil dipinjam"<<endl;
        cout<<endl;
        cout<<"\t\tBooks allowed now:"<<s[spos].bookcount<<endl;
        cout<<endl;
        cout<<"\t ID Peminjam\t Nama\t Kode Buku"<<endl;
        cout<<"\t ----------\t ------------\t --------"<<endl;
        cout<<"\t "<<s[spos].borrower_id<<"\t\t "<<s[spos].studname<<"\t\t "<<b[ipos].bookcode<<endl;
       }
       else
       {
        cout<<"\t\tMohon maaf, buku sudah dipinjam"<<endl;
       }
      }
      else
      {
       cout<<"\t\tMohon maaf, tidak dapat meminjam lebih dari dua buku"<<endl;
      }

     }
     else
     {
      cout<<"\t\tMohon maaf, buku tidak ditemukan dengan ID : "<<book_id<<endl;
     }
    }
    else

    {
     cout<<"\t\tMohon maaf, ID peminjam tidak ditemukan:"<<borrower_id<<endl;
    }

    cout<<endl;
    cout<<"\t\t<<-----Kembali ke Main Menu-----"<<endl;
    main();
    break;

   case 6:
    cout<<"\t\tPengembalian Buku"<<endl<<endl;
    cout<<"\t\tID Peminjam";
    cin>>rstudid;
    cout<<endl;
    for(i=1;i<=n1;i++)
    {
     if(rstudid==s[i].borrower_id)
     {
      rflag1=1;
      rpos1=i;
     }
    }

    if(rflag1==1)
    {

     cout<<"\t\tID Buku :";
     cin>>rbookcode;
     cout<<endl;
     for(i=1;i<=n;i++)
     {
      if(rbookcode==b[i].bookcode)
      {
       rflag2=1;
       rpos2=i;
      }
     }
    }
    if(rflag1==1)
    {
     if(rflag2==1)
     {
      cout<<"\tID Buku:"<<b[rpos2].bookcode<<" ID Peminjam:"<<s[rpos1].borrower_id<<" ?y/n:";
      cin>>ch4;
      if(ch4=='y')
      {
       if(b[rpos2].status==0)
       {
        cout<<endl;
        cout<<"\t\tBuku yang dapat dikembalikan..."<<endl;
        cout<<endl;
        is.retdate();
        cout<<"\t\tApakah kamu yakin mengembalikan buku ini ?y/n:";
        cin>>ch2;
        cout<<endl;
        if(ch2=='y')
        {
         cout<<"\t\t Buku belum lewat batas waktu ?y/n:";
         cin>>ch3;
         cout<<endl;
         if(ch3=='y')
         {
       //   is.retdate();
         //cout<<endl;
         // cout<<"\t\tBook returned before due date"<<endl;
         // cout<<endl;
          cout<<"\t\t\tFine - NIL"<<endl;
          cout<<endl;
          cout<<"\t\t\t THANK YOU"<<endl;
          b[rpos2].status=1;
          s[rpos1].bookcount++;
          cout<<endl;
          cout<<"\t\t<<-----Kembali ke Main Menu-----"<<endl;
          main();
         }
         else
         {
          cout<<endl;
          cout<<"\t\tAnda harus membayar tagihan !!!"<<endl;

          is.finecalc();
          cout<<endl;
          b[rpos2].status=1;
          s[rpos1].bookcount++;
          cout<<"\t\t<<-----Kembali ke Main Menu-----"<<endl;

          main();
         }
        }

        else
        {
         is.retdate();
         cout<<endl;
         cout<<"\t\tYou can extend the book for another twenty days.."<<endl;
         is.edatecalc();

        }

       }
       else
       {
        cout<<endl;
        cout<<"\t\tThis Book is not yet issued from library.. "<<endl;
       }
      }
      else
      {
       cout<<endl;
       cout<<"\t\t This book is not issued to you..Sorry!!!"<<endl;
      }
     }
     else
     {
      cout<<endl;
      cout<<"\t\tSorry!..No Book Exists With Code:"<<rbookcode<<endl;
     }

    }

    else
    {
     cout<<endl;
     cout<<"\t\tMohon maaf, ID peminjam tidak ditemukan:"<<rstudid<<endl;
    }

    cout<<endl;
    cout<<"\t\t<<-----Kembali ke Main Menu-----"<<endl;

    main();
    break;

   case 0:exit(0);
    default: 
    cout<<"\t\tPilihan salah.."<<endl;
    cout<<"\t\tMasukkan ulang pilihan...."<<endl;
    cout<<endl;
    cout<<"\t\t\t<<---Kembali---"<<endl;
    main();
    break;
  }
 }while(option==0);
}


by : Andreas Galang A (5114100153)

Senin, 17 Oktober 2016

Prototipe Program ATM

Setelah membuat UseCase Diagram coba kita buat prototype dari mesin ATM. Untuk melihat use case diagram serta sequence diagramnya dapat dilihat pada http://exodblog.blogspot.sg/2016/09/use-case-dan-interaction-diagram-untuk.html

#include
#include
#include
#include
using namespace std;

class account
{
	int acno;
	char name[50];
	int deposit;
public:
	void create_account();	
	void show_account() const;
	void dep(int);
	void draw(int);
	void report() const;
	int retacno() const;
	int retdeposit() const;	
};        

void account::create_account()
{
	cout<<"\nMasukkan no rekening. :";
	cin>>acno;
	cout<=500 ) : ";
	cin>>deposit;
	cout<<"\n\n\nAkun berhasil dibuat..\n";
}

void account::show_account() const
{
	cout<<"\nNo. rekening : "<>ch;
		system("cls");
		switch(ch)
		{
		case '1':
			write_account();
			break;
		case '2':
			cout<<"\n\n\tNo. rekening : "; cin>>num;
			deposit_withdraw(num, 1);
			break;
		case '3':
			cout<<"\n\n\tNo. rekening : "; cin>>num;
			deposit_withdraw(num, 2);
			break;
		case '4': 
			cout<<"\n\n\tNo. rekening : "; cin>>num;
			display_sp(num);
			break;
		case '5':
			display_all();
			break;
		 case '6':
			cout<<"\n\n\tBye ...";
			break;
		 default :cout<<"\a";
		}
		cin.ignore();
		cin.get();
	}while(ch!='6');
	return 0;
}

//    	write to file 

void write_account()
{
	account ac;
	ofstream outFile;
	outFile.open("account.txt",ios::binary|ios::app);
	ac.create_account();
	outFile.write(reinterpret_cast (&ac), sizeof(account));
	outFile.close();
}

//    	Menampilkan saldo akun spesifik

void display_sp(int n)
{
	account ac;
	bool flag=false;
	ifstream inFile;
	inFile.open("account.txt",ios::binary);
	if(!inFile)
	{
		cout<<"File error !";
		return;
	}
	cout<<"\nDETAIL SALDO\n";

    	while(inFile.read(reinterpret_cast (&ac), sizeof(account)))
	{
		if(ac.retacno()==n)
		{
			ac.show_account();
			flag=true;
		}
	}
	inFile.close();
	if(flag==false)
		cout<<"\n\nTidak ditemukan akun ..";
}

//    	Menampilkan saldo semua akun 

void display_all()
{
	account ac;
	ifstream inFile;
	inFile.open("account.txt",ios::binary);
	if(!inFile)
	{
		cout<<"File error !";
		return;
	}
	cout<<"\n\n\t\tDAFTAR AKUN\n\n";
	cout<<"====================================================\n";
	cout<<"A/c no.      NAME       Saldo\n";
	cout<<"====================================================\n";
	while(inFile.read(reinterpret_cast (&ac), sizeof(account)))
	{
		ac.report();
	}
	inFile.close();
}

//    	Fungsi deposit dan tarik uang 

void deposit_withdraw(int n, int option)
{
	int amt;
	bool found=false;
	account ac;
	fstream File;
	File.open("account.txt", ios::binary|ios::in|ios::out);
	if(!File)
	{
		cout<<"File error !";
		return;
	}
	while(!File.eof() && found==false)
	{
		File.read(reinterpret_cast (&ac), sizeof(account));
		if(ac.retacno()==n)
		{
			ac.show_account();
			if(option==1)
			{
				cout<<"\n\nMasukkan jumlah uang : ";
				cin>>amt;
				ac.dep(amt);
			}
			if(option==2)
			{
				cout<<"\n\nMasukkan jumlah uang : ";
				cin>>amt;
				int bal=ac.retdeposit()-amt;
				if(bal<500)
					cout<<"Saldo tidak cukup";
				else
					ac.draw(amt);
			}
			int pos=(-1)*static_cast(sizeof(ac));
			File.seekp(pos,ios::cur);
			File.write(reinterpret_cast (&ac), sizeof(account));
			cout<<"\n\n\t Data diperbarui";
			found=true;
	       }
         }
	File.close();
	if(found==false)
		cout<<"\n\n Data tidak ditemukan ";
}

void intro()
{
	cout<<"\n\n\n ATM BANK MANAGEMENT SYSTEM";
	cin.get();
}
by : Andreas Galang A (5114100153)
luvne.com resepkuekeringku.com desainrumahnya.com yayasanbabysitterku.com