238 lines
7.5 KiB
C++
238 lines
7.5 KiB
C++
|
#include <iostream>
|
||
|
#include <vector>
|
||
|
#include <cmath>
|
||
|
#include <cstdio>
|
||
|
|
||
|
using namespace std;
|
||
|
|
||
|
int TOTAL_INPUTS_CORRECT = 0;
|
||
|
int TOTAL_INVALID_INPUTS = 0;
|
||
|
|
||
|
struct student{
|
||
|
//making a struct of type student to facilitate the manipulation of data during this program
|
||
|
bool member_of_church;
|
||
|
double credit_hours;
|
||
|
double tuition;
|
||
|
};
|
||
|
|
||
|
void undergrad_or_not(student & s) {
|
||
|
//function determines if the student is doing an undergrad
|
||
|
string input;
|
||
|
cout << "Are you entering information about an undergraduate student (\"y\" or \"n\")? ";
|
||
|
cin >> input;
|
||
|
if(input == "y") {
|
||
|
TOTAL_INPUTS_CORRECT++;
|
||
|
}
|
||
|
else {
|
||
|
cout << "This program deals only with undergraduate students." << endl;
|
||
|
TOTAL_INVALID_INPUTS++;
|
||
|
undergrad_or_not(s);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
bool check_credit_hours(double input) {
|
||
|
//checks the credit hours to make sure it is correct
|
||
|
double decimal = input - floor(input);//eliminate everything before the decimal to be able to evaulate
|
||
|
if(input > 25.0 or input < .5) {
|
||
|
cout << input << " is too small or too large for valid credit hour entry" << endl;
|
||
|
return false;
|
||
|
}
|
||
|
if(decimal == .0 or decimal == .5) {
|
||
|
return true;
|
||
|
}
|
||
|
else {
|
||
|
cout << "A student cannot enroll for " << input << " credit hours" << endl;
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void get_credit_hours(student & s) {
|
||
|
//function to get the number of credit hours.
|
||
|
double input;
|
||
|
cout << "Credit hours winter 2012: ";
|
||
|
cin >> input;
|
||
|
if(check_credit_hours(input) == false) {
|
||
|
//using check_credit_hours function to determine if in range
|
||
|
TOTAL_INVALID_INPUTS++;
|
||
|
get_credit_hours(s);
|
||
|
}
|
||
|
else {
|
||
|
s.credit_hours = input;
|
||
|
TOTAL_INPUTS_CORRECT++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void get_member_of_church(student & s) {
|
||
|
//function to determine if student is a member of the church
|
||
|
string input;
|
||
|
cout <<"Does the student belong to the LDS church (\"y\" or \"n\")? ";
|
||
|
cin >> input;
|
||
|
if(input == "n") {
|
||
|
s.member_of_church = false;
|
||
|
}
|
||
|
TOTAL_INPUTS_CORRECT++;
|
||
|
}
|
||
|
|
||
|
void calculate_tuition(student & s) {
|
||
|
//this determines the tuition based on credit hours
|
||
|
if(s.credit_hours > 12) {
|
||
|
if(s.member_of_church) {
|
||
|
s.tuition = 2280;
|
||
|
}
|
||
|
else {
|
||
|
s.tuition = 4560;
|
||
|
}
|
||
|
}
|
||
|
else if(s.credit_hours > 9 && s.credit_hours < 11.5) {
|
||
|
if(s.member_of_church) {
|
||
|
s.tuition = 2210;
|
||
|
}
|
||
|
else {
|
||
|
s.tuition = 4435;
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
if(s.member_of_church) {
|
||
|
s.tuition = 234 * s.credit_hours;
|
||
|
}
|
||
|
else {
|
||
|
s.tuition = 468 * s.credit_hours;
|
||
|
}
|
||
|
}
|
||
|
cout << "Tuition is $" << s.tuition << " for winter 2012" << endl;
|
||
|
}
|
||
|
|
||
|
void calculate_refund(student & s) {
|
||
|
//used to calculate refund for student
|
||
|
string input;
|
||
|
cout << "Were there any classes that were dropped that need refund(\"y\" or \"n\")?";
|
||
|
cin >> input;
|
||
|
if(input == "y") {
|
||
|
int time_frame;
|
||
|
double credits_dropped;
|
||
|
double refund;
|
||
|
double new_tuition;
|
||
|
double old_tuition;
|
||
|
cout << "Which of the following dates best describes when you dropped the class(es)" << endl;
|
||
|
cout << "1) January 19, 2012\n2) January 23, 2012\n3) Feruary 27, 2012\n4) March 16, 2012" << endl;
|
||
|
cin >> time_frame;
|
||
|
cout << "How many credit hours were dropped?" << endl;
|
||
|
cin >> credits_dropped;
|
||
|
if(check_credit_hours(credits_dropped) == false or s.credit_hours-credits_dropped <= 0) {
|
||
|
cout << "this is an invalid credit hours, try again" << endl;
|
||
|
calculate_refund(s);
|
||
|
TOTAL_INVALID_INPUTS++;
|
||
|
}
|
||
|
else {
|
||
|
s.credit_hours = s.credit_hours - credits_dropped;
|
||
|
old_tuition = s.tuition;
|
||
|
calculate_tuition(s);
|
||
|
new_tuition = s.tuition;
|
||
|
if(time_frame == 1) {
|
||
|
refund = (old_tuition - new_tuition) *.85;
|
||
|
}
|
||
|
if(time_frame == 2) {
|
||
|
refund = (old_tuition - new_tuition) *.75;
|
||
|
}
|
||
|
if(time_frame == 3) {
|
||
|
refund = (old_tuition - new_tuition) *.50;
|
||
|
}
|
||
|
if(time_frame == 4) {
|
||
|
cout << "You wont get any money back. You dropped classes too late." << endl;
|
||
|
}
|
||
|
cout << refund << " is the amount you will be refunded" << endl;
|
||
|
s.tuition = s.tuition - refund;
|
||
|
printf ("This is the new tuition after refund %4.2f\n",s.tuition);
|
||
|
TOTAL_INPUTS_CORRECT++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void get_max_tuition(vector<student> & students) {
|
||
|
//function to get the max tuition
|
||
|
double max_tuition = 0;
|
||
|
for(unsigned int i = 0; i < students.size();i++) {
|
||
|
if(max_tuition < students[i].tuition) {
|
||
|
max_tuition = students[i].tuition;
|
||
|
}
|
||
|
}
|
||
|
printf ("The highest tuition is $%4.2f\n" , max_tuition);
|
||
|
}
|
||
|
|
||
|
void get_min_tuition(vector<student> & students) {
|
||
|
//function to get min tuition
|
||
|
double min_tuition = 4560; //need to initilize the double to avoid error
|
||
|
for(unsigned int i = 0; i < students.size(); i++) { //made it the largest number it could be so this function
|
||
|
if(min_tuition > students[i].tuition) { //wont fail
|
||
|
min_tuition = students[i].tuition;
|
||
|
}
|
||
|
}
|
||
|
printf ("The lowest tuition is $%4.2f\n" , min_tuition);
|
||
|
}
|
||
|
|
||
|
void get_average_tuition(vector<student> & students) {
|
||
|
//function to get the average tuition for all students
|
||
|
double average = 0;
|
||
|
for(unsigned int i = 0; i < students.size(); i++) {
|
||
|
average += students[i].tuition;
|
||
|
}
|
||
|
average = average/students.size();
|
||
|
printf ("The average tuition is $%4.2f\n" , average);
|
||
|
}
|
||
|
|
||
|
void get_average_credit_hours(vector<student> & students) {
|
||
|
//function to get the average credit hours for all students
|
||
|
double average = 0;
|
||
|
for(unsigned int i = 0; i < students.size(); i++) {
|
||
|
average += students[i].credit_hours;
|
||
|
}
|
||
|
average = average/students.size();
|
||
|
printf ("This is the average credit hours %4.1f\n" , average);
|
||
|
}
|
||
|
|
||
|
void number_of_students(vector<student> & students) {
|
||
|
//function to report how many students were recorded
|
||
|
cout << "You entered valid information for " << students.size() << " students" << endl;
|
||
|
}
|
||
|
|
||
|
void percentage_of_correct_entries() {
|
||
|
//function reports percentage of correct entries
|
||
|
int percentage;
|
||
|
int total = TOTAL_INPUTS_CORRECT + TOTAL_INVALID_INPUTS;
|
||
|
percentage = TOTAL_INPUTS_CORRECT*100/total;
|
||
|
cout << percentage << "%" << " of your entries required no reprompting" << endl;
|
||
|
}
|
||
|
|
||
|
bool keep_playing() {
|
||
|
bool r = true;
|
||
|
string input;
|
||
|
cout << "Enter another student (\"y\" or \"n\")?";
|
||
|
cin >> input;
|
||
|
if(input == "n") {
|
||
|
r = false;
|
||
|
}
|
||
|
return r;
|
||
|
}
|
||
|
|
||
|
int main() {
|
||
|
bool keep_game = true;
|
||
|
vector<student> students;
|
||
|
//Keep the game going until person wants to quit
|
||
|
while(keep_game) {
|
||
|
student cur_student = {true, 0, 0};
|
||
|
undergrad_or_not(cur_student);
|
||
|
get_member_of_church(cur_student);
|
||
|
get_credit_hours(cur_student);
|
||
|
calculate_tuition(cur_student);
|
||
|
calculate_refund(cur_student);
|
||
|
students.push_back(cur_student);
|
||
|
keep_game = keep_playing();
|
||
|
}
|
||
|
number_of_students(students);
|
||
|
get_average_credit_hours(students);
|
||
|
get_average_tuition(students);
|
||
|
get_max_tuition(students);
|
||
|
get_min_tuition(students);
|
||
|
percentage_of_correct_entries();
|
||
|
}
|