diff --git a/task2/src/main/java/DBUtility.java b/task2/src/main/java/DBUtility.java index 0e67b06..bc8a31d 100644 --- a/task2/src/main/java/DBUtility.java +++ b/task2/src/main/java/DBUtility.java @@ -1,5 +1,3 @@ - - import java.sql.*; import java.util.ArrayList; @@ -18,13 +16,46 @@ public class DBUtility { */ + void AddPrinters(Statement stmt, Printer printer) throws SQLException{ + + stmt.execute("INSERT INTO printers(model,color,type,price) VALUES("+ printer.getModel() +",'" + + printer.getColor() +"','"+ printer.getType() +"',"+ printer.getPrice()+ ");"); + stmt.execute("INSERT INTO Product VALUES('"+ printer.getMaker()+"'," + + printer.getModel() +",'"+ printer.getType() +"');"); + } void AddPrinters(Statement stmt){ - // TODO: 16.12.2019 + // TODO: 16.12.2019 + Printer HP = new Printer(1012,"HP","col","laser",20000); + Printer Canon1 = new Printer(1010,"Canon","bw","jet",5000); + Printer Canon2 = new Printer(1010,"Canon","bw","jet",5000); + try { + stmt.execute("INSERT INTO printers(model,color,type,price) VALUES(" + HP.getModel() + ",'" + + HP.getColor() + "','" + HP.getType() + "'," + HP.getPrice() + ");"); + stmt.execute("INSERT INTO Product VALUES('" + HP.getMaker() + "'," + + HP.getModel() + ",'" + HP.getType() + "');"); + + stmt.execute("INSERT INTO printers(model,color,type,price) VALUES(" + Canon1.getModel() + ",'" + + Canon1.getColor() + "','" + Canon1.getType() + "'," + Canon1.getPrice() + ");"); + stmt.execute("INSERT INTO Product VALUES('" + Canon1.getMaker() + "'," + + Canon1.getModel() + ",'" + Canon1.getType() + "');"); + + stmt.execute("INSERT INTO printers(model,color,type,price) VALUES(" + Canon2.getModel() + ",'" + + Canon2.getColor() + "','" + Canon2.getType() + "'," + Canon2.getPrice() + ");"); + stmt.execute("INSERT INTO Product VALUES('" + Canon2.getMaker() + "'," + + Canon2.getModel() + ",'" + Canon2.getType() + "');"); + } catch (SQLException e) { + e.printStackTrace(); + } } - public void createPrinterTable(Connection con, Statement stmt){ - // TODO: 16.12.2019 + // TODO: 16.12.2019 + String printersParam = "id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE, model INTEGER, color TEXT, type TEXT, price INTEGER"; + try { + stmt.execute("CREATE table IF NOT EXISTS printers("+ printersParam + ");"); + } catch (SQLException e) { + e.printStackTrace(); + } } /* @@ -33,7 +64,16 @@ public void createPrinterTable(Connection con, Statement stmt){ public ArrayList selectExpensivePC(Statement stmt){ //todo - return null; + ArrayList a = new ArrayList<>(); + try { + ResultSet rs = stmt.executeQuery("SELECT DISTINCT * FROM PC WHERE price > 15000 ;"); + while (rs.next()) { + a.add(rs.toString()); + } + } catch (SQLException e) { + e.printStackTrace(); + } + return a; } /* @@ -42,8 +82,17 @@ public ArrayList selectExpensivePC(Statement stmt){ */ public ArrayList selectQuickLaptop(Statement stmt) { - // TODO: 16.12.2019 - return null; + // TODO: 16.12.2019 + ArrayList a = new ArrayList<>(); + try { + ResultSet rs = stmt.executeQuery("SELECT * FROM Laptop WHERE speed > 2500 ;"); + while (rs.next()) { + a.add(rs.getInt("id")); + } + } catch (SQLException e) { + e.printStackTrace(); + } + return a; } /* @@ -53,6 +102,14 @@ public ArrayList selectQuickLaptop(Statement stmt) { public ArrayList selectMaker(Statement stmt){ ArrayList ans = new ArrayList<>(); // TODO: 18.02.2020 + try { + ResultSet rs = stmt.executeQuery("SELECT DISTINCT * FROM Product GROUP BY 'maker' HAVING COUNT(*)>1 ;"); + while (rs.next()) { + ans.add(rs.getString("maker")); + } + } catch (SQLException e) { + e.printStackTrace(); + } return ans; } @@ -68,6 +125,19 @@ public ArrayList selectMaker(Statement stmt){ public int makerWithMaxProceeds(Statement stmt){ int result = 0; //todo + String combine = "SELECT model AS model, price FROM Laptop WHERE price>0 UNION ALL SELECT model, price FROM PC WHERE price>0"; + try { + ResultSet rs = stmt.executeQuery("SELECT maker, MAX(SUM) AS MAX " + + "FROM (" + + "SELECT tmp.model, SUM(tmp.price) AS SUM, P.maker AS maker FROM ("+ combine +") AS tmp , " + + "Product P WHERE tmp.model = P.model GROUP BY P.maker" + + ")"); + while (rs.next()) { + System.out.println(rs.getString("maker")+" "+ rs.getString("MAX")); + } + } catch (SQLException e) { + e.printStackTrace(); + } return result; } diff --git a/task3/src/main/java/FileUtility.java b/task3/src/main/java/FileUtility.java index a6d8ef6..7230097 100644 --- a/task3/src/main/java/FileUtility.java +++ b/task3/src/main/java/FileUtility.java @@ -15,9 +15,36 @@ public class FileUtility { * out: * 5 2 4 1 3 */ - public void sortEvenElements(File in, File out) { + public void sortEvenElements(File in, File out){ //TODO + ArrayList tmp = new ArrayList<>();; + try { + Scanner sc = new Scanner(in); + sc.nextLine(); + while (sc.hasNext()) { + tmp.add(sc.nextInt()); + } + sc.close(); + for (int i = 0; i < tmp.size(); i++) { + if ((tmp.get(i) % 2) != 0) continue; + for (int j = i; j < tmp.size(); j++) { + if ((tmp.get(j) % 2) != 0) continue; + if (tmp.get(i) > tmp.get(j)) { + int temp = tmp.get(i); + tmp.set(i, tmp.get(j)); + tmp.set(j, temp); + } + } + } + FileWriter fw = new FileWriter(out); + for (int i = 0; i < tmp.size(); i++) { + fw.write(tmp.get(i) + " "); + } + fw.close(); + } catch (IOException e) { + e.printStackTrace(); + } } /* @@ -30,9 +57,42 @@ public void sortEvenElements(File in, File out) { * для каждого пользователя */ - public void passwordGen(File in, File out) { + public void passwordGen(File in, File out){ //TODO - + String Char = "abcdefghijklmnopqrstuvwxyz"; + String Char_CAPS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + String NUM = "0123456789"; + String Symbols = "*!%"; + ArrayList n = new ArrayList<>(); + try { + FileReader fr = new FileReader(in); + BufferedReader br = new BufferedReader(fr); + while (br.ready()) { + n.add(br.readLine()); + } + br.close(); + fr.close(); + String pass = ""; + FileWriter fw = new FileWriter(out); + Random rnd = new Random(); + for (int i = 0; i < n.size(); i++) { + for (int j = 0; j < ((int) (Math.random() * 1 + 2)); j++) { + int index = rnd.nextInt(Char.length()); + pass += Char.charAt(index); + index = rnd.nextInt(Char_CAPS.length()); + pass += Char_CAPS.charAt(index); + index = rnd.nextInt(NUM.length()); + pass += NUM.charAt(index); + index = rnd.nextInt(Symbols.length()); + pass += Symbols.charAt(index); + } + fw.write(n.get(i) + " " + pass + "\n"); + pass = ""; + } + fw.close(); + } catch (IOException e) { + e.printStackTrace(); + } } /* @@ -40,7 +100,15 @@ public void passwordGen(File in, File out) { * записи из списка по одной записи в строке * */ public void appender(File file, List records) { - + try { + FileWriter fw = new FileWriter(file, true); + for (int i = 0; i < records.size(); i++) { + fw.write(records.get(i) + "\n"); + } + fw.close(); + } catch (IOException e) { + e.printStackTrace(); + } } /* @@ -54,7 +122,18 @@ public void appender(File file, List records) { * */ public List getNString(String pathToFile, int n) { //TODO - return null; + List res = new ArrayList<>(); + try { + RandomAccessFile raf = new RandomAccessFile(pathToFile, "r"); + for (int i = n; i != 0 ; i--) { + raf.seek(raf.length() - (i * 80)); + res.add(raf.readLine()); + } + raf.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return res; } } diff --git a/task4/src/main/java/TaskRunner.java b/task4/src/main/java/TaskRunner.java index b8e3c39..acce0c5 100644 --- a/task4/src/main/java/TaskRunner.java +++ b/task4/src/main/java/TaskRunner.java @@ -4,7 +4,8 @@ public class TaskRunner implements Runnable { //TODO - + + // по заданию из Гит не понял что именно нужно сделать... Object mutex; //монитор синхронизации String message; //сообщение которое поток будет добавлять в список @@ -33,19 +34,41 @@ public TaskRunner(Object mutex, String msg, int cnt) { public void run() { // TODO: 26.12.2019 while (list.size() < 60) { - //synchronized (mutex) { + synchronized (mutex) { if ((iter % 30) == cnt) { list.add(message); iter++; -// try { -// Thread.sleep(100); -// } catch (InterruptedException e) { -// e.printStackTrace(); -// } + try { + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } } - //} + } } System.out.println(list); } + public void threeThreads() { // Задача с сайта через notify не удалось...буду штутдировать дальше + Thread A = new Thread(()-> { + System.out.print("A"); + }); + Thread B = new Thread(()-> { + System.out.print("B"); + }); + Thread C = new Thread(()-> { + System.out.print("C"); + }); + A.start(); + B.start(); + C.start(); + try { + A.join(); + B.join(); + C.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } } + diff --git a/task5/src/main/java/Car.java b/task5/src/main/java/Car.java index b487609..88a1448 100644 --- a/task5/src/main/java/Car.java +++ b/task5/src/main/java/Car.java @@ -1,3 +1,5 @@ +import java.util.concurrent.BrokenBarrierException; + public class Car implements Runnable { private static int CARS_COUNT; static { @@ -27,8 +29,22 @@ public void run() { } catch (Exception e) { e.printStackTrace(); } + try { + MainClass.barrier.await(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (BrokenBarrierException e) { + e.printStackTrace(); + } for (int i = 0; i < race.getStages().size(); i++) { race.getStages().get(i).go(this); } + try { + MainClass.barrier1.await(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (BrokenBarrierException e) { + e.printStackTrace(); + } } -} \ No newline at end of file +} diff --git a/task5/src/main/java/MainClass.java b/task5/src/main/java/MainClass.java index 4f50321..500f265 100644 --- a/task5/src/main/java/MainClass.java +++ b/task5/src/main/java/MainClass.java @@ -1,18 +1,24 @@ +import java.util.concurrent.CyclicBarrier; + public class MainClass { public static final int CARS_COUNT = 4; - + public static final CyclicBarrier barrier = new CyclicBarrier(CARS_COUNT, () -> { + System.out.println("ВАЖНОЕ ОБЪЯВЛЕНИЕ >>> Гонка началась!!!"); + }); + public static final CyclicBarrier barrier1 = new CyclicBarrier(CARS_COUNT, () -> { + System.out.println("ВАЖНОЕ ОБЪЯВЛЕНИЕ >>> Гонка закончилась!!!"); + }); public static void main(String[] args) { + System.out.println("ВАЖНОЕ ОБЪЯВЛЕНИЕ >>> Подготовка!!!"); Race race = new Race(new Road(60), new Tunnel(), new Road(40)); Car[] cars = new Car[CARS_COUNT]; - for (int i = 0; i < cars.length; i++) { + for (int i = 0; i < CARS_COUNT; i++) { cars[i] = new Car(race, 20 + (int) (Math.random() * 10)); } for (int i = 0; i < cars.length; i++) { new Thread(cars[i]).start(); } - System.out.println("ВАЖНОЕ ОБЪЯВЛЕНИЕ >>> Гонка началась!!!"); - System.out.println("ВАЖНОЕ ОБЪЯВЛЕНИЕ >>> Гонка закончилась!!!"); } -} \ No newline at end of file +} diff --git a/task5/src/main/java/Tunnel.java b/task5/src/main/java/Tunnel.java index 476d706..44ef098 100644 --- a/task5/src/main/java/Tunnel.java +++ b/task5/src/main/java/Tunnel.java @@ -1,19 +1,25 @@ +import java.util.concurrent.Semaphore; + public class Tunnel extends Stage { + private Semaphore tunnelCapacity = new Semaphore(MainClass.CARS_COUNT/2);//Вместимость тоннеля public Tunnel() { this.length = 80; this.description = "Тоннель " + length + " метров"; + } @Override public void go(Car c) { try { try { System.out.println(c.getName() + " готовится к этапу(ждет): " + description); + tunnelCapacity.acquire(); System.out.println(c.getName() + " начал этап: " + description); Thread.sleep(length / c.getSpeed() * 1000); } catch (InterruptedException e) { e.printStackTrace(); } finally { System.out.println(c.getName() + " закончил этап: " + description); + tunnelCapacity.release(); } } catch (Exception e) { e.printStackTrace();