A bunch of updates

This commit is contained in:
theskywinds 2025-06-13 09:59:22 +02:00
parent df4bda7a3e
commit 8e07fdefe1
4 changed files with 84 additions and 30 deletions

View File

@ -13,20 +13,59 @@ find_package(pugixml CONFIG REQUIRED)
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE libs)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE pugixml::static pugixml::pugixml)
target_compile_options(${PROJECT_NAME} PRIVATE
# Make all warnings into errors
-Werror
# Check if we're using MinGW or compiling for Windows
if(MINGW OR WIN32)
# Windows/MinGW specific settings
target_compile_options(${PROJECT_NAME} PRIVATE
# Make all warnings into errors
-Werror
# Basic warning flags
-Wall # Enable all common warnings
-Wextra # Enable extra warnings not covered by -Wall
-Wpedantic # Issue warnings demanded by strict ISO C and ISO C++
-pedantic-errors # Like -Wpedantic but errors instead of warnings
# Basic warning flags
-Wall # Enable all common warnings
-Wextra # Enable extra warnings not covered by -Wall
-Wpedantic # Issue warnings demanded by strict ISO C and ISO C++
-pedantic-errors # Like -Wpedantic but errors instead of warnings
# Specific warning categories
-Wshadow # Warn when a variable declaration shadows another
-Wcast-align # Warn for potential performance problems from memory alignment
-Wconversion # Warn on type conversions that may lose data
-Wsign-conversion # Warn on sign conversions
-Wnull-dereference # Warn about null pointer dereference
)
# Specific warning categories
-Wshadow # Warn when a variable declaration shadows another
-Wcast-align # Warn for potential performance problems from memory alignment
-Wconversion # Warn on type conversions that may lose data
-Wsign-conversion # Warn on sign conversions
-Wnull-dereference # Warn about null pointer dereference
# MinGW/Windows specific flags
-static-libgcc # Link libgcc statically
-static-libstdc++ # Link libstdc++ statically
)
# Windows-specific linker flags
target_link_options(${PROJECT_NAME} PRIVATE
-static # Create a static executable
-Wl,--no-undefined # Don't allow undefined symbols
)
# Define Windows macros if needed
target_compile_definitions(${PROJECT_NAME} PRIVATE
WIN32_LEAN_AND_MEAN # Exclude rarely-used stuff from Windows headers
NOMINMAX # Prevent Windows.h from defining min/max macros
)
else()
# Linux/Unix specific settings
target_compile_options(${PROJECT_NAME} PRIVATE
# Make all warnings into errors
-Werror
# Basic warning flags
-Wall # Enable all common warnings
-Wextra # Enable extra warnings not covered by -Wall
-Wpedantic # Issue warnings demanded by strict ISO C and ISO C++
-pedantic-errors # Like -Wpedantic but errors instead of warnings
# Specific warning categories
-Wshadow # Warn when a variable declaration shadows another
-Wcast-align # Warn for potential performance problems from memory alignment
-Wconversion # Warn on type conversions that may lose data
-Wsign-conversion # Warn on sign conversions
-Wnull-dereference # Warn about null pointer dereference
)
endif()

View File

@ -108,15 +108,17 @@ namespace AtmAdmin {
std::array<int, 4> pinDigits{};
for (size_t i{}; i != 4; i++) {
pinDigits[i] = (newPin[i] - '0');
}
// Asserts that the pin is exactly 4 letters in length.
if (newPin.size() != 4) {
errorReport("The pin has to be 4 numbers long.");
return "invalid";
}
// Fills the int array with a number version of the string array.
for (size_t i{}; i != 4; i++) {
pinDigits[i] = (newPin[i] - '0');
}
if (newPin[0] == '0') {
errorReport("The first number cannot be \'0\'");
return "invalid";
@ -124,7 +126,7 @@ namespace AtmAdmin {
// Checks if anything put into the pin is alphabetic.
for (size_t i = 0; i < 4; i++) {
if (isalpha(newPin[i])) {
if (!isdigit(newPin[i])) {
errorReport("The pin cannot contain alphabet letters.");
return "invalid";
}
@ -174,15 +176,9 @@ namespace AtmAdmin {
Error::ignoreLine();
std::getline(std::cin, newName);
// Ensures the name is between 2 and 10 characters long.
if (newName.length() < 2 or newName.length() > 20) {
errorReport("Name has to be between 2 and 20 characters.");
return "invalid";
}
// Checks if the first character is a number.
if (isdigit(newName.at(0))) {
errorReport("First letter cannot be a digit.");
// Ensures the name is between 2 and 15 characters long.
if (newName.length() < 2 or newName.length() > 15) {
errorReport("Name has to be between 2 and 15 characters.");
return "invalid";
}

19
src/data/users.xml Normal file
View File

@ -0,0 +1,19 @@
<bankapp>
<bank>
<money>5000.0</money>
</bank>
<accounts>
<account owner="foo">
<name>Foo Jamerson</name>
<money>5017.97</money>
<pin>9671</pin>
</account>
<account owner="bar">
<name>Bar Memorial</name>
<money>8910.51</money>
<pin>5217</pin>
</account>
</accounts>
</bankapp>

View File

@ -19,7 +19,7 @@ int main() {
// startup() presents the user with the choices below.
// The other functions should handle invalid choices.
// ((1. Change pin || 2. Change money || 3. Change account name || Q. Exit the program))
char userChoice{AtmAdmin::startup()};
char userChoice{startup()};
std::string userInformation{};
// The bulk of the program, allowing user to interact with the program.