View Single Post
Old 04-01-2005, 03:07 PM   #3 (permalink)
redhead
Newbie
 
redhead's Avatar
 
Join Date: Jun 2002
Location: Denmark
Posts: 1,713
redhead is on a distinguished road
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;
}
__________________
Don't worry Ma'am, We're university students, We know what We're doing.
-----
If you pull the pin, Mr.Grenade would no longer be your friend.
-----
01000111 01101111 00100000 01000011 00100000 00100001

Last edited by redhead; 04-02-2005 at 05:55 AM.
redhead is offline   Reply With Quote