Listing Program
1. Mainform.cs
/* * Created by SharpDevelop. * User: asus * Date: 7/23/2014 * Time: 4:51 PM ** To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; namespace AHPTest { /// <summary> /// Description of MainForm. /// </summary>
public partial class MainForm : Form {
string [] kriteria = new string[] {"IMK","Usia Mentoring","Training Pengurus","Hafalan Al-Qur'an","Jumlah Kelompok Mentoring"};//poin-poin kriteria
string [] alternatif = new string[] {"Amat
Baik","Baik","Cukup","Kurang"};//poin-poin alternatif setiap kriteria
AHPTest.Data m_kriteria;//variabel yang menyimpan nilai matriks dan eigen vektor dari kriteria
List<Data> m_alternatif;//variabel yang menyimpan nilai matriks dan eigen vektor dari alternatif
float [][] matriks;//matriks sementara untuk menampung nilai yang diinput user
data_pen [][] data_sat; string [] bidang;
pengumpulan.hasil [] data_hasil; Nilai y;
public MainForm() {
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
inisialisasi_tabel();//memulai membuat tabel sebagai tempat input nilai perbandingan
m_alternatif = new List<Data>();
data_sat = new MainForm.data_pen[2][]; bidang = new string[]{"Kaderisasi,",
"Syiar", "KW", "Akkom", "LSO-IT"}; //
// TODO: Add constructor code after the InitializeComponent() call. // } void inisialisasi_tabel() {
if (button1.Text == "Simpan Kriteria")//jika teks tombol seperti kondisi ini
{
dg.Columns.Add("C0","");//menambah 1 kolompada tabel,ada 2 parameter,nilai CO sebagai nama kolom, nilai "" sebagai headertext
dg.Rows.Insert(0,"");//menambah 1 baris pada tabel,ada 2 parameter, satu index baris, satu lagi nilai isi sel di kolom pertama di baris tersebut
dg[0,0].Value = "";//nilai dari sel [kolom ke-,baris ke-]
= 1;i<kriteria.Length+1;i++)//membuat tabel matriks dengan ukuran = jumlah kriteria
{
dg.Columns.Add("C"+i.ToString(),""); dg.Rows.Insert(i,kriteria[i-1]); dg[i,0].Value = kriteria[i-1]; dg[i,i].Value = "1"; } } else { dg.Columns.Add("C0",""); dg.Rows.Insert(0,""); dg[0,0].Value = ""; for (int i
= 1;i<alternatif.Length+1;i++)//membuat tabel matriks dengan ukuran = jumlah poin alternatif
{
dg.Columns.Add("C"+i.ToString(),""); dg.Rows.Insert(i,alternatif[i-1]); dg[i,0].Value = alternatif[i-1]; dg[i,i].Value = "1";
} } }
void DgCellValidated(object sender, DataGridViewCellEv entArgs e)//ketika suatu user mengisi suatu sel, maka sel yang merupakan perbandingan terbalik dari sel tsb akan otomatis terisi dgn nilai 1/sel
{ try{ dg[e.RowIndex,e.ColumnIndex].Value = (1/float.Parse(dg[e.ColumnIndex,e.RowIndex].Value.ToString() )).ToString(); } catch{ }
}
void Button1Click(object sender, EventArgs e) {
if (button1.Text == "Simpan Kriteria") {
matriks
= new float[kriteria.Length][];//membuat ukuran matriks for (int i = 0;i<kriteria.Length;i++) {
matriks[i] = new float[kriteria.Length];// membuat ukuran sub matriks
for (int j = 0;j<kriteria.Length;j++) {
matriks[i][j] = float.Parse(dg[j+1,i+1
].Value.ToString());//memindahkan nilai dari tabel ke matriks dengan iterasi sebanyak poin poin yang dibandingkan
} }
m_kriteria
= new Data(kriteria,matriks);//membuat tempat baru bagi variable m_kriteria untuk menyimpan nilai matriks dan poin poin kriteria
dg.Rows.Clear();//membersihkan baris, agar bisa digunakan oleh alternatif
dg.Columns.Clear();//membersihkan kolom button1.Text = "Simpan Alternatif";//teks berganti
inisialisasi_tabel();//lakukan kembali inisialisasi
}
else if (button1.Text == "Simpan Alternatif") {
matriks
= new float[alternatif.Length][];//hampir sama, yang ini untuk menyimapn alternatif
for (int i = 0;i<alternatif.Length;i++) {
for (int j = 0;j<alternatif.Length;j++) {
matriks[i][j] = float.Parse(dg[j+1,i+1
].Value.ToString()); } }
for (int i = 0;i<kriteria.Length;i++) { m_alternatif.Add(new Data(alternatif,matri ks)); } button1.Text = "Selesai"; }
else if (button1.Text == "Selesai") {
pengumpulan x
= new pengumpulan(m_kriteria,m_alternatif);//membuat form untuk mengumpulkan data
x.ShowDialog();//menampilkannya
data_hasil = x.da;//variabel yang menyimpan data data calon
y
= new Nilai(data_hasil,m_kriteria,m_alternatif);//membuat form hasil menampilkan hasil dari peritungan AHP
y.ShowDialog();//menampilkannya. dg.Rows.Clear();
dg.Columns.Clear(); //dg.Rows.Add();
dg.Columns.Add("C","Nama/Bidang"); for (int i = 0;i<5;i++)
{
dg.Rows.Insert(i,data_hasil[(y.kandidat[i] .index/2)-1].nama);
dg.Columns.Add("C",bidang[i]); }
data_sat[0] = new data_pen[5]; button1.Text = "Tahap 2";
dg.CellValidated -= DgCellValidated; }
else if (button1.Text == "Tahap 2") {
for (int i = 0;i<5;i++) {
data_sat[0][i].nama = dg[0,i].Value.ToString();
data_sat[0][i].index = 0; data_sat[0][i].free = true;
data_sat[0][i].prio = new List<sbyte>(); int max; for (int j = 0;j<5;j++) { max = 4-j; for (int k = 0;k<5;k++) { if (sbyte.Parse(dg[k+1,i].Value.To String()) == (sbyte)max) { data_sat[0][i].prio.Add((sbyte )k); break; } } } } dg.Rows.Clear(); dg.Columns.Clear(); dg.Columns.Add("C","Bidang/Nama"); for (int i = 0;i<5;i++)
{
dg.Columns.Add("C",data_hasil[(y.kandidat[ i].index/2)-1].nama);
dg.Rows.Insert(i,bidang[i]); }
data_sat[1] = new data_pen[5]; button1.Text = "Proses..."; }
{
for (int i = 0;i<5;i++) {
data_sat[1][i].nama = dg[0,i].Value.ToString();
data_sat[1][i].index = 0; data_sat[1][i].free = true;
data_sat[1][i].prio = new List<sbyte>(); int max; for (int j = 0;j<5;j++) { max = 5-j; for (int k = 0;k<5;k++) { if (sbyte.Parse(dg[k+1,i].Value.To String()) == (sbyte)max) { data_sat[1][i].prio.Add((sbyte )k); break; } } } } gale_shapley(); } }
public struct data_pen {
public string nama { get; set; } public List<sbyte> prio { get; set; } public sbyte index { get; set; } public bool free { get; set; } }
sbyte ind = 0; void gale_shapley() {
{
if (data_sat[1][data_sat[0][ind].prio[data_sat [0][ind].index]].free)
{
data_sat[1][data_sat[0][ind].prio[data_sat [0][ind].index]].index = ind;
data_sat[1][data_sat[0][ind].prio[data_sat [0][ind].index]].free = false;
data_sat[0][ind].free = false;
} else {
for (int i = 0;i<5;i++) {
if (data_sat[1][data_sat[0][ind].prio[ data_sat[0][ind].index]].prio[i] == ind)
{
data_sat[1][data_sat[0][ind].prio[ data_sat[0][ind].index]].index = ind;
data_sat[0][ind].free = false; break;
}
else if (data_sat[1][data_sat[0][ind]. prio[data_sat[0][ind].index]].prio[i] ==
data_sat[1][data_sat[0][ind].prio[data_sat[0][ind].index]].ind ex)
break; }
}
data_sat[0][ind].index++;
MessageBox.Show(data_sat[1][data_sat[0][ind].p rio[data_sat[0][ind].index]].index.ToString()+" :
"+data_sat[0][data_sat[1][data_sat[0][ind].prio[data_sat[0][in d].index]].index].nama);
}
dg.Columns.Clear(); dg.Rows.Clear();
dg.Columns.Add("C","Kandidat"); for (int i = 0;i<5;i++)
{
dg.Rows.Add();
dg[0,i].Value = data_sat[1][i].nama; dg[1,i].Value =
data_sat[0][data_sat[1][i].index].nama; }
}
bool t_hab() {
for (int i = 0;i<5;i++) {
if (data_sat[0][i].free == true) { ind = (sbyte)i; return true; } } return false; } } }
2. Pengumpulan.cs
/* * Created by SharpDevelop. * User: asus * Date: 7/21/2014 * Time: 6:10 PM ** To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; using System.Drawing; using System.Collections.Generic; using System.Windows.Forms;
using System.Threading; namespace AHPTest { /// <summary> /// Description of pengumpulan. /// </summary>
public partial class pengumpulan : Form {
Data krit;
List<Data>alternatif; int count = 1;
public hasil [] da;
public pengumpulan(Data krit,List<Data>alternatif) {
//
// The InitializeComponent() call is required for Windows Forms designer support.
// InitializeComponent(); this.krit = krit; this.alternatif = alternatif; generate(); //
// TODO: Add constructor code after the InitializeComponent() call. // } void generate() { DataGridViewComboBoxColumn x1;
dg.Columns.Insert(0,new DataGridViewTextBoxColumn( ));
dg.Columns[0].HeaderText = "No.";
dg.Columns.Insert(1,new DataGridViewTextBoxColumn( ));
dg.Columns[1].HeaderText = "Nama Kandidat"; for (int i = 2;i<alternatif.Count+2;i++) {
x1 = new DataGridViewComboBoxColumn(); x1.DataSource = alternatif[i-2].keterangan; x1.FlatStyle = FlatStyle.Flat; x1.HeaderText = krit.keterangan[i-2]; dg.Columns.Insert(i,x1); //dg.Rows.Add(); } /*x1 = new DataGridViewComboBoxColumn(); x1.DataSource = alternatif[alternatif.Count-1].keterangan; x1.FlatStyle = FlatStyle.Flat; x1.HeaderText = krit[0].keterangan[krit[0].keterangan.Length-1]; dg.Columns.Insert(alternatif.Count+1,x1);*/ /*string [] bidang = new
string[]{"Kaderisasi","Syiar","Kewirausahaan","Akkom","LSO-IT"};
string [] nomor = new string[]{"1","2","3","4","5"}; for (int i = 1;i<6;i++) { x1 = new DataGridViewComboBoxColumn(); x1.DataSource = nomor; x1.FlatStyle = FlatStyle.Flat; x1.HeaderText = bidang[i-1]; dg.Columns.Insert(alternatif.Count+i+1,x1); }*/
/*for (int i = 2;i<alternatif.Count+7;i++) { dg.Columns[i].Width = 1107/(alternatif.Count+6); } dg.Columns[0].Width = 40; dg.Columns[1].Width = (2*(1107/(alternatif.Count+6)))-40;*/ dg.Rows.Add();
dg.Rows[0].Cells[0].Value = "1";
void Button1Click(object sender, EventArgs e) {
count++;
dg.Rows.Add();
dg.Rows[count-1].Cells[0].Value = count.ToString();
}
public struct hasil {
public string nama { get; set; } public int [] nilai_p { get; set; } /*public string [] minat { get; set; } public bool habis { get; set; }
public bool free { get; set; } public int index { get; set; }*/ }
void Button2Click(object sender, EventArgs e) {
DataGridViewComboBoxCell x1; //float jumlah = 0f;
da = new hasil[count];
for (int i = 0;i<count;i++) {
da[i].nilai_p = new int[krit.keterangan.Length]; da[i].nama =
dg.Rows[i].Cells[1].Value.ToString();
for (int j = 2;j<alternatif.Count+2;j++) { x1 = (DataGridViewComboBoxCell)dg[j,i]; da[i].nilai_p[j-2] = x1.Items.IndexOf(dg[j,i].Value.ToString()); //MessageBox.Show(j.ToString()); //MessageBox.Show((alternatif[i].prioritas [x1.Items.IndexOf(dg[j,i].Value.ToString())]).ToString());
}
/*da[i].minat = new string [] {dg[alternatif.Count+2,i].Value.ToString(), dg[alternatif. Count+3,i].Value.ToString(), dg[alternatif. Count+4,i].Value.ToString(), dg[alternatif. Count+5,i].Value.ToString(), dg[alternatif. Count+6,i].Value.ToString()}; //MessageBox.Show(i.ToString()); da[i].index = 0; da[i].free = true; da[i].habis = false; pb1.Value = (100*(i+1))/count; Thread.Sleep(300);*/ } } } }
3. Nilai.cs
/* * Created by SharpDevelop. * User: asus * Date: 7/23/2014 * Time: 6:04 PM ** To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; using System.Drawing; using System.Windows.Forms; using System.Collections.Generic; namespace AHPTest {
/// <summary>
/// Description of Nilai. /// </summary>
public partial class Nilai : Form {
pengumpulan.hasil [] data_hasil; Data m_krit;
List<Data> m_altern; public juara [] kandidat;
public Nilai(pengumpulan.hasil [] data_hasil,Data m_krit,List<Data> m_altern)
{ //
// The InitializeComponent() call is required for Windows Forms designer support.
// InitializeComponent(); this.data_hasil = data_hasil; this.m_krit = m_krit; this.m_altern = m_altern; inisialisasi_tabel2(); //
// TODO: Add constructor code after the InitializeComponent() call. // } void inisialisasi_tabel() { dg.Columns.Add("C0","Nama Kandidat"); int hitung = 0;
while (hitung < m_krit.keterangan.Length) { dg.Columns.Add("C"+(hitung+1).ToString(),"Nila i Alt"/*m_krit.keterangan[hitung]*/); dg.Columns.Add("C"+(hitung+2).ToString(),"Nila i Alt"); hitung++; } dg.Columns.Add("C"+hitung.ToString(),"Total");
int hitung1; int bantu ;
for (int i = 0;i<data_hasil.Length;i++) {
dg.Rows.Add();
dg[0,i].Value = data_hasil[i].nama; hitung1 = 0;
bantu = 1;
while (hitung1 < hitung) { dg[bantu++,i].Value = m_krit.prioritas[hitung1].ToString("N4"); dg[bantu++,i].Value = m_altern[hitung1].prioritas[data_hasil[i].nilai_p[hitung1]].To String("N4"); //MessageBox.Show(bantu.ToString()); hitung1++; } } } void inisialisasi_tabel2() { dg.Columns.Add("C0","Peserta"); dg.Columns[0].Width = 120; dg.Columns.Add("C1",""); dg.Rows.Insert(0,""); dg[0,0].Value = "Kriteria";
dg[1,0].Value = "Eigen Vector(e)";
for (int i =1;i<m_krit.keterangan.Length+1;i++) { dg.Rows.Insert(i,m_krit.keterangan[i-1]); dg[1,i].Value = (m_krit.prioritas[i-1]*100f).ToString("N4"); } dg.Rows.Insert(m_krit.keterangan.Length+1, "Total" ); int k = 0; int bantu = 1;
float jlh; while (k<data_hasil.Length) { jlh = 0; dg.Columns.Add("C",data_hasil[k].nama); dg.Columns.Add("C",""); bantu+=2;
dg[bantu-1,0].Value = "Nilai Peserta(n)"; dg[bantu,0].Value = "e x n";
dg.Columns[bantu].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; dg.Columns[bantu].Width = 50; for (int j = 1;j<m_krit.keterangan.Length+1;j++) {
dg[bantu-1,j].Value =
(m_altern[j-1].prioritas[data_hasil[k].nilai_p[j-1
]]/m_altern[j-1].prioritas[0]).ToString("N4");
dg[bantu,j].Value =
((m_altern[j-1].prioritas[data_hasil[k].nilai_p[j-1
]]/m_altern[j-1].prioritas[0])*m_krit.prioritas[j-1]*100f).ToString("N2"); jlh += float.Parse(dg[bantu,j].Value.ToStr ing()); } if (k%2 == 0) { dg.Columns[bantu-1].DefaultCellStyle.BackColor = Color.Gray; dg.Columns[bantu].DefaultCellStyle.BackCol or = Color.Gray; } else { dg.Columns[bantu-1].DefaultCellStyle.BackColor = Color.White; dg.Columns[bantu].DefaultCellStyle.BackCol or = Color.White; }
dg[bantu,6].Value = jlh.ToString(); k++;
}
kandidat = new juara[5]; for (int i =0;i<5;i++) {
kandidat[i].index = 0; kandidat[i].jumlah = 0f;
for (int j = 3;j<bantu+2;j+=2) if (i == 0) { if (float.Parse(dg[j,6].Value.ToString()) > kandidat[i].jumlah) { kandidat[i].jumlah = float.Parse(dg[j,6].Value.ToString()); kandidat[i].index = (sbyte)j; } } else { if ((float.Parse(dg[j,6].Value.ToString()) > kandidat[i].jumlah) && (float.Parse(dg[j,6].Value.ToString() ) <= kandidat[i-1].jumlah) && (sbyte)j !=
kandidat[i-1].index ) { kandidat[i].jumlah = float.Parse(dg[j,6].Value.ToString()); kandidat[i].index = (sbyte)j; } } } //MessageBox.Show(juara[4].ToString()); dg.Columns[kandidat[0].index].DefaultCellStyle.Bac kColor = Color.DarkOrange; dg.Columns[kandidat[0
].index-1].DefaultCellStyle.BackColor = Color.DarkOrange; dg.Columns[kandidat[1].index].DefaultCellStyle.Bac kColor = Color.DodgerBlue; dg.Columns[kandidat[1 ].index-1].DefaultCellStyle.BackColor = Color.DodgerBlue; dg.Columns[kandidat[2].index].DefaultCellStyle.Bac kColor = Color.DarkGray; dg.Columns[kandidat[2 ].index-1].DefaultCellStyle.BackColor = Color.DarkGray; dg.Columns[kandidat[3].index].DefaultCellStyle.Bac kColor = Color.DarkOrchid; dg.Columns[kandidat[3 ].index-1].DefaultCellStyle.BackColor = Color.DarkOrchid; dg.Columns[kandidat[4].index].DefaultCellStyle.Bac kColor = Color.DarkOliveGreen; dg.Columns[kandidat[4 ].index-1].DefaultCellStyle.BackColor = Color.DarkOliveGreen; }
public struct juara {
public sbyte index; public float jumlah; } } }
4. Data.cs
/* * Created by SharpDevelop. * User: asus * Date: 7/23/2014 * Time: 5:39 PM ** To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
namespace AHPTest {
/// <summary>
/// Inilah variabel yang menyimpan nilai matriks, serta memunyai fungsi untuk memrosesnya dengan algoritma AHP. /// </summary>
public class Data {
public string [] keterangan;//variabel penyimpan bacaan keterangan
float [][] matriks;//variabel penympan matriks float [] kolom;//untuk menyimpan nilai setiap kolom public float [] prioritas;//menyiman nilai eigenvektor yang merupakan nilai prioritas
float [][] temp;//matriks pembantu mencari nilai cr public float CR;//variabel nilai inkonsistensi
public Data(string [] keterangan, float [][] matriks) {
this.keterangan = keterangan;//memindahkan nilai yang ada di parameter keterangan ke variabel keterangan form ini (nilai parameter ini adalah nilai dari form sebelumnya) this.matriks = matriks;//memindahkan nilai yang ada di parameter matriks ke matriks keterangan form ini kolom = new float[keterangan.Length];//membuat tempat nilai yang bisa ditampung kolom sepanjang jumlah poin-poin
prioritas = new float[keterangan.Length];//membuat tempat nilai bagi eigen vektor
temp = new float[keterangan.Length][]; for (int i= 0;i<keterangan.Length;i++) {
temp[i] = new float[keterangan.Length]; } proses(); }
void proses()//algoritma AHP {
float jlh = 0f,eigen = 0f;//jlh sebagai penampung nilai setiap baris, eigen disini bukan eigen vektor, tapi eigen value
for (int i = 0;i<kolom.Length;i++)//proses untuk mencari jumlah nilai setiap kolom
{
for (int j =0;j<kolom.Length;j++) { kolom[i] += float.Parse(matriks[j][i].ToSt ring("N4")); } }
for (int i = 0;i<kolom.Length;i++)//proses membagi nilai setiap sel dengan jumlah nilai kolom yang bersesuaian {
for (int j =0;j<kolom.Length;j++) { temp[j][i] = float.Parse((float.Parse((mat riks[j][i]).ToString("N4")) / kolom[i]).ToString("N4")); } }
for (int i = 0;i<kolom.Length;i++)//proses untuk mencari jumlah nilai setiap baris
{
for (int j =0;j<kolom.Length;j++) {
jlh += temp[i][j]; }
prioritas[i] = float.Parse((jlh/(float)kolom.L ength).ToString("N4"));//Nilai eigen vektor dari suatu poin = nilai jumlah baris dari poin yang bersangkutan/banyaknya poin-poin
kolom[i] = 0f; }
for (int i = 0;i<kolom.Length;i++) {
for (int j =0;j<kolom.Length;j++) {
temp[j][i] = float.Parse ((matriks[j][i] * prioritas[i]).ToString("N4"));
} }
for (int i = 0;i<kolom.Length;i++) {
for (int j =0;j<kolom.Length;j++) { kolom[i] += temp[i][j]; } kolom[i] /= prioritas[i]; }
for (int i = 0;i<kolom.Length;i++) { jlh += kolom[i]; } eigen = jlh/(float)kolom.Length; float CI = (eigen-(float)kolom.Length)/(float)kolom.Length; float RC = 0f; if ((float)kolom.Length == 4f) RC = 0.9f; else RC = 1.12f;
CR = (CI/RC)*100f; //MessageBox.Show("CR = "+CR.ToString()+"%",prioritas[0].ToString("N4")); //MessageBox.Show((prioritas[0]).ToString("N4")+": "+(prioritas[1]).ToString("N4")+":"+(prioritas[2]).ToString("N 4")+":"+(prioritas[3]).ToString("N4")); } } }