Nama : Rafly Al Fahrezi
NRP : 5025241131
Kelas : PBKK-D


A. Uji Coba Hello World
1. Tujuan
- Memahami struktur dasar program C# Console Application
- Mengetahui cara menampilkan output ke layar console
- Memahami cara menjalankan program pada framework .NET
2. Alat dan Bahan
- Software: Visual Studio 2022 / VS Code
- Framework: .NET Framework / .NET Core
- Bahasa Pemrograman: C#
3. Dasar Teori
Hello World merupakan program paling sederhana yang biasanya digunakan sebagai langkah awal dalam mempelajari bahasa pemrograman baru. Program ini berfungsi untuk memastikan bahwa lingkungan pengembangan (development environment) telah terkonfigurasi dengan benar dan siap digunakan.
Pada C#, method Main adalah entry point utama dari sebuah aplikasi console. Setiap program C# harus memiliki method Main agar dapat dieksekusi. Untuk menampilkan output ke layar, digunakan perintah Console.WriteLine().
4. Langkah Kerja
- Buka Visual Studio atau VS Code
- Buat project baru dengan tipe Console App (.NET Framework / .NET Core)
- Beri nama project, misalnya
HelloWorld - Tuliskan kode program berikut:
using System;
namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Console.WriteLine("Selamat datang di Pemrograman C#");
Console.ReadKey();
}
}
}
- Build project dengan menekan Ctrl + Shift + B
- Jalankan program dengan menekan F5 atau Ctrl + F5
5. Hasil Uji Coba
Output yang dihasilkan:

Penjelasan Kode:
| Baris Kode | Penjelasan |
|---|---|
using System; | Mengimpor namespace System yang berisi class Console |
namespace HelloWorld | Mendefinisikan namespace sebagai wadah class |
class Program | Mendefinisikan class utama program |
static void Main(string[] args) | Method utama yang pertama kali dijalankan |
Console.WriteLine() | Menampilkan teks ke layar dan pindah baris |
Console.ReadKey() | Menahan jendela console agar tidak langsung tertutup |
6. Kesimpulan
Program Hello World berhasil dijalankan dengan baik. Hal ini membuktikan bahwa:
- Lingkungan pengembangan C# telah terinstal dengan benar
- Struktur dasar program C# Console Application telah dipahami
- Method
Mainberfungsi sebagai entry point aplikasi - Perintah
Console.WriteLine()dapat menampilkan output ke layar
B. Uji Coba Sistem Data Mahasiswa
1. Tujuan
- Menerapkan konsep Object Oriented Programming (OOP) dalam C#
- Memahami penggunaan class, object, property, dan constructor
- Menerapkan struktur data List untuk menyimpan banyak objek
- Membuat aplikasi CRUD (Create, Read, Update, Delete) sederhana berbasis console
- Menerapkan validasi input dan penanganan error sederhana
2. Alat dan Bahan
- Software: Visual Studio 2022 / VS Code
- Framework: .NET Framework / .NET Core
- Bahasa Pemrograman: C#
3. Dasar Teori
a. Object Oriented Programming (OOP)
OOP adalah paradigma pemrograman yang menggunakan "objek" sebagai dasar utama. Konsep utama OOP meliputi:
- Class: blueprint/cetakan untuk membuat objek
- Object: instance dari class
- Property: atribut yang dimiliki class
- Constructor: method khusus yang dijalankan saat objek dibuat
- Method: fungsi yang dimiliki class
b. Collection List
List<T> adalah struktur data generik di C# yang dapat menyimpan kumpulan objek dengan tipe tertentu. Berbeda dengan array, List memiliki ukuran dinamis (bisa bertambah/berkurang).
c. CRUD
CRUD adalah singkatan dari:
- Create โ Menambah data
- Read โ Menampilkan data
- Update โ Mengubah data
- Delete โ Menghapus data
4. Struktur Program
Program Sistem Data Mahasiswa terdiri dari 2 class utama:
DataMahasiswa (namespace)
โ
โโโ class Mahasiswa
โ โโโ Property: NIM, Nama, Prodi, IPK
โ โโโ Constructor: Mahasiswa(nim, nama, prodi, ipk)
โ
โโโ class Program
โโโ List<Mahasiswa> daftarMahasiswa
โโโ Main()
โโโ TampilkanMenu()
โโโ TambahMahasiswa()
โโโ TampilkanMahasiswa()
โโโ CariMahasiswa()
โโโ HapusMahasiswa()
5. Kode Program Lengkap
using System;
using System.Collections.Generic;
namespace DataMahasiswa
{
// Class untuk merepresentasikan data mahasiswa
class Mahasiswa
{
public string NIM { get; set; }
public string Nama { get; set; }
public string Prodi { get; set; }
public double IPK { get; set; }
// Constructor
public Mahasiswa(string nim, string nama, string prodi, double ipk)
{
NIM = nim;
Nama = nama;
Prodi = prodi;
IPK = ipk;
}
}
class Program
{
// List untuk menyimpan data mahasiswa
static List<Mahasiswa> daftarMahasiswa = new List<Mahasiswa>();
static void Main(string[] args)
{
int pilihan;
do
{
TampilkanMenu();
Console.Write("Pilihan: ");
string input = Console.ReadLine();
if (!int.TryParse(input, out pilihan))
{
pilihan = 0;
}
Console.WriteLine();
switch (pilihan)
{
case 1: TambahMahasiswa(); break;
case 2: TampilkanMahasiswa(); break;
case 3: CariMahasiswa(); break;
case 4: HapusMahasiswa(); break;
case 5:
Console.WriteLine("Terima kasih telah menggunakan program.");
break;
default:
Console.WriteLine("Pilihan tidak tersedia!");
break;
}
if (pilihan != 5)
{
Console.WriteLine();
Console.WriteLine("Tekan ENTER untuk melanjutkan...");
Console.ReadLine();
}
} while (pilihan != 5);
}
// METHOD MENAMPILKAN MENU
static void TampilkanMenu()
{
Console.Clear();
Console.WriteLine("==================================================");
Console.WriteLine(" SISTEM DATA MAHASISWA");
Console.WriteLine("==================================================");
Console.WriteLine("1. Tambah Mahasiswa");
Console.WriteLine("2. Tampilkan Mahasiswa");
Console.WriteLine("3. Cari Mahasiswa");
Console.WriteLine("4. Hapus Mahasiswa");
Console.WriteLine("5. Keluar");
Console.WriteLine("==================================================");
}
// METHOD TAMBAH MAHASISWA
static void TambahMahasiswa()
{
Console.Clear();
Console.WriteLine("==================================================");
Console.WriteLine(" TAMBAH MAHASISWA");
Console.WriteLine("==================================================");
Console.Write("NIM : ");
string nim = Console.ReadLine();
Console.Write("Nama : ");
string nama = Console.ReadLine();
Console.Write("Program Studi : ");
string prodi = Console.ReadLine();
double ipk;
while (true)
{
Console.Write("IPK : ");
if (double.TryParse(Console.ReadLine(), out ipk))
{
if (ipk >= 0 && ipk <= 4)
{
break;
}
}
Console.WriteLine("IPK harus berupa angka 0 - 4.");
}
Mahasiswa mahasiswa = new Mahasiswa(nim, nama, prodi, ipk);
daftarMahasiswa.Add(mahasiswa);
Console.WriteLine();
Console.WriteLine("Data mahasiswa berhasil ditambahkan.");
}
// METHOD MENAMPILKAN DATA
static void TampilkanMahasiswa()
{
Console.Clear();
Console.WriteLine("==================================================");
Console.WriteLine(" DAFTAR MAHASISWA");
Console.WriteLine("==================================================");
if (daftarMahasiswa.Count == 0)
{
Console.WriteLine("Belum ada data mahasiswa.");
return;
}
Console.WriteLine("{0,-12}{1,-20}{2,-20}{3,5}", "NIM", "Nama", "Prodi", "IPK");
Console.WriteLine("--------------------------------------------------");
foreach (Mahasiswa m in daftarMahasiswa)
{
Console.WriteLine("{0,-12}{1,-20}{2,-20}{3,5:F2}",
m.NIM, m.Nama, m.Prodi, m.IPK);
}
Console.WriteLine("==================================================");
}
// METHOD MENCARI MAHASISWA
static void CariMahasiswa()
{
Console.Clear();
Console.WriteLine("==================================================");
Console.WriteLine(" CARI MAHASISWA");
Console.WriteLine("==================================================");
Console.Write("Masukkan NIM: ");
string nimCari = Console.ReadLine();
Mahasiswa mahasiswaDitemukan = null;
foreach (Mahasiswa m in daftarMahasiswa)
{
if (m.NIM.Equals(nimCari, StringComparison.OrdinalIgnoreCase))
{
mahasiswaDitemukan = m;
break;
}
}
Console.WriteLine();
if (mahasiswaDitemukan != null)
{
Console.WriteLine("Data ditemukan!");
Console.WriteLine("NIM : " + mahasiswaDitemukan.NIM);
Console.WriteLine("Nama : " + mahasiswaDitemukan.Nama);
Console.WriteLine("Prodi : " + mahasiswaDitemukan.Prodi);
Console.WriteLine("IPK : " + mahasiswaDitemukan.IPK.ToString("F2"));
}
else
{
Console.WriteLine("Mahasiswa dengan NIM tersebut tidak ditemukan.");
}
}
// METHOD MENGHAPUS MAHASISWA
static void HapusMahasiswa()
{
Console.Clear();
Console.WriteLine("==================================================");
Console.WriteLine(" HAPUS MAHASISWA");
Console.WriteLine("==================================================");
Console.Write("Masukkan NIM: ");
string nimHapus = Console.ReadLine();
Mahasiswa mahasiswaDitemukan = null;
foreach (Mahasiswa m in daftarMahasiswa)
{
if (m.NIM.Equals(nimHapus, StringComparison.OrdinalIgnoreCase))
{
mahasiswaDitemukan = m;
break;
}
}
if (mahasiswaDitemukan != null)
{
daftarMahasiswa.Remove(mahasiswaDitemukan);
Console.WriteLine();
Console.WriteLine("Data mahasiswa berhasil dihapus.");
}
else
{
Console.WriteLine();
Console.WriteLine("Data mahasiswa tidak ditemukan.");
}
}
}
}
6. Hasil Uji Coba
a. Tampilan Menu Utama

b. Uji Coba Tambah Mahasiswa (Create)
Input:

Analisis: Data mahasiswa berhasil ditambahkan ke dalam List. Validasi IPK berjalan dengan baik โ ketika user memasukkan nilai di luar 0-4, program akan meminta input ulang.
c. Uji Coba Tampilkan Mahasiswa (Read)
Input:
Pilihan: 2
Output:

Analisis: Data berhasil ditampilkan dalam bentuk tabel dengan format alignment yang rapi menggunakan format string {0,-12} dan {3,5:F2}.
d. Uji Coba Cari Mahasiswa (Search)
Input:
Pilihan: 3
Masukkan NIM: 5025241131
Output:

Analisis: Pencarian menggunakan StringComparison.OrdinalIgnoreCase sehingga pencarian tidak case-sensitive. Jika NIM tidak ditemukan, akan muncul pesan "Mahasiswa dengan NIM tersebut tidak ditemukan."
e. Uji Coba Hapus Mahasiswa (Delete)
Input:
Pilihan: 4
Masukkan NIM: 5025241131
Output:

Analisis: Data dengan NIM 5025241131 berhasil dihapus dari List. Jika NIM tidak ditemukan, akan muncul pesan "Data mahasiswa tidak ditemukan."
f. Uji Coba Keluar Program
Input:
Pilihan: 5
Output:

Analisis: Program berhenti dengan benar karena kondisi while (pilihan != 5) bernilai false.
7. Tabel Pengujian
| No | Skenario | Input | Output yang Diharapkan | Status |
|---|---|---|---|---|
| 1 | Tambah mahasiswa dengan data valid | NIM, Nama, Prodi, IPK valid | Data berhasil ditambahkan | Berhasil |
| 2 | Tambah mahasiswa dengan IPK > 4 | IPK = 5 | Error "IPK harus 0-4" | Berhasil |
| 3 | Tambah mahasiswa dengan IPK negatif | IPK = -1 | Error "IPK harus 0-4" | Berhasil |
| 4 | Tambah mahasiswa dengan IPK non-angka | IPK = "abc" | Error "IPK harus 0-4" | Berhasil |
| 5 | Tampilkan data saat kosong | Pilihan 2 | "Belum ada data mahasiswa" | Berhasil |
| 6 | Cari NIM yang ada | NIM valid | Data ditemukan | Berhasil |
| 7 | Cari NIM yang tidak ada | NIM invalid | Data tidak ditemukan | Berhasil |
| 8 | Hapus NIM yang ada | NIM valid | Data berhasil dihapus | Berhasil |
| 9 | Hapus NIM yang tidak ada | NIM invalid | Data tidak ditemukan | Berhasil |
| 10 | Input pilihan non-angka | "abc" | "Pilihan tidak tersedia!" | Berhasil |
8. Analisis Kode
a. Penggunaan Class dan Object
Class Mahasiswa berfungsi sebagai blueprint untuk membuat objek mahasiswa dengan 4 property: NIM, Nama, Prodi, dan IPK. Constructor digunakan untuk menginisialisasi nilai property saat objek dibuat.
b. Penggunaan List<Mahasiswa>
List<Mahasiswa> digunakan sebagai penyimpanan data dinamis. List dipilih karena ukurannya dapat bertambah/berkurang secara otomatis sesuai kebutuhan, berbeda dengan array yang memiliki ukuran tetap.
c. Validasi Input
int.TryParse()โ memvalidasi input pilihan menu agar hanya menerima angkadouble.TryParse()โ memvalidasi input IPK agar hanya menerima angka desimal- Range check
ipk >= 0 && ipk <= 4โ memastikan IPK dalam rentang valid
d. Struktur Perulangan
do-whilepadaMain()โ memastikan menu ditampilkan minimal sekali dan terus berulang sampai user memilih keluarwhile(true)pada validasi IPK โ terus meminta input sampai user memasukkan nilai yang validforeachโ digunakan untuk iterasi List pada method Tampilkan, Cari, dan Hapus
e. Format Output Tabel
Format string {0,-12}{1,-20}{2,-20}{3,5:F2} digunakan untuk membuat tampilan tabel rapi:
-12โ rata kiri dengan lebar 12 karakter-20โ rata kiri dengan lebar 20 karakter5:F2โ rata kanan lebar 5 dengan 2 angka desimal
9. Kesimpulan
Berdasarkan hasil uji coba, dapat disimpulkan bahwa:
- Program berhasil dibuat menggunakan bahasa C# dengan menerapkan konsep Object Oriented Programming (class, object, property, constructor, method).
- Semua fitur CRUD berjalan dengan baik โ Create (Tambah), Read (Tampilkan), Search (Cari), dan Delete (Hapus).
- Validasi input berjalan optimal โ program mampu menangani input yang salah (non-angka, IPK di luar rentang 0-4) tanpa crash.
- Struktur data List terbukti efektif untuk menyimpan data dinamis yang jumlahnya tidak tentu.
- Program bersifat interaktif dengan menu navigasi yang user-friendly dan tampilan tabel yang rapi.
- Semua skenario pengujian (10 kasus) berhasil sesuai dengan output yang diharapkan.
10. Saran Pengembangan
Untuk pengembangan lebih lanjut, program ini dapat ditingkatkan dengan:
- Menambahkan fitur Edit/Update data mahasiswa
- Menyimpan data ke file (txt/csv) atau database agar data tidak hilang saat program ditutup
- Menambahkan fitur sorting berdasarkan NIM, Nama, atau IPK
- Menambahkan login admin untuk keamanan
- Mengembangkan ke aplikasi berbasis GUI (Windows Forms / WPF) atau Web (ASP.NET)