Langsung ke konten utama

Aplikasi Sistem Presensi Mahasiswa Menggunakan Bahasa C++

Algoritma dan Struktur Data, Bahasa C++, Kuliah S1

Tugas mata kuliah Algoritma dan Struktur Data dengan bahasa C++.


Aplikasi Sistem Presensi Mahasiswa Menggunakan Bahasa C++

Deskripsi aplikasi,

Aplikasi ini membahas cara membuat sebuah program sistem presensi mahasiswa berbasis console menggunakan bahasa C++.
Program ini dirancang untuk membantu proses presensi perkuliahan antara dosen dan mahasiswa secara sederhana, terstruktur, dan otomatis.

Pada aplikasi ini, dosen dapat login, memilih untuk memulai sesi presensi, melihat rekap kehadiran, atau langsung logout.
Sementara itu, mahasiswa dapat melakukan presensi dengan status Hadir atau Izin selama sesi presensi masih dibuka.

Sesi presensi memiliki batas waktu tertentu (pada mode pengujian diset selama 2 menit) dan akan tertutup secara otomatis tanpa perlu intervensi dosen.
Rekap kehadiran hanya dapat dilihat setelah sesi presensi berakhir.


Fitur utama aplikasi :

  1. Login dosen menggunakan ID dan password

  2. Login mahasiswa menggunakan NIM

  3. Sesi presensi dibuka dengan durasi waktu tertentu

  4. Presensi otomatis tertutup setelah waktu habis

  5. Status kehadiran mahasiswa:

    • Hadir

    • Izin (dengan upload/link bukti)

    • Tidak Hadir (otomatis jika tidak melakukan presensi)

  6. Rekap kehadiran mahasiswa ditampilkan secara terstruktur


Konsep yang digunakan dalam program :

Program ini menggunakan beberapa konsep dasar dalam bahasa C++, antara lain:

  • Struct (untuk menyimpan data presensi)

  • Array (sebagai database sederhana)

  • Percabangan (if–else)

  • Perulangan (loop)

  • Fungsi

  • Manipulasi waktu (time.h)


Ketentuan presensi :

  • Presensi hanya dapat dilakukan selama sesi masih aktif

  • Jika mahasiswa tidak melakukan presensi hingga sesi berakhir, maka otomatis tercatat sebagai Tidak Hadir

  • Mahasiswa yang memilih Izin wajib memasukkan link bukti izin

  • Rekap kehadiran hanya dapat diakses dosen setelah sesi presensi selesai


Proses input aplikasi :

Dosen

  • ID Dosen

  • Password

  • Pilihan:

    • Mulai sesi presensi

    • Lihat rekap

    • Logout

Mahasiswa

  • NIM Mahasiswa

  • Mata Kuliah

  • Status Kehadiran (Hadir / Izin)

  • Link bukti izin (jika memilih izin)


Proses output aplikasi :

  • Informasi sesi presensi (dibuka / ditutup)

  • Status presensi mahasiswa

  • Rekap kehadiran mahasiswa:

    • Hadir

    • Izin (dengan bukti)

    • Tidak Hadir


Flowchart aplikasi

flowchart_presensi


Kode program

#include <iostream>
#include <string>
#include <ctime>
#include <sstream>

using namespace std;

// ===== STRUCT =====
struct Presensi {
    string nim;
    string nama;
    string matkul;
    string status;
    string jam;
    string bukti;
};

// ===== DATABASE =====
Presensi dataPresensi[100];
int jumlahPresensi = 0;

// ===== DOSEN =====
string dosenID[8] = {
    "D001","D002","D003","D004",
    "D005","D006","D007","D008"
};

string dosenPass[8] = {
    "dosen123","dosen123","dosen123","dosen123",
    "dosen123","dosen123","dosen123","dosen123"
};

string matkul[8] = {
    "Algoritma dan Pemrograman",
    "Struktur Data",
    "Basis Data",
    "Sistem Operasi",
    "Pemrograman Web",
    "Jaringan Komputer",
    "Rekayasa Perangkat Lunak",
    "Kecerdasan Buatan"
};

// ===== MAHASISWA =====
string daftarNIM[5]  = {
    "2200010001","2200010002","2200010003",
    "2200010004","2200010005"
};
string daftarNama[5] = {
    "Alya","Bima","Citra","Dion","Eka"
};
const int JUMLAH_MHS = 5;

// ===== SESI =====
bool sesiPresensi[8] = {false};
bool sesiPernahDibuka[8] = {false};
time_t waktuMulai[8];
const int DURASI = 120; // 2 menit (TEST)

// ===== JAM =====
string getJam() {
    time_t now = time(0);
    tm *ltm = localtime(&now);
    stringstream ss;
    ss << ltm->tm_hour << ":" << ltm->tm_min << ":" << ltm->tm_sec;
    return ss.str();
}

// ===== CEK SESI =====
bool sesiMasihAktif(int i) {
    if (!sesiPresensi[i]) return false;
    time_t now = time(0);
    if (difftime(now, waktuMulai[i]) > DURASI) {
        sesiPresensi[i] = false;
        return false;
    }
    return true;
}

// ===== CEK PRESENSI =====
bool sudahPresensi(string nim, string mk) {
    for (int i = 0; i < jumlahPresensi; i++)
        if (dataPresensi[i].nim == nim && dataPresensi[i].matkul == mk)
            return true;
    return false;
}

// ===== MAIN =====
int main() {
    int menu;

    do {
        system("cls");
        cout << "=== SISTEM PRESENSI MAHASISWA ===\n";
        cout << "1. Login Dosen\n";
        cout << "2. Login Mahasiswa\n";
        cout << "0. Keluar\n";
        cout << "Pilih : ";
        cin >> menu;

        // ================= DOSEN =================
        if (menu == 1) {
            string id, pass;
            cout << "\nID Dosen : ";
            cin >> id;
            cout << "Password : ";
            cin >> pass;

            int idx = -1;
            for (int i = 0; i < 8; i++) {
                if (id == dosenID[i] && pass == dosenPass[i]) {
                    idx = i;
                    break;
                }
            }

            if (idx == -1) {
                cout << "Login gagal.\n";
                system("pause");
                continue;
            }

            cout << "\nMata Kuliah : " << matkul[idx] << endl;

            // ===== MENU DOSEN =====
            if (!sesiPresensi[idx]) {
                int pilih;
                cout << "\nMenu Dosen:\n";
                cout << "1. Mulai sesi presensi\n";
                cout << "2. Lihat rekap kehadiran\n";
                cout << "3. Logout\n";
                cout << "Pilih : ";
                cin >> pilih;

                // MULAI SESI
                if (pilih == 1) {
                    if (!sesiPernahDibuka[idx]) {
                        sesiPresensi[idx] = true;
                        sesiPernahDibuka[idx] = true;
                        waktuMulai[idx] = time(0);
                        cout << "\nSesi presensi DIBUKA (2 menit - TEST).\n";
                    } else {
                        cout << "Sesi hari ini sudah selesai.\n";
                    }
                }
                // LIHAT REKAP
                else if (pilih == 2) {
                    if (!sesiPernahDibuka[idx]) {
                        cout << "Belum ada presensi hari ini.\n";
                    } else {
                        cout << "\n=== REKAP KEHADIRAN ===\n";
                        for (int m = 0; m < JUMLAH_MHS; m++) {
                            bool hadir = false;
                            for (int p = 0; p < jumlahPresensi; p++) {
                                if (dataPresensi[p].nim == daftarNIM[m] &&
                                    dataPresensi[p].matkul == matkul[idx]) {

                                    hadir = true;
                                    cout << daftarNama[m] << " | "
                                         << dataPresensi[p].status;

                                    if (dataPresensi[p].status == "Izin")
                                        cout << " | Bukti: " << dataPresensi[p].bukti;

                                    cout << endl;
                                    break;
                                }
                            }
                            if (!hadir)
                                cout << daftarNama[m] << " | Tidak Hadir\n";
                        }
                    }
                }
                else {
                    cout << "Logout berhasil.\n";
                }
            }
            else if (sesiMasihAktif(idx)) {
                cout << "\nSesi presensi masih berlangsung.\n";
            }

            system("pause");
        }

        // ================= MAHASISWA =================
        else if (menu == 2) {
            string nim;
            cout << "\nNIM : ";
            cin >> nim;

            string nama = "";
            for (int i = 0; i < JUMLAH_MHS; i++)
                if (daftarNIM[i] == nim) nama = daftarNama[i];

            if (nama == "") {
                cout << "Mahasiswa tidak terdaftar.\n";
                system("pause");
                continue;
            }

            cout << "Nama : " << nama << endl;

            cout << "\nPilih Mata Kuliah:\n";
            for (int i = 0; i < 8; i++)
                cout << i + 1 << ". " << matkul[i] << endl;

            int pilih;
            cin >> pilih;
            pilih--;

            if (!sesiMasihAktif(pilih)) {
                cout << "Presensi ditutup.\n";
                system("pause");
                continue;
            }

            if (sudahPresensi(nim, matkul[pilih])) {
                cout << "Sudah presensi.\n";
                system("pause");
                continue;
            }

            Presensi p;
            p.nim = nim;
            p.nama = nama;
            p.matkul = matkul[pilih];
            p.jam = getJam();

            int opsi;
            cout << "\nStatus:\n1. Hadir\n2. Izin\nPilih : ";
            cin >> opsi;

            if (opsi == 2) {
                p.status = "Izin";
                cout << "Masukkan link bukti izin: ";
                cin >> p.bukti;
            } else {
                p.status = "Hadir";
                p.bukti = "-";
            }

            dataPresensi[jumlahPresensi++] = p;
            cout << "Presensi berhasil.\n";
            system("pause");
        }

    } while (menu != 0);

    return 0;
}


Hasil program

Hasil dari program ini adalah sebuah aplikasi presensi berbasis console yang mampu:

  • Mengelola sesi presensi secara otomatis

  • Mencatat kehadiran mahasiswa

  • Menampilkan rekap kehadiran secara jelas dan terstruktur


  1. Dosen memulai sesi

2. Jika Mahasiswa memilih izin
3. Dosen melihat rekap presensi






Komentar

Postingan populer dari blog ini

Perbedaan Antara Frontend, Backend, dan Full-Stack dalam Pengembangan Web

Pendahuluan Dalam pengembangan web, ada tiga komponen utama yang membentuk sebuah aplikasi atau situs web: frontend , backend , dan full-stack . Keduanya (frontend dan backend) bekerja sama untuk memastikan situs web atau aplikasi berjalan dengan lancar, sementara seorang full-stack developer memiliki kemampuan untuk menangani keduanya. Meskipun ketiganya saling terkait, mereka memiliki peran dan tanggung jawab yang berbeda. Artikel ini akan membahas perbedaan antara frontend, backend, dan full-stack dalam pengembangan web. 1. Apa Itu Frontend? Frontend adalah bagian dari aplikasi atau situs web yang langsung berinteraksi dengan pengguna. Bagian ini bertanggung jawab atas segala yang dilihat dan digunakan oleh pengguna di browser. Teknologi yang Digunakan : HTML (HyperText Markup Language): Untuk struktur halaman. CSS (Cascading Style Sheets): Untuk desain dan tata letak. JavaScript : Untuk interaktivitas dan dinamika. Framework/library yang populer: React , Angular , Vue.js . Tuga...

Orang Bikin Konten Edukasi Tapi View-nya Sepi: Salah Platform atau Salah Kita?

Kenapa konten edukasi sepi view? Artikel ini membahas apakah masalahnya ada di platform atau pada gaya penyampaian kita. Kita semua udah tau: bikin konten itu capek. Apalagi kalau niatnya edukasi—ngumpulin data, riset, nulis script, ngedit, dan mikirin caption. Tapi giliran udah posting? View-nya cuma 3. Dua di antaranya kamu sendiri, satu lagi mungkin sepupu yang nggak sengaja ke-swipe. Apakah Konten Edukasi Memang Kurang Diminati? Jujur aja, sebagian besar orang buka medsos bukan buat belajar. Mereka nyari hiburan, ketawa, atau kabur dari realita. Konten edukasi sering dianggap "berat", apalagi kalau tampilannya kaku, monoton, dan terlalu “sekolahan”. Tapi… itu bukan alasan buat nyerah. Salah Platform atau Salah Gaya Kita? Bisa jadi dua-duanya. Yuk kita kupas: 1. Platform Punya Algoritma Sendiri TikTok dan IG Reels lebih suka konten singkat, engaging, dan cepat nangkep perhatian. Kalau pembuka kamu terlalu datar, al...

Flashdisk 32 GB Tapi Cuma Terbaca 28,6 GB? Ini Penjelasan Lengkap & Gampang Dimengerti!

Pernah ngalamin beli flashdisk 32 GB, tapi saat dicolok ke laptop yang muncul cuma 28,6 GB ? Kok bisa ya? Flashdisk-nya rusak? Atau jangan-jangan "kena tipu"? Tenang dulu! Kamu nggak salah beli, dan itu bukan penipuan. Jawabannya ada di cara komputer menghitung data yang ternyata beda dengan cara pabrik menuliskan kapasitas di kemasan. Cara Komputer dan Pabrik Menghitung Kapasitas Flashdisk Pabrik pembuat flashdisk menghitung kapasitas menggunakan sistem desimal , sedangkan komputer dan sistem operasi (Windows, Mac, Linux) menghitungnya dengan sistem biner . Berikut perbedaan hitungannya: Sistem Desimal (pabrik): 1 GB = 1.000.000.000 bytes Sistem Biner (komputer): 1 GB = 1.073.741.824 bytes Makanya, saat kamu colok flashdisk 32 GB ke komputer, komputer akan hitung berdasarkan byte aslinya. Yuk, kita hitung: Contoh Perhitungan Kapasitas Flashdisk Flashdisk 32 GB = 32.000.000.000 bytes Dihitung oleh komputer sebagai: 32.000.00...