Программа запускается с одним из следующих наборов параметров:
name — имя, String
sex — пол, «м» или «ж», одна буква
bd — дата рождения в следующем формате 15/04/1990
-c — добавляет человека с заданными параметрами в конец allPeople, выводит id (index) на экран
-u — обновляет данные человека с данным id
-d — производит логическое удаление человека с id, заменяет все его данные на null
-i — выводит на экран информацию о человеке с id: name sex (м/ж) bd (формат 15-Apr-1990)
id соответствует индексу в списке
Все люди должны храниться в allPeople
Пример вывода для параметра -і: Миронов м 15-Apr-1990
Правильно ли я поняла: мы сначала через консоль вводим команду, а потом значения для Person, над которыми хотим поработать этой командой???
посмотрите, пожалуйста, комментарии по ходу кода и подскажите, как все это работает! Очень туго у меня все идет с пониманием(((((((((((
package com.javarush.task.task17.task1710;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
/*
CRUD
*/
public class Solution {
public static List<Person> allPeople = new ArrayList<Person>();
static {
allPeople.add(Person.createMale("Иванов Иван", new Date())); //сегодня родился id=0
allPeople.add(Person.createMale("Петров Петр", new Date())); //сегодня родился id=1
}
public static void main(String[] args) throws IOException, ParseException {
String command = args[0];
String inputString = "";
for (int i = 1; i < args.length; i++) { //записываем наши данные в переменную inputString, но уже без команды
inputString += args[i] + " ";
}
String[] inputParam = inputString.split(" "); //создаем новый массив из элементов
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH);
switch (command) { //команда это всегда первый элемент массива, того, что мы ввели с консоли
case "-c": {
String name = "";
int count = 0;
for (int i = 0; i < inputParam.length; i++) {
if (!inputParam[i].equals("м") && !inputParam[i].equals("ж")) { //смотрим, на каком месте стоит параметр, указывающий на пол человека?
name += inputParam[i] + " "; // у нас параметр этот второй в массиве inputParam, поэтому записываем имя в переменную name
count++;
} else break;
}
name = name.substring(0, name.length() - 1); //делаем из массива строку имени
String sex = inputParam[count];
Date birthdate = simpleDateFormat.parse(inputParam[count + 1]); //следующий параметр после пола это дата рождения, преобразуем ее, как нужно
if (sex.equals("м")) {
allPeople.add(Person.createMale(name, birthdate));
} else if (sex.equals("ж")) {
allPeople.add(Person.createFemale(name, birthdate));
}
}
System.out.println(allPeople.size() - 1);
break;
case "-u":
{
int id = Integer.parseInt(inputParam[0]); //тут после команды вводят id? у нас же вроде имя было на нулевом месте в массиве
String name = ""; //???????????????????????????????????????????????????????????????????????
int count = 1;
for (int i = 1; i < inputParam.length; i++) {
if (!inputParam[i].equals("м") && !inputParam[i].equals("ж")) {
name += inputParam[i] + " ";
count++;
} else break;
}
name = name.substring(0, name.length() - 1);
String sex = inputParam[count];
Date birthdate = simpleDateFormat.parse(inputParam[count + 1]);
if (sex.equals("м")) {
Person p = allPeople.get(id);
p.setName(name); //обновляем данные
p.setSex(Sex.MALE);
p.setBirthDay(birthdate);
} else if (sex.equals("ж")) {
Person p = allPeople.get(id);
p.setName(name);
p.setSex(Sex.FEMALE);
p.setBirthDay(birthdate);
}
}
break;
case "-d": {
Person p = allPeople.get(Integer.parseInt(inputParam[0])); //тут после команды вводят id? у нас же вроде имя было на нулевом месте в массиве
p.setBirthDay(null); //???????????????????????????????????????????????????????????????????????
p.setName(null);
p.setSex(null);
}
break;
case "-i":
{
int id = Integer.parseInt(inputParam[0]);
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);
Person p = allPeople.get(id);
String sex;
if (p.getSex() == Sex.MALE) {
sex = "м";
} else sex = "ж";
System.out.println(p.getName() + " " + sex + " " + sdf.format(p.getBirthDay()));
}
break;
}
}
}