* Изходен код от упражнение 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");
}
}
Добави коментар