// header files #include "StandardConstants.h" #include "Console_IO_Utility.h" #include "File_Input_Utility.h" #include "File_Output_Utility.h" // function prototypes /* Name: isLowerCaseLetter Process: returns true if test character is lower case letter, MUST USE ONLY one line of code Function input/parameters: test character (char) Function output/parameters: none Function output/returned: Boolean result of specified test Function input/keyboard: none Device input/file: none Dependencies: none */ bool isLowerCaseLetter(char testChar); /* Name: isUpperCaseLetter Process: returns true if test character is upper case letter, MUST USE ONLY one line of code Function input/parameters: test character (char) Function output/parameters: none Function output/returned: Boolean result of specified test Function input/keyboard: none Device input/file: none Dependencies: none */ bool isUpperCaseLetter(char testChar); /* Name: countLettersInFile Process: input file is opened and checked for success, characters are retrieved and counted; upper case, lower case, and other symbol ints are updated, pointer must be dereferenced to so it can be incemented use "*" if file opening failure occurs returns false Function input/parameters: file name (const char *) Function output/parameters: upper and lower case values as well as other symbols Function output/returned: Boolean result of operation as specified Function input/keyboard: none Device input/file: data accessed from hard drive as specified Dependencies: File Input Utility tools, isUpperCaseLetter, isLowerCaseLetter, getLetterIndex */ bool countLettersInFile(char *inputFileName, int *upperCaseLetters, int *lowerCaseLetters, int *otherSymbols); /* Name: outputResultsToFile Process: opens file for output, writes multiple strings and integers to file, each pair of string and integer has coresponding endline Function input/parameters: file name (const char *), int upper case letters, int lower case letters, int other symbols letters, Function output/parameters: none Function output/returned: none Function input/keyboard: none Device output/file: none Dependencies: openOutputFile, writeStringToFile, writeIntegerToFile, writeEndlineToFile, closeOutputFile */ void outputResultsToFile(char *outputFileName, int upperCaseLetters, int lowerCaseLetters, int otherSymbols); // main program int main() { // initialize function // initialize variables, function char inputFileName[ STD_STR_LEN ], outputFileName[ STD_STR_LEN ]; int upperCaseLetters = 0, lowerCaseLetters = 0, otherSymbols = 0; bool fileSuccess; // show title // function: printf printf( "\nLETTER ANALYSIS PROGRAM\n" ); printf( "=======================\n\n" ); // get input // get input file name // function: promptForString promptForString( "Enter input file name to be accessed: ", inputFileName ); // get output file name // function: promptForString promptForString( "Enter output file name for output : ", outputFileName ); // processing // run analysis process // function: countLettersInFile fileSuccess = countLettersInFile( inputFileName, &upperCaseLetters, &lowerCaseLetters, &otherSymbols ); // output/display results // check for successful access if( fileSuccess ) { // output both letter analyses to file // function: outputResultsToFile outputResultsToFile( outputFileName, upperCaseLetters, lowerCaseLetters, otherSymbols ); // print success message // function: printf printf( "\nSUCCESS: Output was saved to file\n\n" ); } // otherwise, assume failed file access else { // print error message // function: printf printf( "\nERROR: Unable to open input file," "program aborted\n\n" ); } // end program // show program end // function: printf printf( "Program End\n" ); // return successful program return 0; } // supporting functions /* Name: countLettersInFile Process: input file is opened and checked for success, characters are retrieved and counted; upper case, lower case, and other symbol ints are updated, pointer must be dereferenced to so it can be incemented use "*" if file opening failure occurs returns false Function input/parameters: file name (const char *) Function output/parameters: upper and lower case values as well as other symbols Function output/returned: Boolean result of operation as specified Function input/keyboard: none Device input/file: data accessed from hard drive as specified Dependencies: File Input Utility tools, isUpperCaseLetter, isLowerCaseLetter, getLetterIndex */ bool countLettersInFile(char *inputFileName, int *upperCaseLetters, int *lowerCaseLetters, int *otherSymbols) { // Initialize variables char testChar; *lowerCaseLetters = 0; *upperCaseLetters = 0; *otherSymbols = 0; bool fileSuccess; // Open the file and check for success // Function openInputFile fileSuccess = openInputFile(inputFileName); // Count and retrieve characters in file // Create while loop while(!checkForEndOfInputFile()) { testChar = readCharacterFromFile(); // Function isLowerCaseLetter, isUpperCaseLetter if(isLowerCaseLetter(testChar)) { // Count for lowercase *lowerCaseLetters = *lowerCaseLetters + 1; } else if(isUpperCaseLetter(testChar)) { // Count for uppercase *upperCaseLetters = *upperCaseLetters + 1; } else { // Count for symbols // Catch all else statemnt *otherSymbols = *otherSymbols + 1; } } *otherSymbols = *otherSymbols - 1; // return return fileSuccess; } /* Name: isLowerCaseLetter Process: returns true if test character is lower case letter, MUST USE ONLY one line of code Function input/parameters: test character (char) Function output/parameters: none Function output/returned: Boolean result of specified test Function input/keyboard: none Device input/file: none Dependencies: none */ bool isLowerCaseLetter(char testChar) { // check if letter is lowercase return testChar >= 'a' && testChar <= 'z'; } /* Name: isUpperCaseLetter Process: returns true if test character is upper case letter, MUST USE ONLY one line of code Function input/parameters: test character (char) Function output/parameters: none Function output/returned: Boolean result of specified test Function input/keyboard: none Device input/file: none Dependencies: none */ bool isUpperCaseLetter(char testChar) { //check if char is lowerCase return testChar >= 'A' && testChar <= 'Z'; } /* Name: outputResultsToFile Process: opens file for output, writes multiple strings and integers to file, each pair of string and integer has coresponding endline Function input/parameters: file name (const char *), int upper case letters, int lower case letters, int other symbols letters, Function output/parameters: none Function output/returned: none Function input/keyboard: none Device output/file: none Dependencies: openOutputFile, writeStringToFile, writeIntegerToFile, writeEndlineToFile, closeOutputFile */ void outputResultsToFile(char *outputFileName, int upperCaseLetters, int lowerCaseLetters, int otherSymbols) { // Opens output file openOutputFile(outputFileName); // Write string count to output file // Endline between each line of data // Functions openOutputFile, writeStringToFile, writeIntegerToFile // functions: writeEndlineToFile, closeOutputFile writeStringToFile("Total upper case letters : "); writeIntegerToFile(upperCaseLetters); writeEndlineToFile(); writeStringToFile("Total lower case letters : "); writeIntegerToFile(lowerCaseLetters); writeEndlineToFile(); writeStringToFile("Total other symbols : "); writeIntegerToFile(otherSymbols); writeEndlineToFile(); }