From 93dcfd0193355a83ee85636828c1fd58942f679a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=88=D0=B8=D0=BD=20=D0=9C=D0=B8=D1=85=D0=B0?= =?UTF-8?q?=D0=B8=D0=BB?= Date: Wed, 19 Feb 2020 15:30:23 +0300 Subject: [PATCH 01/10] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BF=D1=83=D1=81=D1=82=D1=8C=20=D0=B2=20=D0=B1?= =?UTF-8?q?=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/checkstyle-idea.xml | 16 +++ .idea/google-java-format.xml | 6 + ...org_junit_jupiter_junit_jupiter_5_6_0.xml} | 8 +- ...junit_jupiter_junit_jupiter_api_5_6_0.xml} | 8 +- ...it_jupiter_junit_jupiter_engine_5_6_0.xml} | 8 +- ...platform_junit_platform_commons_1_6_0.xml} | 8 +- ..._platform_junit_platform_engine_1_6_0.xml} | 8 +- .idea/vcs.xml | 5 + task2/src/test/java/DBTests.java | 106 +++++++++--------- task2/target/classes/DBUtility.class | Bin 2418 -> 1352 bytes task2/target/test-classes/DBTests.class | Bin 4138 -> 4101 bytes .../target/test-classes/HomeWorkLesson2.class | Bin 911 -> 915 bytes task3/task3.iml | 10 +- task4/task4.iml | 10 +- 14 files changed, 109 insertions(+), 84 deletions(-) create mode 100644 .idea/checkstyle-idea.xml create mode 100644 .idea/google-java-format.xml rename .idea/libraries/{Maven__org_junit_jupiter_junit_jupiter_5_6_0_RC1.xml => Maven__org_junit_jupiter_junit_jupiter_5_6_0.xml} (57%) rename .idea/libraries/{Maven__org_junit_jupiter_junit_jupiter_api_5_6_0_RC1.xml => Maven__org_junit_jupiter_junit_jupiter_api_5_6_0.xml} (65%) rename .idea/libraries/{Maven__org_junit_jupiter_junit_jupiter_engine_5_6_0_RC1.xml => Maven__org_junit_jupiter_junit_jupiter_engine_5_6_0.xml} (64%) rename .idea/libraries/{Maven__org_junit_platform_junit_platform_commons_1_6_0_RC1.xml => Maven__org_junit_platform_junit_platform_commons_1_6_0.xml} (63%) rename .idea/libraries/{Maven__org_junit_platform_junit_platform_engine_1_6_0_RC1.xml => Maven__org_junit_platform_junit_platform_engine_1_6_0.xml} (63%) diff --git a/.idea/checkstyle-idea.xml b/.idea/checkstyle-idea.xml new file mode 100644 index 0000000..21a0f73 --- /dev/null +++ b/.idea/checkstyle-idea.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/.idea/google-java-format.xml b/.idea/google-java-format.xml new file mode 100644 index 0000000..8b57f45 --- /dev/null +++ b/.idea/google-java-format.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_6_0_RC1.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_6_0.xml similarity index 57% rename from .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_6_0_RC1.xml rename to .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_6_0.xml index f8bf2aa..7efb7ad 100644 --- a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_6_0_RC1.xml +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_6_0.xml @@ -1,13 +1,13 @@ - + - + - + - + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_6_0_RC1.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_6_0.xml similarity index 65% rename from .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_6_0_RC1.xml rename to .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_6_0.xml index 4d72560..be380a5 100644 --- a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_6_0_RC1.xml +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_6_0.xml @@ -1,13 +1,13 @@ - + - + - + - + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_6_0_RC1.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_6_0.xml similarity index 64% rename from .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_6_0_RC1.xml rename to .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_6_0.xml index 1d54e61..227bc44 100644 --- a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_6_0_RC1.xml +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_6_0.xml @@ -1,13 +1,13 @@ - + - + - + - + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_6_0_RC1.xml b/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_6_0.xml similarity index 63% rename from .idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_6_0_RC1.xml rename to .idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_6_0.xml index a5016bb..8e5d3f2 100644 --- a/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_6_0_RC1.xml +++ b/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_6_0.xml @@ -1,13 +1,13 @@ - + - + - + - + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_6_0_RC1.xml b/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_6_0.xml similarity index 63% rename from .idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_6_0_RC1.xml rename to .idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_6_0.xml index a74d90f..2f36d10 100644 --- a/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_6_0_RC1.xml +++ b/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_6_0.xml @@ -1,13 +1,13 @@ - + - + - + - + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 94a25f7..78cface 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,5 +1,10 @@ + + + + + diff --git a/task2/src/test/java/DBTests.java b/task2/src/test/java/DBTests.java index 64d94e4..30c648f 100644 --- a/task2/src/test/java/DBTests.java +++ b/task2/src/test/java/DBTests.java @@ -10,68 +10,66 @@ public class DBTests { - Connection con; - Statement stmt; - DBUtility util; + Connection con; + Statement stmt; + DBUtility util; - @Before - public void starter() { - try { - util = new DBUtility(); - Class.forName("org.sqlite.JDBC"); - con = DriverManager.getConnection("jdbc:sqlite:C:\\Users\\Mikhail\\IdeaProjects\\Java31\\homework.db"); - stmt = con.createStatement(); - } catch (ClassNotFoundException | SQLException e) { - e.printStackTrace(); - } + @Before + public void starter() { + try { + util = new DBUtility(); + Class.forName("org.sqlite.JDBC"); + con = DriverManager.getConnection("jdbc:sqlite:homework.db"); + stmt = con.createStatement(); + } catch (ClassNotFoundException | SQLException e) { + e.printStackTrace(); } + } - @After - public void closer(){ - try { - stmt.close(); - con.close(); - }catch (Exception ignored){ + @After + public void closer() { + try { + stmt.close(); + con.close(); + } catch (Exception ignored) { - } } + } - @Test - public void testTable() throws SQLException { - stmt.execute("DROP TABLE IF EXISTS Printer"); - util.createPrinterTable(con, stmt); - ResultSet res = stmt.executeQuery("SELECT * FROM Printer"); - int cnt = 0; - while (res.next())cnt++; - Assert.assertEquals(3, cnt); - } - - @Test - public void testExpensivePC(){ - ArrayList list = util.selectExpensivePC(stmt); - list.sort(Comparator.comparing(o->o)); - Assert.assertArrayEquals(new String[]{"2205", "2210"}, list.toArray()); - } + @Test + public void testTable() throws SQLException { + stmt.execute("DROP TABLE IF EXISTS Printer"); + util.createPrinterTable(con, stmt); + ResultSet res = stmt.executeQuery("SELECT * FROM Printer"); + int cnt = 0; + while (res.next()) cnt++; + Assert.assertEquals(3, cnt); + } - @Test - public void testQuickLaptop(){ - ArrayList list = util.selectQuickLaptop(stmt); - Collections.sort(list); - Assert.assertArrayEquals(new Integer[]{3, 7}, list.toArray()); - } + @Test + public void testExpensivePC() { + ArrayList list = util.selectExpensivePC(stmt); + list.sort(Comparator.comparing(o -> o)); + Assert.assertArrayEquals(new String[] {"2205", "2210"}, list.toArray()); + } - @Test - public void testMaker(){ - ArrayList list = util.selectMaker(stmt); - Collections.sort(list); - Assert.assertArrayEquals(new String[]{"Intel"}, list.toArray()); - } - - @Test - public void maxCostTest(){ - int max = util.makerWithMaxProceeds(stmt); - Assert.assertEquals(140000, max); - } + @Test + public void testQuickLaptop() { + ArrayList list = util.selectQuickLaptop(stmt); + Collections.sort(list); + Assert.assertArrayEquals(new Integer[] {3, 7}, list.toArray()); + } + @Test + public void testMaker() { + ArrayList list = util.selectMaker(stmt); + Collections.sort(list); + Assert.assertArrayEquals(new String[] {"Intel"}, list.toArray()); + } + @Test + public void maxCostTest() { + int max = util.makerWithMaxProceeds(stmt); + Assert.assertEquals(140000, max); + } } diff --git a/task2/target/classes/DBUtility.class b/task2/target/classes/DBUtility.class index 8e43b51e41a9b809fed8a6773ea51f641e270a78..1ff9cf59b29d7c818ef203592d2f0b68ee7f9814 100644 GIT binary patch literal 1352 zcmbVMT~8B16uq-8Ei8!0SN*7piV8^RiyD(6hzN$H)fyDzi^;H^l!5JTot+Z;pM20K z5>5O8{wU*_*>zb$Nr;>5%-)%M&pG#_{r%_1FCuzO3oZ@NgCae2$uav}k>(i{mSrII z3ZvZI{0^i1de{_4@G00(W4AOMs1AHMT(U*rFgF?PT0EMO`Z5}`9=5=5clXg`x9(Q$7!u^Y~O?s@qu_P81`+Xk%H8Mb`NmQUCmc-*CXSQ*XQ==*;G DK`RJ~ literal 2418 zcmbVOZF3V<6n^d|ZPFxAngRu_bw$L4rm12lfkdIW zC6KIH9Vsy0FihEU`#aL!&~|#X7(WuPq!skhd^PxQVgtSnWoeo z!!j#JA$SoIx@8KSIhc<52uuuRj{qyX18EM8CvvSOFdGXH%Qir8NpXJJwza*6F?7gu ztZj5n&2eq&v-I|!Hv_nyW_BqFmFiX&i5BLw?i%{zhBk1lfxxZ*hgzrjU1|HU*??wK zdn|1M#j8n7@_TaV_MEo#=m^r7IuNV9-dNey<-nJiVrnK`Lop9YarX80*c-fRk>XL> z9izYrO0GX{Y6HLAZ0i&nY+WYY_p;wMoQF+qcg?nRDLcpaR-IjK`@G00X!NE)rfs>l zF7Fy%H=m3ew(NCh4im@=O!}SrIyZqqAfW2!P*QcvHJyS#D5}~p7)x9I&bIn$rVuW^ zQ*Uq7TeS`KaxgKlt&XcZMYU^N?m*qy3*gj;+7s440$Hr8SGb>>Ikd1!_BpI!U0}oy zm%}}@bJ)Np>u|8CVr9x^z&S9wf$5MWf<}ry8XhyHgxH) z_T1i})M3*brtYXlr}Rn;-yvAHR#P8YhN-eV9#hpa)q!5_^Em0LRW;-vj5C|9`f4i^ zO7$PO!B#kg9hi^CFRGc>WiGP26BHnaZQSR+jjAtj$`{h#i>o`2cpmWRiL{M&N8A{l z3j#U0D|OeA>#nr-1PbA9jqmKR|GnccLSr^bQ|>Yp58ZE>Pggp@K_GDHc#Jr#w;wwl z_Cb7kK%nA5jte#QUYd!w7laCpntuQ}8)* z`31z!{G;GB@1wqP6leH97c9V8OmPI9!+Baf=c~LFUWXi~e8;oFWaKFD4&J4!z%OnU<#iq$tiw5*EsU>QN%Ov9%FJbmXH#mDPckv{M8@Q z`{G+*mEQvEBVt{Ou>K&6Bx5Z63gy8IB$~7NS zAEUtdWqKF6&J%kfQeYueAdM1cc_~B*DjrzMw9L~oiR9myNa2$dKK%>lZl`c1i38a_ zBV^DLKhnXYI+Li*=5ry*{E2;>R8W0IYWgRx_R2FwQVE~b4Eqvj(z=Q)Hfg)h*)2BP zHoN6PL@0}~kkGjpp_z!#Oh`zf*HwxXq<_9(%fiD - - + + - - - + + + diff --git a/task4/task4.iml b/task4/task4.iml index 2394831..d140331 100644 --- a/task4/task4.iml +++ b/task4/task4.iml @@ -11,12 +11,12 @@ - - + + - - - + + + From 4cdc16ae66133330c34c17d57858b1fa0cdb17cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=88=D0=B8=D0=BD=20=D0=9C=D0=B8=D1=85=D0=B0?= =?UTF-8?q?=D0=B8=D0=BB?= Date: Thu, 20 Feb 2020 11:33:04 +0300 Subject: [PATCH 02/10] =?UTF-8?q?1=D0=B9=20=D1=82=D0=B5=D1=81=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework.db | Bin 40960 -> 40960 bytes task2/src/main/java/A.java | 14 +-- task2/src/main/java/DBClass.java | 49 ++++----- task2/src/main/java/DBUtility.java | 154 ++++++++++++++++------------- task2/src/test/java/DBTests.java | 2 +- 5 files changed, 119 insertions(+), 100 deletions(-) diff --git a/homework.db b/homework.db index 255eaf10c54304da1b5b6b3e2e802fa267391f70..636aeabb5a02a9b2c6bbf5e0208cb1d20f95c503 100644 GIT binary patch delta 162 zcmZoTz|?SnX@az10RsaA7Z9@oF(VMyP1G@#FJRC!QQ+lS&A`DE&BQ;OPnoxjzl?7c zUoB5G&mUg<&4vPr+>`HfpJxo5yq?FGvqFPiTw0p3(S7nU9@WWGy!;xDo(cip3ZXg* zx%nxnISQVBA+GMOK{^V_`8oMT3L&l$Avy{rl?ADr6M2^_Z5DR8%Rg~~8Z!(3$IXHc M_xU%!^%o8R0A#Ez!2kdN delta 257 zcmZoTz|?SnX@az11_J{F7Z9@oF%uA%Pt-A%&tT9qu;S%e&A`qR&BQ;OPnoxjzl?7c zUoB5G&ud=$&4vPr+>`HfpJzNhc|DKs selectExpensivePC(Statement stmt){ - //todo - return null; - } - - /* - * Метод должен вернуть список id ноутов, скорость процессора - * которых выше чем 2500 - */ - - public ArrayList selectQuickLaptop(Statement stmt) { - // TODO: 16.12.2019 - return null; - } - - /* - * Метод должен вернуть список производителей которые - * делают и пк и ноутбуки - */ - public ArrayList selectMaker(Statement stmt){ - ArrayList ans = new ArrayList<>(); - // TODO: 18.02.2020 - return ans; - } - - /* - * Метод должен вернуть максимальную среди всех произодителей - * суммарную стоимость всех изделий типов ноутбук или компьютер, - * произведенных одним производителем - * Необходимо объединить таблицы продуктов ноутбуков и компьютеров - * и отгрупировать по сумме прайсов после чего выбрать максимум - * или сделать любым другим способом - */ - - public int makerWithMaxProceeds(Statement stmt){ - int result = 0; - //todo - return result; - + /* + * Каждый из тасков решается одним SQL запросом + */ + + /* + Создать таблицу принтеры, Printer(id INTEGER AI PK U, model INTEGER, color TEXT, type TEXT, price INTEGER) + добавить в нее 3 записи: + 1 1012 col laser 20000 (производитель HP) + 2 1010 bw jet 5000 (производитель Canon) + 3 1010 bw jet 5000 (производитель Canon) + Каждая вставка в таблицу принтер должна отражаться добавлением записи в таблицу продукт + */ + + public void createPrinterTable(Connection con, Statement stmt) throws SQLException { + String query = + "create table if not exists Printer(id INTEGER AI PK U, model INTEGER, color TEXT, type TEXT, price INTEGER)"; + stmt.execute(query); + AddPrinters(stmt); + } + + void AddPrinters(Statement stmt) throws SQLException { + String addPrinter1 = + "INSERT INTO Printer(id, model, color, type, price) VALUES(1, 1012, 'col', 'laser', 20000);"; + String addPrinter2 = + "INSERT INTO Printer(id, model, color, type, price) VALUES(2, 1010, 'bw', 'jet', 5000);"; + String addPrinter3 = + "INSERT INTO Printer(id, model, color, type, price) VALUES(3, 1010, 'bw', 'jet', 5000);"; + stmt.addBatch(addPrinter1); + stmt.addBatch(addPrinter2); + stmt.addBatch(addPrinter3); + stmt.executeBatch(); + } + + /* + * Метод должен вернуть список уникальных моделей PC дороже 15 тысяч + */ + + public ArrayList selectExpensivePC(Statement stmt) throws SQLException { + ArrayList result = new ArrayList<>(); + try (ResultSet resultSet = + stmt.executeQuery("select distinct model from PC where price > 15000")) { + while (resultSet.next()) { + result.add(resultSet.getString(1)); + } } + return result; + } + + /* + * Метод должен вернуть список id ноутов, скорость процессора + * которых выше чем 2500 + */ + + public ArrayList selectQuickLaptop(Statement stmt) { + // TODO: 16.12.2019 + return null; + } + + /* + * Метод должен вернуть список производителей которые + * делают и пк и ноутбуки + */ + public ArrayList selectMaker(Statement stmt) { + ArrayList ans = new ArrayList<>(); + // TODO: 18.02.2020 + return ans; + } + + /* + * Метод должен вернуть максимальную среди всех произодителей + * суммарную стоимость всех изделий типов ноутбук или компьютер, + * произведенных одним производителем + * Необходимо объединить таблицы продуктов ноутбуков и компьютеров + * и отгрупировать по сумме прайсов после чего выбрать максимум + * или сделать любым другим способом + */ + + public int makerWithMaxProceeds(Statement stmt) { + int result = 0; + // todo + return result; + } } diff --git a/task2/src/test/java/DBTests.java b/task2/src/test/java/DBTests.java index 30c648f..1e264a5 100644 --- a/task2/src/test/java/DBTests.java +++ b/task2/src/test/java/DBTests.java @@ -47,7 +47,7 @@ public void testTable() throws SQLException { } @Test - public void testExpensivePC() { + public void testExpensivePC() throws SQLException { ArrayList list = util.selectExpensivePC(stmt); list.sort(Comparator.comparing(o -> o)); Assert.assertArrayEquals(new String[] {"2205", "2210"}, list.toArray()); From 6aafa686f7a5ad7a1dc895e1b828d35d0c06063c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=88=D0=B8=D0=BD=20=D0=9C=D0=B8=D1=85=D0=B0?= =?UTF-8?q?=D0=B8=D0=BB?= Date: Thu, 20 Feb 2020 14:23:50 +0300 Subject: [PATCH 03/10] =?UTF-8?q?2-=D0=B5=20=D0=B4=D0=BE=D0=BC=D0=B0=D1=88?= =?UTF-8?q?=D0=BD=D0=B5=D0=B5=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework.db | Bin 40960 -> 40960 bytes task2/src/main/java/DBUtility.java | 50 +++++++++++++++++++++--- task2/src/test/java/DBTests.java | 6 ++- task2/target/classes/DBClass.class | Bin 2531 -> 2535 bytes task2/target/classes/DBUtility.class | Bin 1352 -> 4643 bytes task2/target/test-classes/DBTests.class | Bin 4101 -> 4145 bytes 6 files changed, 49 insertions(+), 7 deletions(-) diff --git a/homework.db b/homework.db index 636aeabb5a02a9b2c6bbf5e0208cb1d20f95c503..354419fa949637c18f319fe29e00b1713d4192f7 100644 GIT binary patch delta 111 zcmZoTz|?SnX@a!ias~zlE+A$FVn!gIGEv8varwrCCHh><{3jUr-|*k!Ke1WRU>CoI z05cmSlb|pYGxMjU@~qSn;SK>NhzJv0M2L}%lSx>diTO)%eojteacYsD!Xk$R0LtAP A$N&HU delta 51 zcmZoTz|?SnX@az10RsaA7Z9@oF(VMyP1G@FEZCT^M4yR4V6&jZeg26P)HZWFe2oVH DC@u{l diff --git a/task2/src/main/java/DBUtility.java b/task2/src/main/java/DBUtility.java index d2d5fcd..4a65454 100644 --- a/task2/src/main/java/DBUtility.java +++ b/task2/src/main/java/DBUtility.java @@ -42,13 +42,15 @@ void AddPrinters(Statement stmt) throws SQLException { * Метод должен вернуть список уникальных моделей PC дороже 15 тысяч */ - public ArrayList selectExpensivePC(Statement stmt) throws SQLException { + public ArrayList selectExpensivePC(Statement stmt) { ArrayList result = new ArrayList<>(); try (ResultSet resultSet = stmt.executeQuery("select distinct model from PC where price > 15000")) { while (resultSet.next()) { result.add(resultSet.getString(1)); } + } catch (SQLException e) { + e.printStackTrace(); } return result; } @@ -59,8 +61,17 @@ public ArrayList selectExpensivePC(Statement stmt) throws SQLException { */ public ArrayList selectQuickLaptop(Statement stmt) { - // TODO: 16.12.2019 - return null; + ArrayList result = new ArrayList<>(); + try { + try (ResultSet resultSet = stmt.executeQuery("select id from laptop l where speed > 2500")) { + while (resultSet.next()) { + result.add(resultSet.getInt(1)); + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + return result; } /* @@ -69,7 +80,16 @@ public ArrayList selectQuickLaptop(Statement stmt) { */ public ArrayList selectMaker(Statement stmt) { ArrayList ans = new ArrayList<>(); - // TODO: 18.02.2020 + try { + try (ResultSet resultSet = + stmt.executeQuery("select distinct maker from product p group by type")) { + while (resultSet.next()) { + ans.add(resultSet.getString(1)); + } + } + } catch (SQLException e) { + e.printStackTrace(); + } return ans; } @@ -84,7 +104,27 @@ public ArrayList selectMaker(Statement stmt) { public int makerWithMaxProceeds(Statement stmt) { int result = 0; - // todo + try { + try (ResultSet resultSet = + stmt.executeQuery( + "SELECT MAX(s)\n" + + "FROM (SELECT p.maker,\n" + + " SUM(COALESCE(k.price,COALESCE(l.price,0))) s\n" + + " FROM (SELECT DISTINCT * FROM product pp) p\n" + + " LEFT JOIN pc k\n" + + " ON k.model = p.model\n" + + " AND p.\"type\" = 'PC'\n" + + " LEFT JOIN laptop l\n" + + " ON l.model = p.model\n" + + " AND p.\"type\" = 'Laptop'\n" + + " GROUP BY p.maker)")) { + while (resultSet.next()) { + result = resultSet.getInt(1); + } + } + } catch (SQLException e) { + e.printStackTrace(); + } return result; } } diff --git a/task2/src/test/java/DBTests.java b/task2/src/test/java/DBTests.java index 1e264a5..8b9d0ac 100644 --- a/task2/src/test/java/DBTests.java +++ b/task2/src/test/java/DBTests.java @@ -19,7 +19,9 @@ public void starter() { try { util = new DBUtility(); Class.forName("org.sqlite.JDBC"); - con = DriverManager.getConnection("jdbc:sqlite:homework.db"); + con = + DriverManager.getConnection( + "jdbc:sqlite:C:\\Users\\MishinMV\\Documents\\DEV\\Java3-1\\homework.db"); stmt = con.createStatement(); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); @@ -47,7 +49,7 @@ public void testTable() throws SQLException { } @Test - public void testExpensivePC() throws SQLException { + public void testExpensivePC() { ArrayList list = util.selectExpensivePC(stmt); list.sort(Comparator.comparing(o -> o)); Assert.assertArrayEquals(new String[] {"2205", "2210"}, list.toArray()); diff --git a/task2/target/classes/DBClass.class b/task2/target/classes/DBClass.class index a7506c5a89df3e96fbab20d9a1311fa34f682753..29d826bf81cd7e220b832c8dce308bdcb188cc01 100644 GIT binary patch delta 108 zcmaDX{9Jg$9Ck+L$#dD|8AUelWjACD4q^~tU|?WpU}NB5;9=lo5N6_hS%dU|`^6U}NB7;9%fp-~mEm23`g+20jKU z27U%-1_1_l20?}l1|fzbpv*)D5r(xudNWYP9tH`9V+@iEFBzm5B^e|bRu(cgG8p4J%?2k$0)YTyHw7CTgs??~_>chOkEDyVfMAj2)yhEX z#BE)grcEauUv#GTonboDi}uE;+nMGr7yTuj=|%rR+~@4BRwCdwO`FbCGupG~J@3bJ z&hx(S*}r`L$3FuY#*h8DfLR~rnlXFFA$~`^eOHF+M-ZzrvVOE7=YuBXYksU_!-u>Nn=-a!=n|T)<_mdqOhQ8_yd=RJ zE9Nu_r;_=Cma1&8YDPv~)hP)ki&<4)QjNTrJ3_CykuOVVPEJlNnt45M?u}A2YiO#e z%^CTE>6%AE$xZd48ZAH2qp@P4pk>W`u`pT_rcK&xYXx&uz-Y)83liFE%XKycSvI## z32n9Inze++2NliO6Ns&dx>{I|rcI(*Cpdq6H>;IIY=L_`mvdlp)=>ws=1-t$R$aZp zL$jenvr7_M%bL!u#dk|up`3rH&BY}29`DyiSK+Zm#|=Z>OXkZa0iH0laz!`O+Tjf@ zRHamrNJmHA-sh9FUu_9AlJ|JfZB?j9RiXfjKE- zn^|XNRe@>8jimGI1=Xw=M0@?qAHhrFIR`sm$!E8cYRN2?B=r0%ya^`Yx@L?Dz&E}c zgnAdvHn}tEmS!+TRgpq%+hVqyH#cU~-8rL})wJBpb16ac`1hxa6(g%nt7?U16apxs6hI&PCEQ7*((#3iSe~tm<@k1d+U_EX zCj+A85|fKiYVO-+|5B(%bLNLp#lEFq+#i+JEvPZAE4LO9pQUZGdW!T z&mCX-CyoPn03(1hSdM3`esZ{;Bn;YFq2$O-zK}H?3f7F`wlWt}b~ZFavyVv`Qw9ax z04jLMdI?|$y8-Os-2lFaM*+Min75-?T`RL;6n8`d1n@o{v!dM=ny#z)0KPBmdK?_g z3M;m5Rf(cI2+Ad9CJ_t~K>$C%4`nj50HRJ5&z)rxs>sl#nAU^;=aD@hkPe^x{k?Hanh-r(^NZR=<@w5m%r) zf`M>2tdt$gLtZBn=}aQUkUfeeccGQSO34kCj8A2h>Dfd|DP@%{SL^_pO(|Rbc8y$9 z2vbzc7j(u`lU(T%)zYP0Q@ZD3-L6K>dG&PNrCI>}-wa^4vuco=3$u%J%EXF5Cuj(> zle!&3!s*(bHoLmXtA_WSn-%UQQ7?3_G6}M_t7R)Dn@+pa4eKw*@Er+0-gFbHncaAa z3NOQeXrAc}2A<=j2PtX9 zOS~--euZG9kC0D!@C>Jy4_^GO?=#%)^nQkORA`lOfa#IOPH$)9Gn_fVSXFqL!p0Gb zKOJeJ#l=Gw?ISWRWXs}&ZPD5E=>dGHzGrBU{El0=j8Tm73%!ld)6RI0P}i}I66a~W z&F^&({yu&}Ew7a!S8$TDeoCVxc7O*M<=P;Rb%=h3X%(f_Fm0~TY8W3f&d>2}_h4IL zQhJ%k@*zE5;Yx!z9`~?6b`INz5AY_w!($xby2wRaGD^u+O6Cyw9BneL$rzJyysJi^@nU*Ro~whReeWZ`8<-xBFtX5p={@G>mC6&Bt-Qh0~ub(e*AzmC2yUwDZl zg_mHn`1%WP8gG$AUNO=Kj3)Z#e#5oi;Q1rOwTOnvio163;_qL3tzGynyJatX+%RjZ zh54Rv#svbrk1WdRR_zAsAE Lt|(!~+EwZwJ7eds literal 1352 zcmbVMT~8B16uq-8Ei8!0SN*7piV8^RiyD(6hzN$H)fyDzi^;H^l!5JTot+Z;pM20K z5>5O8{wU*_*>zb$Nr;>5%-)%M&pG#_{r%_1FCuzO3oZ@NgCae2$uav}k>(i{mSrII z3ZvZI{0^i1de{_4@G00(W4AOMs1AHMT(U*rFgF?PT0EMO`Z5}`9=5=5clXg`x9(Q$7!u^Y~O?s@qu_P81`+Xk%H8Mb`NmQUCmc-*CXSQ*XQ==*;G DK`RJ~ diff --git a/task2/target/test-classes/DBTests.class b/task2/target/test-classes/DBTests.class index 0c796eac561868ca5f5661bcc56a1a957376b3dd..69f18ead37db3bf0578cc04cdc6ca912b42b83e7 100644 GIT binary patch delta 242 zcmZow*r>4K9J8r?R!UN`RdHcXW=X1*vsFxJacWUse1jAoOM^VQpDM;h89@$-o0tDGgMq z&Y;7f$)L+%!Jx Date: Mon, 24 Feb 2020 13:14:43 +0300 Subject: [PATCH 04/10] =?UTF-8?q?=D0=A7=D0=B8=D1=81=D1=82=D0=BE=D0=B5=203-?= =?UTF-8?q?=D0=B5=20=D0=B4=D0=BE=D0=BC=D0=B0=D1=88=D0=BD=D0=B5=D0=B5=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task3/src/main/java/FileUtility.java | 144 ++++++++++----------------- task3/task3.iml | 10 +- task4/task4.iml | 10 +- 3 files changed, 63 insertions(+), 101 deletions(-) diff --git a/task3/src/main/java/FileUtility.java b/task3/src/main/java/FileUtility.java index 39b4c64..047db42 100644 --- a/task3/src/main/java/FileUtility.java +++ b/task3/src/main/java/FileUtility.java @@ -3,96 +3,58 @@ public class FileUtility { - /* - * Структура файла ввода: в первой строке одно целое число - N - * далее следует N целых чисел через пробел - * Метод должен отсортировать элементы с четным значением, - * а нечетные оставить на своих местах и вывести результат через пробел в файл вывода - * Пример: - * in: - * 5 - * 5 4 2 1 3 // 2 4 - * out: - * 5 2 4 1 3 - */ - - public void sortEvenElements(File in, File out) { - //TODO - try { - Scanner cin = new Scanner(in); - int n = cin.nextInt(); - int [] a = new int[n]; - LinkedList even = new LinkedList<>(); - for (int i = 0; i < n; i++) { - a[i] = cin.nextInt(); - if (a[i] % 2 == 0) { - even.add(a[i]); //O(1) - //O(n) - } - } - Collections.sort(even); - for (int i = 0; i < n; i++) { - if (a[i] % 2 == 0) { - a[i] = even.pollFirst(); //O(1) - } - } - FileWriter writer = new FileWriter(out); - for (int i = 0; i < n; i++) { - writer.write(a[i] + " "); - } - writer.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - /* - * Генератор паролей, пароль должен отвечать требованиям: - * длина не менее 6 и не более 12, включает минимум по одному символу - * из наборов: a-z, A-Z, 0-9, {*,!,%} - * все пароли должны быть разными - * На вход метод получает файл с логинами пользователей - * Метод должен записать в файл вывода записи с логинами и паролями - * для каждого пользователя - */ - - public void passwordGen(File in, File out) { - //TODO - - } - - /* - * Метод должен дописать в переданный файл все - * записи из списка по одной записи в строке - * */ - public void appender(File file, List records) { - //SOLID - //LISKOV - - - - try (FileWriter writer = new FileWriter(file, true)) { - for(String str : records) { - writer.write(str + "\n"); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - - /* - * Метод возвращает список из N последних строк файла - * строки можно дополнять пробелами до длины 80 - * тогда количество символов в файле будет предсказуемо - * 10 строк это ровно 800 символов - * Изучите класс RandomAccessFile для эффективного решения данной - * задачи - * Альтернативное решение: использование очереди или стека - * */ - public List getNString(String pathToFile, int n) { - //TODO - // \n \r, \n - return null; - } + /* + * Структура файла ввода: в первой строке одно целое число - N + * далее следует N целых чисел через пробел + * Метод должен отсортировать элементы с четным значением, + * а нечетные оставить на своих местах и вывести результат через пробел в файл вывода + * Пример: + * in: + * 5 + * 5 4 2 1 3 // 2 4 + * out: + * 5 2 4 1 3 + */ + public void sortEvenElements(File in, File out) { + //TODO + + } + + /* + * Генератор паролей, пароль должен отвечать требованиям: + * длина не менее 6 и не более 12, включает минимум по одному символу + * из наборов: a-z, A-Z, 0-9, {*,!,%} + * все пароли должны быть разными + * На вход метод получает файл с логинами пользователей + * Метод должен записать в файл вывода записи с логинами и паролями + * для каждого пользователя + */ + + public void passwordGen(File in, File out) { + //TODO + + } + + /* + * Метод должен дописать в переданный файл все + * записи из списка по одной записи в строке + * */ + public void appender(File file, List records) { + + } + + /* + * Метод возвращает список из N последних строк файла + * строки можно дополнять пробелами до длины 80 + * тогда количество символов в файле будет предсказуемо + * 10 строк это ровно 800 символов + * Изучите класс RandomAccessFile для эффективного решения данной + * задачи + * Альтернативное решение: использование очереди или стека + * */ + public List getNString(String pathToFile, int n) { + //TODO + return null; + } } diff --git a/task3/task3.iml b/task3/task3.iml index 2a3c5ba..2b9ae0b 100644 --- a/task3/task3.iml +++ b/task3/task3.iml @@ -13,12 +13,12 @@ - - + + - - - + + + diff --git a/task4/task4.iml b/task4/task4.iml index 2394831..d140331 100644 --- a/task4/task4.iml +++ b/task4/task4.iml @@ -11,12 +11,12 @@ - - + + - - - + + + From d595e2b90ab2a6f18e62e9803d17913b9d38869a Mon Sep 17 00:00:00 2001 From: Mikhail Mishin Date: Mon, 24 Feb 2020 13:20:26 +0300 Subject: [PATCH 05/10] =?UTF-8?q?=D0=A7=D0=B8=D1=81=D1=82=D0=BE=D0=B5=203-?= =?UTF-8?q?=D0=B5=20=D0=B4=D0=BE=D0=BC=D0=B0=D1=88=D0=BD=D0=B5=D0=B5=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=9E=D0=B1=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=B8=D0=BB=20=D1=82=D0=B5=D1=81=D1=82=D1=8B=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/checkstyle-idea.xml | 16 ++ ...org_junit_jupiter_junit_jupiter_5_6_0.xml} | 8 +- ...junit_jupiter_junit_jupiter_api_5_6_0.xml} | 8 +- ...it_jupiter_junit_jupiter_engine_5_6_0.xml} | 8 +- ...platform_junit_platform_commons_1_6_0.xml} | 8 +- ..._platform_junit_platform_engine_1_6_0.xml} | 8 +- .idea/misc.xml | 2 +- .idea/vcs.xml | 5 + task3/src/main/java/classwork/FileSystem.java | 16 +- task3/src/test/java/FileTests.java | 185 +++++++++--------- 10 files changed, 141 insertions(+), 123 deletions(-) create mode 100644 .idea/checkstyle-idea.xml rename .idea/libraries/{Maven__org_junit_jupiter_junit_jupiter_5_6_0_RC1.xml => Maven__org_junit_jupiter_junit_jupiter_5_6_0.xml} (57%) rename .idea/libraries/{Maven__org_junit_jupiter_junit_jupiter_api_5_6_0_RC1.xml => Maven__org_junit_jupiter_junit_jupiter_api_5_6_0.xml} (65%) rename .idea/libraries/{Maven__org_junit_jupiter_junit_jupiter_engine_5_6_0_RC1.xml => Maven__org_junit_jupiter_junit_jupiter_engine_5_6_0.xml} (64%) rename .idea/libraries/{Maven__org_junit_platform_junit_platform_commons_1_6_0_RC1.xml => Maven__org_junit_platform_junit_platform_commons_1_6_0.xml} (63%) rename .idea/libraries/{Maven__org_junit_platform_junit_platform_engine_1_6_0_RC1.xml => Maven__org_junit_platform_junit_platform_engine_1_6_0.xml} (63%) diff --git a/.idea/checkstyle-idea.xml b/.idea/checkstyle-idea.xml new file mode 100644 index 0000000..21a0f73 --- /dev/null +++ b/.idea/checkstyle-idea.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_6_0_RC1.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_6_0.xml similarity index 57% rename from .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_6_0_RC1.xml rename to .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_6_0.xml index f8bf2aa..7efb7ad 100644 --- a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_6_0_RC1.xml +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_6_0.xml @@ -1,13 +1,13 @@ - + - + - + - + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_6_0_RC1.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_6_0.xml similarity index 65% rename from .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_6_0_RC1.xml rename to .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_6_0.xml index 4d72560..be380a5 100644 --- a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_6_0_RC1.xml +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_6_0.xml @@ -1,13 +1,13 @@ - + - + - + - + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_6_0_RC1.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_6_0.xml similarity index 64% rename from .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_6_0_RC1.xml rename to .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_6_0.xml index 1d54e61..227bc44 100644 --- a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_6_0_RC1.xml +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_6_0.xml @@ -1,13 +1,13 @@ - + - + - + - + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_6_0_RC1.xml b/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_6_0.xml similarity index 63% rename from .idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_6_0_RC1.xml rename to .idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_6_0.xml index a5016bb..8e5d3f2 100644 --- a/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_6_0_RC1.xml +++ b/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_6_0.xml @@ -1,13 +1,13 @@ - + - + - + - + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_6_0_RC1.xml b/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_6_0.xml similarity index 63% rename from .idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_6_0_RC1.xml rename to .idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_6_0.xml index a74d90f..2f36d10 100644 --- a/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_6_0_RC1.xml +++ b/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_6_0.xml @@ -1,13 +1,13 @@ - + - + - + - + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 24b5a2d..d6091e9 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -19,7 +19,7 @@ - + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 94a25f7..78cface 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,5 +1,10 @@ + + + + + diff --git a/task3/src/main/java/classwork/FileSystem.java b/task3/src/main/java/classwork/FileSystem.java index 3f3052c..fd135cd 100644 --- a/task3/src/main/java/classwork/FileSystem.java +++ b/task3/src/main/java/classwork/FileSystem.java @@ -1,20 +1,12 @@ package classwork; -import jdk.management.resource.internal.inst.FileInputStreamRMHooks; - -import java.io.*; -import java.lang.reflect.Field; -import java.nio.charset.StandardCharsets; -import java.util.Arrays; -import java.util.LinkedList; -import java.util.List; -import java.util.Scanner; -import java.util.stream.Collectors; -import java.util.stream.Stream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; public class FileSystem { - static String path = "C:\\Users\\Mikhail\\IdeaProjects\\Java31\\task3\\src\\main\\java\\classwork"; + static String path = "D:\\Projects\\Java3-1\\task3\\src\\main\\resources"; public static void main(String[] args) throws IOException, ClassNotFoundException { //System.out.println(Arrays.toString(File.listRoots())); File file = new File(path + "1.txt"); diff --git a/task3/src/test/java/FileTests.java b/task3/src/test/java/FileTests.java index afb75fe..2d94a77 100644 --- a/task3/src/test/java/FileTests.java +++ b/task3/src/test/java/FileTests.java @@ -5,108 +5,113 @@ import java.io.File; import java.io.FileNotFoundException; -import java.util.*; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Scanner; @DisplayName("Home work 3") public class FileTests { - FileUtility util; - String pathToResource; + FileUtility util; + String pathToResource; - @Before - public void starter(){ - //change your path - pathToResource = "C:\\Users\\Mikhail\\IdeaProjects\\Java31\\task3\\src\\main\\resources\\"; - util = new FileUtility(); - } + @Before + public void starter() { + //change your path + pathToResource = "D:\\Projects\\Java3-1\\task3\\src\\main\\resources"; + util = new FileUtility(); + } - @Test - public void testSort(){ - File input = new File(pathToResource + "array.txt"); - File output = new File(pathToResource + "arrayout.txt"); - util.sortEvenElements(input, output); - int [] arr = new int[]{4, 8, 5, 7, 10, 9, 7, 12, 11, 14}; - try { - Scanner in = new Scanner(output); - int pos = 0; - while (in.hasNext()){ - int x = in.nextInt(); - Assert.assertEquals(arr[pos++], x); - } - Assert.assertEquals(10, pos); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } + @Test + public void testSort() { + File input = new File(pathToResource + "array.txt"); + File output = new File(pathToResource + "arrayout.txt"); + util.sortEvenElements(input, output); + int[] arr = new int[]{4, 8, 5, 7, 10, 9, 7, 12, 11, 14}; + try { + Scanner in = new Scanner(output); + int pos = 0; + while (in.hasNext()) { + int x = in.nextInt(); + Assert.assertEquals(arr[pos++], x); + } + Assert.assertEquals(10, pos); + } catch (FileNotFoundException e) { + e.printStackTrace(); } + } - private boolean check(String pass){ - int c1 = 0, c2 = 0, c3 = 0, c4 = 0; - for (int i = 0; i < pass.length(); i++) { - if(pass.charAt(i) >= 'a' && pass.charAt(i) <= 'z'){ - c1++; - } - if(pass.charAt(i) >= 'A' && pass.charAt(i) <= 'Z'){ - c2++; - } - if(pass.charAt(i) >= '0' && pass.charAt(i) <= '9'){ - c3++; - } - if(pass.charAt(i) == '*' || pass.charAt(i) == '!' || - pass.charAt(i) == '%'){ - c4++; - } - } - return pass.length() > 5 && pass.length() < 13 && c1 > 0 && c2 > 0 && c3 > 0 && c4 > 0; + @Test + public void testPassGen() { + File input = new File(pathToResource + "login.txt"); + File output = new File(pathToResource + "pass.txt"); + util.passwordGen(input, output); + HashSet set = new HashSet<>(); + try { + Scanner in = new Scanner(output); + while (in.hasNextLine()) { + String pass = in.nextLine() + .split(" ")[1]; + Assert.assertTrue(check(pass)); + set.add(pass); + } + } catch (FileNotFoundException e) { + e.printStackTrace(); } + Assert.assertEquals(7, set.size()); + } - @Test - public void testPassGen(){ - File input = new File(pathToResource + "login.txt"); - File output = new File(pathToResource + "pass.txt"); - util.passwordGen(input, output); - HashSet set = new HashSet<>(); - try { - Scanner in = new Scanner(output); - while (in.hasNextLine()){ - String pass = in.nextLine().split(" ")[1]; - Assert.assertTrue(check(pass)); - set.add(pass); - } - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - Assert.assertEquals(7, set.size()); + private boolean check(String pass) { + int c1 = 0, c2 = 0, c3 = 0, c4 = 0; + for (int i = 0; i < pass.length(); i++) { + if (pass.charAt(i) >= 'a' && pass.charAt(i) <= 'z') { + c1++; + } + if (pass.charAt(i) >= 'A' && pass.charAt(i) <= 'Z') { + c2++; + } + if (pass.charAt(i) >= '0' && pass.charAt(i) <= '9') { + c3++; + } + if (pass.charAt(i) == '*' || pass.charAt(i) == '!' || + pass.charAt(i) == '%') { + c4++; + } } + return pass.length() > 5 && pass.length() < 13 && c1 > 0 && c2 > 0 && c3 > 0 && c4 > 0; + } - @Test - public void testAppend(){ - File file = new File(pathToResource + "append.txt"); - ArrayList list = new ArrayList<>(); - for (int i = 4; i < 11; i++) { - list.add("str" + i); - } - util.appender(file, list); - try { - Scanner in = new Scanner(file); - int pos = 1; - while (in.hasNextLine()){ - String line = in.nextLine(); - Assert.assertEquals(line, "str" + pos); - pos++; - } - Assert.assertEquals(11, pos); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } + @Test + public void testAppend() { + File file = new File(pathToResource + "append.txt"); + ArrayList list = new ArrayList<>(); + for (int i = 4; i < 11; i++) { + list.add("str" + i); + } + util.appender(file, list); + try { + Scanner in = new Scanner(file); + int pos = 1; + while (in.hasNextLine()) { + String line = in.nextLine(); + Assert.assertEquals(line, "str" + pos); + pos++; + } + Assert.assertEquals(11, pos); + } catch (FileNotFoundException e) { + e.printStackTrace(); } + } - @Test - public void testNLines(){ - List list = - util.getNString(pathToResource + "file.txt", 100); - for (int i = 0; i < 100; i++) { - Assert.assertEquals("Oleg message " + (i + 900), - list.get(i).trim()); - } + @Test + public void testNLines() { + List list = + util.getNString(pathToResource + "file.txt", 100); + for (int i = 0; i < 100; i++) { + Assert.assertEquals("Oleg message " + (i + 900), + list.get(i) + .trim()); } -} + } +} \ No newline at end of file From 698e3f35dfca3bd32302aaf6b0dd9287ca5db132 Mon Sep 17 00:00:00 2001 From: Mikhail Mishin Date: Mon, 24 Feb 2020 14:15:06 +0300 Subject: [PATCH 06/10] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20so?= =?UTF-8?q?rtEvenElements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task3/src/main/java/FileUtility.java | 44 +++++++++++++++++++++++++-- task3/src/main/resources/arrayout.txt | 1 - task3/src/test/java/FileTests.java | 2 +- 3 files changed, 43 insertions(+), 4 deletions(-) delete mode 100644 task3/src/main/resources/arrayout.txt diff --git a/task3/src/main/java/FileUtility.java b/task3/src/main/java/FileUtility.java index 047db42..8676670 100644 --- a/task3/src/main/java/FileUtility.java +++ b/task3/src/main/java/FileUtility.java @@ -1,5 +1,7 @@ import java.io.*; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; public class FileUtility { @@ -16,7 +18,45 @@ public class FileUtility { * 5 2 4 1 3 */ public void sortEvenElements(File in, File out) { - //TODO + String[] numbers = new String[0]; + + try (BufferedReader reader = new BufferedReader(new FileReader(in))) { + int inputSize = Integer.parseInt(reader.readLine()); + numbers = reader + .readLine() + .split(" "); + + // Adding even numbers to ArrayList + ArrayList evens = new ArrayList<>(); + for (int i = 0; i < inputSize; i++) { + int currentItem = Integer.parseInt(numbers[i]); + if ((currentItem % 2) == 0) { + evens.add(currentItem); + // Replacing even number with % symbol + numbers[i] = "%"; + } + } + Collections.sort(evens); // Сортируем четные числа + + int j = 0; + for (int i = 0; i < inputSize; i++) + if (numbers[i].equals("%")) { + numbers[i] = String.valueOf( + // Восстанавливаем начальный массив отсортированными четными числами + evens.get(j++)); + } + } catch (IOException e) { + e.printStackTrace(); + } + + // Записываем полученный массив в файл + try (BufferedWriter writer = new BufferedWriter(new FileWriter(out))) { + for (final String number : numbers) { + writer.write(number + " "); + } + } catch (IOException e) { + e.printStackTrace(); + } } diff --git a/task3/src/main/resources/arrayout.txt b/task3/src/main/resources/arrayout.txt deleted file mode 100644 index 8cb9809..0000000 --- a/task3/src/main/resources/arrayout.txt +++ /dev/null @@ -1 +0,0 @@ -4 8 5 7 10 9 7 12 11 14 \ No newline at end of file diff --git a/task3/src/test/java/FileTests.java b/task3/src/test/java/FileTests.java index 2d94a77..79b51ef 100644 --- a/task3/src/test/java/FileTests.java +++ b/task3/src/test/java/FileTests.java @@ -19,7 +19,7 @@ public class FileTests { @Before public void starter() { //change your path - pathToResource = "D:\\Projects\\Java3-1\\task3\\src\\main\\resources"; + pathToResource = "D:\\Projects\\Java3-1\\task3\\src\\main\\resources\\"; util = new FileUtility(); } From da609df6005d5df47f498d0464620364e904e378 Mon Sep 17 00:00:00 2001 From: Mikhail Mishin Date: Mon, 24 Feb 2020 15:09:05 +0300 Subject: [PATCH 07/10] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20pa?= =?UTF-8?q?sswordGen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task3/src/main/java/FileUtility.java | 59 ++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 3 deletions(-) diff --git a/task3/src/main/java/FileUtility.java b/task3/src/main/java/FileUtility.java index 8676670..2c1bc58 100644 --- a/task3/src/main/java/FileUtility.java +++ b/task3/src/main/java/FileUtility.java @@ -1,7 +1,9 @@ import java.io.*; import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; import java.util.List; +import java.util.concurrent.ThreadLocalRandom; public class FileUtility { @@ -21,10 +23,10 @@ public void sortEvenElements(File in, File out) { String[] numbers = new String[0]; try (BufferedReader reader = new BufferedReader(new FileReader(in))) { - int inputSize = Integer.parseInt(reader.readLine()); + int inputSize = Integer.parseInt(reader.readLine()); // Reading 1st line numbers = reader .readLine() - .split(" "); + .split(" "); // Reading second line // Adding even numbers to ArrayList ArrayList evens = new ArrayList<>(); @@ -71,10 +73,61 @@ public void sortEvenElements(File in, File out) { */ public void passwordGen(File in, File out) { - //TODO + HashSet passwords = new HashSet<>(); + try (BufferedReader bufferedReader = new BufferedReader(new FileReader(in)); + BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(out)); + ) { + String line; + while ((line = bufferedReader.readLine()) != null) { + while (true) { + String password = genPassword(); + // Проверяем, что такого пароля еще нет + if (!passwords.contains(password)) { + passwords.add(password); + System.out.println(line + " " + password); + bufferedWriter.write(line + " " + password + "\n"); + break; + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } + private String genPassword() { + int passwordLength = ThreadLocalRandom + .current() + .nextInt(6, 12); + StringBuilder result = new StringBuilder(); + for (int i = 0; i < passwordLength; i++) { + // Вызываем по одному методу + if (i % 4 == 0) { + result.append(getPasswordSymbol("ABCDEFGHIJKLMNOPQRSTUVWXYZ")); + } else if (i % 4 == 1) { + result.append(getPasswordSymbol("abcdefghijklmnopqrstuvwxyz")); + } else if (i % 4 == 2) { + result.append(getPasswordSymbol("0123456789")); + } else { + result.append(getPasswordSymbol("*!%")); + } + } + return result.toString(); + } + + private char getPasswordSymbol(final String stringLine) { + char result = 0; + for (int j = 0; j < stringLine.length(); j++) { + result = stringLine.charAt(ThreadLocalRandom + .current() + .nextInt(stringLine.length())); + } + return result; + } + + /* * Метод должен дописать в переданный файл все * записи из списка по одной записи в строке From df72b152ab1dccafc4ddedb1770b6a6092fa225d Mon Sep 17 00:00:00 2001 From: Mikhail Mishin Date: Mon, 24 Feb 2020 15:55:50 +0300 Subject: [PATCH 08/10] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20ap?= =?UTF-8?q?pender?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/dictionaries/excen.xml | 7 +++++++ task3/pom.xml | 4 ++-- task3/src/main/java/FileUtility.java | 9 ++++++++- task3/src/main/resources/append.txt | 7 ------- task3/src/main/resources/pass.txt | 1 - task3/task3.iml | 2 +- 6 files changed, 18 insertions(+), 12 deletions(-) create mode 100644 .idea/dictionaries/excen.xml delete mode 100644 task3/src/main/resources/pass.txt diff --git a/.idea/dictionaries/excen.xml b/.idea/dictionaries/excen.xml new file mode 100644 index 0000000..0758436 --- /dev/null +++ b/.idea/dictionaries/excen.xml @@ -0,0 +1,7 @@ + + + + abcdefghijklmnopqrstuvwxyz + + + \ No newline at end of file diff --git a/task3/pom.xml b/task3/pom.xml index fb64987..9028b48 100644 --- a/task3/pom.xml +++ b/task3/pom.xml @@ -13,8 +13,8 @@ org.apache.maven.plugins maven-compiler-plugin - 8 - 8 + 11 + 11 diff --git a/task3/src/main/java/FileUtility.java b/task3/src/main/java/FileUtility.java index 2c1bc58..f531716 100644 --- a/task3/src/main/java/FileUtility.java +++ b/task3/src/main/java/FileUtility.java @@ -133,7 +133,14 @@ private char getPasswordSymbol(final String stringLine) { * записи из списка по одной записи в строке * */ public void appender(File file, List records) { - + try (BufferedWriter writer = new BufferedWriter(new FileWriter(file, true))) { + writer.newLine(); + for (String record : records) { + writer.write(record + "\n"); + } + } catch (IOException e) { + e.printStackTrace(); + } } /* diff --git a/task3/src/main/resources/append.txt b/task3/src/main/resources/append.txt index 3b7b424..44e1b76 100644 --- a/task3/src/main/resources/append.txt +++ b/task3/src/main/resources/append.txt @@ -1,10 +1,3 @@ str1 str2 str3 -str4 -str5 -str6 -str7 -str8 -str9 -str10 diff --git a/task3/src/main/resources/pass.txt b/task3/src/main/resources/pass.txt deleted file mode 100644 index 8b13789..0000000 --- a/task3/src/main/resources/pass.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/task3/task3.iml b/task3/task3.iml index 2b9ae0b..ef2de46 100644 --- a/task3/task3.iml +++ b/task3/task3.iml @@ -1,6 +1,6 @@ - + From dd646a7540a797945b9a8eb65221229f33545550 Mon Sep 17 00:00:00 2001 From: Mikhail Mishin Date: Mon, 24 Feb 2020 16:29:33 +0300 Subject: [PATCH 09/10] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=B4=D0=B7=203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task3/src/main/java/FileUtility.java | 42 ++++++++++++++++++++++++++-- task3/src/main/resources/append.txt | 2 +- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/task3/src/main/java/FileUtility.java b/task3/src/main/java/FileUtility.java index f531716..6570013 100644 --- a/task3/src/main/java/FileUtility.java +++ b/task3/src/main/java/FileUtility.java @@ -75,7 +75,7 @@ public void sortEvenElements(File in, File out) { public void passwordGen(File in, File out) { HashSet passwords = new HashSet<>(); try (BufferedReader bufferedReader = new BufferedReader(new FileReader(in)); - BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(out)); + BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(out)) ) { String line; while ((line = bufferedReader.readLine()) != null) { @@ -153,8 +153,44 @@ public void appender(File file, List records) { * Альтернативное решение: использование очереди или стека * */ public List getNString(String pathToFile, int n) { - //TODO - return null; + List tmpResult = new ArrayList<>(); + try (RandomAccessFile randomAccessFile = new RandomAccessFile(pathToFile, "r")) { + // lines number + int lines = 0; + // get file length + long length = randomAccessFile.length(); + // сюда будем считывать символы строк + StringBuilder builder = new StringBuilder(); + // нагуглил, что так надо + length--; + // seek to the end of file + randomAccessFile.seek(length); + // считываем строки с конца + for (long i = length; i >= 0; --i) { + randomAccessFile.seek(i); + // читаем символ + char c = (char) randomAccessFile.read(); + // добавляем символ в стрингбилдер + builder.append(c); + // Если новая строка и длина строки больше 1 - то добавляем строку в конечный результат + if (c == '\n' && builder.length() > 1) { + // реверсируем строку + builder = builder.reverse(); + // добавляем строку + tmpResult.add(String.valueOf(builder)); + lines++; + // обнуляем стрингбилдер + builder = new StringBuilder(); + // если прочитали нужное число строк - прерываем цикл + if (lines == n) break; + } + } + } catch (IOException e) { + e.printStackTrace(); + } + // Реверсируем список, т.к. читаем снизу вверх + Collections.reverse(tmpResult); + return tmpResult; } } diff --git a/task3/src/main/resources/append.txt b/task3/src/main/resources/append.txt index 44e1b76..5f5e8d2 100644 --- a/task3/src/main/resources/append.txt +++ b/task3/src/main/resources/append.txt @@ -1,3 +1,3 @@ str1 str2 -str3 +str3 \ No newline at end of file From adaa4d83743339aa64406529c840f2e971cf5e7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=88=D0=B8=D0=BD=20=D0=9C=D0=B8=D1=85=D0=B0?= =?UTF-8?q?=D0=B8=D0=BB?= Date: Tue, 25 Feb 2020 15:11:34 +0300 Subject: [PATCH 10/10] =?UTF-8?q?2-=D0=B5=20=D0=B4=D0=BE=D0=BC=D0=B0=D1=88?= =?UTF-8?q?=D0=BD=D0=B5=D0=B5=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20comment=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task3/src/main/java/FileUtility.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/task3/src/main/java/FileUtility.java b/task3/src/main/java/FileUtility.java index 6570013..89defc5 100644 --- a/task3/src/main/java/FileUtility.java +++ b/task3/src/main/java/FileUtility.java @@ -161,7 +161,7 @@ public List getNString(String pathToFile, int n) { long length = randomAccessFile.length(); // сюда будем считывать символы строк StringBuilder builder = new StringBuilder(); - // нагуглил, что так надо + // ставим указатель на последний символ файла length--; // seek to the end of file randomAccessFile.seek(length);