|
Newbie
Join Date: Jun 2002
Location: Denmark
Posts: 1,713
|
Here is one in strict ANSI C
Code:
#include <stdio.h>
#define LENGTH 64
int get_user_input(int* description, int* parking, int* enrolment,
int* sticker, int* units, int verbose);
int main(int argc, char** argv)
{
/* do we need debug/verbose output */
int description, parking, enrolment, sticker, units, verbose = 0;
/* Student Services
* $30.00 for Fall or Spring semester
* $27.00 for Winter or Summer session
*/
double description_cost[2] = {30.00, 27.00};
/*
* Parking
* $75.00 for Fall or Spring semester
* $35.00 for Winter or Summer session
*/
double parking_cost[2] = {75.00, 35.00};
/*
* Enrollment Per Unit
* $26.00 / unit for California residents
* $149.00 / unit for US residents
* $171.00 / unit for F1 Visa holders
*/
double enrolment_cost[3] = {26.00, 149.00, 171.00};
/*
* Associated Student Sticker Refund
* $10.00 refund in Fall or Spring semester, if requested
* $9.00 refund in Winter or Summer session, if requested
*/
double sticker_refund[2] = {10.00, 9.00};
/* we need to display verbose output */
if(argc > 1 && argv[1][0] == '-' && argv[1][1] == 'v')
verbose = 1;
/* fetch what ever the user want to calculate */
printf("Student Fee Calculator:\n");
if(0 != get_user_input(&description, &parking, &enrolment,
&sticker, &units, verbose))
{
printf("Error getting user input\n");
return -1;
}
if(verbose)
{
printf("Returned from get_user_input() with:\n");
printf("\tdescription:\t%d\n", description);
printf("\tparking:\t%d\n", parking);
printf("\tenrolment:\t%d\n", enrolment);
printf("\tsticker:\t%d\n", sticker);
printf("\tunits:\t\t%d\n", units);
}
printf("Total cost for student fee:\n");
printf("\tUnits:\t%d\n", units);
printf("\tCost:\t%.2lf\n",
(description_cost[description] + (parking ? parking_cost[description] : 0)
+ units * enrolment_cost[enrolment] - (sticker ? sticker_refund[description] : 0)));
return 0;
}
int get_user_input(int* description, int* parking, int* enrolment,
int* sticker, int* units, int verbose)
{
char buffer[LENGTH +1];
printf("What semester am I calculating fees for?\n");
printf("\t[F]all\n");
printf("\t[W]inter\n");
printf("\t[S]pring\n");
printf("\tsu[M]mer\n");
printf("\t\t:");
fflush(stdout);
if(!fgets(buffer, LENGTH, stdin))
{
if(verbose)
printf("Error reading semester from stdin\n");
return -1;
}
switch(buffer[0])
{
case 'f':
case 'F':
case 's':
case 'S':
*description = 0;
break;
case 'm':
case 'M':
case 'w':
case 'W':
*description = 1;
break;
default:
if(verbose)
printf("Error reading semester from stdin\n");
return -1;
}
printf("Are you a California resident? [y/n]\n");
printf("\t\t:");
fflush(stdout);
if(!fgets(buffer, LENGTH, stdin))
{
if(verbose)
printf("Error reading CA resident from stdin\n");
return -1;
}
if(buffer[0] == 'y' || buffer[0] == 'Y')
*enrolment = 0;
else
if(buffer[0] == 'n' || buffer[0] == 'N')
{
printf("Are you a US sitizens? [y/n]\n");
printf("\t\t:");
fflush(stdout);
if(!fgets(buffer, LENGTH, stdin))
{
if(verbose)
printf("Error reading US sitizens from stdin\n");
return -1;
}
if(buffer[0] == 'y' || buffer[0] == 'Y')
*enrolment = 1;
else
if(buffer[0] == 'n' || buffer[0] == 'N')
{
buffer[0] = '\0';
printf("Are you an F1 visa holder? [y/n]\n");
printf("\t\t:");
fflush(stdout);
if(!fgets(buffer, LENGTH, stdin))
{
if(verbose)
printf("Error reading F1 visa holder from stdin\n");
return -1;
}
if(buffer[0] == 'y' || buffer[0] == 'Y')
*enrolment = 2;
else
{
if(verbose)
printf("Error getting decission for F1 visa holder\n");
return -1;
}
}
else
{
if(verbose)
printf("Error getting decission for US sitizens\n");
return -1;
}
}
else
{
if(verbose)
printf("Error getting decission for CA resident\n");
return -1;
}
printf("Do you need a parking sticker? [y/n]\n");
printf("\t\t:");
fflush(stdout);
if(!fgets(buffer, LENGTH, stdin))
{
if(verbose)
printf("Error reading parking sticker from stdin\n");
return -1;
}
if(buffer[0] == 'y' || buffer[0] == 'Y')
*parking = 1;
else
if(buffer[0] == 'n' || buffer[0] == 'N')
*parking = 0;
else
{
if(verbose)
printf("Error getting decission for parking sticker\n");
return -1;
}
printf("Are you requesting an AS sticker refund? [y/n]\n");
printf("\t\t:");
fflush(stdout);
if(!fgets(buffer, LENGTH, stdin))
{
if(verbose)
printf("Error reading AS sticker refund stdin\n");
return -1;
}
if(buffer[0] == 'y' || buffer[0] == 'Y')
*sticker = 1;
else
if(buffer[0] == 'n' || buffer[0] == 'N')
*sticker = 0;
else
{
if(verbose)
printf("Error getting decission for AS sticker\n");
return -1;
}
printf("How many units will you enrol in?\n");
printf("\t\t:");
fflush(stdout);
if(!fscanf(stdin, "%d", units))
{
if(verbose)
printf("Error reading units stdin\n");
return -1;
}
return 0;
}
Last edited by redhead; 04-02-2005 at 05:55 AM.
|