Assalammu’alaikum …
udah lama gag posting..
kali ini iseng posting soal Ai yang cukup aneh dan hasilnya pun saya sendiri masih bingung heuheuheu…
Soalnya sederhana, mengenai sistem panasehat keungan kemana seseorang berinvestasi.
kasus : Seorang user ingin berkonsultasi, Apakah tepat jika dia berinvestasi pada stock saham IBM ??? (ceritanya.. )
  )
nah rule yang ada atau knowledge yang di sediakan simple ajo.. yaitu :
R1 : jika A dan C, Maka E;
R2 : jika D dan C, Maka F;
R3 : jika B dan E, Maka F;
R5 : jika F , Maka G;
dengan data :
A : mempunyai minimal $10000;
B : Lebih Muda dari 30 tahun;
C : Pendidikan Stingkat Universitas;
D : Pendapatan tahunan minimal $ 40000;
E : Investasi Sekuritas;
F : Investasi Grawth Stock
G : Investasi Saham IBM;
simple kan )
 )
nah fakta sementara yg didapat pada studi kasus bahwa si user yang nekat beli saham IBM ini memiliki kriteria :
1. Mempunyai uang $1000
2. Umurnya masih dibawah 30 tahun..
nah gmn tuh c komputer bisa baca dan menentukan si user ini pantas mendapatkan yang mana? ataukah cocok jadi pengangguran sajah ??? )
 )
Bahasa yang saya pake kebetulan adalah java dengan IDE netBeans /, database MySQL, dan kebetulan pake JPA eclipse link karena lagi males bikin DAO dan lain2nya untuk berhubungan dengan service database
 /, database MySQL, dan kebetulan pake JPA eclipse link karena lagi males bikin DAO dan lain2nya untuk berhubungan dengan service database  )
 )
nah lalu jangan lupa buat databasenya dulu…
nama database : artint
table :
lalu… pertama kita bikin projectnya .. diharapkan sudah mengerti bikinnya
nah karena memakai MVC, tentunya kita bagi 3 bagian kelasnya yaitu : Model, View, dan Controller… apakah itu? karena lagi males bahas, dilewat aja dulu kali ya… 
 
kedua.. import semua library yg dibutuhkan cuman : jdbc dan JPAeclipse Link 2.0 sajah ..
  ..
trs buat class entitas dan persistence nya … dengan klik kanan projectnya ->pilih “other”->pilih “Persistence” -> Entity From Class Database
lain kali ngbahasa JPA eclipse mungkin ya /
 /
ketiga kita buat class View-nya dulu gan… seperti dibawah ini : (memakai kelas yg turunan dari JPanel) ;D
nama kelas : PanelExpert.java
ya klo bingung karena kepanjangan .. ya bikin aja panel ampe kurang lebih kaya gini :

nah kalo udah jadi, (plus udah jadi bikin methode accessor tiap2 inputan/getter dan setter)
nah sekaran bikin deh kelas controll misalnya namanya : ControlExpert.java
nah terus yang ke 4, bikin interface listener buat nyambungin si ketiga kelas td biar poolll.. kecuali hasilnya mau ditangani di kelas model aja.. 
nama file : ListenerExpert.java
owh iya ketinggalan saya buat class untuk service koneksi database yang sifatnya statis.. jd harusnya buat ini dulu :
lanjut kita buat kelas modelnya dengan nama file ModelExpert.java:
nah tinggal buat satu class JDialog, atau JFrame, kalo saya pake JDialog..
misal : FormExpert.java
trs tinggal drag semua komponen yang ada di class PanelExpert.java (class View nya) ke JDialog yg kita buat misal yang saya FormExpert.java , nanti codenya jd seperti ini :
nah kalo gini kan mudah.. Hehehhe…
jangan lupa menghubungkan setiap kelasnya agar bisa saling berkomunikasi .. seperti pada source code yang sudah saya masukan hehhe..
kira2 hasilnya nanti jadi kaya gini :

dan klo dipencet tombolnya “Tentukan Investasi yang Cocok” maka :

sekian.. mohon maaf belum bisa menjelaskan dengan detail dan dengan baik.. karena pertama saya masih belajar menulis artikel yang baik dan benar juga indah, dan kedua nulis artikelnya buru2…
lain kali saya perbaiki dan menambah beberapa bagian yang dirasa perlu dan kurang.. /
 /
semoga tulisan yang ribet , gag jelas ini dapat membantu dan bermanfaat 
 
udah lama gag posting..
kali ini iseng posting soal Ai yang cukup aneh dan hasilnya pun saya sendiri masih bingung heuheuheu…
Soalnya sederhana, mengenai sistem panasehat keungan kemana seseorang berinvestasi.
kasus : Seorang user ingin berkonsultasi, Apakah tepat jika dia berinvestasi pada stock saham IBM ??? (ceritanya..
 )
  )nah rule yang ada atau knowledge yang di sediakan simple ajo.. yaitu :
R1 : jika A dan C, Maka E;
R2 : jika D dan C, Maka F;
R3 : jika B dan E, Maka F;
R5 : jika F , Maka G;
dengan data :
A : mempunyai minimal $10000;
B : Lebih Muda dari 30 tahun;
C : Pendidikan Stingkat Universitas;
D : Pendapatan tahunan minimal $ 40000;
E : Investasi Sekuritas;
F : Investasi Grawth Stock
G : Investasi Saham IBM;
simple kan
 )
 )nah fakta sementara yg didapat pada studi kasus bahwa si user yang nekat beli saham IBM ini memiliki kriteria :
1. Mempunyai uang $1000
2. Umurnya masih dibawah 30 tahun..
nah gmn tuh c komputer bisa baca dan menentukan si user ini pantas mendapatkan yang mana? ataukah cocok jadi pengangguran sajah ???
 )
 )Bahasa yang saya pake kebetulan adalah java dengan IDE netBeans
 /, database MySQL, dan kebetulan pake JPA eclipse link karena lagi males bikin DAO dan lain2nya untuk berhubungan dengan service database
 /, database MySQL, dan kebetulan pake JPA eclipse link karena lagi males bikin DAO dan lain2nya untuk berhubungan dengan service database  )
 )nah lalu jangan lupa buat databasenya dulu…
nama database : artint
table :
1. data{no [int auto_increment primary key], Abjad [varchar(2)], Mean [varchar(100)], val [int]}
2. knowledge{no [int auto_increment primary key], rule [varchar(10)], result [varchar(10)]}
lalu… pertama kita bikin projectnya .. diharapkan sudah mengerti bikinnya

nah karena memakai MVC, tentunya kita bagi 3 bagian kelasnya yaitu : Model, View, dan Controller… apakah itu? karena lagi males bahas, dilewat aja dulu kali ya…
 
 kedua.. import semua library yg dibutuhkan cuman : jdbc dan JPAeclipse Link 2.0 sajah
 ..
  ..trs buat class entitas dan persistence nya … dengan klik kanan projectnya ->pilih “other”->pilih “Persistence” -> Entity From Class Database
lain kali ngbahasa JPA eclipse mungkin ya
 /
 /ketiga kita buat class View-nya dulu gan… seperti dibawah ini : (memakai kelas yg turunan dari JPanel) ;D
nama kelas : PanelExpert.java
| 001 | /* | 
| 002 |  * To change this template, choose Tools | Templates | 
| 003 |  * and open the template in the editor. | 
| 004 |  */ | 
| 005 | 
| 006 | /* | 
| 007 |  * PanelExpert.java | 
| 008 |  * | 
| 009 |  * Created on Nov 14, 2010, 1:42:41 PM | 
| 010 |  */ | 
| 011 | 
| 012 | package expertsystem.hendri.karisma.view; | 
| 013 | 
| 014 | import javax.swing.JComboBox; | 
| 015 | import javax.swing.JOptionPane; | 
| 016 | import javax.swing.JTextField; | 
| 017 | import expertsystem.hendri.karisma.controller.ControlExpert; | 
| 018 | import expertsystem.hendri.karisma.listener.ListenerExpert; | 
| 019 | import expertsystem.hendri.karisma.model.ModelExpert; | 
| 020 | 
| 021 | /** | 
| 022 |  * | 
| 023 |  * @author hendri | 
| 024 |  */ | 
| 025 | public class PanelExpert extends javax.swing.JPanel implements ListenerExpert { | 
| 026 | 
| 027 |     private ModelExpert model; | 
| 028 |     private ControlExpert controller; | 
| 029 | 
| 030 |     /** Creates new form PanelExpert */ | 
| 031 |     public PanelExpert() { | 
| 032 |         initComponents(); | 
| 033 | 
| 034 |         model = new ModelExpert(); | 
| 035 |         controller = new ControlExpert(); | 
| 036 | 
| 037 |         model.setListener(this); | 
| 038 |         controller.setModel(model); | 
| 039 | 
| 040 |     } | 
| 041 | 
| 042 |     /** This method is called from within the constructor to | 
| 043 |      * initialize the form. | 
| 044 |      * WARNING: Do NOT modify this code. The content of this method is | 
| 045 |      * always regenerated by the Form Editor. | 
| 046 |      */ | 
| 047 |     @SuppressWarnings("unchecked") | 
| 048 |     // | 
| 049 |     privatevoidinitComponents() { | 
| 050 | 
| 051 |         jLabel1 = newjavax.swing.JLabel(); | 
| 052 |         jLabel2 = newjavax.swing.JLabel(); | 
| 053 |         jLabel3 = newjavax.swing.JLabel(); | 
| 054 |         jLabel4 = newjavax.swing.JLabel(); | 
| 055 |         jLabel5 = newjavax.swing.JLabel(); | 
| 056 |         jLabel6 = newjavax.swing.JLabel(); | 
| 057 |         textNama = newjavax.swing.JTextField(); | 
| 058 |         textUang = newjavax.swing.JTextField(); | 
| 059 |         textUmur = newjavax.swing.JTextField(); | 
| 060 |         comboPendidikan = newjavax.swing.JComboBox(); | 
| 061 |         textPendapatan = newjavax.swing.JTextField(); | 
| 062 |         jLabel7 = newjavax.swing.JLabel(); | 
| 063 |         jLabel8 = newjavax.swing.JLabel(); | 
| 064 |         jLabel9 = newjavax.swing.JLabel(); | 
| 065 |         jButton1 = newjavax.swing.JButton(); | 
| 066 | 
| 067 |         jLabel1.setText("Masukan Data dibawah Berikut"); | 
| 068 | 
| 069 |         jLabel2.setText("Nama :"); | 
| 070 | 
| 071 |         jLabel3.setText("Jumlah Uang Yang Dimiliki :"); | 
| 072 | 
| 073 |         jLabel4.setText("Umur :"); | 
| 074 | 
| 075 |         jLabel5.setText("Tingkat Pendidikan Terakhir :"); | 
| 076 | 
| 077 |         jLabel6.setText("Pendapatan Tahunan :"); | 
| 078 | 
| 079 |         textUmur.addActionListener(newjava.awt.event.ActionListener() { | 
| 080 |             publicvoidactionPerformed(java.awt.event.ActionEvent evt) { | 
| 081 |                 textUmurActionPerformed(evt); | 
| 082 |             } | 
| 083 |         }); | 
| 084 | 
| 085 |         comboPendidikan.setModel(newjavax.swing.DefaultComboBoxModel(newString[] { "TK", "SD", "SMP", "SMA", "Perguruan Tinggi"})); | 
| 086 | 
| 087 |         jLabel7.setText("$"); | 
| 088 | 
| 089 |         jLabel8.setText("Tahun"); | 
| 090 | 
| 091 |         jLabel9.setText("$"); | 
| 092 | 
| 093 |         jButton1.setText("Tentukan Investasi yang cocok"); | 
| 094 |         jButton1.addActionListener(newjava.awt.event.ActionListener() { | 
| 095 |             publicvoidactionPerformed(java.awt.event.ActionEvent evt) { | 
| 096 |                 jButton1ActionPerformed(evt); | 
| 097 |             } | 
| 098 |         }); | 
| 099 | 
| 100 |         javax.swing.GroupLayout layout = newjavax.swing.GroupLayout(this); | 
| 101 |         this.setLayout(layout); | 
| 102 |         layout.setHorizontalGroup( | 
| 103 |             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | 
| 104 |             .addGap(0, 437, Short.MAX_VALUE) | 
| 105 |             .addGroup(layout.createSequentialGroup() | 
| 106 |                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | 
| 107 |                     .addGroup(layout.createSequentialGroup() | 
| 108 |                         .addGap(12, 12, 12) | 
| 109 |                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | 
| 110 |                             .addGroup(layout.createSequentialGroup() | 
| 111 |                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | 
| 112 |                                     .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.TRAILING) | 
| 113 |                                     .addComponent(jLabel5, javax.swing.GroupLayout.Alignment.TRAILING) | 
| 114 |                                     .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.TRAILING) | 
| 115 |                                     .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.TRAILING) | 
| 116 |                                     .addComponent(jLabel6, javax.swing.GroupLayout.Alignment.TRAILING)) | 
| 117 |                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | 
| 118 |                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | 
| 119 |                                     .addGroup(layout.createSequentialGroup() | 
| 120 |                                         .addComponent(jLabel7) | 
| 121 |                                         .addGap(4, 4, 4) | 
| 122 |                                         .addComponent(textUang, javax.swing.GroupLayout.PREFERRED_SIZE, 148, javax.swing.GroupLayout.PREFERRED_SIZE)) | 
| 123 |                                     .addComponent(textNama, javax.swing.GroupLayout.PREFERRED_SIZE, 157, javax.swing.GroupLayout.PREFERRED_SIZE) | 
| 124 |                                     .addGroup(layout.createSequentialGroup() | 
| 125 |                                         .addComponent(textUmur, javax.swing.GroupLayout.PREFERRED_SIZE, 64, javax.swing.GroupLayout.PREFERRED_SIZE) | 
| 126 |                                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) | 
| 127 |                                         .addComponent(jLabel8)) | 
| 128 |                                     .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) | 
| 129 |                                         .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() | 
| 130 |                                             .addComponent(jLabel9) | 
| 131 |                                             .addGap(3, 3, 3) | 
| 132 |                                             .addComponent(textPendapatan, javax.swing.GroupLayout.PREFERRED_SIZE, 162, javax.swing.GroupLayout.PREFERRED_SIZE)) | 
| 133 |                                         .addComponent(comboPendidikan, javax.swing.GroupLayout.PREFERRED_SIZE, 193, javax.swing.GroupLayout.PREFERRED_SIZE)))) | 
| 134 |                             .addComponent(jLabel1))) | 
| 135 |                     .addGroup(layout.createSequentialGroup() | 
| 136 |                         .addGap(114, 114, 114) | 
| 137 |                         .addComponent(jButton1))) | 
| 138 |                 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) | 
| 139 |         ); | 
| 140 |         layout.setVerticalGroup( | 
| 141 |             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | 
| 142 |             .addGap(0, 302, Short.MAX_VALUE) | 
| 143 |             .addGroup(layout.createSequentialGroup() | 
| 144 |                 .addContainerGap() | 
| 145 |                 .addComponent(jLabel1) | 
| 146 |                 .addGap(28, 28, 28) | 
| 147 |                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) | 
| 148 |                     .addComponent(jLabel2) | 
| 149 |                     .addComponent(textNama, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) | 
| 150 |                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) | 
| 151 |                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) | 
| 152 |                     .addComponent(jLabel3) | 
| 153 |                     .addComponent(textUang, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) | 
| 154 |                     .addComponent(jLabel7)) | 
| 155 |                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) | 
| 156 |                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) | 
| 157 |                     .addComponent(jLabel4) | 
| 158 |                     .addComponent(textUmur, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) | 
| 159 |                     .addComponent(jLabel8)) | 
| 160 |                 .addGap(18, 18, 18) | 
| 161 |                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) | 
| 162 |                     .addComponent(jLabel5) | 
| 163 |                     .addComponent(comboPendidikan, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) | 
| 164 |                 .addGap(18, 18, 18) | 
| 165 |                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) | 
| 166 |                     .addComponent(jLabel6) | 
| 167 |                     .addComponent(jLabel9) | 
| 168 |                     .addComponent(textPendapatan, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) | 
| 169 |                 .addGap(38, 38, 38) | 
| 170 |                 .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE) | 
| 171 |                 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) | 
| 172 |         ); | 
| 173 |     }// | 
| 174 | 
| 175 |     publicJComboBox getComboPendidikan() { | 
| 176 |         returncomboPendidikan; | 
| 177 |     } | 
| 178 | 
| 179 |     publicvoidsetComboPendidikan(JComboBox comboPendidikan) { | 
| 180 |         this.comboPendidikan = comboPendidikan; | 
| 181 |     } | 
| 182 | 
| 183 |     publicJTextField getTextNama() { | 
| 184 |         returntextNama; | 
| 185 |     } | 
| 186 | 
| 187 |     publicvoidsetTextNama(JTextField textNama) { | 
| 188 |         this.textNama = textNama; | 
| 189 |     } | 
| 190 | 
| 191 |     publicJTextField getTextPendapatan() { | 
| 192 |         returntextPendapatan; | 
| 193 |     } | 
| 194 | 
| 195 |     publicvoidsetTextPendapatan(JTextField textPendapatan) { | 
| 196 |         this.textPendapatan = textPendapatan; | 
| 197 |     } | 
| 198 | 
| 199 |     publicJTextField getTextUang() { | 
| 200 |         returntextUang; | 
| 201 |     } | 
| 202 | 
| 203 |     publicvoidsetTextUang(JTextField textUang) { | 
| 204 |         this.textUang = textUang; | 
| 205 |     } | 
| 206 | 
| 207 |     publicJTextField getTextUmur() { | 
| 208 |         returntextUmur; | 
| 209 |     } | 
| 210 | 
| 211 |     publicvoidsetTextUmur(JTextField textUmur) { | 
| 212 |         this.textUmur = textUmur; | 
| 213 |     } | 
| 214 | 
| 215 |     privatevoidtextUmurActionPerformed(java.awt.event.ActionEvent evt) { | 
| 216 |         // TODO add your handling code here: | 
| 217 | } | 
| 218 | 
| 219 |     privatevoidjButton1ActionPerformed(java.awt.event.ActionEvent evt) { | 
| 220 |         // TODO add your handling code here: | 
| 221 |         controller.activeExpert(this); | 
| 222 | } | 
| 223 | 
| 224 |     // Variables declaration - do not modify | 
| 225 |     privatejavax.swing.JComboBox comboPendidikan; | 
| 226 |     privatejavax.swing.JButton jButton1; | 
| 227 |     privatejavax.swing.JLabel jLabel1; | 
| 228 |     privatejavax.swing.JLabel jLabel2; | 
| 229 |     privatejavax.swing.JLabel jLabel3; | 
| 230 |     privatejavax.swing.JLabel jLabel4; | 
| 231 |     privatejavax.swing.JLabel jLabel5; | 
| 232 |     privatejavax.swing.JLabel jLabel6; | 
| 233 |     privatejavax.swing.JLabel jLabel7; | 
| 234 |     privatejavax.swing.JLabel jLabel8; | 
| 235 |     privatejavax.swing.JLabel jLabel9; | 
| 236 |     privatejavax.swing.JTextField textNama; | 
| 237 |     privatejavax.swing.JTextField textPendapatan; | 
| 238 |     privatejavax.swing.JTextField textUang; | 
| 239 |     privatejavax.swing.JTextField textUmur; | 
| 240 |     // End of variables declaration | 
| 241 | 
| 242 |     publicvoidonCheck(ModelExpert model) { | 
| 243 | 
| 244 |         JOptionPane.showMessageDialog(this, "Hasilnya adalah "+model.getResult()); | 
| 245 | 
| 246 |     } | 
| 247 | 
| 248 | } | 

