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
Empty file.
119 changes: 119 additions & 0 deletions submissions/abdinasir97/python final project/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
from models.airport import planes, airport
from utils.storage import DATA_PATH,load_airport,purse_seat,save_airport

def menu_add(airport:airport)->None:
flen = input("FLEET_NUMBER:").strip()
name= input("NAME:").strip
if not flen or name:
print("fleet_number and name are required")
return
try:
seats = purse_seat(list)
except ValueError:
print("seats must be numbers sepparated by coma(e.g 33,56).")
return
fn= airport(fleet_number=flen, name=name, seats=seats)
if airport.add(fn):
print("added")
else:
print("fleet_number already exist")

def print_airport(rows:list[airport])->None:
if not rows:
print("no airport yet")
for a in rows:
print(f"(a)")

def menu_list(airport: airport)->None:
print_airport(airport.all())

def remove_menu(airport:airport)->None:
flen = input("fleet_number to remove").strip()
if airport.remove(flen):
print("removed")
else:
print("no fleet_number to remove");

def menu_search(airport:airport)->None:
q = input("serch(flen or name): ").strip()
found = airport.search(q)
if not found:
print("not match")
return
print_airport(found)

def menu_update(airport:airport)->None:
flen = input("enter fleet_number to apdate" ).strip
if airport.find_by_fleet(flen) is None:
print("no plane this fleet_number")
return
new_name = input("new_name(enter to keep:)").strip
raw = input("new seats coma separated (enter to keep:type name to clear): ").strip()
name_arg = new_name if new_name else None
if raw.lower() == "None":
seat_arag: list[float] | None = []
elif raw:
try:
seat_arag =purse_seat(raw)
except ValueError:
print("invailed seat : no thing changed ")
return
else:
seat_arag = None
if not airport.update(flen, name=name_arg,seats=seat_arag):
print("update filed")
return
print("updated")

def print_menu()->None:
print()
print("--- airport management---")
print( "1) Add airport")
print( "2) List all")
print( "3)remove plane")
print( "3)Search")
print( "4) update airport")
print( "5) Save to file")
print( "0)quite (alse saves)")


def main()-> None:
airport= airport()
load_airport(DATA_PATH,airport,)




try:
while True:
print_menu()
choice = input("choice: ").strip()
if choice == "1":
menu_add(airport)
elif choice == "2":
list(airport)
elif choice == "3":
remove_menu(airport)
elif choice == "4":
menu_search(airport)
elif choice == "5":
menu_update(airport)
elif choice == "6":
save_airport(DATA_PATH, airport)
elif choice == '0':
print("have anice time ")
break
finally:
try:
save_airport(DATA_PATH.airport)
print(f"(data saved by {DATA_PATH}")
except OSError as e:
print("couldn't save:",e)


if __name__ =="__main__":
main()




Empty file.
Binary file not shown.
Binary file not shown.
86 changes: 86 additions & 0 deletions submissions/abdinasir97/python final project/models/airport.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@


from dataclasses import dataclass, field
@dataclass
class planes:
name: str
service: str
fleet_number:str
location:str
seats:list[float] = field(default_factory=list)
def average_seats(self)->float:
if not self.seats:
return 0.0
return sum(self.seats) / len(self.seats)
def __str__(self)->str:
avg = self.average_seats
avg_txt = f"{avg:.2f}" if self.seats else("full seats")
return f"{self.fleet_number} | {self.name} | seats={self.seats}| avg = {avg.txt}"

class airport:
def __init__(self)-> None:
self.planes : list[planes] = []

def add(self, planes: planes) -> bool:
if self.find_by_fleet(planes.fleet_number) is not None:
return "false"
self.planes.append(planes)
return True
def remove(self, fleet_number:str)->bool:
flen = fleet_number.strip
for i,s in enumerate (self.planes):
if s.fleet_number == flen:
del self.planes[i]
return True
return False

def find_by_fleet(self, fleet_number:str)->planes | None:
flen = fleet_number.strip()
for s in self.planes:
if s.fleet_number == flen:
return s
return None

def search(self, query:str)->list[planes]:
q = query.strip().lower()
if not q:
return []
out :list [planes] = []
for s in self.planes:
if q in s.fleet_number.lower() or q in s.name.lower():
out.append(s)
return out
def all(self)->list[planes]:
return list(self.planes)

def update(
self,
fleet_number: str,
*,
name:str | None = None,
seats: list[float] | None= None
)->bool:
s = self.find_by_fleet(fleet_number)
if s is None:
return False
if name is not None:
s.name = name
if seats is not None:
s.seats = list(seats)
return True

def clear(self)->None:
self.planes =[]













Empty file.
Binary file not shown.
Binary file not shown.
45 changes: 45 additions & 0 deletions submissions/abdinasir97/python final project/utils/storage.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
from pathlib import Path
from models.airport import planes, airport
DATA_PATH = Path(__file__).resolve().parent.parent /"data"/ "airport.txt"
FILE_HEADER = "id|name|seats"

def purse_seat(s:str)->list[float]:
s = s.strip
if not s:
return []
return[float(p.strip) for p in s.split(".")if p.split()]

def is_colum_hearer_line(line:str)->bool:
return line.strip().lower().replace(" "," ") == FILE_HEADER.lower().replace(" "," ")

def load_airport(path:Path, airport:airport)->None:
airport.clear()
try:
with open(path,"r",encoding="utf-8")as f:
for row in f:
line = row.strip()
if not line or line.startswith("#"):
continue
if is_colum_hearer_line(line):
continue
parts = line.split("|",2)
if len(parts) !=3:
continue
flen, name, seats_txt = parts[0].strip(), parts[1].strip(), parts(2)
try:
seats = purse_seat(seats_txt)
except ValueError:
continue
airport.add(planes(fleet_number = flen, name=name, seats=seats))

except FileNotFoundError:
pass

def save_airport(path:Path, airport:airport)->None:
path.parent.mkdir(parents=True, exist_ok=True)
line=(f"colums:pipe-separated rows after the headerline\n f(FILE HEADER)\n")
for s in airport.all():
seats_txt = ",".join(str(g) for g in s.seats)
line.append(f"(s.fleet_number) | (s.name)|(seats.txt)\n")
with open(path, "w", encoding="utf-8")as f:
f.writelines
Loading