Anda di halaman 1dari 26

PROYEK AKHIR

Algoritma dan Pemrograman


Sistem Reservasi dan
Pembelian Tiket Kereta

Abdul Aris Umar (1406573564)


M. Very Nugroho(1406530962)

a. Algoritma Flowchart

b. Algoritma Pseudocode
1. START
2. State int menu rute[8], temp, temprute, kelas, pilih, rsv, listharga[100],
kode[100], l=0, o=1, kode[0]=100; state struct reservasi{char
nama[100]; int norute; int jml; char seat[100]}; state char stasiunbrkt[]
[], stasiuntjn[][]; state int stokeks[9], hargaeks[9], stokbis[9], hargabis[9],
stokeko[9], hargaeko[9].
3. Greet(), tulis bagian greet dengan isi menu awal.
4. Baca menu
i. If menu!=(1,2,3,4,5)
A. Tulis masukan nomor menu.
B. Go to number 4.ii.B.a.vii.
ii. If menu=1
A. Bantuan(), tulis bagian bantuan.
B. Tulis pilihan ke menu awal.
C. Baca pilih.
a. If pilih=1, back to number 3
b. If pilih!=1, go to number
iii. If menu=2
A. Tulis kelas kereta.
B. Baca kelas.
a. If kelas=1
i. Tulis norute, stasiunbrkt, stasiuntjn, stokeks, hargaeks.
ii. Baca nama, norute, jml, seat.
iii. Stokeks = stokeks - tiket.jml.
iv. Listharga = tiket.jml*hargaeks.
v. Kode = kode+1.
vi. Tulis nama, norute, jml, listharga, kode
vii. Tulis pilihan reservasi selanjutnya
viii. Baca pilih.
1. If pilih=1, back to number 4.ii.A
2. If pilih!=1, back to number 4.i.B
b. If kelas=2
i. Tulis norute, stasiunbrkt, stasiuntjn, stokbis, hargabis.
ii. Baca nama, norute, jml, seat.
iii. Stokbis = stokbis tiket.jml.
iv. Listharga = tiket.jml*hargaeks.
v. Kode = kode+1.
vi. Go to number 4.ii.B.a.vi.
c. If kelas=3
i. Tulis norute, stasiunbrkt, stasiuntjn, stokeko, hargaeko.
ii. Baca nama, norute, jml, seat.
iii. Stokeko = stokeko-tiket.jml.
iv. Listharga = tiket.jml*hargaeko.
v. Kode = kode+1.
vi. Go to number 4.ii.B.a.vi.
iv. If menu=3
A. Tulis cek kode reservasi.
B. Baca rsv
C. If rsv!=kode[i], go to number 4.iii.G, if rsv=kode[i], go to number
4.iii.D.
D. Tulis norute, stasiunbrkt, stasiuntjn.
E. Tulis ticket.nama[i], ticket.norute[i], tiket.jml[i], listharga[i].
F. Go to number 4.ii.B.a.vii.

G. I++
H. If i<=o, back to number 4.iii.A. If i>o,
v. If menu=4
A. Tulis kelas kereta
B. Baca kelas
C. If kelas = 1
a. Tulis stasiunbrk, stasiuntjn
b. K=i+1;
c. If stokeks[i]<stokeks[k]
i. Temp = stokeks[i]
ii. Temprute = rute[i]
iii. Stokeks[i] = stokeks[k]
iv. Rute[i] = rute[k]
v. Stokeks[k] = temp
vi. Rute[k] = temprute
vii. If k<9, k++, go to number 4.iv.C.c. if false, go to 4.iv.C.e.
d. If stokeks[i]>=stokeks[k], k++, go to number 4.iv.C.c.
e. If i<=8, i++. If false, go to 4.iv.C.f.
f. Tulis stokeks[], rute[]
g. Go to number 4.ii.B.a.vi.
D. If kelas = 2
a. Tulis stasiunbrk, stasiuntjn
b. K=i+1;
c. If stokbis[i]<stokbis[k]
i. Temp = stokbis[i]
ii. Temprute = rute[i]
iii. Stokbis[i] = stokbis[k]
iv. Rute[i] = rute[k]
v. Stokbis[k] = temp
vi. Rute[k] = temprute
vii. If k<9, k++, go to number 4.iv.D.c. if false, go to 4.iv.D.e.
d. If stokbis[i]>=stokbis[k], k++, go to number 4.iv.D.c.
e. If i<=8, i++. If false, go to 4.iv.D.f.
f. Tulis stokbis[], rute[]
g. Go to number 4.ii.B.a.vi.
E. If kelas = 3
a. Tulis stasiunbrk, stasiuntjn
b. K=i+1;
c. If stokeko[i]<stokeko[k]
i. Temp = stokeko[i]
ii. Temprute = rute[i]
iii. Stokeko[i] = stokeko[k]
iv. Rute[i] = rute[k]
v. Stokeko[k] = temp
vi. Rute[k] = temprute
vii. If k<9, k++, go to number 4.iv.E.c. if false, go to 4.iv.E.e.
d. If stokeko[i]>=stokeko[k], k++, go to number 4.iv.E.c.
e. If i<=8, i++. If false, go to 4.iv.E.f.
f. Tulis stokeko[], rute[]
g. Go to number 4.ii.B.a.vi.
vi. If menu=5
A. Keluar()
B. Break.

5. END.
c. Penjelasan Modul sesuai dengan algoritma
1. User Friendly
i. Komunikatif, memiliki penjelasan saat ingin memasukkan suatu input
dan adanya cp customer service di akhir program
ii. Mudah digunakan, memiliki petunjuk singkat penggunaan program
dan fasilitas help (menu program 1), memiliki error handling di setiap
memasukkan suatu input.
iii. Singkat dan jelas, program dibuat sesuai dengan tujuan program
iv. Terstruktur, program disusun secara terstruktur sesuai dengan bagian
menu-menu yang ada.
2. Pemrograman Modular
i. Modular yang digunakan di program ini adalah untuk menampilkan
tampilan awal, menampilkan menu bantuan, menampilkan menu exit,
menampilkan tiket yang sudah direservasi, pindai1 untuk memesan
nomor rute, pindai2 untuk memesan jumlah tiket, disprute untuk
menampilkan daftar kereta, pilihan untuk meminta input ingin reservasi
selanjutnya atau tidak, cari untuk searching nomor reservasi.
3. Array
i. Array yang digunakan pada program ini adalah untuk stasiunbrkt,
stasiuntjn, hargaeko, stokeko, hargabis, stokbis, hargaeks, stokeks,
kode. Yang mana tiap variabel array tersebut pada lariknya menyimpan
suatu komponen yang dibutuhkan untuk operasinya masing-masing.
4. Struktur Data
i. Struktur data yang digunakan pada program ini adalah struktur data
untuk data reservasi. Data yang terdapat pada struktur ini adalah nama
pemesan, nomor rute yang dipesan, jumlah tiket yang dipesan, dan
lokasi kursi yang dipesan yangmana akan ditampilkan histori semua
reservasi tiap reservasi dilakukan.
5. Searching
i. Searching pada program ini digunakan untuk mencari hasil reservasi
dari proses reservasi yang sudah dilakukan, dimana pada fitur searching
ini akan ditampilkan data sesuai dengan kode reservasi yang dicari.
6. Sorting
i. Sorting pada program ini digunakan untuk mengurutkan berdasarkan
stok yang masih tersedia beserta nomor rutenya, diurutkan dari yang
terbanyak hingga paling sedikit jumlah stoknya.

d. Screen Capture
Menu Utama

Menu 1

Menu 2

Menu 2 ketika salahsatu kelas kereta sudah dipilih

Error handling input kelas kereta kelas salah

Menu 2 saat proses reservasi

Menu 2 output reservasi

Menu 2 saat tidak ingin reservasi kembali

Menu 2 saat ingin reservasi kembali

Menu 3

Menu 3 hasil cek reservasi

Menu 4

Menu 4 ketika salahsatu kelas telah diinput untuk lihat stok

Menu 5

Kondisi kembali ke menu awal

Error handling menu

e. Source code
#include <stdio.h>
#include <string.h>

//struktur data

struct reservasi{
char nama[100];
int norute;
int jml;
char seat[100];
};

//modular programming
void greet();
void disprute();
void pilihan(int pilih);
void help();
void ext();
void kelaskereta();
void print(struct reservasi ticket[], int n, int harga[],int kode[],int l);
int pindai1(int i, struct reservasi ticket[]);
int pindai2(int i, struct reservasi ticket[]);
void cari(int rsv, int kode[], int o, struct reservasi ticket[], int listharga[]);
void listseat();
void lanjut();

int main(){

//fungsi utama

int i, j, k, l, n, o, menu, rute[8], temp, temprute, kelas, pilih, rsv, listharga[100], kode[100];
l=0; o=1; kode[0]=100;
char stasiunbrkt[9][25];

//list stasiun keberangkatan

strcpy(stasiunbrkt[1], "Jatinegara");
strcpy(stasiunbrkt[2], "Manggarai");
strcpy(stasiunbrkt[3], "Pasar Senen");
strcpy(stasiunbrkt[4], "Cirebon\t");
strcpy(stasiunbrkt[5], "Yogyakarta");
strcpy(stasiunbrkt[6], "Solo Balapan");
strcpy(stasiunbrkt[7], "Surabaya");
strcpy(stasiunbrkt[8], "Kota Malang");
char stasiuntjn[9][25];

//list stasiun tujuan

strcpy(stasiuntjn[1], "Kota Malang");


strcpy(stasiuntjn[2], "Surabaya");
strcpy(stasiuntjn[3], "Solo Balapan");
strcpy(stasiuntjn[4], "Manggarai");
strcpy(stasiuntjn[5], "Jatinegara");

strcpy(stasiuntjn[6], "Pasar Senen");


strcpy(stasiuntjn[7], "Jatinegara");
strcpy(stasiuntjn[8], "Pasar Senen");
int stokeks[9]={200,240,150,448,250,300,330,280}; //stok tiket eksekutif
int hargaeks[9]={450000,500000,375000,270000,350000,375000,500000,450000};
//harga tiket eksekutif
int stokbis[9]={300,340,250,548,350,400,430,380}; //stok tiket bisnis
int hargabis[9]={350000,400000,275000,170000,250000,275000,400000,350000};
//harga tiket bisnis
int stokeko[9]={400,440,350,648,450,500,530,480}; //stok tiket ekonomi
int hargaeko[9]={250000,300000,175000,70000,150000,175000,300000,250000};
//harga tiket ekonomi
struct reservasi tiket[100]; //state struktur data tiket
system("color B0");
for(j=0; ; j++){

//pemberian background program

//looping utama

greet(); //memanggil modular menu utama


printf("\n\tMasukan menu pilihan Anda: ");
scanf("%d", &menu); //input untuk menu utama
switch(menu){
default: //error handling pada menu utama
system("cls");
printf("\n\tMasukan nomor menu yang tersedia !");
continue;
break;
case 1:

//menu bantuan
system("cls");
help();
break;

case 2:

//menu reservasi tiket


system("cls");
for(k=0 ; ;k++){ //looping menu reservasi tiket
kelaskereta();

//memanggil modular list kelas kereta

yang ada
scanf("%d", &kelas);//input untuk kelas kereta
if(kelas==1){

//kondisi kelas eksekutif

system("cls");
disprute();

//memanggil modular daftar

rute kereta
for (i=1; i<=8; i++){ //looping menampilkan
daftar perjalanan tersedia berserta stok dan harga
printf("\n\t%d\t%s\t%s\t%d\t\tRp. %d", i,
stasiunbrkt[i], stasiuntjn[i], stokeks[i-1], hargaeks[i-1]);

printf("\n\t__________________________________________________________________\n");
printf("\n");
l++;

//untuk memberi parameter

input keberapa di kelas 1


tiket[i].norute=pindai1(l, tiket);

//mengubah

struktur data tiket bagian no. rute


tiket[i].jml=pindai2(l, tiket);
//mengubah struktur data tiket bagian jumlah
1]-tiket[i].jml;

stokeks[tiket[i].norute-1]=stokeks[tiket[i].norute//mengurangi stok sesuai jumlah pemesanan


n++; //iterasi banyak pemesan
kode[o]=kode[o-1]+1; //penghitung dan

pentimpan kode reservasi


for(i=o; i<=n; i++){ //looping untuk
menghitung& simpan harga dari yang dipesan

listharga[i]=tiket[i].jml*hargaeks[tiket[i].norute-1];
}
o++; //iterasi untuk indeks array kode
system("cls");
disprute(); // memanggil daftar modular kereta
for (i=1; i<=8; i++){ //looping menampilkan
daftar perjalanan tersedia berserta stok dan harga setelah dipesan
printf("\n\t%d\t%s\t%s\t%d\t\tRp. %d", i,
stasiunbrkt[i], stasiuntjn[i], stokeks[i-1], hargaeks[i-1]);
}

printf("\n\t__________________________________________________________________\n");
printf("\n");
print(tiket, n, hargaeks, kode, l);

//mencetak

hasil reservasi pada layar


pilihan(pilih);

//menu pilihan untuk

melanjutkan pemesanan
scanf("%d", &pilih);//input untuk melanjutkan
reservasi
if(pilih==1){

//kondisi 1 melanjutkan menu

reservasi tiket
continue;
}
else{

//kondisi lainnya

menuju ke menu utama


break;
}

}
if(kelas==2){

//kondisi kelas bisnis

system("cls");
disprute();

//memanggil modular daftar

rute kereta
for (i=1; i<=8; i++){ //looping menampilkan
daftar perjalanan tersedia berserta stok dan harga
printf("\n\t%d\t%s\t%s\t%d\t\tRp. %d", i,
stasiunbrkt[i], stasiuntjn[i], stokbis[i-1], hargabis[i-1]);
}

printf("\n\t__________________________________________________________________\n");
printf("\n");
l++;

//untuk memberi parameter input

keberapa di kelas 2
tiket[i].norute=pindai1(l, tiket);

//mengubah

struktur data tiket bagian no. rute


tiket[i].jml=pindai2(l, tiket);
//mengubah struktur data tiket bagian jumlah
stokbis[tiket[i].norute-1]=stokbis[tiket[i].norute1]-tiket[i].jml;//mengurangi stok sesuai jumlah pemesanan
n++; //iterasi banyak pemesaan
kode[o]=kode[o-1]+1; //penghitung dan
pentimpan kode reservasi
for(i=o; i<=n; i++){ //looping untuk
menghitung& simpan harga dari yang dipesan

listharga[i]=tiket[i].jml*hargabis[tiket[i].norute-1];
}
o++; //iterasi untuk indeks array kode
system("cls");
disprute(); //memanggil modular daftar rute
kereta
for (i=1; i<=8; i++){//looping menampilkan
daftar perjalanan tersedia berserta stok dan harga setelah dipesan
printf("\n\t%d\t%s\t%s\t%d\t\tRp. %d", i,
stasiunbrkt[i], stasiuntjn[i], stokbis[i-1], hargabis[i-1]);
}

printf("\n\t__________________________________________________________________\n");
printf("\n");
print(tiket, n, hargabis, kode, l);//mencetak hasil
reservasi pada layar
pilihan(pilih);
melanjutkan pemesanan

//menu pilihan untuk

scanf("%d", &pilih);

//input untuk

if(pilih==1){

//kondisi 1

melanjutkan reservasi
melanjutkan menu reservasi tiket
continue;
}
else{

//kondisi

lainnya menuju ke menu utama


break;
}
}
if(kelas==3){
system("cls");
disprute();

//memanggil modular daftar

rute kereta
for (i=1; i<=8; i++){ //looping menampilkan
daftar perjalanan tersedia berserta stok dan harga
printf("\n\t%d\t%s\t%s\t%d\t\tRp. %d", i,
stasiunbrkt[i], stasiuntjn[i], stokeko[i-1], hargaeko[i-1]);
}

printf("\n\t__________________________________________________________________\n");
printf("\n");
l++;

//untuk memberi parameter input

keberapa di kelas 3
tiket[i].norute=pindai1(l, tiket);

//mengubah

struktur data tiket bagian no. rute


tiket[i].jml=pindai2(l, tiket);
//mengubah struktur data tiket bagian jumlah
stokeko[tiket[i].norute-1]=stokeko[tiket[i].norute1]-tiket[i].jml;//mengurangi stok sesuai jumlah pemesanan
n++; //iterasi banyak pemesan
kode[o]=kode[o-1]+1; //penghitung dan
pentimpan kode reservasi
for(i=o; i<=n; i++){ //looping untuk
menghitung& simpan harga dari yang dipesan

listharga[i]=tiket[i].jml*hargaeko[tiket[i].norute-1];
}
o++; //iterasi untuk indeks array kode
system("cls");
disprute(); //memanggil modular daftar rute
kereta
for (i=1; i<=8; i++){ //looping menampilkan
daftar perjalanan tersedia berserta stok dan harga setelah dipesan

printf("\n\t%d\t%s\t%s\t%d\t\tRp. %d", i,
stasiunbrkt[i], stasiuntjn[i], stokeko[i-1], hargaeko[i-1]);
}

printf("\n\t__________________________________________________________________\n");
printf("\n");
print(tiket, n, hargaeko, kode, l);//mencetak hasil
reservasi pada layar
pilihan(pilih);//menu pilihan untuk melanjutkan
pemesanan
scanf("%d", &pilih);//input untuk melanjutkan
reservasi
if(pilih==1){//kondisi 1 melanjutkan menu
reservasi tiket
continue;
}
else{//kondisi lainnya menuju ke menu utama
break;
}
}
else{//kondisi memasukkan input selain kelas yang
tersedia
system("cls");
printf("\n\tMasukan angka menu yang
tersedia !");
continue;
}
}
break;
case 3: //menu cek reservasi
system("cls");
printf("\n\tUntuk mengecek reservasi, anda perlu kode reservasi");
printf("\n\tMasukan kode reservasi: ");
scanf("%d", &rsv);

//input untuk memasukkan kode

reservasi
system("cls");

printf("\n\t_______________________________________________________________________\n");
printf("\n\tNo.Rute\tSt.Berangkat\tSt.Tujuan");

printf("\n\t_______________________________________________________________________\n");
for (i=1; i<=8; i++){ //looping menampilkan daftar nomor rute
dan stasiun berangkat dan tujuannya

printf("\n\t%d\t%s\t%s", i, stasiunbrkt[i], stasiuntjn[i]);


}

printf("\n\t_______________________________________________________________________\n");
printf("\n");
cari(rsv, kode, o, tiket, listharga);

//modular untuk menampilkan

detail reservasi
break;
case 4: //menu cek stok
system("cls");
while(1){
kelaskereta();

//modular untuk menampilkan kelas

yang tersedia
for(i=0; i<8; i++){
rute[i]=i+1;
}
scanf("%d", &kelas);//input untuk menentukan kelas
kereta
system("cls");
printf("\n\t\tDaftar rute perjalanan KA yang tersedia");

printf("\n\t__________________________________________________________________\n");
printf("\n\tNo.Rute\tSt.Berangkat\tSt.Tujuan");

printf("\n\t__________________________________________________________________\n");
for (i=1; i<=8; i++){//untuk mencetak daftar kereta
printf("\n\t%d\t%s\t%s", i, stasiunbrkt[i],
stasiuntjn[i]);
}
if(kelas==1){//cek stok kelas eksekutif
for(i=0; i<=8; i++){
for(k= i+1;k<9;k++){
if(stokeks[i]<stokeks[k]){ //untuk sorting dari
besar ke kecil
temp=stokeks[i];
temprute=rute[i];
stokeks[i]=stokeks[k];
rute[i]=rute[k];
stokeks[k]=temp;
rute[k]=temprute;
}
}

}
printf("\n\n\tKetersediaan tiket");

printf("\n\t__________________________________________________________________\n");
printf("\n\tStok\tNo. Rute");

printf("\n\t__________________________________________________________________\n");
for (i=0; i<8; i++){ //looping menampilkan no
rute beserta stok setelah sorting
printf("\n\t%d\t%d", stokeks[i],
rute[i]);
}
break;
}
else if(kelas==2){//cek kelas bisnis
for(i=0; i<=8; i++){
for(k= i+1;k<9;k++){
if(stokbis[i]<stokbis[k]){ //untuk sorting dari besar
ke kecil
temp=stokbis[i];
temprute=rute[i];
stokbis[i]=stokbis[k];
rute[i]=rute[k];
stokbis[k]=temp;
rute[k]=temprute;
}
}
}
printf("\n\n\tKetersediaan tiket");

printf("\n\t__________________________________________________________________\n");
printf("\n\tStok\tNo. Rute");

printf("\n\t__________________________________________________________________\n");
for (i=0; i<8; i++){ //looping menampilkan no
rute beserta stok setelah sorting
printf("\n\t%d\t%d", stokbis[i],
rute[i]);
}
break;
}
else if(kelas==3){//cek kelas ekonomi

for(i=0; i<=8; i++){


for(k= i+1;k<9;k++){
if(stokeko[i]<stokeko[k]){ //untuk sorting dari
besar ke kecil
temp=stokeko[i];
temprute=rute[i];
stokeko[i]=stokeko[k];
rute[i]=rute[k];
stokeko[k]=temp;
rute[k]=temprute;
}
}
}
printf("\n\n\tKetersediaan tiket");

printf("\n\t__________________________________________________________________\n");
printf("\n\tStok\tNo. Rute");

printf("\n\t__________________________________________________________________\n");
for (i=0; i<8; i++){ //looping menampilkan no
rute beserta stok setelah sorting
printf("\n\t%d\t%d", stokeko[i],
rute[i]);
}
break;
}
else{ //error handling cek stok
system("cls");
printf("\n\tMasukan angka menu yang
tersedia !");
continue;
}
}
break;
case 5: //menu pilihan keluar
system("cls");
ext();

//memanggil modular ext berisi pesan exit

return 0; //untuk memaksa pilihan keluar dari program


}
printf("\n\n\tApakah anda ingin kembali ke menu awal ?");
mengulang ke menu awal

//untuk bertanya

printf("\n\t-Input 1 untuk Ya\n\t-Input angka/huruf selain 1 untuk Tidak");


printf("\n\tTanggapan: ");
scanf("%d", &pilih);

//input untuk mengulang ke menu awal

if(pilih==1){
system("cls");
continue;
}
else{
system("cls");
ext();
break;
}
break;
}
printf("\n");
return 0;
}

void greet(){
int menu;

printf("\n\t=======================================================
===========\n");
printf("\n\t\t\tPT. KERETA API BUKAN AIR\n");

printf("\n\t=======================================================
===========");
printf("\n\t 1. Bantuan");
printf("\n\t 2. Reservasi Tiket");
printf("\n\t 3. Cek Reservasi");
printf("\n\t 4. Cek Stok Tiket");
printf("\n\t 5. Keluar");
printf("\n\t__________________________________________________________________\n");
}

void help(){
printf("\n\t__________________________________________________________________\n");
printf("\n\t\t\t\tMenu Bantuan");
printf("\n\t__________________________________________________________________\n");
printf("\n\tSelamat datang di menu bantuan !");

printf("\n\nPanduan melakukan reservasi:\n");


printf("1. Pilih menu nomor 2 untuk memulai reservasi\n");
printf("2. Masukkan kode kelas kereta\n");
printf("3. Akan ditampilkan daftar kereta sesuai kelas\n");
printf("4. Masukkan nama Anda sebagai pemesan\n");
printf("5. Masukkan rute yang dipilih sesuai dengan daftar\n");
printf("6. Masukkan jumlah tiket yang dipesan\n");
printf("7. Masukkan nomor seat, dimana:\n");
printf(" a. nomor seat terdiri dari tiga digit\n");
printf(" b. digit pertama merupakan gerbong berupa huruf\n");
printf(" c. digit kedua dan ketiga merupakan tempat duduk\n");
printf("8. Reservasi anda telah berhasil\n");
printf("9. Akan ditampilkan detail reservasi beserta kodenya\n");
printf("10. Kode reservasi anda bisa dicek di menu cek reservasi\n\n");
printf("Anda bisa juga mengecek stok di menu cek stok");
printf("\n\t__________________________________________________________________\n");
}

void ext(){
printf("\n\tTerimakasih atas kepercayaannya telah menggunakan jasa kami");
printf("\n\tJika terdapat kritik atau saran silahkan hubungi kontak dibawah ini");
printf("\n\n\tTelp\t: 021-778-543-298");
printf("\n\tE-mail\t: keretakukeretamukeretakita@simail.com\n\n\t");
system("pause");
}

void print(struct reservasi ticket[], int n, int harga[], int kode[], int l){
char tempseat[100];
int i, k;
printf("\n\t_______________________________________________________________________\n");
printf("\n\tNo.\tNama\tNo.Rute\tJumlah Tiket\tHarga\t\tKode Reservasi");
printf("\n\t_______________________________________________________________________\n");
for(i=1; i<=n; i++){
printf("\n\t%d.\t%s\t%d\t%d\t\tRp. %d\t%d", i, ticket[i].nama, ticket[i].norute,
ticket[i].jml, ticket[i].jml*harga[ticket[i].norute-1], kode[i]);
k=ticket[i].jml;
}
printf("\n\n\tSeat milik pemesan no-%d :", l);
for(i=1; i<=k; i++){

printf("%s ", ticket[i].seat);


}
}

int pindai1(int i, struct reservasi ticket[]){


printf("\n\tNama Anda\t\t: ");
scanf("%s", ticket[i].nama);
printf("\n\tNo. rute dipilih\t: ");
scanf("%d", &ticket[i].norute);
return ticket[i].norute;
}

int pindai2(int i, struct reservasi ticket[]){


int j, k;
for(j=0; ; j++){
printf("\n\tJumlah tiket dipesan\t: ");
scanf("%d", &ticket[i].jml);
if (ticket[i].jml<1||ticket[i].jml>5){
printf("\n\tJumlah pemesanam maksimal adalah 5 tiket dan minimal 1
tiket");
continue;
}
else{
for(k=1; k<=ticket[i].jml; k++){
printf("\n\tMasukan seat ke-%d yang dipesan: ", k);
scanf("%s", ticket[k].seat);
}
break;
}
}
return ticket[i].jml;
}

void disprute(){
printf("\n\t\tDaftar rute perjalanan KA yang tersedia");
printf("\n\t__________________________________________________________________\n");
printf("\n\tNo.Rute\tSt.Berangkat\tSt.Tujuan\tStok Tiket\tHarga@Tiket");
printf("\n\t__________________________________________________________________\n");
}

void pilihan(int pilih){


printf("\n\n\tApakah anda masih ingin melakukan reservasi ?");
printf("\n\t-Input 1 untuk Ya\n\t-Input angka/huruf selain 1 untuk Tidak");
printf("\n\tTanggapan: ");
}

void cari(int rsv, int kode[], int o, struct reservasi ticket[], int listharga[]){
int i;
for(i=1; i<=o; i++){
if(rsv==kode[i]){
printf("\n\tRiwayat reservasi anda: \n");

printf("\n\t_______________________________________________________________________\n");
printf("\n\tNama\tNo.Rute\tJumlah Tiket\tHarga");

printf("\n\t_______________________________________________________________________\n");
printf("\n\t%s\t%d\t%d\t\tRp. %d", ticket[i].nama, ticket[i].norute,
ticket[i].jml, listharga[i]);
}
}
}

void kelaskereta(){
printf("\n\tMasukan kode kelas kereta yang ingin anda pesan tiketnya");
printf("\n\t__________________________________________________________________\n");
printf("\n\tKelas\t\tKode");
printf("\n\t__________________________________________________________________\n");
printf("\n\tEksekutif\t: 1");
printf("\n\tBisnis\t\t: 2");
printf("\n\tEkonomi\t\t: 3");
printf("\n\t__________________________________________________________________");
printf("\n\tMasukan kode: ");
}