commit a1047da9f3f354cbe77ad43edf876f6087c25d26 Author: Pawel Janecki Date: Sun Apr 19 17:09:32 2020 +0200 complete project diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..81d39d3 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,2 @@ +# Default ignored files +/workspace.xml \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..5b68b3b --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..2c4e090 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..be0cbf3 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +projekt nr 1 \ No newline at end of file diff --git a/peopleData.txt b/peopleData.txt new file mode 100644 index 0000000..edf0427 --- /dev/null +++ b/peopleData.txt @@ -0,0 +1 @@ +asdd, a s 90081900834 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..784753a --- /dev/null +++ b/pom.xml @@ -0,0 +1,36 @@ + + + 4.0.0 + + projekt1 + projekt1 + 1.0-SNAPSHOT + + + 11 + 11 + + + + + com.google.code.gson + gson + 2.8.5 + + + junit + junit + 4.12 + test + + + org.junit.jupiter + junit-jupiter + RELEASE + test + + + + \ No newline at end of file diff --git a/src/main/java/company/DataSaver.java b/src/main/java/company/DataSaver.java new file mode 100644 index 0000000..a92a22a --- /dev/null +++ b/src/main/java/company/DataSaver.java @@ -0,0 +1,96 @@ +package company; + +import java.io.*; + +public class DataSaver { + + public DataSaver(String fileName) { + _fileName = fileName; + } + + public void deleteFileIfExists() { + File fileToDelete = new File(_fileName); + + if (fileToDelete.exists()) + fileToDelete.delete(); + } + + public void deleteRowIfPeselExists(String pesel) throws IOException { + File file = new File(_fileName); + if (!file.exists()) + return; + + FileReader fileReader = new FileReader(file); + BufferedReader bufferedReader = new BufferedReader(fileReader); + int lineNumber = 0; + int lineToDelete = -1; + String line = null; + String lines = ""; + boolean containsPesel = false; + + while (true) { + lineNumber++; + line = bufferedReader.readLine(); + if (line == null) + break; + + if (line.contains(pesel)) { + containsPesel = true; + continue; + } + + lines += line + "\n"; + } + + if (!containsPesel) + return; + + fileReader.close(); + bufferedReader.close(); + + FileWriter fileWriter = new FileWriter(file, false); + BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); + bufferedWriter.write(lines); + + bufferedWriter.close(); + fileWriter.close(); + } + + public void savePersonalDataToFile(String city, String personalData) throws IOException { + File file = new File(_fileName); + FileWriter fileWriter = new FileWriter(file, true); + BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); + + bufferedWriter.write(city + ", " + personalData + "\n"); + + bufferedWriter.close(); + fileWriter.close(); + } + + private int getLineNumberWithText(File file, String stringToSearch) throws IOException { + FileReader fileReader = new FileReader(file); + BufferedReader bufferedReader = new BufferedReader(fileReader); + String line = null; + int lineNumber = 0; + int lineToDelete = -1; + + while (true) { + lineNumber++; + line = bufferedReader.readLine(); + if (line == null) + break; + + if (line.contains(stringToSearch)) { + lineToDelete = lineNumber; + break; + } + } + + fileReader.close(); + bufferedReader.close(); + + return lineToDelete; + } + + private String _fileName; +} diff --git a/src/main/java/company/Main.java b/src/main/java/company/Main.java new file mode 100644 index 0000000..449b7d2 --- /dev/null +++ b/src/main/java/company/Main.java @@ -0,0 +1,56 @@ +package company; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +import static company.PeselValidator.validate; + +public class Main { + + public static void main(String[] args) throws IOException { + BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); + DataSaver dataSaver = new DataSaver("peopleData.txt"); + + String city; + String personalData; + + System.out.println("Aby zakończyć wpisz STOP"); + dataSaver.deleteFileIfExists(); + + while (true) { + + System.out.println("PODAJ MIEJSCOWOWSC:"); + city = readData(reader); + if(checkBreak(city)) return; + + System.out.println("PODAJ IMIE I NAZWISKO ORAZ PESEL ODDZIELONE SPACJĄ:"); + personalData = readData(reader); + if (checkBreak(personalData)) return; + + var splitedData = personalData.split(" "); + var pesel = splitedData[splitedData.length - 1]; + + if (!validate(pesel)) { + System.out.println("Błąd - niepoprawny numer PESEL. Dane nie zostaną zapisane."); + continue; + } + + dataSaver.deleteRowIfPeselExists(pesel); + dataSaver.savePersonalDataToFile(city, personalData); + + } + + } + + private static boolean checkBreak(String word) { + if (word.equalsIgnoreCase("stop")) { + return true; + } + return false; + } + + private static String readData(BufferedReader reader) throws IOException { + return reader.readLine(); + } +} diff --git a/src/main/java/company/PeselValidator.java b/src/main/java/company/PeselValidator.java new file mode 100644 index 0000000..4306f1b --- /dev/null +++ b/src/main/java/company/PeselValidator.java @@ -0,0 +1,31 @@ +package company; + +public class PeselValidator { + + public static boolean validate(String pesel) { + if (pesel == null || pesel.length() != 11) + return false; + + return validateControlSum(pesel); + } + + private static boolean validateControlSum(String pesel) { + int controlSum = 0; + var weightings = new int[] { 1, 3, 7, 9, 1, 3, 7, 9, 1, 3 }; + var peselArray = pesel.toCharArray(); + + for (int i = 0; i < 10; i++) + { + controlSum += Character.getNumericValue(peselArray[i]) * weightings[i]; + } + + controlSum = controlSum % 10; + controlSum = 10 - controlSum; + controlSum = controlSum % 10; + + if (controlSum == Character.getNumericValue(peselArray[10])) + return true; + + return false; + } +} diff --git a/src/test/java/company/DataSaverTests.java b/src/test/java/company/DataSaverTests.java new file mode 100644 index 0000000..444fbd5 --- /dev/null +++ b/src/test/java/company/DataSaverTests.java @@ -0,0 +1,73 @@ +package company; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + +import java.io.*; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +public class DataSaverTests { + private DataSaver dataSaver; + private String testFileName = "test.txt"; + + @BeforeEach + public void initTests() throws IOException { + dataSaver = new DataSaver(testFileName); + + addToTestFileInitialValues(); + } + + @Test + public void savePersonalDataToFile_ShouldSaveData() throws IOException { + var city = "Warszawa"; + var personalData = "Jan Nowak 11223300456"; + dataSaver.savePersonalDataToFile(city, personalData); + + var textToFind = city + ", " + personalData; + + assertTrue(checkFileContainsText(textToFind)); + } + + @Test + public void deleteRowIfPeselExists_ShouldDeleteRowWithPesel() throws IOException { + assertTrue(checkFileContainsText("Szczecin, Robert Kowalski 11223344567")); + + dataSaver.deleteRowIfPeselExists("11223344567"); + + assertFalse(checkFileContainsText("Szczecin, Robert Kowalski 11223344567")); + } + + private void addToTestFileInitialValues() throws IOException { + File file = new File(testFileName); + FileWriter fileWriter = new FileWriter(file, true); + BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); + + bufferedWriter.write("Szczecin, Robert Kowalski 11223344567\n"); + bufferedWriter.write("Sopot, Witold Barman 99887766543\n"); + + bufferedWriter.close(); + fileWriter.close(); + } + + private boolean checkFileContainsText(String textToCheck) throws IOException { + File file = new File(testFileName); + if (!file.exists()) + return false; + + FileReader fileReader = new FileReader(file); + BufferedReader bufferedReader = new BufferedReader(fileReader); + + while (true) { + String line = bufferedReader.readLine(); + if (line == null) + return false; + + if (line.contains(textToCheck)) + return true; + } + } +} diff --git a/src/test/java/company/PeselValidatorTests.java b/src/test/java/company/PeselValidatorTests.java new file mode 100644 index 0000000..6a7db18 --- /dev/null +++ b/src/test/java/company/PeselValidatorTests.java @@ -0,0 +1,48 @@ +package company; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + +import static company.PeselValidator.validate; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +public class PeselValidatorTests { + + @Test + public void validate_ShouldFail_IfLengthIsDifferentThan11() { + String invalidPesels[] = { "777", "123456789000" }; + + for (var pesel: invalidPesels) { + var result = validate(pesel); + assertFalse(result); + } + } + + @Test + public void validate_ShouldFail_IfControlSumIsInvalid() { + String invalidPesels[] = { "12345678911", "84475900006", "33333210000" }; + + for (var pesel: invalidPesels) { + var result = validate(pesel); + assertFalse(result); + } + } + + @Test + public void validate_ShouldFail_IfNull() { + var result = validate(null); + assertFalse(result); + } + + @Test + public void validate_ShouldSuccess() { + String invalidPesels[] = { "92021585321", "86041014912", "04292933532" }; + + for (var pesel: invalidPesels) { + var result = validate(pesel); + assertTrue(result); + } + } +} diff --git a/target/classes/company/DataSaver.class b/target/classes/company/DataSaver.class new file mode 100644 index 0000000..7341603 Binary files /dev/null and b/target/classes/company/DataSaver.class differ diff --git a/target/classes/company/Main.class b/target/classes/company/Main.class new file mode 100644 index 0000000..6f926b6 Binary files /dev/null and b/target/classes/company/Main.class differ diff --git a/target/classes/company/PeselValidator.class b/target/classes/company/PeselValidator.class new file mode 100644 index 0000000..9197383 Binary files /dev/null and b/target/classes/company/PeselValidator.class differ diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..407a89a --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,3 @@ +company\DataSaver.class +company\Main.class +company\PeselValidator.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..83f1821 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,3 @@ +J:\IdeaProjects\projekt1\src\main\java\company\PeselValidator.java +J:\IdeaProjects\projekt1\src\main\java\company\DataSaver.java +J:\IdeaProjects\projekt1\src\main\java\company\Main.java diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..170fbb0 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst @@ -0,0 +1,2 @@ +company\PeselValidatorTests.class +company\DataSaverTests.class diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..12acd18 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst @@ -0,0 +1,2 @@ +J:\IdeaProjects\projekt1\src\test\java\company\PeselValidatorTests.java +J:\IdeaProjects\projekt1\src\test\java\company\DataSaverTests.java diff --git a/target/test-classes/company/DataSaverTests.class b/target/test-classes/company/DataSaverTests.class new file mode 100644 index 0000000..6373c32 Binary files /dev/null and b/target/test-classes/company/DataSaverTests.class differ diff --git a/target/test-classes/company/PeselValidatorTests.class b/target/test-classes/company/PeselValidatorTests.class new file mode 100644 index 0000000..aacf68a Binary files /dev/null and b/target/test-classes/company/PeselValidatorTests.class differ diff --git a/test.txt b/test.txt new file mode 100644 index 0000000..cf304d7 --- /dev/null +++ b/test.txt @@ -0,0 +1,3 @@ +Poznan, Adam Nowacki 84112293464 +Warszawa, Arnold Szwarceneger 77070847486 +Sopot, Witold Barman 99887766543