Advertisement
Guest User

Untitled

a guest
Apr 21st, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.96 KB | None | 0 0
  1. program wanshitong;
  2.  
  3. uses
  4. data_type,
  5. date_handler,
  6. csv_handler,
  7. user_handler,
  8. buku_handler,
  9. peminjaman_handler,
  10. pengembalian_handler,
  11. hilang_handler;
  12.  
  13. var
  14. cmd, file_user, file_buku, file_pengembalian, file_peminjaman, file_hilang: string;
  15. sudahload, sudahlogin, is_admin: boolean;
  16. data_user: users;
  17. data_buku: grupbuku;
  18. data_pengembalian: gruppengembalian;
  19. data_peminjaman: gruppeminjaman;
  20. data_hilang: gruphilang;
  21.  
  22.  
  23. login_data: user;
  24.  
  25. function convert1(c: char):integer;
  26. begin
  27. convert1 := ord(c)-97;
  28. end;
  29.  
  30. function convert2(t: integer):char;
  31. begin
  32. convert2 := chr(t+97);
  33. end;
  34.  
  35. function hashPass(st: string): string;
  36. var
  37. len, i, geser: integer;
  38. c: char;
  39. res: string;
  40. begin
  41. len := 0;
  42. for c in st do
  43. begin
  44. len := len+1;
  45. end;
  46.  
  47. res := '';
  48. i := 1;
  49. for c in st do
  50. begin
  51. geser := convert1(c)+len;
  52. geser := geser mod 26;
  53. if(i mod 2 = 0) then
  54. begin
  55. res := res + convert2(geser);
  56. res := convert2((i*3109) mod 26)+IntToStr(i+31) + res;
  57. end
  58. else
  59. begin
  60. res := convert2(geser) + res;
  61. res := res + convert2((i*319) mod 26)+IntToStr(i+88);
  62. end;
  63. i := i+1;
  64. end;
  65. hashPass := res;
  66. end;
  67.  
  68. procedure load_data();
  69. var
  70. arr_user, arr_buku, arr_pengembalian, arr_peminjaman, arr_hilang: string_arr;
  71. begin
  72. write('Masukkan nama File Buku: ');
  73. readln(file_buku);
  74. arr_buku := read_csv(file_buku);
  75. data_buku := buku_create(arr_buku);
  76. write('Masukkan nama File User: ');
  77. readln(file_user);
  78. arr_user := read_csv(file_user);
  79. data_user := user_create(arr_user);
  80. write('Masukkan nama File Peminjaman: ');
  81. readln(file_peminjaman);
  82. arr_peminjaman := read_csv(file_peminjaman);
  83. data_peminjaman := peminjaman_create(arr_peminjaman);
  84. write('Masukkan nama File Pengembalian: ');
  85. readln(file_pengembalian);
  86. arr_pengembalian := read_csv(file_pengembalian);
  87. data_pengembalian := pengembalian_create(arr_pengembalian);
  88. write('Masukkan nama File Buku Hilang: ');
  89. readln(file_hilang);
  90. arr_hilang := read_csv(file_hilang);
  91. data_hilang := hilang_create(arr_hilang);
  92.  
  93. writeln('File perpustakaan berhasil dimuat!');
  94. end;
  95.  
  96. procedure login();
  97. var
  98. i: integer;
  99. username, password: string;
  100. found: boolean;
  101. begin
  102. found := false;
  103. while(found=false) do
  104. begin
  105. write('Masukkan username: ');
  106. readln(username);
  107. write('Masukkan password: ');
  108. readln(password);
  109. password := hashPass(password);
  110. i := 1;
  111. while(i <= data_user.size) do
  112. begin
  113. if(data_user.data[i].Username = username) and (data_user.data[i].Password = password) then
  114. begin
  115. found := true;
  116. login_data := data_user.data[i];
  117. end;
  118. i := i+1;
  119. end;
  120.  
  121. if (found=false) then
  122. begin
  123. writeln('Username / password salah! Silakan coba lagi.');
  124. end;
  125. end;
  126.  
  127. writeln('Selamat datang ' + login_data.Nama + ' !');
  128. sudahlogin := true;
  129. if (login_data.Role = 1) then
  130. begin
  131. is_admin:=true;
  132. end;
  133. end;
  134.  
  135. procedure daftar_akun();
  136. var
  137. nama, alamat, username, password: string;
  138. hasil : user;
  139. banyak: integer;
  140. begin
  141. write('Masukkan nama pengunjung: ');
  142. readln(nama);
  143. write('Masukkan alamat pengunjung: ');
  144. readln(alamat);
  145. write('Masukkan username pengunjung: ');
  146. readln(username);
  147. write('Masukkan password pengunjung: ');
  148. readln(password);
  149. hasil.Nama := nama;
  150. hasil.Alamat := alamat;
  151. hasil.Username := username;
  152. hasil.Password := hashPass(password);
  153. hasil.Role:=0;
  154.  
  155. banyak := data_user.size+1;
  156. data_user.data[banyak]:=hasil;
  157. data_user.size := banyak;
  158. write_csv(file_user, 'user', user_merge(data_user));
  159. writeln('Pengunjung ' + nama + ' berhasil terdaftar sebagai user.')
  160. end;
  161.  
  162. procedure cari_anggota();
  163. var
  164. username: string;
  165. i : integer;
  166. found: boolean;
  167. anggota: user;
  168. begin
  169. write('Masukkan username: ');
  170. readln(username);
  171.  
  172. found := false;
  173. i := 1;
  174. while (i <= data_user.size) do
  175. begin
  176. if(data_user.data[i].Username=username) then
  177. begin
  178. found:=true;
  179. anggota := data_user.data[i];
  180. end;
  181. i := i+1;
  182. end;
  183.  
  184. if(found) then
  185. begin
  186. writeln('Nama Anggota: ' + anggota.Nama);
  187. writeln('Alamat: ' + anggota.Alamat);
  188. end
  189. else
  190. begin
  191. writeln('Tidak ditemukan user dengan username tersebut.');
  192. end;
  193. end;
  194.  
  195. procedure save_file();
  196. begin
  197. write('Masukkan nama File Buku: ');
  198. readln(file_buku);
  199. write_csv(file_buku, 'buku', buku_merge(data_buku));
  200. write('Masukkan nama File User: ');
  201. readln(file_user);
  202. write_csv(file_user, 'user', user_merge(data_user));
  203. write('Masukkan nama File Peminjaman: ');
  204. readln(file_peminjaman);
  205. write_csv(file_peminjaman, 'peminjaman', peminjaman_merge(data_peminjaman));
  206. write('Masukkan nama File Pengembalian: ');
  207. readln(file_pengembalian);
  208. write_csv(file_pengembalian, 'pengembalian', pengembalian_merge(data_pengembalian));
  209. write('Masukkan nama File Buku Hilang: ');
  210. readln(file_hilang);
  211. write_csv(file_hilang, 'hilang', hilang_merge(data_hilang));
  212.  
  213. writeln('Data berhasil disimpan!');
  214. end;
  215.  
  216. procedure statistik();
  217. var
  218. i, admin, pengunjung, sastra, sains, manga, sejarah, programming: integer;
  219. begin
  220. admin := 0;
  221. pengunjung := 0;
  222. i := 1;
  223. while (i <= data_user.size) do
  224. begin
  225. if(data_user.data[i].Role=0) then
  226. begin
  227. pengunjung := pengunjung + 1;
  228. end
  229. else
  230. begin
  231. admin := admin + 1;
  232. end;
  233. i := i+1;
  234. end;
  235. sastra := 0;
  236. sains := 0;
  237. manga := 0;
  238. sejarah := 0;
  239. programming := 0;
  240. i := 1;
  241. while (i <= data_buku.size) do
  242. begin
  243. case (data_buku.data[i].Kategori) of
  244. 'programming':
  245. begin
  246. programming := programming + 1;
  247. end;
  248. 'sastra':
  249. begin
  250. sastra := sastra + 1;
  251. end;
  252. 'sains':
  253. begin
  254. sains := sains + 1;
  255. end;
  256. 'sejarah':
  257. begin
  258. sejarah := sejarah + 1;
  259. end;
  260. 'manga':
  261. begin
  262. manga := manga + 1;
  263. end;
  264. end;
  265. i := i+1;
  266. end;
  267.  
  268. writeln('Pengguna:');
  269. writeln('Admin | ' + IntToStr(admin));
  270. writeln('Pengunjung | ' + IntToStr(pengunjung));
  271. writeln('Total | ' + IntToStr(data_user.size));
  272. writeln('Buku:');
  273. writeln('sastra | ' + IntToStr(sastra));
  274. writeln('sains | ' + IntToStr(sains));
  275. writeln('manga | ' + IntToStr(manga));
  276. writeln('sejarah | ' + IntToStr(sejarah));
  277. writeln('programming | ' + IntToStr(programming));
  278. writeln('Total | ' + IntToStr(data_buku.size));
  279. end;
  280.  
  281. procedure lihat_laporan();
  282. var
  283. i : integer;
  284. bukunya : buku;
  285. begin
  286. writeln('Buku yang hilang :');
  287. i := 1;
  288. while ( i <= data_hilang.size) do
  289. begin
  290. bukunya := buku_find(data_hilang.data[i].ID_Buku_Hilang, data_buku);
  291. writeln(IntToStr(bukunya.ID_Buku) + ' | ' + bukunya.Judul_Buku + ' | ' + data_hilang.data[i].Tanggal_Laporan);
  292. i := i+1;
  293. end;
  294. end;
  295.  
  296. procedure tambah_buku();
  297. begin
  298. data_buku := buku_addnew(data_buku);
  299. write_csv(file_buku, 'buku', buku_merge(data_buku));
  300.  
  301. writeln('Buku berhasil ditambahkan ke dalam sistem!');
  302. end;
  303.  
  304. procedure tambah_jumlah_buku();
  305. begin
  306. data_buku := buku_addqty(data_buku);
  307. write_csv(file_buku, 'buku', buku_merge(data_buku));
  308. end;
  309.  
  310. procedure lapor_hilang();
  311. begin
  312. data_hilang := hilang_add(login_data.Username, data_hilang);
  313. write_csv(file_hilang, 'hilang', hilang_merge(data_hilang));
  314. end;
  315.  
  316. procedure riwayat();
  317. var
  318. username: string;
  319. pinjam: peminjaman;
  320. bukunya: buku;
  321. i: integer;
  322. begin
  323. i := 1;
  324. write('Masukkan username pengunjung: ');
  325. readln(username);
  326. writeln('Riwayat:');
  327. while(i <= data_peminjaman.size) do
  328. begin
  329. if(data_peminjaman.data[i].Username=username) then
  330. begin
  331. bukunya := buku_find(data_peminjaman.data[i].ID_Buku, data_buku);
  332. writeln(data_peminjaman.data[i].Tanggal_Peminjaman + ' | ' + IntToStr(bukunya.ID_Buku) + ' | ' + bukunya.Judul_Buku);
  333. end;
  334. i := i+1;
  335. end;
  336. end;
  337.  
  338. procedure pinjam_buku();
  339. var
  340. id, i: integer;
  341. username, date_pinjam: string;
  342. bukunya: buku;
  343. begin
  344. write('Masukkan id buku yang ingin dipinjam: ');
  345. readln(id);
  346. write('Masukkan tanggal hari ini: ');
  347. readln(date_pinjam);
  348. username := login_data.Username;
  349.  
  350. bukunya := buku_find(id, data_buku);
  351. if(bukunya.Jumlah_Buku = 0) then
  352. begin
  353. writeln('Buku ' + bukunya.Judul_Buku + ' sedang habis!');
  354. writeln('Coba lain kali.');
  355. end
  356. else
  357. begin
  358. bukunya.Jumlah_Buku := bukunya.Jumlah_Buku - 1;
  359. i := 1;
  360. while (i <= data_buku.size) do
  361. begin
  362. if(data_buku.data[i].ID_Buku = bukunya.ID_Buku) then
  363. begin
  364. data_buku.data[i] := bukunya;
  365. end;
  366. i := i+1;
  367. end;
  368. data_peminjaman := peminjaman_add(id, username, date_pinjam, data_peminjaman);
  369.  
  370. write_csv(file_buku, 'buku', buku_merge(data_buku));
  371. write_csv(file_peminjaman, 'peminjaman', peminjaman_merge(data_peminjaman));
  372. writeln('Buku ' + bukunya.Judul_Buku + ' berhasil dipinjam!');
  373. writeln('Tersisa ' + IntToStr(bukunya.Jumlah_Buku) + ' buku ' + bukunya.Judul_Buku);
  374. writeln('Terima kasih sudah meminjam.');
  375. end;
  376. end;
  377.  
  378. procedure kembalikan_buku();
  379. var
  380. id, idx, cmp, i: integer;
  381. bukunya: buku;
  382. pinjam: peminjaman;
  383. skrg: string;
  384. baru: gruppeminjaman;
  385. begin
  386. write('Masukkan id buku yang dikembalikan: ');
  387. readln(id);
  388. bukunya := buku_find(id, data_buku);
  389. i := 1;
  390. while (i <= data_peminjaman.size) do
  391. begin
  392. if(data_peminjaman.data[i].ID_Buku=id) then
  393. begin
  394. pinjam := data_peminjaman.data[i];
  395. idx := i;
  396. end;
  397. i := i+1;
  398. end;
  399. writeln('Data peminjaman:');
  400. writeln('Username: ' + login_data.Username);
  401. writeln('Judul buku: '+bukunya.Judul_Buku);
  402. writeln('Tanggal peminjaman: ' + pinjam.Tanggal_Peminjaman);
  403. writeln('Tanggal batas pengembalian: ' + pinjam.Tanggal_Batas_Pengembalian);
  404.  
  405. write('Masukkan tanggal hari ini: ');
  406. readln(skrg);
  407. cmp := date_compare(skrg, pinjam.Tanggal_Batas_Pengembalian);
  408.  
  409. if(cmp <= 0) then
  410. begin
  411. writeln('Terima kasih sudah meminjam.');
  412. end
  413. else
  414. begin
  415. writeln('Anda terlambat mengembalikan buku.');
  416. if(cmp >= 9) then
  417. begin
  418. writeln('Anda terkena denda ' + IntToStr(2000*(cmp-8)) + '.');
  419. end;
  420. end;
  421.  
  422. bukunya.Jumlah_Buku := bukunya.Jumlah_Buku + 1;
  423. i := 1;
  424. while (i <= data_buku.size) do
  425. begin
  426. if(data_buku.data[i].ID_Buku = bukunya.ID_Buku) then
  427. begin
  428. data_buku.data[i] := bukunya;
  429. end;
  430. i := i+1;
  431. end;
  432.  
  433. i:=1;
  434. while(i<= data_peminjaman.size) do
  435. begin
  436. if(i < idx) then
  437. begin
  438. baru.data[i]:=data_peminjaman.data[i];
  439. end
  440. else if(i > idx) then
  441. begin
  442. baru.data[i-1] := data_peminjaman.data[i];
  443. end;
  444. i:=i+1;
  445. end;
  446. baru.size := data_peminjaman.size-1;
  447. data_peminjaman := baru;
  448. write_csv(file_buku, 'buku', buku_merge(data_buku));
  449. write_csv(file_peminjaman, 'peminjaman', peminjaman_merge(data_peminjaman));
  450. end;
  451.  
  452. procedure cari();
  453. begin
  454. buku_cari(data_buku);
  455. end;
  456.  
  457. procedure cari_tahun();
  458. begin
  459. buku_cari_tahun(data_buku);
  460. end;
  461. begin
  462. sudahload := false;
  463. sudahlogin := false;
  464. is_admin := false;
  465. writeln('/------------------------------\');
  466. writeln('|| ||');
  467. writeln('|| ---WAN SHI TONG--- ||');
  468. writeln('|| LIBRARY ||');
  469. writeln('|| -Kelas 2- ||');
  470. writeln('|| Kelompok 4 ||');
  471. writeln('|| ||');
  472. writeln('\-------------------------------/');
  473. writeln('');
  474. writeln(' Selamat Datang ');
  475. writeln('silahkan load data dengan command: load');
  476. readln(cmd);
  477. while(cmd <> 'load') do
  478. begin
  479. writeln('Anda harus melakukan load terlebih dahulu!');
  480. readln(cmd);
  481. end;
  482. load_data();
  483.  
  484. readln(cmd);
  485. while(cmd <> 'login') do
  486. begin
  487. writeln('Anda harus melakukan login terlebih dahulu sebelum melanjutkan!');
  488. readln(cmd);
  489. end;
  490.  
  491. login();
  492.  
  493. repeat
  494. readln(cmd);
  495. case cmd of
  496. 'register':
  497. begin
  498. if is_admin then
  499. begin
  500. daftar_akun();
  501. end
  502. else
  503. begin
  504. writeln('Kamu bukan admin!');
  505. end;
  506. end;
  507. 'cari_anggota':
  508. begin
  509. if is_admin then
  510. begin
  511. cari_anggota();
  512. end
  513. else
  514. begin
  515. writeln('Kamu bukan admin!');
  516. end;
  517. end;
  518. 'statistik':
  519. begin
  520. if is_admin then
  521. begin
  522. statistik();
  523. end
  524. else
  525. begin
  526. writeln('Kamu bukan admin!');
  527. end;
  528. end;
  529. 'save':
  530. begin
  531. save_file();
  532. end;
  533. 'lihat_laporan':
  534. begin
  535. if is_admin then
  536. begin
  537. lihat_laporan();
  538. end
  539. else
  540. begin
  541. writeln('Kamu bukan admin!');
  542. end;
  543. end;
  544. 'tambah_buku':
  545. begin
  546. if is_admin then
  547. begin
  548. tambah_buku();
  549. end
  550. else
  551. begin
  552. writeln('Kamu bukan admin!');
  553. end;
  554. end;
  555. 'tambah_jumlah_buku':
  556. begin
  557. if is_admin then
  558. begin
  559. tambah_jumlah_buku();
  560. end
  561. else
  562. begin
  563. writeln('Kamu bukan admin!');
  564. end;
  565. end;
  566. 'lapor_hilang':
  567. begin
  568. lapor_hilang();
  569. end;
  570. 'riwayat':
  571. begin
  572. if is_admin then
  573. begin
  574. riwayat();
  575. end
  576. else
  577. begin
  578. writeln('Kamu bukan admin!');
  579. end;
  580. end;
  581. 'pinjam_buku':
  582. begin
  583. pinjam_buku();
  584. end;
  585. 'kembalikan_buku':
  586. begin
  587. kembalikan_buku();
  588. end;
  589. 'cari':
  590. begin
  591. cari();
  592. end;
  593. 'caritahunterbit':
  594. begin
  595. cari_tahun();
  596. end;
  597. end;
  598. until (cmd='exit');
  599.  
  600. write('Apakah anda mau melakukan penyimpanan file yang sudah dilakukan (Y/N) ? ');
  601. readln(cmd);
  602. if(cmd='Y')then
  603. begin
  604. save_file();
  605. end;
  606.  
  607. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement