Advertisement
Guest User

Warenwirtschaftssystem für Computerbase

a guest
Jan 28th, 2014
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 5.20 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "bytes"
  5.     "fmt"
  6.     "text/template"
  7. )
  8.  
  9. var tmpWWSMenu = template.Must(template.New("wws").Parse(tmpWWSMenuStr))
  10. var tmpWWSMenuStr = `
  11. **************************
  12. * Warenwirtschaftssystem *
  13. **************************
  14.  
  15. {{with .}}Optionen{{else}}Sorry keine Optionen implementiert :/{{end}}
  16. {{range $i,$opt := .}}{{if $i}} {{$i}}: {{$opt.Bezeichner}}
  17. {{end}}{{end}}
  18. {{range $i,$opt := .}}{{if $i}}{{else}} {{$i}}: {{$opt.Bezeichner}}{{end}}{{end}}
  19. `
  20.  
  21. type Option struct {
  22.     Bezeichner string
  23.     Funktion   func()
  24. }
  25.  
  26. var Options []*Option
  27. var menuMessage string
  28.  
  29. var produkte *Produkte
  30. var kunden *Kunden
  31.  
  32. func init() {
  33.     produkte = &Produkte{
  34.         Produkte: []*Produkt{},
  35.         ids:      make(map[int]struct{}),
  36.     }
  37.     kunden = &Kunden{
  38.         Kunden: []*Kunde{},
  39.         ids:    make(map[int]struct{}),
  40.     }
  41.  
  42.     Options = []*Option{
  43.         &Option{"beenden", func() { fmt.Println("beenden") }},
  44.         &Option{"Neues Produkt eingeben", func() { produkte.Add() }},
  45.         &Option{"Neuen Kunden eingeben", func() { kunden.Add() }},
  46.         &Option{"Kunden ausgeben", func() { kunden.Print() }},
  47.         &Option{"Produkte ausgeben", func() { produkte.Print() }},
  48.         &Option{"Rabattliste", func() { fmt.Println("nicht gemacht da kein bock mehr :)") }},
  49.     }
  50.     var buffer bytes.Buffer
  51.     tmpWWSMenu.Execute(&buffer, Options)
  52.     menuMessage = (&buffer).String()
  53. }
  54.  
  55. func main() {
  56.     for len(Options) > 0 {
  57.         opt, err := optionSelection()
  58.         if err != nil {
  59.             errorHandling(err)
  60.         } else {
  61.             if opt == Options[0] {
  62.                 break
  63.             } else {
  64.                 opt.Funktion()
  65.             }
  66.         }
  67.     }
  68.  
  69.     fmt.Println("Programm wurde beendet.")
  70. }
  71.  
  72. func errorHandling(err error) {
  73.     fmt.Println("\n>> Folgender Fehler ist aufgetreten:", err)
  74.     fmt.Println("\nWeiter durch beliebige Taste.")
  75.     fmt.Scanln()
  76. }
  77.  
  78. func optionSelection() (*Option, error) {
  79.     var selectedOption int
  80.     fmt.Printf("%s", menuMessage)
  81.     fmt.Print("Auswahl: ")
  82.     _, err := fmt.Scanf("%d\n", &selectedOption)
  83.     if err != nil {
  84.         return nil, err
  85.     }
  86.     if selectedOption < 0 || selectedOption >= len(Options) {
  87.         return nil, fmt.Errorf("Die Option %d ist unbekannt!", selectedOption)
  88.     }
  89.     return Options[selectedOption], nil
  90. }
  91.  
  92. type Produkt struct {
  93.     id    int
  94.     name  string
  95.     preis float32
  96. }
  97. type Produkte struct {
  98.     Produkte []*Produkt
  99.     ids      map[int]struct{}
  100. }
  101.  
  102. func (ps *Produkte) Add() {
  103.     var frage string
  104.     for {
  105.         fmt.Println("Ein Produkt hinzufügen? [j/n]")
  106.         if _, err := fmt.Scanf("%s\n", &frage); err != nil {
  107.             errorHandling(err)
  108.             continue
  109.         } else {
  110.             if frage != "j" && frage != "J" {
  111.                 break
  112.             }
  113.             fmt.Println("\n\n")
  114.         }
  115.  
  116.         var p = Produkt{}
  117.         fmt.Print("Einzigartige ID: ")
  118.         if _, err := fmt.Scanf("%d\n", &p.id); err != nil {
  119.             errorHandling(err)
  120.             continue
  121.         }
  122.  
  123.         if _, exists := ps.ids[p.id]; exists {
  124.             errorHandling(fmt.Errorf("Die Produkt ID existiert bereits!"))
  125.             continue
  126.         }
  127.  
  128.         fmt.Print("Name: ")
  129.         if _, err := fmt.Scanf("%s\n", &p.name); err != nil {
  130.             errorHandling(err)
  131.             continue
  132.         }
  133.         if len(p.name) == 0 {
  134.             errorHandling(fmt.Errorf("Der Name `%s` is zu kurz!", p.name))
  135.             continue
  136.         }
  137.  
  138.         fmt.Print("Preis: ")
  139.         if _, err := fmt.Scanf("%f\n", &p.preis); err != nil {
  140.             errorHandling(err)
  141.             continue
  142.         }
  143.         if p.preis < 0 {
  144.             errorHandling(fmt.Errorf("Negative Preise sind nicht möglich"))
  145.             continue
  146.         }
  147.  
  148.         // add product to the list
  149.         ps.ids[p.id] = struct{}{}
  150.         ps.Produkte = append(ps.Produkte, &p)
  151.     }
  152. }
  153.  
  154. func (ps *Produkte) Print() {
  155.     fmt.Printf("%4s | %15s | %8s\n", "ID", "Name", "Preis")
  156.     fmt.Println("---------------------------------")
  157.     for _, p := range ps.Produkte {
  158.         fmt.Printf("%4d | %15s | %8.2f\n", p.id, p.name, p.preis)
  159.     }
  160. }
  161.  
  162. type Kunde struct {
  163.     id                int
  164.     vorname, nachname string
  165. }
  166.  
  167. type Kunden struct {
  168.     Kunden []*Kunde
  169.     ids    map[int]struct{}
  170. }
  171.  
  172. func (ks *Kunden) Add() {
  173.     var frage string
  174.     for {
  175.         fmt.Println("Ein neuen Kunden hinzufügen? [j/n]")
  176.         if _, err := fmt.Scanf("%s\n", &frage); err != nil {
  177.             errorHandling(err)
  178.             continue
  179.         } else {
  180.             if frage != "j" && frage != "J" {
  181.                 break
  182.             }
  183.             fmt.Println("\n\n")
  184.         }
  185.  
  186.         var k = Kunde{}
  187.         fmt.Print("Einzigartige ID: ")
  188.         if _, err := fmt.Scanf("%d\n", &k.id); err != nil {
  189.             errorHandling(err)
  190.             continue
  191.         }
  192.  
  193.         if _, exists := ks.ids[k.id]; exists {
  194.             errorHandling(fmt.Errorf("Die Kunden ID existiert bereits!"))
  195.             continue
  196.         }
  197.  
  198.         fmt.Print("Vorname: ")
  199.         if _, err := fmt.Scanf("%s\n", &k.vorname); err != nil {
  200.             errorHandling(err)
  201.             continue
  202.         }
  203.         if len(k.vorname) == 0 {
  204.             errorHandling(fmt.Errorf("Der Vorname `%s` ist nicht gültig!", k.vorname))
  205.             continue
  206.         }
  207.  
  208.         fmt.Print("Nachname: ")
  209.         if _, err := fmt.Scanf("%s\n", &k.nachname); err != nil {
  210.             errorHandling(err)
  211.             continue
  212.         }
  213.         if len(k.nachname) == 0 {
  214.             errorHandling(fmt.Errorf("Der Nachname `%s` ist nicht gültig!", k.nachname))
  215.             continue
  216.         }
  217.  
  218.         // add customer to list
  219.         ks.ids[k.id] = struct{}{}
  220.         ks.Kunden = append(ks.Kunden, &k)
  221.     }
  222. }
  223.  
  224. func (ks *Kunden) Print() {
  225.     fmt.Printf("%4s | %15s | %15s\n", "ID", "Vorname", "Nachname")
  226.     fmt.Println("----------------------------------------")
  227.     for _, k := range ks.Kunden {
  228.         fmt.Printf("%4d | %15s | %15s\n", k.id, k.vorname, k.nachname)
  229.     }
  230. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement