Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program PreUTS;
- uses crt;
- type
- node = ^nodetype;
- nodetype = record
- id: integer;
- nis: string;
- name: string;
- gender: string;
- address: string;
- next: node;
- end;
- var
- firstnode: node;
- chooseMenu: char;
- lastId: integer;
- isFound, isEmpty: boolean;
- procedure insertNode(data: node);
- var supportnode: node;
- begin
- if firstnode = nil then firstnode := data
- else begin supportnode := firstnode;
- while (supportnode^.next <> nil) and (data^.id > supportnode^.next^.id) do supportnode := supportnode^.next;
- data^.next := supportnode^.next;
- supportnode^.next := data;
- end;
- lastId := lastId + 1;
- end;
- procedure removeNode(nis: string; var isFound: boolean; var isEmpty: boolean);
- var
- supportnode: node;
- found: boolean;
- empty: boolean;
- begin
- found := false;
- empty := false;
- if firstnode = nil then
- empty := true
- else if firstnode^.nis = nis then begin
- firstnode := firstnode^.next;
- found := true;
- end else begin
- supportnode := firstnode;
- while (supportnode^.next <> nil) do begin
- if supportnode^.next^.nis = nis then begin
- supportnode^.next := supportnode^.next^.next;
- found := true;
- end;
- supportnode := supportnode^.next;
- end;
- end;
- isFound := found;
- isEmpty := empty;
- end;
- procedure askToMenu(msg: string; question: string; gotoSuccess, gotoFail:char);
- var
- addNew: char;
- begin
- addNew := 'y';
- writeln(msg);
- write(question); readln(addNew);
- if not (lowercase(addNew) = 'n') then chooseMenu := gotoSuccess
- else chooseMenu := gotoFail;
- end;
- procedure mainMenu;
- begin
- clrscr;
- writeln('+-------------------------------------------------------------------------+');
- writeln('| Menu Utama |');
- writeln('+-------------------------------------------------------------------------+');
- writeln('| Opsi | Menu |');
- writeln('+-------------------------------------------------------------------------+');
- writeln('| (1) | Tambah Data |');
- writeln('| (2) | Tampilkan Data |');
- writeln('| (3) | Hapus Data |');
- writeln('| (0) | Keluar |');
- writeln('+-------------------------------------------------------------------------+');
- write('>> '); readln(chooseMenu);
- end;
- procedure addMenu;
- var
- addMore: char;
- placeholder: node;
- begin
- clrscr;
- writeln('+-------------------------------------------------------------------------+');
- writeln('| Input data peserta didik baru |');
- writeln('+-------------------------------------------------------------------------+');
- addMore := 'y';
- while lowercase(addMore) <> 'n' do begin
- new(placeholder);
- writeln;
- write('NIS : '); readln(placeholder^.nis);
- write('Nama : '); readln(placeholder^.name);
- write('Jenis Kelamin : '); readln(placeholder^.gender);
- write('Alamat : '); readln(placeholder^.address);
- writeln;
- placeholder^.id := lastId + 1;
- insertNode(placeholder);
- write('Tambah data lagi ? [Y/n]'); readln(addMore);
- if lowercase(addMore) <> 'n' then addMore := 'y';
- end;
- chooseMenu := '2';
- end;
- procedure showMenu;
- var
- supportnode: node;
- ln: integer;
- begin
- clrscr;
- ln := 0;
- supportnode := firstnode;
- if supportnode <> nil then begin
- writeln('+-------------------------------------------------------------------------+');
- writeln('| Daftar Data Peserta Didik PAUD ABC |');
- writeln('+-------------------------------------------------------------------------+');
- writeln('| No | NIS | Nama | JK | Alamat |');
- writeln('+-------------------------------------------------------------------------+');
- while (supportnode <> nil) do begin
- writeln(
- '|', (ln + 1):3, ' |',
- supportnode^.nis:10, ' |',
- supportnode^.name:17, ' |',
- supportnode^.gender:13, ' |',
- supportnode^.address:21, ' |'
- );
- supportnode := supportnode^.next;
- ln := ln + 1;
- end;
- writeln('+-------------------------------------------------------------------------+');
- write('Tekan apa saja untuk kembali ke menu...');
- readln;
- mainMenu;
- end else
- askToMenu('Data peserta didik kosong.', 'Tambah baru ? [Y/n]', '1', '9');
- end;
- { by: Ahmad Al Desrahim - 202043500047 }
- procedure deleteMenu;
- var
- deleteNis: string;
- begin
- clrscr;
- writeln('+-------------------------------------------------------------------------+');
- writeln('| Hapus data peserta didik |');
- writeln('+-------------------------------------------------------------------------+');
- writeln;
- writeln('Masukkan NIS peserta didik yang ingin dihapus.');
- write('>> '); readln(deleteNis);
- removeNode(deleteNis, isFound, isEmpty);
- if isEmpty then
- askToMenu('Data peserta didik kosong.', 'Tambah baru ? [Y/n]', '1', '9')
- else if not isFound then
- askToMenu(concat('NIS ', deleteNis, ' tidak ditemukan.'), 'Hapus NIS lain ? [Y/n]', '3', '9')
- else begin
- writeln();
- if firstnode = nil then
- askToMenu(concat('NIS ', deleteNis, ' berhasil dihapus, tetapi data peserta didik kosong.'), 'Tambah baru ? [Y/n]', '1', '9')
- else
- askToMenu(concat('NIS ', deleteNis, ' berhasil dihapus'), 'Lihat daftar peserta didik ? [Y/n]', '2', '9');
- end;
- end;
- procedure chooseTheMenu;
- begin
- mainMenu;
- while (chooseMenu >= '1') and (chooseMenu <= '9') do begin
- case chooseMenu of
- '1': addMenu;
- '2': showMenu;
- '3': deleteMenu;
- '9': mainMenu;
- end;
- end;
- write('Anda yakin ingin keluar ? [y/N]'); readln(chooseMenu);
- if (lowercase(chooseMenu) = 'y') then exit;
- chooseTheMenu;
- end;
- begin
- chooseTheMenu;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement