Advertisement
Guest User

final project

a guest
May 24th, 2015
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.92 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <conio.h>
  6. #include <iomanip>
  7.  
  8. using namespace std;
  9.  
  10. int main() {
  11.     ///////////////////////////////////// DEKLARASI VARIABEL /////////////////////////////////////////////
  12.     FILE *fdb, *fsem; //pointer file database dan file sementara
  13.     char lagi, pil;
  14.     char cari_npm[5];
  15.     long int jml_data;
  16.  
  17.     void Kepala(char const *jdl_menu); //char const * agar pointer data hanya membaca data yang diarahkan padanya saja
  18.                                        //ref: http://stackoverflow.com/questions/7415326/deprecated-conversion-from-string-constant-to-char-error
  19.     void Menu_Utama(); //prosedur Menu Utama
  20.     void Panduan(); //prosedur Panduan  
  21.     void Tentang(); //prosedur Tentang
  22.  
  23.     //struktur "data" untuk menyimpan data inputan dari user
  24.     struct perpus {
  25.         char npm[5], n_depan[50], n_belakang[50], kelas[2], angkatan[4], nohp[15];
  26.     } data;
  27.  
  28.     //////////////////////////////////////////////////////////////////////////////////////////////////////////
  29.  
  30.  
  31.  
  32.  
  33.     fdb = fopen("db_anggota.txt", "rb+"); //buka file dan baca dari awal baris
  34.     if(fdb == NULL) { //jika file tidak ada
  35.         fdb = fopen("db_anggota.txt", "wb+"); //buat dan tulis dari baris awal
  36.         if(fdb == NULL) { //jika tetap gagal
  37.             puts("File database tidak dapat dibuat!"); //mungkin mentok di hak akses :)
  38.             return 0;
  39.         }
  40.     }
  41.  
  42.     jml_data = sizeof(data); //hitung jumlah data dalam struct "data"
  43.  
  44.     while(1) { //jika fopen berhasil
  45.         Kepala("Menu yang tersedia:"); //manggil fungsi Kepala
  46.  
  47.         cout << "1. Tambah anggota baru\n";
  48.         cout << "2. Lihat daftar anggota\n";
  49.         cout << "3. Ubah data anggota\n";
  50.         cout << "4. Hapus data anggota\n";
  51.         cout << "5. Panduan penggunaan\n";
  52.         cout << "6. Tentang aplikasi ini\n";
  53.         cout << "7. Keluar\n\n";
  54.        
  55.         cout << "-----------------------\n";
  56.         cout << "Masukkan pilihan anda [1..7] : ";
  57.         fflush(stdin); //bersihkan buffer stdin
  58.         pil = getche();
  59.  
  60.         switch(pil) {
  61.             /////////////////////////////////////////////////// TAMBAH ANGGOTA BARU ///////////////////////////////////////////
  62.             case '1':
  63.                 fseek(fdb, 0, SEEK_END); //taruh pointer di awal (fdb + 0)
  64.                                          //ref: http://beej.us/guide/bgc/output/html/multipage/fseek.html
  65.  
  66.                 lagi = 'y';
  67.                 while(lagi == 'y' || lagi == 'Y') { //looping "input data lainnya?" selama inputan masih "ya"
  68.                     Kepala("Tambah anggota baru:");
  69.                     cout << "Masukkan npm anggota: "; cin >> data.npm;
  70.                     cout << "Masukkan nama depan: "; cin >> data.n_depan;
  71.                     cout << "Masukkan nama belakang: "; cin >> data.n_belakang;
  72.                     cout << "Masukkan kelas: "; cin >> data.kelas;
  73.                     cout << "Masukkan tahun angkatan: "; cin >> data.angkatan;
  74.                     cout << "Masukkan nomor hape: "; cin >> data.nohp;
  75.  
  76.                     fwrite(&data, jml_data, 1, fdb); //tulis struct "data" ke database kita (fdb)
  77.                     cout << "\n\nTambahkan data lainnya? [y/N]: ";
  78.                     fflush(stdin); //bersihkan buffer
  79.                     lagi = getchar();
  80.                 }
  81.             break;
  82.  
  83.  
  84.             /////////////////////////////////////////////////// LIHAT DAFTAR ANGGOTA ///////////////////////////////////////////
  85.             case '2':
  86.                 Kepala("Daftar anggota perpus:");
  87.  
  88.                 while(fread(&data, jml_data, 1, fdb) == 1) { //loop saat sukses baca file. indikasi sukses adalah return value sama dengan ukuran objek
  89.                                                              // ref: http://www.tutorialspoint.com/c_standard_library/c_function_fread.htm (bagian Return Value)
  90.                     cout << "NPM: " << data.npm <<"\n";
  91.                     cout << "Nama: " << data.n_depan << " " << data.n_belakang <<"\n";
  92.                     cout << "Dari: " << data.kelas << "/" << data.angkatan << "\n";
  93.                     cout << "Kontak: " << data.nohp <<"\n";
  94.                     cout << "---------------------------\n";
  95.                 }
  96.  
  97.                 if((fread(&data, jml_data, 1, fdb) != 1)) { //jika fread gagal atau database masih kosong
  98.                     Kepala("Daftar anggota perpus:");
  99.                     cout << "\n\tBelum ada data anggota yang disimpan di database,\n\tSilahkan tekan sembarang tombol untuk kembali ke menu utama\n\n\n";
  100.                 }
  101.                
  102.                 cout << "-----------------------\n";
  103.                 system("pause");
  104.             break;
  105.  
  106.  
  107.             /////////////////////////////////////////////////// UBAH DATA ANGGOTA ///////////////////////////////////////////
  108.             case '3':
  109.                 Kepala("Ubah data anggota:");
  110.  
  111.                 lagi = 'y';
  112.                 while(lagi == 'y' || lagi == 'Y') {
  113.                     cout << "Masukkan 5-digit npm anggota yang ingin disunting: "; cin >> cari_npm;
  114.  
  115.                     rewind(fdb); //kembalikan pointer ke posisi awal
  116.  
  117.                     while(fread(&data, jml_data, 1, fdb) == 1) {
  118.                         if(strcmp(data.npm, cari_npm) == 0) { //bandingkan string "data.npm" dengan "cari_npm", jika sama (return valuenya 0)
  119.                                                               //ref: http://www.tutorialspoint.com/c_standard_library/c_function_strcmp.htm (bagian Return Value)
  120.                             cout << "Masukkan npm anggota (baru): "; cin >> data.npm;
  121.                             cout << "Masukkan nama depan (baru): "; cin >> data.n_depan;
  122.                             cout << "Masukkan nama belakang (baru): "; cin >> data.n_belakang;
  123.                             cout << "Masukkan kelas (baru): "; cin >> data.kelas;
  124.                             cout << "Masukkan tahun angkatan (baru): "; cin >> data.angkatan;
  125.                             cout << "Masukkan nomor hape (baru): "; cin >> data.nohp;
  126.  
  127.                             fseek(fdb, - jml_data, SEEK_CUR); //pointer balik ke posisi awal
  128.                             fwrite(&data, jml_data, 1, fdb); //timpa datanya
  129.                         }
  130.  
  131.                         else { //jika hasil bandingnya tidak sama
  132.                             cout << "Anggota dengan npm " << cari_npm << " tidak ada dalam database!\n\n";
  133.                         }
  134.                     }
  135.  
  136.                     cout << "\n\nSunting data lainnya? [y/N]: ";
  137.                     fflush(stdin); //sda
  138.                     lagi = getchar();
  139.                 }
  140.             break;
  141.  
  142.  
  143.             /////////////////////////////////////////////////// HAPUS DATA ANGGOTA ///////////////////////////////////////////
  144.             case '4':
  145.                 Kepala("Hapus data anggota:");
  146.  
  147.                 lagi = 'y';
  148.                 while(lagi == 'y' || lagi == 'Y') {
  149.                     cout << "Masukkan 5-digit npm anggota yang ingin dihapus: "; cin >> cari_npm;
  150.  
  151.                     fsem = fopen("file_sementara.txt", "wb+"); //buat file "file_sementara.txt"
  152.                     rewind(fsem); //sda
  153.  
  154.                     while(fread(&data, jml_data, 1, fdb) == 1) { //sda
  155.                         if(strcmp(data.npm, cari_npm) != 0) { //jika hasil pembandingan "data.npm" dengan "cari_npm" tidak sama
  156.                             fwrite(&data, jml_data, 1, fsem); //tulis isi struct "data" ke file sementara
  157.                         }
  158.                         fclose(fdb); //tutup file database
  159.                     }
  160.  
  161.                     fclose(fdb); //sda, biar bisa dihapus
  162.                     fclose(fsem); //tutup file sementara
  163.  
  164.                     remove("db_anggota.txt"); //hapus file database
  165.                     rename("file_sementara.txt", "db_anggota.txt"); //ganti nama file sementara menjadi file database
  166.                                                                     //seperti menukar gelas a dan b dulu ya! :D
  167.  
  168.                     fdb = fopen("db_anggota.txt", "rb+"); //buka dan baca lagi file databasenya
  169.  
  170.                     cout << "\n\nHapus data lainnya? [y/N]: ";
  171.                     fflush(stdin);
  172.                     lagi = getchar();
  173.                 }
  174.             break;
  175.  
  176.  
  177.             /////////////////////////////////////////////////// PANDUAN PENGGUNAAN ///////////////////////////////////////////
  178.             case '5':
  179.                 Kepala("Panduan penggunaan:");
  180.                 Panduan();
  181.                
  182.                 cout << "-----------------------\n";
  183.                 system("pause");
  184.             break;
  185.  
  186.  
  187.             /////////////////////////////////////////////////// TENTANG APLIKASI ///////////////////////////////////////////
  188.             case '6':
  189.                 Kepala("Tentang aplikasi ini:");
  190.                 Tentang();
  191.                
  192.                 cout << "-----------------------\n";
  193.                 system("pause");
  194.             break;
  195.  
  196.  
  197.             /////////////////////////////////////////////////// PANDUAN PENGGUNAAN ///////////////////////////////////////////
  198.             case '7':
  199.                 fclose(fdb); //tutup file database jika masih terbuka
  200.                 Kepala("Keluar aplikasi");
  201.  
  202.                 cout << " Terimakasih telah menggunakan aplikasi kelompok kami,\n mohon maaf karena aplikasi ini masih banyak kekurangan.\n\n\n";
  203.  
  204.                 exit(0);
  205.                
  206.             break;
  207.            
  208.            
  209.            
  210.             default:
  211.                 Kepala("Kesalahan inputan:");
  212.                    
  213.                 cout << "\n\tInput yang anda berikan salah.\n\n\n";
  214.                 cout << "-----------------------\n";
  215.                 system("pause");
  216.                
  217.             break;
  218.         }
  219.  
  220.     }
  221.     cout << "-----------------------\n";
  222.     system("pause");
  223.     return 0;
  224. }
  225.  
  226.  
  227.  
  228. /////////////////////////////////////////////////// FUNGSI DAN PROSEDUR ///////////////////////////////////////////
  229.  
  230. void Kepala(char const *jdl_menu) { //char const * referensi ada diatas
  231.     system("cls");
  232.     cout << "-----------------------------------------------------------------------------\n";
  233.     cout << "\t\tSistem Informasi Anggota Perpustakaan Unsika\n";
  234.     cout << "\t\t\tOleh Kelompok: Upin - Ipin\n";
  235.     cout << "-----------------------------------------------------------------------------\n";
  236.     cout << jdl_menu << "\n";
  237.     cout << "-----------------------\n\n\n";
  238. }
  239.  
  240.  
  241. void Panduan() { // prosedur panduan aplikasi
  242.     cout << "+ NPM adalah 2-digit awal npm diikuti 3-digit npm akhir milik anggota\n";
  243.     cout << "  Contoh: 1441177004009\t  maka NPM yang harus anda inputkan adalah: 14009\n\n";
  244.  
  245.     cout << "+ Nomor hape adalah 12-digit nomor handphone milik anggota\n";
  246.     cout << "  Contoh: 081290316320 atau, \n";
  247.     cout << "          +6281290316320\n\n";
  248.  
  249.     cout << "+ Kelas adalah 2-karakter kelas milik anggota\n";
  250.     cout << "  Contoh: 2B, 2F, 6C, 7A dan seterusnya.\n\n";
  251.  
  252.     cout << "+ Tahun angkatan adalah 4-katakter tahun masuk milik anggota\n";
  253.     cout << "  Contoh: 2014, 2013, 2012 dan seterusnya. \n\n\n";
  254. }
  255.  
  256.  
  257.  
  258. void Tentang() { //prosedur tentang aplikasi
  259.     cout << "Aplikasi ini dibuat untuk memenuhi tugas final project Pemrograman 2.\n";
  260.     cout << "Kami mohon maaf atas ketidak-sempurnaan aplikasi buatan kami ini\n";
  261.     cout << "Kritik dan saran yang membangun dari anda sangat\nkami nantikan demi perbaikan dimasa mendatang.\n";
  262.     cout << "Anggota Kelompok:\n";
  263.     cout << "\tSuyadi            1441177004009\n";
  264.     cout << "\tRio Juliyanto     1441177004136\n";
  265.     cout << "\tSuseno            1441177004302\n";
  266.     cout << "\tSugeng Fitriyanto 1441177004241\n\n";
  267.     cout << "Fakultas Ilmu Komputer\nUniversitas Singaperbangsa Karawang\n\n\n";
  268. }
  269.  
  270.  
  271. ///////////////////////////////////////// AKHIR PROGRAM ///////////////////////////////////////////////////////
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement