コード例 #1
0
def btn_click_cancelFlight(
        label, btn, comments, user
):  #...............................................................
    print("Cancel FLIGHT")
    if messagebox.askokcancel("Cancel",
                              "Are you sure you want to cancel this flight?"):
        btn.config(state='disabled')
        btn.config(text="Flight Cancelled!")

        print("CANCEL BUTTON CLICKED")
        print(css.global_user)
        print(entered_Flight_ID_numb)

        global user_name

        if user_name == 'search_admin':
            print("here1")
            messagebox.showerror("ERROR",
                                 "SEARCH ADMIN CANNOT CANCEL A FLIGHT")
        elif user_name == 'airline_admin':
            print("here2")
            db.cancel_flight_admin(entered_Flight_ID_numb)
            populate_airline_admin_gui(comments, label, user)
        else:
            print("here3")
            db.cancel_reservation_passenger(css.global_user,
                                            entered_Flight_ID_numb)
            populate_customer_reservations_gui(comments, user)
コード例 #2
0
def btn_click_bookFlight( label , btn ):#.............................................................................
	print("Book FLIGHT")

	if css.global_user=="please log-in":
		messagebox.showerror("Error", "You must log in first in Main Menu")
		return


	if messagebox.askokcancel("Book", "Are you sure you want to book this flight?"):
		#label.config(text="Flight Booked!")
		btn.config(state='disabled')
		btn.config(text="Flight Booked!")

		###########################################################
		print("USER NAME:" + css.global_user)
		print("ENTERED FLIGHT NUMBER:" + str(entered_Flight_ID_numb))

		#conn = db.db_connect()
		#sqlcode_custflight= "INSERT INTO CUST_FLIGHT VALUES(?,?,?)"
		#sqlcode_updatecapacity = "UPDATE FLIGHTS SET CAPACITY = CAPACITY - 1 WHERE FLIGHT_ID = ?"
		#conn.execute(sqlcode_custflight, (css.global_user, entered_Flight_ID_numb, "SEARCH_ENGINE"))
		#conn.execute(sqlcode_updatecapacity, (entered_Flight_ID_numb,))
		#conn.close()

		db.book_a_flight(css.global_user, entered_Flight_ID_numb, "SEARCH_ENGINE")
コード例 #3
0
def btn_click_saveFlight(
    save_Btn, user
):  #..............................................................................
    save_Btn.config(state='disabled')
    save_Btn.config(text="Flight Created!")

    date = global_year_entry + "-" + global_mon_entry + "-" + global_day_entry

    db.create_flights(global_airline_Name, date, global_time_entry,
                      global_from_Airport, global_to_Airport,
                      global_capacity_entry, global_fare_entry, 'ON-TIME')
コード例 #4
0
def populate_window():#...............................................................................................

	#conn = sqlite3.connect('Flight.db')
	conn = db.db_connect()

	if from_airport_global=="all" and to_airport_global=="all":

		sqlcode = "Select * from Flights WHERE Date >= ?" + " ORDER BY " + sort_by_global + " ASC"
		cursor = conn.execute(sqlcode, (cal_selected_date,)).fetchall()

	elif from_airport_global=="all":
		cursor = conn.execute("SELECT * FROM Flights WHERE To_Airport = ? AND Date >= ? ORDER BY "+sort_by_global+" ASC", (to_airport_global, cal_selected_date))

	elif to_airport_global=="all":
		cursor = conn.execute("SELECT * FROM Flights WHERE From_Airport = ? AND Date >= ? ORDER BY "+sort_by_global+" ASC", (from_airport_global, cal_selected_date))
	else:
		cursor = conn.execute("SELECT * FROM Flights WHERE From_Airport = ? AND To_Airport = ? AND DATE >= ? \
						   ORDER BY "+sort_by_global+" ASC", (from_airport_global,to_airport_global, cal_selected_date))

	content = ""

	collected_IDs.clear()

	for row in cursor:
		collected_IDs.add(row[0])

		content = content +"ID:"+ str(row[0]) +"  "+  str(row[1]) +"  "+ str(row[2]) +"  "+ str(row[3]) +"  "+ str(row[4])  \
					  	  +"  "+  str(row[5]) +"  "+ str(row[6]) +"  "+ str(row[7]) +"  "+ str(row[8]) + " " + '\n'
	conn.close()

	print(content)
	print(len(collected_IDs))

	return content
コード例 #5
0
def fetch_one_record(
    flight_numb, label, cancel_Btn
):  #..................................................................

    #sqlite_file = 'Flight.db'
    table_name = 'Flights'
    #conn = sqlite3.connect(sqlite_file)
    conn = db.db_connect()
    cursor = conn.cursor()

    # cursor.execute("SELECT Flight_ID FROM Flights WHERE Flight_ID = ?", (flight_numb,))
    cursor.execute("SELECT * FROM Flights WHERE Flight_ID = ?",
                   (flight_numb, ))
    data = cursor.fetchall()  # data=cursor.fetchone()
    if len(data) == 0:
        label.config(text="Flight ID: " + str(flight_numb) + " Does Not Exist")
    else:
        flight = "Flight ID:" + str(data[0][0]) + "  " + str(data[0][2]) + "  "

        time = str(data[0][3])
        if time.endswith(':00'):
            time = time[:-3]

        flight = flight + time +"  "+ "from:"+str(data[0][4]) +"  to:"+str(data[0][5]) +"  seats:"+str(data[0][6]) \
                  +"  fare:$"+str(data[0][7])  +"  status:"+str(data[0][8])

        label.config(text=flight)

        cancel_Btn.config(state='normal')
        cancel_Btn.config(text="Cancel Flight")

        btn_visibility_toggle(cancel_Btn, True)
コード例 #6
0
def btn_click_bookFlight(
    label, btn
):  # .............................................................................
    print("Book FLIGHT")

    if css.global_user == "please log-in":
        messagebox.showerror("Error", "You must log in first in Main Menu")
        return

    if messagebox.askokcancel("Book",
                              "Are you sure you want to book this flight?"):
        # label.config(text="Flight Booked!")
        btn.config(state='disabled')
        btn.config(text="Flight Booked!")

    print(css.global_user)
    print(entered_Flight_ID_numb)

    db.book_a_flight(css.global_user, entered_Flight_ID_numb, "AIRLINE_GUI")
