Advertisement
Guest User

Untitled

a guest
Feb 24th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 27.95 KB | None | 0 0
  1. package varausjarjestelma;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.Date;
  5. import java.sql.DriverManager;
  6. import java.sql.PreparedStatement;
  7. import java.sql.ResultSet;
  8. import java.sql.SQLException;
  9. import java.sql.Statement;
  10. import java.time.LocalDate;
  11. import java.time.LocalDateTime;
  12. import java.time.format.DateTimeFormatter;
  13. import java.util.ArrayList;
  14. import java.util.Collections;
  15. import java.util.List;
  16. import java.util.Scanner;
  17. import org.springframework.stereotype.Component;
  18.  
  19. @Component
  20. public class Tekstikayttoliittyma {
  21.  
  22. public void kaynnista(Scanner lukija) {
  23. lisaaTaulut();
  24. while (true) {
  25. System.out.println("Komennot: ");
  26. System.out.println(" x - lopeta");
  27. System.out.println(" 1 - lisaa huone");
  28. System.out.println(" 2 - listaa huoneet");
  29. System.out.println(" 3 - hae huoneita");
  30. System.out.println(" 4 - lisaa varaus");
  31. System.out.println(" 5 - listaa varaukset");
  32. System.out.println(" 6 - tilastoja");
  33. System.out.println("");
  34.  
  35. String komento = lukija.nextLine();
  36. if (komento.equals("x")) {
  37. break;
  38. }
  39.  
  40. if (komento.equals("1")) {
  41. lisaaHuone(lukija);
  42. } else if (komento.equals("2")) {
  43. listaaHuoneet();
  44. } else if (komento.equals("3")) {
  45. haeHuoneita(lukija);
  46. } else if (komento.equals("4")) {
  47. lisaaVaraus(lukija);
  48. } else if (komento.equals("5")) {
  49. listaaVaraukset();
  50. } else if (komento.equals("6")) {
  51. tilastoja(lukija);
  52. }
  53. }
  54. }
  55.  
  56. private static void lisaaHuone(Scanner s) {
  57. System.out.println("Lisätään huone");
  58. System.out.println("");
  59.  
  60. System.out.println("Minkä tyyppinen huone on?");
  61. String tyyppi = s.nextLine();
  62. System.out.println("Mikä huoneen numeroksi asetetaan?");
  63. int numero = Integer.valueOf(s.nextLine());
  64. System.out.println("Kuinka monta euroa huone maksaa yöltä?");
  65. int hinta = Integer.valueOf(s.nextLine());
  66.  
  67. lisaaHuoneita(numero, tyyppi, hinta);
  68.  
  69.  
  70. }
  71.  
  72. private static void listaaHuoneet() {
  73. System.out.println("Listataan huoneet");
  74. System.out.println("");
  75.  
  76. // esimerkkitulostus -- tässä oletetaan, että huoneita on 4
  77. // tulostuksessa tulostetaan huoneen tyyppi, huoneen numero sekä hinta
  78. // System.out.println("Excelsior, 604, 119 euroa");
  79. // System.out.println("Excelsior, 605, 119 euroa");
  80. // System.out.println("Superior, 705, 159 euroa");
  81. // System.out.println("Commodore, 128, 229 euroa");
  82.  
  83. tulostaHuoneet();
  84. }
  85.  
  86. private static void haeHuoneita(Scanner s) {
  87. System.out.println("Haetaan huoneita");
  88. System.out.println("");
  89.  
  90. System.out.println("Milloin varaus alkaisi (yyyy-MM-dd)?");;
  91. LocalDateTime alku = LocalDateTime.parse(s.nextLine() + " " + "16:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
  92. System.out.println("Milloin varaus loppuisi (yyyy-MM-dd)?");
  93. LocalDateTime loppu = LocalDateTime.parse(s.nextLine() + " " + "10:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
  94. System.out.println("Minkä tyyppinen huone? (tyhjä = ei rajausta)");
  95. String tyyppi = s.nextLine();
  96. System.out.println("Minkä hintainen korkeintaan? (tyhjä = ei rajausta)");
  97. String maksimihinta = s.nextLine();
  98.  
  99. // // esimerkkitulostus -- tässä oletetaan, että vapaita huoneita löytyy 2
  100. // System.out.println("Vapaat huoneet: ");
  101. // System.out.println("Excelsior, 604, 119 euroa");
  102. // System.out.println("Excelsior, 605, 119 euroa");
  103. //
  104. // // vaihtoehtoisesti, mikäli yhtäkään huonetta ei ole vapaana, ohjelma
  105. // // tulostaa
  106. // System.out.println("Ei vapaita huoneita.");
  107.  
  108. huoneidenHakeminen(alku, loppu, tyyppi, maksimihinta);
  109.  
  110. }
  111.  
  112. private static void lisaaVaraus(Scanner s) {
  113. System.out.println("Haetaan huoneita");
  114. System.out.println("");
  115.  
  116. System.out.println("Milloin varaus alkaisi (yyyy-MM-dd)?");;
  117. LocalDateTime alku = LocalDateTime.parse(s.nextLine() + " " + "16:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
  118. System.out.println("Milloin varaus loppuisi (yyyy-MM-dd)?");
  119. LocalDateTime loppu = LocalDateTime.parse(s.nextLine() + " " + "10:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
  120. System.out.println("Minkä tyyppinen huone? (tyhjä = ei rajausta)");
  121. String tyyppi = s.nextLine();
  122. System.out.println("Minkä hintainen korkeintaan? (tyhjä = ei rajausta)");
  123. String maksimihinta = s.nextLine();
  124.  
  125. int vapaatHuoneet = huoneidenHakeminen(alku, loppu, tyyppi, maksimihinta);
  126. //System.out.println("Vapaat huoneet " + vapaatHuoneet);
  127.  
  128. // mikäli huoneita ei ole vapaana, ohjelma tulostaa seuraavan viestin
  129. // ja varauksen lisääminen loppuu
  130. if (vapaatHuoneet == 0){
  131. //System.out.println("Ei vapaita huoneita.");
  132. return;
  133. }
  134.  
  135.  
  136. // muulloin, ohjelma kertoo vapaiden huoneiden lukumäärän. Tässä
  137. // oletetaan että vapaita huoneita on 2.
  138. System.out.println("Huoneita vapaana: 2");
  139. System.out.println("");
  140.  
  141. // tämän jälkeen kysytään varattavien huoneiden lukumäärää
  142. // luvuksi tulee hyväksyä vain sopiva luku, esimerkissä 3 ei esim
  143. // kävisi, sillä vapaita huoneita vain 2
  144. int huoneita = -1;
  145. while (true) {
  146. System.out.println("Montako huonetta varataan?");
  147. huoneita = Integer.valueOf(s.nextLine());
  148. if (huoneita > 0 && huoneita <= vapaatHuoneet) {
  149. break;
  150. }
  151.  
  152. System.out.println("Epäkelpo huoneiden lukumäärä.");
  153. }
  154.  
  155. // tämän jälkeen kysytään lisävarusteet
  156. List<String> lisavarusteet = new ArrayList<>();
  157. while (true) {
  158. System.out.println("Syötä lisävaruste, tyhjä lopettaa");
  159. String lisavaruste = s.nextLine();
  160. if (lisavaruste.isEmpty()) {
  161. break;
  162. }
  163.  
  164. lisavarusteet.add(lisavaruste);
  165. }
  166.  
  167. // ja lopuksi varaajan tiedot
  168. System.out.println("Syötä varaajan nimi:");
  169. String nimi = s.nextLine();
  170. System.out.println("Syötä varaajan puhelinnumero:");
  171. String puhelinnumero = s.nextLine();
  172. System.out.println("Syötä varaajan sähköpostiosoite:");
  173. String sahkoposti = s.nextLine();
  174.  
  175. // kun kaikki tiedot on kerätty, ohjelma lisää varauksen tietokantaan
  176. // -- varaukseen tulee lisätä kalleimmat vapaat huoneet!
  177.  
  178. lisaaHuonevaraus(alku, loppu, tyyppi, maksimihinta, huoneita, lisavarusteet, nimi, puhelinnumero, sahkoposti);
  179. }
  180.  
  181. private static void listaaVaraukset() {
  182. System.out.println("Listataan varaukset");
  183. System.out.println("");
  184.  
  185. // alla olevassa esimerkissä oletetaan, että tietokannassa on
  186. // kolme varausta
  187. System.out.println("Essi Esimerkki, essi@esimerkki.net, 2019-02-14, 2019-02-15, 1 päivä, 2 lisävarustetta, 1 huone. Huoneet:");
  188. System.out.println("\tCommodore, 128, 229 euroa");
  189. System.out.println("\tYhteensä: 229 euroa");
  190. System.out.println("");
  191. System.out.println("Anssi Asiakas, anssi@asiakas.net, 2019-02-14, 2019-02-15, 1 päivä, 0 lisävarustetta, 1 huone. Huoneet:");
  192. System.out.println("\tSuperior, 705, 159 euroa");
  193. System.out.println("\tYhteensä: 159 euroa");
  194. System.out.println("");
  195. System.out.println("Anssi Asiakas, anssi@asiakas.net, 2020-03-18, 2020-03-21, 3 päivää, 6 lisävarustetta, 2 huonetta. Huoneet:");
  196. System.out.println("\tSuperior, 705, 159 euroa");
  197. System.out.println("\tCommodore, 128, 229 euroa");
  198. System.out.println("\tYhteensä: 1164 euroa");
  199.  
  200. }
  201.  
  202. private static void tilastoja(Scanner lukija) {
  203. System.out.println("Mitä tilastoja tulostetaan?");
  204. System.out.println("");
  205.  
  206. // tilastoja pyydettäessä käyttäjältä kysytään tilasto
  207. System.out.println(" 1 - Suosituimmat lisävarusteet");
  208. System.out.println(" 2 - Parhaat asiakkaat");
  209. System.out.println(" 3 - Varausprosentti huoneittain");
  210. System.out.println(" 4 - Varausprosentti huonetyypeittäin");
  211.  
  212. System.out.println("Syötä komento: ");
  213. int komento = Integer.valueOf(lukija.nextLine());
  214.  
  215. if (komento == 1) {
  216. suosituimmatLisavarusteet();
  217. } else if (komento == 2) {
  218. parhaatAsiakkaat();
  219. } else if (komento == 3) {
  220. varausprosenttiHuoneittain(lukija);
  221. } else if (komento == 4) {
  222. varausprosenttiHuonetyypeittain(lukija);
  223. }
  224. }
  225.  
  226. private static void suosituimmatLisavarusteet() {
  227. System.out.println("Tulostetaan suosituimmat lisävarusteet");
  228. System.out.println("");
  229.  
  230. // alla oletetaan, että lisävarusteita on vain muutama
  231. // mikäli tietokannassa niitä on enemmän, tulostetaan 10 suosituinta
  232. System.out.println("Teekannu, 2 varausta");
  233. System.out.println("Kahvinkeitin, 2 varausta");
  234. System.out.println("Silitysrauta, 1 varaus");
  235. }
  236.  
  237. private static void parhaatAsiakkaat() {
  238. System.out.println("Tulostetaan parhaat asiakkaat");
  239. System.out.println("");
  240.  
  241. // alla oletetaan, että asiakkaita on vain 2
  242. // mikäli tietokannassa niitä on enemmän, tulostetaan asiakkaita korkeintaan 10
  243. System.out.println("Anssi Asiakas, anssi@asiakas.net, +358441231234, 1323 euroa");
  244. System.out.println("Essi Esimerkki, essi@esimerkki.net, +358443214321, 229 euroa");
  245. }
  246.  
  247. private static void varausprosenttiHuoneittain(Scanner lukija) {
  248. System.out.println("Tulostetaan varausprosentti huoneittain");
  249. System.out.println("");
  250.  
  251. System.out.println("Mistä lähtien tarkastellaan?");
  252. LocalDateTime alku = LocalDateTime.parse(lukija.nextLine() + "-01 " + "16:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
  253. System.out.println("Mihin asti tarkastellaan?");
  254. LocalDateTime loppu = LocalDateTime.parse(lukija.nextLine() + "-01 " + "10:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
  255.  
  256. // alla esimerkkitulostus
  257. System.out.println("Tulostetaan varausprosentti huoneittain");
  258. System.out.println("Excelsior, 604, 119 euroa, 0.0%");
  259. System.out.println("Excelsior, 605, 119 euroa, 0.0%");
  260. System.out.println("Superior, 705, 159 euroa, 22.8%");
  261. System.out.println("Commodore, 128, 229 euroa, 62.8%");
  262. }
  263.  
  264. private static void varausprosenttiHuonetyypeittain(Scanner lukija) {
  265. System.out.println("Tulostetaan varausprosentti huonetyypeittäin");
  266. System.out.println("");
  267.  
  268. System.out.println("Mistä lähtien tarkastellaan?");
  269. LocalDateTime alku = LocalDateTime.parse(lukija.nextLine() + "-01 " + "16:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
  270. System.out.println("Mihin asti tarkastellaan?");
  271. LocalDateTime loppu = LocalDateTime.parse(lukija.nextLine() + "-01 " + "10:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
  272.  
  273. // alla esimerkkitulostus
  274. System.out.println("Tulostetaan varausprosentti huonetyypeittän");
  275. System.out.println("Excelsior, 0.0%");
  276. System.out.println("Superior, 22.8%");
  277. System.out.println("Commodore, 62.8%");
  278. }
  279.  
  280. // OMIA TAULUJA TÄSTÄ ETEENPÄIN
  281.  
  282.  
  283. public static void lisaaTaulut() {
  284. try {
  285. Connection connection = DriverManager.getConnection("jdbc:h2:./hotelliketju", "sa", "");
  286.  
  287. //Hotellihuone
  288. PreparedStatement statementHuone = connection.prepareStatement("CREATE TABLE IF NOT EXISTS Hotellihuone(numero INTEGER UNIQUE NOT NULL, tyyppi VARCHAR(100) NOT NULL, hinta INTEGER NOT NULL, PRIMARY KEY(numero))");
  289. statementHuone.executeUpdate();
  290.  
  291. // Asiakas
  292. PreparedStatement statementAsiakas = connection.prepareStatement("CREATE TABLE IF NOT EXISTS Asiakas(id INTEGER AUTO_INCREMENT UNIQUE NOT NULL, nimi VARCHAR(100) NOT NULL, puhelinnumero VARCHAR(100) NOT NULL, email varchar(100) NOT NULL, PRIMARY KEY(id))");
  293. statementAsiakas.executeUpdate();
  294.  
  295. //Varaus
  296. PreparedStatement statementVaraus = connection.prepareStatement("CREATE TABLE IF NOT EXISTS Varaus(id INTEGER AUTO_INCREMENT UNIQUE NOT NULL, alkupvm DATE NOT NULL, loppupvm DATE NOT NULL, asiakas_id INTEGER, FOREIGN KEY (asiakas_id) REFERENCES Asiakas(id), PRIMARY KEY(id))");
  297. statementVaraus.executeUpdate();
  298.  
  299. //Lisavaruste
  300. PreparedStatement statementLisavaruste = connection.prepareStatement("CREATE TABLE IF NOT EXISTS Lisavaruste(id INTEGER AUTO_INCREMENT UNIQUE NOT NULL, nimi VARCHAR(100) NOT NULL)");
  301. statementLisavaruste.executeUpdate();
  302.  
  303. // LIITOSTAULUT
  304.  
  305. //VarausHotellihuone
  306. PreparedStatement statementVarausHotellihuone = connection.prepareStatement("CREATE TABLE IF NOT EXISTS VarausHotellihuone(varaus_id INTEGER NOT NULL, huonenumero_id INTEGER NOT NULL)");
  307. statementVarausHotellihuone.executeUpdate();
  308.  
  309. // Lisätään tauluun FK:t
  310. PreparedStatement statementVarausHotellihuone_LisaaVarausFK= connection.prepareStatement("ALTER TABLE VarausHotellihuone ADD FOREIGN KEY (varaus_id) REFERENCES Varaus(id)");
  311. statementVarausHotellihuone_LisaaVarausFK.executeUpdate();
  312.  
  313. // Lisätään tauluun FK:t
  314. PreparedStatement statementVarausHotellihuone_LisaaHuoneFK = connection.prepareStatement("ALTER TABLE VarausHotellihuone ADD FOREIGN KEY (huonenumero_id) REFERENCES Hotellihuone(numero)");
  315. statementVarausHotellihuone_LisaaHuoneFK.executeUpdate();
  316.  
  317. //VarausLisavaruste
  318. PreparedStatement VarausLisavaruste = connection.prepareStatement("CREATE TABLE IF NOT EXISTS VarausLisavaruste(varaus_id INTEGER NOT NULL, lisavaruste_id INTEGER NOT NULL)");
  319. VarausLisavaruste.executeUpdate();
  320.  
  321. // Lisätään tauluun FK:t
  322. PreparedStatement VarausLisavaruste_LisaaVarusteFK = connection.prepareStatement("ALTER TABLE VarausLisavaruste ADD FOREIGN KEY (varaus_id) REFERENCES Varaus(id)");
  323. VarausLisavaruste_LisaaVarusteFK.executeUpdate();
  324.  
  325. // Lisätään tauluun FK:t
  326. PreparedStatement VarausLisavaruste_LisaaLisavarusteFK = connection.prepareStatement("ALTER TABLE VarausLisavaruste ADD FOREIGN KEY (lisavaruste_id) REFERENCES Lisavaruste(id)");
  327. VarausLisavaruste_LisaaLisavarusteFK.executeUpdate();
  328.  
  329. //Suljetaan tietokantataulut
  330. statementAsiakas.close();
  331. statementVaraus.close();
  332. statementHuone.close();
  333. statementLisavaruste.close();
  334.  
  335. //Suljetaan liitostaulut
  336. statementVarausHotellihuone.close();
  337. statementVarausHotellihuone_LisaaVarausFK.close();
  338. statementVarausHotellihuone_LisaaHuoneFK.close();
  339. VarausLisavaruste.close();
  340. VarausLisavaruste_LisaaVarusteFK.close();
  341. VarausLisavaruste_LisaaLisavarusteFK.close();
  342.  
  343. //Suljetaan yhteys
  344. connection.close();
  345.  
  346. }
  347.  
  348. catch (SQLException e) {}
  349. }
  350.  
  351. public static void lisaaHuoneita(int numero, String tyyppi, int hinta) {
  352. try {
  353.  
  354. Connection connection = DriverManager.getConnection("jdbc:h2:./hotelliketju", "sa", "");
  355.  
  356. PreparedStatement statement = connection.prepareStatement("INSERT INTO Hotellihuone (numero, tyyppi, hinta) VALUES (?, ?, ?)");
  357.  
  358. statement.setInt(1, numero);
  359. statement.setString(2,tyyppi);
  360. statement.setInt(3, hinta);
  361.  
  362. statement.executeUpdate();
  363.  
  364. statement.close();
  365. connection.close();
  366. }
  367.  
  368. catch (SQLException e) {}
  369. }
  370.  
  371. public static void tulostaHuoneet() {
  372.  
  373. try {
  374. Connection connection = DriverManager.getConnection("jdbc:h2:./hotelliketju", "sa", "");
  375.  
  376. //Luetaan kaikki sarakkeen Hotellihuone-taulusta ja printataan ne
  377. PreparedStatement statement = connection.prepareStatement("SELECT * FROM Hotellihuone;");
  378. ResultSet result = statement.executeQuery();
  379.  
  380. while (result.next()) {
  381. Integer huoneNumero = result.getInt("numero");
  382. String huoneTyyppi = result.getString("tyyppi");
  383. Integer huoneHinta = result.getInt("hinta");
  384.  
  385. System.out.println(huoneNumero + ", " + huoneTyyppi + ", " + huoneHinta + " euroa");
  386. }
  387.  
  388. connection.close();
  389. } catch (SQLException e) {}
  390. }
  391.  
  392.  
  393. public static int huoneidenHakeminen(LocalDateTime alkupvm, LocalDateTime loppupvm, String tyyppi, String max_hinta) {
  394. //Muutetaan päivät oikeaan muotoon (Date)
  395.  
  396. LocalDate alku = alkupvm.toLocalDate();
  397. LocalDate loppu = loppupvm.toLocalDate();
  398. Date alku_paivays = Date.valueOf(alku);
  399. Date loppu_paivays = Date.valueOf(loppu);
  400.  
  401.  
  402. // Luodaan String-tyyppinen lista, johon listataan vapaat huoneet
  403. List<String> vapaatHuoneet = new ArrayList<>();
  404.  
  405. tyyppi = tyyppi.toLowerCase(); // Saadaan kaikki huonetyypit samaan muotoon kun printataan
  406.  
  407. try {
  408. Connection connection = DriverManager.getConnection("jdbc:h2:./hotelliketju", "sa", "");
  409.  
  410. // tyyppi ja max_hinta on tyhjiä
  411. if (tyyppi.length() == 0 && max_hinta.length() == 0) {
  412. //PreparedStatement statement = connection.prepareStatement("SELECT numero, tyyppi, hinta FROM Hotellihuone LEFT JOIN VarausHotellihuone ON VarausHotellihuone.huonenumero_id = Hotellihuone.numero LEFT JOIN Varaus ON Varaus.id = VarausHotellihuone.varaus_id WHERE Varaus.loppupvm >= alkupvm OR Varaus.loppupvm IS NULL AND Varaus.alkupvm >= loppupvm OR Varaus.alkupvm IS NULL ORDER BY Hotellihuone.hinta DESC;");
  413.  
  414. PreparedStatement statement = connection.prepareStatement("SELECT numero, tyyppi, hinta FROM Hotellihuone WHERE huonenumero_id NOT IN(SELECT DISCTINCT numero FROM Hotellihuone JOIN VarausHotellihuone ON VarausHotellihuone.huonenumero_id = Hotellihuone.numero JOIN Varaus ON Varaus.id = VarausHotellihuone.varaus_id WHERE Varaus.loppupvm >= ? OR Varaus.loppupvm IS NULL AND Varaus.alkupvm >= ? OR Varaus.alkupvm IS NULL OR Varaus.loppupvm IS NULL ORDER BY Hotellihuone.hinta DESC;");
  415.  
  416. statement.setDate(1, alku_paivays);
  417. statement.setDate(2,loppu_paivays);
  418.  
  419. ResultSet result = statement.executeQuery();
  420.  
  421. while (result.next()) {
  422. Integer huoneNumero = result.getInt("numero");
  423. String huoneTyyppi = result.getString("tyyppi");
  424. Integer huoneHinta = result.getInt("hinta");
  425.  
  426. vapaatHuoneet.add(huoneNumero + ", " + huoneTyyppi + ", " + huoneHinta + "€");
  427.  
  428. }
  429. // tyyppi on tyhjä, mutta max_hinta ei ole tyhjä
  430. } else if (tyyppi.length() == 0 && max_hinta.length() != 0){
  431. //PreparedStatement statement = connection.prepareStatement("SELECT numero, tyyppi, hinta FROM Hotellihuone LEFT JOIN VarausHotellihuone ON VarausHotellihuone.huonenumero_id = Hotellihuone.numero LEFT JOIN Varaus ON Varaus.id = VarausHotellihuone.varaus_id WHERE Varaus.loppupvm >= alkupvm OR Varaus.loppupvm IS NULL AND Varaus.alkupvm >= loppupvm OR Varaus.alkupvm IS NULL AND Hotellihuone.hinta <= ? ORDER BY Hotellihuone.hinta DESC;");
  432. PreparedStatement statement = connection.prepareStatement("SELECT numero, tyyppi, hinta FROM Hotellihuone WHERE hinta <= ? AND numero NOT IN ( SELECT DISTINCT numero FROM Hotellihuone JOIN VarausHotellihuone ON VarausHotellihuone.huonenumero_id = Hotellihuone.numero JOIN Varaus ON Varaus.id = VarausHotellihuone.varaus_id WHERE (Varaus.loppupvm > ?) AND (Varaus.alkupvm < ?) OR Varaus.alkupvm IS NULL OR Varaus.loppupvm IS NULL);");
  433. statement.setString(1, max_hinta);
  434. statement.setDate(2, alku_paivays);
  435. statement.setDate(3,loppu_paivays);
  436.  
  437. ResultSet result = statement.executeQuery();
  438.  
  439.  
  440. while (result.next()) {
  441. Integer huoneNumero = result.getInt("numero");
  442. String huoneTyyppi = result.getString("tyyppi");
  443. Integer huoneHinta = result.getInt("hinta");
  444.  
  445. vapaatHuoneet.add(huoneNumero + ", " + huoneTyyppi + ", " + huoneHinta + " euroa");
  446. }
  447.  
  448. // max_hinta on tyhjä, mutta tyyppi ei ole tyhjä
  449. } else if (tyyppi.length() != 0 && max_hinta.length() == 0){
  450. //PreparedStatement statement = connection.prepareStatement("SELECT numero, tyyppi, hinta FROM Hotellihuone LEFT JOIN VarausHotellihuone ON VarausHotellihuone.huonenumero_id = Hotellihuone.numero LEFT JOIN Varaus ON Varaus.id = VarausHotellihuone.varaus_id WHERE Varaus.loppupvm >= alkupvm OR Varaus.loppupvm IS NULL AND Varaus.alkupvm >= loppupvm OR Varaus.alkupvm IS NULL AND Hotellihuone.tyyppi = ? ORDER BY Hotellihuone.hinta DESC;");
  451. PreparedStatement statement = connection.prepareStatement("SELECT numero, tyyppi, hinta FROM Huone WHERE tyyppi = ? AND numero NOT IN (SELECT DISTINCT numero FROM Hotellihuone JOIN VarausHotellihuone ON VarausHotellihuone.huonenumero_id = Hotellihuone.numero JOIN Varaus ON Varaus.id = VarausHotellihuone.varaus_id WHERE (Varaus.loppupvm > ?) AND (Varaus.alkupvm < ?) OR Varaus.alkupvm IS NULL OR Varaus.loppupvm IS NULL);");
  452. statement.setString(1, tyyppi);
  453. statement.setDate(2, alku_paivays);
  454. statement.setDate(3,loppu_paivays);
  455.  
  456. ResultSet result = statement.executeQuery();
  457.  
  458.  
  459. while (result.next()) {
  460. Integer huoneNumero = result.getInt("numero");
  461. String huoneTyyppi = result.getString("tyyppi");
  462. Integer huoneHinta = result.getInt("hinta");
  463.  
  464. vapaatHuoneet.add(huoneNumero + ", " + huoneTyyppi + ", " + huoneHinta + " euroa");
  465.  
  466. }
  467.  
  468. // kaikki parametrit käytössä
  469. } else {
  470. //PreparedStatement statement = connection.prepareStatement("SELECT numero, tyyppi, hinta FROM Hotellihuone LEFT JOIN VarausHotellihuone ON VarausHotellihuone.huonenumero_id = Hotellihuone.numero LEFT JOIN Varaus ON Varaus.id = VarausHotellihuone.varaus_id WHERE Varaus.loppupvm >= alkupvm OR Varaus.loppupvm IS NULL AND Varaus.alkupvm >= loppupvm OR Varaus.alkupvm IS NULL AND Hotellihuone.tyyppi = ? AND Hotellihuone.hinta <= ? ORDER BY Hotellihuone.hinta DESC;");
  471. PreparedStatement statement = connection.prepareStatement("SELECT numero, tyyppi, hinta FROM Hotellihuone WHERE tyyppi = ? AND hinta <= ? AND numero NOT IN (SELECT DISTINCT numero FROM Hotellihuone JOIN VarausHotellihuone ON VarausHotellihuone.huonenumero_id = Hotellihuone.numero JOIN Varaus ON Varaus.id = VarausHotellihuone.varaus_id WHERE (Varaus.loppupvm > ?) AND (Varaus.alkupvm < ?) OR Varaus.alkupvm IS NULL OR Varaus.loppupvm IS NULL);");
  472. statement.setString(1, tyyppi);
  473. statement.setString(2, max_hinta);
  474. statement.setDate(3, alku_paivays);
  475. statement.setDate(4,loppu_paivays);
  476.  
  477. ResultSet result = statement.executeQuery();
  478.  
  479.  
  480. while (result.next()) {
  481. Integer huoneNumero = result.getInt("numero");
  482. String huoneTyyppi = result.getString("tyyppi");
  483. Integer huoneHinta = result.getInt("hinta");
  484.  
  485. vapaatHuoneet.add(huoneNumero + ", " + huoneTyyppi + ", " + huoneHinta + " euroa");;
  486.  
  487. }
  488.  
  489. }
  490.  
  491. // Tulostetaan listan sisältö
  492. int vapaidenHuoneidenMaara = 0;
  493. if(vapaatHuoneet.isEmpty()) {
  494. System.out.println("Ei vapaita huoneita. ");
  495. } else {
  496. System.out.println("Vapaat huoneet: ");
  497. for (String huone : vapaatHuoneet) {
  498. System.out.println(huone);
  499. vapaidenHuoneidenMaara++;
  500. }
  501. }
  502. connection.close();
  503. return vapaidenHuoneidenMaara; // Palautetaan kokonaislukumuuttuja vapaatHuoneet, jota voidaan käyttää varauksessa vapaiden huoneiden lukumäärän selvittämiseen
  504. } catch (SQLException e) {}
  505. return 0;
  506. }
  507.  
  508.  
  509. public static void lisaaHuonevaraus(LocalDateTime alkupvm, LocalDateTime loppupvm, String tyyppi, String max_hinta, int huoneita, List <String> lisavarusteet, String nimi, String puhelinumero, String sahkoposti) {
  510.  
  511. lisaaAsiakas_aliohjelma(nimi, puhelinumero, sahkoposti);
  512. int VarausPK = lisaaVaraus_aliohjelma(alkupvm,loppupvm);
  513. lisaaLisavaruste_aliohjelma(lisavarusteet);
  514.  
  515.  
  516.  
  517.  
  518. }
  519.  
  520. public static void lisaaAsiakas_aliohjelma(String nimi, String puhelinumero, String sahkoposti) {
  521. try {
  522.  
  523. Connection connection = DriverManager.getConnection("jdbc:h2:./hotelliketju", "sa", "");
  524.  
  525. PreparedStatement statementAsiakas = connection.prepareStatement("INSERT INTO Asiakas (nimi, puhelinnumero, email) VALUES (?, ?, ?)");
  526.  
  527. statementAsiakas.setString(1, nimi);
  528. statementAsiakas.setString(2,puhelinumero);
  529. statementAsiakas.setString(3,sahkoposti);
  530.  
  531. statementAsiakas.executeUpdate();
  532. statementAsiakas.close();
  533.  
  534. connection.close();
  535. }
  536.  
  537. catch (SQLException e) {}
  538. }
  539.  
  540. public static int lisaaVaraus_aliohjelma(LocalDateTime alkupvm, LocalDateTime loppupvm) {
  541. try {
  542.  
  543.  
  544.  
  545. LocalDate alku = alkupvm.toLocalDate();
  546. LocalDate loppu = loppupvm.toLocalDate();
  547. Date alku_paivays = Date.valueOf(alku);
  548. Date loppu_paivays = Date.valueOf(loppu);
  549.  
  550. Connection connection = DriverManager.getConnection("jdbc:h2:./hotelliketju", "sa", "");
  551. PreparedStatement statementVaraus = connection.prepareStatement("INSERT INTO Varaus (alkupvm, loppupvm) VALUES (?, ?)", Statement.RETURN_GENERATED_KEYS);
  552.  
  553. statementVaraus.setDate(1, alku_paivays);
  554. statementVaraus.setDate(2,loppu_paivays);
  555.  
  556. statementVaraus.executeUpdate();
  557.  
  558. int id = -1;
  559. ResultSet rs = statementVaraus.getGeneratedKeys();
  560. if (rs.next()) {
  561. id = rs.getInt(1);
  562. }
  563.  
  564. statementVaraus.close();
  565. connection.close();
  566.  
  567. }
  568. catch (SQLException e) {}
  569. }
  570.  
  571. public static void lisaaLisavaruste_aliohjelma(List <String> lisavarusteet) {
  572. try {
  573.  
  574. Connection connection = DriverManager.getConnection("jdbc:h2:./hotelliketju", "sa", "");
  575.  
  576. PreparedStatement statementLisavaruste = connection.prepareStatement("-- prepataan muuttuja loopin ulkopuolella");
  577.  
  578. for (String lisavaruste : lisavarusteet) {
  579. statementLisavaruste = connection.prepareStatement("INSERT INTO Lisavaruste (nimi) VALUES (?)", Statement.RETURN_GENERATED_KEYS);
  580. statementLisavaruste.setString(1, lisavaruste);
  581. statementLisavaruste.executeUpdate();
  582. }
  583.  
  584. statementLisavaruste.close();
  585.  
  586. connection.close();
  587.  
  588. }
  589. catch (SQLException e) {}
  590. }
  591.  
  592.  
  593. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement