import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class gelirvergisi implements ActionListener {
JList[] jl;
DefaultListModel[] dlm;
JComboBox jcb;
JTextField jtf_gelirtop,jtf_yenigelir;
JRadioButton jrb_ocak,jrb_temmuz;
public gelirvergisi() {
JFrame jfrm = new JFrame("Gelir Vergisi - 2016");
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jfrm.setLayout(new GridLayout(1,5));
jfrm.setSize(500, 250);
JPanel[] jpn = new JPanel[5];
jl= new JList[5];
dlm=new DefaultListModel[5];
String[] baslik={"İsim","Gelir Top.","Yeni Gelir","Dönem","Vergi"};
for(int i =0; i<jpn.length;i++)
{
jpn[i]= new JPanel();
jpn[i].setPreferredSize(new Dimension(95, 295));
dlm[i]= new DefaultListModel();
jl[i]=new JList(dlm[i]);
JScrollPane jscp= new JScrollPane(jl[i]);
jscp.setPreferredSize(new Dimension(90,160));
JLabel jlab = new JLabel(baslik[i]);
jpn[i].add(jlab);
jpn[i].add(jscp); // jlist panele eklendi
jfrm.add(jpn[i]);
}
//1. sutun eklemeleri
String[] isimler ={"Seçiniz","Ahmet","Mustafa","Metin","Ayse","Fatma"};
jcb= new JComboBox(isimler);
jcb.setPreferredSize(new Dimension(90,25));
jpn[0].add(jcb);
JButton jbtn1= new JButton("Ekle");
jbtn1.addActionListener(this);
jbtn1.setActionCommand("ekle"); // buton etiketi
jbtn1.setPreferredSize(new Dimension(90,25));
jpn[0].add(jbtn1);
//2. sutun
jtf_gelirtop= new JTextField();
jtf_gelirtop.setPreferredSize(new Dimension(90,25));
jpn[1].add(jtf_gelirtop);
JButton jbtn2= new JButton("Sil");
jbtn2.addActionListener(this);
jbtn2.setPreferredSize(new Dimension(90,25));
jpn[1].add(jbtn2);
//3.sutun
jtf_yenigelir= new JTextField();
jtf_yenigelir.setPreferredSize(new Dimension(90,25));
jpn[2].add(jtf_yenigelir);
//4. sutun
ButtonGroup bg = new ButtonGroup();
jrb_ocak = new JRadioButton("Ocak");
jrb_ocak.setSelected(true);
jrb_temmuz = new JRadioButton("Temmuz");
bg.add(jrb_ocak);
bg.add(jrb_temmuz);
JPanel jpn4_1 = new JPanel();
JPanel jpn4_2 = new JPanel();
jpn4_1.setLayout(new FlowLayout(FlowLayout.LEFT));
jpn4_2.setLayout(new FlowLayout(FlowLayout.LEFT));
jpn4_1.setPreferredSize(new Dimension(90,25));
jpn4_2.setPreferredSize(new Dimension(90,25));
jpn4_1.add(jrb_ocak);
jpn4_2.add(jrb_temmuz);
jpn[3].add(jpn4_1);
jpn[3].add(jpn4_2);
jfrm.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent ae) {
if(ae.getActionCommand().equals("ekle"))
{
// ekle
int secilen_isim = jcb.getSelectedIndex();
int donem=0;
if(jrb_temmuz.isSelected())
donem=1;
double mevcutgelir,yenigelir;
try{
if(secilen_isim>0 && jtf_gelirtop.getText().length()>0 &&
jtf_yenigelir.getText().length()>0 ){
mevcutgelir=Double.parseDouble(jtf_gelirtop.getText());
yenigelir=Double.parseDouble(jtf_yenigelir.getText());
String[] donemler={"Ocak","Temmuz"};
double vergi=vergihesapla(mevcutgelir, yenigelir, donem);
dlm[0].addElement(jcb.getSelectedItem()); // isim
dlm[1].addElement(mevcutgelir); // gelir top.
dlm[2].addElement(yenigelir); // yeni gelir
dlm[3].addElement(donemler[donem]); // donem
dlm[4].addElement(vergi); // vergi
jcb.setSelectedIndex(0);
jtf_gelirtop.setText("");
jtf_yenigelir.setText("");
jrb_ocak.setSelected(true);
}
}catch(Exception ex)
{
}
}
else
{
int secilen = jl[0].getSelectedIndex();
if(secilen>-1)
{
for(int i=0;i<dlm.length;i++)
{
dlm[i].remove(secilen);
}
}
}
}
private double vergihesapla(double mevcutgelir,double yenigelir, int donem)
{
double toplamvergi=0;
double[] oranlar={0.15,0.2,0.27,0.35};
double[] ocak={12600,30000,110000};
double[] temmuz={13000,31000,120000}; // henuz belirlenmedi degerler farazi
double[] donemsiniri; // kullanilacak doneme ait sinirlar
donemsiniri=ocak;
if(donem==1)
donemsiniri=temmuz;
double anapara=mevcutgelir;
double kalan = yenigelir;
do{
int onceki=oranbul(anapara,donemsiniri);
int sonraki=oranbul(anapara+kalan,donemsiniri);
if(onceki==sonraki)
{ // durum1 : tamamini vergilendir
toplamvergi+=kalan*oranlar[onceki];
kalan=0;
}
else
{
// durum2 : sinir ustunde devam etmeli
double vergilendirilecek=donemsiniri[onceki]-anapara;
toplamvergi+=vergilendirilecek*oranlar[onceki];
anapara+=vergilendirilecek;
kalan-=vergilendirilecek;
}
}while(kalan>0);
return toplamvergi;
}
private int oranbul(double gelir,double[] sinirlar)
{
for(int i=0;i<sinirlar.length;i++)
{
if(gelir < sinirlar[i])
return i;
}
return sinirlar.length;
}
/**
* @param args
*/
public static void main(String[] args) {
new gelirvergisi();
}
}