コード例 #7
0
def get_table_colNames():#............................................................................................

	#sqlite_file = 'Flight.db'
	table_name = 'Flights'
	conn = db.db_connect()
	c = conn.cursor()
	c.execute('PRAGMA TABLE_INFO({})'.format(table_name))
	# collect names in a list
	names = [tup[1] for tup in c.fetchall()]

	conn.close()

	return names
コード例 #8
0
def populate_airline_admin_gui(
        comments, welcome_label,
        user):  #......................................................

    welcome_label.config(text=str('Welcome ' + user.capitalize() +
                                  ' here are ALL existing reservations:'))

    conn = db.db_connect()

    collected_IDs.clear()

    # sqlcode = "SELECT FLIGHTS.FLIGHT_ID, USERNAME, DATE, TIME, FROM_AIRPORT, TO_AIRPORT, STATUS FROM FLIGHTS_BOOKED INNER JOIN FLIGHTS WHERE FLIGHTS_BOOKED.Flight_ID = FLIGHTS.Flight_ID"
    sqlcode = "SELECT * FROM FLIGHTS INNER JOIN CUST_FLIGHT WHERE CUST_FLIGHT.Flight_ID = FLIGHTS.Flight_ID"
    cursor = conn.execute(sqlcode).fetchall()

    comments.delete(1.0, tk.END)

    content = ""
    for row in cursor:
        collected_IDs.add(row[0])

        content = content + "ID:" + str(row[0]) + "  " + str(
            row[1]) + "  " + str(row[2]) + "  "

        time = str(row[3])
        if time.endswith(':00'):
            time = time[:-3]

        content = content + time +"  "+  str(row[4]) +"  "+ str(row[5]) +"  "+ str(row[6]) +"  "+ str(row[7]) \
                  +"  "+ str(row[8]) +"  "+ str(row[9]) +"  "+ str(row[11]) + " " + '\n'

        comments.insert(tk.END, content)

    # --- Create FLIGHT BUTTON widget ---
    create_flight_Btn = Button(r_window,
                               width=20,
                               text='Create New Flight',
                               fg=css.color_text,
                               bg=css.color_btn,
                               relief='ridge')
    create_flight_Btn.config(highlightbackground=css.color_bg_newSession)
    create_flight_Btn.config(font=("Helvetica", 18, "bold"))
    create_flight_Btn.config(
        bd=8, relief='raised')  # flat, groove, raised, ridge, solid, or sunken
    create_flight_Btn.place(x=(css.frame_width + 140) / 2,
                            y=490,
                            anchor='center')
    create_flight_Btn.config(command=lambda: create_NEW_Flight(user))

    conn.close()
コード例 #9
0
def polulate_Inbound(
    origin
):  #............................................................................

    #conn = sqlite3.connect('Flight.db')

    #cursor = conn.execute("SELECT * FROM Flights")
    conn = db.db_connect()
    cursor = conn.execute("SELECT * FROM Flights WHERE To_Airport = ?",
                          (origin, ))

    content = ""

    for row in cursor:
        content = content +"ID:"+ str(row[0]) +"  "+  str(row[1]) +"  "+ str(row[2]) +"  "+ str(row[3]) +"  "+ str(row[4])  \
                +"  "+  str(row[5]) +"  "+ str(row[6]) +"  "+ str(row[7]) +"  "+ '\n'
    conn.close()
    return content
コード例 #10
0
def populate_window(
    value
):  # .........................................................................................

    conn = db.db_connect()
    sqlcode = "SELECT * FROM FLIGHTS WHERE Airline_Name = ?"

    cursor = conn.execute(sqlcode, (value, ))

    content = ""

    for row in cursor:
        collected_IDs.add(row[0])

        content = content + "ID:" + str(row[0]) + "  " + str(row[1]) + "  " + str(row[2]) + "  " + str(
            row[3]) + "  " + str(row[4]) \
                  + "  " + str(row[5]) + "  " + str(row[6]) + "  " + str(row[7]) + "  " + str(
            row[8]) + "  " + "  " + '\n'
    conn.close()
    return content
コード例 #11
0
def populate_search_engine_admin_gui(
        comments, cancelbutton
):  #.........................................................

    conn = db.db_connect()

    collected_IDs.clear()

    sqlcode = "SELECT * FROM FLIGHTS INNER JOIN CUST_FLIGHT ON FLIGHTS.FLIGHT_ID = CUST_FLIGHT.Flight_ID WHERE METHOD =?"

    se = "SEARCH_ENGINE"
    cursor = conn.execute(sqlcode, (se, )).fetchall()

    for row in cursor:
        collected_IDs.add(row[0])

        reservations = str(row[0]) + " " + str(row[1]) + " " + str(
            row[2]) + " " + str(row[3]) + " " + str(row[4]) + " " + str(
                row[5]) + " " + str(row[6]) + " " + str(row[7]) + " " + str(
                    row[8]) + " " + str(row[9]) + " " + str(row[11]) + '\n'
        comments.insert(tk.END, reservations)

    conn.close()
コード例 #12
0
def populate_customer_reservations_gui(
        comments, username
):  #...........................................................

    conn = db.db_connect()
    collected_IDs.clear()

    sqlcode = "SELECT * FROM FLIGHTS INNER JOIN CUST_FLIGHT ON FLIGHTS.Flight_ID = CUST_FLIGHT.Flight_ID WHERE CUST_FLIGHT.USERNAME = ?"

    cursor = conn.execute(sqlcode, (username, )).fetchall()
    comments.delete(1.0, tk.END)

    for row in cursor:
        collected_IDs.add(row[0])

        reservations = str(row[0]) + " " + str(row[1]) + " " + str(
            row[2]) + " " + str(row[3]) + " " + str(row[4]) + " " + str(
                row[5]) + " " + str(row[6]) + " " + str(row[7]) + " " + str(
                    row[8]) + " " + str(row[9]) + " " + str(row[11]) + '\n'
        comments.insert(tk.END, reservations)

    conn.close()

    # --- CANCEL FLIGHT BUTTON widget ---
    cancel_Btn = Button(r_window,
                        width=15,
                        text='Cancel Flight',
                        fg=css.color_text,
                        bg=css.color_btn,
                        relief='ridge')
    cancel_Btn.config(highlightbackground=css.color_bg_newSession)
    cancel_Btn.config(font=("Helvetica", 20, "bold"))
    cancel_Btn.config(
        bd=8, relief='raised')  # flat, groove, raised, ridge, solid, or sunken
    cancel_Btn.config(
        command=lambda: btn_click_cancelFlight(cancel_Btn)
    )  # calls btn_click_saveCurrentDate() when the button is clicked
