Question

In: Computer Science

Enhance the Future Value application Modify this application so it uses a persistent session to save...

Enhance the Future Value application

Modify this application so it uses a persistent session to save the last values entered by the user for 2 weeks..

Index.php

--------------------------

<?php
    //set default value of variables for initial page load
    if (!isset($investment)) { $investment = '10000'; }
    if (!isset($interest_rate)) { $interest_rate = '5'; }
    if (!isset($years)) { $years = '5'; }
?>
<!DOCTYPE html>
<html>
<head>
    <title>Future Value Calculator</title>
    <link rel="stylesheet" type="text/css" href="main.css"/>
</head>

<body>
    <main>
    <h1>Future Value Calculator</h1>
    <?php if (!empty($error_message)) { ?>
        <p class="error"><?php echo $error_message; ?></p>
    <?php } // end if ?>
    <form action="display_results.php" method="post">

        <div id="data">
        
            <label>Investment Amount:</label>
            <select name="investment">
                <?php for ($i = 10000; $i <= 50000; $i += 5000) : ?>
                    <option value="<?php echo $i; ?>">
                        <?php echo number_format($i); ?></option>
                <?php endfor; ?>
            </select><br>
        
        
            <label>Yearly Interest Rate:</label>
            <select name="interest_rate">
                <?php for ($i = 4; $i <= 12; $i += 0.5) : ?>
                    <option value="<?php echo $i; ?>">
                        <?php echo number_format($i, 2); ?></option>
                <?php endfor; ?>
            </select><br>
        
        
        
            <label>Number of Years:</label>
            <input type="text" name="years"
                   value="<?php echo $years; ?>"/><br>
        
       
        </div>
        <p><input type="checkbox" name="monthly" value="1" > Compound Interest Monthly<br></p>

        <div id="buttons">
            <label>&nbsp;</label>
            <input type="submit" value="Calculate"/><br>
        </div>

    </form>
    </main>
</body>
</html>

display_results.php

------------------------

<?php
    // get the data from the form
    $investment = filter_input(INPUT_POST, 'investment',
            FILTER_VALIDATE_FLOAT);
    $interest_rate = filter_input(INPUT_POST, 'interest_rate',
            FILTER_VALIDATE_FLOAT);
    $years = filter_input(INPUT_POST, 'years',
            FILTER_VALIDATE_INT);
    $monthly =filter_input(INPUT_POST, 'monthly',
            FILTER_VALIDATE_INT);   

    // validate investment
    if ($investment === FALSE ) {
        $error_message = 'Investment must be a valid number.';
    } else if ( $investment <= 0 ) {
        $error_message = 'Investment must be greater than zero.';
    // validate interest rate
    } else if ( $interest_rate === FALSE ) {
        $error_message = 'Interest rate must be a valid number.';
    } else if ( $interest_rate <= 0 ) {
        $error_message = 'Interest rate must be greater than zero.';
    // validate years
    } else if ( $years === FALSE ) {
        $error_message = 'Years must be a valid whole number.';
    } else if ( $years <= 0 ) {
        $error_message = 'Years must be greater than zero.';
    } else if ( $years > 30 ) {
        $error_message = 'Years must be less than 31.';
    // set error message to empty string if no invalid entries
    } else {
        $error_message = '';
    }

    // if an error message exists, go to the index page
    if ($error_message != '') {
        include('index.php');
        exit();
    }

    // calculate the future value
    $future_value = $investment;
    if($monthly) {
        $months = 12 * $years;
        for ($i = 1; $i <= $months; $i++) {
            $future_value += $future_value * ($interest_rate/12) *.01;
        }
    } else {
        for ($i = 1; $i <= $years; $i++) {
            $future_value += $future_value * $interest_rate *.01;
        }
    }

    // apply currency and percent formatting
    $investment_f = '$'.number_format($investment, 2);
    $yearly_rate_f = $interest_rate.'%';
    $future_value_f = '$'.number_format($future_value, 2);



?>
<!DOCTYPE html>
<html>
<head>
    <title>Future Value Calculator</title>
    <link rel="stylesheet" type="text/css" href="main.css"/>
</head>
<body>
    <main>
        <h1>Future Value Calculator</h1>

        <label>Investment Amount:</label>
        <span><?php echo $investment_f; ?></span><br>

        <label>Yearly Interest Rate:</label>
        <span><?php echo $yearly_rate_f; ?></span><br>

        <label>Number of Years:</label>
        <span><?php echo $years; ?></span><br>

        <label>Future Value:</label>
        <span><?php echo $future_value_f; ?></span><br>
    
        <label>Compound Interest Calculated:</label>
        <span><?php echo ($monthly?'Monthly':'Yearly'); ?></span><br>

    </main>
</body>
</html>

Solutions

Expert Solution

/************************************************************

**************************** index.php*****************

*********************************************************************/

<?php

// start session to maintain continuity of process
session_start();

