All pastes #253745 Raw Edit

Anonymous

public text v1 · immutable
#253745 ·published 2006-11-21 01:43 UTC
rendered paste body
/*

PAYROLL CALCULATOR BY DOUG TREADWELL
LAST MODIFIED BY CREATOR 11/08/06
CISP 360 DIXON


PROCESS HIERARCHY :

All Include Header.H
    Most importantly, provides definition of the employee struct, and defines a 
    new "employee" type using that struct to avoid bothersome variable prefixes.
    Also provides a common output format and tax rate definitions.
    
Start At Main
    Open Report Files
    Call PrintReportHeadings (Twice, For Each Report File)
        Write Report Headings To Presorted And Sorted Report File
    Until User Declares Last Employee
          Call InputEmployeeData (Pass Employee Record To Receive Data)
               Until User Declares Data Entered Correctly
                    Request Employee Data (Last, First, Pay, Hours, Deferred)
          Call CalculateGross (Pass Employee Record To Calculate Data From)
               Determine # Regular Hours/Overtime Hours, Calculate Gross Income
          Call CalculateTaxes (Pass Employee Record To Calculate Data From)
               Determine Tax Amounts Using Net Income & Defined Tax Rates
          Call CalculateNet (Pass Employee Record To Calculate Data From)
               Determine Net Income By Subtracting Taxes From Gross
          Call AddDetailToAccumulators (Pass Employee Record, Totals Record)
               Add Employee Record's Values To Totals' Values
    For Each Employee
        Call PrintSummaryReport (Pass Presorted File)
             Write Results of Calculations For Each Employee To File
    Call PrintReportFooters (Pass Presorted File)
         Write Accumulated Total & Averages To Presorted File
    Call BubbleSort
         Perform Bubble Sort, Placing Names In Descending Alphabetical Order
    For Each Employee
        Call PrintSummaryReport (Pass Sorted File)
             Write Results of Calculations For Each Employee To File
    Call PrintReportFooters (Pass Sorted File)    
         Write Accumulated Total & Averages To Sorted File
    Print Report File Footers
    Close Report Files

*/

#include <stdlib.h>
#include <stdio.h>
#include "./Header.h"

extern void PrintReportHeadings ( FILE * reportfile );
extern void InputEmployeeData( employee *current_employee );
extern void CalculateGross ( employee *current_employee );
extern void CalculateTaxes ( employee *current_employee );
extern void CalculateNet ( employee *current_employee );
extern void PrintSummaryReport ( FILE * reportfile, employee *current_employee );
extern void AddDetailToAccumulators ( employee *current_employee, employee *employee_totals );
extern void PrintReportFooters ( FILE * reportfile, employee *employee_totals, int number_employees );
extern void Swap ( int *first, int *second );
extern void BubbleSort ( employee employees[], int index[], int number_employees );
extern void QuickSort( employee employees[], int index[], int start, int finish );
extern void PrintChecks( FILE * checks_file, employee employees[], int number_employees );

int main( ) {

    employee employees[MAX_EMPLOYEES] = {"", "", "", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    employee employee_totals = {"", "", "", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    int index[MAX_EMPLOYEES];
    int number_employees = 0;
    int current_employee = 0;
    int counter = 0;

    FILE *presortfile;
    FILE *reportfile;
    FILE *checks_file;
    char add_another;

    presortfile = fopen("./presort.lst","wt");
    reportfile = fopen("./report.lst","wt");
    checks_file = fopen("./checks.lst","wt");
    if (!reportfile || !presortfile) {
       printf("Could not open one or more report files.  Ending program.");
       exit(10);
    }
    
    PrintReportHeadings( presortfile );
    PrintReportHeadings( reportfile );

    do {
        number_employees++;
        current_employee = number_employees - 1;
        index[current_employee] = current_employee;
        InputEmployeeData( &employees[current_employee] );
        CalculateGross( &employees[current_employee] );
        CalculateTaxes( &employees[current_employee] );
        CalculateNet ( &employees[current_employee] );
        AddDetailToAccumulators ( &employees[current_employee], &employee_totals );

        printf("\nWould you like to add another employee? : (Y or N)\n>");
        fflush(stdin);
        scanf("%c", &add_another);
    } while ( add_another == 'Y' || add_another == 'y' );

    for ( counter = 0; counter < number_employees; counter++ ) {
        PrintSummaryReport ( presortfile, &employees[index[counter]] );
    }
    PrintReportFooters ( presortfile, &employee_totals, number_employees );
    
    BubbleSort( employees, index, number_employees );
    //QuickSort( employees, index, 0, number_employees - 1);
    PrintChecks( checks_file, employees, number_employees );
    
    for ( counter = 0; counter < number_employees; counter++ ) {
        PrintSummaryReport ( reportfile, &employees[index[counter]] );
    }
    PrintReportFooters ( reportfile, &employee_totals, number_employees );

   fclose(presortfile);
   fclose(reportfile);
   fclose(checks_file);
   return 0;
}