From 25547c8f307cfee783b5c7cb9b51db6dcbcb00ab Mon Sep 17 00:00:00 2001 From: Alex Katrenko <112182502+codemorphist@users.noreply.github.com> Date: Thu, 15 May 2025 11:31:39 +0300 Subject: [PATCH] Completed Task T29.16 --- HW11/README.md | 11 ++++ HW11/app.py | 118 +++++++++++++++++++++++++++++++++++ HW11/database.db | Bin 0 -> 16384 bytes HW11/requirements.txt | 7 +++ HW11/templates/guests.html | 31 +++++++++ HW11/templates/home.html | 15 +++++ HW11/templates/register.html | 26 ++++++++ 7 files changed, 208 insertions(+) create mode 100644 HW11/README.md create mode 100644 HW11/app.py create mode 100644 HW11/database.db create mode 100644 HW11/requirements.txt create mode 100644 HW11/templates/guests.html create mode 100644 HW11/templates/home.html create mode 100644 HW11/templates/register.html diff --git a/HW11/README.md b/HW11/README.md new file mode 100644 index 0000000..121b9f2 --- /dev/null +++ b/HW11/README.md @@ -0,0 +1,11 @@ +# Install requirements + +```shell +pip install -r requirements.txt +``` + +# Run app + +```shell +python app.py +``` diff --git a/HW11/app.py b/HW11/app.py new file mode 100644 index 0000000..7f45860 --- /dev/null +++ b/HW11/app.py @@ -0,0 +1,118 @@ +from flask import Flask, render_template, request, redirect +import sqlite3 + +app = Flask(__name__) + +class Person: + def __init__(self, name, byear): + self.name = name + self.byear = byear + + +class RoomType: + def __init__(self, id, name, rate): + self.id = id + self.name = name + self.rate = rate + + + +class Guest(Person): + def __init__(self, name, byear, room_type_id, nights): + super().__init__(name, byear) + self.room_type_id = room_type_id + self.nights = nights + + def calculate_total(self, rate): + return self.nights * rate + + +room_types = [ + ('Одномісний', 500), + ('Двомісний', 800), + ('Люкс', 1500) +] + + +def init_db(): + with sqlite3.connect('database.db') as conn: + c = conn.cursor() + c.execute(''' + CREATE TABLE IF NOT EXISTS room_types ( + id INTEGER PRIMARY KEY, + name TEXT, + rate REAL + ) + ''') + c.execute(''' + CREATE TABLE IF NOT EXISTS guests ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT, + byear TEXT, + room_type_id INTEGER, + nights INTEGER, + FOREIGN KEY(room_type_id) REFERENCES room_types(id) + ) + ''') + c.execute('SELECT COUNT(*) FROM room_types') + if c.fetchone()[0] == 0: + c.executemany('INSERT INTO room_types (name, rate) VALUES (?, ?)', room_types) + conn.commit() + + +@app.route('/') +def home(): + return render_template('home.html') + + +@app.route('/register', methods=['GET', 'POST']) +def register(): + conn = sqlite3.connect('database.db') + c = conn.cursor() + c.execute('SELECT * FROM room_types') + rooms = c.fetchall() + + if request.method == 'POST': + name = request.form['name'] + byear = request.form['byear'] + room_type_id = int(request.form['room_type_id']) + nights = int(request.form['nights']) + + guest = Guest(name, byear, room_type_id, nights) + + c.execute('INSERT INTO guests (name, byear, room_type_id, nights) VALUES (?, ?, ?, ?)', + (guest.name, guest.byear, guest.room_type_id, guest.nights)) + conn.commit() + return redirect('/guests') + + return render_template('register.html', rooms=rooms) + + +@app.route('/guests') +def guests(): + conn = sqlite3.connect('database.db') + c = conn.cursor() + c.execute(''' + SELECT g.name, g.byear, r.name, r.rate, g.nights + FROM guests g + JOIN room_types r ON g.room_type_id = r.id + ''') + data = c.fetchall() + guests = [] + for name, byear, room_name, rate, nights in data: + person = Guest(name, byear, None, nights) + guests.append({ + 'name': name, + 'byear': byear, + 'room': room_name, + 'rate': rate, + 'nights': nights, + 'total': person.calculate_total(rate) + }) + return render_template('guests.html', guests=guests) + + +if __name__ == '__main__': + init_db() + app.run(port=8000) + diff --git a/HW11/database.db b/HW11/database.db new file mode 100644 index 0000000000000000000000000000000000000000..a05eef334169ca03630f8731301c551b332ee79f GIT binary patch literal 16384 zcmeI(F;Ck-6bJA-+kij2s&`AHM#OK_dU*7#Py&<`m>2lz)*VS6Z z4cH2KL?|Vzj1fY#ySE%#p~!1o4ca#9UOZ5uX;af>ozwX&Kz?s%~{Xh#J*ec zlJZHTv7(H{;&FOxwsP(sdVb)yuWBSidyXY0SWlEoEM+--liMt7r?yPHz+UhIGq;^g z%91IzxaB1Ko@y4r9G-t*Y3ImuYkyd)RjZX^aP-zIcE9$4^BnuV;3vu@BXR(vzCg!f^YgSZ-BRmr?cOO7z3%*93-*^iz^vxV zHedeW>1ds;-dw*T`cM7491swI00bZa0SG_<0uX=z1Rwwb2>e$9Q>sSh6!AVh6<1+> z*A}p6rWW#OEvOb5g)`SITKl<*UkQ)>c5D5As_$&2tWV= z5P$##AOHafKmY;|7 + + + + Список гостей + + +

Список гостей

+ + + + + + + + + + {% for guest in guests %} + + + + + + + + + {% endfor %} +
ПрізвищеРік нар.Тип номераДібЦіна за добуЗагальна плата
{{ guest.name }}{{ guest.byear }}{{ guest.room }}{{ guest.nights }}{{ guest.rate }} грн{{ guest.total }} грн
+ + + diff --git a/HW11/templates/home.html b/HW11/templates/home.html new file mode 100644 index 0000000..cbe199a --- /dev/null +++ b/HW11/templates/home.html @@ -0,0 +1,15 @@ + + + + + + Готель + + +

Готель

+ + + diff --git a/HW11/templates/register.html b/HW11/templates/register.html new file mode 100644 index 0000000..b4d1596 --- /dev/null +++ b/HW11/templates/register.html @@ -0,0 +1,26 @@ + + + + + Реєстрація гостя + + +

Реєстрація гостя

+
+
+
+
+
+
+
+
+

+ +
+ + +