Java aplikacija su meniu
|Sudėtinga Java aplikacija su tekstinio failo nuskaitymu, meniu punktais ir 6 skirtingomis veikimo funkcijomis.
Duomenų failo turinys
DARE Gorrilaz Electronic 324
White_Days Gorrilaz Electronic 329
White_flag Dido Pop 322
Paris Dido Pop 204
Angels_fly Reamonn Pop_Rock 276
Jeanny Reamonn Pop_Rock 266
Seven_Nation_Army White_Stripes Rock 232
Blue_Orchid White_Stripes Rock 168
Hypnotize White_Stripes Rock 108
Užduotis
- Duomenų įvedimas: pradiniai duomenys įvedami iš tekstinio failo (ne mažiau 8 įrašų).
- Veiksmai:
- įterpti naują įrašą į nurodytą vietą;
- pašalinti įrašą pagal nurodytą eilės numerį.
- Pradiniai duomenys ir rezultatai parodomi ekrane ir išsaugomi tekstiniame faile lentelės forma.
- Duomenys ir rezultatai saugomi masyvuose (kolekcijų nenaudoti).
- Programos rašomos Java programavimo kalba.
- Sąrašą sudaro dainos aprašo elementai: pavadinimas, autorius, stilius, trukmė. Surasti visų nurodyto autoriaus dainų bendrą trukmę.
Pirma dalis
Programoje sukuriamas meniu, kuris bus paleidžiamas po kiekvieno atlikto veiksmo su programa.
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package grotuvasmenu; import java.io.*; import java.util.StringTokenizer; class Grotuvas { private String pavadinimas, autorius, stilius; private int trukme; Grotuvas() { } Grotuvas(String pav, String aut, String stil, int truk) { pavadinimas = pav; autorius = aut; stilius = stil; trukme = truk; } public String gautiPavadinima() { return pavadinimas; } public String gautiAutorius() { return autorius; } public String gautiStilius() { return stilius; } public int gautiTrukme() { return trukme; } } public class GrotuvasMenu { /** * @param args the command line arguments */ public static void main(String[] args) { int nr = 0; //meniu veiksmo numeris BufferedReader in = new BufferedReader (new InputStreamReader (System.in)); //skaitymo iš komandinės eilutės konstruktorius while (true){ meniu(); try { nr = Integer.parseInt(in.readLine()); } catch(IOException e){System.out.println("Ivedimo klaida!");} catch(NumberFormatException e){System.out.println("Ivedete ne sveika skaiciu!");} switch (nr) { case 1://skaitymas is failo System.out.println("Pasirinkote pirma meniu punkta!"); System.out.println(); break; case 2://rezultatu isvedimas i faila break; case 3://naujo iraso iterpimas break; case 4://iraso salinimas break; case 5://paieskos veiksmai break; case 6://pabaiga System.out.println("Programa baigė darbą."); System.exit(0); break; default://veiksmai kitais atvejais System.out.println("Nėra tokio menu punkto. Pakartokite!"); break; } } } public static void meniu () { System.out.println(); System.out.println("_____________________________"); System.out.println("Programos Grotuvas veiksmų meniu"); System.out.println(); System.out.println("1. Skaityti duomenis."); System.out.println("2. Spausdinti i faila."); System.out.println("3. Įterpti."); System.out.println("4. Ištrinti."); System.out.println("5. Surasti."); System.out.println("6. Baigti darbą."); System.out.println(); System.out.println("Iveskite meniu nr.:"); } }
Antra dalis
Sukuriamas failo skaitymo mechanizmas ir tuo pačiu duomenų išvedimas į ekraną su jų gražiu formatavimu.
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package grotuvasmenu; import java.io.*; import java.util.StringTokenizer; class Grotuvas { private String pavadinimas, autorius, stilius; private int trukme; Grotuvas() { } Grotuvas(String pav, String aut, String stil, int truk) { pavadinimas = pav; autorius = aut; stilius = stil; trukme = truk; } public String gautiPavadinima() { return pavadinimas; } public String gautiAutorius() { return autorius; } public String gautiStilius() { return stilius; } public int gautiTrukme() { return trukme; } } class Gyvunas { private String pavadinimas; private int amzius; private double svoris; private String k_salis; Gyvunas() {} Gyvunas (String pav, int amzius, double svoris, String salis) { pavadinimas = pav; this.amzius = amzius; this.svoris = svoris; k_salis = salis; } public String gautiPav () { return pavadinimas; } public int gautiAmziu () { return amzius; } public double gautiSvori () { return svoris; } public String gautiSali () { return k_salis; } } public class GrotuvasMenu { /** * @param args the command line arguments */ public static void main(String[] args) { int nr = 0; //meniu veiksmo numeris int n = 0; //masyvo A elementu sk. Grotuvas A[] = null; BufferedReader in = new BufferedReader (new InputStreamReader (System.in)); //skaitymo iš komandinės eilutės konstruktorius File fd = new File ("grotuvas_duom.txt"); //duomenu failas while (true){ meniu(); try { nr = Integer.parseInt(in.readLine()); } catch(IOException e){System.out.println("Ivedimo klaida!");} catch(NumberFormatException e){System.out.println("Ivedete ne sveika skaiciu!");} switch (nr) { case 1://skaitymas is failo n = skaiciuotiEilutes(fd); System.out.println(); System.out.println("Skaitome duomenis iš failo..."); System.out.println(); System.out.println("Nuskaitytos: " + n + " eilutės."); System.out.println(); A = new Grotuvas[n]; A = skaityti_sar(fd, n); System.out.println("Duomenys nuskaityti."); System.out.println(); spausdinti_sar_ekrane(A, n); break; case 2://rezultatu isvedimas i faila break; case 3://naujo iraso iterpimas break; case 4://iraso salinimas break; case 5://paieskos veiksmai break; case 6://pabaiga System.out.println("Programa baigė darbą."); System.exit(0); break; default://veiksmai kitais atvejais System.out.println("Nėra tokio menu punkto. Pakartokite!"); break; } } } //metodas suskaiciuoja kiek faile yra irasu eiluciu public static int skaiciuotiEilutes (File file) { int sk = 0; try { BufferedReader file_in = new BufferedReader (new FileReader (file)); while (true){ if ((file_in.readLine()) == null){ file_in.close(); return sk;} sk++; } } catch (IOException e) {System.out.println("Skaitymo is failo klaida");} return sk; } //metodas skaito duomenis is failo public static Grotuvas[] skaityti_sar (File file, int n){ Grotuvas A[] = new Grotuvas [n]; //sukuriamas masyvo objektas String eilute; // kintamasis 1 eilutei skaityti int sk = 0; //rasymo i masyva skaitliukas String pav, autorius, stilius; int trukme; try { BufferedReader file_in = new BufferedReader (new FileReader (file)); while (true){ if ((eilute = file_in.readLine()) == null) break; StringTokenizer st = new StringTokenizer(eilute); pav = st.nextToken(); autorius = st.nextToken(); stilius = st.nextToken(); trukme = Integer.parseInt(st.nextToken()); A[sk]= new Grotuvas (pav, autorius, stilius, trukme); sk ++; if (sk==n) break; } } catch (IOException e) {System.out.println("Ivedimo klaida");} catch (IndexOutOfBoundsException e) {System.out.println("Masyvo ribu klaida");} return A; } public static void spausdinti_sar_ekrane ( Grotuvas [] A, int n) { if (n > 0) { spausdinti_antraste_ekrane (); System.out.println("*************************************************************"); for (int i=0; i<n; i++) { System.out.println("* " + prailginti((i+1)+"", 3) +" * "+prailginti(A[i].gautiPavadinima(),17)+ " * "+ prailginti(A[i].gautiAutorius(),14)+ " * " + prailginti(A[i].gautiStilius()+"", 10) + " * " + prailginti(A[i].gautiTrukme()+"", 4) + " * "); } System.out.println("*************************************************************"); } else System.out.println("Masyvas tuscias!"); } public static void spausdinti_antraste_ekrane (){ System.out.println("*************************************************************"); System.out.println("* Nr. * Pavadinimas * Autorius * Stilius * Trukmė *"); } public static String prailginti (String reiksme, int ilgis){ for (int i=reiksme.length(); i<ilgis; i++) reiksme += " "; return reiksme; } public static void meniu () { System.out.println(); System.out.println("_____________________________"); System.out.println("Programos Grotuvas veiksmų meniu"); System.out.println(); System.out.println("1. Skaityti duomenis."); System.out.println("2. Spausdinti i faila."); System.out.println("3. Įterpti."); System.out.println("4. Ištrinti."); System.out.println("5. Surasti."); System.out.println("6. Baigti darbą."); System.out.println(); System.out.println("Iveskite meniu nr.:"); } }
Trečia dalis
Pridedame dar vieną funkciją, kai jau įvykdome pirmą programos funkciją ir duomenys jau yra nuskaityti ir jie jau masyve, tuomet galime juos spausdinti į failą. Meniu punktas numeris 2.
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package grotuvasmenu; import java.io.*; import java.util.StringTokenizer; class Grotuvas { private String pavadinimas, autorius, stilius; private int trukme; Grotuvas() { } Grotuvas(String pav, String aut, String stil, int truk) { pavadinimas = pav; autorius = aut; stilius = stil; trukme = truk; } public String gautiPavadinima() { return pavadinimas; } public String gautiAutorius() { return autorius; } public String gautiStilius() { return stilius; } public int gautiTrukme() { return trukme; } } class Gyvunas { private String pavadinimas; private int amzius; private double svoris; private String k_salis; Gyvunas() {} Gyvunas (String pav, int amzius, double svoris, String salis) { pavadinimas = pav; this.amzius = amzius; this.svoris = svoris; k_salis = salis; } public String gautiPav () { return pavadinimas; } public int gautiAmziu () { return amzius; } public double gautiSvori () { return svoris; } public String gautiSali () { return k_salis; } } public class GrotuvasMenu { /** * @param args the command line arguments */ public static void main(String[] args) { int nr = 0; //meniu veiksmo numeris int n = 0; //masyvo A elementu sk. Grotuvas A[] = null; Grotuvas B[] = null; BufferedReader in = new BufferedReader (new InputStreamReader (System.in)); //skaitymo iš komandinės eilutės konstruktorius File fd = new File ("grotuvas_duom.txt"); //duomenu failas File fr = new File (".", "grotuvas_rez.txt"); //rezultatu failas PrintWriter rasyti = null; //Duomenų išvedimo failo kintamasis //Atidarome rezultatu faila try { rasyti = new PrintWriter (new FileWriter (fr)); } catch (IOException e) {System.out.println("Nepavyko sukurti failo.");} while (true){ meniu(); try { nr = Integer.parseInt(in.readLine()); } catch(IOException e){System.out.println("Ivedimo klaida!");} catch(NumberFormatException e){System.out.println("Ivedete ne sveika skaiciu!");} switch (nr) { case 1://skaitymas is failo n = skaiciuotiEilutes(fd); System.out.println(); System.out.println("Skaitome duomenis iš failo..."); System.out.println(); System.out.println("Nuskaitytos: " + n + " eilutės."); System.out.println(); A = new Grotuvas[n]; A = skaityti_sar(fd, n); System.out.println("Duomenys nuskaityti."); System.out.println(); spausdinti_sar_ekrane(A, n); break; case 2://rezultatu isvedimas i faila spausdinti_sar_faile(rasyti, A, n); System.out.println(); System.out.println("Įrašome duomenis į failą..."); System.out.println(); System.out.println("Duomenys sėkmingai įrašyti į failą: " + fr + "."); System.out.println(); break; case 3://naujo iraso iterpimas break; case 4://iraso salinimas break; case 5://paieskos veiksmai break; case 6://pabaiga System.out.println("Programa baigė darbą."); System.exit(0); break; default://veiksmai kitais atvejais System.out.println("Nėra tokio menu punkto. Pakartokite!"); break; } } } //metodas suskaiciuoja kiek faile yra irasu eiluciu public static int skaiciuotiEilutes (File file) { int sk = 0; try { BufferedReader file_in = new BufferedReader (new FileReader (file)); while (true){ if ((file_in.readLine()) == null){ file_in.close(); return sk;} sk++; } } catch (IOException e) {System.out.println("Skaitymo is failo klaida");} return sk; } //metodas skaito duomenis is failo public static Grotuvas[] skaityti_sar (File file, int n){ Grotuvas A[] = new Grotuvas [n]; //sukuriamas masyvo objektas String eilute; // kintamasis 1 eilutei skaityti int sk = 0; //rasymo i masyva skaitliukas String pav, autorius, stilius; int trukme; try { BufferedReader file_in = new BufferedReader (new FileReader (file)); while (true){ if ((eilute = file_in.readLine()) == null) break; StringTokenizer st = new StringTokenizer(eilute); pav = st.nextToken(); autorius = st.nextToken(); stilius = st.nextToken(); trukme = Integer.parseInt(st.nextToken()); A[sk]= new Grotuvas (pav, autorius, stilius, trukme); sk ++; if (sk==n) break; } } catch (IOException e) {System.out.println("Ivedimo klaida");} catch (IndexOutOfBoundsException e) {System.out.println("Masyvo ribu klaida");} return A; } public static void spausdinti_sar_ekrane ( Grotuvas [] A, int n) { if (n > 0) { spausdinti_antraste_ekrane (); System.out.println("******************************************************************"); for (int i=0; i<n; i++) { System.out.println("* " + prailginti((i+1)+"", 3) +" * "+prailginti(A[i].gautiPavadinima(),17)+ " * "+ prailginti(A[i].gautiAutorius(),14)+ " * " + prailginti(A[i].gautiStilius()+"", 10) + " * " + prailginti(A[i].gautiTrukme()+"", 4) + " * "); } System.out.println("******************************************************************"); } else System.out.println("Masyvas tuscias!"); } public static void spausdinti_antraste_ekrane (){ System.out.println("******************************************************************"); System.out.println("* Nr. * Pavadinimas * Autorius * Stilius * Trukmė *"); } public static String prailginti (String reiksme, int ilgis){ for (int i=reiksme.length(); i<ilgis; i++) reiksme += " "; return reiksme; } public static void spausdinti_sar_faile (PrintWriter rasyti, Grotuvas [] A, int n) { if (n > 0) { spausdinti_antraste_faile (rasyti); rasyti.println("******************************************************************"); for (int i=0; i<n; i++) { rasyti.println("* " + prailginti((i+1)+"", 3) +" * "+prailginti(A[i].gautiPavadinima(),17)+ " * "+ prailginti(A[i].gautiAutorius(),14)+ " * " + prailginti(A[i].gautiStilius()+"", 10) + " * " + prailginti(A[i].gautiTrukme()+"", 4) + " * "); } rasyti.println("******************************************************************"); } else rasyti.println("Masyvas tuscias!"); rasyti.close(); // klasei PrintWriter IOException nemeta } public static void spausdinti_antraste_faile (PrintWriter rasyti){ rasyti.println("******************************************************************"); rasyti.println("* Nr. * Pavadinimas * Autorius * Stilius * Trukmė *"); } public static void meniu () { System.out.println(); System.out.println("_____________________________"); System.out.println("Programos Grotuvas veiksmų meniu"); System.out.println(); System.out.println("1. Skaityti duomenis."); System.out.println("2. Spausdinti i faila."); System.out.println("3. Įterpti."); System.out.println("4. Ištrinti."); System.out.println("5. Surasti."); System.out.println("6. Baigti darbą."); System.out.println(); System.out.println("Iveskite meniu nr.:"); } }
Ketvirta dalis
Dabar pridėsime du metodus. Pirmas įterps naują elementą į masyvą, o antras pašalins vieną eilutę iš masyvo. Meniu punktas trys ir keturi.
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package grotuvasmenu; import java.io.*; import java.util.StringTokenizer; class Grotuvas { private String pavadinimas, autorius, stilius; private int trukme; Grotuvas() { } Grotuvas(String pav, String aut, String stil, int truk) { pavadinimas = pav; autorius = aut; stilius = stil; trukme = truk; } public String gautiPavadinima() { return pavadinimas; } public String gautiAutorius() { return autorius; } public String gautiStilius() { return stilius; } public int gautiTrukme() { return trukme; } } public class GrotuvasMenu { /** * @param args the command line arguments */ public static void main(String[] args) { int nr = 0; //meniu veiksmo numeris int n = 0; //masyvo A elementu sk. int vieta = -1; //salinamo elemento numeris Grotuvas A[] = null; Grotuvas B[] = null; BufferedReader in = new BufferedReader (new InputStreamReader (System.in)); //skaitymo iš komandinės eilutės konstruktorius File fd = new File ("grotuvas_duom.txt"); //duomenu failas File fr = new File (".", "grotuvas_rez.txt"); //rezultatu failas PrintWriter rasyti = null; //Duomenų išvedimo failo kintamasis //Atidarome rezultatu faila try { rasyti = new PrintWriter (new FileWriter (fr)); } catch (IOException e) {System.out.println("Nepavyko sukurti failo.");} while (true){ meniu(); try { nr = Integer.parseInt(in.readLine()); } catch(IOException e){System.out.println("Ivedimo klaida!");} catch(NumberFormatException e){System.out.println("Ivedete ne sveika skaiciu!");} switch (nr) { case 1://skaitymas is failo n = skaiciuotiEilutes(fd); System.out.println(); System.out.println("Skaitome duomenis iš failo..."); System.out.println(); System.out.println("Nuskaitytos: " + n + " eilutės."); System.out.println(); A = new Grotuvas[n]; A = skaityti_sar(fd, n); System.out.println("Duomenys nuskaityti."); System.out.println(); spausdinti_sar_ekrane(A, n); break; case 2://rezultatu isvedimas i faila spausdinti_sar_faile(rasyti, A, n); System.out.println(); System.out.println("Įrašome duomenis į failą..."); System.out.println(); System.out.println("Duomenys sėkmingai įrašyti į failą: " + fr + "."); System.out.println(); break; case 3://naujo iraso iterpimas n++; A = kopijuotiMas(A, n); iterpti(A,n); spausdinti_sar_ekrane(A, n); break; case 4://iraso salinimas if (n==0) {System.out.println("Masyvas tuščias. Nėra ką šalinti.");} else { while (true){ System.out.println("Iveskite šalinamo elemento eilutės nr.(1 - "+ n +" ):"); try { vieta = Integer.parseInt(in.readLine()); if (vieta <1 || vieta > n) System.out.println("Tokio elemento pašalinti negalima!"); else { n--; A = salinti(A, n, vieta-1); spausdinti_sar_ekrane(A, n); break; } } catch(IOException e){System.out.println("!Duomenų įvedimo klaida!");} catch(NumberFormatException e){System.out.println("Ivedėte ne sveiką skaičių!");} } } break; case 5://paieskos veiksmai break; case 6://pabaiga System.out.println("Programa baigė darbą."); System.exit(0); break; default://veiksmai kitais atvejais System.out.println("Nėra tokio menu punkto. Pakartokite!"); break; } } } //metodas suskaiciuoja kiek faile yra irasu eiluciu public static int skaiciuotiEilutes (File file) { int sk = 0; try { BufferedReader file_in = new BufferedReader (new FileReader (file)); while (true){ if ((file_in.readLine()) == null){ file_in.close(); return sk;} sk++; } } catch (IOException e) {System.out.println("Skaitymo is failo klaida");} return sk; } //metodas skaito duomenis is failo public static Grotuvas[] skaityti_sar (File file, int n){ Grotuvas A[] = new Grotuvas [n]; //sukuriamas masyvo objektas String eilute; // kintamasis 1 eilutei skaityti int sk = 0; //rasymo i masyva skaitliukas String pav, autorius, stilius; int trukme; try { BufferedReader file_in = new BufferedReader (new FileReader (file)); while (true){ if ((eilute = file_in.readLine()) == null) break; StringTokenizer st = new StringTokenizer(eilute); pav = st.nextToken(); autorius = st.nextToken(); stilius = st.nextToken(); trukme = Integer.parseInt(st.nextToken()); A[sk]= new Grotuvas (pav, autorius, stilius, trukme); sk ++; if (sk==n) break; } } catch (IOException e) {System.out.println("Ivedimo klaida");} catch (IndexOutOfBoundsException e) {System.out.println("Masyvo ribu klaida");} return A; } public static void spausdinti_sar_ekrane ( Grotuvas [] A, int n) { if (n > 0) { spausdinti_antraste_ekrane (); System.out.println("******************************************************************"); for (int i=0; i<n; i++) { System.out.println("* " + prailginti((i+1)+"", 3) +" * "+prailginti(A[i].gautiPavadinima(),17)+ " * "+ prailginti(A[i].gautiAutorius(),14)+ " * " + prailginti(A[i].gautiStilius()+"", 10) + " * " + prailginti(A[i].gautiTrukme()+"", 4) + " * "); } System.out.println("******************************************************************"); } else System.out.println("Masyvas tuscias!"); } public static void spausdinti_antraste_ekrane (){ System.out.println("******************************************************************"); System.out.println("* Nr. * Pavadinimas * Autorius * Stilius * Trukmė *"); } public static String prailginti (String reiksme, int ilgis){ for (int i=reiksme.length(); i<ilgis; i++) reiksme += " "; return reiksme; } public static void spausdinti_sar_faile (PrintWriter rasyti, Grotuvas [] A, int n) { if (n > 0) { spausdinti_antraste_faile (rasyti); rasyti.println("******************************************************************"); for (int i=0; i<n; i++) { rasyti.println("* " + prailginti((i+1)+"", 3) +" * "+prailginti(A[i].gautiPavadinima(),17)+ " * "+ prailginti(A[i].gautiAutorius(),14)+ " * " + prailginti(A[i].gautiStilius()+"", 10) + " * " + prailginti(A[i].gautiTrukme()+"", 4) + " * "); } rasyti.println("******************************************************************"); } else rasyti.println("Masyvas tuscias!"); rasyti.close(); // klasei PrintWriter IOException nemeta } public static void spausdinti_antraste_faile (PrintWriter rasyti){ rasyti.println("******************************************************************"); rasyti.println("* Nr. * Pavadinimas * Autorius * Stilius * Trukmė *"); } //metodas sukuria nauja, vienetu didesni masyva, nei buvo pries iterpima //ir i ji perkopijuoja pradinio masyvo duomenis public static Grotuvas[] kopijuotiMas(Grotuvas A[], int n){ Grotuvas A2[] = new Grotuvas[n]; for (int i=0; i<n-1; i++ ) A2[i]=A[i]; return A2; } // Įvedamas naujas masyvo elementas public static Grotuvas[] iterpti(Grotuvas G[], int n){ BufferedReader in = new BufferedReader (new InputStreamReader (System.in)); String pav, autorius, stilius; int trukme; int vieta; while (true){ System.out.println("Įveskite dainos pavadinimą:"); try { pav = in.readLine(); break; } catch (IOException e) {System.out.println("!Duomenų įvedimo klaida.");} } while (true){ System.out.println("Įveskite dainos autorių:"); try { autorius = in.readLine(); break; } catch (IOException e) {System.out.println("!Duomenų įvedimo klaida.");} } while (true){ System.out.println("Iveskite dainos stilių. Pvz. Pop:"); try { stilius = in.readLine(); break; } catch (IOException e) {System.out.println("!Duomenų įvedimo klaida.");} } while (true){ System.out.println("Įveskite dainos trukmę sekundėmis:"); try { trukme = Integer.parseInt(in.readLine()); break; } catch (IOException e) {System.out.println("!Duomenų įvedimo klaida.");} catch (NumberFormatException e) {System.out.println("Ivedėte ne sveiką skaičių!");} } Grotuvas naujas = new Grotuvas(pav, autorius, stilius, trukme); while (true){ System.out.println("Masyve yra " + (n-1) + " elementu. Įveskite į kurią eilutę įterpti naują įrašą(1 - "+ n +"):"); try { vieta = Integer.parseInt(in.readLine()); if (vieta > n) System.out.println("Įvedėte per didelį skaičių!"); else if (vieta < 1) System.out.println("Įvedėte per mažą skaičių!"); else break; } catch (IOException e) {System.out.println("!Duomenų įvedimo klaida.");} catch (NumberFormatException e) {System.out.println("Įvedėte ne sveiką skaičių!");} } for (int i=n-1; i>vieta-1; i--) G[i]=G[i-1]; G[vieta-1]=naujas; return G; } public static Grotuvas[] salinti(Grotuvas G[], int n, int vieta){ for (int i=vieta; i<n; i++) G[i]=G[i+1]; return G; } public static void meniu () { System.out.println(); System.out.println("_____________________________"); System.out.println("Programos Grotuvas veiksmų meniu"); System.out.println(); System.out.println("1. Skaityti duomenis."); System.out.println("2. Spausdinti masyvą į rezultatų failą."); System.out.println("3. Įterpti naują dainą."); System.out.println("4. Ištrinti dainą iš sąrašo."); System.out.println("5. Surasti."); System.out.println("6. Baigti darbą."); System.out.println(); System.out.println("Iveskite meniu nr.:"); } }
Penkta dalis
Čia pridėsime pagal užduotį reikalinga papildomą metodą, kuris suskaičiuos visų pasirinkto autoriaus dainų trukmę.
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package grotuvasmenu; import java.io.*; import java.util.StringTokenizer; class Grotuvas { private String pavadinimas, autorius, stilius; private int trukme; Grotuvas() { } Grotuvas(String pav, String aut, String stil, int truk) { pavadinimas = pav; autorius = aut; stilius = stil; trukme = truk; } public String gautiPavadinima() { return pavadinimas; } public String gautiAutorius() { return autorius; } public String gautiStilius() { return stilius; } public int gautiTrukme() { return trukme; } } public class GrotuvasMenu { /** * @param args the command line arguments */ public static void main(String[] args) { int nr = 0; //meniu veiksmo numeris int n = 0; //masyvo A elementu sk. int vieta = -1; //salinamo elemento numeris String autsum; Grotuvas A[] = null; Grotuvas B[] = null; BufferedReader in = new BufferedReader (new InputStreamReader (System.in)); //skaitymo iš komandinės eilutės konstruktorius File fd = new File ("grotuvas_duom.txt"); //duomenu failas File fr = new File (".", "grotuvas_rez.txt"); //rezultatu failas PrintWriter rasyti = null; //Duomenų išvedimo failo kintamasis //Atidarome rezultatu faila try { rasyti = new PrintWriter (new FileWriter (fr)); } catch (IOException e) {System.out.println("Nepavyko sukurti failo.");} while (true){ meniu(); try { nr = Integer.parseInt(in.readLine()); } catch(IOException e){System.out.println("Ivedimo klaida!");} catch(NumberFormatException e){System.out.println("Ivedete ne sveika skaiciu!");} switch (nr) { case 1://skaitymas is failo n = skaiciuotiEilutes(fd); System.out.println(); System.out.println("Skaitome duomenis iš failo..."); System.out.println(); System.out.println("Nuskaitytos: " + n + " eilutės."); System.out.println(); A = new Grotuvas[n]; A = skaityti_sar(fd, n); System.out.println("Duomenys nuskaityti."); System.out.println(); spausdinti_sar_ekrane(A, n); break; case 2://rezultatu isvedimas i faila spausdinti_sar_faile(rasyti, A, n); System.out.println(); System.out.println("Įrašome duomenis į failą..."); System.out.println(); System.out.println("Duomenys sėkmingai įrašyti į failą: " + fr + "."); System.out.println(); break; case 3://naujo iraso iterpimas n++; A = kopijuotiMas(A, n); iterpti(A,n); spausdinti_sar_ekrane(A, n); break; case 4://iraso salinimas if (n==0) {System.out.println("Masyvas tuščias. Nėra ką šalinti.");} else { while (true){ System.out.println("Iveskite šalinamo elemento eilutės nr.(1 - "+ n +" ):"); try { vieta = Integer.parseInt(in.readLine()); if (vieta <1 || vieta > n) System.out.println("Tokio elemento pašalinti negalima!"); else { n--; A = salinti(A, n, vieta-1); spausdinti_sar_ekrane(A, n); break; } } catch(IOException e){System.out.println("!Duomenų įvedimo klaida!");} catch(NumberFormatException e){System.out.println("Ivedėte ne sveiką skaičių!");} } } break; case 5://paieskos veiksmai if (n==0) {System.out.println("Masyvas tuščias. Nėra ko sumuoti.");} else { while (true){ System.out.println(); System.out.println("Sumuosime pasirinkto autoriaus dainų trukmę. Iveskite autorių:"); try { autsum = in.readLine(); sumuoti_trukme(A, n, autsum); break; } catch(IOException e){System.out.println("!Duomenų įvedimo klaida!");} } } break; case 6://pabaiga System.out.println("Programa baigė darbą."); System.exit(0); break; default://veiksmai kitais atvejais System.out.println("Nėra tokio menu punkto. Pakartokite!"); break; } } } //metodas suskaiciuoja kiek faile yra irasu eiluciu public static int skaiciuotiEilutes (File file) { int sk = 0; try { BufferedReader file_in = new BufferedReader (new FileReader (file)); while (true){ if ((file_in.readLine()) == null){ file_in.close(); return sk;} sk++; } } catch (IOException e) {System.out.println("Skaitymo is failo klaida");} return sk; } //metodas skaito duomenis is failo public static Grotuvas[] skaityti_sar (File file, int n){ Grotuvas A[] = new Grotuvas [n]; //sukuriamas masyvo objektas String eilute; // kintamasis 1 eilutei skaityti int sk = 0; //rasymo i masyva skaitliukas String pav, autorius, stilius; int trukme; try { BufferedReader file_in = new BufferedReader (new FileReader (file)); while (true){ if ((eilute = file_in.readLine()) == null) break; StringTokenizer st = new StringTokenizer(eilute); pav = st.nextToken(); autorius = st.nextToken(); stilius = st.nextToken(); trukme = Integer.parseInt(st.nextToken()); A[sk]= new Grotuvas (pav, autorius, stilius, trukme); sk ++; if (sk==n) break; } } catch (IOException e) {System.out.println("Ivedimo klaida");} catch (IndexOutOfBoundsException e) {System.out.println("Masyvo ribu klaida");} return A; } public static void sumuoti_trukme ( Grotuvas [] A, int n, String autsum) { int suma = 0; int eilute = 0; if (n > 0) { for (int i=0; i<n; i++) { if (autsum.trim().equals(A[i].gautiAutorius().trim())) { suma += Integer.valueOf( A[i].gautiTrukme() ); eilute = eilute + 1; } } System.out.println(); System.out.println("Visų rasta autoriaus " + autsum + " dainų: " + eilute + ". " + "Dainų trukmė: " + suma); } } public static void spausdinti_sar_ekrane ( Grotuvas [] A, int n) { if (n > 0) { spausdinti_antraste_ekrane (); System.out.println("******************************************************************"); for (int i=0; i<n; i++) { System.out.println("* " + prailginti((i+1)+"", 3) +" * "+prailginti(A[i].gautiPavadinima(),17)+ " * "+ prailginti(A[i].gautiAutorius(),14)+ " * " + prailginti(A[i].gautiStilius()+"", 10) + " * " + prailginti(A[i].gautiTrukme()+"", 4) + " * "); } System.out.println("******************************************************************"); } else System.out.println("Masyvas tuscias!"); } public static void spausdinti_antraste_ekrane (){ System.out.println("******************************************************************"); System.out.println("* Nr. * Pavadinimas * Autorius * Stilius * Trukmė *"); } public static String prailginti (String reiksme, int ilgis){ for (int i=reiksme.length(); i<ilgis; i++) reiksme += " "; return reiksme; } public static void spausdinti_sar_faile (PrintWriter rasyti, Grotuvas [] A, int n) { if (n > 0) { spausdinti_antraste_faile (rasyti); rasyti.println("******************************************************************"); for (int i=0; i<n; i++) { rasyti.println("* " + prailginti((i+1)+"", 3) +" * "+prailginti(A[i].gautiPavadinima(),17)+ " * "+ prailginti(A[i].gautiAutorius(),14)+ " * " + prailginti(A[i].gautiStilius()+"", 10) + " * " + prailginti(A[i].gautiTrukme()+"", 4) + " * "); } rasyti.println("******************************************************************"); } else rasyti.println("Masyvas tuscias!"); rasyti.close(); // klasei PrintWriter IOException nemeta } public static void spausdinti_antraste_faile (PrintWriter rasyti){ rasyti.println("******************************************************************"); rasyti.println("* Nr. * Pavadinimas * Autorius * Stilius * Trukmė *"); } //metodas sukuria nauja, vienetu didesni masyva, nei buvo pries iterpima //ir i ji perkopijuoja pradinio masyvo duomenis public static Grotuvas[] kopijuotiMas(Grotuvas A[], int n){ Grotuvas A2[] = new Grotuvas[n]; for (int i=0; i<n-1; i++ ) A2[i]=A[i]; return A2; } // Įvedamas naujas masyvo elementas public static Grotuvas[] iterpti(Grotuvas G[], int n){ BufferedReader in = new BufferedReader (new InputStreamReader (System.in)); String pav, autorius, stilius; int trukme; int vieta; while (true){ System.out.println("Įveskite dainos pavadinimą:"); try { pav = in.readLine(); break; } catch (IOException e) {System.out.println("!Duomenų įvedimo klaida.");} } while (true){ System.out.println("Įveskite dainos autorių:"); try { autorius = in.readLine(); break; } catch (IOException e) {System.out.println("!Duomenų įvedimo klaida.");} } while (true){ System.out.println("Iveskite dainos stilių. Pvz. Pop:"); try { stilius = in.readLine(); break; } catch (IOException e) {System.out.println("!Duomenų įvedimo klaida.");} } while (true){ System.out.println("Įveskite dainos trukmę sekundėmis:"); try { trukme = Integer.parseInt(in.readLine()); break; } catch (IOException e) {System.out.println("!Duomenų įvedimo klaida.");} catch (NumberFormatException e) {System.out.println("Ivedėte ne sveiką skaičių!");} } Grotuvas naujas = new Grotuvas(pav, autorius, stilius, trukme); while (true){ System.out.println("Masyve yra " + (n-1) + " elementu. Įveskite į kurią eilutę įterpti naują įrašą(1 - "+ n +"):"); try { vieta = Integer.parseInt(in.readLine()); if (vieta > n) System.out.println("Įvedėte per didelį skaičių!"); else if (vieta < 1) System.out.println("Įvedėte per mažą skaičių!"); else break; } catch (IOException e) {System.out.println("!Duomenų įvedimo klaida.");} catch (NumberFormatException e) {System.out.println("Įvedėte ne sveiką skaičių!");} } for (int i=n-1; i>vieta-1; i--) G[i]=G[i-1]; G[vieta-1]=naujas; return G; } public static Grotuvas[] salinti(Grotuvas G[], int n, int vieta){ for (int i=vieta; i<n; i++) G[i]=G[i+1]; return G; } public static void meniu () { System.out.println(); System.out.println("_____________________________"); System.out.println("Programos Grotuvas veiksmų meniu"); System.out.println(); System.out.println("1. Skaityti duomenis."); System.out.println("2. Spausdinti masyvą į rezultatų failą."); System.out.println("3. Įterpti naują dainą."); System.out.println("4. Ištrinti dainą iš sąrašo."); System.out.println("5. Surasti."); System.out.println("6. Baigti darbą."); System.out.println(); System.out.println("Iveskite meniu nr.:"); } }