Sabtu, 22 Desember 2012

Praktikum 15 Arsip Beruntun VERSI 3

Praktikum 15 Arsip Beruntun VERSI 3

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct{int NIM; char nama[25]; char Program_Study[25]; char Alamat[50];}DataMhs;
typedef DataMhs Siswa[100];
DataMhs Msiswa;
FILE *Mhs;
FILE *Mhs2;

void RekamFile(FILE *Mhs);
void AmbilData (FILE *Mhs);
void SalinFile(FILE *Mhs);
void AmbilDataBaru (FILE *Mhs);

int main()
{
    int i;
    char y;

    while (y!='n')
    {
        system("CLS");
        printf("Menu yang kami sediakan : ");
        printf("\n1. Rekam Data Mahasiswa ");
        printf("\n2. Tampil Isi Arsip ");
        printf("\n3. Salin Data ");
        printf("\n4. Tampil Hasil Penyalinan ");
        printf("\n5. Keluar Program ");
        printf("\n\nMasukkan nomor pilihan menu anda :");scanf("%d", &i);

        switch(i)
        {
            case 1 : AmbilData(Mhs); RekamFile(Mhs); break;
            case 2 : AmbilData(Mhs); break;
            case 3 : SalinFile(Mhs); break;
            case 4 : AmbilDataBaru(Mhs); break;
            default: break;
        }

        if (i==5) break;
            printf("\nApakah anda ingin mengulang transaksi y/n : "); scanf("%c", &y); fflush(stdin);
    }
return 0;
}

//rekam file
void RekamFile(FILE *Mhs)
{
    DataMhs Msiswa;
    char x;
    int cek;
    system("CLS");
    printf("======= Input data mahasiswa ========\n");
    AmbilData(Mhs);

    printf("Anda ingin menambah (1) atau buat baru (0) :"); scanf("%d", &cek);
    printf("NIM           :");scanf("%d%c",&Msiswa.NIM,&x);
    while(Msiswa.NIM != 9999)
    {
    if (cek == 0)
        {Mhs=fopen("DtMhs.txt","wb");fflush(stdin);}
    else
        {Mhs=fopen("DtMhs.txt","ab");fflush(stdin);}

        printf("Nama          :");gets(Msiswa.nama); fflush(stdin);
        printf("Program Study :");gets(Msiswa.Program_Study); fflush(stdin);
        printf("Alamat        :");gets(Msiswa.Alamat ); fflush(stdin);
        fwrite(&Msiswa, sizeof(Msiswa),1,Mhs); fflush(stdin);
        fclose(Mhs);
        system("CLS");
        nprintf("======= Input data mahasiswa ========\n");
        AmbilData(Mhs);

        printf("\n");
        printf("NIM           :");scanf("%d%c",&Msiswa.NIM,&x); fflush(stdin);
        cek = cek +1;
    }
}

//Ambil data dari arsip
void AmbilData (FILE *Mhs)
{
    Mhs=fopen("DtMhs.txt","rb");
    fread(&Msiswa, sizeof(Msiswa), 1, Mhs);
        printf("\n===================================================\n");
        printf("NIM\tNama\t\tProgram_Study\tAlamat\n");
        printf("===================================================\n");
    while(!feof(Mhs))
    {
        printf("%d\t", Msiswa.NIM);
        printf("%s\t\t", Msiswa.nama);
        printf("%s\t", Msiswa.Program_Study);
        printf("%s\t", Msiswa.Alamat);
        printf("\n");
        fread(&Msiswa, sizeof(Msiswa), 1, Mhs);
    }
    fclose(Mhs);
    fflush(stdin);
        printf("===================================================\n");
}

void SalinFile(FILE *Mhs)
{
    int m, cek;
    char cari[100];
    fflush(stdin);
    printf("Anda ingin menambah (1) atau buat baru (0) :"); scanf("%d", &cek);     fflush(stdin);
    printf("Alamat yang akan disorting :"); gets(cari);

        printf("\n===================================================\n");
        printf("NIM\tNama\t\tProgram_Study\tAlamat\n");
        printf("===================================================\n");

    Mhs=fopen("DtMhs.txt","rb");
    fread(&Msiswa, sizeof(Msiswa), 1, Mhs);
    if (cek==1) Mhs2=fopen("DtMhsBatamCenter.txt","ab");
    else Mhs2=fopen("DtMhsBatamCenter.txt","wb");
    m=0;
    while(!feof(Mhs))
    {
        if(strcmp(Msiswa.Alamat, cari)==0)
        {
            printf("%d\t", Msiswa.NIM);
            printf("%s\t\t", Msiswa.nama);
            printf("%s\t", Msiswa.Program_Study);
            printf("%s\t", Msiswa.Alamat);
            printf("\n");
            fwrite(&Msiswa, sizeof(Msiswa), 1, Mhs2);  m++;
        }
        fread(&Msiswa, sizeof(Msiswa), 1, Mhs);
    }
    fclose(Mhs);fclose(Mhs2);

    if (m==0)printf("Data Tak ada yang sesuai\n");
    else printf("\nSukses %d data telah di transfer\n", m);
    printf("===================================================\n");
}

void AmbilDataBaru (FILE *Mhs)
{
    int i;
    i = 1;
    Mhs=fopen("DtMhsBatamCenter.txt","rb");
    if(Mhs==NULL){printf("Data Tak ada : ");}
    else
    {
        fread(&Msiswa, sizeof(Msiswa), 1, Mhs);
            printf("\n===================================================\n");
            printf("No\tNIM\tNama\t\tProgram_Study\tAlamat\n");
            printf("===================================================\n");
        while(!feof(Mhs))
        {
            printf("%d\t",i++);
            printf("%d\t", Msiswa.NIM);
            printf("%s\t\t", Msiswa.nama);
            printf("%s\t", Msiswa.Program_Study);
            printf("%s\t", Msiswa.Alamat);
            printf("\n");
            fread(&Msiswa, sizeof(Msiswa), 1, Mhs);
        }
            printf("===================================================\n");
    }
    fclose(Mhs);
    fflush(stdin);
}

1 komentar:

  1. Assalamualaikum pak naru,,,
    mohon maaf sebelumnya dan terimakasih sebelumnya
    :D

    1.Diketahui arsip beruntun yang menyimpan data terstruktur di bawah ini. Arsip mempunyai mark yang eksplisit.
    Data Pembelian Seorang Pembeli di Minimarket
    Kode Barang Nama Barang Harga Jumlah Pembelian
    . . . . . . . . . . . .
    . . . . . . . . . . . .
    999 xxxx 0 0

    Buatlah program dalam bahasa C yang terdiri dari :
    1. Menu dengan susunan :
    1. Rekam Data Pembelian
    2. Tampil Isi Arsip
    3. Hitung Jumlah yang harus Dibayar
    4. Cari harga barang yang tertinggi
    5. Keluar Program
    2. Pengguna dapat memilih menu yang diinginkan berulang-ulang s.d. memilih menu keluar.
    3. Jika pengguna memilih menu 1, program akan memanggil prosedur RekamDataPembelian, dst
    4. Prosedur RekamDataPembelian bertugas merekam data pembelian seorang pelanggan ke dalam arsip bernama DataPembelian.dat
    5. Prosedur TampilIsiArsip bertugas menampilkan isi arsip ke layar
    6. Fungsi HitungBayar bertugas menghitung jumlah uang yang harus dibayar
    7. Fungsi CariHarga untuk menampilkan harga barang yang paling mahal
    8. Fungsi CekMark untuk menentukan apakah sebuah rekaman merupakan sebuah mark atau tidak

    BalasHapus