// Checking last entered value stored in cookie or not which is stored in display_results.php file if yes then storing value in veriable investment, intrest_rate, years
if(isset($_COOKIE['investment']) && isset($_COOKIE['interest_rate']) && isset($_COOKIE['years']))
{
$investment = $_COOKIE['investment'];
$interest_rate = $_COOKIE['interest_rate'];
$years = $_COOKIE['years'];
}


//set default value of variables for initial page load
if (!isset($investment)) { $investment = '10000'; }
if (!isset($interest_rate)) { $interest_rate = '5'; }
if (!isset($years)) { $years = '5'; }
?>
<!DOCTYPE html>
<html>
<head>
<title>Future Value Calculator</title>
<link rel="stylesheet" type="text/css" href="main.css"/>
</head>

<body>
<main>
<h1>Future Value Calculator</h1>
<?php if (!empty($error_message)) { ?>
<p class="error"><?php echo $error_message; ?></p>
<?php } // end if ?>
<form action="display_results.php" method="post">

<div id="data">
  
<label>Investment Amount:</label>
<select name="investment">
<?php for ($i = 10000; $i <= 50000; $i += 5000) : ?>
<!--here just making selectable of that value which is stored in the cookie-->
<?php if($investment==$i)
{
echo'<option value="'. $i.'" selected>';
}else{
echo'<option value="'. $i.'">';
}
?>
<?php echo number_format($i); ?></option>
<?php endfor; ?>
</select><br>
  
  
<label>Yearly Interest Rate:</label>
<select name="interest_rate">
<?php for ($i = 4; $i <= 12; $i += 0.5) : ?>
<!--here just making selectable of that value which is stored in the cookie-->
<?php if($interest_rate==$i)
{
echo'<option value="'. $i.'" selected>';
}else{
echo'<option value="'. $i.'">';
}
?>
  
<?php echo number_format($i, 2); ?></option>
<?php endfor; ?>
</select><br>
  
  
  
<label>Number of Years:</label>
<input type="text" name="years"
value="<?php echo $years; ?>"/><br>
  

</div>
<p><input type="checkbox" name="monthly" value="1" > Compound Interest Monthly<br></p>

<div id="buttons">
<label>&nbsp;</label>
<input type="submit" value="Calculate"/><br>
</div>

</form>
</main>
</body>
</html>

/************************************************************

**************************** display_results.php*****************

*********************************************************************/

<?php
// start session to maintain continuity of process
session_start();


// get the data from the form
$investment = filter_input(INPUT_POST, 'investment',
FILTER_VALIDATE_FLOAT);
$interest_rate = filter_input(INPUT_POST, 'interest_rate',
FILTER_VALIDATE_FLOAT);
$years = filter_input(INPUT_POST, 'years',
FILTER_VALIDATE_INT);
$monthly =filter_input(INPUT_POST, 'monthly',
FILTER_VALIDATE_INT);   

// validate investment
if ($investment === FALSE ) {
$error_message = 'Investment must be a valid number.';
} else if ( $investment <= 0 ) {
$error_message = 'Investment must be greater than zero.';
// validate interest rate
} else if ( $interest_rate === FALSE ) {
$error_message = 'Interest rate must be a valid number.';
} else if ( $interest_rate <= 0 ) {
$error_message = 'Interest rate must be greater than zero.';
// validate years
} else if ( $years === FALSE ) {
$error_message = 'Years must be a valid whole number.';
} else if ( $years <= 0 ) {
$error_message = 'Years must be greater than zero.';
} else if ( $years > 30 ) {
$error_message = 'Years must be less than 31.';
// set error message to empty string if no invalid entries
} else {
$error_message = '';
/***********************************************************
* ************** storing last entered value in cookie ****
* ************** so that it will save for 2 weeks ****
* *********************************************************/
setcookie('investment',$investment,time()+(86400*14),'/');
setcookie('interest_rate',$interest_rate,time()+(86400*14),'/');
setcookie('years',$years,time()+(86400*14),'/');
}

// if an error message exists, go to the index page
if ($error_message != '') {
include('index.php');
exit();
}

// calculate the future value
$future_value = $investment;
if($monthly) {
$months = 12 * $years;
for ($i = 1; $i <= $months; $i++) {
$future_value += $future_value * ($interest_rate/12) *.01;
}
} else {
for ($i = 1; $i <= $years; $i++) {
$future_value += $future_value * $interest_rate *.01;
}
}

// apply currency and percent formatting
$investment_f = '$'.number_format($investment, 2);
$yearly_rate_f = $interest_rate.'%';
$future_value_f = '$'.number_format($future_value, 2);

?>
<!DOCTYPE html>
<html>
<head>
<title>Future Value Calculator</title>
<link rel="stylesheet" type="text/css" href="main.css"/>
</head>
<body>
<main>
<h1>Future Value Calculator</h1>

<label>Investment Amount:</label>
<span><?php echo $investment_f; ?></span><br>

<label>Yearly Interest Rate:</label>
<span><?php echo $yearly_rate_f; ?></span><br>

<label>Number of Years:</label>
<span><?php echo $years; ?></span><br>

<label>Future Value:</label>
<span><?php echo $future_value_f; ?></span><br>
  
