summaryrefslogtreecommitdiffstats
path: root/Bachelor/Systemprogrammierung in Perl/examples/buchlist.pl
blob: 2b9dad869f909dd04c61a7b491b024d7ec0ffbb9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#!c:/perl/bin/perl.exe 
my ( @Buchlist, $buchzeiger );
my ($anz);
my ($mittelwert);
my (%mfunc) = (
   1 => sub {$anz = @Buchlist; print " Die Anzahl der Buecher ist $anz \n" ; },
   2 => sub { &mittelwert; print "Der mittlere Preis betraegt $mittelpreis \n";},
   3 => \&teuer,
   4 => \&billig,
   5 => \&mittel,
   6 => \&nextBuch,
   7 => \&lastBuch,
   8 => \&searchBuch,
   9 => sub {exit();}
   );
openfile();     # File einlesen
menu();         # print menue

while ( 1 ) {
    chomp ($prompt = <STDIN>);
    if ( $mfunc{$prompt} ){
      $mfunc{$prompt}() ;
      }
    else {
        &menu;
    }
}  

sub menu {
    print <<END;
    1: Anzahl der Buecher
    2: durchschnittlicher Preis (arithmetisches Mittel)
    3: Anzahl der Buecher die teurer sind als der Durchschnitt
    4: Anzahl der Buecher, die preiswerter sind als der Durchschnitt
    5: Anzeige der Buchtitel und Preise die zwischen LOW und HIGH kosten.
    6: n�chstes Buch
    7: letztes Buch
    8: Buch Titel suchen
    9: Exit
END
}

sub openfile {
    my ( $name,$Titel, $Autor, $Verlag,$Preis, $Bestell); 
    print " geben Sie den Filenamen der Buchliste ein: ";
    $name = <STDIN>;
    open ( FILE, $name ) or die "konnte $name nicht oeffnen";
    while ( <FILE> ) {
        ($Titel, $Autor, $Verlag,$Preis, $Bestell) = split ";";
        push( @Buchlist,
                   {
                           TITEL => $Titel,
                           VERLAG => $Verlag,
                           AUTOR => $Autor,
                           PREIS => $Preis,
                           BESTELL => $Bestell 
		});
    }
    $anz = scalar @Buchlist;
    mittelwert();
    print " Es wurden $anz Buecher eingelesen \n";
} 

sub mittelwert {
    my($buch);
    $mittelpreis = 0;
   
    $anz = @Buchlist;
    foreach $buch (@Buchlist) {
        $mittelpreis += $buch->{PREIS};
    }
    $mittelpreis /= $anz;
}

sub billig {
    my ($low) = 0;
    my($buch);
    foreach $buch (@Buchlist) {
        if ( $buch->{PREIS} < $mittelpreis ) {
            print "$buch->{TITEL} \n";
            $low++;
        }
    }
    print "\nDie Anzahl der Buecher billiger als der Durchschnitt ist $low \n";
}

sub teuer {
    my ($high ) = 0;
    my ($buch );
    foreach $buch (@Buchlist) {
        if ( $buch->{PREIS} > $mittelpreis ) {
            print "$buch->{TITEL} \n";
            $high++;
        }
    }
    print "\nDie Anzahl der Buecher teurer als der Durchschnitt ist $high \n";
}

sub mittel {
    my( $lowLimit, $highLimit );
    my ($buch );
    print "untere Preisschranke ? ";
    $lowLimit = <STDIN>;
    print "obere Preisschranke ? ";
    $highLimit = <STDIN>;
    foreach $buch (@Buchlist) {
        if ( $buch->{PREIS} > $lowLimit && $buch->{PREIS} < $highLimit ) {
            print "$buch->{TITEL} \n";
        }
    }
}

sub nextBuch {
    printbuch( $Buchlist[$buchzeiger++] ) if $buchzeiger < $anz;
}

sub lastBuch {
    printbuch( $Buchlist[$buchzeiger--] ) if $buchzeiger >= 0;
}

sub searchBuch {
    my ($buch );
    my ($search );
    print "Suchbegriff : ";
    chomp ($search = <STDIN>);
    
    foreach $buch (@Buchlist) {
        print "$buch->{TITEL} \n" if $buch->{TITEL} =~ /\Q$search\E/ ;
    }  
} 
sub printbuch{
    my ($buch ) = shift @_;
    print " Titel     = $buch->{TITEL} \n";
    print " Verlag    = $buch->{VERLAG} \n";
    print " Autor     = $buch->{AUTOR} \n";
    print " Preis     = $buch->{PREIS} \n";
    print " Bestellnr = $buch->{BESTELL} \n";
    print " \n";
}