nah kalo udah jadi, (plus udah jadi bikin methode accessor tiap2 inputan/getter dan setter)
nah sekaran bikin deh kelas controll misalnya namanya : ControlExpert.java
| 01 | /* | 
| 02 |  * To change this template, choose Tools | Templates | 
| 03 |  * and open the template in the editor. | 
| 04 |  */ | 
| 05 | package expertsystem.hendri.karisma.controller; | 
| 06 | 
| 07 | import javax.swing.JOptionPane; | 
| 08 | import expertsystem.hendri.karisma.model.ModelExpert; | 
| 09 | import expertsystem.hendri.karisma.view.PanelExpert; | 
| 10 | 
| 11 | /** | 
| 12 |  * | 
| 13 |  * @author hendri | 
| 14 |  */ | 
| 15 | publicclassControlExpert { | 
| 16 | 
| 17 |     privateModelExpert model; | 
| 18 | 
| 19 |     publicvoidsetModel(ModelExpert model) { | 
| 20 |         this.model = model; | 
| 21 |     } | 
| 22 | 
| 23 |     publicvoidactiveExpert(PanelExpert form) { | 
| 24 | 
| 25 |         String nama = form.getTextNama().getText(); | 
| 26 |         String uang = form.getTextUang().getText(); | 
| 27 |         String umur = form.getTextUmur().getText(); | 
| 28 |         String pendidikan = form.getComboPendidikan().getSelectedItem().toString(); | 
| 29 |         String pendapatan = form.getTextPendapatan().getText(); | 
| 30 |         Integer uangInt; | 
| 31 |         Integer umurInt; | 
| 32 |         Integer pendapatanInt; | 
| 33 | 
| 34 |         if(uang.equals("")) { | 
| 35 |             uangInt = newInteger(0); | 
| 36 |         } else{ | 
| 37 |             uangInt = newInteger(uang); | 
| 38 |         } | 
| 39 | 
| 40 |         if(umur.equals("")) { | 
| 41 |             umurInt = newInteger(0); | 
| 42 |         } else{ | 
| 43 |             umurInt = newInteger(umur); | 
| 44 |         } | 
| 45 |         if(pendapatan.equals("")) { | 
| 46 |             pendapatanInt = newInteger(0); | 
| 47 |         } else{ | 
| 48 |             pendapatanInt = newInteger(pendapatan); | 
| 49 |         } | 
| 50 | 
| 51 |         if(nama.equals("")) { | 
| 52 |             JOptionPane.showMessageDialog(form, "Nama tidak valid!"); | 
| 53 | 
| 54 |         } else{ | 
| 55 |             model.setNama(nama); | 
| 56 |             model.setJumlahUang(uangInt); | 
| 57 |             model.setUmur(umurInt); | 
| 58 |             model.setTingkatPendidikan(pendidikan); | 
| 59 |             model.setPendapatan(pendapatanInt); | 
| 60 |             model.onCheck(); | 
| 61 | 
| 62 |         } | 
| 63 | 
| 64 |     } | 
| 65 | } | 

