implement delete and undoDelete, minor logic fixes
This commit is contained in:
parent
1f19d82e22
commit
1f66b51989
1
.idea/vcs.xml
generated
1
.idea/vcs.xml
generated
@ -2,5 +2,6 @@
|
|||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="VcsDirectoryMappings">
|
<component name="VcsDirectoryMappings">
|
||||||
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
4
CPU.h
4
CPU.h
@ -13,6 +13,8 @@ private:
|
|||||||
double baseClock;
|
double baseClock;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
CPU() : cpuId(""), releaseYear(0), coreCount(0), architecture(""), baseClock(0.0) {};
|
||||||
|
|
||||||
CPU(std::string id, int year, int cores, std::string arch, double clock) :
|
CPU(std::string id, int year, int cores, std::string arch, double clock) :
|
||||||
cpuId(std::move(id)),
|
cpuId(std::move(id)),
|
||||||
releaseYear(year),
|
releaseYear(year),
|
||||||
@ -20,7 +22,7 @@ public:
|
|||||||
architecture(std::move(arch)),
|
architecture(std::move(arch)),
|
||||||
baseClock(clock) {};
|
baseClock(clock) {};
|
||||||
|
|
||||||
std::string getCpuId() const;
|
std::string getCpuId() const { return cpuId; };
|
||||||
|
|
||||||
int getReleaseYear() const;
|
int getReleaseYear() const;
|
||||||
|
|
||||||
|
@ -30,9 +30,9 @@ public:
|
|||||||
|
|
||||||
bool insert(const T &item, int h(const T&, int)) { throw std::logic_error("Not implemented: HashTable.insert()"); };
|
bool insert(const T &item, int h(const T&, int)) { throw std::logic_error("Not implemented: HashTable.insert()"); };
|
||||||
|
|
||||||
bool remove(const T &item, int h(const T&), int) { throw std::logic_error("Not implemented: HashTable.remove()"); };
|
bool remove(const T &item, int h(const T&, int)) { throw std::logic_error("Not implemented: HashTable.remove()"); };
|
||||||
|
|
||||||
bool search(const T &item, int h(const T&), int) { throw std::logic_error("Not implemented: HashTable.search()"); };
|
bool search(T& itemOut, const T &item, int h(const T&, int)) { throw std::logic_error("Not implemented: HashTable.search()"); };
|
||||||
|
|
||||||
int getTotalCollisions() const { throw std::logic_error("Not implemented: HashTable.getTotalCollisions()"); };
|
int getTotalCollisions() const { throw std::logic_error("Not implemented: HashTable.getTotalCollisions()"); };
|
||||||
|
|
||||||
|
87
main.cpp
87
main.cpp
@ -35,58 +35,24 @@
|
|||||||
|
|
||||||
using std::cin, std::cout, std::string, std::vector;
|
using std::cin, std::cout, std::string, std::vector;
|
||||||
|
|
||||||
void printHelp() {
|
void processInput(char command, HashTable<CPU>& table, BinarySearchTree<string>& tree, Stack<CPU>& stack);
|
||||||
static const vector<int> helpWidths = {5, 40};
|
|
||||||
static const vector<vector<string>> helpData = {
|
|
||||||
{"Key", "Command"},
|
|
||||||
{"H", "Help"},
|
|
||||||
{"I", "Insert a new record"},
|
|
||||||
{"F", "File input: add data from a file"},
|
|
||||||
{"D", "Delete one record"},
|
|
||||||
{"U", "Undo delete"},
|
|
||||||
{"L", "List all CPUs sorted by primary key"},
|
|
||||||
{"S", "Search for a CPU by the primary key"},
|
|
||||||
{"W", "Write data to a file"},
|
|
||||||
{"T", "Hashtable statistics"},
|
|
||||||
{"Q", "Quit"},
|
|
||||||
{"P", "Hidden print option (do not show it in the menu: print indented tree)"},
|
|
||||||
{"Z", "Hidden option (do not show it in the menu: display names of team members)"},
|
|
||||||
};
|
|
||||||
printTable(helpWidths, helpData);
|
|
||||||
}
|
|
||||||
|
|
||||||
void printTeam() {
|
|
||||||
static const vector<int> teamWidths = {40};
|
|
||||||
static const vector<vector<string>> teamData = {
|
|
||||||
{"Team Members"},
|
|
||||||
{"Kevin Cremin"},
|
|
||||||
{"Kevin Galvan Serrano"},
|
|
||||||
{"Joshiro Lawrence"},
|
|
||||||
{"Tuhin Mondal"},
|
|
||||||
{"Iurii Tatishchev"},
|
|
||||||
};
|
|
||||||
printTable(teamWidths, teamData);
|
|
||||||
}
|
|
||||||
|
|
||||||
void processInput(char command, HashTable<CPU>& table, BinarySearchTree<CPU>& tree, Stack<CPU>& stack);
|
|
||||||
|
|
||||||
CPU readCPUInfo();
|
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
// Print help table for commands
|
// Print help table for commands
|
||||||
printHelp();
|
printHelp();
|
||||||
|
|
||||||
HashTable<CPU> cpuTable;
|
HashTable<CPU> cpuTable;
|
||||||
BinarySearchTree<CPU> cpuTree;
|
BinarySearchTree<string> cpuTree;
|
||||||
Stack<CPU> undoStack;
|
Stack<CPU> undoStack;
|
||||||
|
|
||||||
char command = ' ';
|
char command = ' ';
|
||||||
while (command != 'Q') {
|
while (command != 'Q') {
|
||||||
cout << "Enter an option (H - for help): ";
|
cout << "Enter an option (H - for help): ";
|
||||||
cin >> command;
|
cin >> command;
|
||||||
|
command = toupper(command, std::locale());
|
||||||
// Temporary try catch block to handle unimplemented commands
|
// Temporary try catch block to handle unimplemented commands
|
||||||
try {
|
try {
|
||||||
processInput(toupper(command, std::locale()), cpuTable, cpuTree, undoStack);
|
processInput(command, cpuTable, cpuTree, undoStack);
|
||||||
} catch (std::logic_error& e) {
|
} catch (std::logic_error& e) {
|
||||||
cout << e.what() << '\n';
|
cout << e.what() << '\n';
|
||||||
}
|
}
|
||||||
@ -98,9 +64,13 @@ int main() {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void insertCPU(HashTable<CPU> &hashTable, BinarySearchTree<CPU> &tree);
|
void insertCPU(HashTable<CPU> &hashTable, BinarySearchTree<string> &tree);
|
||||||
|
|
||||||
void processInput(char command, HashTable<CPU> &cpuTable, BinarySearchTree<CPU> &cpuTree, Stack<CPU> &undoStack) {
|
void deleteCPU(HashTable<CPU> &hashTable, BinarySearchTree<string> &tree, Stack<CPU> &undoStack);
|
||||||
|
|
||||||
|
void undoDelete(HashTable<CPU> &hashTable, BinarySearchTree<string> &tree, Stack<CPU> &undoStack);
|
||||||
|
|
||||||
|
void processInput(char command, HashTable<CPU> &cpuTable, BinarySearchTree<string> &cpuTree, Stack<CPU> &undoStack) {
|
||||||
switch (command) {
|
switch (command) {
|
||||||
case 'H':
|
case 'H':
|
||||||
printHelp();
|
printHelp();
|
||||||
@ -112,10 +82,10 @@ void processInput(char command, HashTable<CPU> &cpuTable, BinarySearchTree<CPU>
|
|||||||
throw std::logic_error("Not yet implemented: File input: add data from a file");
|
throw std::logic_error("Not yet implemented: File input: add data from a file");
|
||||||
break;
|
break;
|
||||||
case 'D': // Delete one record
|
case 'D': // Delete one record
|
||||||
throw std::logic_error("Not yet implemented: Delete one record");
|
deleteCPU(cpuTable, cpuTree, undoStack);
|
||||||
break;
|
break;
|
||||||
case 'U': // Undo delete
|
case 'U': // Undo delete
|
||||||
throw std::logic_error("Not yet implemented: Undo delete");
|
undoDelete(cpuTable, cpuTree, undoStack);
|
||||||
break;
|
break;
|
||||||
case 'L': // List all CPUs sorted by primary key
|
case 'L': // List all CPUs sorted by primary key
|
||||||
throw std::logic_error("Not yet implemented: List all CPUs sorted by primary key");
|
throw std::logic_error("Not yet implemented: List all CPUs sorted by primary key");
|
||||||
@ -142,7 +112,7 @@ void processInput(char command, HashTable<CPU> &cpuTable, BinarySearchTree<CPU>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void insertCPU(HashTable<CPU> &hashTable, BinarySearchTree<CPU> &tree) {
|
void insertCPU(HashTable<CPU> &hashTable, BinarySearchTree<string> &tree) {
|
||||||
string cpuId;
|
string cpuId;
|
||||||
int releaseYear, coreCount;
|
int releaseYear, coreCount;
|
||||||
string architecture;
|
string architecture;
|
||||||
@ -160,5 +130,34 @@ void insertCPU(HashTable<CPU> &hashTable, BinarySearchTree<CPU> &tree) {
|
|||||||
CPU cpu(cpuId, releaseYear, coreCount, architecture, baseClock);
|
CPU cpu(cpuId, releaseYear, coreCount, architecture, baseClock);
|
||||||
|
|
||||||
hashTable.insert(cpu, key_to_index);
|
hashTable.insert(cpu, key_to_index);
|
||||||
tree.insert(cpu);
|
tree.insert(cpuId);
|
||||||
|
}
|
||||||
|
|
||||||
|
void deleteCPU(HashTable<CPU> &hashTable, BinarySearchTree<string> &tree, Stack<CPU> &undoStack) {
|
||||||
|
string cpuId;
|
||||||
|
cout << "Enter CPU ID to delete: ";
|
||||||
|
cin >> cpuId;
|
||||||
|
CPU cpu(cpuId, 0, 0, "", 0.0);
|
||||||
|
CPU cpuFound;
|
||||||
|
while (!hashTable.search(cpuFound, cpu, key_to_index)) {
|
||||||
|
cout << "CPU ID not found. Enter a valid CPU ID: ";
|
||||||
|
cin >> cpuId;
|
||||||
|
cpu = CPU(cpuId, 0, 0, "", 0.0);
|
||||||
|
}
|
||||||
|
undoStack.push(cpuFound);
|
||||||
|
hashTable.remove(cpu, key_to_index);
|
||||||
|
tree.remove(cpuId);
|
||||||
|
|
||||||
|
cout << "CPU ID \"" << cpuId << "\" deleted.\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
void undoDelete(HashTable<CPU> &hashTable, BinarySearchTree<string> &tree, Stack<CPU> &undoStack) {
|
||||||
|
if (undoStack.isEmpty()) {
|
||||||
|
cout << "No deletions to undo.\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
CPU cpu = undoStack.pop();
|
||||||
|
hashTable.insert(cpu, key_to_index);
|
||||||
|
tree.insert(cpu.getCpuId());
|
||||||
|
cout << "Undo deletion of CPU ID \"" << cpu.getCpuId() << "\".\n";
|
||||||
}
|
}
|
||||||
|
33
utils.cpp
33
utils.cpp
@ -69,3 +69,36 @@ void printTable(const vector<int>& widths, const vector<vector<string>>& data) {
|
|||||||
}
|
}
|
||||||
cout << "\b┘\n";
|
cout << "\b┘\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void printHelp() {
|
||||||
|
static const vector<int> helpWidths = {5, 40};
|
||||||
|
static const vector<vector<string>> helpData = {
|
||||||
|
{"Key", "Command"},
|
||||||
|
{"H", "Help"},
|
||||||
|
{"I", "Insert a new record"},
|
||||||
|
{"F", "File input: add data from a file"},
|
||||||
|
{"D", "Delete one record"},
|
||||||
|
{"U", "Undo delete"},
|
||||||
|
{"L", "List all CPUs sorted by primary key"},
|
||||||
|
{"S", "Search for a CPU by the primary key"},
|
||||||
|
{"W", "Write data to a file"},
|
||||||
|
{"T", "Hashtable statistics"},
|
||||||
|
{"Q", "Quit"},
|
||||||
|
{"P", "Hidden print option (do not show it in the menu: print indented tree)"},
|
||||||
|
{"Z", "Hidden option (do not show it in the menu: display names of team members)"},
|
||||||
|
};
|
||||||
|
printTable(helpWidths, helpData);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printTeam() {
|
||||||
|
static const vector<int> teamWidths = {40};
|
||||||
|
static const vector<vector<string>> teamData = {
|
||||||
|
{"Team Members"},
|
||||||
|
{"Kevin Cremin"},
|
||||||
|
{"Kevin Galvan Serrano"},
|
||||||
|
{"Joshiro Lawrence"},
|
||||||
|
{"Tuhin Mondal"},
|
||||||
|
{"Iurii Tatishchev"},
|
||||||
|
};
|
||||||
|
printTable(teamWidths, teamData);
|
||||||
|
}
|
||||||
|
4
utils.h
4
utils.h
@ -9,4 +9,8 @@ void printRow(const vector<int> &widths, const vector<string>& row);
|
|||||||
|
|
||||||
void printTable(const vector<int>& widths, const vector<vector<string>>& data);
|
void printTable(const vector<int>& widths, const vector<vector<string>>& data);
|
||||||
|
|
||||||
|
void printHelp();
|
||||||
|
|
||||||
|
void printTeam();
|
||||||
|
|
||||||
#endif //INC_08_TEAM_PROJECT_UTILS_H
|
#endif //INC_08_TEAM_PROJECT_UTILS_H
|
||||||
|
Loading…
x
Reference in New Issue
Block a user