D. Prameswara
D. Prameswara Tukang ketik yang sedang belajar pemrograman #linux #android #vue #node.js

Contoh program mengganti input password dengan *

Contoh program mengganti input password dengan *

Salah satu hal yang biasa dijadikan tugas pada waktu belajar pemrograman dengan Pascal adalah bagaimana membuat sebuah aplikasi yang menginput password dan menampilkannya dengan karakter bintang (*).

Nah berikut ini adalah salah satu implementasi sederhananya.

Fungsi utama yang digunakan untuk menyelesaikan hal ini adalah Readkey. Sekarang singkat, Readkey adalah sebuah fungsi untuk berguna untuk menangkap dan mengembalikan karakter dari tombol keyboard yang ditekan.

Algoritma umumnya adalah sebagai berikut. Selama user belum menekan tombol enter atau tombol lain yang anda inginkan, maka tangkap semua karakter yang diketik oleh user, tambahkan karakter tersebut ke dalam suatu variable, lalu tampilkan karakter *.

Baik, sekarang kita coba untuk mengimplementasikannya ke dalam program. Seperti biasa, silahkan buat project baru berupa aplikasi console. Kali ini saya memilih tipe Simple program.

Contoh program mengganti input password dengan *

Contoh program mengganti input password dengan *

Hal pertama-tama yang perlu anda tambahkan adalah menambahkan unit crt ke dalam uses. Hal ini dikarenakan kita akan sedikit beroperasi dengan layar dan keyboard. Untuk informasi lebih lengkap tentang unit crt, silahkan cek langsung ke dokumentasinya.

program Project1;
uses crt;

begin

end.

Kemudian tambahkan 2 buah variable yang masing-masing berfungsi untuk menampung password dengan tipe string, dan menampung karakter hasil Readkey dengan tipe char.

program Project1;
uses crt;

var
  pass : String = '';
  ch   : char = #0;
begin
end.

Pada bagian awal tampilan program, silahkan anda berkreasi sesuai dengan yang anda inginkan. Contohnya adalah seperti di bawah ini.

begin
  writeln('Contoh aplikasi password');
  writeln('========================');
  write('Password : ');

end.

Kemudian, sesuai dengan algoritma yang kita tulis di atas, maka kita memerlukan sebuah looping yang dapat dilakukan dengan repeat until maupun while do. Kali ini kita coba dengan menggunakan while do.
while true do
begin
  // baca semua tombol yang diketikkan user
  ch :=ReadKey;
  
  // jika user menekan tombol return, maka hentikan looping
  if (ch=#13) then
     break;
end;
Potongan kode di atas artinya adalah, lakukan looping terus (selama true), sampai user menekan tombol return/enter (kode ascii-nya adalah 13). Selama itu, baca tombol yang ditekan user ke dalam suatu variable, dalam hal ini adalah variable ch. Untuk keluar dari looping di atas, kita menggunakan procedure Break.

Selanjutnya, tambahkan statement untuk menyimpan karakter yang diketikkan user ke dalam password, dan tampikan karakter *.

    if (ch=#13) then
       break
    else
    begin
      // tambahkan karakter yang diketikkan user ke dalam
      // variable password
      pass :=pass + ch;
      // tampaikan karakter * ke layar
      write('*')
    end;

Pada bagian akhir, tambahkan sedikit informasi untuk menampilkan password untuk menunjukkan apakah program sudah betul dalam menyimpan password.

  writeln();
  writeln('Password anda : ',pass);

Sampai di sini, program sudah 90% selesai. Silahkan build aplikasi anda dan coba jalankan.

Contoh program mengganti input password dengan *

Kenapa baru 90%, karena program ini masih bermasalah yaitu jika user menekan tombol backspace, bukannya menghapus karakter paling akhir di layar akan tetapi malah tetap menambah karakter baru.

Oleh karena itu, kita perlu memodifikasi program di atas agar dapat membaca karakter backspace yang kode ASCII-nya adalah 8  . Pada saat user menekan tombol backspace, maka huruf terakhir dai password akan dihapus sekaligus menghapus karakter * terakhir dari layar.

    if (ch=#13) then
       break
    else
    begin
      // jika user menekan tombol backspace, maka hapus karakter
      // terakhir dari password dan * dari layar
      // kode ASCII backspace adalah 8
      if (ch=#8) then
      begin
        // jika semua karakter sudah terhapus
        // jangan lakukan apapun, cukup skip ke next loop
        if (Length(pass)=0) then
           continue;

        // hapus karakter terakhir dari password
        // INGAT, di pascal, index string dimulai dari 1, bukan dari 0
        Delete(pass,Length(pass),1);

        // tulis karakter backspace ke layar
        // agar kursor bergerak 1 karakter ke kiri
        write(ch);
        // hapus karakter * terakhir di layar
        ClrEol;
        // lanjutkan next looping
        Continue;
      end;
      // tambahkan karakter yang diketikkan user ke dalam
      // variable password
      pass :=pass + ch;
      // tampaikan karakter * ke layar
      write('*')
    end;

Hal yang sedikit tricky adalah bagaimana menghapus karakter * terakhir dari layar. Kuncinya adalah, menulis karakter backspace ke layar dengan write dimana akan membuat cursor bergerak 1 kotak/karakter ke kiri. Kemudian menghapus karakter dari posisi kursor terakhir sampai dengan akhir baris dengan ClrEof.

ClrEol clears the current line, starting from the cursor position, to the end of the window. The cursor doesn't move
Silahkan coba build lagi, kemudian coba lagi. Kali ini dengan kombinasi tombol backspace.

Contoh program mengganti input password dengan *

Dengan ini maka program ini sudah selesai. Berikut ini adalah kode lengkapnya.

program Project1;
uses crt;

var
  pass : String = '';
  ch   : char = #0;
begin
  writeln('Contoh aplikasi password');
  writeln('========================');
  write('Password : ');
  while true do
  begin
    // baca semua tombol yang diketikkan user
    ch :=ReadKey;

    // jika user menekan tombol return, maka hentikan looping
    if (ch=#13) then
       break
    else
    begin
      // jika user menekan tombol backspace, maka hapus karakter
      // terakhir dari password dan layar
      // kode ASCII backspace adalah 8
      if (ch=#8) then
      begin
        // jika semua karakter sudah terhapus
        // jangan lakukan apapun, cukup skip ke next loop
        if (Length(pass)=0) then
           continue;

        // hapus karakter terakhir dari password
        // INGAT, di pascal, index string dimulai dari 1, bukan dari 0
        Delete(pass,Length(pass),1);

        // tulis karakter backspace ke layar
        // agar kursor bergerak 1 karakter ke kiri
        write(ch);
        // hapus karakter * terakhir di layar
        ClrEol;
        // lanjutkan next looping
        Continue;
      end;
      // tambahkan karakter yang diketikkan user ke dalam
      // variable password
      pass :=pass + ch;
      // tampaikan karakter * ke layar
      write('*')
    end;
  end;
  writeln();
  writeln('Password anda : ',pass);

end.

Silahkan anda lakukan optimasi atau modifikasi atau penyesuaian yang anda rasa perlu. Misalkan dengan mengganti looping dari while menjadi repeat.

Sekian tip/trik kali ini, semoga yang sedikit ini bermanfaat.

Source code.


D. Prameswara
D. Prameswara Tukang ketik yang sedang belajar pemrograman #linux #android #vue #node.js
Load comments