package cfcsubs use Data::Dumper; use Storable; use POSIX; use Time::Local # this file contains important subroutines required for the # campus forecast contest system # TODO: global variables: @contestdate, $season_name, %user_data, %abs_pts, %verif # FIXME - in calling script, make sure hashes that needed to be passed to each other are global variables "our %user_data" sub create_user { # this module adds a user to the forecast contest database my($username,$firstname,$lastname,$uid,$password) = @_; my $cdate; $user_data{"$username"} = { 'firstname' => "$firstname", 'lastname' => "$lastname", 'uid' => "$uid", 'password' => "$password" } # add absent information for middle of contest additions foreach $cdate ( @contestdate ) { $user_data{"$username"}->{"$cdate"}->{"hi"} = '***'; $user_data{"$username"}->{"$cdate"}->{"lo"} = '***'; $user_data{"$username"}->{"$cdate"}->{"pop"} = '***'; $user_data{"$username"}->{"$cdate"}->{"hi_err"} = $abs_pts{"$cdate"}->{"hi_err"}; $user_data{"$username"}->{"$cdate"}->{"lo_err"} = $abs_pts{"$cdate"}->{"lo_err"}; $user_data{"$username"}->{"$cdate"}->{"pop_err"} = $abs_pts{"$cdate"}->{"pop_err"}; $user_data{"$username"}->{"$cdate"}->{"tot_err"} = $abs_pts{"$cdate"}->{"tot_err"}; $user_data{"$username"}->{"$cdate"}->{"day_rank"} = $abs_pts{"$cdate"}->{"day_rank"}; $user_data{"$username"}->{"$cdate"}->{"abs"} = '1'; $user_data{"$username"}->{"$season_name"}->{"num_abs"} ++; $user_data{"$username"}->{"$season_name"}->{"tot_ssn_err"} += $user_info{"$username"}->{"$cdate"}->{"tot_err"} $user_data{"$username"}->{"$season_name"}->{"hi_ssn_err"} += $user_info{"$username"}->{"$cdate"}->{"hi_err"} $user_data{"$username"}->{"$season_name"}->{"lo_ssn_err"} += $user_info{"$username"}->{"$cdate"}->{"lo_err"} $user_data{"$username"}->{"$season_name"}->{"pop_ssn_err"} += $user_info{"$username"}->{"$cdate"}->{"pop_err"} } return; } sub season_rank { # sort the user_data hash, and apply a rank to the season score my $rank $last_score $user; $rank = 1; $last_score = 0; for $user ( sort { $user_data{$a}{"$season_name"}{'tot_ssn_err'} <=> $user_data{$b}{"$season_name"}{'tot_ssn_err'} ) { if ( $user_data{$username}{"$season_name"}{"tot_ssn_err"} > $last_score ) { $user_data{$username}{"$season_name"}{"rank"} = $rank; $last_score = $user_data{$username}{"$season_name"}{"tot_ssn_err"}; $rank = $rank + 1; } elsif ( $user_data{$username}{"$season_name"}{"tot_ssn_err"} == $last_score ) { $user_data{$username}{"$season_name"}{"rank"} = $rank; } } return; } sub score_day { # scores a contest day my $condate = @_; } 1;