· 5 months ago · Apr 25, 2025, 04:30 AM
1#include <iostream>
2#include <fstream>
3#include <sstream>
4#include <vector>
5#include <string>
6#include <iomanip>
7using namespace std;
8
9// === STRUCT ===
10struct TiketBioskop
11{
12 string nama;
13 string film;
14 string jadwal;
15 string kelas;
16 int jumlah;
17 int hargaPerTiket;
18 int totalHarga;
19 float diskon;
20 float totalBayar;
21};
22
23struct User
24{
25 string username;
26 string password;
27};
28
29// === LOGIN SYSTEM ===
30vector<User> readUsers(const string &filename)
31{
32 vector<User> users;
33 ifstream file(filename);
34 string line;
35 while (getline(file, line))
36 {
37 istringstream iss(line);
38 User u;
39 if (iss >> u.username >> u.password)
40 users.push_back(u);
41 }
42 return users;
43}
44
45void saveUser(const User &u, const string &filename)
46{
47 ofstream file(filename, ios::app);
48 file << u.username << " " << u.password << "\n";
49}
50
51void registerUser()
52{
53 User u;
54 cout << "\n=== Registrasi ===\n";
55 cout << "Username: ";
56 cin >> u.username;
57 cout << "Password: ";
58 cin >> u.password;
59 saveUser(u, "users.txt");
60 cout << "Registrasi berhasil!\n";
61}
62
63bool loginUser()
64{
65 vector<User> users = readUsers("users.txt");
66 string username, password;
67 cout << "\n=== Login ===\n";
68 cout << "Username: ";
69 cin >> username;
70 cout << "Password: ";
71 cin >> password;
72
73 for (const auto &u : users)
74 {
75 if (u.username == username && u.password == password)
76 {
77 cout << "Login sukses. Selamat datang, " << username << "!\n";
78 return true;
79 }
80 }
81 cout << "Login gagal.\n";
82 return false;
83}
84
85// === FILM HANDLER ===
86vector<string> bacaFilmDariFile(const string &filename)
87{
88 vector<string> daftarFilm;
89 ifstream file(filename);
90 string line;
91 while (getline(file, line))
92 {
93 size_t pos = line.find('|');
94 if (pos != string::npos)
95 {
96 daftarFilm.push_back(line.substr(pos + 1));
97 }
98 }
99 return daftarFilm;
100}
101
102void tampilkanMenuFilm(const vector<string> &daftarFilm)
103{
104 cout << "\n=== Daftar Film ===\n";
105 for (int i = 0; i < daftarFilm.size(); ++i)
106 {
107 cout << i + 1 << ". " << daftarFilm[i] << endl;
108 }
109}
110
111void tampilkanJadwal()
112{
113 cout << "\n=== Jadwal ===\n";
114 cout << "1. 12:00\n2. 15:00\n3. 18:00\n";
115}
116
117int hitungHarga(const string &kelas)
118{
119 if (kelas == "Reguler")
120 return 35000;
121 else if (kelas == "VIP")
122 return 50000;
123 else if (kelas == "VVIP")
124 return 75000;
125 else
126 return 0;
127}
128
129float hitungDiskon(int jumlah, int total)
130{
131 if (jumlah >= 10)
132 return 0.2 * total;
133 else if (jumlah >= 5)
134 return 0.1 * total;
135 else
136 return 0;
137}
138
139void tampilkanStruk(const TiketBioskop &t)
140{
141 cout << "\n=== STRUK PEMESANAN ===\n";
142 cout << "Nama : " << t.nama << endl;
143 cout << "Film : " << t.film << endl;
144 cout << "Jadwal : " << t.jadwal << endl;
145 cout << "Kelas : " << t.kelas << endl;
146 cout << "Jumlah Tiket : " << t.jumlah << endl;
147 cout << "Harga/Tiket : Rp " << t.hargaPerTiket << endl;
148 cout << "Total Harga : Rp " << t.totalHarga << endl;
149 cout << "Diskon : Rp " << t.diskon << endl;
150 cout << "Total Bayar : Rp " << t.totalBayar << endl;
151}
152
153void prosesPemesanan()
154{
155 TiketBioskop t;
156 vector<string> daftarFilm = bacaFilmDariFile("film.txt");
157 int pilihanFilm, pilihanJadwal;
158
159 cin.ignore();
160 cout << "\nMasukkan nama Anda: ";
161 getline(cin, t.nama);
162
163 tampilkanMenuFilm(daftarFilm);
164 cout << "Pilih film (1-" << daftarFilm.size() << "): ";
165 cin >> pilihanFilm;
166 if (pilihanFilm >= 1 && pilihanFilm <= daftarFilm.size())
167 t.film = daftarFilm[pilihanFilm - 1];
168 else
169 t.film = "Tidak diketahui";
170
171 tampilkanJadwal();
172 cout << "Pilih jadwal (1-3): ";
173 cin >> pilihanJadwal;
174 if (pilihanJadwal == 1)
175 t.jadwal = "12:00";
176 else if (pilihanJadwal == 2)
177 t.jadwal = "15:00";
178 else if (pilihanJadwal == 3)
179 t.jadwal = "18:00";
180 else
181 t.jadwal = "Tidak diketahui";
182
183 cout << "Pilih kelas (Reguler/VIP/VVIP): ";
184 cin >> t.kelas;
185
186 cout << "Jumlah tiket: ";
187 cin >> t.jumlah;
188
189 t.hargaPerTiket = hitungHarga(t.kelas);
190 t.totalHarga = t.hargaPerTiket * t.jumlah;
191 t.diskon = hitungDiskon(t.jumlah, t.totalHarga);
192 t.totalBayar = t.totalHarga - t.diskon;
193
194 tampilkanStruk(t);
195}
196
197// === MAIN MENU ===
198int main()
199{
200 int opsi, menuLanjut;
201 cout << "=== SISTEM TIKET BIOSKOP ===\n";
202 cout << "1. Login\n2. Registrasi\nPilih opsi: ";
203 cin >> opsi;
204
205 if (opsi == 1)
206 {
207 if (!loginUser())
208 return 0;
209 }
210 else if (opsi == 2)
211 {
212 registerUser();
213 if (!loginUser())
214 return 0;
215 }
216 else
217 {
218 cout << "Opsi tidak valid.\n";
219 return 0;
220 }
221
222 do
223 {
224 prosesPemesanan();
225 cout << "\nIngin pesan tiket lagi?\n1. Ya\n2. Keluar\nPilih: ";
226 cin >> menuLanjut;
227 } while (menuLanjut == 1);
228
229 cout << "\nTerima kasih sudah menggunakan sistem kami!\n";
230 return 0;
231}
232
233