hint:
int fname
while { !fname.equalsIgnorecase ("Done"){
read fname (the rest of information)
read.next()
compute and print check
read fname agais so if it's done to exit
}
hint:
int fname
while { !fname.equalsIgnorecase ("Done"){
read fname (the rest of information)
read.next()
compute and print check
read fname agais so if it's done to exit
}
o edspace shpresoj t'kesh kohe ti hedhesh nje sy se dhe dy assignments me kan mbetur edhe mbaroj simestrin flm
I hodha mëndjen, dy sy e dy duar për më shumë se dy orë.
Më duket se do ta kalosh klasën shkëlqyeshëm por nuk ke mesuar gjë.
Të kam thënë që duhet të mundohesh vetë, të hedhësh kodin tënd në forum, dhe pastaj të të ndihmoj unë e të tjerët.
Kodi është më poshtë. E programova në Shqip që të ndihmojë edhe të tjerët që nuk dinë anglisht.
Kujdes gjatë përkthimit që të mos prishësh gjë.
- data është në formën dita/muaji/viti
- ceku gjithashtu
- kartela perdor q per qytetin (city) dhe s për sindikaten (union)
- për të mbyllur programin përdoret "mbaro" dhe jo "done"
- mos harro te ndryshoh emrat e ndryshoreve (variablave)
- mos harro te heqesh komentet
E kam tepruar me komentet që të qartësohet funksioni i çdo rreshti.
Ja disa shëmbuj për kartelat e punëtorëve dhe çeqet që ka nxjerrë programi:
ndërprerja "******* ******" bëhet nga forumi. Në program nuk shfaqet.
emri: Forumi
mbiermi: Shqiptar
nr. sigurimeve: nr123456
punon në qytet?: q (dmth po)
merr pjesë në sindikatë?: s (dmth po)
oret e punës: 40
pagesa në orë: 15.5
persona të varur (femijet, gruaja): 0
oret mbi orarin: 0
emri: MiciKodi:Fut kartelat e punetoreve. Shkruaj "Mbaro" per te mbyllur programin. Forumi Shqiptar nr123456 q s 40 15.5 0 0 ******************************************************************************* ** xyz corporation data:10/11/04 ** ** 999 john doe street ** ** manhattan, ny. 48197. ** ** ** ** Paguaj per: Forumi Shqiptar ** ** Numri i Sigurimit: nr123456 ** ** Shumen: 434 dollare dhe 31 cent ** ** ** ** Firmosur:_____________________ ** ** xyz Corp. President ** ** ** **---------------------------------------------------------------------------** ** ** ** Orari i Rregullt: 620.00 ** ** Mbi Orarin: 0.00 ** ** Paga Gros: 620.00 ** ** Taksa Federale: 86.80 ** ** Sigrm. Shoqerore: 32.24 ** ** Taksa e Qytetit: 24.80 ** ** Sindikata: 41.85 ** ** Paga Neto: 434.31 ** ** ** *******************************************************************************
mbiermi: Gansi
nr. sigurimeve: nr55551549
punon në qytet?: j (dmth jo)
merr pjesë në sindikatë?: j (dmth jo)
oret e punës: 40
pagesa në orë: 15.5
persona të varur (femijet, gruaja): 3
oret mbi orarin: 0
emri: FilanKodi:Mici Gansi nr55551549 j j 40 15.5 3 0 ******************************************************************************* ** xyz corporation data:10/11/04 ** ** 999 john doe street ** ** manhattan, ny. 48197. ** ** ** ** Paguaj per: Mici Gansi ** ** Numri i Sigurimit: nr55551549 ** ** Shumen: 506 dollare dhe 42 cent ** ** ** ** Firmosur:_____________________ ** ** xyz Corp. President ** ** ** **---------------------------------------------------------------------------** ** ** ** Orari i Rregullt: 620.00 ** ** Mbi Orarin: 0.00 ** ** Paga Gros: 620.00 ** ** Taksa Federale: 81.34 ** ** Sigrm. Shoqerore: 32.24 ** ** Taksa e Qytetit: 0.00 ** ** Sindikata: 0.00 ** ** Paga Neto: 506.42 ** ** ** *******************************************************************************
mbiermi: Fislleku
nr. sigurimeve: nr.abcd1234
punon në qytet?: q (dmth po)
merr pjesë në sindikatë?: j (dmth jo)
oret e punës: 37
pagesa në orë: 15.5
persona të varur (femijet, gruaja): 0
oret mbi orarin: 5
Kodi:Filan Fislleku nr.abcd1234 q j 37 15.5 0 5 ******************************************************************************* ** xyz corporation data:10/11/04 ** ** 999 john doe street ** ** manhattan, ny. 48197. ** ** ** ** Paguaj per: Filan Fislleku ** ** Numri i Sigurimit: nr.abcd1234 ** ** Shumen: 529 dollare dhe 72 cent ** ** ** ** Firmosur:_____________________ ** ** xyz Corp. President ** ** ** **---------------------------------------------------------------------------** ** ** ** Orari i Rregullt: 573.50 ** ** Mbi Orarin: 116.25 ** ** Paga Gros: 689.75 ** ** Taksa Federale: 96.57 ** ** Sigrm. Shoqerore: 35.87 ** ** Taksa e Qytetit: 27.59 ** ** Sindikata: 0.00 ** ** Paga Neto: 529.73 ** ** ** ******************************************************************************* Mbaro Press any key to continue...
Këtu po bashkangjis kodin:
Mos e kopjo nga forumi por shkarkoje nga skedari ZIP i bashkëngjitur se ka format më të mirë. Më njofto nqs ke paqartësi.
Kodi PHP:
//*****************************************************************************
// Cek.java
// Autori: Edi (edspace@comcast.net)
// Data: 11-10-2004
// Perpiluesi: JCreator, Java 2 SE 1.5.0
// Funksioni: Merr nje kartele pune, llogarit pagen dhe taksat, printon cekun
// Kartela:
// emri mbiemri nr.sigrm qytet sindikate oret paga_per_ore te_varurit mbi_orarin
// Filan Fislleku nr101564 q s 40 10.5 2 5
// Filan Fislleku nr101564 j j 38 10.5 0 0
//*****************************************************************************
import java.util.Scanner; //marr informacion nga perdoruesi
import java.util.Date; //per daten
import java.text.SimpleDateFormat; //klasa per formatimin e dates dd.mm.yy
import java.util.InputMismatchException; //gabim gjate marrjes se info
import java.util.NoSuchElementException; //gabim gjate marrjes se info
public class Cek
{
public static void main(String[] args)
{
//informacioni i kartes se punetorit
String emri = "";
String mbiemri = "";
String numri_sigurimit = "";
boolean punon_ne_qytet = false;
boolean ne_sindikate = false;
int oret_e_punes = 0;
int te_varurit = 0;
float paga_per_ore=0.0f;
float mbi_orarin = 0.0f;
Cek cek = new Cek(); //fillojme klasen
Scanner scan = new Scanner(System.in); //aktivizojme marrjen e informacionit
System.out.println("Fut kartelat e punetoreve. Shkruaj \"Mbaro\" per te mbyllur programin.");
emri = scan.next(); //kerkojme emrin
//per aq kohes sa emri nuk eshte "mbaro" ose "Mbaro"
while( !emri.equalsIgnoreCase("Mbaro") )
{
//*********** MERR KARTELEN *************
try
{
mbiemri = scan.next();
numri_sigurimit = scan.next();
punon_ne_qytet = scan.next().equals("q"); //true vetem nqs fut "q"
ne_sindikate = scan.next().equals("s"); //true vetem nqs fut "s"
oret_e_punes = scan.nextInt();
paga_per_ore = scan.nextFloat();
te_varurit = scan.nextInt();
mbi_orarin = scan.nextFloat();
}
catch( InputMismatchException e ) //nqs kapet ndonje gabim
{
System.out.println("Gabim ne formatin e karteles. (InputMismatchException)");
System.exit(0); //mbyll programin
}
catch( NoSuchElementException t ) //nqs kapet ndonje gabim
{
System.out.println("Gabim ne formatin e karteles. (NoSuchElementException)");
System.exit(0); //mbyll programin
}
//*********** BEJ LLOGARITE *************
float paga_gros = (oret_e_punes * paga_per_ore) + (mbi_orarin * 1.5f * paga_per_ore);
float taksa_federale = 0.14f * (paga_gros - 13 * te_varurit);
float sigurimet_shoqerore = paga_gros * 0.052f;
float taksa_qytetit = 0.0f;
if (punon_ne_qytet)
{
taksa_qytetit = paga_gros * 0.04f;
}
float taksa_sindikates = 0.0f;
if(ne_sindikate)
{
taksa_sindikates = paga_gros * 0.0675f;
}
float neto = paga_gros - taksa_federale - sigurimet_shoqerore - taksa_qytetit - taksa_sindikates;
int neto_dollare = (int)(neto * 100.00f) / 100; //merr shifrat e dollareve psh: 12.50 = 12
int neto_cente = (int)(neto * 100.00f) % 100; //merr shifrat e centeve psh: 12.50 = 50
String neto_dollare_str = new String().valueOf( neto_dollare ); //ktheji ne varg
String neto_cente_str = new String().valueOf( neto_cente ); //ktheji ne varg
//formo vargun: X dollare dhe Y cente
String shuma = neto_dollare_str + " dollare dhe " + neto_cente_str + " cent";
//merr daten e sotme dhe formatoje dita/muaji/viti
String datasot = new SimpleDateFormat("dd/MM/yy").format(new Date());
//fillo printimin e cekut
// %-47s formon nje kollone per (47) karaktere(s) dhe rreshton shkronjat ne te majte (-)
// %7.2f formon nje kollone per (7) numra me presje(f), me (.2) shifra pas presjes,
// reshtimi behet be anen e djathte vetvetiu (nuk ka -)
System.out.println("*******************************************************************************");
System.out.println("** xyz corporation data:" + datasot + " **");
System.out.println("** 999 john doe street **");
System.out.println("** manhattan, ny. 48197. **");
System.out.println("** **");
System.out.printf("** Paguaj per: %-47s **\n", emri + " " + mbiemri );
System.out.printf("** Numri i Sigurimit: %-47s **\n", numri_sigurimit );
System.out.printf("** Shumen: %-47s **\n", shuma );
System.out.println("** **");
System.out.println("** Firmosur:_____________________ **");
System.out.println("** xyz Corp. President **");
System.out.println("** **");
System.out.println("**---------------------------------------------------------------------------**");
System.out.println("** **");
System.out.printf("** Orari i Rregullt: %7.2f **\n", oret_e_punes * paga_per_ore );
System.out.printf("** Mbi Orarin: %7.2f **\n", mbi_orarin * 1.5f * paga_per_ore );
System.out.printf("** Paga Gros: %7.2f **\n", paga_gros );
System.out.printf("** Taksa Federale: %7.2f **\n", taksa_federale );
System.out.printf("** Sigrm. Shoqerore: %7.2f **\n", sigurimet_shoqerore );
System.out.printf("** Taksa e Qytetit: %7.2f **\n", taksa_qytetit );
System.out.printf("** Sindikata: %7.2f **\n", taksa_sindikates );
System.out.printf("** Paga Neto: %7.2f **\n", neto );
System.out.println("** **");
System.out.println("*******************************************************************************");
emri = scan.next(); //merr emrin tjeter
} //perserit kodin e while
} //mbaro main
} //mbaro klasen
Ndryshuar për herë të fundit nga edspace : 10-11-2004 më 13:48
Edi
Edspace me peqlen menyra se si i shkruan programet. Disa sugjerime:
Cek cek = new Cek(); nuk eshte e nevojshme ne kete program.
new SimpleDateFormat("dd/MM/yy") mund te deklarohet vetem nje here dhe te perdoret sa here te duash.
Por edhe te besh ashtu si ben ti nuk eshte praktike e keqe dhe parandalon problemin qe SimpleDataFormat nuk eshte thread safe.
Stili i rekomanduar ne Java per emrat e variablave eshte "taksaQytetit", jo taksa_qytetit.
Faleminderit për këshillat Ilir!
Ke të drejtë për new Cek() se nuk ka anëtarë privat. Kodin më lart e nisa nga një skedar tjetër që përdorte anëtarë privat (private members) dhe harrova ta hiqja.
Këtë punën e emërtimit nuk e kam kuptuar në Java. Për ndryshoret lejohen karakterët A-Za-z0-9_
Ka ndonjë dobi për përdorimin e abcABC apo është vetëm rregull estetike? Të njëjtën këshillë ma bënë edhe në një klasë tjetër ku kisha përdorur _ndryshore për anëtarët privat. Jam mësuar me abc_abc dhe _asdfadf në C++ dhe mendoj se është më i lexueshëm kodi.
Edi
Edspace problemin e emertimit duhet ta konsiderosh seriozisht.
Eshte e vertete qe emertimi eshte ceshtje stili, por stili i Javes eshte i percaktuar nga Sun, e njejta kompani qe ka krijuar Javen, prandaj duhet ndjekur. Nuk ka asnje programues serioz qe shkruan ne Java dhe perdor stil tjeter.
Nese ti do jesh ne nje kompani me programues te tjere, ti duhet te perdoresh stilin qe perdorin ata, perndryshe konfuzioni eshte teper i larte.
Gjithashtu te pakten ne nje rast (mund te kete edhe te tjere) stili eshte i detyrueshem.
E kam fjalen per getters/setters.
Nese ti ke nje variable taksaQyteti, funksionet perkatese duhet te jene
getTaksaQyteti() dhe setTaksaQyteti.
Kjo eshte e detyrueshme se Introspection i cili eshte mjaft i rendesishem per Java Beans do qe emrat te jene keshtu. Nese je kurioz lexo klasen Introspector.java sepse eshte shume instruktive.
Tani une pashe qe ti edhe emrat e metodave i ke me _. Nese ti i ve emrin metodes get_taksa_qyteti, atehere variabli duhet te quhet _taksa_qyteti. Gje jo fort e pelqyeshme apo jo?
Ndersa nese thua getTaksa_qyteti ti theve marreveshjen qe ke bere vete.
Mund te kete edhe implikime te tjera por kaq me vine ne mend ne kete moment.
Ndersa per problemin e C++, C++ nuk ka ndonje stil te fiksuar si Java. Shume kompani kane stilin e tyre. Shpesh stili varet nga platforma ne te cilen punohet. Une ne kete moment po shkruaj nje program ne Windows (Visual C++) dhe stili i rekomanduar eshte:
Emrat e variablave: taksaQyteti.
Emrat e anetareve te nje klase: m_taksaQyteti
Emrat e funksioneve: GetTaksaQyteti
Verej qe funksioni fillon me germe te madhe ketu.
Ne fakt Microsoft sugjeron nje stil shume me te nderlikuar per emrat e variablave (sugjerojne qe germat e para te variablit te tregojne tipin e tij), por une nuk e ndjek.
Gjeta faqen e Java-s për rregullat e drejtshkrimit dhe e lexova të gjithën.
http://java.sun.com/docs/codeconv/ht...nvTOC.doc.html
E di fort mirë arsyen pse duhet ndjekur një stil i caktuar, por më bënë përshtypje këto të Javas se mqns më kritikuan disa njerëz, mendova se do ishin rregulla të pathyeshme. Të pyeta ty për të mësuar nqs Sun kishte ndonjë arsye më të fortë sesa thjesht stili ose komunikimi midis programuesve.
Në faqen më lart, Sun thotë që është mirë të përdoren këto rregulla por nuk i ka me detyrim. Detyrimet e IDE janë gjithashtu çështje preferencash se jo të gjithë përdorin JavaBean.
Shumica e programeve që kam shkruar deri tani kanë qënë për shkollë ose për nevoja personale dhe nuk më është dashur të punoj në grupe të mëdha që ti kushtoj rëndësi stilit, prandaj kam përdorur gjithnjë stilin që më duket mua më i lexueshëm.
Nga librat që kam lexuar, për C++ dhe Java, e shoh që edhe vetë autorët shpikin stilet e tyre të të shkruarit. Javën e parë lexova në një libër që kllapat e një blloku të shkruheshin në rresht më vete:
if (kjo)
{
//bëj këtë
}
dhe thashë ta provoja njëherë këtë stil në kodin që shkruajta më lart. Më parë kam përdorur gjithnjë stilin që rekomandon edhe Java.
if (kjo) {
//bëj këte
}
Arsyeja e autorit për përdorimin e stilit të parë ishte se ky i dyti është përdorur nga programuesit e vjetër në kohën kur programet shkruheshin në terminale dhe kur donin të kursenin letrën
Faleminderit për sqarimin!
Edi
Eds Flm per ndihmen qe po me jep sinqerishte e vleresoj shume mundimin qe po merresh me mua. Edhe ty Ilir te falenderoj qe po e lexon temen edhe na keshillon per mire.
Edspace programi eshte fantastik punon ne rregull por edhe sic edi ti vete qe une jam fillestar ne java dhe akoma nuk e kemi mesuar: try dhe catch prandaj nqs mesuesi e kontrollon kete cod ai do me pyesi edhe une nuk di ti pergjigjem. te lutem ty ose ndonje anetari tjeter qe eshte specialist ta modifikoje ate catch dhe try me ndonje if else statement ose dicka tjeter qe te jete me e kuptushme per mua duke patur parasysh se une jam akoma ne chapter 4 ne java. Sapo kemi mbaruar if, while, do while, for, dhe switch statements dhe duhet te kini parasysh edhe njohurite e mia ne java sepse edhe programi nuk duhet te jete i ketij niveli te larte. Edhe nje here faleminderit shume sinqerisht
ps. SHpresoj te mos bezdish shume se edhe 2 assignments me kan mbetur deri ne fund te simestrit
Dashuria mbi te gjitha
Nuk bezdisem dhe në fakt i bëj me qejf programet se dhe vetë jam i ri në Java dhe dua ta përvetësoj më mirë.
Try-Catch (provo-kap) përdoret për të kontrolluar nqs ndodhin gabime gjatë ekzekutimit të programit dhe për ti thënë kompjuterit çfarë të bëjë kur të kapi gabimet.
Nqs nuk përdorim try-catch dhe ndodhin gabime, Java e mbyll programin dhe lajmëron për gabimet. Kjo mund të jetë e pranueshme për shumicën e programeve por nuk lejohet për programet me rëndësi që duhet të punojnë gjatë gjithë kohës. Programe të tilla mund të jenë në spitale, aeroporte, ushtri, polici, pikat e emergjencës etj. Në raste të tilla programi nuk mund të mbyllet papritur por duhet të bëjë diçka ose të mundohet të riparojë gabimin.
psh: Nqs ndodh një gabim në një program që shpërndan energjinë elektrike, programi duhet të aktivizojë ndonjë alarm ose ta kaloj punën në një program tjetër rezervë që mos ti lërë njerëzit pa drita.
Në programin tënd, unë përdor catch për të kapur gabimet gjatë marrjes së kartelës së punëtorit. Kur ndodhin gabime, e njoftoj përdoruesin për gabimet dhe e mbyll programin. Po t'ja lija në dorë Java, kushedi se çfarë mund të ndodhë; mund të printohet çek me shifër të gabuar; mund të dalë ndonjë gabim i komplikuar që përdoruesi nuk do ta kuptojë, etj, etj.
Struktura e try është e tillë:
Për çdo gabim të mundshëm mund të vendosësh nga një kapje (catch) në vazhdim.Kodi:try{ //bëj x, y, z } catch( gabimi 1 ){ //nqs ndodh gabimi 1 gjatë ekzekutimi të x, y, z // bëj a, b, c } catch( gabimi 2 ){ //nqs ndodh gabimi 2 gjatë ekzekutimi të x, y, z // bëj c, d, e }
Konkretish në programin më lart ti duhet të fshish këto rreshta për të eliminuar try-catch.
Kodi PHP:
import java.util.InputMismatchException; //gabim gjate marrjes se info
import java.util.NoSuchElementException; //gabim gjate marrjes se info
try//fshije
{ //fshije
//mos i fshi rreshtat brënda kllapave
} //fshije që këtu e poshtë
catch( InputMismatchException e ) //nqs kapet ndonje gabim
{
System.out.println("Gabim ne formatin e karteles. (InputMismatchException)");
System.exit(0); //mbyll programin
}
catch( NoSuchElementException t ) //nqs kapet ndonje gabim
{
System.out.println("Gabim ne formatin e karteles. (NoSuchElementException)");
System.exit(0); //mbyll programin
}
Kur të mbarosh së fshiri try-catch, kodi për marrjen e kartelës duhet të duket kështu.
Kodi PHP:
while( !emri.equalsIgnoreCase("Mbaro") )
{
//*********** MERR KARTELEN *************
mbiemri = scan.next();
numri_sigurimit = scan.next();
punon_ne_qytet = scan.next().equals("q"); //true vetem nqs fut "q"
ne_sindikate = scan.next().equals("s"); //true vetem nqs fut "s"
oret_e_punes = scan.nextInt();
paga_per_ore = scan.nextFloat();
te_varurit = scan.nextInt();
mbi_orarin = scan.nextFloat();
//*********** BEJ LLOGARITE *************
Edi
Edspace e rregullova sipas udhezuesit qe me tregove dmth i vshiva try edhe catch sepse ato akoma nuk e kishim mesuar. Tani kam problem me keto:
String neto_dollare_str = new String().valueOf( neto_dollare ); //ktheji ne varg
String neto_cente_str = new String().valueOf( neto_cente );
sepse akoma nuk e kemi mesuar keto qe ti kthejme dhe nuk dua qe mesuesi te me pyese po ti kur i mesove keto dhe do e kuptoje qe dikush tjeter po me ndihmon. Atere po kerkoj nqs ke mundesi ti fshish ato lines ne programin e meposhtem pa patur ndonje ndikim ne rezultatet. Thx in advance
Ndryshuar për herë të fundit nga edspace : 16-11-2004 më 21:37
Dashuria mbi te gjitha
Krijoni Kontakt