Table of Contents

GoFundMe

Problem

  • You have a friend with a cause trying to raise $100K
  • (S)he needs a program to track donations and stop accepting donations when the goal is reached
  • (S)he would like the following information at the end:
    • Total funds raised
    • Total number of donations
    • Average donation amount
    • Maximum donation amount
    • Minimum donation amount
  • Follow the problem solving steps to design a solution
  • Try simulating donations with a random number generator with values between $5 and $5000.

Solution

/* When your program doesn't have inputs, you should still find ways to test your code, perhaps by fixing certain values 
Input: goal=100000, donations=-150, 150000 (negative donation)
Expected Output: total 149850
Actual:
 
Input: goal=150, donations=155 (example of single donation exceeding goal)
Expected Output: total, avg, min, max all equal 150, 1 donation
Actual:
 
Input: goal=150, donations = 75, 75 (two donations that equal exactly my goal)
Expected Output: total = 150, avg = 75, min, max = 75, 2 donations
Actual:
 
Input: goal=150, donations=150 (example of single donation exactly meeting my goal)
Expected Output: total, avg, min, max all equal 150, 1 donation
Actual:
 
Input: goal=0
Expected Output: program crashes
Actual:
 
*/
 
#include <iostream>
#include <iomanip>
#include <ctime>
 
using namespace std;
 
const double GOAL = 100000;
const double MAX_VAL = 5000;
const double MIN_VAL = 5;
 
int main()
{
	cout << fixed << setprecision(2);
 
	double total_donations = 0;
	int count_of_donations = 0;
	double max_donation_so_far = 0; // Pick a small enough value that you know it will be immediately replaced as the max value
	double min_donation_so_far = 1000000000; // Pick a big enough value that you know it will be immediately replaced as the min value (MAX_VAL?)
 
	srand(time(0));
	while (total_donations < GOAL)
	{
		// Record each donation (here it is generated as a random value)
		double donation_amount = (rand() * 1.0 / RAND_MAX) * (MAX_VAL - MIN_VAL) + MIN_VAL;
		cout << "Donation please: $" << donation_amount << endl;
 
		// Add up donation as you go
		total_donations = total_donations + donation_amount;
		count_of_donations++;
 
		// check if this is the max_donation_so_far
		if (donation_amount > max_donation_so_far)
		{
			max_donation_so_far = donation_amount;
		}
 
		if (donation_amount < min_donation_so_far)
		{
			min_donation_so_far = donation_amount;
		}
	// Repeat until sum is above 100K
	}
 
	// Output the summary from the program
	cout << "Congrats! You raised $" << total_donations << endl;
	cout << "There were " << count_of_donations << " donations" << endl;
	cout << "Average donation was $" << (total_donations / count_of_donations) << endl;
	cout << "Max donation was $" << max_donation_so_far << endl;
	cout << "Min donation was $" << min_donation_so_far << endl;
 
 
	system("pause");
	return 0;
}
cs-142/gofundme.txt · Last modified: 2015/05/14 11:57 by cs142ta
Back to top
CC Attribution-Share Alike 4.0 International
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0