从 db 值计算 perl cgi
Calculations from db values perl cgi
我试图通过获取学生的成绩和他们 class 的学分并计算它来获取计算学生的 gpa。我遇到一个问题,它没有正确计算 creditsEarned 和 GPA。对于 U 或 F 的等级,获得的学分应该为 0,但这不是输出结果。我不确定我的陈述有什么问题。
#!/usr/bin/perl
#This is going to be the user login check and will set a cookie
use DBI;
use CGI qw(:standard);
use strict;
#Connection error
sub showErrorMsgAndExit {
print header(), start_html(-title=>shift);
print (shift);
print end_html();
exit;
}
#Connecting to the database
my $dbUsername = "root";
my $dbPassword = "password";
my $dsn = "DBI:mysql:f18final:localhost";
my $dbh = DBI->connect($dsn, $dbUsername, $dbPassword, {PrintError => 0});
#error checking
if(!$dbh) {
print header(), start_html(-title=>"Error connecting to DB");
print ("Unable to connec to the database");
print end_html();
exit;
}
print header;
print start_html(-title=>'Edit Classes');
#Need to execute sql command and then iterate row by row
my $sql = "SELECT * FROM tblclasses";
my $sth = $dbh->prepare($sql);
$sth->execute();
my $passedCredits = 0;
my $attemptedCredits = 0;
my $totalHonor = 0;
my $gpa = 0.000;
##SSSssssssearch part
print "<table border=solid 1px>"; #start of table
print "<tr><th>Class Name</th><th>Department</th><th>Class Number</th><th>Grade</th><th>Credits</th>";
print "</tr>";
while( my @row = $sth->fetchrow_array) {
print "<tr><td>";
print $row[1];
print "</td>";
print "<td>";
print $row[2];
print "</td>";
print "<td>";
print $row[3];
print "</td>";
print "<td>";
print $row[4];
print "</td>";
print "<td>";
print $row[5];
print "</td>";
$attemptedCredits = $attemptedCredits + $row[5];
if($row[4] == 'A' || $row[4] == 'a') {
$passedCredits = $passedCredits + $row[5];
$gpa = $gpa + (4 * $row[5]);
}
elsif($row[4] == 'B' || $row[4] == 'b') {
$passedCredits = $passedCredits + $row[5];
$gpa = $gpa + (3 * $row[5]);
}
elsif($row[4] == 'C' || $row[4] == 'c') {
$passedCredits = $passedCredits + $row[5];
$gpa = $gpa + (2 * $row[5]);
}
elsif($row[4] == 'D' || $row[4] == 'd') {
$passedCredits = $passedCredits + $row[5];
$gpa = $gpa + (1 * $row[5]);
}
elsif($row[4] == 'F' || $row[4] == 'f') {
}
elsif($row[4] == 'S' || $row[4] == 's') {
$passedCredits = $passedCredits + $row[5];
}
elsif($row[4] == 'U' || $row[4] == 'u') {
}
#calculate
print "</tr>";
}
print "</table>";
#Need to make a table and populate it with text boxes of all the class data
print "</table>"; #End of table
$gpa = $gpa / $attemptedCredits;
##RReturn values
print qq{
<table border = '1px solid'>
<tr>
<td>
Attempted Credits
</td>
<td>
Passed Credits
</td>
<td>
GPA
</td>
</tr>
<tr>
<td>
$attemptedCredits
</td>
<td>
$passedCredits
</td>
<td>
$gpa
</td>
</tr>
</table>
};
print "<form action=http://localhost/cgi-bin/actions.pl method = 'post' >";
print "<input type = 'submit' name = 'submit' value = 'More Options'>";
print "</form>";
print "<form action=http://localhost/cgi-bin/searchingTran.pl method = 'post' >";
print "<input type = 'text' name = 'search' size = '25'><br>";
print "<input type = 'submit' name = 'submit' value = 'Search'>";
print "</form>";
print end_html();
这是我的输出
还有没有办法将 GPA 打印到小数点后三位?
For the grade of U or F the credits earned should be 0 but that is not what the output is.
当您生成输出时,您甚至在查看成绩之前就打印了 $row[5]
的内容。要将其正确显示为 0,您需要先检查成绩,然后打印 0
(如果成绩为 "F" 或 "U")或 $row[5]
(如果成绩是别的)。
在实际代码中,我建议使用模板系统(例如Template::Toolkit)而不是直接打印出HTML,这将有助于避免此类错误,但我看到这看起来像是家庭作业,我怀疑使用这样的替代方法是否在作业范围内。
Also is there a way to print GPA out to three decimal places?
使用printf
或sprintf
:
$gpa = sprintf('%0.3f', $gpa / $attemptedCredits);
我试图通过获取学生的成绩和他们 class 的学分并计算它来获取计算学生的 gpa。我遇到一个问题,它没有正确计算 creditsEarned 和 GPA。对于 U 或 F 的等级,获得的学分应该为 0,但这不是输出结果。我不确定我的陈述有什么问题。
#!/usr/bin/perl
#This is going to be the user login check and will set a cookie
use DBI;
use CGI qw(:standard);
use strict;
#Connection error
sub showErrorMsgAndExit {
print header(), start_html(-title=>shift);
print (shift);
print end_html();
exit;
}
#Connecting to the database
my $dbUsername = "root";
my $dbPassword = "password";
my $dsn = "DBI:mysql:f18final:localhost";
my $dbh = DBI->connect($dsn, $dbUsername, $dbPassword, {PrintError => 0});
#error checking
if(!$dbh) {
print header(), start_html(-title=>"Error connecting to DB");
print ("Unable to connec to the database");
print end_html();
exit;
}
print header;
print start_html(-title=>'Edit Classes');
#Need to execute sql command and then iterate row by row
my $sql = "SELECT * FROM tblclasses";
my $sth = $dbh->prepare($sql);
$sth->execute();
my $passedCredits = 0;
my $attemptedCredits = 0;
my $totalHonor = 0;
my $gpa = 0.000;
##SSSssssssearch part
print "<table border=solid 1px>"; #start of table
print "<tr><th>Class Name</th><th>Department</th><th>Class Number</th><th>Grade</th><th>Credits</th>";
print "</tr>";
while( my @row = $sth->fetchrow_array) {
print "<tr><td>";
print $row[1];
print "</td>";
print "<td>";
print $row[2];
print "</td>";
print "<td>";
print $row[3];
print "</td>";
print "<td>";
print $row[4];
print "</td>";
print "<td>";
print $row[5];
print "</td>";
$attemptedCredits = $attemptedCredits + $row[5];
if($row[4] == 'A' || $row[4] == 'a') {
$passedCredits = $passedCredits + $row[5];
$gpa = $gpa + (4 * $row[5]);
}
elsif($row[4] == 'B' || $row[4] == 'b') {
$passedCredits = $passedCredits + $row[5];
$gpa = $gpa + (3 * $row[5]);
}
elsif($row[4] == 'C' || $row[4] == 'c') {
$passedCredits = $passedCredits + $row[5];
$gpa = $gpa + (2 * $row[5]);
}
elsif($row[4] == 'D' || $row[4] == 'd') {
$passedCredits = $passedCredits + $row[5];
$gpa = $gpa + (1 * $row[5]);
}
elsif($row[4] == 'F' || $row[4] == 'f') {
}
elsif($row[4] == 'S' || $row[4] == 's') {
$passedCredits = $passedCredits + $row[5];
}
elsif($row[4] == 'U' || $row[4] == 'u') {
}
#calculate
print "</tr>";
}
print "</table>";
#Need to make a table and populate it with text boxes of all the class data
print "</table>"; #End of table
$gpa = $gpa / $attemptedCredits;
##RReturn values
print qq{
<table border = '1px solid'>
<tr>
<td>
Attempted Credits
</td>
<td>
Passed Credits
</td>
<td>
GPA
</td>
</tr>
<tr>
<td>
$attemptedCredits
</td>
<td>
$passedCredits
</td>
<td>
$gpa
</td>
</tr>
</table>
};
print "<form action=http://localhost/cgi-bin/actions.pl method = 'post' >";
print "<input type = 'submit' name = 'submit' value = 'More Options'>";
print "</form>";
print "<form action=http://localhost/cgi-bin/searchingTran.pl method = 'post' >";
print "<input type = 'text' name = 'search' size = '25'><br>";
print "<input type = 'submit' name = 'submit' value = 'Search'>";
print "</form>";
print end_html();
这是我的输出
还有没有办法将 GPA 打印到小数点后三位?
For the grade of U or F the credits earned should be 0 but that is not what the output is.
当您生成输出时,您甚至在查看成绩之前就打印了 $row[5]
的内容。要将其正确显示为 0,您需要先检查成绩,然后打印 0
(如果成绩为 "F" 或 "U")或 $row[5]
(如果成绩是别的)。
在实际代码中,我建议使用模板系统(例如Template::Toolkit)而不是直接打印出HTML,这将有助于避免此类错误,但我看到这看起来像是家庭作业,我怀疑使用这样的替代方法是否在作业范围内。
Also is there a way to print GPA out to three decimal places?
使用printf
或sprintf
:
$gpa = sprintf('%0.3f', $gpa / $attemptedCredits);