nama file : ListenerExpert.java
| 01 | /* | 
| 02 |  * To change this template, choose Tools | Templates | 
| 03 |  * and open the template in the editor. | 
| 04 |  */ | 
| 05 | 
| 06 | package expertsystem.hendri.karisma.listener; | 
| 07 | 
| 08 | import expertsystem.hendri.karisma.model.ModelExpert; | 
| 09 | 
| 10 | /** | 
| 11 |  * | 
| 12 |  * @author hendri | 
| 13 |  */ | 
| 14 | publicinterfaceListenerExpert { | 
| 15 | 
| 16 |     publicvoidonCheck(ModelExpert model); | 
| 17 | 
| 18 | } | 
| 01 | /* | 
| 02 |  * To change this template, choose Tools | Templates | 
| 03 |  * and open the template in the editor. | 
| 04 |  */ | 
| 05 | 
| 06 | package expertsystem.hendri.karisma.database.service; | 
| 07 | 
| 08 | import javax.persistence.EntityManager; | 
| 09 | import javax.persistence.EntityManagerFactory; | 
| 10 | import javax.persistence.Persistence; | 
| 11 | 
| 12 | /** | 
| 13 |  * | 
| 14 |  * @author hendri | 
| 15 |  */ | 
| 16 | publicclassDatabase { | 
| 17 | 
| 18 |     privatestaticEntityManagerFactory entityManagerFactory; | 
| 19 |     privatestaticEntityManager entityManager; | 
| 20 | 
| 21 |     publicstaticEntityManagerFactory getConnection(){ | 
| 22 | 
| 23 |         if(entityManagerFactory == null){ | 
| 24 |             entityManagerFactory = Persistence.createEntityManagerFactory("ExpertSystemPU"); | 
| 25 | 
| 26 |         } | 
| 27 |         returnentityManagerFactory; | 
| 28 |     } | 
| 29 |     publicstaticEntityManager getEntityManager(){ | 
| 30 | 
| 31 |         if(entityManager == null){ | 
| 32 |             entityManager = getConnection().createEntityManager(); | 
| 33 |         } | 
| 34 | 
| 35 |         returnentityManager; | 
| 36 | 
| 37 |     } | 
| 38 | 
| 39 | } | 
| 001 | /* | 
| 002 |  * To change this template, choose Tools | Templates | 
| 003 |  * and open the template in the editor. | 
| 004 |  */ | 
| 005 | package expertsystem.hendri.karisma.model; | 
| 006 | 
| 007 | import java.util.List; | 
| 008 | import javax.persistence.EntityManager; | 
| 009 | import javax.persistence.Query; | 
| 010 | import expertsystem.hendri.karisma.database.entitas.Data; | 
| 011 | import expertsystem.hendri.karisma.database.entitas.Knowledge; | 
| 012 | import expertsystem.hendri.karisma.database.service.database; | 
| 013 | import expertsystem.hendri.karisma.listener.ListenerExpert; | 
| 014 | 
| 015 | /** | 
| 016 |  * | 
| 017 |  * @author hendri | 
| 018 |  */ | 
| 019 | publicclassModelExpert { | 
| 020 | 
| 021 |     privateString nama; | 
| 022 |     privateintjumlahUang; | 
| 023 |     privateintumur; | 
| 024 |     privateString tingkatPendidikan; | 
| 025 |     privateintpendapatan; | 
| 026 |     privateString result; | 
| 027 | 
| 028 |     publicListenerExpert getListener() { | 
| 029 |         returnlistener; | 
| 030 |     } | 
| 031 | 
| 032 |     publicvoidsetListener(ListenerExpert listener) { | 
| 033 |         this.listener = listener; | 
| 034 |     } | 
| 035 | 
| 036 |     publicString getResult() { | 
| 037 |         returnresult; | 
| 038 |     } | 
| 039 | 
| 040 |     publicvoidsetResult(String result) { | 
| 041 |         this.result = result; | 
| 042 |     } | 
| 043 |     privateListenerExpert listener; | 
| 044 | 
| 045 |     publicintgetJumlahUang() { | 
| 046 |         returnjumlahUang; | 
| 047 |     } | 
| 048 | 
| 049 |     publicvoidsetJumlahUang(intjumlahUang) { | 
| 050 |         this.jumlahUang = jumlahUang; | 
| 051 |     } | 
| 052 | 
| 053 |     publicString getNama() { | 
| 054 |         returnnama; | 
| 055 |     } | 
| 056 | 
| 057 |     publicvoidsetNama(String nama) { | 
| 058 |         this.nama = nama; | 
| 059 |     } | 
| 060 | 
| 061 |     publicintgetPendapatan() { | 
| 062 |         returnpendapatan; | 
| 063 |     } | 
| 064 | 
| 065 |     publicvoidsetPendapatan(intpendapatan) { | 
| 066 |         this.pendapatan = pendapatan; | 
| 067 |     } | 
| 068 | 
| 069 |     publicString getTingkatPendidikan() { | 
| 070 |         returntingkatPendidikan; | 
| 071 |     } | 
| 072 | 
| 073 |     publicvoidsetTingkatPendidikan(String tingkatPendidikan) { | 
| 074 |         this.tingkatPendidikan = tingkatPendidikan; | 
| 075 |     } | 
| 076 | 
| 077 |     publicintgetUmur() { | 
| 078 |         returnumur; | 
| 079 |     } | 
| 080 | 
| 081 |     publicvoidsetUmur(intumur) { | 
| 082 |         this.umur = umur; | 
| 083 |     } | 
| 084 | 
| 085 |     protectedvoidfireOnCheck() { | 
| 086 |         if(listener != null) { | 
| 087 |             listener.onCheck(this); | 
| 088 |         } | 
| 089 |     } | 
| 090 | 
| 091 |     publicvoidonCheck() { | 
| 092 | 
| 093 |         String ans = ""; | 
| 094 | 
| 095 |         EntityManager manager = database.getEntityManager(); | 
| 096 |         Query query = manager.createNamedQuery("Data.findAll"); | 
| 097 |         List data = query.getResultList(); | 
| 098 | 
| 099 |         Query queryKnowledge = manager.createNamedQuery("Knowledge.findAll"); | 
| 100 |         List know = queryKnowledge.getResultList(); | 
| 101 | 
| 102 |         if(jumlahUang > 0) { | 
| 103 |             if(jumlahUang >= data.get(0).getVal()) { | 
| 104 |                 ans = ans + data.get(0).getAbjad(); | 
| 105 |             } | 
| 106 |         } | 
| 107 |         if(umur > 0) { | 
| 108 |             if(umur < data.get(1).getVal()) {                 ans = ans + data.get(1).getAbjad();             }         }         if((!tingkatPendidikan.equals("")) && tingkatPendidikan.equals(data.get(2).getMean())) {             ans = ans + data.get(2).getAbjad();         }         if(pendapatan > 0) { | 
| 109 |             if(pendapatan >= data.get(3).getVal()) { | 
| 110 |                 ans = ans + data.get(3).getAbjad(); | 
| 111 |             } | 
| 112 |         } | 
| 113 | 
| 114 |         intr1 = 0; | 
| 115 | 
| 116 |         for(inti = 0; i < know.size(); i++) {             r1 = ans.indexOf(know.get(i).getRule().charAt(0));             if(know.get(i).getRule().length() >= 2) { | 
| 117 |                 intr2 = ans.indexOf(know.get(i).getRule().charAt(1)); | 
| 118 |                 if((r1 > -1) && (r2 > -1)) { | 
| 119 | 
| 120 |                     r2 = ans.indexOf(know.get(i).getResult()); | 
| 121 | 
| 122 |                     if(r2 == -1) { | 
| 123 |                         ans = ans + know.get(i).getResult(); | 
| 124 |                         i = -1; | 
| 125 | 
| 126 |                     } | 
| 127 |                 } | 
| 128 |             } else{ | 
| 129 |                 if(r1 > -1) { | 
| 130 |                     r1 = ans.indexOf(know.get(i).getResult()); | 
| 131 | 
| 132 |                     if(r1 <= -1) { | 
| 133 |                         ans = ans + know.get(i).getResult(); | 
| 134 |                         i = -1; | 
| 135 | 
| 136 |                     } | 
| 137 |                 } | 
| 138 |             } | 
| 139 | 
| 140 |         } | 
| 141 | 
| 142 |         for(inti = 0; i < data.size(); i++) { | 
| 143 |             r1 = ans.indexOf(data.get(i).getAbjad()); | 
| 144 |             if(r1 != -1) { | 
| 145 |                 setResult(data.get(i).getMean() + " dengan urutan "+ ans); | 
| 146 |             } | 
| 147 |         } | 
| 148 |         fireOnCheck(); | 
| 149 | 
| 150 |     } | 
| 151 | } | 
misal : FormExpert.java
trs tinggal drag semua komponen yang ada di class PanelExpert.java (class View nya) ke JDialog yg kita buat misal yang saya FormExpert.java , nanti codenya jd seperti ini :
| 01 | /* | 
| 02 |  * To change this template, choose Tools | Templates | 
| 03 |  * and open the template in the editor. | 
| 04 |  */ | 
| 05 | 
| 06 | /* | 
| 07 |  * FormExpert.java | 
| 08 |  * | 
| 09 |  * Created on Nov 14, 2010, 1:57:56 PM | 
| 10 |  */ | 
| 11 | 
| 12 | package expertsystem.hendri.karisma.view; | 
| 13 | 
| 14 | /** | 
| 15 |  * | 
| 16 |  * @author hendri | 
| 17 |  */ | 
| 18 | public class FormExpert extends javax.swing.JDialog { | 
| 19 | 
| 20 |     /** Creates new form FormExpert */ | 
| 21 |     public FormExpert(java.awt.Frame parent, boolean modal) { | 
| 22 |         super(parent, modal); | 
| 23 |         initComponents(); | 
| 24 |     } | 
| 25 | 
| 26 |     /** This method is called from within the constructor to | 
| 27 |      * initialize the form. | 
| 28 |      * WARNING: Do NOT modify this code. The content of this method is | 
| 29 |      * always regenerated by the Form Editor. | 
| 30 |      */ | 
| 31 |     @SuppressWarnings("unchecked") | 
| 32 |     // | 
| 33 |     private void initComponents() { | 
| 34 | 
| 35 |         panelExpert1 = new expertsystem.hendri.karisma.view.PanelExpert(); | 
| 36 | 
| 37 |         setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); | 
| 38 | 
| 39 |         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); | 
| 40 |         getContentPane().setLayout(layout); | 
| 41 |         layout.setHorizontalGroup( | 
| 42 |             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | 
| 43 |             .addGroup(layout.createSequentialGroup() | 
| 44 |                 .addComponent(panelExpert1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) | 
| 45 |                 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) | 
| 46 |         ); | 
| 47 |         layout.setVerticalGroup( | 
| 48 |             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) | 
| 49 |             .addGroup(layout.createSequentialGroup() | 
| 50 |                 .addContainerGap() | 
| 51 |                 .addComponent(panelExpert1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) | 
| 52 |                 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) | 
| 53 |         ); | 
| 54 | 
| 55 |         pack(); | 
| 56 |     }// | 
| 57 | 
| 58 |     /** | 
| 59 |     * @param args the command line arguments | 
| 60 |     */ | 
| 61 |     publicstaticvoidmain(String args[]) { | 
| 62 |         java.awt.EventQueue.invokeLater(newRunnable() { | 
| 63 |             publicvoidrun() { | 
| 64 |                 FormExpert dialog = newFormExpert(newjavax.swing.JFrame(), true); | 
| 65 |                 dialog.addWindowListener(newjava.awt.event.WindowAdapter() { | 
| 66 |                     publicvoidwindowClosing(java.awt.event.WindowEvent e) { | 
| 67 |                         System.exit(0); | 
| 68 |                     } | 
| 69 |                 }); | 
| 70 |                 dialog.setVisible(true); | 
| 71 |             } | 
| 72 |         }); | 
| 73 |     } | 
| 74 | 
| 75 |     // Variables declaration - do not modify | 
| 76 |     privatesystemexpert.hendri.karisma.view.PanelExpert panelExpert1; | 
| 77 |     // End of variables declaration | 
| 78 | 
| 79 | } | 
jangan lupa menghubungkan setiap kelasnya agar bisa saling berkomunikasi .. seperti pada source code yang sudah saya masukan hehhe..
kira2 hasilnya nanti jadi kaya gini :

dan klo dipencet tombolnya “Tentukan Investasi yang Cocok” maka :

sekian.. mohon maaf belum bisa menjelaskan dengan detail dan dengan baik.. karena pertama saya masih belajar menulis artikel yang baik dan benar juga indah, dan kedua nulis artikelnya buru2…
lain kali saya perbaiki dan menambah beberapa bagian yang dirasa perlu dan kurang..
 /
 /semoga tulisan yang ribet , gag jelas ini dapat membantu dan bermanfaat
 
  
 
 
 

 
