diff options
| author | Syndamia <kamen.d.mladenov@protonmail.com> | 2020-06-26 15:01:47 +0300 |
|---|---|---|
| committer | Syndamia <kamen.d.mladenov@protonmail.com> | 2020-06-26 15:01:47 +0300 |
| commit | e4bc857f1f7edf677c3ffec8021db57043db350d (patch) | |
| tree | ff2caab04d41e5dc8288a3deeb4b6553e5356af9 /CPP/BABS | |
| parent | 55571ba49d08581ee9d52b653cb84a37d81dd151 (diff) | |
| download | Self-learning-e4bc857f1f7edf677c3ffec8021db57043db350d.tar Self-learning-e4bc857f1f7edf677c3ffec8021db57043db350d.tar.gz Self-learning-e4bc857f1f7edf677c3ffec8021db57043db350d.zip | |
Started working on a C++ basic bank account project. You can create an account, deposit and withdraw money from it for now.
Diffstat (limited to 'CPP/BABS')
| -rw-r--r-- | CPP/BABS/BABS.mk | 126 | ||||
| -rw-r--r-- | CPP/BABS/BABS.project | 102 | ||||
| -rw-r--r-- | CPP/BABS/BankAccount.cpp | 43 | ||||
| -rw-r--r-- | CPP/BABS/BankAccount.h | 19 | ||||
| -rw-r--r-- | CPP/BABS/BankSystem.cpp | 87 | ||||
| -rw-r--r-- | CPP/BABS/BankSystem.h | 8 | ||||
| -rw-r--r-- | CPP/BABS/compile_flags.txt | 9 | ||||
| -rw-r--r-- | CPP/BABS/main.cpp | 35 |
8 files changed, 429 insertions, 0 deletions
diff --git a/CPP/BABS/BABS.mk b/CPP/BABS/BABS.mk new file mode 100644 index 0000000..cbeb34b --- /dev/null +++ b/CPP/BABS/BABS.mk @@ -0,0 +1,126 @@ +## +## Auto Generated makefile by CodeLite IDE +## any manual changes will be erased +## +## Debug +ProjectName :=BABS +ConfigurationName :=Debug +WorkspaceConfiguration := $(ConfigurationName) +WorkspacePath :=/home/kamen/Programming/GitHub-repos/Self-learning/CPP +ProjectPath :=/home/kamen/Programming/GitHub-repos/Self-learning/CPP/BABS +IntermediateDirectory :=../build-$(ConfigurationName)/BABS +OutDir :=../build-$(ConfigurationName)/BABS +CurrentFileName := +CurrentFilePath := +CurrentFileFullPath := +User :=Kamen +Date :=26/06/20 +CodeLitePath :=/home/kamen/.codelite +LinkerName :=/usr/bin/g++ +SharedObjectLinkerName :=/usr/bin/g++ -shared -fPIC +ObjectSuffix :=.o +DependSuffix :=.o.d +PreprocessSuffix :=.i +DebugSwitch :=-g +IncludeSwitch :=-I +LibrarySwitch :=-l +OutputSwitch :=-o +LibraryPathSwitch :=-L +PreprocessorSwitch :=-D +SourceSwitch :=-c +OutputFile :=../build-$(ConfigurationName)/bin/$(ProjectName) +Preprocessors := +ObjectSwitch :=-o +ArchiveOutputSwitch := +PreprocessOnlySwitch :=-E +ObjectsFileList :=$(IntermediateDirectory)/ObjectsList.txt +PCHCompileFlags := +LinkOptions := +IncludePath := $(IncludeSwitch). $(IncludeSwitch). +IncludePCH := +RcIncludePath := +Libs := +ArLibs := +LibPath := $(LibraryPathSwitch). + +## +## Common variables +## AR, CXX, CC, AS, CXXFLAGS and CFLAGS can be overriden using an environment variables +## +AR := /usr/bin/ar rcu +CXX := /usr/bin/g++ +CC := /usr/bin/gcc +CXXFLAGS := -g -O0 -Wall $(Preprocessors) +CFLAGS := -g -O0 -Wall $(Preprocessors) +ASFLAGS := +AS := /usr/bin/as + + +## +## User defined environment variables +## +CodeLiteDir:=/usr/share/codelite +Objects0=../build-$(ConfigurationName)/BABS/main.cpp$(ObjectSuffix) ../build-$(ConfigurationName)/BABS/BankSystem.cpp$(ObjectSuffix) ../build-$(ConfigurationName)/BABS/BankAccount.cpp$(ObjectSuffix) + + + +Objects=$(Objects0) + +## +## Main Build Targets +## +.PHONY: all clean PreBuild PrePreBuild PostBuild MakeIntermediateDirs +all: MakeIntermediateDirs $(OutputFile) + +$(OutputFile): ../build-$(ConfigurationName)/BABS/.d $(Objects) + @mkdir -p "../build-$(ConfigurationName)/BABS" + @echo "" > $(IntermediateDirectory)/.d + @echo $(Objects0) > $(ObjectsFileList) + $(LinkerName) $(OutputSwitch)$(OutputFile) @$(ObjectsFileList) $(LibPath) $(Libs) $(LinkOptions) + +MakeIntermediateDirs: + @mkdir -p "../build-$(ConfigurationName)/BABS" + @mkdir -p ""../build-$(ConfigurationName)/bin"" + +../build-$(ConfigurationName)/BABS/.d: + @mkdir -p "../build-$(ConfigurationName)/BABS" + +PreBuild: + + +## +## Objects +## +../build-$(ConfigurationName)/BABS/main.cpp$(ObjectSuffix): main.cpp ../build-$(ConfigurationName)/BABS/main.cpp$(DependSuffix) + $(CXX) $(IncludePCH) $(SourceSwitch) "/home/kamen/Programming/GitHub-repos/Self-learning/CPP/BABS/main.cpp" $(CXXFLAGS) $(ObjectSwitch)$(IntermediateDirectory)/main.cpp$(ObjectSuffix) $(IncludePath) +../build-$(ConfigurationName)/BABS/main.cpp$(DependSuffix): main.cpp + @$(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) -MG -MP -MT../build-$(ConfigurationName)/BABS/main.cpp$(ObjectSuffix) -MF../build-$(ConfigurationName)/BABS/main.cpp$(DependSuffix) -MM main.cpp + +../build-$(ConfigurationName)/BABS/main.cpp$(PreprocessSuffix): main.cpp + $(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) ../build-$(ConfigurationName)/BABS/main.cpp$(PreprocessSuffix) main.cpp + +../build-$(ConfigurationName)/BABS/BankSystem.cpp$(ObjectSuffix): BankSystem.cpp ../build-$(ConfigurationName)/BABS/BankSystem.cpp$(DependSuffix) + $(CXX) $(IncludePCH) $(SourceSwitch) "/home/kamen/Programming/GitHub-repos/Self-learning/CPP/BABS/BankSystem.cpp" $(CXXFLAGS) $(ObjectSwitch)$(IntermediateDirectory)/BankSystem.cpp$(ObjectSuffix) $(IncludePath) +../build-$(ConfigurationName)/BABS/BankSystem.cpp$(DependSuffix): BankSystem.cpp + @$(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) -MG -MP -MT../build-$(ConfigurationName)/BABS/BankSystem.cpp$(ObjectSuffix) -MF../build-$(ConfigurationName)/BABS/BankSystem.cpp$(DependSuffix) -MM BankSystem.cpp + +../build-$(ConfigurationName)/BABS/BankSystem.cpp$(PreprocessSuffix): BankSystem.cpp + $(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) ../build-$(ConfigurationName)/BABS/BankSystem.cpp$(PreprocessSuffix) BankSystem.cpp + +../build-$(ConfigurationName)/BABS/BankAccount.cpp$(ObjectSuffix): BankAccount.cpp ../build-$(ConfigurationName)/BABS/BankAccount.cpp$(DependSuffix) + $(CXX) $(IncludePCH) $(SourceSwitch) "/home/kamen/Programming/GitHub-repos/Self-learning/CPP/BABS/BankAccount.cpp" $(CXXFLAGS) $(ObjectSwitch)$(IntermediateDirectory)/BankAccount.cpp$(ObjectSuffix) $(IncludePath) +../build-$(ConfigurationName)/BABS/BankAccount.cpp$(DependSuffix): BankAccount.cpp + @$(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) -MG -MP -MT../build-$(ConfigurationName)/BABS/BankAccount.cpp$(ObjectSuffix) -MF../build-$(ConfigurationName)/BABS/BankAccount.cpp$(DependSuffix) -MM BankAccount.cpp + +../build-$(ConfigurationName)/BABS/BankAccount.cpp$(PreprocessSuffix): BankAccount.cpp + $(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) ../build-$(ConfigurationName)/BABS/BankAccount.cpp$(PreprocessSuffix) BankAccount.cpp + + +-include ../build-$(ConfigurationName)/BABS//*$(DependSuffix) +## +## Clean +## +clean: + $(RM) -r $(IntermediateDirectory) + + diff --git a/CPP/BABS/BABS.project b/CPP/BABS/BABS.project new file mode 100644 index 0000000..5ea191d --- /dev/null +++ b/CPP/BABS/BABS.project @@ -0,0 +1,102 @@ +<?xml version="1.0" encoding="UTF-8"?> +<CodeLite_Project Name="BABS" Version="11000" InternalType="Console"> + <Description/> + <Dependencies/> + <Settings Type="Executable"> + <GlobalSettings> + <Compiler Options="" C_Options="" Assembler=""> + <IncludePath Value="."/> + </Compiler> + <Linker Options=""> + <LibraryPath Value="."/> + </Linker> + <ResourceCompiler Options=""/> + </GlobalSettings> + <Configuration Name="Debug" CompilerType="GCC" DebuggerType="GNU gdb debugger" Type="Executable" BuildCmpWithGlobalSettings="append" BuildLnkWithGlobalSettings="append" BuildResWithGlobalSettings="append"> + <Compiler Options="-g;-O0;-Wall" C_Options="-g;-O0;-Wall" Assembler="" Required="yes" PreCompiledHeader="" PCHInCommandLine="no" PCHFlags="" PCHFlagsPolicy="0"> + <IncludePath Value="."/> + </Compiler> + <Linker Options="" Required="yes"/> + <ResourceCompiler Options="" Required="no"/> + <General OutputFile="$(ProjectName)" IntermediateDirectory="" Command="$(WorkspacePath)/build-$(WorkspaceConfiguration)/bin/$(OutputFile)" CommandArguments="" UseSeparateDebugArgs="no" DebugArguments="" WorkingDirectory="$(WorkspacePath)/build-$(WorkspaceConfiguration)/lib" PauseExecWhenProcTerminates="yes" IsGUIProgram="no" IsEnabled="yes"/> + <BuildSystem Name="CodeLite Make Generator"/> + <Environment EnvVarSetName="<Use Defaults>" DbgSetName="<Use Defaults>"> + <![CDATA[]]> + </Environment> + <Debugger IsRemote="no" RemoteHostName="" RemoteHostPort="" DebuggerPath="" IsExtended="no"> + <DebuggerSearchPaths/> + <PostConnectCommands/> + <StartupCommands/> + </Debugger> + <PreBuild/> + <PostBuild/> + <CustomBuild Enabled="no"> + <RebuildCommand/> + <CleanCommand/> + <BuildCommand/> + <PreprocessFileCommand/> + <SingleFileCommand/> + <MakefileGenerationCommand/> + <ThirdPartyToolName>None</ThirdPartyToolName> + <WorkingDirectory/> + </CustomBuild> + <AdditionalRules> + <CustomPostBuild/> + <CustomPreBuild/> + </AdditionalRules> + <Completion EnableCpp11="no" EnableCpp14="no"> + <ClangCmpFlagsC/> + <ClangCmpFlags/> + <ClangPP/> + <SearchPaths/> + </Completion> + </Configuration> + <Configuration Name="Release" CompilerType="GCC" DebuggerType="GNU gdb debugger" Type="Executable" BuildCmpWithGlobalSettings="append" BuildLnkWithGlobalSettings="append" BuildResWithGlobalSettings="append"> + <Compiler Options="-O2;-Wall" C_Options="-O2;-Wall" Assembler="" Required="yes" PreCompiledHeader="" PCHInCommandLine="no" PCHFlags="" PCHFlagsPolicy="0"> + <IncludePath Value="."/> + <Preprocessor Value="NDEBUG"/> + </Compiler> + <Linker Options="" Required="yes"/> + <ResourceCompiler Options="" Required="no"/> + <General OutputFile="$(ProjectName)" IntermediateDirectory="" Command="$(WorkspacePath)/build-$(WorkspaceConfiguration)/bin/$(OutputFile)" CommandArguments="" UseSeparateDebugArgs="no" DebugArguments="" WorkingDirectory="$(WorkspacePath)/build-$(WorkspaceConfiguration)/lib" PauseExecWhenProcTerminates="yes" IsGUIProgram="no" IsEnabled="yes"/> + <BuildSystem Name="CodeLite Make Generator"/> + <Environment EnvVarSetName="<Use Defaults>" DbgSetName="<Use Defaults>"> + <![CDATA[]]> + </Environment> + <Debugger IsRemote="no" RemoteHostName="" RemoteHostPort="" DebuggerPath="" IsExtended="no"> + <DebuggerSearchPaths/> + <PostConnectCommands/> + <StartupCommands/> + </Debugger> + <PreBuild/> + <PostBuild/> + <CustomBuild Enabled="no"> + <RebuildCommand/> + <CleanCommand/> + <BuildCommand/> + <PreprocessFileCommand/> + <SingleFileCommand/> + <MakefileGenerationCommand/> + <ThirdPartyToolName>None</ThirdPartyToolName> + <WorkingDirectory/> + </CustomBuild> + <AdditionalRules> + <CustomPostBuild/> + <CustomPreBuild/> + </AdditionalRules> + <Completion EnableCpp11="no" EnableCpp14="no"> + <ClangCmpFlagsC/> + <ClangCmpFlags/> + <ClangPP/> + <SearchPaths/> + </Completion> + </Configuration> + </Settings> + <VirtualDirectory Name="src"> + <File Name="BankAccount.h"/> + <File Name="BankSystem.h"/> + <File Name="BankAccount.cpp"/> + <File Name="BankSystem.cpp"/> + <File Name="main.cpp"/> + </VirtualDirectory> +</CodeLite_Project> diff --git a/CPP/BABS/BankAccount.cpp b/CPP/BABS/BankAccount.cpp new file mode 100644 index 0000000..180f56c --- /dev/null +++ b/CPP/BABS/BankAccount.cpp @@ -0,0 +1,43 @@ +#include <string> + +#include "BankAccount.h" + +int currId = 0; + +BankAccount::BankAccount() { + id = currId++; + balance = 0; +} + +BankAccount::BankAccount(int initialDeposit) { + id = currId++; + balance = initialDeposit; +} + +int BankAccount::getId() { + return id; +} + +int BankAccount::getBalance() { + return balance; +} + +void BankAccount::deposit(int amount) { + balance += amount; +} + +int BankAccount::withdraw(int amount) { + if (amount > balance) { + return -1; + } + balance -= amount; + return amount; +} + +std::string BankAccount::toString() { + return "ID: " + std::to_string(id) + " Balance: " + std::to_string(balance); +} + +void BankAccount::close() { + closed = true; +}
\ No newline at end of file diff --git a/CPP/BABS/BankAccount.h b/CPP/BABS/BankAccount.h new file mode 100644 index 0000000..7e85b47 --- /dev/null +++ b/CPP/BABS/BankAccount.h @@ -0,0 +1,19 @@ +#ifndef TEST_BANKACCOUNT +#define TEST_BANKACCOUNT +#include <string> + +class BankAccount { + int id, balance; + bool closed; + public: + BankAccount(); + BankAccount(int); + int getId(); + int getBalance(); + void deposit(int); + int withdraw(int); + std::string toString(); + void close(); +}; + +#endif
\ No newline at end of file diff --git a/CPP/BABS/BankSystem.cpp b/CPP/BABS/BankSystem.cpp new file mode 100644 index 0000000..1493451 --- /dev/null +++ b/CPP/BABS/BankSystem.cpp @@ -0,0 +1,87 @@ +#include <iostream> +#include <vector> + +#include "BankSystem.h" + +using namespace std; + +std::vector<BankAccount> BADatabase; + +int getIndexFromID(int id) { + for(int i = 0; i < BADatabase.size(); i++) { + if (BADatabase[i].getId() == id) { + return i; + } + } + return -1; +} + +void listAllAccounts() { + for(BankAccount ba: BADatabase) { + cout << ba.toString() << endl; + } +} + +void openBankAccount() { + cout << "Initial balance: "; + int initBalance; + cin >> initBalance; + + BankAccount newBA(initBalance); + BADatabase.push_back(newBA); + cout << "Created new bank account with ID: " << newBA.getId() << endl; +} + +void closeBankAccount() { + cout << "Bank account ID: "; + int id; + cin >> id; + + cout << "Are you really sure you want to close bank account with ID: " << id << "? [y/n]"; + char answer; + cin >> answer; + + if (answer == 'y' || answer == 'Y') { + BADatabase[getIndexFromID(id)].close(); + } + + cout << "Bank account with ID: " << id << " is closed!" << endl; +} + +void bankerMode() { + while(true) { + cout << "What do you want to do: [0] Exit, [1] List bank accounts, [2] Open bank account, [3] Close bank account" << endl; + + int value; + cin >> value; + + switch(value) { + case 0: return; + case 1: listAllAccounts(); break; + case 2: openBankAccount(); break; + case 3: closeBankAccount(); break; + } + } +} + +void atmMode() { + cout << "Bank accont ID: "; + int userId; + cin >> userId; + cout << endl; + + BankAccount ba = BADatabase[userId]; + while(true) { + cout << "What do you want to do: [0] Exit, [1] View balance, [2] Deposit money, [3] Withdraw money?" << endl; + + int value; + cin >> value; + + switch(value) { + case 0: return; + case 1: cout << ba.getBalance() << endl; break; + case 2: cout << "Amount to deposit: "; cin >> value; ba.deposit(value); break; + case 3: cout << "Amount to withdraw: "; cin >> value; ba.deposit(value); break; + } + } +}
\ No newline at end of file diff --git a/CPP/BABS/BankSystem.h b/CPP/BABS/BankSystem.h new file mode 100644 index 0000000..a593a92 --- /dev/null +++ b/CPP/BABS/BankSystem.h @@ -0,0 +1,8 @@ +#ifndef BA-BANK_SYSTEM-BANK_SYSTEM +#define BA-BANK_SYSTEM-BANK_SYSTEM +#include "BankAccount.h" + +void bankerMode(); +void atmMode(); + +#endif
\ No newline at end of file diff --git a/CPP/BABS/compile_flags.txt b/CPP/BABS/compile_flags.txt new file mode 100644 index 0000000..8ce13f3 --- /dev/null +++ b/CPP/BABS/compile_flags.txt @@ -0,0 +1,9 @@ +-I/usr/include/c++/7 +-I/usr/include/x86_64-linux-gnu/c++/7 +-I/usr/include/c++/7/backward +-I/usr/lib/gcc/x86_64-linux-gnu/7/include +-I/usr/local/include +-I/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed +-I/usr/include/x86_64-linux-gnu +-I/usr/include +-I/home/kamen/Programming/GitHub-repos/Self-learning/CPP/BABS diff --git a/CPP/BABS/main.cpp b/CPP/BABS/main.cpp new file mode 100644 index 0000000..a9ff61e --- /dev/null +++ b/CPP/BABS/main.cpp @@ -0,0 +1,35 @@ +#include <iostream> + +#include "BankSystem.h" + +#define MODE_SPACER "------------------------------------------------------------" + +using namespace std; + +int main() +{ + cout << "Welcome to BA banking system!" << endl << endl; + while(true) { + cout << "Mode: Atm/Banker/Exit "; + char inValue; + cin >> inValue; + + if (inValue == 'e' || inValue == 'E') { + return 0; + } + + if (inValue == 'b' || inValue == 'B') { + cout << MODE_SPACER << endl; + bankerMode(); + cout << MODE_SPACER << endl; + } + else { + cout << MODE_SPACER << endl; + atmMode(); + cout << MODE_SPACER << endl; + } + } + cout << "Goodbye!" << endl << endl; + + return 0; +}
\ No newline at end of file |
