Rabu, 09 Januari 2013

#Praktikum 15# MIRZAL

#Praktikum 15#


Diketahuiarsipberuntun yang menyimpan data terstruktur di bawahini. Arsipmempunyai mark yang eksplisit.
Data Nilai SeorangMahasiswa pada Semester 1
KodeMakul
NamaMakul
Jumlah SKS
Nilai(A/B/C/D/E)
 . . .
 . . .
. . .
 . . .
 . . .
 . . .
 . . .
 . . .
999
xxxx
999
Z

Buatlah program dalambahasa C yang terdiridari :
1.    Menu dengansusunan :
1.    Rekam Data Nilai
2.    Tampil Isi Arsip
3.    Hitung IPK
4.    Tampilnilaisebuahmatakuliah
5.    Keluar Program
2.    Penggunadapatmemilih menu yang diinginkanberulang-ulangs.d.memilih menu keluar.
3.    Jikapenggunamemilih menu 1, program akanmemanggilprosedurRekamDataNilai, dst
4.    ProsedurRekamDataNilaibertugasmerekam data nilaikedalamarsipbernama DataNilai.txt
5.    ProsedurTampilIsiArsipbertugasmenampilkanisiarsipkelayar
6.    FungsiHitungIPKbertugasmenghitung IPK seorangmahasiswa
7.    FungsiTampilNilaiuntukmenampilkannilaisebuahmatakuliah, dengan input parameter adalahnamamatakuliah
8.    FungsiCekMarkuntukmenentukanapakahsebuahrekamanmerupakansebuah mark atautidak

#include <stdio.h>
#include <conio.h>
#include <string.h>

typedef struct {int KodeMakul; char NamaMakul[25]; int JumlahSKS; char nilai[5];} DataMhs;

DataMhs Msiswa;
FILE *Mhs;

void RekamDataNilai(FILE *Mhs);
void TampilIsiArsip (FILE *Mhs);
int HitungIPK();
int cekmark();

int main()
{
    int i;
    char y;
        printf("Menu yang kami sediakan : ");
        printf("\n1. Rekam Data Nilai ");
        printf("\n2. Tampil Isi Arsip ");
        printf("\n3. Hitung IPK ");
        printf("\n4. Tampil nilai sebuah matakuliah ");
        printf("\n5. Cek mark ");
        printf("\n6. Keluar Program ");

    while (y!='n')
    {
        printf("\n\nMasukkan nomor pilihan menu anda :");scanf("%d", &i);
        switch(i)
        {
            case 1 : RekamDataNilai(Mhs); break;                //procedur merekam file
            case 2 : TampilIsiArsip(Mhs); break;                    //procedur menampilkan isi arsip
            case 3 : printf("jumlah IPK : %d\n", HitungIPK()); break;
            case 4 : HitungIPK(); break;
            case 5 : if (cekmark()==1)printf("Arsip ini menggunakan mark");
                    else printf("Arsip ini tidak menggunakan mark"); break;   //fungsi mengecek mark

            default: break;
        }

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

//rekam file
void RekamDataNilai(FILE *Mhs)
{
    char x;

    printf("Kode Makul               :");scanf("%d%c",&Msiswa.KodeMakul,&x);
    Mhs=fopen("datanilai.dat","wb");fflush(stdin);
    while(Msiswa.KodeMakul != 999)
    {
        printf("NamaMakul         :");gets(Msiswa.NamaMakul); fflush(stdin);
        printf("Jumlah SKS               :");scanf("%d", &Msiswa.JumlahSKS); fflush(stdin);
        printf("Nilai(A/B/C/D/E)         :");scanf("%c", &Msiswa.nilai ); fflush(stdin);
        fwrite(&Msiswa, sizeof(Msiswa),1,Mhs); fflush(stdin);
        printf("\n");
        printf("KodeMakul               :");scanf("%d%c",&Msiswa.KodeMakul,&x); fflush(stdin);
    }
    Msiswa.KodeMakul = 999; strcpy(Msiswa.NamaMakul, "xxxx"); Msiswa.JumlahSKS = 999; strcpy(Msiswa.nilai, "z");
    fwrite(&Msiswa, sizeof(Msiswa),1,Mhs); fflush(stdin);
    fclose(Mhs);
}

//Ambil data dari arsip
void TampilIsiArsip(FILE *Mhs)
{
    Mhs=fopen("datanilai.dat","rb");
    fread(&Msiswa, sizeof(Msiswa), 1, Mhs);
        printf("\n===================================================\n");
        printf("KodeMakul\tNamamakul\tsks\tnilai\n");
        printf("===================================================\n");
    while(Msiswa.KodeMakul!=999)
    {
        printf("%d\t", Msiswa.KodeMakul);
        printf("%s\t\t\t", Msiswa.NamaMakul);
        printf("%d\t", Msiswa.JumlahSKS);
        printf("%s\t", Msiswa.nilai);
        printf("\n");
        fread(&Msiswa, sizeof(Msiswa), 1, Mhs);
    }
    fclose(Mhs );
    fflush(stdin);
        printf("===================================================\n");
}

int HitungIPK()
{
    int ipk, nilai;

    Mhs=fopen("datanilai.dat","rb");
    fread(&Msiswa, sizeof(Msiswa), 1, Mhs);
    ipk = 0;
    while(Msiswa.KodeMakul!=999)
    {

        if (strcmp(Msiswa.nilai,"A")==0) nilai = 4;
        else if (strcmp(Msiswa.nilai,"B")==0) nilai = 3;
        else if (strcmp(Msiswa.nilai,"C")==0) nilai = 2;
        else if (strcmp(Msiswa.nilai,"D")==0) nilai = 1;
        else nilai = 0;
        ipk = ipk + nilai;
        fread(&Msiswa, sizeof(Msiswa), 1, Mhs);
    }
    fclose(Mhs );
    fflush(stdin);
    return ipk;
}

int cekmark()
{
    int mark;
    mark = 0;
    Mhs=fopen("datanilai.dat","rb");
    fread(&Msiswa, sizeof(Msiswa), 1, Mhs);
    while(!feof(Mhs))
    {
        if (Msiswa.KodeMakul==999) mark = 1;
        fread(&Msiswa, sizeof(Msiswa), 1, Mhs);
    }
    fclose(Mhs );    fflush(stdin);
    return mark;
}


1 komentar:

  1. Casino of the Day - Mapyro
    A map 여주 출장마사지 showing the Wynn Las 수원 출장마사지 Vegas and Encore at Wynn Las Vegas. Casino 화성 출장안마 of 경상북도 출장마사지 the Day – Wynn Hotel 오산 출장안마 Casino, Wynn Tower, Encore Tower, Resort King and

    BalasHapus