--buat deallocate untuk menghapus cursor cMhs
deallocate cMhs
--function fNA untuk menghitung nilai akhir
create function fNA (@tugas as numeric(18,0),@uts as numeric(18,0),@uas as numeric(18,0))
returns numeric(18,0)
as
begin
return (0.3*@uts+0.3*@uas+0.4*@tugas);
end;
--menghapus function fMhs
drop function fNA
--function fHitungBobot untuk menghitung bobot
alter function fHitungBobot (@bobot as numeric (18,2), @sks as numeric(18,0))
returns varchar(100)
as
begin
return (@bobot*@sks);
end;
--menghapus function fCetak
drop function fCetak
--function fHitungIPmk masih belum jelas sehingga tidak bisa dibuat
--function fHitungIPK untuk menghitung IPK
create function fHitungIPK (@jumlah_bobot as numeric (18,2),@jumlah_sks as numeric (18,2))
returns numeric
as
begin
return (@jumlah_bobot / @jumlah_sks);
end;
--menghapus function fCetak
drop function fHitungIPK
--deklarasi cursor cMhs (jangan lupa deallocatenya juga)
declare cMhs cursor for
select nim, nama from mahasiswa
--deklarasi variabel untuk menampung data mahasiswa
declare @nim as char (11),
@nama as varchar (100);
--deklarasi variabel untuk menyimpan data nilai akhir dan sks
declare @tugas as numeric(18,0),
@uts as numeric(18,0),
@uas as numeric(18,0),
@na as numeric (18,2),
@sks as numeric(18,0);
--deklarasi variabel tambahan untuk membantu proses penghitungan IPK
declare @bobot as numeric (18,2),
@jumlah_bobot as numeric (18,2),
@jumlah_sks as numeric (18,2),
@ipk as numeric (18,2)
--set nilai awal pada variabel tambahan
--set @jumlah = 0
set @jumlah_bobot = 0
set @jumlah_sks = 0
--open cursor cMhs
open cMhs
--transfer data mahasiswa ke dalam variabel nim dan nama
fetch next from cMhs into @nim, @nama
--cetak garis awal pembuka
print '------------------'
--looping data mahasiswa
while @@fetch_status = 0
begin
--deklarasi cursor cNilai (jangan lupa deallocatenya juga)
declare cNilai cursor for
select n.tugas, n.uts, n.uas, mk.sks
from mahasiswa as m, nilai as n, mk
where m.nim = n.nim and
n.kode_mk = mk.kode_mk and
n.nim = @nim
--open cursor cMhs
open cNilai
--transfer data nilai ke dalam variabel nilai akhir dan sks
fetch next from cNilai into @tugas, @uts, @uas, @sks
--looping data nilai akhir dan sks
while @@fetch_status = 0
begin
--hitung nilai akhir
set @na = dbo.fNA(@tugas, @uts, @uas);
-- cek nilai akhir untuk mendapatkan nilai bobot
if @na>=80 and @na<=100 --if @na between 80 and 100 juga bsa...
begin
set @bobot = 4;
end
else if @na>=75 and @na<=79
begin
set @bobot = 3.5;
end
else if @na>=65 and @na<=74
begin
set @bobot = 3;
end
else if @na>=60 and @na<=64
begin
set @bobot = 2.5;
end
else if @na>=55 and @na<=59
begin
set @bobot = 2;
end
else if @na>=44 and @na<=59
begin
set @bobot = 1;
end
else if @na>=0 and @na<=43
begin
set @bobot = 1;
end
--proses penghitungan IPK
set @jumlah_bobot = @jumlah_bobot + dbo.fHitungBobot(@bobot, @sks);
set @jumlah_sks = @jumlah_sks + @sks;
set @ipk = dbo.fHitungIPK(@jumlah_bobot,@jumlah_sks);
--transfer data nilai selanjutnya ke dalam variabel nilai akhir dan sks
fetch next from cNilai into @tugas, @uts, @uas, @sks
end
--close cursor cNilai
close cNilai
--buat deallocate untuk menghapus cursor cNilai
deallocate cNilai
--cetak data mahasiswa
print 'Nim '+@nim;
print 'Nama '+@nama;
print 'IPK '+convert (char,@ipk)
print '------------------'
set @ipk = 0
set @jumlah_bobot = 0
set @jumlah_sks = 0
--transfer data mahasiswa ke dalam variabel nim dan nama
fetch next from cMhs into @nim, @nama
end
--close cursor cMhs
close cMhs
0 komentar:
Posting Komentar