* Изходен код от упражнение 2, 2015
Публикувано на 02 октомври 2015 в раздел ПИК3 Java.
Да се напише клас с main метод, в който да се демонстрира извеждане на меню в конзолен режим, в което да има следните дейности:
- Въвеждане на данни за нов клиент – изисква въвеждането на данни за човека от клавиатурата. За всеки клиент се пази име, ЕГН и адрес. След успешно въвеждане, данните се съхраняват във файл в текущата директория с име <ЕГН>.txt, където <ЕГН> е 10 цифреното число, което е ЕГН на човека;
- Търсене на потребител по ЕГН – потребителя въвежда число <EГН> и програмата се опитва да отвори файла <EГН>.txt. Ако такъв съществува, трябва да се изведе информация за човека. В противен случай се извежда съобщение, че такъв човек не съществува;
- Търсене на потребител по ключова дума – отваря един по един всички файлове с разширение .txt от текущата директория и ги претърсва за съответната ключова дума;
- Изход.
След извършване на дадено действие, програмата трябва да се връща в главното меню (за целта използвайте безкраен цикъл). Изпълнението ѝ продължава до избор на „Изход“.
Решение: С уговорката, че правим съвсем минимална валидация на данните, едно възможно решение е:
import java.io.*; import java.util.Scanner; import java.util.InputMismatchException; public class ClientsManagement{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); menuLoop: do{ printMenu(); String option; option = sc.nextLine(); switch(option){ case "1": enterData(sc); break; case "2": System.out.print("Enter egn: "); getInfo(sc.nextLine()+".txt"); break; case "3": System.out.print("Enter keyword: "); findData(sc.nextLine()); break; case "4": break menuLoop; default: System.out.println("Invalid option. Enter 1, 2, 3 or 4."); } System.out.println("\n----------\n"); } while(true); } static void printMenu(){ System.out.println("Client management program"); System.out.println("1. Enter new client data"); System.out.println("2. Get client data by egn"); System.out.println("3. Search data with keyword"); System.out.println("4. Exit"); System.out.print("Enter option number: "); } static void enterData(Scanner sc){ System.out.print("Enter name: "); String name = sc.nextLine(); System.out.print("Enter egn: "); String egn = sc.nextLine(); // Tuk se ochakva po-seriozna proverka za validnost ot tazi // V tazi proverka proveriavame dali egn e samo cifri if(!egn.matches("\\d+")){ System.out.println("Invalid EGN"); return; } System.out.print("Enter address: "); String address = sc.nextLine(); PrintWriter pr = null; try{ pr = new PrintWriter(new FileWriter(egn+".txt")); pr.println(name); pr.println(egn); pr.println(address); } catch(IOException e){ System.out.println("Can't save file"); } finally{ if(pr != null) pr.close(); } System.out.println("Data saved"); } static void getInfo(String fileName){ Scanner fsc = null; try{ fsc = new Scanner(new BufferedReader(new FileReader(fileName))); while(fsc.hasNext()) System.out.println(fsc.nextLine()); } catch(FileNotFoundException e1){ System.out.println("No such user"); } finally{ if(fsc != null) fsc.close(); } } static void findData(String keyword){ String path = "."; int usersFound = 0; File folder = new File(path); File[] filesList = folder.listFiles(); filesLoop: for(File f: filesList){ if(f.isFile() && f.getName().endsWith(".txt")){ Scanner fsc = null; try{ fsc = new Scanner(f); while(fsc.hasNext()){ if(fsc.next().equals(keyword)){ usersFound++; System.out.println("User "+usersFound+": "); getInfo(f.getName()); System.out.println("...\n"); } } } catch(FileNotFoundException e){} finally{ if(fsc!=null) fsc.close(); } } } if(usersFound==0) System.out.println("Keyword not found"); } }
Добави коментар