Problem z pisaniem programu w Java - pomoc prosze!!!

0

Czy bylby ktos w stanie pomoc w napisaniu programu w Java?
Napisalem jakis tam zarys tylko teraz gdzies utknalem i nie wiem jak ruszyc. Czy moglby ktos cos doradzic. Jestem poczatkujacy wiec prosze o wyrozumialosc:

import java.io.*;

public class BazaDanych
{
int i, choice, counter=0;
    public static void main (String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s,s1,s2;
        int i,size,n,counter=0;
        String[] country={"Polska","Argentyna","Niemcy","Wielka Brytania"};
        String[] language={"Polski","Hiszpanski","Niemiecki","Angielski"};
        String[] population={"30.9","45.8","75.120","85.424"};
        
        String[] country_temp=new String[100];
        String[] language_temp=new String[100];
        String[] population_temp=new String[100];
        
        try (FileWriter fw1 = new FileWriter("Countries_Arrey.txt")) {
            size=country.length;
            for(i=0;i<size;i++)
            {
                fw1.write(country[i],0,country[i].length());
                fw1.write('\n');
                fw1.write(language[i],0,language[i].length());
                fw1.write('\n');
                fw1.write(population[i],0,population[i].length());
                fw1.write('\n');
            }
                      
        }
        try (BufferedReader br1 = new BufferedReader(new FileReader("Countries_Arrey.txt"))) {
            while((s=br1.readLine())!=null)
            {
                country_temp[counter]=s;
                language_temp[counter]=br1.readLine();
                population_temp[counter]=br1.readLine();
                counter++;
            }
        
        
    private static void menu() {

public class menu 
{
    

String t;
 public static void main(String[] args)throws IOException
    {
        int choice;
        
        do
        {
            choice=menu();
            switch(choice)
            {
                case 1:do_add_entry(); break;
                case 2:do_modify_entry();break;
                case 3:do_sort_by_country_name();break;
                case 4:do_sort_by_language();break;
                case 5:do_sort_by_population();break;
                case 6:do_show_all();break;
                case 7:do_search_for_name();break;
                case 8:do_delete_entry();break;
                case 9:System.out.print("\nPROGRAM TERMINATES\n\n");
            }
        }
        while(choice!=9);
    }
    // Main menu
    public static int menu()throws IOException
    {
        String main_menu;
        int choice;
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String s;
        
        do
        {
            main_menu="MAIN MENU\n\n";
            main_menu+="1. Add Entry\n";
            main_menu+="2. Modify Entry\n"; 
            main_menu+="3. Sort By Country Name\n";
            main_menu+="4. Sort By Language\n";
            main_menu+="5. Sort By Population\n";
            main_menu+="6. Show All\n";
            main_menu+="7. Search for Name\n";
            main_menu+="8. Delete Entry\n";
            main_menu+="9. Exit\n\n";
            main_menu+="Enter your choice: ";
            System.out.print(main_menu);
            s=br.readLine();
            try
            {
                choice=Integer.parseInt(s);
            }
            catch(NumberFormatException nfe)
            {
                choice=0;   
            }
            if(choice<1||choice>9){
                System.out.print("Wrong input!\n\n"); 
            }
        }
        while(choice<1||choice>9);
        return choice;
    }


        
        for(i=0;i<counter;i++)
        {
            System.out.println("\""+country_temp[i]+"\""+" "+"\""+language_temp[i]+"\""+"\""+population_temp+"\"");
        }
    }
}

Chodzi o napisanie bazy danych, ktora bedzie zapisywana w pliku txt przechowujaca 3 wartosci w tym jedna numeryczna. Na bazie danych musza byc wykonywane operacje typu dodaj, usun, sortuj itd.
Nie wiem jak sie zabrac z poszczegolne funkcje, a do tego nie wiem jak naprawic to co zrobilem z menu na poczatku i z zapisaniem arreys.
Czy moglby ktos pomoc przy uporzadkowaniu tego i naprowadzeniu jak pisac i wywolywac poszczegolne funckcje?

Pozdrawiam i z gory dziekuje za jakakolwiek pomoc
Trotsky

0

Pliki tekstowe nie nadają się do takich rzeczy. Całe szczęście. Teoretycznie da się to zrobić ale powstanie z tego niezłe spaghetti. Z pewnością nic przydatnego z tego nie wyniesiesz. Może okrój program do zapisu do pliku, dopisania,odczytania. Sortowanie trochę ciężko będzie. Bo byś musiał wczytywać daną linie dzielić ją za pomocą split(String), konwentorować liczbę na zmienna za pomocą Integer.parseInt().

0

Hej Skyrack,
ale wlasnie plik txt byl wymagany do zaliczenia. Nic na to nie poradze.
Jesli chodzi o Integer.parseInt(), tutaj sie zgodze, ze trzeba konwertowac string, ale ponoc uzywajac String arreys mozna to zrobic w pliku txt a chcac uzyc int array trzeba by utworzyc inny typ pliku i chyba .dat i wtedy byloby to jeszcze bardziej skomplikowane.
A moglbys doradzic jak okroic ten program aby:
Bylo menu do wyboru i w zaleznosci od wyboru aby powiedzmy robilo to co mowisz, biorac pod uwage, ze najpierw deklarujemy 3 wartosci do kazdej z Arreys, zapisujemy do pliku, aby go utworzyc, odczytujemy i z menu mozemy wybrac kilka operacji jak np dodaj, usun, a ja moze pozniej sprobuje dodac do tego binary search i moze update record?
Moglbys mi pomoc w tym? naprawde bylbym wdzieczny.

Pozdrawiam i dzieki

1

Hmm. Jeżeli chodzi o dopisywanie do wygrzebałem jakiś kod. Przeanalizuj i zobacz czy działa

//Metoda zapisujaca dane do pliku, pobiera imie,nazwisko,telefon. Nic nie zwraca 
   public static boolean Zapis(String imie,String nazwisko,String telefon) throws FileNotFoundException, IOException{//Zapis
       
       //Tworzymy obiekt do zapisu
       FileWriter zapis=new FileWriter("d:\\Ksiazka.txt",true);//obiekt do zapisu,true oznacza nadpis pliku
       //Tworzymy obiekt zapisujacy w ktorym "obudowujemy" obiekt z FileWriter
       BufferedWriter buffer= new BufferedWriter(zapis);
       buffer.write(imie+" "+nazwisko+" "+telefon);//zapisujemy do pliku
         buffer.newLine();//dodajemy znak \n 
       buffer.close();//zamykamy strumien
       return true;
        
    }//end 

Nad usuwaniem linijki z pliku trzeba się zastanowić. Bo to już kompletna jego modyfikacja musiała by być.
No nie wiem jak ty to byś chciał usuwać. Moza by wczytać zawartość pliku do pamięci. Usunąć dany "rekord" i ponownie wpisać to do pliku.
Musisz kombinować.
Swoją drogą "dziwne" te zadania na zaliczenia są.

0

Skyrack,
dzieki wielkie za to. na pewno przeanalizuje.
Co do operacji na pliku to powinno to wygladac tak:
Utworzenie pliku z 3 danymi jak w kodzie, otworzenie pliku i zczytanie za pomoca BufferReader, wszystkie operacje przeprowadzone na danych zczytanych czyli, sortowanie, uaktualmnianie, a na koniec prze wybraniu opcji nr 9 Exit i zapis do pliku. czy to ma sens? przepraszam, ze Cie mecze ale jestes jedyna osoba, ktora sie odezwala. jako, ze moja wiedza na temat javy jest powiedzmy sobie szczerze skromna, to niestety pottrzebuje pomocy i jestem bardzo wdzieczny za wszystko.

pozdrawiam i jesli bedziesz mogl cos jeszcze pomoc to poprosze. Siedzialem nad tym i myslalem, ze cos wydumam, ale utknalem a musze niebawem oddac prace :-(

T.

0

Wyjscie z programu to mozesz utworzyć funkcję

public void Exit()
{
System.exit(0);
}

Z tą resztą to tak jak pisałem wcześniej, kombinowanie bo plik to nie baza danych i wiesz jak sytuacja wygląda.

0

ale wyjscie z programu musi zapisac te 3 zmodyfikowane Arreys. Czy to powyzej to zrobi?
A wiesz, jak napisac sortowanie badz ta funkcje: do_modify_entry() ?
jak w ogole moge sprawic aby to na gorze dzialalo i aby pozniej ponizej tylko dodawac funkcje w zaleznosci od wyboru w menu???
ale truje tylek. przepraszam

0

No jeżeli trzymamy się takiej konwencji to możesz to zrobić tak.

Piszesz funkcje wyświetlającą menu

+/- tak

public void showMenu()
{
  System.out.println("1. Dodaj rekord);
...
}

Potem dajesz użytkownikowi możliwość wyboru

Scanner in=new Scanner(System.in);
int choice;
choice=in.nextInt();

//Potem w instrukcji switch wybierasz

switch ..
{
  case 1:dodajRekord();
}

I tak to mniej więcej można zrobić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1