Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <cstdlib>
- #include <conio.h>
- #include <iomanip>
- using namespace std;
- int main() {
- ///////////////////////////////////// DEKLARASI VARIABEL /////////////////////////////////////////////
- FILE *fdb, *fsem; //pointer file database dan file sementara
- char lagi, pil;
- char cari_npm[5];
- long int jml_data;
- void Kepala(char const *jdl_menu); //char const * agar pointer data hanya membaca data yang diarahkan padanya saja
- //ref: http://stackoverflow.com/questions/7415326/deprecated-conversion-from-string-constant-to-char-error
- void Menu_Utama(); //prosedur Menu Utama
- void Panduan(); //prosedur Panduan
- void Tentang(); //prosedur Tentang
- //struktur "data" untuk menyimpan data inputan dari user
- struct perpus {
- char npm[5], n_depan[50], n_belakang[50], kelas[2], angkatan[4], nohp[15];
- } data;
- //////////////////////////////////////////////////////////////////////////////////////////////////////////
- fdb = fopen("db_anggota.txt", "rb+"); //buka file dan baca dari awal baris
- if(fdb == NULL) { //jika file tidak ada
- fdb = fopen("db_anggota.txt", "wb+"); //buat dan tulis dari baris awal
- if(fdb == NULL) { //jika tetap gagal
- puts("File database tidak dapat dibuat!"); //mungkin mentok di hak akses :)
- return 0;
- }
- }
- jml_data = sizeof(data); //hitung jumlah data dalam struct "data"
- while(1) { //jika fopen berhasil
- Kepala("Menu yang tersedia:"); //manggil fungsi Kepala
- cout << "1. Tambah anggota baru\n";
- cout << "2. Lihat daftar anggota\n";
- cout << "3. Ubah data anggota\n";
- cout << "4. Hapus data anggota\n";
- cout << "5. Panduan penggunaan\n";
- cout << "6. Tentang aplikasi ini\n";
- cout << "7. Keluar\n\n";
- cout << "-----------------------\n";
- cout << "Masukkan pilihan anda [1..7] : ";
- fflush(stdin); //bersihkan buffer stdin
- pil = getche();
- switch(pil) {
- /////////////////////////////////////////////////// TAMBAH ANGGOTA BARU ///////////////////////////////////////////
- case '1':
- fseek(fdb, 0, SEEK_END); //taruh pointer di awal (fdb + 0)
- //ref: http://beej.us/guide/bgc/output/html/multipage/fseek.html
- lagi = 'y';
- while(lagi == 'y' || lagi == 'Y') { //looping "input data lainnya?" selama inputan masih "ya"
- Kepala("Tambah anggota baru:");
- cout << "Masukkan npm anggota: "; cin >> data.npm;
- cout << "Masukkan nama depan: "; cin >> data.n_depan;
- cout << "Masukkan nama belakang: "; cin >> data.n_belakang;
- cout << "Masukkan kelas: "; cin >> data.kelas;
- cout << "Masukkan tahun angkatan: "; cin >> data.angkatan;
- cout << "Masukkan nomor hape: "; cin >> data.nohp;
- fwrite(&data, jml_data, 1, fdb); //tulis struct "data" ke database kita (fdb)
- cout << "\n\nTambahkan data lainnya? [y/N]: ";
- fflush(stdin); //bersihkan buffer
- lagi = getchar();
- }
- break;
- /////////////////////////////////////////////////// LIHAT DAFTAR ANGGOTA ///////////////////////////////////////////
- case '2':
- Kepala("Daftar anggota perpus:");
- while(fread(&data, jml_data, 1, fdb) == 1) { //loop saat sukses baca file. indikasi sukses adalah return value sama dengan ukuran objek
- // ref: http://www.tutorialspoint.com/c_standard_library/c_function_fread.htm (bagian Return Value)
- cout << "NPM: " << data.npm <<"\n";
- cout << "Nama: " << data.n_depan << " " << data.n_belakang <<"\n";
- cout << "Dari: " << data.kelas << "/" << data.angkatan << "\n";
- cout << "Kontak: " << data.nohp <<"\n";
- cout << "---------------------------\n";
- }
- if((fread(&data, jml_data, 1, fdb) != 1)) { //jika fread gagal atau database masih kosong
- Kepala("Daftar anggota perpus:");
- cout << "\n\tBelum ada data anggota yang disimpan di database,\n\tSilahkan tekan sembarang tombol untuk kembali ke menu utama\n\n\n";
- }
- cout << "-----------------------\n";
- system("pause");
- break;
- /////////////////////////////////////////////////// UBAH DATA ANGGOTA ///////////////////////////////////////////
- case '3':
- Kepala("Ubah data anggota:");
- lagi = 'y';
- while(lagi == 'y' || lagi == 'Y') {
- cout << "Masukkan 5-digit npm anggota yang ingin disunting: "; cin >> cari_npm;
- rewind(fdb); //kembalikan pointer ke posisi awal
- while(fread(&data, jml_data, 1, fdb) == 1) {
- if(strcmp(data.npm, cari_npm) == 0) { //bandingkan string "data.npm" dengan "cari_npm", jika sama (return valuenya 0)
- //ref: http://www.tutorialspoint.com/c_standard_library/c_function_strcmp.htm (bagian Return Value)
- cout << "Masukkan npm anggota (baru): "; cin >> data.npm;
- cout << "Masukkan nama depan (baru): "; cin >> data.n_depan;
- cout << "Masukkan nama belakang (baru): "; cin >> data.n_belakang;
- cout << "Masukkan kelas (baru): "; cin >> data.kelas;
- cout << "Masukkan tahun angkatan (baru): "; cin >> data.angkatan;
- cout << "Masukkan nomor hape (baru): "; cin >> data.nohp;
- fseek(fdb, - jml_data, SEEK_CUR); //pointer balik ke posisi awal
- fwrite(&data, jml_data, 1, fdb); //timpa datanya
- }
- else { //jika hasil bandingnya tidak sama
- cout << "Anggota dengan npm " << cari_npm << " tidak ada dalam database!\n\n";
- }
- }
- cout << "\n\nSunting data lainnya? [y/N]: ";
- fflush(stdin); //sda
- lagi = getchar();
- }
- break;
- /////////////////////////////////////////////////// HAPUS DATA ANGGOTA ///////////////////////////////////////////
- case '4':
- Kepala("Hapus data anggota:");
- lagi = 'y';
- while(lagi == 'y' || lagi == 'Y') {
- cout << "Masukkan 5-digit npm anggota yang ingin dihapus: "; cin >> cari_npm;
- fsem = fopen("file_sementara.txt", "wb+"); //buat file "file_sementara.txt"
- rewind(fsem); //sda
- while(fread(&data, jml_data, 1, fdb) == 1) { //sda
- if(strcmp(data.npm, cari_npm) != 0) { //jika hasil pembandingan "data.npm" dengan "cari_npm" tidak sama
- fwrite(&data, jml_data, 1, fsem); //tulis isi struct "data" ke file sementara
- }
- fclose(fdb); //tutup file database
- }
- fclose(fdb); //sda, biar bisa dihapus
- fclose(fsem); //tutup file sementara
- remove("db_anggota.txt"); //hapus file database
- rename("file_sementara.txt", "db_anggota.txt"); //ganti nama file sementara menjadi file database
- //seperti menukar gelas a dan b dulu ya! :D
- fdb = fopen("db_anggota.txt", "rb+"); //buka dan baca lagi file databasenya
- cout << "\n\nHapus data lainnya? [y/N]: ";
- fflush(stdin);
- lagi = getchar();
- }
- break;
- /////////////////////////////////////////////////// PANDUAN PENGGUNAAN ///////////////////////////////////////////
- case '5':
- Kepala("Panduan penggunaan:");
- Panduan();
- cout << "-----------------------\n";
- system("pause");
- break;
- /////////////////////////////////////////////////// TENTANG APLIKASI ///////////////////////////////////////////
- case '6':
- Kepala("Tentang aplikasi ini:");
- Tentang();
- cout << "-----------------------\n";
- system("pause");
- break;
- /////////////////////////////////////////////////// PANDUAN PENGGUNAAN ///////////////////////////////////////////
- case '7':
- fclose(fdb); //tutup file database jika masih terbuka
- Kepala("Keluar aplikasi");
- cout << " Terimakasih telah menggunakan aplikasi kelompok kami,\n mohon maaf karena aplikasi ini masih banyak kekurangan.\n\n\n";
- exit(0);
- break;
- default:
- Kepala("Kesalahan inputan:");
- cout << "\n\tInput yang anda berikan salah.\n\n\n";
- cout << "-----------------------\n";
- system("pause");
- break;
- }
- }
- cout << "-----------------------\n";
- system("pause");
- return 0;
- }
- /////////////////////////////////////////////////// FUNGSI DAN PROSEDUR ///////////////////////////////////////////
- void Kepala(char const *jdl_menu) { //char const * referensi ada diatas
- system("cls");
- cout << "-----------------------------------------------------------------------------\n";
- cout << "\t\tSistem Informasi Anggota Perpustakaan Unsika\n";
- cout << "\t\t\tOleh Kelompok: Upin - Ipin\n";
- cout << "-----------------------------------------------------------------------------\n";
- cout << jdl_menu << "\n";
- cout << "-----------------------\n\n\n";
- }
- void Panduan() { // prosedur panduan aplikasi
- cout << "+ NPM adalah 2-digit awal npm diikuti 3-digit npm akhir milik anggota\n";
- cout << " Contoh: 1441177004009\t maka NPM yang harus anda inputkan adalah: 14009\n\n";
- cout << "+ Nomor hape adalah 12-digit nomor handphone milik anggota\n";
- cout << " Contoh: 081290316320 atau, \n";
- cout << " +6281290316320\n\n";
- cout << "+ Kelas adalah 2-karakter kelas milik anggota\n";
- cout << " Contoh: 2B, 2F, 6C, 7A dan seterusnya.\n\n";
- cout << "+ Tahun angkatan adalah 4-katakter tahun masuk milik anggota\n";
- cout << " Contoh: 2014, 2013, 2012 dan seterusnya. \n\n\n";
- }
- void Tentang() { //prosedur tentang aplikasi
- cout << "Aplikasi ini dibuat untuk memenuhi tugas final project Pemrograman 2.\n";
- cout << "Kami mohon maaf atas ketidak-sempurnaan aplikasi buatan kami ini\n";
- cout << "Kritik dan saran yang membangun dari anda sangat\nkami nantikan demi perbaikan dimasa mendatang.\n";
- cout << "Anggota Kelompok:\n";
- cout << "\tSuyadi 1441177004009\n";
- cout << "\tRio Juliyanto 1441177004136\n";
- cout << "\tSuseno 1441177004302\n";
- cout << "\tSugeng Fitriyanto 1441177004241\n\n";
- cout << "Fakultas Ilmu Komputer\nUniversitas Singaperbangsa Karawang\n\n\n";
- }
- ///////////////////////////////////////// AKHIR PROGRAM ///////////////////////////////////////////////////////
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement