CS249-Projects/PA07-1025/PA07_Main.c
cdez cc4036d8ad Partially Initialize PA07
++ PA07 Files
++ Makefile for PA07
2023-10-17 22:02:09 -07:00

171 lines
5 KiB
C

// header files
#include "File_Input_Utility.h"
#include "BST_Utility.h"
// constant definitions
// none
// prototypes
int getDataFromFile( const char *fileName, StateDataType **rootPtr );
// main function
int main( int argc, char *argv[] )
{
StateDataType *rootPtr, *cpdRootPtr;
StateDataType toRemove, removedVal;
int startNumber = 0;
char fileName[ STD_STR_LEN ] = "StateTempData.csv";
char stateString[ STD_STR_LEN ];
// set title
printf( "\nBinary Search Tree Test Program\n" );
printf( "===============================\n" );
// initialize iterator
initializeBST( &rootPtr );
// upload data, check for success
// function: getDataFromFile
if( getDataFromFile( fileName, &rootPtr ) > 0 )
{
// show in order traversal
// function: displayInOrder
printf( "\nIn order traversal: \n" );
startNumber = 0;
displayInOrder( rootPtr, &startNumber );
printf( "\nCreating duplicate tree\n" );
cpdRootPtr = copyTree( rootPtr );
printf( "\nInorder Display of copied tree:\n" );
startNumber = 0;
displayInOrder( cpdRootPtr, &startNumber );
printf( "\nRemoving North Carolina\n" );
privateCopyString(toRemove.state, "North Carolina" );
removeItem( &rootPtr, &removedVal, toRemove );
stateDataToString( removedVal, stateString );
printf( "Removed from Tree: %s\n", stateString );
printf( "\nPreorder Display:\n" );
startNumber = 0;
displayPreOrder( rootPtr, &startNumber );
printf( "\nRemoving Alabama\n" );
privateCopyString(toRemove.state, "Alabama" );
removeItem( &rootPtr, &removedVal, toRemove );
stateDataToString( removedVal, stateString );
printf( "Removed from Tree: %s\n", stateString );
printf( "\nPostorder Display:\n" );
startNumber = 0;
displayPostOrder( rootPtr, &startNumber );
printf( "\nRemoving Wyoming\n" );
privateCopyString(toRemove.state, "Wyoming" );
removeItem( &rootPtr, &removedVal, toRemove );
stateDataToString( removedVal, stateString );
printf( "Removed from Tree: %s\n", stateString );
printf( "\nInorder Display:\n" );
startNumber = 0;
displayInOrder( rootPtr, &startNumber );
}
else
{
printf( "\nERROR: Data not found - program aborted\n" );
}
// end program
// clear BST
// function: clearTree
rootPtr = clearTree( rootPtr );
cpdRootPtr = clearTree( cpdRootPtr );
// show program end
// function: printf
printf( "\nEnd Program\n" );
// return success
return 0;
}
/*
Name: getDataFromFile
Process: uploads data from file with unknown number of data sets,
has internal Boolean to test for data input success
Function input/parameters: file name (char *)
Function output/parameters: pointer to BST head pointer (StateDataType **)
Function output/returned: number of values found (int)
Device input/file: data from HD
Device output/monitor: none
Dependencies: openInputFile, readStringToLineEndFromFile,
readStringToDelimiterFromFile,
checkForEndOfInputFile, readCharacterFromFile, readDoubleFromFile,
insert, printf, closeInputFile
*/
int getDataFromFile( const char *fileName, StateDataType **rootPtr )
{
StateDataType stateDataNode;
char dummyInput[ STD_STR_LEN ];
int index = 0;
bool verbose = true; // Set to true to verify data upload, false otherwise
if( openInputFile( fileName ) )
{
if( verbose )
{
printf( "\nBegin Loading Data From File\n" );
}
readStringToLineEndFromFile( dummyInput );
readStringToDelimiterFromFile( COMMA, stateDataNode.state );
while( !checkForEndOfInputFile() )
{
stateDataNode.avgTemp = readDoubleFromFile();
// remove comma
readCharacterFromFile();
stateDataNode.lowestTemp = readDoubleFromFile();
// remove comma
readCharacterFromFile();
stateDataNode.highestTemp = readDoubleFromFile();
*rootPtr = insert( *rootPtr, stateDataNode );
if( verbose )
{
printf( "%2d) State name: %s, ",
index + 1, stateDataNode.state );
printf( "Avg Temp: %5.2f, ", stateDataNode.avgTemp );
printf( "Low Temp: %5.2f, ", stateDataNode.lowestTemp );
printf( "High Temp: %5.2f\n", stateDataNode.highestTemp );
}
// reprime - read next state name
readStringToDelimiterFromFile( COMMA, stateDataNode.state );
index++;
}
if( verbose )
{
printf( "End Loading Data From File\n\n" );
}
closeInputFile();
}
return index;
}