diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..eec0749 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,93 @@ + +# Created by https://www.gitignore.io/api/intellij +# Edit at https://www.gitignore.io/?templates=intellij + +### Intellij ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +.idea/**/sonarlint/ + +# SonarQube Plugin +.idea/**/sonarIssues.xml + +# Markdown Navigator plugin +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator/ + +# End of https://www.gitignore.io/api/intellij diff --git a/README.md b/README.md index eb2425b..5d3f69b 100644 --- a/README.md +++ b/README.md @@ -1 +1,2 @@ -arbeitszeiterfassung +# Arbeitszeiterfassung +![Aufgabenblatt](img/Arbeitszeiterfassung.png) \ No newline at end of file diff --git a/img/Arbeitszeiterfassung.png b/img/Arbeitszeiterfassung.png new file mode 100644 index 0000000..9753375 Binary files /dev/null and b/img/Arbeitszeiterfassung.png differ diff --git a/src/gfn/marc/Main.java b/src/gfn/marc/Main.java new file mode 100644 index 0000000..8648362 --- /dev/null +++ b/src/gfn/marc/Main.java @@ -0,0 +1,117 @@ +package gfn.marc; + +import java.time.YearMonth; + +public class Main { + + // Testdaten + static int[][] zeiten = { + {2, 480}, + {2, 1_040}, + {3, 470}, + {6, 480}, + {6, 960}, + {7, 990}, + {8, 480}, + {8, 960}, + {30, 990} + }; + + public static void main(String[] args) { + int persnr = 12345; + erzeugeListe(persnr, zeiten, 2013, 5); + } + + // zu programmierende Methode + static void erzeugeListe(int persnr, int[][] zeiten, int jahr, int monat) { + + int anwesenheitMonat = 0; + int tag = 1; + schreibeKopfzeile(persnr, jahr, monat); + for (int i = 0; tag <= tageImMonat(monat, jahr); ) { + int min1 = -1; + int min2 = -1; + int anwesenheitTag = -1; + String bemerkung = ""; + + if (i < zeiten.length && zeiten[i][0] == tag) { + min1 = zeiten[i][1]; + } + if (i + 1 < zeiten.length && zeiten[i + 1][0] == tag) { + min2 = zeiten[i + 1][1]; + } + if (min1 == -1 ^ min2 == -1) { + bemerkung = "eine Buchung fehlt"; + i++; + } + if (min1 != -1 && min2 != -1) { + anwesenheitTag = min2 - min1; + anwesenheitMonat += anwesenheitTag; + i += 2; + } + if (min1 == -1 && min2 == -1) + bemerkung = "nicht anwesend"; + + + schreibeZeile(tag, min1, min2, anwesenheitTag, bemerkung); + tag++; + } + + schreibeFusszeile(anwesenheitMonat); + + } + + // gegebene Methoden + static int tageImMonat(int monat, int jahr) { + YearMonth yearMonth = YearMonth.of(jahr, monat); + return yearMonth.lengthOfMonth(); + } + + static void schreibeKopfzeile(int persnr, int jahr, int monat) { + String[] monate = {"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", + "Oktober", "November", "Dezember"}; + System.out.println("\nMitarbeiter: " + persnr + " " + monate[monat + 1] + " " + jahr + "\n"); + System.out.println("Tag Kommen Gehen Anwesenheit Bemerkung"); + System.out.println("========================================================"); + } + + static void schreibeZeile(int tag, int min1, int min2, int anwesenheitTag, String bemerkung) { + String kommen = " "; + String gehen = " "; + String anwesenheit = "00:00"; + String tagString = tag < 10 ? " " + tag : "" + tag; + if (min1 != -1) { + int h = min1 / 60; + int m = min1 % 60; + String stunde = h < 10 ? "0" + h : "" + h; + String minute = m < 10 ? "0" + m : "" + m; + kommen = stunde + ":" + minute + " "; + } + if (min2 != -1) { + int h = min2 / 60; + int m = min2 % 60; + String stunde = h < 10 ? "0" + h : "" + h; + String minute = m < 10 ? "0" + m : "" + m; + gehen = stunde + ":" + minute + " "; + } + if (anwesenheitTag != -1) { + int h = anwesenheitTag / 60; + int m = anwesenheitTag % 60; + String stunde = h < 10 ? "0" + h : "" + h; + String minute = m < 10 ? "0" + m : "" + m; + anwesenheit = stunde + ":" + minute; + } + System.out.println(tagString + " " + kommen + " " + gehen + " " + anwesenheit + " " + bemerkung); + } + + static void schreibeFusszeile(int anwesenheitMonat) { + int h = anwesenheitMonat / 60; + int m = anwesenheitMonat % 60; + String stunde = h < 10 ? "0" + h : "" + h; + String minute = m < 10 ? "0" + m : "" + m; + System.out.println("========================================================"); + System.out.println("Summe Anwesenheit: " + stunde + ":" + minute); + } + +} +