Project C++: Aplikasi Manajemen Nilai Mahasiswa dengan CRUD + Perhitungan Rata-rata
Membuat aplikasi Manajemen Nilai Mahasiswa menggunakan C++ adalah proyek yang sangat berguna untuk melatih pemahaman tentang:
✅ Struktur data
✅ Operasi CRUD (Create, Read, Update, Delete)
✅ Perhitungan nilai rata-rata
✅ Penyimpanan data dalam file
Dalam panduan ini, kita akan membuat program lengkap menggunakan IDE CodeBlocks yang mencakup:
- Input data mahasiswa
- Edit dan hapus data
- Hitung nilai rata-rata
- Simpan data ke file
Persiapan Project di CodeBlocks
- Buka CodeBlocks
- Klik File → New → Project
- Pilih Console Application
- Pilih C++ dan beri nama project (
ManajemenNilai
) - Klik Finish
Kode Lengkap Program
File: main.cpp
#include <iostream> #include <fstream> #include <vector> #include <iomanip> #include <limits> using namespace std; // Struktur data mahasiswa struct Mahasiswa { string nim; string nama; float nilai_tugas; float nilai_uts; float nilai_uas; float nilai_akhir; }; // Fungsi untuk membersihkan buffer input void clearInputBuffer() { cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); } // Fungsi untuk menghitung nilai akhir float hitungNilaiAkhir(float tugas, float uts, float uas) { return (tugas * 0.3) + (uts * 0.3) + (uas * 0.4); } // Fungsi untuk menampilkan header void tampilkanHeader() { cout << "============================================\n"; cout << " AZROI APLIKASI MANAJEMEN NILAI MAHASISWA\n"; cout << "============================================\n"; } // Fungsi untuk menampilkan menu void tampilkanMenu() { cout << "\nMenu:\n"; cout << "1. Tambah Data Mahasiswa\n"; cout << "2. Tampilkan Semua Data\n"; cout << "3. Edit Data Mahasiswa\n"; cout << "4. Hapus Data Mahasiswa\n"; cout << "5. Hitung Rata-rata Nilai\n"; cout << "6. Simpan Data ke File\n"; cout << "7. Baca Data dari File\n"; cout << "0. Keluar\n"; cout << "Pilih menu: "; } // Fungsi untuk menambahkan data mahasiswa void tambahMahasiswa(vector<Mahasiswa>& data) { Mahasiswa mhs; cout << "\n--- Tambah Data Mahasiswa ---\n"; cout << "NIM : "; getline(cin, mhs.nim); cout << "Nama : "; getline(cin, mhs.nama); cout << "Nilai Tugas : "; cin >> mhs.nilai_tugas; cout << "Nilai UTS : "; cin >> mhs.nilai_uts; cout << "Nilai UAS : "; cin >> mhs.nilai_uas; mhs.nilai_akhir = hitungNilaiAkhir(mhs.nilai_tugas, mhs.nilai_uts, mhs.nilai_uas); data.push_back(mhs); cout << "\nData berhasil ditambahkan!\n"; clearInputBuffer(); } // Fungsi untuk menampilkan semua data void tampilkanData(const vector<Mahasiswa>& data) { if (data.empty()) { cout << "\nTidak ada data mahasiswa!\n"; return; } cout << "\n--- Daftar Mahasiswa ---\n"; cout << "====================================================================\n"; cout << "| No | NIM | Nama | Tugas | UTS | UAS | Akhir |\n"; cout << "====================================================================\n"; for (size_t i = 0; i < data.size(); ++i) { cout << "| " << setw(2) << i + 1 << " | " << setw(9) << data[i].nim << " | " << setw(14) << data[i].nama << " | " << setw(5) << data[i].nilai_tugas << " | " << setw(3) << data[i].nilai_uts << " | " << setw(3) << data[i].nilai_uas << " | " << setw(5) << fixed << setprecision(2) << data[i].nilai_akhir << " |\n"; } cout << "====================================================================\n"; } // Fungsi untuk mengedit data mahasiswa void editMahasiswa(vector<Mahasiswa>& data) { if (data.empty()) { cout << "\nTidak ada data mahasiswa!\n"; return; } tampilkanData(data); int index; cout << "\nPilih nomor data yang akan diedit: "; cin >> index; clearInputBuffer(); if (index < 1 || index > static_cast<int>(data.size())) { cout << "Nomor tidak valid!\n"; return; } Mahasiswa& mhs = data[index - 1]; cout << "\n--- Edit Data Mahasiswa ---\n"; cout << "NIM [" << mhs.nim << "] : "; getline(cin, mhs.nim); cout << "Nama [" << mhs.nama << "] : "; getline(cin, mhs.nama); cout << "Nilai Tugas [" << mhs.nilai_tugas << "] : "; cin >> mhs.nilai_tugas; cout << "Nilai UTS [" << mhs.nilai_uts << "] : "; cin >> mhs.nilai_uts; cout << "Nilai UAS [" << mhs.nilai_uas << "] : "; cin >> mhs.nilai_uas; mhs.nilai_akhir = hitungNilaiAkhir(mhs.nilai_tugas, mhs.nilai_uts, mhs.nilai_uas); cout << "\nData berhasil diupdate!\n"; clearInputBuffer(); } // Fungsi untuk menghapus data mahasiswa void hapusMahasiswa(vector<Mahasiswa>& data) { if (data.empty()) { cout << "\nTidak ada data mahasiswa!\n"; return; } tampilkanData(data); int index; cout << "\nPilih nomor data yang akan dihapus: "; cin >> index; clearInputBuffer(); if (index < 1 || index > static_cast<int>(data.size())) { cout << "Nomor tidak valid!\n"; return; } data.erase(data.begin() + index - 1); cout << "\nData berhasil dihapus!\n"; } // Fungsi untuk menghitung rata-rata nilai void hitungRataRata(const vector<Mahasiswa>& data) { if (data.empty()) { cout << "\nTidak ada data mahasiswa!\n"; return; } float total_tugas = 0, total_uts = 0, total_uas = 0, total_akhir = 0; for (const auto& mhs : data) { total_tugas += mhs.nilai_tugas; total_uts += mhs.nilai_uts; total_uas += mhs.nilai_uas; total_akhir += mhs.nilai_akhir; } int jumlah = data.size(); cout << "\n--- Rata-rata Nilai ---\n"; cout << "Nilai Tugas : " << fixed << setprecision(2) << (total_tugas / jumlah) << endl; cout << "Nilai UTS : " << fixed << setprecision(2) << (total_uts / jumlah) << endl; cout << "Nilai UAS : " << fixed << setprecision(2) << (total_uas / jumlah) << endl; cout << "Nilai Akhir : " << fixed << setprecision(2) << (total_akhir / jumlah) << endl; } // Fungsi untuk menyimpan data ke file void simpanKeFile(const vector<Mahasiswa>& data, const string& namaFile) { ofstream file(namaFile); if (!file.is_open()) { cout << "\nGagal membuka file!\n"; return; } for (const auto& mhs : data) { file << mhs.nim << "," << mhs.nama << "," << mhs.nilai_tugas << "," << mhs.nilai_uts << "," << mhs.nilai_uas << "," << mhs.nilai_akhir << "\n"; } file.close(); cout << "\nData berhasil disimpan ke file '" << namaFile << "'!\n"; } // Fungsi untuk membaca data dari file void bacaDariFile(vector<Mahasiswa>& data, const string& namaFile) { ifstream file(namaFile); if (!file.is_open()) { cout << "\nGagal membuka file!\n"; return; } data.clear(); string line; while (getline(file, line)) { Mahasiswa mhs; size_t pos = 0; string token; int field = 0; while ((pos = line.find(',')) != string::npos) { token = line.substr(0, pos); switch (field) { case 0: mhs.nim = token; break; case 1: mhs.nama = token; break; case 2: mhs.nilai_tugas = stof(token); break; case 3: mhs.nilai_uts = stof(token); break; case 4: mhs.nilai_uas = stof(token); break; } line.erase(0, pos + 1); field++; } mhs.nilai_akhir = stof(line); data.push_back(mhs); } file.close(); cout << "\nData berhasil dibaca dari file '" << namaFile << "'!\n"; } int main() { vector<Mahasiswa> dataMahasiswa; string namaFile = "data_mahasiswa.txt"; int pilihan; do { tampilkanHeader(); tampilkanMenu(); cin >> pilihan; clearInputBuffer(); switch (pilihan) { case 1: tambahMahasiswa(dataMahasiswa); break; case 2: tampilkanData(dataMahasiswa); break; case 3: editMahasiswa(dataMahasiswa); break; case 4: hapusMahasiswa(dataMahasiswa); break; case 5: hitungRataRata(dataMahasiswa); break; case 6: simpanKeFile(dataMahasiswa, namaFile); break; case 7: bacaDariFile(dataMahasiswa, namaFile); break; case 0: cout << "\nTerima kasih telah menggunakan program!\n"; break; default: cout << "\nPilihan tidak valid!\n"; } } while (pilihan != 0); return 0; }
Fitur Utama Program
- Create (Tambah Data)
- Input NIM, nama, nilai tugas, UTS, dan UAS
- Otomatis hitung nilai akhir (30% tugas + 30% UTS + 40% UAS)
- Read (Tampilkan Data)
- Tampilkan dalam format tabel rapi
- Kolom: No, NIM, Nama, Tugas, UTS, UAS, Nilai Akhir
- Update (Edit Data)
- Pilih data berdasarkan nomor
- Edit semua field termasuk nilai
- Delete (Hapus Data)
- Pilih data berdasarkan nomor
- Konfirmasi penghapusan
- Perhitungan Rata-rata
- Hitung rata-rata nilai tugas, UTS, UAS, dan nilai akhir
- Penyimpanan ke File
- Simpan data ke file
data_mahasiswa.txt
- Baca data dari file saat program dijalankan
- Simpan data ke file
Kesimpulan
Program ini memberikan dasar yang kuat untuk:
✅ Memahami struktur data di C++
✅ Mengimplementasikan operasi CRUD
✅ Bekerja dengan file I/O
✅ Membuat aplikasi manajemen data sederhana
Dikembangkan khusus untuk CodeBlocks dan cocok untuk tugas kuliah atau latihan pemrograman.