<label>Compound Interest Calculated:</label>
<span><?php echo ($monthly?'Monthly':'Yearly'); ?></span><br>

</main>
</body>
</html>


Related Solutions

Modify the following 'MessageBoxes' application so it uses a single action listener for each button. This...
Modify the following 'MessageBoxes' application so it uses a single action listener for each button. This will require you to separate the single action listener logic into multiple listeners, one for each button. Then modify the code to provide additional options to two or more buttons. /* * The source code for this assignment started with * a sample from "Thinking in Java" 3rd ed. page 825 * by Bruce Eckel. I have finished adding the rest of the action...
Temperature Converter Modify the previous version of this program so that it uses a loop to...
Temperature Converter Modify the previous version of this program so that it uses a loop to display a range of temperature conversions for either Fahrenheit to Celsius or Celsius to Fahrenheit. Note: You can start with the code from the previous version, then modify it slightly after it prompts the user for the direction to convert. It will then ask the user for a starting temperature and ending temperature. Assuming they entered the lower number first (if not, tell them...
Need to modify so that it uses a function. We are taking a number and rounding...
Need to modify so that it uses a function. We are taking a number and rounding it to 2 from the decimal. <!doctype html> <html> <head>    <title> NumberRounder </title> </head> <body>    <h2>Number Rounder</h2>    <p>    Enter a number: <input type="text" id="numberBox" size=12 value=3.14159>    </p>    <input type="button" value="Round It"        onclick="number=parseFloat(document.getElementId('numberBox').value);                rounded=Math.round(number*100)/100;                document.getElementId('outputDiv').innerHTML=                    number + ' rounded to one decimal place is...
Modify the GreenvilleRevenue program so that it uses the Contestant class and performs the following tasks:...
Modify the GreenvilleRevenue program so that it uses the Contestant class and performs the following tasks: The program prompts the user for the number of contestants in this year’s competition; the number must be between 0 and 30. The program continues to prompt the user until a valid value is entered. The expected revenue is calculated and displayed. The revenue is $25 per contestant. For example if there were 3 contestants, the expected revenue would be displayed as: Revenue expected...
Using NetBeans, Modify your sales application so that it polymorphically processes any account objects that are...
Using NetBeans, Modify your sales application so that it polymorphically processes any account objects that are created. Complete the following:     Create a 2-item array of type Account.     Store each account object created into the array.     For each element in this array, call the calculateSales() method, and use the toString() method to display the results.     Code should be fully commented.     Program flow should be logical. Code before revision: /* * To change this license header, choose...
C# Create a console application named that creates a list of shapes, uses serialization to save...
C# Create a console application named that creates a list of shapes, uses serialization to save it to the filesystem using XML, and then deserializes it back: // create a list of Shapes to serialize var listOfShapes = new List<Shape> { new Circle { Colour = "Red", Radius = 2.5 }, new Rectangle { Colour = "Blue", Height = 20.0, Width = 10.0 }, new Circle { Colour = "Green", Radius = 8 }, new Circle { Colour = "Purple",...
Present Value and Future Value T he following situations require the application of the time value...
Present Value and Future Value T he following situations require the application of the time value of money: Use the appropriate present or future value table: FV of $1, PV of $1, FV of Annuity of $1 and PV of Annuity of $1 1. On January 1, 2017, $16,000 is deposited. Assuming an 8% interest rate, calculate the amount accumulated on January 1, 2022, if interest is compounded (a) annually, (b) semiannually, and (c) quarterly. Round your answers to the...
Finish the following java question:  Modify a Encryption program so that it uses the following encryption algorithm:...
Finish the following java question:  Modify a Encryption program so that it uses the following encryption algorithm: Every letter (both uppercase and lowercase) converted to its successor except z and Z, which are converted to 'a' and 'A' respectively (i.e., a to b, b to c, …, y to z, z to a, A to B, B to C, …, Y to Z, Z to A) Every digit converted to its predecessor except 0, which is converted to 9 (i.e., 9...
Modify the program below so the driver class (Employee10A) uses a polymorphic approach, meaning it should...
Modify the program below so the driver class (Employee10A) uses a polymorphic approach, meaning it should create an array of the superclass (Employee10A) to hold the subclass (HourlyEmployee10A, SalariedEmployee10A, & CommissionEmployee10A) objects, then load the array with the objects you create. Create one object of each subclass. The three subclasses inherited from the abstract superclass print the results using the overridden abstract method. Below is the source code for the driver class: public class EmployeeTest10A { public static void main(String[]...
Modify the Encryption program so that it uses the following encryption algorithm: Every letter (both uppercase...
Modify the Encryption program so that it uses the following encryption algorithm: Every letter (both uppercase and lowercase) converted to its successor except z and Z, which are converted to 'a' and 'A' respectively (i.e., a to b, b to c, …, y to z, z to a, A to B, B to C, …, Y to Z, Z to A) Every digit converted to its predecessor except 0, which is converted to 9 (i.e., 9 to 8, 8 to...
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT