Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.PrintWriter;
- import java.util.ArrayList;
- import java.util.Scanner;
- public class lab4_1 {
- private static Scanner fScan = null;
- private static Scanner scan = new Scanner(System.in);
- private static String getFileName() {
- String fileName;
- boolean incorrect = true;
- do {
- System.out.println("Введите имя файла, содержащего данные клиентов :");
- fileName = scan.nextLine();
- File txtFile = new File(fileName);
- if ((txtFile.exists()) && (txtFile.length() == 0)) {
- System.out.println("Данный файл пуст!");
- incorrect = true;
- } else {
- try {
- fScan = new Scanner(txtFile);
- incorrect = false;
- } catch (FileNotFoundException e) {
- System.out.println("Файл " + fileName + " не найден!");
- } catch (Exception e) {
- System.out.println("Ошибка чтения файла! Проверьте файл и данные в нем.");
- }
- }
- }
- while (incorrect);
- return (fileName);
- }
- private static ArrayList<User> getDataFromFile() {
- ArrayList<User> users = new ArrayList<>();
- int amOfUsers = 0;
- boolean isNotCorrect = true;
- try {
- amOfUsers = fScan.nextInt();
- isNotCorrect = false;
- } catch (Exception e) {
- System.out.println("Файл содержит некорректные данные!");
- isNotCorrect = true;
- }
- fScan.nextLine();
- if (!isNotCorrect) {
- try {
- boolean flag = true;
- for (int i = 0; i < amOfUsers && flag; i++) {
- String[] userData = fScan.nextLine().split(" ");
- if ((userData[0].length() > 15) || (userData[1].length() != 4) || (userData[2].length() != 6)) {
- isNotCorrect = true;
- } else {
- for (int j = 0; j < userData[0].length(); j++) {
- if (Character.isDigit(userData[0].charAt(j))) {
- isNotCorrect = true;
- }
- }
- for (int j = 0; j < userData[1].length(); j++) {
- if (!Character.isDigit(userData[1].charAt(j))) {
- isNotCorrect = true;
- }
- }
- for (int j = 0; j < userData[2].length(); j++) {
- if (!Character.isDigit(userData[2].charAt(j))) {
- isNotCorrect = true;
- }
- }
- if (isNotCorrect) {
- System.out.println("Файл содержит некорректные данные!");
- flag = false;
- } else {
- users.add(new User((i + 1), userData[0], Integer.parseInt(userData[1]), userData[2]));
- }
- }
- }
- } catch (Exception e) {
- System.out.println("Файл содержит некорректные данные!");
- isNotCorrect = true;
- }
- }
- if (isNotCorrect) {
- users.clear();
- } else {
- System.out.println("Данные успешно загружены.");
- }
- return users;
- }
- private static void saveData(ArrayList<User> dataBase, String fileName) {
- PrintWriter writer = null;
- File file = new File(fileName);
- try {
- writer = new PrintWriter(file);
- writer.write(Integer.toString(dataBase.size()));
- writer.println();
- for (User user : dataBase) {
- writer.write(user.getSecName() + " " + user.getYear() + " " + user.getNumber());
- writer.println();
- }
- } catch (Exception e) {
- System.out.println("Ошибка сохранения данных!");
- }
- writer.close();
- System.out.println("Данные были сохранены.");
- }
- private static void getDataBase(ArrayList<User> dataBase) {
- System.out.printf("%4s | %15s | %s | %s%n", "№", "Фамилия", "Год", "Номер");
- for (User user : dataBase) {
- System.out.printf("%4s | %15s | %s | %s%n", user.getNumberInList(), user.getSecName(), user.getYear(), user.getNumber());
- }
- System.out.println();
- }
- private static void addClient(ArrayList<User> dataBase) {
- final int MIN_YEAR = 1949;
- final int MAX_YEAR = 2021;
- boolean isNotCorrect;
- String secName;
- int year = 0;
- String number = "";
- do {
- System.out.println("Введите фамилию клиента : ");
- isNotCorrect = false;
- secName = scan.nextLine();
- for (int i = 0; i < secName.length(); i++) {
- if (Character.isDigit(secName.charAt(i))) {
- isNotCorrect = true;
- }
- }
- if (!isNotCorrect && (secName.length() > 15)) {
- isNotCorrect = true;
- System.out.println("Фамилия должна быть не длиннее 15 симолов!");
- } else if (isNotCorrect) {
- System.out.println("Фамилия не должна содержать цифр!");
- }
- } while (isNotCorrect);
- do {
- System.out.println("Введите год установки телефона (от 1950 до 2020) : ");
- try {
- year = scan.nextInt();
- isNotCorrect = false;
- } catch (Exception e) {
- System.out.println("Некорректный ввод!");
- isNotCorrect = true;
- scan.nextLine();
- }
- if ((!isNotCorrect) && ((year < MIN_YEAR) || (year > MAX_YEAR))) {
- isNotCorrect = true;
- System.out.println("Данный год не соответствует заданному диапазону!");
- }
- } while (isNotCorrect);
- scan.nextLine();
- do {
- System.out.println("Введите номер телефона клиента : ");
- try {
- number = scan.nextLine();
- isNotCorrect = false;
- for (int i = 0; i < number.length(); i++) {
- if (!Character.isDigit(number.charAt(i))) {
- isNotCorrect = true;
- }
- }
- } catch (Exception e) {
- System.out.println("Некорректный ввод!");
- isNotCorrect = true;
- scan.nextLine();
- }
- if (!isNotCorrect) {
- if (number.length() != 6) {
- System.out.println("Номер должен содержать 6 цифр!");
- isNotCorrect = true;
- }
- }
- } while (isNotCorrect);
- dataBase.add(new User(dataBase.size() + 1, secName, year, number));
- }
- static ArrayList<User> editData(ArrayList<User> dataBase) {
- getDataBase(dataBase);
- int number = 0;
- boolean isNotCorrect;
- do {
- isNotCorrect = true;
- try {
- System.out.println("Введите номер ячейки, которую хотите отредактировать : ");
- number = scan.nextInt();
- isNotCorrect = false;
- scan.nextLine();
- } catch (Exception e) {
- System.out.println("Некорректный ввод!");
- scan.nextLine();
- }
- if (!isNotCorrect) {
- if ((number < 1) || (number > dataBase.size())) {
- System.out.println("Ячейки с таким номером не существует!");
- isNotCorrect = true;
- }
- }
- } while (isNotCorrect);
- addClient(dataBase);
- dataBase.get(dataBase.size() - 1).setNumberInList(number);
- dataBase.set(--number, dataBase.get(dataBase.size() - 1));
- dataBase.remove(dataBase.size() - 1);
- System.out.println("Данные успешно отредактированы!");
- return (dataBase);
- }
- static ArrayList<User> removeRecord(ArrayList<User> dataBase) {
- getDataBase(dataBase);
- int number = 0;
- boolean isNotCorrect;
- do {
- isNotCorrect = true;
- try {
- System.out.println("Введите номер ячейки, которую хотите удалить : ");
- number = scan.nextInt();
- isNotCorrect = false;
- scan.nextLine();
- } catch (Exception e) {
- System.out.println("Некорректный ввод!");
- scan.nextLine();
- }
- if (!isNotCorrect) {
- if ((number < 1) || (number > dataBase.size())) {
- System.out.println("Ячейки с таким номером не существует!");
- isNotCorrect = true;
- }
- }
- } while (isNotCorrect);
- dataBase.remove(--number);
- for (int i = number; i < dataBase.size(); i++) {
- dataBase.get(i).setNumberInList(i + 1);
- }
- System.out.println("Ячейка успешно удалена!");
- return (dataBase);
- }
- static void getUserChoiceForInput(ArrayList<User> dataBase, String fileName) {
- boolean flag = true;
- String choice = "";
- do {
- System.out.println("Если Вы желаете добавить клиента - введите \"add\".\n" +
- "Если Вы желаете редактировать данные - введите \"edit\".\n" +
- "Если Вы желаете удалить клиента - введите \"delete\".\n" +
- "Если Вы желаете просмотреть базу данных - введите \"view\".\n" +
- "Если Вы желаете добавить клиентов из файла - введите \"file\".\n" +
- "Если Вы желаете узнать номер клиента по его фамилии - введите \"find\".\n" +
- "Если Вы желаете узнать количество номеров, установленных с XXXX года - введите \"year\".\n" +
- "Если Вы желаете получить справку о программе - введите \"help\".\n" +
- "Если Вы желаете выйти из программы - введите \"exit\".");
- choice = scan.nextLine();
- switch (choice) {
- case ("add"):
- addClient(dataBase);
- break;
- case ("view"):
- getDataBase(dataBase);
- break;
- case ("edit"):
- editData(dataBase);
- break;
- case ("delete"):
- removeRecord(dataBase);
- break;
- case ("exit"):
- saveData(dataBase, fileName);
- flag = false;
- break;
- default:
- System.out.println("Ошибка ввода!");
- }
- } while (flag);
- }
- public static void main(String[] args) {
- String fileName;
- ArrayList<User> users;
- boolean isNotCorrect;
- do {
- isNotCorrect = false;
- fileName = getFileName();
- users = getDataFromFile();
- if (users.size() == 0) {
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- getUserChoiceForInput(users, fileName);
- }
- }
- class User {
- private String secName;
- private int year;
- private String number;
- private int numberInList;
- User(int numberInList, String secName, int year, String number) {
- this.numberInList = numberInList;
- this.secName = secName;
- this.year = year;
- this.number = number;
- }
- public void setNumberInList(int numberInList) {
- this.numberInList = numberInList;
- }
- public int getNumberInList() {
- return numberInList;
- }
- public String getSecName() {
- return secName;
- }
- public int getYear() {
- return year;
- }
- public String getNumber() {
- return number;
- }
- public void setSecName(String secName) {
- this.secName = secName;
- }
- public void setYear(int year) {
- this.year = year;
- }
- public void setNumber(String number) {
- this.number = number;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement