diff --git a/web/04/labor/04_loesungen/workshop-anmeldung.html b/web/04/labor/04_loesungen/workshop-anmeldungWrong.html similarity index 100% rename from web/04/labor/04_loesungen/workshop-anmeldung.html rename to web/04/labor/04_loesungen/workshop-anmeldungWrong.html diff --git a/web/04/labor/04_loesungen/workshop.html b/web/04/labor/04_loesungen/workshop.html index dbb9c5f..4fc3147 100644 --- a/web/04/labor/04_loesungen/workshop.html +++ b/web/04/labor/04_loesungen/workshop.html @@ -7,17 +7,17 @@

Workshopanmeldung

-
+
Persönliche Angaben:
-

+


-

+


-

+



@@ -46,10 +46,10 @@
- +
- +
diff --git a/web/06/labor/loesungen_06/swagger.yaml b/web/06/labor/loesungen_06/swagger.yaml index 42c1a2f..931ee12 100644 --- a/web/06/labor/loesungen_06/swagger.yaml +++ b/web/06/labor/loesungen_06/swagger.yaml @@ -3,7 +3,7 @@ info: title: Workshop-Anmeldung API version: 1.0.0 servers: - - url: https://web-637691723779.europe-west2.run.app + - url: http://localhost:8080 paths: /registrierung: post: diff --git a/web/07/labor/loesungen_07/Kommandozeilenprogramm/book.go b/web/07/labor/loesungen_07/Kommandozeilenprogramm/book.go new file mode 100644 index 0000000..52a6098 --- /dev/null +++ b/web/07/labor/loesungen_07/Kommandozeilenprogramm/book.go @@ -0,0 +1,79 @@ +package main + +import ( + "encoding/json" + "fmt" + "os" +) + +type Book struct { + ID int `json:"id"` + Titel string `json:"titel"` + Autor string `json:"autor"` + Read bool `json:"read"` +} + +type Library struct { + Books []Book `json:"books"` +} + +// fügt ein Buch der Library hinzu +func (l *Library) Add(titel, autor string) { + id := len(l.Books) + 1 + newBook := Book{ID: id, Titel: titel, Autor: autor, Read: false} + l.Books = append(l.Books, newBook) +} + +// Markiert ein Buch als gelesen +func (l *Library) Read(id int) { + for i := range l.Books { + if l.Books[i].ID == id { + l.Books[i].Read = true + } + } +} + +// Listet alle Bücher auf +func (l *Library) List() { + if len(l.Books) == 0 { + fmt.Println("Keine Bücher vorhanden.") + return + } + for _, b := range l.Books { + status := "ungelesen" + if b.Read { + status = "gelesen" + } + fmt.Printf("%d: %s (%s) – %s\n", b.ID, b.Titel, b.Autor, status) + } +} + +// Liste als JSON speichern +func (l *Library) Save(filename string) error { + + data, err := json.MarshalIndent(l, "", " ") + if err != nil { + return err + } + err = os.WriteFile(filename, data, 0644) + if err != nil { + return err + } + + return nil +} + +// JSON aus Datei laden +func Load(filename string) (*Library, error) { + data, err := os.ReadFile(filename) + if err != nil { + if os.IsNotExist(err) { + return &Library{}, nil + } + return nil, err + } + + var l Library + jsonErr := json.Unmarshal(data, &l) + return &l, jsonErr +} diff --git a/web/07/labor/loesungen_07/Kommandozeilenprogramm/books.json b/web/07/labor/loesungen_07/Kommandozeilenprogramm/books.json new file mode 100644 index 0000000..ca82eab --- /dev/null +++ b/web/07/labor/loesungen_07/Kommandozeilenprogramm/books.json @@ -0,0 +1,22 @@ +{ + "books": [ + { + "id": 1, + "titel": "Testbuch", + "autor": "Testautor", + "read": false + }, + { + "id": 2, + "titel": "Test2", + "autor": "222", + "read": false + }, + { + "id": 3, + "titel": "Test3", + "autor": "EEEE", + "read": false + } + ] +} \ No newline at end of file diff --git a/web/07/labor/loesungen_07/Kommandozeilenprogramm/go.mod b/web/07/labor/loesungen_07/Kommandozeilenprogramm/go.mod new file mode 100644 index 0000000..2f034c7 --- /dev/null +++ b/web/07/labor/loesungen_07/Kommandozeilenprogramm/go.mod @@ -0,0 +1,3 @@ +module kommandozeilenprogramm + +go 1.24.5 diff --git a/web/07/labor/loesungen_07/Kommandozeilenprogramm/main.go b/web/07/labor/loesungen_07/Kommandozeilenprogramm/main.go new file mode 100644 index 0000000..63fdc2a --- /dev/null +++ b/web/07/labor/loesungen_07/Kommandozeilenprogramm/main.go @@ -0,0 +1,73 @@ +package main + +// fmt für ausgaben, os für Kommandozeilenargumente, strconv um strings in ints umzuwandeln +import ( + "fmt" + "os" + "strconv" +) + +// prüfen, ob mind. 1 Kommando übergeben wurde +func main() { + if len(os.Args) < 2 { + fmt.Println("Bitte einen Befehl eingeben") + return + } + filename := "books.json" + + library, err := Load(filename) + if err != nil { + fmt.Println("Fehler beim Laden der JSON-Datai:", err.Error()) + return + } + + switch os.Args[1] { + + case "add": + // Wenn Argumente kleiner 4, Hilfe ausgeben + if len(os.Args) < 4 { + fmt.Println("Benutze: add / Titel / Autor ") + return + } + + // sonst titel = Argument 2 und autor = Argument 3 + titel := os.Args[2] + autor := os.Args[3] + + library.Add(titel, autor) + + if err := library.Save(filename); err != nil { + fmt.Println("Fehler beim Speichern:", err.Error()) + return + } + + fmt.Println("Buch hinzugefügt.") + + case "list": + library.List() + + case "read": + if len(os.Args) < 3 { + fmt.Println("Benutze: read / ID") + return + } + id, convErr := strconv.Atoi(os.Args[2]) + if convErr != nil { + fmt.Println("Die ID muss eine Zahl sein.") + return + } + + library.Read(id) + + if err := library.Save(filename); err != nil { + fmt.Println("Fehler beim Speichern:", err.Error()) + return + } + + fmt.Println("Buch als gelesen markiert.") + + default: + fmt.Println("Kein bekanntes Kommando(add/list/red") + } + +} diff --git a/web/07/labor/loesungen_07/Webserver-Programm/main.go b/web/07/labor/loesungen_07/Webserver-Programm/main.go new file mode 100644 index 0000000..77cc293 --- /dev/null +++ b/web/07/labor/loesungen_07/Webserver-Programm/main.go @@ -0,0 +1,82 @@ +package main + +import ( + "fmt" + "net/http" +) + +// Handler Funktion anlegen +// w = Antwort an Browser, r=Anfrage vom Client +func workshopHandler(w http.ResponseWriter, r *http.Request) { + + // Prüfen auf POST, Fehler falls andere Methode + if r.Method != http.MethodPost { + http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) + return + } + // ließt den Body des Requests ein und befüllt FormFalue(), sofern keine Fehler auftauchen + err := r.ParseForm() + if err != nil { + http.Error(w, "Fehler beim Einlesen des Formulars", http.StatusBadRequest) + } + // Wenn Felder die als required markiert wurden leer sind: Fehlermeldung + vorname := r.FormValue("vorname") + if vorname == "" { + http.Error(w, "Vorname fehlt", http.StatusBadRequest) + return + } + nachname := r.FormValue("nachname") + if nachname == "" { + http.Error(w, "Nachname fehlt", http.StatusBadRequest) + return + } + email := r.FormValue("email") + if email == "" { + http.Error(w, "E-Mail fehlt", http.StatusBadRequest) + return + } + handy := r.FormValue("handy") + + // Checkboxen auslesen + + agb := r.FormValue("agb") + if agb == "" { + http.Error(w, "AGBs müssen akzeptiert werden", http.StatusBadRequest) + return + } + + // newsletter und equipment beliben leer, wenn nicht angehakt + newsletter := r.FormValue("newsletter") + + equipment := r.FormValue("equipment") + + // Radio Buttons + + format := r.FormValue("format") + if format == "" { + http.Error(w, "Wählen sie ein Kursformat", http.StatusBadRequest) + return + } + + // Dropdown + + session := r.FormValue("session") + if session == "" { + http.Error(w, "Wählen sie eine Zeit aus", http.StatusBadRequest) + return + } + + fmt.Println("Vorname: ", vorname) + fmt.Println("Nachname: ", nachname) + fmt.Println("E-Mail: : ", email) + fmt.Println("Telefon: ", handy) + fmt.Fprintln(w, "POST Request funktioniert") +} + +func main() { + // Anfrage an Pfad in HTML /registrierung, worshop Handler wird aufgerufen + http.HandleFunc("/registrierung", workshopHandler) + + fmt.Println("Server läuft auf http://localhost:8080") + http.ListenAndServe(":8080", nil) +} diff --git a/web/07/labor/loesungen_07/go_einfuehrung/helloworld.go b/web/07/labor/loesungen_07/go_einfuehrung/helloworld.go new file mode 100644 index 0000000..89f378f --- /dev/null +++ b/web/07/labor/loesungen_07/go_einfuehrung/helloworld.go @@ -0,0 +1,110 @@ +package main + +import ( + "fmt" + "math" +) + +func main() { + fmt.Println("hello world") + + fmt.Println("go" + "lang") + + fmt.Println("1+1=", 1+1) + + fmt.Println("7.0/3.0 =", 7.0/3.0) + + fmt.Println("True && False", true && false) + fmt.Println("True || False", true || false) + fmt.Println(!true) + + /* hello world + golang + 1+1= 2 + 7.0/3.0 = 2.3333333333333335 + True && False false + True || False true + false */ + + var a = "initial" + var b, c int = 1, 2 + var d = true + var e int + // shorthand für Deklaration + Initialisierung + f := "apple" + + fmt.Println(a) + fmt.Println(b) + fmt.Println(c) + fmt.Println(d) + fmt.Println(e) + fmt.Println(f) + + // initial , 1, 2, true, 0, apple + + fmt.Println("---------------------------------") + + constants() + + fmt.Println("---------------------------------") + + fors() + + fmt.Println("---------------------------------") + +} + +const s string = "constant" + +func constants() { + + fmt.Println(s) + const n = 500000000 + const d = 3e20 / n + fmt.Println(int64(d)) + fmt.Println(math.Sin(n)) + + // constant,600000000000,-0.28470407323754404 + +} + +func fors() { + + i := 1 + for i <= 3 { + fmt.Println(i) + i = i + 1 + //123 + } + + fmt.Println() + + for j := 0; j < 3; j++ { + fmt.Println(j) + //0 1 2 + } + + fmt.Println() + + for i := range 3 { + fmt.Println("range", i) + + } + + fmt.Println() + + for { + fmt.Println("loop") + break + } + + fmt.Println() + + for n := range 6 { + if n%2 == 0 { + continue + } + fmt.Println(n) + } + +}