Advertisement
Zizalik

Praks7Rasmmus

Jan 4th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.57 KB | None | 0 0
  1. /*
  2. * To change this license header, choose License Headers in Project Properties.
  3. * To change this template file, choose Tools | Templates
  4. * and open the template in the editor.
  5. */
  6. package matti_p7;
  7.  
  8. import java.io.*;
  9. import java.text.SimpleDateFormat;
  10. import java.util.Collections;
  11. import java.util.Date;
  12. import java.util.HashMap;
  13. import java.util.LinkedHashMap;
  14. import java.util.LinkedList;
  15. import java.util.List;
  16. import java.util.Map;
  17. import java.util.Scanner;
  18.  
  19.  
  20. /**
  21. *
  22. * @author t166157
  23. */
  24. public class Matti_P7 {
  25. public static Map<String,Double> andmed = new HashMap<>();//tudengikoodi ja keskmise hinde hashmap
  26. public static Map<String,Double> sorteeritud = new HashMap<>();//sorteeritud hinde järgi sama hashmap
  27. public static double min=5, max=0;//min ja max leidmiseks deklareerin juba need vastupidiste väärtustega
  28. /**
  29. * @param args the command line arguments
  30. * @throws java.io.IOException
  31. */
  32. public static void main(String[] args) throws IOException {
  33. loemerida();//txt failist loetakse andmed hashmapi
  34. Scanner sc = new Scanner(System.in);
  35. int valik;//menüü valik
  36.  
  37. do{
  38. System.out.println("1. Min. hinne ja nimekiri");
  39. System.out.println("2. Max. hinne ja nimekiri");
  40. System.out.println("3. Tudengite andmed aasta kaupa");
  41. System.out.println("4. Tudengite koodid, kelle hinded olid sisestatud vahemikus");
  42. System.out.println("5. Välju");
  43. valik=sc.nextInt();//menüü valik
  44. kirjutamefaili(valik);//meetod, mis registreerib kasutaja valitud menüü kellaajaga
  45. if(valik==5){//et pärast valikut jõuaks registreerida kasutaja valiku andmed2.txt faili
  46. valik=6;//kui valik võrdub 6ga siis do tsükkel lõppeb
  47. }
  48. switch(valik){//switch menüü järgi
  49. //min
  50. case 1: {//valik 1
  51. minjamax();//miinimum ja maksimum leidmine
  52.  
  53. System.out.println("Min hinne: "+min+"\nTudengid:");//miinimum hinne leiti ja prinditakse koos tekstiga
  54. for (String name: andmed.keySet()){//tsükkel kestab nii palju kui palju on mapis paare
  55. if(andmed.get(name)==min){//kui leiti miinimumhinne, siis prinditakse tudengikood
  56. System.out.println(name);
  57. }
  58. }
  59. }break;
  60. case 2: {//valik 2
  61. //max
  62. minjamax();//miinimum ja maksimum leidmine
  63. System.out.println("Max hinne: "+max+"\nTudengid:");//maksimum hinne leiti ja prinditakse koos tekstiga
  64. for (String name: andmed.keySet()){//tsükkel kestab nii palju kui palju on mapis paare
  65. if(andmed.get(name)==max){//kui leiti maksimumhinne, siis prinditakse tudengikood
  66. System.out.println(name);
  67. }
  68. }
  69. }break;
  70. case 3: {//valik 3
  71. //sisestatud sisseastumise aasta tudengite andmed
  72. System.out.println("Sisestage aasta");//kasutaja peab sisestama aasta
  73. String aasta = sc.next();//sisestati näiteks 2016
  74. keskminehinne(aasta);//meetod prindib kõik andmed, kelle tudengikood algab 16'ga
  75. }break;
  76. case 4: {
  77. //kuva tudengite koodid ja hinded, kelle oppeedukus oli vahemikus ..kuni..
  78. System.out.println("Alates..");
  79. int alates=sc.nextInt();//kasutaja sisestab alg numbri
  80. System.out.println("kuni..");
  81. int kuni=sc.nextInt();//kasutaja sisestab lõpp numbri
  82. kuvavahemikus(alates,kuni);//meetod tagastab andmed, kelle hinded olid vahemikus näiteks 2 kuni 4
  83. }break;
  84.  
  85. }
  86. } while(valik!=6);//kui valik = 6, siis do tsükkel lõppeb
  87. }
  88. public static void loemerida() throws FileNotFoundException, IOException{//meetod, mis loob andmed.txt hashmapiks
  89. File f=new File("C:\\Users\\Karl\\Documents\\NetBeansProjects\\Matti_P7\\src\\matti_p7\\andmed.txt");//andmed.txt asukoht ja faili f deklareerimine
  90. FileReader fr=new FileReader(f);//faili lugemise klassi deklareerimine
  91. BufferedReader reader=new BufferedReader(fr);//loeb tekstifaile, mille sisuks on characters
  92. String failirida;
  93.  
  94. while((failirida=reader.readLine())!=null)//tsükkel kestab kuni failis on ridu
  95. {//failirida saab omale rea väärtuse stringina
  96.  
  97. String[]rida=failirida.split(" ");//rida massiivi pannakse andmed ja kus on tühik, sealt eraldadakse järgmine string
  98.  
  99. if(rida[0].length()>0)//kui real oli mingid väärtused,siis
  100. andmed.put(rida[0], new Double(rida[1]));//sisestatakse tudengikood ja keskmine hinne hashmapi
  101. }
  102.  
  103. }
  104. public static void minjamax(){//min ja max leidmine
  105.  
  106. for (String name: andmed.keySet()){//for tsükkel kestab kuni on hashmapis paare
  107.  
  108. String key =name;//võtme väärtuse deklareerimine
  109. Double value = andmed.get(name);//hinde deklareerimine
  110. if(value<min)min=value;//kui keskmine hinne on väiksem min väärtusest siis min saab uue väärtuse
  111. if(value>max)max=value;//kui keskmine hinne on suurem max väärtusest siis max saab uue väärtuse
  112. }
  113. }
  114. public static void keskminehinne(String x){//keskmise hinde leidmine sama aasta tudengite järgi
  115. double keskmine=0;//keskmine saab double väärtuse, sest keskmiseid hinded on enamus komaga
  116. int mitmega=0;//loendab mitu tudengit sellel aastal õppis
  117. System.out.printf(x + ". aasta tudengite nimekiri:");//x ehk sisestatud aasta
  118. for (String name: andmed.keySet()){//for tsükkel kestab kuni on hashmapis paare
  119.  
  120. String key =name;//võtme väärtuse deklareerimine
  121. Double value = andmed.get(name); //hinde deklareerimine
  122. if(key.charAt(1)==x.charAt(2)&&key.charAt(2)==x.charAt(3)){//kui tudengi koodi teine ja kolmas sümbol võrdub
  123. //sisestatud aasta kolmanda ja neljanda sümboliga siis
  124. System.out.printf("\t"+key);//tudengite nimekirja printimine
  125. keskmine+=value;//x aasta tudengite keskmiste hinnete liitmine
  126. mitmega++;//tudengite lugemine
  127. }
  128.  
  129. }
  130. keskmine=keskmine/mitmega;//hinnete summa jagatakse õpilaste arvuga ja leitakse keskmine
  131. System.out.println();
  132. System.out.println("Keskmine hinne "+x+". aasta tudengite seas on "+keskmine);//teksti välja printimine leitud väärtustega
  133. }
  134. public static void kuvavahemikus(int from, int to){//tudengi andmete printimine kelle hinne jääb sisestatud vahemikku
  135.  
  136. for (String name: andmed.keySet()){//tsükkel kestab nii kaua kui palju on hashmapis paare
  137.  
  138. String key = name;
  139. Double value = andmed.get(name);
  140. //siin meetodis tehakse hashmap, kuhu pannakse ainult tudengid, kelle hinne jääb sisestatud vahemikku
  141. //seejärel hakatakse seda sorteerima teises meetodis ja prinditakse välja
  142. if(value>=from&&value<=to){//kui hinne jääb sisestatud vahemikku siis lisatakse see sorteeritud hashmapi
  143.  
  144. sorteeritud.put(key, value);
  145. }
  146. }
  147. System.out.println(sortByValue(sorteeritud));//prinditakse välja sorteeritud hashmap
  148. }
  149. public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> unsortMap) {//staatiline meetod, mille muutujaks on map ja tagastab uuendatud mapi
  150. //See meetod on kopeeritud internetist järgnevalt lingilt
  151. //https://www.mkyong.com/java/how-to-sort-a-map-in-java/
  152. List<Map.Entry<K, V>> list;//list ehk järjestus, mis on üks kollektsioonidest
  153. list = new LinkedList<>(unsortMap.entrySet());//unsortmap ehk "sorteeritud" hashmap, list deklareerimine
  154. //collections.sort sorteerib alfabeetilises või numbrilises järjekorras elemente
  155. Collections.sort(list, (Map.Entry<K, V> o1, Map.Entry<K, V> o2) -> (o1.getValue()).compareTo(o2.getValue()));
  156.  
  157. Map<K, V> result = new LinkedHashMap<>();//result deklareerimine hashmapiks
  158. for (Map.Entry<K, V> entry : list) {//tsükkel kestab nii palju kui on paare list'is
  159. result.put(entry.getKey(), entry.getValue());//result mapi väärtuste lisamine
  160. }
  161.  
  162. return result;//tagastatakse linkedhashmap
  163.  
  164. }
  165. public static void kirjutamefaili(int menu) throws IOException{//meetod mis loob vajadusel uue txt faili
  166. //ja sisestab sinna kasutaja valikud aegadega
  167. File f=new File("C:\\Users\\Karl\\Documents\\NetBeansProjects\\Matti_P7\\src\\matti_p7\\andmed2.txt");//file f loetakse antud aadressilt
  168. FileWriter fwr=new FileWriter(f,true);//kui faili kirjutatakse siis ei kirjutata faili üle vaid lisatakse teksti juurde
  169.  
  170. if(!f.exists()){ //kui faili ei ole olemas siis luuakse eelnevalt toodud asukohale
  171. f.createNewFile();
  172. }
  173. Date d=new Date();//d saab hetke aja väärtuse
  174. SimpleDateFormat format1 = new SimpleDateFormat("dd.MM.yyyy hh:mm");//formaat, kuidas aeg txt faili sisestatakse
  175. fwr.write(format1.format(d)+" "+menu+"\n");//teksti sisestatakse formaadiga aeg ja sisestatud menüü number
  176. fwr.flush();//ajutises mälus käskude täitmine ja mälu tühjendamine
  177. }
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement