aboutsummaryrefslogtreecommitdiff
path: root/CPP/BABS
diff options
context:
space:
mode:
authorSyndamia <kamen.d.mladenov@protonmail.com>2020-06-26 15:01:47 +0300
committerSyndamia <kamen.d.mladenov@protonmail.com>2020-06-26 15:01:47 +0300
commite4bc857f1f7edf677c3ffec8021db57043db350d (patch)
treeff2caab04d41e5dc8288a3deeb4b6553e5356af9 /CPP/BABS
parent55571ba49d08581ee9d52b653cb84a37d81dd151 (diff)
downloadSelf-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.mk126
-rw-r--r--CPP/BABS/BABS.project102
-rw-r--r--CPP/BABS/BankAccount.cpp43
-rw-r--r--CPP/BABS/BankAccount.h19
-rw-r--r--CPP/BABS/BankSystem.cpp87
-rw-r--r--CPP/BABS/BankSystem.h8
-rw-r--r--CPP/BABS/compile_flags.txt9
-rw-r--r--CPP/BABS/main.cpp35
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="&lt;Use Defaults&gt;" DbgSetName="&lt;Use Defaults&gt;">
+ <![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="&lt;Use Defaults&gt;" DbgSetName="&lt;Use Defaults&gt;">
+ <![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