Advertisement
Guest User

Untitled

a guest
Feb 19th, 2020
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.50 KB | None | 0 0
  1. import java.io.File;
  2. import java.io.FileNotFoundException;
  3. import java.io.PrintWriter;
  4. import java.util.ArrayList;
  5. import java.util.Scanner;
  6.  
  7. public class lab4_1 {
  8. private static Scanner fScan = null;
  9. private static Scanner scan = new Scanner(System.in);
  10.  
  11. private static String getFileName() {
  12. String fileName;
  13. boolean incorrect = true;
  14. do {
  15. System.out.println("Введите имя файла, содержащего данные клиентов :");
  16. fileName = scan.nextLine();
  17. File txtFile = new File(fileName);
  18. if ((txtFile.exists()) && (txtFile.length() == 0)) {
  19. System.out.println("Данный файл пуст!");
  20. incorrect = true;
  21. } else {
  22. try {
  23. fScan = new Scanner(txtFile);
  24. incorrect = false;
  25. } catch (FileNotFoundException e) {
  26. System.out.println("Файл " + fileName + " не найден!");
  27. } catch (Exception e) {
  28. System.out.println("Ошибка чтения файла! Проверьте файл и данные в нем.");
  29. }
  30. }
  31. }
  32. while (incorrect);
  33. return (fileName);
  34. }
  35.  
  36. private static ArrayList<User> getDataFromFile() {
  37. ArrayList<User> users = new ArrayList<>();
  38. int amOfUsers = 0;
  39. boolean isNotCorrect = true;
  40. try {
  41. amOfUsers = fScan.nextInt();
  42. isNotCorrect = false;
  43. } catch (Exception e) {
  44. System.out.println("Файл содержит некорректные данные!");
  45. isNotCorrect = true;
  46. }
  47. fScan.nextLine();
  48. if (!isNotCorrect) {
  49. try {
  50. boolean flag = true;
  51. for (int i = 0; i < amOfUsers && flag; i++) {
  52. String[] userData = fScan.nextLine().split(" ");
  53. if ((userData[0].length() > 15) || (userData[1].length() != 4) || (userData[2].length() != 6)) {
  54. isNotCorrect = true;
  55. } else {
  56. for (int j = 0; j < userData[0].length(); j++) {
  57. if (Character.isDigit(userData[0].charAt(j))) {
  58. isNotCorrect = true;
  59. }
  60. }
  61. for (int j = 0; j < userData[1].length(); j++) {
  62. if (!Character.isDigit(userData[1].charAt(j))) {
  63. isNotCorrect = true;
  64. }
  65. }
  66. for (int j = 0; j < userData[2].length(); j++) {
  67. if (!Character.isDigit(userData[2].charAt(j))) {
  68. isNotCorrect = true;
  69. }
  70. }
  71. if (isNotCorrect) {
  72. System.out.println("Файл содержит некорректные данные!");
  73. flag = false;
  74. } else {
  75. users.add(new User((i + 1), userData[0], Integer.parseInt(userData[1]), userData[2]));
  76. }
  77. }
  78. }
  79. } catch (Exception e) {
  80. System.out.println("Файл содержит некорректные данные!");
  81. isNotCorrect = true;
  82. }
  83. }
  84. if (isNotCorrect) {
  85. users.clear();
  86. } else {
  87. System.out.println("Данные успешно загружены.");
  88. }
  89. return users;
  90. }
  91.  
  92. private static void saveData(ArrayList<User> dataBase, String fileName) {
  93. PrintWriter writer = null;
  94. File file = new File(fileName);
  95. try {
  96. writer = new PrintWriter(file);
  97. writer.write(Integer.toString(dataBase.size()));
  98. writer.println();
  99. for (User user : dataBase) {
  100. writer.write(user.getSecName() + " " + user.getYear() + " " + user.getNumber());
  101. writer.println();
  102. }
  103. } catch (Exception e) {
  104. System.out.println("Ошибка сохранения данных!");
  105. }
  106. writer.close();
  107. System.out.println("Данные были сохранены.");
  108. }
  109.  
  110. private static void getDataBase(ArrayList<User> dataBase) {
  111. System.out.printf("%4s | %15s | %s | %s%n", "№", "Фамилия", "Год", "Номер");
  112. for (User user : dataBase) {
  113. System.out.printf("%4s | %15s | %s | %s%n", user.getNumberInList(), user.getSecName(), user.getYear(), user.getNumber());
  114. }
  115. System.out.println();
  116. }
  117.  
  118. private static void addClient(ArrayList<User> dataBase) {
  119. final int MIN_YEAR = 1949;
  120. final int MAX_YEAR = 2021;
  121.  
  122. boolean isNotCorrect;
  123. String secName;
  124. int year = 0;
  125. String number = "";
  126.  
  127. do {
  128. System.out.println("Введите фамилию клиента : ");
  129. isNotCorrect = false;
  130. secName = scan.nextLine();
  131. for (int i = 0; i < secName.length(); i++) {
  132. if (Character.isDigit(secName.charAt(i))) {
  133. isNotCorrect = true;
  134. }
  135. }
  136. if (!isNotCorrect && (secName.length() > 15)) {
  137. isNotCorrect = true;
  138. System.out.println("Фамилия должна быть не длиннее 15 симолов!");
  139. } else if (isNotCorrect) {
  140. System.out.println("Фамилия не должна содержать цифр!");
  141. }
  142. } while (isNotCorrect);
  143.  
  144. do {
  145. System.out.println("Введите год установки телефона (от 1950 до 2020) : ");
  146. try {
  147. year = scan.nextInt();
  148. isNotCorrect = false;
  149. } catch (Exception e) {
  150. System.out.println("Некорректный ввод!");
  151. isNotCorrect = true;
  152. scan.nextLine();
  153. }
  154. if ((!isNotCorrect) && ((year < MIN_YEAR) || (year > MAX_YEAR))) {
  155. isNotCorrect = true;
  156. System.out.println("Данный год не соответствует заданному диапазону!");
  157. }
  158. } while (isNotCorrect);
  159. scan.nextLine();
  160. do {
  161. System.out.println("Введите номер телефона клиента : ");
  162. try {
  163. number = scan.nextLine();
  164. isNotCorrect = false;
  165. for (int i = 0; i < number.length(); i++) {
  166. if (!Character.isDigit(number.charAt(i))) {
  167. isNotCorrect = true;
  168. }
  169. }
  170. } catch (Exception e) {
  171. System.out.println("Некорректный ввод!");
  172. isNotCorrect = true;
  173. scan.nextLine();
  174. }
  175. if (!isNotCorrect) {
  176. if (number.length() != 6) {
  177. System.out.println("Номер должен содержать 6 цифр!");
  178. isNotCorrect = true;
  179. }
  180. }
  181. } while (isNotCorrect);
  182.  
  183. dataBase.add(new User(dataBase.size() + 1, secName, year, number));
  184. }
  185.  
  186. static ArrayList<User> editData(ArrayList<User> dataBase) {
  187. getDataBase(dataBase);
  188. int number = 0;
  189. boolean isNotCorrect;
  190. do {
  191. isNotCorrect = true;
  192. try {
  193. System.out.println("Введите номер ячейки, которую хотите отредактировать : ");
  194. number = scan.nextInt();
  195. isNotCorrect = false;
  196. scan.nextLine();
  197. } catch (Exception e) {
  198. System.out.println("Некорректный ввод!");
  199. scan.nextLine();
  200. }
  201. if (!isNotCorrect) {
  202. if ((number < 1) || (number > dataBase.size())) {
  203. System.out.println("Ячейки с таким номером не существует!");
  204. isNotCorrect = true;
  205. }
  206. }
  207. } while (isNotCorrect);
  208. addClient(dataBase);
  209. dataBase.get(dataBase.size() - 1).setNumberInList(number);
  210. dataBase.set(--number, dataBase.get(dataBase.size() - 1));
  211. dataBase.remove(dataBase.size() - 1);
  212. System.out.println("Данные успешно отредактированы!");
  213. return (dataBase);
  214. }
  215.  
  216. static ArrayList<User> removeRecord(ArrayList<User> dataBase) {
  217. getDataBase(dataBase);
  218. int number = 0;
  219. boolean isNotCorrect;
  220. do {
  221. isNotCorrect = true;
  222. try {
  223. System.out.println("Введите номер ячейки, которую хотите удалить : ");
  224. number = scan.nextInt();
  225. isNotCorrect = false;
  226. scan.nextLine();
  227. } catch (Exception e) {
  228. System.out.println("Некорректный ввод!");
  229. scan.nextLine();
  230. }
  231. if (!isNotCorrect) {
  232. if ((number < 1) || (number > dataBase.size())) {
  233. System.out.println("Ячейки с таким номером не существует!");
  234. isNotCorrect = true;
  235. }
  236. }
  237. } while (isNotCorrect);
  238. dataBase.remove(--number);
  239. for (int i = number; i < dataBase.size(); i++) {
  240. dataBase.get(i).setNumberInList(i + 1);
  241. }
  242. System.out.println("Ячейка успешно удалена!");
  243. return (dataBase);
  244. }
  245.  
  246. static void getUserChoiceForInput(ArrayList<User> dataBase, String fileName) {
  247. boolean flag = true;
  248. String choice = "";
  249. do {
  250. System.out.println("Если Вы желаете добавить клиента - введите \"add\".\n" +
  251. "Если Вы желаете редактировать данные - введите \"edit\".\n" +
  252. "Если Вы желаете удалить клиента - введите \"delete\".\n" +
  253. "Если Вы желаете просмотреть базу данных - введите \"view\".\n" +
  254. "Если Вы желаете добавить клиентов из файла - введите \"file\".\n" +
  255. "Если Вы желаете узнать номер клиента по его фамилии - введите \"find\".\n" +
  256. "Если Вы желаете узнать количество номеров, установленных с XXXX года - введите \"year\".\n" +
  257. "Если Вы желаете получить справку о программе - введите \"help\".\n" +
  258. "Если Вы желаете выйти из программы - введите \"exit\".");
  259.  
  260. choice = scan.nextLine();
  261. switch (choice) {
  262. case ("add"):
  263. addClient(dataBase);
  264. break;
  265. case ("view"):
  266. getDataBase(dataBase);
  267. break;
  268. case ("edit"):
  269. editData(dataBase);
  270. break;
  271. case ("delete"):
  272. removeRecord(dataBase);
  273. break;
  274. case ("exit"):
  275. saveData(dataBase, fileName);
  276. flag = false;
  277. break;
  278. default:
  279. System.out.println("Ошибка ввода!");
  280. }
  281. } while (flag);
  282. }
  283.  
  284. public static void main(String[] args) {
  285. String fileName;
  286. ArrayList<User> users;
  287. boolean isNotCorrect;
  288. do {
  289. isNotCorrect = false;
  290. fileName = getFileName();
  291. users = getDataFromFile();
  292. if (users.size() == 0) {
  293. isNotCorrect = true;
  294. }
  295. } while (isNotCorrect);
  296. getUserChoiceForInput(users, fileName);
  297. }
  298. }
  299.  
  300. class User {
  301. private String secName;
  302. private int year;
  303. private String number;
  304. private int numberInList;
  305.  
  306. User(int numberInList, String secName, int year, String number) {
  307. this.numberInList = numberInList;
  308. this.secName = secName;
  309. this.year = year;
  310. this.number = number;
  311. }
  312.  
  313. public void setNumberInList(int numberInList) {
  314. this.numberInList = numberInList;
  315. }
  316.  
  317. public int getNumberInList() {
  318. return numberInList;
  319. }
  320.  
  321. public String getSecName() {
  322. return secName;
  323. }
  324.  
  325. public int getYear() {
  326. return year;
  327. }
  328.  
  329. public String getNumber() {
  330. return number;
  331. }
  332.  
  333. public void setSecName(String secName) {
  334. this.secName = secName;
  335. }
  336.  
  337. public void setYear(int year) {
  338. this.year = year;
  339. }
  340.  
  341. public void setNumber(String number) {
  342. this.number = number;
  343. }
  344. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement