CS249-Projects/PA10-1115/PA10_Main.c
cdez 91ce50b189 Initialize PA10, STUB Functions
++ PA10 Files
++ Makefile for PA10
2023-11-10 14:34:28 -07:00

240 lines
6.9 KiB
C

// header files
#include "File_Input_Utility.h"
#include "HashUtility.h"
// constants
extern const int ITEM_NOT_FOUND;
extern const bool USED_NODE;
extern const bool UNUSED_NODE;
// prototypes
void getQueryObject( StateDataType *returnedState, const char *stateName );
ProbingHashType *uploadData( char *fileName, int tableSize, int probeType );
// main function
int main( int argc, char *argv[] )
{
ProbingHashType *hashTest;
StateDataType toRemove, removed, toFind, found;
char toRemoveStr[ MAX_STR_LEN ], removedStr[ MAX_STR_LEN ];
char toFindStr[ MAX_STR_LEN ], foundStr[ MAX_STR_LEN ];
int primeTableSize = 67; // recommended to be prime number (or at least odd)
// and roughly 1.3x the size of the data set
// title
printf( "\nHASH TABLE TEST PROGRAM\n" );
printf( "=======================\n" );
hashTest = uploadData( "inData.csv", primeTableSize, QUADRATIC_PROBING );
// display array dump
displayHashTable( hashTest );
// show hash table status
showHashTableStatus( *hashTest );
printf( "\n\nFinding Selected States ----------------------------------\n" );
privateCopyString( toFindStr, "Arizona" );
getQueryObject( &toFind, toFindStr );
found = findItem( hashTest, toFind );
stateDataToString( foundStr, found );
printf( "Found: %s\n", foundStr );
privateCopyString( toFindStr, "Iowa" );
getQueryObject( &toFind, toFindStr );
found = findItem( hashTest, toFind );
stateDataToString( foundStr, found );
printf( "Found: %s\n", foundStr );
privateCopyString( toFindStr, "Minnesota" );
getQueryObject( &toFind, toFindStr );
found = findItem( hashTest, toFind );
stateDataToString( foundStr, found );
printf( "Found: %s\n", foundStr );
printf( "\n\nRemoving Selected States ----------------------------------\n" );
privateCopyString( toRemoveStr, "Texas" );
getQueryObject( &toRemove, toRemoveStr );
if( removeState( &removed, toRemove, *hashTest ) )
{
stateDataToString( removedStr, removed );
printf( "---Removed: %s\n", removedStr );
}
else
{
printf( "---Failed to remove %s\n", toRemoveStr );
}
privateCopyString( toRemoveStr, "New Mexico" );
getQueryObject( &toRemove, toRemoveStr );
if( removeState( &removed, toRemove, *hashTest ) )
{
stateDataToString( removedStr, removed );
printf( "---Removed: %s\n", removedStr );
}
else
{
printf( "---Failed to remove %s\n", toRemoveStr );
}
privateCopyString( toRemoveStr, "Washington" );
getQueryObject( &toRemove, toRemoveStr );
if( removeState( &removed, toRemove, *hashTest ) )
{
stateDataToString( removedStr, removed );
printf( "---Removed: %s\n", removedStr );
}
else
{
printf( "---Failed to remove %s\n", toRemoveStr );
}
privateCopyString( toRemoveStr, "Maryland" );
getQueryObject( &toRemove, toRemoveStr );
if( removeState( &removed, toRemove, *hashTest ) )
{
stateDataToString( removedStr, removed );
printf( "---Removed: %s\n", removedStr );
}
else
{
printf( "---Failed to remove %s\n", toRemoveStr );
}
privateCopyString( toRemoveStr, "Florida" );
getQueryObject( &toRemove, toRemoveStr );
if( removeState( &removed, toRemove, *hashTest ) )
{
stateDataToString( removedStr, removed );
printf( "---Removed: %s\n", removedStr );
}
else
{
printf( "---Failed to remove %s\n", toRemoveStr );
}
privateCopyString( toRemoveStr, "Quebec" );
getQueryObject( &toRemove, toRemoveStr );
if( removeState( &removed, toRemove, *hashTest ) )
{
stateDataToString( removedStr, removed );
printf( "---Removed: %s\n", removedStr );
}
else
{
printf( "---Failed to remove %s\n", toRemoveStr );
}
// display array dump
displayHashTable( hashTest );
// show hash table status
showHashTableStatus( *hashTest );
// end program
// clear hash table
clearHashTable( hashTest );
// show program end
printf( "\nEnd Program\n" );
// return success
return 0;
}
void getQueryObject( StateDataType *returnedState, const char *stateName )
{
setDataNodeFromData( returnedState, stateName, 0.0, 0.0, 0.0, 0.0 );
}
/*
Name: getDataFromFile
Process: uploads data from file with unknown number of data sets,
has internal Verbose Boolean to display input operation
Function input/parameters: file name (char *)
Function output/parameters: none
Function output/returned: pointer to hash table (ProbingHashType *)
Device input/file: data from HD
Device output/monitor: none
Dependencies: initializeHashTable, openInputFile, readStringToDelimiterFromFile,
readDoubleFromFile, readCharacterFromFile, printf,
addItemFromData, closeInputFile, free
*/
ProbingHashType *uploadData( char *fileName, int tableSize, int probeType )
{
char stateNameStr[ MAX_STR_LEN ];
double avgTemp, lowestTemp, highestTemp;
int index = 0;
bool verbose = true; // Set to true to verify data upload, false otherwise
ProbingHashType *tempHashPtr = initializeHashTable( tableSize, probeType );
if( openInputFile( fileName ) )
{
if( verbose )
{
printf( "\n ----- Verbose: Begin Loading Data From File\n" );
}
// get first state name
readStringToDelimiterFromFile( COMMA, stateNameStr );
while( !checkForEndOfInputFile() )
{
avgTemp = readDoubleFromFile();
// ignores comma
readCharacterFromFile();
lowestTemp = readDoubleFromFile();
// ignores comma
readCharacterFromFile();
highestTemp = readDoubleFromFile();
if( verbose )
{
printf( "State Name: %s | ", stateNameStr );
printf( "Average Temp: %5.2f | ", avgTemp );
printf( "Lowest Temp: %5.2f | ", lowestTemp );
printf( "Highest Temp: %5.2f\n", highestTemp );
}
// add to hash table
addItemFromData( tempHashPtr, stateNameStr,
avgTemp, lowestTemp, highestTemp );
// reprime - read next state name
readStringToDelimiterFromFile( COMMA, stateNameStr );
index++;
}
if( verbose )
{
printf( "\n ----- Verbose: Items found in file: %d\n", index );
printf( " ----- Verbose: End Loading Data From File\n\n" );
}
closeInputFile();
}
// file not found
else
{
free( tempHashPtr );
}
return tempHashPtr;
}