📄 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(); } }