コード例 #13
0
def init():#..........................................................................................................

	#-- GETTING THE DATE HERE THAT'S ALL
	with open('entered_data.txt', 'r') as text:  # create an output text file
		for line in text:
			entry = line

	items = line.split()

	entered_day = int(items[0].strip())  # remove whitespace characters i.e. '\n' at the start/end
	entered_mon = int(items[1].strip())
	entered_year = int(items[2].strip())
	date = datetime.datetime(entered_year, entered_mon, entered_day)  # year , month , day
	cal_selected_date = str(date.date())


	# -- MAKING GUI

	se_window.title('Search Engine')    	#Main window title
	x_screen = (se_window.winfo_screenwidth() // 2) - (css.frame_center_W)
	y_screen = (se_window.winfo_screenheight() // 2) - (css.frame_center_H) - 140

	width = css.frame_width + 140


	se_window.geometry("{}x{}+{}+{}".format( width , 970 , x_screen , y_screen ))	#Main window size & position
	se_window.config(bg=css.color_bg_newSession)
	se_window.resizable(False,False)

	x=120

	logo1 = PhotoImage(file = 'se.png')
	l_logo = Label(se_window, image=logo1, bg=css.color_bg_currentDate)
	l_logo.image = logo1
	l_logo.place(x=width/2, y = 15+x, anchor='center')

	# --- WELCOME INSTRUCTIONS LABEL widget ---
	label_1 = Label( se_window , width=60 , text='' , fg=css.color_text , bg=css.color_bg_newSession )
	label_1.place( x=width/2 , y=160+x , anchor='center' )
	label_1.config( font=( "Helvetica", 20 , "normal" ) )	# normal, bold, roman, italic, underline, and overstrike
	label_1.config( text=str('Please select the airports and date, then click search') )


	# --- SELECT FROM AIRPORT OPTION MENU widget ---
	#CONNECT TO DATABASE AND UPDATE THE FLIGHT LIST
	#conn = sqlite3.connect('Flight.db');

	conn = db.db_connect()
	sqlcode = "SELECT AIRPORTNAME FROM AIRPORTS"
	cursor = conn.execute(sqlcode).fetchall()
	from_option_List = []
	for row in cursor:
		from_option_List.append(row[0])
	conn.close()
	#from_option_List = ["all", "JFK", "LAG", "LAX", "DC", "DUB", "DFW"]	##### this must be populated from the SQLite3

	##### NEED THIS FUNCTION ################################################
	#PLEASE hardcode "all" as the 1st menu option
	#from_option_List = get_FROM_Airports()
	#########################################################################
	from_option_List.insert(0,'all')

	variable1 = StringVar(se_window)
	variable1.set("FROM")  # default value
	from_airport = OptionMenu(se_window, variable1, *from_option_List , command=from_selection )
	from_airport.config( font=( "Helvetica", 15 ) )
	from_airport.config( bg=css.color_bg_newSession , width=12 , fg=css.color_text)
	from_airport.place(x=width/3-15, y=200+x, anchor='center')


	# --- SELECT TO AIRPORT OPTION MENU widget ---
	# CONNECT TO DATABASE AND UPDATE THE FLIGHT LIST
	#conn = sqlite3.connect('Flight.db');

	conn = db.db_connect()
	sqlcode = "SELECT AIRPORTNAME FROM AIRPORTS"
	cursor = conn.execute(sqlcode).fetchall()
	to_option_List = []
	for row in cursor:
		to_option_List.append(row[0])
	conn.close()
	#to_option_List = ["all", "JFK", "LAG", "LAX", "DC", "DUB", "DFW"]	##### this must be populated from the SQLite3

	##### NEED THIS FUNCTION ################################################
	#PLEASE hardcode "all" as the 1st menu option
	#to_option_List = get_TO_Airports()
	#########################################################################
	to_option_List.insert(0,'all')

	variable2 = StringVar(se_window)
	variable2.set("TO")
	to_airport = OptionMenu(se_window, variable2, *to_option_List , command=to_selection )
	to_airport.config( font=( "Helvetica", 15 ) )
	to_airport.config( bg=css.color_bg_newSession , width=12 , fg=css.color_text)
	to_airport.place(x=width/2, y=200+x, anchor='center')


	# --- SELECT SORTING OPTION MENU widget ---
	flights_table_names = get_table_colNames() ;
	sort_option_List = flights_table_names #e.g. sort_option_List = ["Airline_ID", "From_Airport" , "To_Airport" , "Airline" ]
	variable3 = StringVar(se_window)
	variable3.set("SORT BY")
	sort = OptionMenu(se_window, variable3, *sort_option_List , command=sort_selection  )
	sort.config( font=( "Helvetica", 15 ) )
	sort.config( bg=css.color_bg_newSession , width=12 , fg=css.color_text)
	sort.place(x=width-(width/3)+15, y=200+x, anchor='center')


	# CALENDAR SECTION ..................................................
	cal = Calendar(se_window,
				   font="Arial 14", selectmode='day',
				   year=entered_year, month=entered_mon, day=entered_day, showweeknumbers=False, mindate= date)


	# style = ttk.Style(cal)
	# style.theme_use('calm')
	cal.place(x = width/2, y=320+x, anchor='center')


	results = Text(se_window, width=90, height=10, fg=css.color_text, bg=css.color_bg_reservations, yscrollcommand = set())
	results.config(font=("Helvetica", 16, "normal"))
	results.config(state=NORMAL)
	results.place(x=width/2, y=575 + x, anchor='center')
	results.insert(END,"RESULTS WILL PRINT HERE")
	results.configure(state='disabled')

	def calendar_select():
		global cal_selected_date
		cal_selected_date = str(cal.selection_get())
		print(cal_selected_date)

	def print_search_results(): # MAKES THE SEARCH RESULTS AND ADDS IT TO THE MAIN GUI WINDOW
		calendar_select()
		content = populate_window()
		results.config(state=NORMAL)
		results.delete('1.0', END)
		results.insert(END,content)
		results.configure(state='disabled')	
		book_Btn.config(text='Book Flight')
		book_Btn.config(state='normal')		# must be active, disabled, or normal
	# END CALENDAR SECTION .............................................


	# --- ENTER FLIGHT ID widget
	label_2 = Label( se_window , width=20 , text='' , fg=css.color_text , bg=css.color_bg_newSession )
	label_2.place( x=(width/2)-60 , y=706+x , anchor='center' )
	label_2.config( font=( "Helvetica", 20 , "normal" ) )	# normal, bold, roman, italic, underline, and overstrike
	label_2.config( text=str('Enter Flight ID') )


	# --- FLIGHT ID ENTRY widget ---
	entry_ID = Entry( se_window, show=None, width=5, bg='#FFFFFF', fg=css.color_placeholder, exportselection=0, justify='center')
	entry_ID.config( font=( "Helvetica", 20 , "normal" ) )
	entry_ID.bind('<Return>', lambda args: enter_keyboardkKey(entry_ID) )
	#entry_ID.bind('<KeyRelease>', lambda args: enter_keyboardkKey(entry_ID) ) # for dynamic realtime feedback capture
	entry_ID.bind("<FocusIn>", lambda args: entry_ID_click( entry_ID))
	entry_ID.bind("<FocusOut>", lambda args: entry_ID_check(entry_ID,label_3,book_Btn))
	entry_ID.insert(0, '0')
	entry_ID.place( x=(width/2)+48 , y=705+x , anchor='center') # alternative to entry_ID.pack()
	#entry_ID.focus_set() # to automatically focus on the widget at start up


	# --- SELECTED FLIGHT ID widget ---
	label_3 = Label( se_window , width=85 , text='' , fg=css.color_text , bg=css.color_bg_newSession )
	label_3.place( x=width/2 , y=747+x , anchor='center' )
	label_3.config( font=( "Helvetica", 16 , "normal" ) )	# normal, bold, roman, italic, underline, and overstrike
	label_3.config( text='' )


	# --- SEARCH BUTTON widget ---
	searchButton = Button( se_window , width=15, text='SEARCH', fg=css.color_text, bg=css.color_btn )
	searchButton.config( highlightbackground=css.color_bg_newSession )
	searchButton.config( font=( "Helvetica", 20 , "bold" ) )
	searchButton.config( bd=8, relief='raised' )
	searchButton.config( command=print_search_results )
	searchButton.place( x=width/2 , y=445+x , anchor='center')


	# --- BOOK FLIGHT BUTTON widget ---
	book_Btn = Button( se_window , width=15, text='Book Flight', fg=css.color_text, bg=css.color_btn, relief='ridge' )
	book_Btn.config( highlightbackground=css.color_bg_newSession )
	book_Btn.config( font=( "Helvetica", 20 , "bold" ) )
	book_Btn.config( bd=8, relief='raised' )					# flat, groove, raised, ridge, solid, or sunken
	book_Btn.config( command=lambda: btn_click_bookFlight(label_3,book_Btn) )
	#book_Btn.config( command=book)
	#book_Btn.bind('<Button-1>', hide_me)
	#book_Btn.place( x=css.frame_center_W , y=785+x , anchor='center')
	btn_visibility_toggle( book_Btn , False)


	# --- LOG-IN BUTTON widget ---
	login_Btn = Button(se_window, width=10, text='admin', fg=css.color_text, bg=css.color_btn)
	login_Btn.config( highlightbackground=css.color_bg_newSession )
	login_Btn.config(font=("Helvetica", 15, "bold"))
	login_Btn.config(bd=8, relief='raised')  # flat, groove, raised, ridge, solid, or sunken
	login_Btn.config(command=btn_click_LogIn)  # calls btn_click_LogIn() when the button is clicked
	login_Btn.place(x=100, y=26, anchor='center')

	# --- LOGGED IN USER LABEL widget ---
	label_user = Label( se_window , width=15 , text='' , fg=css.color_text , bg=css.color_bg_newSession )
	label_user.place( x=width-100 , y=26 , anchor='center' )
	label_user.config( font=( "Helvetica", 16 , "bold" ) )	# normal, bold, roman, italic, underline, and overstrike
	label_user.config( text=str("user: "******"WM_DELETE_WINDOW", on_closing)
コード例 #14
0
import DB_UTIL as db
con = db.db_connect()
a = db.check_capacity(con, 1)
print(a)
print(type(a))
con.close()
コード例 #15
0
import DB_UTIL

drops = [
    'DROP TABLE IF EXISTS Customer;', 'DROP TABLE IF EXISTS Airports;',
    'DROP TABLE IF EXISTS Airlines;', 'DROP TABLE IF EXISTS Flights;',
    'DROP TABLE IF EXISTS Cust_Flight;'
]

creates = [
    #'CREATE TABLE Customer(CustID INTEGER PRIMARY KEY AUTOINCREMENT, UserName NVARCHAR(50) NOT NULL);',
    'CREATE TABLE Airports(AirportID INTEGER PRIMARY KEY AUTOINCREMENT, AirportName NVARCHAR(50) NOT NULL, CityName NVARCHAR(50) NOT NULL, Country NVARCHAR(50) NOT NULL);',
    'CREATE TABLE Airlines(AirlineID INTEGER PRIMARY KEY AUTOINCREMENT, AirlineName NVARCHAR(50) NOT NULL);',
    #'CREATE TABLE Flights(FlightID INTEGER PRIMARY KEY AUTOINCREMENT, AirlineID INT NOT NULL, Origin INT NOT NULL, Destination INT NOT NULL, CurrentPassengers INT DEFAULT 0, Capacity INT NOT NULL, FlightStatus NUMERIC DEFAULT 1, Fare INT NOT NULL, FlightDate NUMERIC NOT NULL, DepartureTime NUMERIC NOT NULL, FlightTime NUMERIC NOT NULL, FOREIGN KEY(Origin) REFERENCES Airports(AirportID), FOREIGN KEY(Destination) REFERENCES Airports(AirportID), FOREIGN KEY(AirlineID) REFERENCES Airlines(AirlineID));',
    'CREATE TABLE Flights(Flight_ID INTEGER PRIMARY KEY AUTOINCREMENT, Airline_Name NVARCHAR(50), Date NUMERIC, Time NUMERIC, From_Airport NVARCHAR(50), To_Airport NVARCHAR(50), Capacity INT, Fare INT, Status NVARCHAR(50));',
    #'CREATE TABLE Cust_Flight(CustID INT NOT NULL, FlightID INT NOT NULL, GuiSearch NUMERIC NOT NULL, FOREIGN KEY (CustID) REFERENCES Customer(CustID) ON DELETE CASCADE, FOREIGN KEY (FlightID) REFERENCES Flights(FlightID) ON DELETE CASCADE);'
    'CREATE TABLE Cust_Flight(UserName NVARCHAR(50) NOT NULL, Flight_ID INT NOT NULL, Method NVARCHAR(50), FOREIGN KEY (Flight_ID) REFERENCES Flights(Flight_ID) ON DELETE CASCADE, PRIMARY KEY(UserName, Flight_ID));'
]

#myconnectionobject = DB_UTIL.db_connect()

for i in range(0, len(drops)):
    DB_UTIL.cd_table(drops[i])

for i in range(0, len(creates)):
    DB_UTIL.cd_table(creates[i])

get_tables = "SELECT name FROM sqlite_master WHERE type='table'"
print(DB_UTIL.queryexec(get_tables))
コード例 #16
0
def btn_click_createAirport(create_btn):#..............................................................................
    create_btn.config(state='disabled')
    create_btn.config(text="Airport Created!")

    db.create_airports(global_airport_Name, 'Some-City', 'Some-Country')
コード例 #17
0
def btn_click_createAirline(create_btn):#..............................................................................
    create_btn.config(state='disabled')
    create_btn.config(text="Airline Created!")

    db.create_airlines(global_airline_Name)
コード例 #18
0
    ('lufthansa', '2019-12-13', '10:50:00', 'JFK', 'JKT', 150, 500, 'Avail'), 
    ('finnair', '2019-12-19', '05:50:00', 'JFK', 'JKT', 150, 500, 'Avail'),
    ('aeromexico', '2019-12-18', '02:50:00', 'MAM', 'MEM', 150, 500, 'Avail'),
    ('quantas', '2019-12-20', '06:50:00', 'MARS', 'JUPITER', 150, 500, 'Avail'),
    ('british airways', '2019-12-12', '09:50:00', 'HOOVERDAM', 'AREA51', 150, 500, 'Booked')    
)

"""
Perhaps we can figure out a way to create a huge amount of these tuples and store in a file, then choose stuff randomly.
We can make this happen, pretty easily.
Now, we need to add these to the DB. LETS BEGIN
"""

import DB_UTIL
import randdata as rd
conobj = DB_UTIL.db_connect() #Connect to the DB

#So now that we're connected, lets start adding things.

#for i in range(0, len(customers)):
#    DB_UTIL.create_customer(conobj, customers[i])

for i in range(0, len(rd.airports)):
    DB_UTIL.create_airports(rd.airports[i][0], rd.airports[i][1], rd.airports[i][2])

for i in range(0, len(rd.airlines)):
    DB_UTIL.create_airlines(rd.airlines[i])

for i in range(0, len(rd.flights)):
    DB_UTIL.create_flights(rd.flights[i][0], rd.flights[i][1], rd.flights[i][2], rd.flights[i][3], rd.flights[i][4], rd.flights[i][5], rd.flights[i][6], rd.flights[i][7])
コード例 #19
0
def init(
    admin_name, parent
):  #............................................................................................

    f_window.title('Create New Flight')  #Main window title
    x_screen = (f_window.winfo_screenwidth() // 2) - (css.frame_center_W)
    y_screen = (f_window.winfo_screenheight() // 2) - (css.frame_center_H)

    width = css.frame_width + 140

    f_window.geometry(
        "{}x{}+{}+{}".format(width, css.frame_hight, x_screen,
                             y_screen))  #Main window size & position
    f_window.config(bg=css.color_bg_newSession)
    f_window.resizable(False, False)

    #--- SAVE BUTTON DECLARED HERE
    save_Btn = tk.Button(f_window,
                         width=20,
                         text='Create Flight',
                         fg=css.color_text,
                         bg=css.color_btn,
                         relief='ridge')
    save_Btn.config(highlightbackground=css.color_bg_newSession)
    save_Btn.config(font=("Helvetica", 18, "bold"))
    save_Btn.config(
        bd=8, relief='raised')  # flat, groove, raised, ridge, solid, or sunken
    save_Btn.config(command=lambda: btn_click_saveFlight(save_Btn, admin_name))

    # --- AIRLINE NAME ENTRY widget ---
    airline_Name = tk.Entry(f_window,
                            show=None,
                            width=25,
                            bg="#FFFFFF",
                            fg=css.color_placeholder,
                            exportselection=0,
                            justify='center')
    airline_Name.config(font=("Helvetica", 20, "bold"))
    airline_Name.bind("<FocusIn>",
                      lambda args: entry_click('Airline Name', airline_Name))
    airline_Name.bind(
        "<FocusOut>",
        lambda args: entry_check('Airline Name', airline_Name, save_Btn))
    airline_Name.insert(0, 'Airline Name')
    airline_Name.bind('<Return>',
                      lambda args: enter_keyboardkKey(airline_Name))
    airline_Name.place(x=width / 2, y=50, anchor='n')

    # --- FROM AIRPORT widget ---
    from_Airport = tk.Entry(f_window,
                            show=None,
                            width=25,
                            bg="#FFFFFF",
                            fg=css.color_placeholder,
                            exportselection=0,
                            justify='center')
    from_Airport.config(font=("Helvetica", 20, "bold"))
    from_Airport.bind("<FocusIn>",
                      lambda args: entry_click('From Airport', from_Airport))
    from_Airport.bind(
        "<FocusOut>",
        lambda args: entry_check('From Airport', from_Airport, save_Btn))
    from_Airport.insert(0, 'From Airport')
    from_Airport.bind('<Return>',
                      lambda args: enter_keyboardkKey(from_Airport))
    from_Airport.place(x=width / 2, y=100, anchor='n')

    # --- TO AIRPORT ENTRY widget ---
    to_Airport = tk.Entry(f_window,
                          show=None,
                          width=25,
                          bg="#FFFFFF",
                          fg=css.color_placeholder,
                          exportselection=0,
                          justify='center')
    to_Airport.config(font=("Helvetica", 20, "bold"))
    to_Airport.bind("<FocusIn>",
                    lambda args: entry_click('To Airport', to_Airport))
    to_Airport.bind(
        "<FocusOut>",
        lambda args: entry_check('To Airport', to_Airport, save_Btn))
    to_Airport.insert(0, 'To Airport')
    to_Airport.bind('<Return>', lambda args: enter_keyboardkKey(to_Airport))
    to_Airport.place(x=width / 2, y=150, anchor='n')

    # --- TIME ENTRY widget ---
    time_entry = tk.Entry(f_window,
                          show=None,
                          width=25,
                          bg="#FFFFFF",
                          fg=css.color_placeholder,
                          exportselection=0,
                          justify='center')
    time_entry.config(font=("Helvetica", 20, "bold"))
    time_entry.bind("<FocusIn>",
                    lambda args: entry_click('Departure Time', time_entry))
    time_entry.bind(
        "<FocusOut>",
        lambda args: entry_check('Departure Time', time_entry, save_Btn))
    time_entry.insert(0, 'Departure Time')
    time_entry.bind('<Return>', lambda args: enter_keyboardkKey(time_entry))
    time_entry.place(x=width / 2, y=200, anchor='n')

    # --- Day ENTRY widget ---
    day_entry = tk.Entry(f_window,
                         show=None,
                         width=25,
                         bg="#FFFFFF",
                         fg=css.color_placeholder,
                         exportselection=0,
                         justify='center')
    day_entry.config(font=("Helvetica", 20, "bold"))
    day_entry.bind("<FocusIn>", lambda args: entry_click('day', day_entry))
    day_entry.bind("<FocusOut>",
                   lambda args: entry_check('day', day_entry, save_Btn))
    day_entry.insert(0, 'day')
    day_entry.bind('<Return>', lambda args: enter_keyboardkKey(day_entry))
    day_entry.place(x=width / 2, y=250, anchor='n')

    # --- Month ENTRY widget ---
    mon_entry = tk.Entry(f_window,
                         show=None,
                         width=25,
                         bg="#FFFFFF",
                         fg=css.color_placeholder,
                         exportselection=0,
                         justify='center')
    mon_entry.config(font=("Helvetica", 20, "bold"))
    mon_entry.bind("<FocusIn>", lambda args: entry_click('mon', mon_entry))
    mon_entry.bind("<FocusOut>",
                   lambda args: entry_check('mon', mon_entry, save_Btn))
    mon_entry.insert(0, 'month')
    mon_entry.bind('<Return>', lambda args: enter_keyboardkKey(mon_entry))
    mon_entry.place(x=width / 2, y=300, anchor='n')

    # --- Year ENTRY widget ---
    year_entry = tk.Entry(f_window,
                          show=None,
                          width=25,
                          bg="#FFFFFF",
                          fg=css.color_placeholder,
                          exportselection=0,
                          justify='center')
    year_entry.config(font=("Helvetica", 20, "bold"))
    year_entry.bind("<FocusIn>", lambda args: entry_click('year', year_entry))
    year_entry.bind("<FocusOut>",
                    lambda args: entry_check('year', year_entry, save_Btn))
    year_entry.insert(0, 'year')
    year_entry.bind('<Return>', lambda args: enter_keyboardkKey(year_entry))
    year_entry.place(x=width / 2, y=350, anchor='n')

    # --- Fare ENTRY widget ---
    fare_entry = tk.Entry(f_window,
                          show=None,
                          width=25,
                          bg="#FFFFFF",
                          fg=css.color_placeholder,
                          exportselection=0,
                          justify='center')
    fare_entry.config(font=("Helvetica", 20, "bold"))
    fare_entry.bind("<FocusIn>", lambda args: entry_click('Fare', fare_entry))
    fare_entry.bind("<FocusOut>",
                    lambda args: entry_check('Fare', fare_entry, save_Btn))
    fare_entry.insert(0, 'Fare')
    fare_entry.bind('<Return>', lambda args: enter_keyboardkKey(fare_entry))
    fare_entry.place(x=width / 2, y=400, anchor='n')

    # --- Capacity ENTRY widget ---
    capacity_entry = tk.Entry(f_window,
                              show=None,
                              width=25,
                              bg="#FFFFFF",
                              fg=css.color_placeholder,
                              exportselection=0,
                              justify='center')
    capacity_entry.config(font=("Helvetica", 20, "bold"))
    capacity_entry.bind("<FocusIn>",
                        lambda args: entry_click('Capacity', capacity_entry))
    capacity_entry.bind(
        "<FocusOut>",
        lambda args: entry_check('Capacity', capacity_entry, save_Btn))
    capacity_entry.insert(0, 'Capacity')
    capacity_entry.bind('<Return>',
                        lambda args: enter_keyboardkKey(capacity_entry))
    capacity_entry.place(x=width / 2, y=450, anchor='n')

    conn = db.db_connect()
    sqlcode = "SELECT AIRPORTNAME FROM AIRPORTS"
    cursor = conn.execute(sqlcode).fetchall()
    from_option_List = []
    for row in cursor:
        from_option_List.append(row[0])
    conn.close()

    from_option_List.insert(0, 'all')

    variable1 = tk.StringVar(f_window)
    variable1.set("FROM")  # default value
    from_airport = tk.OptionMenu(f_window,
                                 variable1,
                                 *from_option_List,
                                 command=from_selection)
    from_airport.config(font=("Helvetica", 15))
    from_airport.config(bg=css.color_bg_newSession,
                        width=12,
                        fg=css.color_text)
    from_airport.place(x=width / 3 - 100, y=100, anchor='n')

    conn = db.db_connect()
    sqlcode = "SELECT AIRPORTNAME FROM AIRPORTS"
    cursor = conn.execute(sqlcode).fetchall()
    to_option_List = []
    for row in cursor:
        to_option_List.append(row[0])
    conn.close()

    to_option_List.insert(0, 'all')

    variable1 = tk.StringVar(f_window)
    variable1.set("TO")  # default value
    to_airport = tk.OptionMenu(f_window,
                               variable1,
                               *to_option_List,
                               command=to_selection)
    to_airport.config(font=("Helvetica", 15))
    to_airport.config(bg=css.color_bg_newSession, width=12, fg=css.color_text)
    to_airport.place(x=width / 3 - 100, y=150, anchor='n')

    conn = db.db_connect()
    sqlcode = "SELECT AIRLINENAME FROM AIRLINES"
    cursor = conn.execute(sqlcode).fetchall()
    airline_option_List = []
    for row in cursor:
        airline_option_List.append(row[0])
    conn.close()

    airline_option_List.insert(0, 'all')

    variable1 = tk.StringVar(f_window)
    variable1.set("AIRLINES")  # default value
    from_airport = tk.OptionMenu(f_window,
                                 variable1,
                                 *airline_option_List,
                                 command=airline_selection)
    from_airport.config(font=("Helvetica", 15))
    from_airport.config(bg=css.color_bg_newSession,
                        width=12,
                        fg=css.color_text)
    from_airport.place(x=width / 3 - 100, y=50, anchor='n')

    f_window.protocol("WM_DELETE_WINDOW", on_closing)
コード例 #20
0
def init(
):  #...............................................................................

    ap_window.title('Airports')  #Main window title
    x_screen = (ap_window.winfo_screenwidth() // 2) - (css.frame_center_W)
    y_screen = (ap_window.winfo_screenheight() // 2) - (css.frame_center_H)

    ap_window.geometry(
        "{}x{}+{}+{}".format(css.frame_width, css.frame_hight, x_screen,
                             y_screen))  #Main window size & position
    ap_window.config(bg=css.color_bg_newSession)
    ap_window.resizable(False, False)

    x = 120

    image = PhotoImage(file='airport.png')
    l_logo = Label(ap_window, image=image, bg=css.color_bg_currentDate)
    l_logo.image = image
    l_logo.place(x=css.frame_center_W, y=15 + x, anchor='center')

    # --- WELCOME INSTRUCTIONS LABEL widget ---
    label_1 = Label(ap_window,
                    width=60,
                    text='',
                    fg=css.color_text,
                    bg=css.color_bg_newSession)
    label_1.place(x=css.frame_center_W, y=170 + x, anchor='center')
    label_1.config(font=(
        "Helvetica", 20,
        "normal"))  # normal, bold, roman, italic, underline, and overstrike
    label_1.config(text=str('Welcome traveler, please select your airport'))

    # --- SELECT FROM AIRPORT OPTION MENU widget ---
    #CONNECT TO DATABASE AND UPDATE THE FLIGHT LIST
    #conn = sqlite3.connect('Flight.db');

    conn = db.db_connect()

    sqlcode = "SELECT AIRPORTNAME FROM AIRPORTS"
    cursor = conn.execute(sqlcode).fetchall()
    from_option_List = []
    for row in cursor:
        from_option_List.append(row[0])
    conn.close()
    #from_option_List = ["all", "JFK", "LAG", "LAX", "DC", "DUB", "DFW"]	##### this must be populated from the SQLite3

    ##### NEED THIS FUNCTION ################################################
    #PLEASE hardcode "all" as the 1st menu option
    #from_option_List = get_FROM_Airports()
    #########################################################################

    variable1 = StringVar(ap_window)
    variable1.set("FROM AIRPORT")  # default value
    from_airport = OptionMenu(ap_window,
                              variable1,
                              *from_option_List,
                              command=from_selection)
    from_airport.config(font=("Helvetica", 17))
    from_airport.config(bg=css.color_bg_newSession,
                        width=20,
                        fg=css.color_text)
    from_airport.place(x=css.frame_center_W - 130, y=208 + x, anchor='center')

    # --- SELECT TO AIRPORT OPTION MENU widget ---
    # CONNECT TO DATABASE AND UPDATE THE FLIGHT LIST
    #conn = sqlite3.connect('Flight.db');

    conn = db.db_connect()
    sqlcode = "SELECT AIRPORTNAME FROM AIRPORTS"
    cursor = conn.execute(sqlcode).fetchall()
    to_option_List = []
    for row in cursor:
        to_option_List.append(row[0])
    conn.close()
    #to_option_List = ["all", "JFK", "LAG", "LAX", "DC", "DUB", "DFW"]	##### this must be populated from the SQLite3

    ##### NEED THIS FUNCTION ################################################
    #PLEASE hardcode "all" as the 1st menu option
    #to_option_List = get_TO_Airports()
    #########################################################################

    variable2 = StringVar(ap_window)
    variable2.set("TO AIRPORT")
    to_airport = OptionMenu(ap_window,
                            variable2,
                            *to_option_List,
                            command=to_selection)
    to_airport.config(font=("Helvetica", 17))
    to_airport.config(bg=css.color_bg_newSession, width=20, fg=css.color_text)
    to_airport.place(x=css.frame_center_W + 130, y=208 + x, anchor='center')

    # --- Current Date LABEL widget
    label_date = Label(ap_window,
                       width=30,
                       text='',
                       fg=css.color_text,
                       bg=css.color_bg_newSession)
    label_date.place(x=css.frame_center_W, y=610, anchor='center')
    label_date.config(font=(
        "Helvetica", 20,
        "normal"))  # normal, bold, roman, italic, underline, and overstrike
    label_date.config(text=str(css.show_date))  # display the entered date
    # -------------------------------------------------------

    ap_window.protocol("WM_DELETE_WINDOW", on_closing)
コード例 #21
0
import DB_UTIL as db
#import numpy as np

con = db.db_connect()

#"""
#Here, I simply test the functionality of the DB. Give it a shot
db.create_flights('MANEMARS', '3030-30-30', '22:30:30', 'Area51', 'MarsRover', 1, 0, 'ON-TIME')
a = db.get_Flights('To_Airport')
print(a)

#db.queryexec("DELETE FROM Cust_Flight;")
#con.commit()

#print(db.book_a_flight('paul', 1, 'GUI'))
#print(db.book_a_flight('paul', 420, 'SEARCH'))
db.cancel_flight_admin(420)

#Now check reservations
print('\n\n')
print(db.get_full_user_reservation('paul'))

db.cancel_reservation_passenger('paul', 420)
print(db.get_full_user_reservation('paul'))

#"""
#Lets test my new work here
#for i in range(1, 10):
#print(db.get_user_reservation('paul'))
#flight_from_jfk = db.queryexec("SELECT * FROM Flights WHERE From_Airport = 'KJFK-New York' ORDER BY Airline_Name ASC")
#print(flight_from_jfk)
コード例 #22
0
def init(
):  # .......................................................................................................

    print(get_table_colNames())

    # -- GETTING THE DATE HERE THAT'S ALL
    with open('entered_data.txt', 'r') as text:  # create an output text file
        for line in text:
            entry = line

    items = line.split()

    entered_day = int(items[0].strip(
    ))  # remove whitespace characters i.e. '\n' at the start/end
    entered_mon = int(items[1].strip())
    entered_year = int(items[2].strip())
    date = datetime.datetime(entered_year, entered_mon,
                             entered_day)  # year , month , day
    cal_selected_date = str(date.date())

    a_window.title('Airlines')  # Main window title
    x_screen = (a_window.winfo_screenwidth() // 2) - (css.frame_center_W)
    y_screen = (a_window.winfo_screenheight() // 2) - (css.frame_center_H)

    width = css.frame_width + 80

    a_window.geometry(
        "{}x{}+{}+{}".format(width, css.frame_hight, x_screen,
                             y_screen))  # Main window size & position
    a_window.config(bg=css.color_bg_newSession)
    a_window.resizable(False, False)

    x = 120

    # HERE IS CODE FOR THE IMAGE. USE SUITABLE IMAGE ANG FILENAME HERE PLEASE
    logo1 = PhotoImage(file='airlines.png')
    l_logo = Label(a_window, image=logo1, bg=css.color_bg_currentDate)
    l_logo.image = logo1
    l_logo.place(x=width / 2, y=10, anchor='n')

    a_window.protocol("WM_DELETE_WINDOW", on_closing)

    # HERE IS THE CODE FOR THE ADMIN BUTTON
    # --- LOG-IN BUTTON widget ---
    login_Btn = Button(a_window,
                       width=10,
                       text='admin',
                       fg=css.color_text,
                       bg=css.color_btn)
    login_Btn.config(highlightbackground=css.color_bg_newSession)
    login_Btn.config(font=("Helvetica", 15, "bold"))
    login_Btn.config(
        bd=8, relief='raised')  # flat, groove, raised, ridge, solid, or sunken
    login_Btn.config(command=btn_click_LogIn
                     )  # calls btn_click_LogIn() when the button is clicked
    login_Btn.place(x=120, y=26, anchor='center')

    # HERE IS THE CODE FOR DISPLAY LABEL
    label_1 = Label(a_window,
                    width=60,
                    text='',
                    fg=css.color_text,
                    bg=css.color_bg_newSession)
    label_1.place(x=css.frame_center_W, y=128 + x, anchor='center')
    label_1.config(font=(
        "Helvetica", 18,
        "normal"))  # normal, bold, roman, italic, underline, and overstrike
    label_1.config(text=str('AVAILABLE FLIGHTS FOR YOUR SELECTED AIRLINE'))

    # CONNECT TO DATABASE AND UPDATE THE AIRLINE LIST
    # conn = sqlite3.connect('Flight.db');

    conn = db.db_connect()

    sqlcode = "SELECT AIRLINENAME FROM AIRLINES"
    cursor = conn.execute(sqlcode).fetchall()
    airline_option_List = []
    for row in cursor:
        airline_option_List.append(row[0])
    conn.close()

    variable1 = StringVar(a_window)
    variable1.set("AIRLINES")  # default value
    from_airport = OptionMenu(a_window,
                              variable1,
                              *airline_option_List,
                              command=from_selection)
    from_airport.config(font=("Helvetica", 16))
    from_airport.config(bg=css.color_bg_newSession,
                        width=15,
                        fg=css.color_text)
    from_airport.place(x=120, y=52, anchor='center')

    # --- RESULTS TEXT BOX widget ---
    global results
    results = Text(a_window,
                   width=90,
                   height=12,
                   fg=css.color_text,
                   bg=css.color_bg_reservations,
                   yscrollcommand=set())
    results.config(font=("Helvetica", 15, "normal"))
    results.config(state=NORMAL)
    results.place(x=width / 2, y=244 + x, anchor='center')
    results.insert(END, "RESULTS HERE")
    results.configure(state='disabled')

    # --- ENTER FLIGHT ID widget ---
    label_2 = Label(a_window,
                    width=20,
                    text='',
                    fg=css.color_text,
                    bg=css.color_bg_newSession)
    label_2.place(x=css.frame_center_W - 60, y=380 + x, anchor='center')
    label_2.config(font=(
        "Helvetica", 20,
        "normal"))  # normal, bold, roman, italic, underline, and overstrike
    label_2.config(text=str('Enter Flight ID'))

    # --- FLIGHT ID ENTRY widget ---
    entry_ID = Entry(a_window,
                     show=None,
                     width=5,
                     bg='#FFFFFF',
                     fg=css.color_placeholder,
                     exportselection=0,
                     justify='center')
    entry_ID.config(font=("Helvetica", 20, "normal"))
    entry_ID.bind('<Return>', lambda args: enter_keyboardkKey(entry_ID))
    # entry_ID.bind('<KeyRelease>', lambda args: enter_keyboardkKey(entry_ID) ) # for dynamic realtime feedback capture
    entry_ID.bind("<FocusIn>", lambda args: entry_ID_click(entry_ID))
    entry_ID.bind("<FocusOut>",
                  lambda args: entry_ID_check(entry_ID, label_3, book_Btn))
    entry_ID.insert(0, '0')
    entry_ID.place(x=css.frame_center_W + 48, y=380 + x,
                   anchor='center')  # alternative to entry_ID.pack()
    # entry_ID.focus_set() # to automatically focus on the widget at start up

    # --- SELECTED FLIGHT ID widget ---
    label_3 = Label(a_window,
                    width=110,
                    text='',
                    fg=css.color_text,
                    bg=css.color_bg_newSession)
    label_3.place(x=width / 2, y=420 + x, anchor='center')
    label_3.config(font=(
        "Helvetica", 16,
        "normal"))  # normal, bold, roman, italic, underline, and overstrike
    label_3.config(text='')

    # --- BOOK FLIGHT BUTTON widget ---
    book_Btn = Button(a_window,
                      width=15,
                      text='Book Flight',
                      fg=css.color_text,
                      bg=css.color_btn,
                      relief='ridge')
    book_Btn.config(highlightbackground=css.color_bg_newSession)
    book_Btn.config(font=("Helvetica", 20, "bold"))
    book_Btn.config(
        bd=8, relief='raised')  # flat, groove, raised, ridge, solid, or sunken
    book_Btn.config(command=lambda: btn_click_bookFlight(label_3, book_Btn))

    # --- LOGGED IN USER LABEL widget ---
    label_user = Label(a_window,
                       width=15,
                       text='',
                       fg=css.color_text,
                       bg=css.color_bg_newSession)
    label_user.place(x=width - 140, y=26, anchor='center')
    label_user.config(font=(
        "Helvetica", 16,
        "bold"))  # normal, bold, roman, italic, underline, and overstrike
    label_user.config(text=str("user: " + css.global_user))

    btn_visibility_toggle(book_Btn, False)