Jump to content
Sign in to follow this  
encik pot pet

Aktiviti Pengaturcaraan C #3

Recommended Posts

kali ni kita akan buat program yang saya rasa agak berguna..

bukan setakat utk latihan...

saya nak awak buat satu program (kalau taknak buat pun tak kisah) utk menyimpan maklumat peribadi pelajar.

1. Nama

2. No student id

3. Kursus

4. markah

maklumat tersebut hendaklah disimpan dalam satu fail sama ada binary atau text

ciri2 dbase yang diperlukan,

1. saiz fail mestilah dinamik...dimana bergantung kepada saiz data.. jika banyak data dimasukkan.. fail akan jadi besar.

2. boleh edit mana2 data..

3. boleh remove data pelajar

features tambahan..(pilihan)

1. file data dipadatkan.. awak boleh cari compression algo kat http://www.data-compression.info/

2. ada gui..

p/s:

awak digalakkan mengimplementasi sendiri semua kod

Share this post


Link to post
Share on other sites

A'kum... tader sapa ker nk wat aturcara ni? aku br jer mula td. setakat ni baru siap tambah rekod, carian ngan senarai rekod jer. esok sambung lak... otak pon dah beku, lama tak sentuh bab ni.... aku keliru sket bab saiz fail mesti dinamik tu... mmm

Share this post


Link to post
Share on other sites

a'kum... ni kod yang aku sempat wat. nak balik kampung malam ni.. yahuuuuuu..... setakat aku test. ok jer, tapi kot ada bug tang mana2, bgtau eikk... nak repair sesikit. gui pon cam hampeh jer... tu jer yg aku mampu wat.... adiosss

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<dos.h>
#define faildata "E:\\pelajar"  	// fail untuk simpan data
#define failsementara "E:\\sementara"  // fail untuk proses delete data

struct student
{
	char namapelajar[50];
   char idpelajar[5];
   char kursus[30];
   float markah;
};

void menu(void);      	//prototaip untuk menu
void tambahrekod(void);    //prototaip untuk masuk rekod baru
void senarairekod(void);   //prototaip untuk paparkan semua rekod
void carirekod(void);      //prototaip untuk mencari rekod
void padamrekod(void);     //prototaip untuk padam rekod
void kemaskini(void);      //prototaip untuk kemaskini rekod

int main(void)
{
 menu();

 getch();
}

void menu(void)
{
 int pilihan;

 gotoxy(30, 10);
 textcolor(5);
 cprintf("SILA BUAT PILIHAN");
 gotoxy(30, 13);
 cprintf("1 -> MASUK REKOD BARU");
 gotoxy(30, 14);
 cprintf("2 -> SENARAI REKOD");
 gotoxy(30, 15);
 cprintf("3 -> CARIAN REKOD");
 gotoxy(30, 16);
 cprintf("4 -> KEMASKINI REKOD");
 gotoxy(30, 17);
 cprintf("5 -> PADAM REKOD");
 gotoxy(30, 18);
 cprintf("6 -> KELUAR SISTEM");
 gotoxy(30, 20);
 textcolor(7);
 cprintf("MASUKKAN PILIHAN ANDA : ");
 scanf("%d", &pilihan);

 switch(pilihan)
 {
  case 1:  clrscr();
            gotoxy(32, 12);
            cprintf("SILA TUNGGU.........");
            sleep(1);
            clrscr();
            tambahrekod();    //panggil fungsi tambah rekod
            clrscr();
            break;
   case 2:  clrscr();
            gotoxy(32, 12);
            cprintf("SILA TUNGGU........");
            sleep(1);
            clrscr();
            senarairekod();         //panggil fungsi paparan rekod
            break;
   case 3:  clrscr();
      gotoxy(32, 12);
            cprintf("SILA TUNGGU........");
            sleep(1);
            carirekod();           //panggil fungsi nak cari rekod
            break;
   case 4:  clrscr();
      gotoxy(32, 12);
            cprintf("SILA TUNGGU........");
            sleep(1);
            kemaskini();           //panggil fungsi nak kemaskini rekod
            break;
   case 5:  clrscr();
      gotoxy(32, 12);
            cprintf("SILA TUNGGU........");
            sleep(1);
            padamrekod();           //panggil fungsi untuk padam rekod
            break;
   case 6:  exit(1);
   default: printf("\nMAAF, PILIHAN ANDA TIDAK DAPAT DIKENALPASTI\n");
 }

}

void tambahrekod(void)
{
 FILE *failpelajar;
 char pilih;
 struct student pelajar;

 do
 {
  failpelajar = fopen(faildata, "ab");

  gotoxy(15, 5);
   cprintf("Masukkan No ID pelajar  : ");
   scanf("%s", pelajar.idpelajar);
   fflush(stdin);
   gotoxy(15, 6);
   cprintf("Masukkan Nama pelajar   : ");
   gets(pelajar.namapelajar);
   gotoxy(15, 7);
   cprintf("Masukkan Kursus pelajar : ");
   gets(pelajar.kursus);
   gotoxy(15, 8);
   cprintf("Masukkan Markah pelajar : ");
   scanf("%f", &pelajar.markah);
   fflush(stdin);

   /*if((failpelajar = fopen(faildata, "wb")) == NULL);
   {
    printf("Maaf, ralat membuka fail pelajar\n");
      getch();
      exit(1);
   } */

   fwrite(&pelajar, sizeof(struct student), 1, failpelajar); //tulis rekod dlm fail
   fclose(failpelajar);

   gotoxy(30, 12);
   cprintf("ANDA INGIN MASUKKAN REKOD LAGI? (y / n) : ");
	scanf("%c", &pilih);
   if(pilih == 'n' || pilih == 'N'){
      clrscr();
    menu();}
   clrscr();
 }while(pilih == 'y' || pilih == 'Y');
}

void senarairekod(void)
{
 FILE *failpelajar;
 struct student pelajar;

 failpelajar = fopen(faildata, "rb");

 fread(&pelajar, sizeof(struct student), 1, failpelajar); //baca rekod dalam fail

 clrscr();
 gotoxy(30, 5);
 textcolor(3);
 cprintf("SENARAI PELAJAR");                //yang ni untuk output kat skrin nanti
 printf("\n\t");
 printf("--------------------------------------------------------------");
 printf("\n%18s %-30s%-15s%-10s\n\t","ID PELAJAR","NAMA", "KURSUS", "MARKAH");
 printf("--------------------------------------------------------------");

 while(!feof(failpelajar))
 {
   printf("\n%12s%7s%-30s%-15s%-10.2f", pelajar.idpelajar," ", pelajar.namapelajar, pelajar.kursus, pelajar.markah);

   fread(&pelajar, sizeof(struct student), 1, failpelajar);
 }
 getch();
 clrscr();
 fclose(failpelajar);
 menu();
}

void carirekod(void)
{
 FILE *failpelajar;
 struct student pelajar;
 char pilih[5];
 int x;

 failpelajar = fopen(faildata,"rb");
 clrscr();
 gotoxy(15, 5);
 cprintf("Masukkan No ID pelajar yang ingin dicari  : ");
 scanf("%s", pilih);

 while ((fread(&pelajar,sizeof(struct student),1,failpelajar)))
 {
 //if(!feof(failpelajar) == 0)
	//printf("\n\nTIADA REKOD\n");
 //else

 x = strcmp(pelajar.idpelajar, pilih);
  if(x== 0)
  {
      printf("\n\n\t\tID pelajar :  %s\n",pelajar.idpelajar);
      printf("\t\tNama       : %s\n",pelajar.namapelajar);
      printf("\t\tKursus     : %s\n",pelajar.kursus);
      printf("\t\tMarkah     : %.2f\n",pelajar.markah);
  }
 }

     getch();
     fclose(failpelajar);
     clrscr();
     menu();
}

