📄 AnketAnalizPastaGrafik.java .java dosyası
⬇️ İndir
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.text.DecimalFormat;
public class AnketAnalizPastaGrafik {
public static String[] soruMetinleri = {
"Menü seçimi ve yemek çeşitlerinin uygunluğu",
"Yemeklerin sunuluş biçimi",
"Yemeklerin lezzeti",
"Yemeklerin sıcaklığı",
"Yemeklerin miktarı",
"Restoran personelinin davranışı",
"Servisin kalitesi",
"Temizlik ve hijyen kurallarına uyum",
"Restoranımızı tavsiye eder misiniz?"
};
public static JPanel anaPanel = new JPanel();
private static int[][] cevapSayilari = new int[soruMetinleri.length][3];
private static int erkekSayisi = 0;
private static int kadinSayisi = 0;
private static JLabel isimLabel;
private static JLabel yasLabel;
private static JLabel cinsiyetLabel;
private static JTextField fieldIsim;
private static JTextField fieldYas;
private static JRadioButton[] cinsiyetSecenekleri;
private static JRadioButton[][] soruSecenekleri;
public static String[] sonuclar;
public AnketAnalizPastaGrafik() {
JFrame frame = new JFrame();
frame.setTitle("Restoran Memnuniyet Anketi ve Pasta Grafik Analiz JMenu | Java Blackboard [157]");
frame.setLayout(null);
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("File");
JMenuItem anketItem = new JMenuItem("Anket");
JMenu bosItem = new JMenu("Boş"); // File altında sağa açılır menü oluşturacak.
JMenuItem analizItem = new JMenuItem("Analiz");
JMenuItem exitItem = new JMenuItem("Exit");
fileMenu.add(anketItem);
fileMenu.add(bosItem);
fileMenu.addSeparator(); // Ayırıcı ekleyelim bi tane
fileMenu.add(analizItem);
fileMenu.addSeparator(); // Ayırıcı ekleyelim bi tane
fileMenu.add(exitItem);
menuBar.add(fileMenu);
int anaPanelYukseklik = 2120; // Scroll ölçüsü.
anaPanel = new JPanel();
anaPanel.setLayout(null);
anaPanel.setBackground(new Color(140, 160, 50));
anaPanel.setPreferredSize(new Dimension(1040, anaPanelYukseklik));
// anaPanel.add(anketPaneli());
JScrollPane anaPanelScroll = new JScrollPane(anaPanel);
anaPanelScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
anaPanelScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
anaPanelScroll.setBounds(50, 50, 900, 580);
// ActionListener ekleyerek "anketItem" menü öğesine tıklanınca çağrılacak metod
anketItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
anaPanel.removeAll();
anaPanel.add(anketPaneli());
anaPanel.repaint();
}
});
// ActionListener ekleyerek "analizItem" menü öğesine tıklanınca çağrılacak metod
analizItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
anaPanel.removeAll();
anaPanel.add(analizPaneli());
anaPanel.repaint();
}
});
exitItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Yöntem 1 -> Uygulamayi kapatir.
System.exit(0);
// Yöntem 2 -> belirli bir JFrame'in kapatılmasını sağlar.
// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
}
});
frame.add(anaPanelScroll);
frame.setJMenuBar(menuBar);
frame.setSize(990, 720);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static JPanel anketPaneli() {
JPanel anketPaneli = new JPanel();
anketPaneli.setLayout(null);
anketPaneli.setBackground(new Color(212, 248, 183));
anketPaneli.setBounds(20, 20, 830, 540);
// Giriş formu bileşenleri
isimLabel = new JLabel("İsim:");
isimLabel.setBounds(20, 20, 100, 30);
fieldIsim = new JTextField();
fieldIsim.setBounds(120, 20, 200, 30);
yasLabel = new JLabel("Yaş:");
yasLabel.setBounds(20, 50, 100, 30);
fieldYas = new JTextField();
fieldYas.setBounds(120, 50, 200, 30);
cinsiyetLabel = new JLabel("Cinsiyet:");
cinsiyetLabel.setBounds(20, 80, 100, 30);
ButtonGroup cinsiyetGrubu = new ButtonGroup();
cinsiyetSecenekleri = new JRadioButton[]{
new JRadioButton("Erkek"),
new JRadioButton("Kadın")
};
int cinsiyetX = 120;
int cinsiyetIndex = 0;
for (JRadioButton radio : cinsiyetSecenekleri) {
cinsiyetGrubu.add(radio);
cinsiyetSecenekleri[cinsiyetIndex].setBounds(cinsiyetX, 80, 100, 30);
anketPaneli.add(radio);
cinsiyetIndex++;
cinsiyetX+=100;
}
// Anket formu bileşenleri
soruSecenekleri = new JRadioButton[soruMetinleri.length][3];
JLabel[] soruLabel = new JLabel[soruMetinleri.length];
int soruY = 110;
int soruFark = 30;
for (int i = 0; i < soruMetinleri.length; i++) {
soruLabel[i] = new JLabel((i + 1) + ". " + soruMetinleri[i]);
soruLabel[i].setBounds(20, soruY, 400, 30);
anketPaneli.add(soruLabel[i]);
ButtonGroup soruGrubu = new ButtonGroup();
for (int j = 0; j < 3; j++) {
soruSecenekleri[i][j] = new JRadioButton(getSecenekMetni(j));
soruSecenekleri[i][j].setBounds(420+(100*j), soruY, 100, 30);
soruGrubu.add(soruSecenekleri[i][j]);
anketPaneli.add(soruSecenekleri[i][j]);
}
soruY+=soruFark;
}
// Bitir düğmesi
JButton butonBitir = new JButton("Bitir");
butonBitir.setBounds(20, soruY, 100, 30);
butonBitir.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
anketiKaydet();
}
});
anketPaneli.add(isimLabel);
anketPaneli.add(fieldIsim);
anketPaneli.add(yasLabel);
anketPaneli.add(fieldYas);
anketPaneli.add(cinsiyetLabel);
anketPaneli.add(butonBitir);
return anketPaneli;
}
private static String getSecenekMetni(int indeks) {
switch (indeks) {
case 0:
return "Çok İyi";
case 1:
return "İyi";
case 2:
return "Kötü";
default:
return "";
}
}
private static void anketiKaydet() {
try (BufferedWriter writer = new BufferedWriter(new FileWriter("src/Anket.txt", true))) {
String isimYasCinsiyet = fieldIsim.getText() + "," + fieldYas.getText() + ","+ secilenCinsiyet();
String cevap = "";
for (int i = 0; i < soruMetinleri.length; i++) {
cevap = cevap + "," + secilenSoruCevabi(soruSecenekleri[i]);
}
writer.write(isimYasCinsiyet + cevap + "\n");
JOptionPane.showMessageDialog(null, "Anket başarıyla kaydedildi!");
} catch (IOException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Anket kaydedilirken bir hata oluştu.");
}
}
private static String secilenCinsiyet() {
for (JRadioButton radio : cinsiyetSecenekleri) {
if (radio.isSelected()) {
return radio.getText();
}
}
return "Cinsiyet seçilmedi";
}
private static String secilenSoruCevabi(JRadioButton[] secenekler) {
for (JRadioButton radio : secenekler) {
if (radio.isSelected()) {
return radio.getText();
}
}
return "-1";
}
public static JPanel analizPaneli() {
JPanel analizPaneli = new JPanel();
analizPaneli.setLayout(null);
// analizPaneli.setPreferredSize(new Dimension(100, 100)); // Göstermelik bi ölçü veriyoruz...
analizPaneli.setBackground(new Color(212, 248, 183));
analizPaneli.setBounds(20, 20, 830, 2050);
Font font = new Font("Ubuntu", Font.PLAIN, 29);
// Anket.txt dosyasi her seferinde bastan okundugu için
// variable degerlerini SIFIRLIYORUZ.
erkekSayisi = 0;
kadinSayisi = 0;
for(int i = 0 ; i< soruMetinleri.length ; i++) {
for (int j = 0 ; j < 3 ; j++) {
cevapSayilari[i][j] = 0;
}
}
String[] anketDizisi = analizYap("src/Anket.txt");
System.out.println(anketDizisi[3] + "\n");
JLabel[] labelVeriInfo = new JLabel[anketDizisi.length+1];
labelVeriInfo[0] = new JLabel("Katılımcı sayısı : Erkek " + erkekSayisi + " Kadın " + kadinSayisi);
labelVeriInfo[0].setFont(font);
labelVeriInfo[0].setBounds(30, 30, 960, 50);
analizPaneli.add(labelVeriInfo[0]);
int anketSoruPanelYukseklik = 200;
int anketSoruPanelY = 100;
int anketSoruPanelFark = 15;
int herSoruPaneliGenislik = 770;
JPanel[] pastaAnketSorusu = new JPanel[soruMetinleri.length];
for(int i=0 ; i< soruMetinleri.length ; i++) {
pastaAnketSorusu[i] = new JPanel();
pastaAnketSorusu[i] = pastaGrafik(i);
pastaAnketSorusu[i].setBounds(30, anketSoruPanelY, herSoruPaneliGenislik, anketSoruPanelYukseklik);
analizPaneli.add(pastaAnketSorusu[i]);
anketSoruPanelY = anketSoruPanelY + anketSoruPanelYukseklik + anketSoruPanelFark;
}
return analizPaneli;
}
public static JPanel pastaGrafik(int anketSoruNo) {
double a = cevapSayilari[anketSoruNo][0];
double b = cevapSayilari[anketSoruNo][1];
double c = cevapSayilari[anketSoruNo][2];
JPanel panelPasta = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
double aGecici = a;
double bGecici = b;
double cGecici = c;
double total = aGecici + bGecici + cGecici;
if (total != 360.0) {
// Dilim genişliklerini orantılı olarak ayarla
double scale = 360.0 / total;
aGecici *= scale;
bGecici *= scale;
cGecici *= scale;
}
int width = getWidth();
int height = getHeight();
int diameter = Math.min(width, height) - 10;
int x = (width - diameter) / 2;
int y = (height - diameter) / 2;
int startAngle = 0;
// Sektor A Kirmizi
int extent = (int) ((a / total) * 360);
g.setColor(new Color(204, 20, 62));
g.fillArc(x, y, diameter, diameter, startAngle, extent);
startAngle += extent;
// Sektor B Mavi
extent = (int) ((b / total) * 360);
g.setColor(new Color (67, 117, 252));
g.fillArc(x, y, diameter, diameter, startAngle, extent);
startAngle += extent;
// Sektor C Sari
extent = (int) ((c / total) * 360);
g.setColor(new Color(242, 226, 5));
g.fillArc(x, y, diameter, diameter, startAngle, extent);
}
};
panelPasta.setBackground(new Color(203, 231, 248));
panelPasta.setLayout(null);
panelPasta.setBounds(0, 0, 200, 200);
Font fontAnketSorusu = new Font("Ubuntu", Font.PLAIN, 25);
JLabel labelAnketSorusu = new JLabel();
labelAnketSorusu.setFont(fontAnketSorusu);
labelAnketSorusu.setText(soruMetinleri[anketSoruNo]);
labelAnketSorusu.setBounds(225, 10, 840, 40);
int renkliKare = 35;
JPanel panelKareKirmizi = new JPanel();
panelKareKirmizi.setLayout(null);
panelKareKirmizi.setBackground(new Color(204, 20, 62));
panelKareKirmizi.setBounds(225, 60, renkliKare, renkliKare);
JPanel panelKareMavi = new JPanel();
panelKareMavi.setLayout(null);
panelKareMavi.setBackground(new Color (67, 117, 252));
panelKareMavi.setBounds(225, 110, renkliKare, renkliKare);
JPanel panelKareSari = new JPanel();
panelKareSari.setLayout(null);
panelKareSari.setBackground(new Color(242, 226, 5));
panelKareSari.setBounds(225, 160, renkliKare, renkliKare);
Font font = new Font("Ubuntu", Font.PLAIN, 30);
double toplam = a+b+c;
double oran = 0.0;
String oranMetni = "";
// Kesirli sayı formatını belirleyelim
DecimalFormat df = new DecimalFormat("#0.00");
oran = (100.0 * a) / toplam;
oranMetni = df.format(oran);
JLabel labelKirmizi = new JLabel();
labelKirmizi.setFont(font);
labelKirmizi.setText(a + " -> %" + oranMetni);
labelKirmizi.setBounds(285, 50, 300, 50);
oran = (100.0 * b) / toplam;
oranMetni = df.format(oran);
JLabel labelMavi = new JLabel();
labelMavi.setFont(font);
labelMavi.setText(b + " -> %" + oranMetni);
labelMavi.setBounds(285, 100, 300, 50);
oran = (100.0 * c) / toplam;
oranMetni = df.format(oran);
JLabel labelSari = new JLabel();
labelSari.setFont(font);
labelSari.setText(c + " -> %" + oranMetni);
labelSari.setBounds(285, 150, 300, 50);
JPanel panel = new JPanel();
panel.setLayout(null);
panel.setBackground(new Color(203, 231, 248));
panel.add(panelPasta);
panel.add(labelAnketSorusu);
panel.add(panelKareKirmizi);
panel.add(panelKareMavi);
panel.add(panelKareSari);
panel.add(labelKirmizi);
panel.add(labelMavi);
panel.add(labelSari);
panel.setBounds(50, 50, 840, 440);
return panel;
}
public static String[] analizYap(String dosyaYolu) {
try (BufferedReader okuyucu = new BufferedReader(new FileReader(dosyaYolu))) {
String satir;
while ((satir = okuyucu.readLine()) != null) {
String[] parcalar = satir.split(",");
// Cinsiyeti kontrol et
if (parcalar[2].equals("Erkek")) {
erkekSayisi++;
} else if (parcalar[2].equals("Kadın")) {
kadinSayisi++;
}
// Cevaplari al
for (int i = 3; i < parcalar.length; i++) {
if (parcalar[i].equals("Çok İyi")) {
cevapSayilari[i - 3][0]++;
} else if (parcalar[i].equals("İyi")) {
cevapSayilari[i - 3][1]++;
} else if (parcalar[i].equals("Kötü")) {
cevapSayilari[i - 3][2]++;
}
}
}
// Sonuçları oluştur
sonuclar = new String[soruMetinleri.length];
for (int i = 0; i < soruMetinleri.length; i++) {
sonuclar[i] = String.format("%s: %d çok iyi, %d iyi, %d kötü",
soruMetinleri[i], cevapSayilari[i][0], cevapSayilari[i][1], cevapSayilari[i][2]);
}
return sonuclar;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
new AnketAnalizPastaGrafik();
}
}