каркас и все функции, все сделано и реализовано

This commit is contained in:
Зонов Роман
2026-04-24 21:50:24 +03:00
commit 2a2fc7c919
6 changed files with 203 additions and 0 deletions
+112
View File
@@ -0,0 +1,112 @@
from tabulate import tabulate
def parse_student_line(line: str) -> dict:
parts = line.strip().split(";")
return {
"full_name": parts[0],
"group": parts[1],
"course": int(parts[2]),
"tuition_fee": float(parts[3]),
"paid_amount": float(parts[4]),
"last_payment_date": parts[5]
}
def load_students(file_path: str) -> list:
students = []
try:
with open(file_path, "r", encoding="utf-8") as file:
for line in file:
if line.strip():
students.append(parse_student_line(line))
except FileNotFoundError:
print("Ошибка: файл с данными не найден.")
return students
def calculate_debt(student: dict) -> float:
debt = student["tuition_fee"] - student["paid_amount"]
if debt < 0:
return 0
return debt
def filter_debtors(students: list) -> list:
return [student for student in students if calculate_debt(student) > 0]
def filter_fully_paid(students: list) -> list:
return [student for student in students if calculate_debt(student) == 0]
def get_total_expected_income(students: list) -> float:
return sum(student["tuition_fee"] for student in students)
def get_total_paid_amount(students: list) -> float:
return sum(student["paid_amount"] for student in students)
def group_students_by_course(students: list) -> dict:
result = {}
for student in students:
course = student["course"]
if course not in result:
result[course] = []
result[course].append(student)
return result
def get_top_debtors(students: list, limit: int) -> list:
sorted_students = sorted(
students,
key=lambda student: calculate_debt(student),
reverse=True
)
return sorted_students[:limit]
def generate_payment_report(students: list) -> dict:
debtors = filter_debtors(students)
fully_paid = filter_fully_paid(students)
return {
"total_students": len(students),
"debtors_count": len(debtors),
"fully_paid_count": len(fully_paid),
"total_expected_income": get_total_expected_income(students),
"total_paid_amount": get_total_paid_amount(students),
"total_debt": sum(calculate_debt(student) for student in students)
}
def print_students_table(students: list) -> None:
table = []
for student in students:
table.append([
student["full_name"],
student["group"],
student["course"],
student["tuition_fee"],
student["paid_amount"],
calculate_debt(student),
student["last_payment_date"]
])
print(tabulate(
table,
headers=["ФИО", "Группа", "Курс", "Стоимость", "Оплачено", "Долг", "Дата платежа"],
tablefmt="grid"
))
+51
View File
@@ -0,0 +1,51 @@
from functions import *
def main():
file_path = "data/data.txt"
students = load_students(file_path)
if not students:
print("Нет данных для обработки.")
return
print("ВСЕ СТУДЕНТЫ:")
print_students_table(students)
print("\nОБЩИЙ ОТЧЕТ:")
report = generate_payment_report(students)
for key, value in report.items():
print(f"{key}: {value}")
print("\nДОЛЖНИКИ:")
debtors = filter_debtors(students)
print_students_table(debtors)
print("\nПОЛНОСТЬЮ ОПЛАТИЛИ:")
fully_paid = filter_fully_paid(students)
print_students_table(fully_paid)
print("\nТОП-3 ДОЛЖНИКОВ:")
top_debtors = get_top_debtors(students, 3)
print_students_table(top_debtors)
print("\nРАСПРЕДЕЛЕНИЕ ПО КУРСАМ:")
students_by_course = group_students_by_course(students)
for course, course_students in students_by_course.items():
print(f"{course} курс: {len(course_students)} человек")
print("\nОБЩАЯ СУММА ПО ДОГОВОРАМ:")
print(get_total_expected_income(students))
print("\nОБЩАЯ ОПЛАЧЕННАЯ СУММА:")
print(get_total_paid_amount(students))
print("\nПРОВЕРКА ДОЛГА ПЕРВОГО СТУДЕНТА:")
print(calculate_debt(students[0]))
if __name__ == "__main__":
main()