Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 78 additions & 8 deletions task2/src/main/java/DBUtility.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@


import java.sql.*;
import java.util.ArrayList;

Expand All @@ -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();
}
}

/*
Expand All @@ -33,7 +64,16 @@ public void createPrinterTable(Connection con, Statement stmt){

public ArrayList<String> selectExpensivePC(Statement stmt){
//todo
return null;
ArrayList<String> 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;
}

/*
Expand All @@ -42,8 +82,17 @@ public ArrayList<String> selectExpensivePC(Statement stmt){
*/

public ArrayList<Integer> selectQuickLaptop(Statement stmt) {
// TODO: 16.12.2019
return null;
// TODO: 16.12.2019
ArrayList<Integer> 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;
}

/*
Expand All @@ -53,6 +102,14 @@ public ArrayList<Integer> selectQuickLaptop(Statement stmt) {
public ArrayList<String> selectMaker(Statement stmt){
ArrayList<String> 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;
}

Expand All @@ -68,6 +125,19 @@ public ArrayList<String> 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;

}
Expand Down
89 changes: 84 additions & 5 deletions task3/src/main/java/FileUtility.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<Integer> 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();
}
}

/*
Expand All @@ -30,17 +57,58 @@ 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<String> 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();
}
}

/*
* Метод должен дописать в переданный файл все
* записи из списка по одной записи в строке
* */
public void appender(File file, List<String> 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();
}
}

/*
Expand All @@ -54,7 +122,18 @@ public void appender(File file, List<String> records) {
* */
public List<String> getNString(String pathToFile, int n) {
//TODO
return null;
List<String> 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;
}

}
39 changes: 31 additions & 8 deletions task4/src/main/java/TaskRunner.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
public class TaskRunner implements Runnable {

//TODO


// по заданию из Гит не понял что именно нужно сделать...
Object mutex; //монитор синхронизации
String message; //сообщение которое поток будет добавлять в список

Expand Down Expand Up @@ -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();
}
}
}

18 changes: 17 additions & 1 deletion task5/src/main/java/Car.java
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import java.util.concurrent.BrokenBarrierException;

public class Car implements Runnable {
private static int CARS_COUNT;
static {
Expand Down Expand Up @@ -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();
}
}
}
}
16 changes: 11 additions & 5 deletions task5/src/main/java/MainClass.java
Original file line number Diff line number Diff line change
@@ -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("ВАЖНОЕ ОБЪЯВЛЕНИЕ >>> Гонка закончилась!!!");
}
}
}
6 changes: 6 additions & 0 deletions task5/src/main/java/Tunnel.java
Original file line number Diff line number Diff line change
@@ -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();
Expand Down