From 5fd0ee406eb14e2826cba264fd8b32f4646a6c49 Mon Sep 17 00:00:00 2001 From: Joel Baldauf Date: Fri, 11 Dec 2020 16:00:01 +0100 Subject: [PATCH] added totalAP2Calc and comments --- Punkte-in-Noten/src/frame.java | 113 +++++++++++++++++++++++---------- 1 file changed, 80 insertions(+), 33 deletions(-) diff --git a/Punkte-in-Noten/src/frame.java b/Punkte-in-Noten/src/frame.java index d4f3946..47a8ff1 100644 --- a/Punkte-in-Noten/src/frame.java +++ b/Punkte-in-Noten/src/frame.java @@ -1,6 +1,6 @@ +//Import der für die GUI benötigten Bibliotheken import java.awt.BorderLayout; import java.awt.EventQueue; - import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; @@ -23,18 +23,21 @@ import javax.swing.table.DefaultTableModel; import java.awt.Font; import javax.swing.event.ChangeListener; import javax.swing.SpinnerModel; + + public class frame extends JFrame { + //Deklaration von Content Pane, der Tabelle sowie des Scroll Panes; werden später gefüllt private JPanel contentPane; private JTable table; private JScrollPane scrollPane; - // Array mit den IHK-Noten als Konstante. Das jeweilige Arrayfeld entspricht der Prozentanzahl + // Array mit den IHK-Noten. Das jeweilige Arrayfeld entspricht der Prozentanzahl. Schlüsselwort final entspricht const (Konstante) public static final double marksIHK[] = {6.0,6.0,6.0,6.0,6.0,6.0,5.9,5.9,5.9,5.9,5.9,5.9,5.8,5.8,5.8,5.8,5.8,5.7,5.7,5.7,5.7,5.7,5.7,5.6,5.6,5.6,5.6,5.6,5.6,5.5,5.4,5.4,5.3,5.3,5.2,5.2,5.1,5.1,5.0,5.0,5.0,4.9,4.9,4.8,4.8,4.7,4.7,4.6,4.6,4.5,4.4,4.4,4.3,4.3,4.2,4.1,4.1,4.0,4.0,3.9,3.9,3.8,3.7,3.7,3.6,3.6,3.5,3.4,3.3,3.3,3.2,3.1,3.1,3.0,2.9,2.9,2.8,2.7,2.7,2.6,2.5,2.4,2.3,2.2,2.1,2.0,2.0,1.9,1.8,1.7,1.6,1.5,1.4,1.4,1.3,1.3,1.2,1.2,1.1,1.1,1.0}; /** - * Launch the application. + * Launch the application. - automatisch generiert vom Eclipse Windowsbuilder */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @@ -49,69 +52,105 @@ public class frame extends JFrame { }); } + //Methode zum Berechnen der Prozente + IHK-Noten + //Übergeben werden: die maximale Punktanzahl + wieviel Prozent die maximalen Punkte entsprechen + //Ausgegeben wird ein Array, was später in die Tabellenspalten geschrieben wird public static String[][] calculateMarks (int maxPoints, int totalPercentage) { int pointPercentage = 0; double markIHK = 0.0; String[][] output = new String[maxPoints+1][4]; + //Ausrechnen und Aufbereiten der Ergebnisse als Array für die Tabelle for (int point=maxPoints; point>=0; point--) { pointPercentage = (int) (((double)point/(double)maxPoints)*(double)totalPercentage); markIHK = marksIHK[pointPercentage]; if (totalPercentage == 100) { - output[maxPoints-point][0] = Integer.toString(point); - output[maxPoints-point][1] = Integer.toString(pointPercentage) + " %"; - output[maxPoints-point][2] = String.format("%.1f", markIHK); - output[maxPoints-point][3] = String.format("%.0f", markIHK); + output[maxPoints-point][0] = String.format("%d", point); //Punkte + output[maxPoints-point][1] = String.format("%d %%", pointPercentage); //Prozente + output[maxPoints-point][2] = String.format("%.1f", markIHK); //IHK-Note + output[maxPoints-point][3] = String.format("%.0f", markIHK); //ganze Note } else { - output[maxPoints-point][0] = Integer.toString(point); - output[maxPoints-point][1] = Integer.toString(pointPercentage) + " %"; + output[maxPoints-point][0] = String.format("%d", point); //Punkte + output[maxPoints-point][1] = String.format("%d %%", pointPercentage); //Prozente } } - return output; + return output; //Rückgabe des Arrays } - public void updateTable(JSpinner spMaxPoints, JSpinner spTotalPercentage) { - String[][] resWiso = calculateMarks((int)spMaxPoints.getValue(), (int)spTotalPercentage.getValue()); - String[] columnNames = {"Punkte", - "Prozente", - "IHK-Note", - "ganze Note" - }; + //Methode zum Anzeigen bzw. Aktualisieren der Tabelle + //Übergeben werden: Die eingegebenen Werte für die Maximale Punktezahl und für die Prozente + public void updateTable(int maxPoints, int totalPercentage) { + String[][] res = calculateMarks(maxPoints, totalPercentage); //Aufruf der Methode zum Berechnen und Zwischenspeicherung in res + String[] columnNames = {"Punkte", "Prozente", "IHK-Note", "ganze Note"}; //Spaltennamen für die Tabelle - table = new JTable(resWiso, columnNames) { + table = new JTable(res, columnNames) { @Override - public boolean isCellEditable(int row, int column) { + public boolean isCellEditable(int row, int column) { //Editieren der Tabelle für alle Zellen deaktivieren return false; } }; - table.setRowSelectionAllowed(false); + table.setRowSelectionAllowed(false); //Zeilenauswahl für die Tabelle deaktivieren - scrollPane.setViewportView(table); + scrollPane.setViewportView(table); //Anzeigen der Tabelle im ScrollPane } - - public String[] calculatePart(int pointsA, int pointsB, int maxPointsA, int maxPointsB, int percentageA, int percentageB, boolean mitIHK) { + //Methode zum Zusammenrechnen eines A- und B-Teils einer AP1 oder AP2 + //Übergeben werden: die erreichten Punkte im A-Teil, die erreichten Punkte im B-Teil, die erreichbaren Punkte im A-Teil, die erreichbaren Punkte im B-Teil, die prozentuale Gewichtung des A-Teils, die prozentuale Gewichtung des B-Teils + public String[] calculatePart(int pointsA, int pointsB, int maxPointsA, int maxPointsB, int percentageA, int percentageB) { + //Umrechnung der übergebenen Prozente in Faktoren double calcPercentageA = (double)percentageA/(double)100; double calcPercentageB = (double)percentageB/(double)100; + + //Berechnung der gewichteten erreichten Prozente in Teil A und B double percentagePartA = (calcPercentageA*(double)pointsA/(double)maxPointsA)*(double)100; double percentagePartB = (calcPercentageB*(double)pointsB/(double)maxPointsB)*(double)100; + + //Zusammenrechnen zu einem Gesamtergebnis (max. 100%) double totalPercentage = percentagePartA + percentagePartB; + //heraussuchen der entsprechenden IHK-Note aus dem Array double markIHK = marksIHK[(int)totalPercentage]; + + //Initialisierung eines Arrays zum zwischenspeichern der Ergebnisse String[] res = new String[6]; + //Speichern der Ergebnisse im Array res[0] = String.format("%.2f", percentagePartA); res[1] = String.format("%.2f", percentagePartB); res[2] = String.format("%.2f", totalPercentage); res[3] = String.format("%.0f", totalPercentage); res[4] = String.format("%.2f", markIHK); res[5] = String.format("%.0f", markIHK); - return res; + return res; //Rückgabe der Ergebnisse als Array } + + //Methode zum Zusammenrechnen der einzelnen AP2-Teile + //Übergaben werden: Ein Array mit den Gewichtungen der einzelnen Teile, ein Array mit den erreichten Prozenten der einzelnen Teile (ungewichtet) + public int calculateTotal(int[]w, int percentage[]) { + String[] res = new String[6]; //Array zum Speichern der Ergebnisse + double[] temp = new double[w.length]; //Array für Zwischenergebnisse + int totalPercentage = 0; //Variable für das Endergebnis + + // For-Schleife für alle Prüfungsteile + for (int i=0; i