Aplikasi Sistem Presensi Mahasiswa Menggunakan Bahasa C++

Jessi
0

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






Posting Komentar

0 Komentar

Posting Komentar (0)
3/related/default