aldesrahim

Pra-UTS PSD S3A

Oct 27th, 2021
726
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. program PreUTS;
  2. uses crt;
  3. type
  4.     node = ^nodetype;
  5.     nodetype = record
  6.         id: integer;
  7.         nis: string;
  8.         name: string;
  9.         gender: string;
  10.         address: string;
  11.         next: node;
  12.     end;
  13.  
  14. var
  15.     firstnode: node;
  16.     chooseMenu: char;
  17.     lastId: integer;
  18.     isFound, isEmpty: boolean;
  19.  
  20. procedure insertNode(data: node);
  21. var supportnode: node;
  22. begin
  23.     if firstnode = nil then firstnode := data
  24.     else begin supportnode := firstnode;
  25.         while (supportnode^.next <> nil) and (data^.id > supportnode^.next^.id) do supportnode := supportnode^.next;
  26.         data^.next := supportnode^.next;
  27.         supportnode^.next := data;
  28.     end;
  29.     lastId := lastId + 1;
  30. end;
  31.  
  32. procedure removeNode(nis: string; var isFound: boolean; var isEmpty: boolean);
  33. var
  34.     supportnode: node;
  35.     found: boolean;
  36.     empty: boolean;
  37. begin
  38.     found := false;
  39.     empty := false;
  40.  
  41.     if firstnode = nil then
  42.         empty := true
  43.     else if firstnode^.nis = nis then begin
  44.         firstnode := firstnode^.next;
  45.         found := true;
  46.     end else begin
  47.         supportnode := firstnode;
  48.  
  49.         while (supportnode^.next <> nil) do begin
  50.             if supportnode^.next^.nis = nis then begin
  51.                 supportnode^.next := supportnode^.next^.next;
  52.                 found := true;
  53.             end;
  54.             supportnode := supportnode^.next;
  55.         end;
  56.     end;
  57.  
  58.     isFound := found;
  59.     isEmpty := empty;
  60. end;
  61.  
  62. procedure askToMenu(msg: string; question: string; gotoSuccess, gotoFail:char);
  63. var
  64.     addNew: char;
  65. begin
  66.     addNew := 'y';
  67.     writeln(msg);
  68.     write(question); readln(addNew);
  69.     if not (lowercase(addNew) = 'n') then chooseMenu := gotoSuccess
  70.     else chooseMenu := gotoFail;
  71. end;
  72.  
  73. procedure mainMenu;
  74. begin
  75.     clrscr;
  76.     writeln('+-------------------------------------------------------------------------+');
  77.     writeln('|                             Menu Utama                                  |');
  78.     writeln('+-------------------------------------------------------------------------+');
  79.     writeln('| Opsi | Menu                                                             |');
  80.     writeln('+-------------------------------------------------------------------------+');
  81.     writeln('|  (1) | Tambah Data                                                      |');
  82.     writeln('|  (2) | Tampilkan Data                                                   |');
  83.     writeln('|  (3) | Hapus Data                                                       |');
  84.     writeln('|  (0) | Keluar                                                           |');
  85.     writeln('+-------------------------------------------------------------------------+');
  86.     write('>> '); readln(chooseMenu);
  87. end;
  88.  
  89. procedure addMenu;
  90. var
  91.     addMore: char;
  92.     placeholder: node;
  93. begin
  94.     clrscr;
  95.  
  96.     writeln('+-------------------------------------------------------------------------+');
  97.     writeln('|                    Input data peserta didik baru                        |');
  98.     writeln('+-------------------------------------------------------------------------+');
  99.  
  100.     addMore := 'y';
  101.     while lowercase(addMore) <> 'n' do begin
  102.  
  103.         new(placeholder);
  104.        
  105.         writeln;
  106.         write('NIS              : '); readln(placeholder^.nis);
  107.         write('Nama             : '); readln(placeholder^.name);
  108.         write('Jenis Kelamin    : '); readln(placeholder^.gender);
  109.         write('Alamat           : '); readln(placeholder^.address);
  110.         writeln;
  111.  
  112.         placeholder^.id := lastId + 1;
  113.  
  114.         insertNode(placeholder);
  115.  
  116.         write('Tambah data lagi ? [Y/n]'); readln(addMore);
  117.         if lowercase(addMore) <> 'n' then addMore := 'y';
  118.     end;
  119.  
  120.     chooseMenu := '2';
  121. end;
  122.  
  123. procedure showMenu;
  124. var
  125.     supportnode: node;
  126.     ln: integer;
  127. begin
  128.     clrscr;
  129.  
  130.     ln := 0;
  131.     supportnode := firstnode;
  132.  
  133.     if supportnode <> nil then begin
  134.         writeln('+-------------------------------------------------------------------------+');
  135.         writeln('|                 Daftar Data Peserta Didik PAUD ABC                      |');
  136.         writeln('+-------------------------------------------------------------------------+');
  137.         writeln('| No |    NIS    |       Nama       |      JK      |        Alamat        |');
  138.         writeln('+-------------------------------------------------------------------------+');
  139.        
  140.         while (supportnode <> nil) do begin
  141.             writeln(
  142.                 '|', (ln + 1):3, ' |',
  143.                 supportnode^.nis:10, ' |',
  144.                 supportnode^.name:17, ' |',
  145.                 supportnode^.gender:13, ' |',
  146.                 supportnode^.address:21, ' |'
  147.             );
  148.             supportnode := supportnode^.next;
  149.             ln := ln + 1;
  150.         end;
  151.  
  152.         writeln('+-------------------------------------------------------------------------+');
  153.         write('Tekan apa saja untuk kembali ke menu...');
  154.         readln;
  155.         mainMenu;
  156.     end else
  157.         askToMenu('Data peserta didik kosong.', 'Tambah baru ? [Y/n]', '1', '9');
  158. end;
  159. { by: Ahmad Al Desrahim - 202043500047 }
  160. procedure deleteMenu;
  161. var
  162.     deleteNis: string;
  163. begin
  164.     clrscr;
  165.  
  166.     writeln('+-------------------------------------------------------------------------+');
  167.     writeln('|                        Hapus data peserta didik                         |');
  168.     writeln('+-------------------------------------------------------------------------+');
  169.     writeln;
  170.     writeln('Masukkan NIS peserta didik yang ingin dihapus.');
  171.     write('>> '); readln(deleteNis);
  172.    
  173.     removeNode(deleteNis, isFound, isEmpty);
  174.    
  175.     if isEmpty then
  176.         askToMenu('Data peserta didik kosong.', 'Tambah baru ? [Y/n]', '1', '9')
  177.     else if not isFound then
  178.         askToMenu(concat('NIS ', deleteNis, ' tidak ditemukan.'), 'Hapus NIS lain ? [Y/n]', '3', '9')
  179.     else begin
  180.         writeln();
  181.         if firstnode = nil then
  182.             askToMenu(concat('NIS ', deleteNis, ' berhasil dihapus, tetapi data peserta didik kosong.'), 'Tambah baru ? [Y/n]', '1', '9')
  183.         else
  184.             askToMenu(concat('NIS ', deleteNis, ' berhasil dihapus'), 'Lihat daftar peserta didik ? [Y/n]', '2', '9');
  185.     end;
  186.  
  187.    
  188. end;
  189.  
  190. procedure chooseTheMenu;
  191. begin
  192.     mainMenu;
  193.     while (chooseMenu >= '1') and (chooseMenu <= '9') do begin
  194.         case chooseMenu of
  195.             '1': addMenu;
  196.             '2': showMenu;
  197.             '3': deleteMenu;
  198.             '9': mainMenu;
  199.         end;
  200.     end;
  201.    
  202.     write('Anda yakin ingin keluar ? [y/N]'); readln(chooseMenu);
  203.     if (lowercase(chooseMenu) = 'y') then exit;
  204.     chooseTheMenu;
  205. end;
  206.  
  207. begin
  208.     chooseTheMenu;
  209. end.
RAW Paste Data