Project C++ Aplikasi Manajemen Nilai Mahasiswa

Project C++ Aplikasi Manajemen Nilai Mahasiswa

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

  1. Buka CodeBlocks
  2. Klik File → New → Project
  3. Pilih Console Application
  4. Pilih C++ dan beri nama project (ManajemenNilai)
  5. Klik Finish

Kode Lengkap Program

File: main.cpp

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

  1. Create (Tambah Data)
    • Input NIM, nama, nilai tugas, UTS, dan UAS
    • Otomatis hitung nilai akhir (30% tugas + 30% UTS + 40% UAS)
  2. Read (Tampilkan Data)
    • Tampilkan dalam format tabel rapi
    • Kolom: No, NIM, Nama, Tugas, UTS, UAS, Nilai Akhir
  3. Update (Edit Data)
    • Pilih data berdasarkan nomor
    • Edit semua field termasuk nilai
  4. Delete (Hapus Data)
    • Pilih data berdasarkan nomor
    • Konfirmasi penghapusan
  5. Perhitungan Rata-rata
    • Hitung rata-rata nilai tugas, UTS, UAS, dan nilai akhir
  6. Penyimpanan ke File
    • Simpan data ke file data_mahasiswa.txt
    • Baca data dari file saat program dijalankan


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.

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *