document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. //JUDUL : MEMBUAT PROGRAM MESIN ATM
  2. //CREATED BY : MUHAMMAD ARIEF HIDAYATULLAH
  3. //NIM : A11.2022.14788
  4. //KELOMPOK : A11.4219
  5. //DATE : 22 JUNI 2023
  6.  
  7. #include <iostream> // library untuk input/output standar
  8. #include <fstream> // library untuk operasi file
  9. #include <ctime> // library untuk manipulasi waktu
  10. #include <vector> // library untuk menggunakan vektor
  11.  
  12. using namespace std;
  13. //deklarasi class Mutasi
  14. class Mutasi {
  15. //attribute class
  16. public:
  17. string tanggal;
  18. string keterangan;
  19. int jumlah;
  20. };
  21.  
  22. //deklarasi class Opsi
  23. class Opsi {
  24. //attribute class
  25. private:
  26. int saldo;
  27. vector<Mutasi> mutasi;
  28.  
  29. public:
  30. int setor_tunai;
  31. string cari;
  32. int rekening;
  33. int transfer;
  34. int tarik_tunai;
  35.  
  36. // PROSEDUR UNTUK MENAMPILKAN PILIHAN MENU
  37. void tampilMenu() {
  38. cout << "|>>>>>>>>>>>>>>> PILIHAN MENU : <<<<<<<<<<<<<<<|" << endl;
  39. cout << "|======= 1. Tarik Tunai =======|" << endl;
  40. cout << "|======= 2. Setor Tunai =======|" << endl;
  41. cout << "|======= 3. Tampil Saldo =======|" << endl;
  42. cout << "|======= 4. Transfer Saldo =======|" << endl;
  43. cout << "|======= 5. Mutasi Saldo =======|" << endl;
  44. cout << "|======= 6. Cari Transaksi =======|" << endl;
  45. cout << "|>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<|" << endl;
  46. }
  47.  
  48. // PROSEDUR UNTUK MENGINPUTKAN PILIHAN MENU YANG DIPILIH
  49. void opsiInput(int pilihan) {
  50. switch (pilihan) {
  51. case 1:
  52. opsiTarik();
  53. break;
  54. case 2:
  55. opsiSetor();
  56. break;
  57. case 3:
  58. opsiTampil();
  59. break;
  60. case 4:
  61. opsiTransfer();
  62. break;
  63. case 5:
  64. opsiMutasi();
  65. break;
  66. case 6:
  67. cout << " Format Tanggal : YYYY-MM-DD " << endl;
  68. cout << " Masukkan Tanggal : " ;
  69. cin >> cari;
  70. opsiCari(cari);
  71. break;
  72. default:
  73. cout << " Pilihan Menu Yang Anda Pilih Tidak Tersedia. " << endl;
  74. break;
  75. }
  76. }
  77.  
  78. // PROSEDUR UNTUK MELAKUKAN TARIK TUNAI
  79. void opsiTarik() {
  80. cout << "[----------------------------------------------]" << endl;
  81. cout << "|>>>>>>>>>>>>>>>> TARIK SALDO : <<<<<<<<<<<<<<<|" << endl;
  82. cout << "[----------------------------------------------]" << endl;
  83. cout << " Masukkan Nominal Uang Yang Ingin Di Tarik Tunai : ";
  84. cin >> tarik_tunai;
  85. cout << " Selamat Uang Anda Berhasil Di Tarik Tunai ! " << endl;
  86. saldo = saldo - tarik_tunai;
  87. cout << " Sisa Saldo Di Tabungan Anda Saat Ini: Rp " << saldo << endl;
  88. Mutasi m;
  89. m.tanggal = getCurrentTime(); // fungsi untuk mengambil waktu saat ini dari sistem dan mengembalikan nilainya dalam bentuk string dengan format "YYYY-MM-DD HH:MM:SS".
  90. m.keterangan = " Tarik Tunai "; //keterangan transaksi yang masuk ke dalam file txt
  91. m.jumlah = tarik_tunai;
  92. mutasi.push_back(m); // perintah yang digunakan untuk memasukkan objek m ke dalam vektor mutasi.
  93. simpanMutasiData(m); // untuk menyimpan data mutasi ke dalam file "mutasi_tabungan.txt". Fungsi ini akan membuka file, menuliskan informasi mutasi ke dalam file, dan menutup file setelah selesai.
  94. }
  95.  
  96. // PROSEDUR UNTUK SETOR TUNAI
  97. void opsiSetor() {
  98. cout << "[----------------------------------------------]" << endl;
  99. cout << "|>>>>>>>>>>>>>>>> SETOR TUNAI : <<<<<<<<<<<<<<<|" << endl;
  100. cout << "[----------------------------------------------]" << endl;
  101. // OUTPUT
  102. cout << " Masukkan Nominal Uang Yang Ingin Disetor : ";
  103. cin >> setor_tunai;
  104. cout << " Selamat Uang Anda Berhasil Disetorkan ! " << endl;
  105. saldo = saldo + setor_tunai;
  106. cout << " Jumlah Saldo Di Tabungan Anda Saat Ini : Rp " << saldo << endl;
  107. Mutasi m;
  108. m.tanggal = getCurrentTime(); // fungsi untuk mengambil waktu saat ini dari sistem dan mengembalikan nilainya dalam bentuk string dengan format "YYYY-MM-DD HH:MM:SS".
  109. m.keterangan = " Setor Tunai "; //keterangan transaksi yang masuk ke dalam file txt
  110. m.jumlah = setor_tunai;
  111. mutasi.push_back(m); // perintah yang digunakan untuk memasukkan objek m ke dalam vektor mutasi.
  112. simpanMutasiData(m); // untuk menyimpan data mutasi ke dalam file "mutasi_tabungan.txt". Fungsi ini akan membuka file, menuliskan informasi mutasi ke dalam file, dan menutup file setelah selesai.
  113. }
  114.  
  115. // PROSEDUR UNTUK MENAMPILKAN SALDO
  116. void opsiTampil() {
  117. cout << "[----------------------------------------------]" << endl;
  118. cout << "|>>>>>>>>>>>>>>> TAMPIL SALDO : <<<<<<<<<<<<<<<|" << endl;
  119. cout << "[----------------------------------------------]" << endl;
  120. ifstream inputFile("mutasi_tabungan.txt"); //untuk membaca file txt sebagai penyimpanan transaksi yang telah dilakukan
  121. if (!inputFile) {
  122. cout << " Gagal membuka file. " << endl;
  123. return;
  124. }
  125.  
  126. int jml = 0;
  127. string line;
  128.  
  129. while (getline(inputFile, line)) {
  130. if (line.find("Keterangan:") != string::npos) {
  131. string keterangan = line.substr(line.find(":") + 1);
  132. getline(inputFile, line); // fungsi membaca baris berikutnya untuk mendapatkan jumlah
  133. string jumlahStr = line.substr(line.find(":") + 1);
  134. int jumlah = stoi(jumlahStr);
  135.  
  136. if (keterangan == "Setor Tunai") {
  137. jml += jumlah;
  138. } else if (keterangan == "Tarik Tunai") {
  139. jml -= jumlah;
  140. }
  141. }
  142. }
  143. inputFile.close();
  144. cout << " Total Saldo Anda Saat Ini : Rp " << saldo << endl;
  145. }
  146.  
  147. // PROSEDUR UNTUK MELAKUKAN TRANSFER SALDO
  148. void opsiTransfer() {
  149. cout << "[----------------------------------------------]" << endl;
  150. cout << "|>>>>>>>>>>>>>> TRANSFER SALDO : <<<<<<<<<<<<<<|" << endl;
  151. cout << "[----------------------------------------------]" << endl;
  152. // OUTPUT
  153. cout << " Masukkan Rekening Tujuan : ";
  154. cin >> rekening;
  155. cout << "------------------------------------------------" << endl;
  156. cout << " Rekening Yang Akan Ditransfer " << rekening << endl;
  157. cout << " Masukkan Nominal Saldo Yang Ingin Ditransfer : ";
  158. cin >> transfer;
  159. cout << " Selamat Uang Anda Berhasil Ditransfer ke Rekening Tujuan ! " << endl;
  160. saldo = saldo - transfer;
  161. cout << " Jumlah Saldo Di Tabungan Anda Saat Ini : Rp " << saldo << endl;
  162. Mutasi m;
  163. m.tanggal = getCurrentTime(); // fungsi untuk mengambil waktu saat ini dari sistem dan mengembalikan nilainya dalam bentuk string dengan format "YYYY-MM-DD HH:MM:SS".
  164. m.keterangan = " Transfer Saldo ";
  165. m.jumlah = transfer;
  166. mutasi.push_back(m); // perintah yang digunakan untuk memasukkan objek m ke dalam vektor mutasi.
  167. simpanMutasiData(m); // untuk menyimpan data mutasi ke dalam file "mutasi_tabungan.txt". Fungsi ini akan membuka file, menuliskan informasi mutasi ke dalam file, dan menutup file setelah selesai.
  168. }
  169.  
  170. // PROSEDUR UNTUK MELAKUKAN MUTASI SALDO TABUNGAN
  171. void opsiMutasi() {
  172. cout << "[----------------------------------------------]" << endl;
  173. cout << "|>>>>>>>>>>> MUTASI SALDO TABUNGAN : <<<<<<<<<<|" << endl;
  174. cout << "[----------------------------------------------]" << endl;
  175. cout << "============= Mutasi Saldo Tabungan ============" << std::endl;
  176. ifstream data("mutasi_tabungan.txt");
  177. bool found = false;
  178. if (data.is_open()) {
  179. //kamus Lokal
  180. string line;
  181. while (getline(data, line)) {
  182. cout << line << endl;
  183. }
  184. data.close();
  185. } else {
  186. cout << " File tidak dapat dibuka." << endl;
  187. }
  188. }
  189.  
  190. // PROSEDUR UNTUK MENCARI TABUNGAN
  191. /*metode searching yang saya gunakan disini adalah " string searching " atau pencarian berdasarkan string, dengan tahapan sebagai berikut:
  192. 1. membaca file `mutasi_tabungan.txt` menggunakan `ifstream`.
  193. 2. melakukan pencarian baris per baris dalam file menggunakan loop `while (getline(data, line))`.
  194. 3. menggunakan function `find` untuk mencari string yang sesuai dengan pola " Tanggal: " + tanggal di setiap baris. jika ditemukan, maka transaksi pada tanggal tersebut dianggap ditemukan.
  195. 4. jika transaksi ditemukan, baris-baris transaksi selanjutnya akan ditampilkan hingga ditemui baris kosong atau baris pemisah.
  196. 5. jika transaksi tidak ditemukan, pesan " Transaksi pada tanggal [tanggal] tidak ditemukan. " akan ditampilkan.
  197. 6. jika file tidak dapat dibuka, pesan " File tidak dapat dibuka. " akan ditampilkan.
  198. */
  199. void opsiCari(string tanggal) {
  200. cout << "[----------------------------------------------]" << endl;
  201. cout << "|>>>>>>>>>>>>>>> CARI TRANSAKSI : <<<<<<<<<<<<<|" << endl;
  202. cout << "[----------------------------------------------]" << endl;
  203. ifstream data("mutasi_tabungan.txt");
  204. bool found = false;
  205. if (data.is_open()) {
  206. string line;
  207. while (getline(data, line)) {
  208. if (line.find(" Tanggal: " + tanggal) != string::npos){
  209. cout << " Data Transaksi pada tanggal " << tanggal << endl;
  210. found = true;
  211. while (getline(data, line)) {
  212. if (line.empty()) {
  213. break; // untuk melewati baris kosong dan baris pemisah
  214. }
  215. cout << line << endl;
  216. }
  217. break; // keluar dari loop saat data ditemukan
  218. }
  219. }
  220.  
  221. if (!found) {
  222. cout << " Transaksi pada tanggal " << tanggal << " tidak ditemukan." << endl;
  223. }
  224. data.close();
  225. } else {
  226. cout << "File tidak dapat dibuka." << endl;
  227. }
  228. }
  229. //PROSEDUR SIMPAN DATA
  230. void simpanMutasiData(const Mutasi& mutasi) {
  231. ofstream file("mutasi_tabungan.txt", ios_base::app);
  232. if (file.is_open()) {
  233. file << " Tanggal: " << mutasi.tanggal << endl;
  234. file << " Keterangan: " << mutasi.keterangan << endl;
  235. file << " Jumlah: " << mutasi.jumlah << endl;
  236. file << "---------------------------------------" << endl;
  237. file.close();
  238. } else {
  239. cout << " Gagal menyimpan data mutasi. " << endl;
  240. }
  241. }
  242.  
  243. //function untuk mengambil data date n time yang ada di device
  244. string getCurrentTime() {
  245. time_t now = time(0); //mengambil waktu saat ini dalam bentuk time_t
  246. tm* timeinfo = localtime(&now); //mengkonversi time_t menjadi struct tm yang berisi informasi waktu terperinci
  247. char buffer[80];
  248. strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", timeinfo); //menggunakan strftime untuk memformat waktu dalam string
  249. return string(buffer); //mengembalikan string yang berisi waktu dalam format yang diinginkan
  250. }
  251.  
  252. };
  253.  
');