Anda di halaman 1dari 11

Nama : Hendrik Hermawanto

NPM : 06.2008.1.04583
PEMBAHASAN PR!RAM "AN!!ANAN P#$%AN!
&ek'ara(i )eader* +aia,e'* (tr-.t* /-n0(i* dan ta,e' :
Deklarasi header :
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
Deklarasi fungsi & variable :
void menu(int *pilih)
void tambah!induk(void)
void rubah!induk(void)
void tampil!induk!t(void)
void tampil!induk!s(void)
void hapus!induk(void)
int posisi!record!induk(long int posisi)
int baca!record!induk(void)
void masuk!record!induk(void)
void tampil!record!induk(void)
char alat!keluaran(char *namafile)
int kodelgn" hasil
char #a$ab
Deklarasi tabel :
%&'( *fileinduk"*namaalat
Deklalari struct untuk men)impan data langganan sementara :
struct*
int kode
char nama+,-.
float piutang
int record!a$al!tran
int record!akhir!tran
/lgninduk
Mem,-ka /i'e :
1
%ile )ang digunakan untuk men)impan data adalah 0langgan.ind1. %ile ini dibuka dengan mode 0r21"
)aitu membuka file )ang telah ada untuk dibaca dan ditulisi. 3ika file belum ada" pembukaan file
tidak akan berhasil dan fungi /o1en23 akan menghasilkan nilai N$""" sehingga menampilkan
pesan bah$a file tidak bias dibuka.
4ode progam pembukaan file :
if((fileinduk5fopen(6langgan.ind6"6r26))5578'')
*
printf(6%ile induk tidak bisa dibuka 999 :;:n6)
e<it(=)
/
Men- $tama :
>enu utama dari aplikasi langganan terdiri dari :
=. >enambahkan data file induk
,. >erubah data file induk
?. >enampilkan data induk langganan tertentu
@. >enampilkan data induk semua langganan
A. >enghapus data induk langganan tertentu
Bada program utama ini" fungsi menu() akan di#alankan berulangCulang selama pilihan tidak sama
dengan 0-1. Dpabila pilihan 0-1 program akan keluar dari perulangan dan menutup file )ang telah
dibuka.
Eetiap kali user selesai menggunakan menu )ang telah disediakan (pilihan = sampai A)" program
akan membersihkan la)ar dan menghapus semua memori )ang telah dipakai oleh program" lalu
program akan men#alankan fungsi menu() selama pilihan tidak sama dengan 0-1.
FF 55555555555 BGHIGD> 8JD>D 5555555555555 FF
void main()
*
int pilihan!menu5-
do*
if(pilihan!menu95-)
*
printf(6:nJekan (nter untuk kembali ke >(78...6)
#a$ab5getche()
/
menu(&pilihan!menu)
s$itch(pilihan!menu)*
case =:
tambah!induk()
continue
case ,:
rubah!induk()
continue
2
case ?:
tampil!induk!t()
continue
case @:
tampil!induk!s()
continue
case A:
hapus!induk()
continue
/
flushall()
/$hile(pilihan!menu95-)
FF tutup semua file dan selesai
fcloseall()
FFmembersihkan la)ar
clrscr()
FFs)stem(6cls6)
printf(6Jerima kasih telah menggunakan aplikasi langganan...:n6)
/
%ungsi untuk menampilkan menu :
FF 5555555555 program menu 5555555555 FF
void menu(int *pilih)
*
clrscr()
FFs)stem(6cls6)
printf(6555555555555555 >(78 8JD>D 'D7IID7D7 5555555555555555:n6)
printf(6K CCCCCCCCCCCCCCCCCCCC K:n6)
printf(6K =. >enambahkan data file induk K:n6)
printf(6K ,. >erubah data file induk K:n6)
printf(6K ?. >enampilkan data induk langganan tertentu K:n6)
printf(6K @. >enampilkan data induk semua langganan K:n6)
printf(6K A. >enghapus data induk langganan tertentu K:n6)
printf(6KCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCK:n6)
printf(6K -. Eelesai K:n6)
printf(6555555555555555 ********************* 555555555555555:n6)
do
*
printf(6 Bilih 7omor (-CA) L 6)
scanf(6Md6"pilih)
if(*pilih<- KK *pilih>A)
printf(6:;6)
/$hile(*pilih<- KK *pilih>A)
printf(6:n:n6)
/
3
Dalam aplikasi langganan ini terdapat pilihan menu sebagai berikut :
1. Menam,a)kan data /i'e ind-k
Pi'i)an nomor 1 adalah untuk menambahkan data baru ke file induk langganan. Broses menambah
data baru ini akan dilakukan oleh fungsi tambah_induk(). Broses ini merekamkan data langganan ke
record dengan nomor record )ang sama dengan kode langganann)a. JiapCtiap record data
langganan terdiri dari ? bua field data" )aitu kode langganan" nama langganan" dan piutang
langganan. >isalkan kode langganan )ang ada dibuat urut dari kode = untuk langganan pertama"
kode , untuk langganan kedua dan seterusn)a. Eetelah data direkamkan" langganan dengan kode =
akan menempati posisi record pertama" langganan dengan kode , akan menempati posisi record
kedua dan seterusn)a.
4ode program tambah induk :
FF %ungsi tambah induk
void tambah!induk(void)
*
clrscr()
FFs)stem(6cls6)
do
*
masuk!record!induk()
hasil5posisi!record!induk(lgninduk.kodeC=)
if(hasil) return
hasil5rekam!record!induk()
if(9hasil) return
printf(6>emasukkan data lagi (NFJ) L 6)
fflush(stdin)
scanf(6Mc6"&#a$ab)
printf(6:n6)
/$hile(#a$ab55ONO KK #a$ab55O)O)
/
Broses untuk men)impan data dari inputan user ke dalam file langganan digunakan oleh fungsi
masuk_record_induk(). Brosesn)a )aitu user memasukkan data kode langganan" nama langganan"
dan nilai piutang" kemudian data tersebut disimpan pada struct lgninduk sebelum disimpan pada file
'an00an.ind.
FF fungsi masuk!record!induk
void masuk!record!induk(void)
*
printf(64ode langganan L 6)
fflush(stdin)
scanf(6Md6"&lgninduk.kode)
printf(67ama 'angganan L 6)
fflush(stdin)
scanf(6M+P:n.6"lgninduk.nama)
4
printf(67ilai Biutang L 6)
fflush(stdin)
scanf(6Mf6"&lgninduk.piutang)
printf(6:n6)
/
2. Mer-,a) data /i'e ind-k
Pi'i)an nomor 2 adalah untuk merubah data langganan di file langganan. Broses ini akan dilakukan
oleh fungsi rubah induk(). Bada proses ini semua record boleh dirubah. 3ika kode langganan )ang
dirubah maka posisi recordn)a #uga akan berubah. Gecord )ang lama dihapus terlebih dahulu dan
record baru )ang letakn)a sesuai dengan kode langganan )ang baru akan dibuat kembali.
4ode program rubah data induk :
FF fungsi rubah induk
void rubah!induk(void)
*
clrscr()
do
*
printf(64ode 'angganan L 6)
scanf(6Md6"&kodelgn)
printf(6:n6)
hasil5posisi!record!induk(kodelgnC=)
if(hasil) return
hasil5baca!record!induk()
if(hasil)
*
tampil!record!induk()
posisi!record!induk(kodelgnC=)
lgninduk.kode5C=
rekam!record!induk()
printf(6>asukkan Berubahann)a ::n6)
masuk!record!induk()
posisi!record!induk(lgninduk.kodeC=)
rekam!record!induk()
/
else
printf(64ode langganan tidak ada 999:n:n6)
printf(6>erubah data laig (NFJ) L 6)
fflush(stdin)
scanf(6Mc6"&#a$ab)
printf(6:n6)
/$hile(#a$ab55ONO KK #a$ab55O)O)
/
3. Menam1i'kan data ind-k 'an00anan tertent-
5
Pi'i)an nomor 3 adalah untuk menampilkan data induk langganan tertentu. Broses ini akan
dilakukan oleh fungsi tampil_induk_t(). Broses menampilkan data langganan tertentu akan
dilakukan secara cepat meskipun data )ang ada di file #umlahn)a sangat ban)ak. 4ecepatan ini
diperoleh karena pembacaan record di file langsung menu#u ke record )ang diinginkan. Gecord
)ang diinginkan dapat diketahui dari kode langganann)a )ang dihubungkan dengan nomor
recordn)a. 3ika kode langganan )ang dicari adalah kode'0n" maka posisi recordn)a adalah dimulai
dari b)te ke 2kode'0n4135(i6eo/2'an00anan3 dihitung mulai dari a$al 2SEE78SE%3. Broses ini
dilakukan oleh fungsi posisi_record_induk().
FFfungsi posisi record induk
int posisi!record!induk(long int posisi)
*
if(fseek(fileinduk"posisi*siQeof(lgninduk)"E((4!E(J))
*
printf(6Dda kesalahan penempatan posisi record 999:n6)
return(=)
/
else
return(-)
/
'anggaan adalah variable struktur dengan pan#ang seluruh elemenn)a sebesar ,R b)te. Ban#ang
seluruh elemen ini dapat dihitung dengan (i6eo/2'an00anan3. >isaln)a langganan )ang akan dicari
adalah langganan dengan kode ?" maka posisi data ini di file akan berada mulai di b)te ke (?C
=)*,AR.
4ode program tampil data tertentu :
FF fungsi tampil induk tertentu
void tampil!induk!t(void)
*
clrscr()
do
*
printf(64ode langganan L 6)
scanf(6Md6"&kodelgn)
printf(6:n6)
hasil5posisi!record!induk(kodelgnC=)
if(hasil) return
hasil5baca!record!induk()
if(hasil55=)
tampil!record!induk()
else
printf(64ode langganan tidak ada 999:n:n6)
printf(6>encari langganan )ang lain (NFJ) L 6)
fflush(stdin)
scanf(6Mc6"&#a$ab)
printf(6:n6)
/$hile(#a$ab55ONO KK #a$ab55O)O)
6
/
4. Menam1i'kan data ind-k (em-a 'an00anan
Pi'i)an nomor 4 adalah untuk menampilkan semua data )ang ada dil file induk langganan. Broses
ini dilakukan oleh fungsi tampil_induk_s(). Sasil )ang akan ditampilkan dapat dipilih apakah akan
ditampilkan di la)ar" printer" atau ke file.
3ika )ang dipilih adalah di file" maka nama dari filen)a akan ditan)akan dan file akan dibuat
sebagai file teks DET&&. Sasil )ang berada di file ini selan#utn)a dapat dilihat atau dirubah isin)a
dengan menggunakan pengedit kata )ang ada seperti notepad. >isaln)a telah ada data langganan
)ang terekam di file induk langganan" hasil menampilkan semua data ini akan didapatkan di alat
keluaran )ang dipilih dengan bentuk sebagai berikut :
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
4ode 7ama Biutang
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
----= ha)o ,--.--
----, devi ?U---.--
----? %itri =----.--
----@ Eet)o ?----.--
Broses menampilkan semua data induk langganan adalah sebagai berikut :
=. 7ama dari alat keluaran )ang akan digunakan ditan)akan dulu.
alat5alat!keluaran(namafile)
if(alat55O-O) return
Broses menan)akan alat keluaran dilakukan di fungsi alat_keluaran(). %ungsi ini akan
memberikan hasil balik berupa #enis alat keluaran )ang dipilih" )aitu 0B1 atau 0p1 untuk
printer" 0'1 atau 0l1 untuk la)ar" dan 0%1 atau 0f1 untuk file di disk. 3ika ter#adi kesalahan"
fungsi alat_keluaran() akan memberikan hasil balik nilai 0-1. 3ika )ang dipilih adalah file di
disk" fungsi alat_keluaran() #uga akan menan)akan nama file.
FFfungsi mempersiapkan alat keluaran
char alat!keluaran(char *namafile)
*
char alat
clrscr()
do
*
printf(6Jampilkan di la)ar('FBF%) L6)
fflush(stdin)
scanf(6Mc6"&alat)
/$hile(strchr(6'lBp%f6"alat)55O:-O)
if(alat55O%O KK alat55OfO)
*
7
#a$ab5OJO
$hile(#a$ab55OJO KK #a$ab55OtO)
*
printf(67ama file keluaran L 6)
scanf(6Ms6"namafile)
FFperiksa keberadaan filekeluaran
if((namaalat5fopen(namafile"6r6))5578'')
break
else
*
printf(6%ile sudah ada" Ditumpangi (NFJ) L6)
fflush(stdin)
scanf(6Mc6"&#a$ab)
fclose(namaalat)
/
/
FFbuka file keluaran
if((namaalat5fopen(namafile"6$6))5578'')
*
printf(6%ile tidak dapat dibuka 9996)
return(O-O)
/
/
if(alat55OBO KK alat55OpO)namaalat5stdprn
if(alat55O'O KK alat55OlO)namaalat5stdout
return(alat)
/
,. 3udul dari tabel ditampilkan dulu
clrscr()
fprintf(namaalat"6CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC:n6)
fprintf(namaalat"64ode 7ama Biutang:n6)
fprintf(namaalat"6CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC:n6)
?. Drahkan posisi pembacaan ke a$al file.
re$ind(fileinduk)
@. Vaca dan tampilkan tiapCtiap langganan mulai dari a$al file sampai dengan akhir file
dengan langkahClangkah sebagai berikut :
a. Vaca record di posisi pembacaan )ang akan dilakukan oleh fungsi
baca_record_induk()
hasil5baca!record!induk()
FFfungsi baca record induk
8
int baca!record!induk(void)
*
fread(&lgninduk"siQeof(lgninduk)"="fileinduk)
if(feof(fileinduk)) return(C=)
else
*
if(lgninduk.kode95kodelgn) return(-)
else return(=)
/
/
b. 3ika pembacaan sudah mencapai akhir dari file" proses pembacaan dihentikan.
Ben)eleksian ini tampak sebagai berikut :
if(hasil55C=) break
c. 8ntuk record )ang dibaca" seleksi apakah record tersebut berisi dengan data
langganan. 3ika posisi record )ang dibaca sama dengan kode langganan )ang
terekam" berarti record tersebut berisi dengan data langganan. 3ika tidak sama berarti
record tersebut masih dalam keadaan kosong. 3ika record berisi dengan kode
langganan" tampilkan data langganan tersebut.
if(lgninduk.kode55posisi!record)
fprintf(namaalat"6M-Ad MC,-s MU.,f:n6"lgninduk.kode"lgninduk.nama"
lgninduk.piutang)
d. Jentukan nomor record selan#utn)a. 7omor record ini digunakan di langkah c untuk
men)eleksi isi dari record )ang dibaca. Bosisi pembacaan akan otomatis bergeser ke
record selan#utn)a setiap saat selesai melakukan suatu pembacaan record. 7omor
record selan#utn)a adalah nomor record sekarang ditambah =.
posisi!record22
A. 3ika alat keluaran )ang dipilih adalah file di disk" maka pada akhir penampilan seluruh data
induk langganan" file ini harus ditutup sebagai berikut :
if(alat55O%O KK alat55OfO)
fclose(namaalat)
4ode program menampilkan semua data :
FF fungsi tampil!induk!s
void tampil!induk!s(void)
*
long int posisi!record5=
char alat"namafile+@-.
9
alat5alat!keluaran(namafile)
if(alat55O-O) return
clrscr()
fprintf(namaalat"6CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC:n6)
fprintf(namaalat"64ode 7ama Biutang:n6)
fprintf(namaalat"6CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC:n6)
re$ind(fileinduk)
do
*
hasil5baca!record!induk()
if(hasil55C=) break
if(lgninduk.kode55posisi!record)
fprintf(namaalat"6M-Ad MC,-s MU.,f:n6"lgninduk.kode"lgninduk.nama"lgninduk.piutang)
posisi!record22
/$hile(hasil 95C=)
if(alat55O%O KK alat55OfO)
fclose(namaalat)
/
5. Men0)a1-( data ind-k 'an00anan tertent-
Pi'i)an nomor 5 adalah untuk menghapus data langganan tertentu di file induk. Broses ini
dilakukan oleh fungsi hapus induk(). 'angkahClangkah menghapus data langganan ini adalah
sebagai berikut :
=. Jan)akan kode langganan )ang datan)a akan dihapus
,. Tari record data ini dengan menempatkan pembacaan ke posisi recordn)a. Broses
meletakkan pembacaan ke posisi record tertentu dilakukan oleh fungsi
posisi_record_induk().
?. Eeleksi keberhasilan penempatan posisi pembacaan ke record ini.
@. 3ika tidak ada kesalahan" baca record ini )ang akan dilakukan oleh fungsi
tampil_record_induk().
A. 4onfirmasikan apakah betul record ini akan dihapus.
R. Sapus record ini dengan memberikan nilai sembarang ke field kode langganan )ang tidak
sama dengan nomor recordn)a. 8ntuk program ini nilai sembarang dipilih nilai C= )ang
tidak mungkin merupakan nomor record. 8ntuk contoh ini" record )ang berisi dengan kode
langganan )ang tidak sama dengan nomor recordn)a dianggap sebagai record )ang kosong.
Gekamkan kembali record ini dengan nilai field kode langganan )ang sudah dirubah. Broses
ini akan dilakukan oleh fungsi rekam_record_induk().
4ode program hapus data :
FF fungsi hapus induk
void hapus!induk(void)
*
clrscr()
10
do
*
printf(64ode langganan L 6)
scanf(6Md6"&kodelgn)
printf(6:n6)
hasil5posisi!record!induk(kodelgnC=)
if(hasil) return
hasil5baca!record!induk()
if(hasil)
*
tampil!record!induk()
printf(6Vetul record ini akan dihapus (NFJ) L 6)
fflush(stdin) scanf(6Mc6"&#a$ab)
if(#a$ab55ONO KK #a$ab55O)O)
*
hasil5posisi!record!induk(kodelgnC=)
lgninduk.kode5C=
rekam!record!induk()
/
/
else
printf(64ode langganan tidak ada 999:n:n6)
printf(6>enghapus data lagi (NFJ) L 6)
fflush(stdin)
scanf(6Mc6"&#a$ab)
printf(6:n6)
/$hile(#a$ab55ONO KK #a$ab55O)O)
/
%ungsi untuk menampilkan data dari file langgan.ind :
Data )ang diambil dari file langgan.ind akan disimpan ke struct '0nind-k terlebih dahulu sebelum
ditampilkan di la)ar.
FFfungsi tampil!record!induk
void tampil!record!induk(void)
*
printf(64ode 'angganan : M-Ad:n6"lgninduk.kode)
printf(67ama 'angganan : Ms:n6"lgninduk.nama)
printf(67ilai Biutang : GB MU.,f:n6"lgninduk.piutang)
printf(6:n6)
/
11

Anda mungkin juga menyukai