void padamrekod(void)
{
  FILE *failpelajar,*sementara;
  struct student pelajar;
  int x;
  char pilih[5], pilihan;

  clrscr();
  gotoxy(15, 5);
  cprintf("Masukkan No ID pelajar yang ingin dipadam  : ");
  scanf("%s", pilih);
  fflush(stdin);

  failpelajar=fopen(faildata,"rb+");      //buka fail untuk baca dan tulis
  sementara=fopen(failsementara,"wb+");   //buka fail untuk tulis dan baca
  rewind(failpelajar);

  while(fread(&pelajar,sizeof(struct student),1,failpelajar)==1)
  {
     x = strcmp(pelajar.idpelajar, pilih);
     if(x == 0)
     {
      printf("\n\n\t\tID pelajar :  %s\n",pelajar.idpelajar);
      printf("\t\tNama       : %s\n",pelajar.namapelajar);
      printf("\t\tKursus     : %s\n",pelajar.kursus);
      printf("\t\tMarkah     : %.2f\n",pelajar.markah);
     }
     if(x != 0)
     {
      fwrite(&pelajar,sizeof(pelajar),1,sementara);  //tulis rekod dlm failsementara tanpa masukkan rekod yg nak dipadam
     }

  }
  printf("\n\n\t\tAnda pasti untuk padam rekod ini? ");
  scanf("%c", &pilihan);
  fflush(stdin);
  if(pilihan == 'Y' || pilihan == 'y')
  {
  	gotoxy(17, 19);
   cprintf("REKOD TELAH DIPADAM !!!");
  }
  fclose(failpelajar);
  fclose(sementara);
  remove(faildata);                   //hapus fail pelajar
  rename(failsementara,faildata);     //rename nama fail sementara tadi, sbb nnt nak capai balik fail ni
  getch();
  clrscr();
  menu();
}

void kemaskini(void)
{
  FILE *failpelajar;
  struct student pelajar;
  int x, bilang, z=0;
  char pilih[5];

  clrscr();
  gotoxy(15, 3);
  cprintf("Masukkan No ID pelajar yang ingin dikemaskini  : ");
  scanf("%s", pilih);
  fflush(stdin);

  failpelajar=fopen(faildata,"rb+");
  //rewind(failpelajar);

  while(fread(&pelajar,sizeof(struct student),1,failpelajar)==1)
  {
     z++;
     x = strcmp(pelajar.idpelajar, pilih);
     if(x == 0)
     {
      bilang = z;
      printf("\n\n\t\tID pelajar :  %s\n",pelajar.idpelajar);
      printf("\t\tNama       : %s\n",pelajar.namapelajar);
      printf("\t\tKursus     : %s\n",pelajar.kursus);
      printf("\t\tMarkah     : %.2f\n",pelajar.markah);
     }

  }
   gotoxy(16, 12);
   cprintf("Masukkan No ID pelajar  : ");
   scanf("%s", pelajar.idpelajar);
   fflush(stdin);
   gotoxy(16, 13);
   cprintf("Masukkan Nama pelajar   : ");
   gets(pelajar.namapelajar);
   gotoxy(16, 14);
   cprintf("Masukkan Kursus pelajar : ");
   gets(pelajar.kursus);
   gotoxy(16, 15);
   cprintf("Masukkan Markah pelajar : ");
   scanf("%f", &pelajar.markah);
   fflush(stdin);
   //fseek(failpelajar,-sizeof(struct student),SEEK_CUR);
   fseek(failpelajar,(bilang - 1) * sizeof(struct student),SEEK_SET); //letak kat kedudukan sepatutnya untuk nak tulis jap lagi
   fwrite(&pelajar,sizeof(struct student),1,failpelajar);
   gotoxy(17, 21);
   cprintf("REKOD TELAH DIKEMASKINI !!!");

  fclose(failpelajar);
  getch();
  clrscr();
  menu();
}

wassalam

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...