Вот пример реализации задачи на языке программирования Go:
package main
import (
"fmt"
"time"
)
// User структура для данных пользователя
type User struct {
ID int
Name string
Email string
Age int
}
// Report структура для отчёта
type Report struct {
User User
ReportID string
Date string
}
// Функция для создания отчёта на основе пользователя
func CreateReport(user User, reportDate string) Report {
// Генерация уникального ReportID
reportID := fmt.Sprintf("report-%d-%s",
user.ID ,
time.Now ().Format("150405"))
return Report{
User: user,
ReportID: reportID,
Date: reportDate,
}
}
// Функция для вывода отчёта
func PrintReport(report Report) {
fmt.Printf("Report ID: %s\n", report.ReportID)
fmt.Printf("Date: %s\n",
report.Date )
fmt.Printf("User ID: %d\n",
report.User.ID )
fmt.Printf("Name: %s\n",
report.User.Name )
fmt.Printf("Email: %s\n",
report.User.Email )
fmt.Printf("Age: %d\n", report.User.Age)
fmt.Println("----------------------------")
}
// Функция для генерации отчётов для списка пользователей
func GenerateUsersReports(users []User, reportDate string) []Report {
var reports []Report
for _, user := range users {
report := CreateReport(user, reportDate)
reports = append(reports, report)
}
return reports
}
func main() {
// Пример списка пользователей
users := []User{
{ID: 1, Name: "Alice", Email: "alice @example.com", Age: 25},
{ID: 2, Name: "Bob", Email: "bob @example.com", Age: 30},
{ID: 3, Name: "Charlie", Email: "charlie @example.com", Age: 22},
}
// Генерация отчётов
reportDate := "2023-12-01"
reports := GenerateUsersReports(users, reportDate)
// Вывод отчётов
for _, report := range reports {
PrintReport(report)
}
}
Объяснение кода:
Структура User:
Содержит данные о пользователе: ID, Name, Email, Age.
Структура Report:
Включает в себя данные пользователя (User) и дополнительные поля ReportID и Date.
Функция CreateReport:
Создаёт отчёт для одного пользователя.
Генерирует уникальный ReportID на основе ID пользователя и текущего времени.
Функция PrintReport:
Выводит информацию из отчёта в читаемом формате.
Функция GenerateUsersReports:
Принимает список пользователей и дату отчёта.
Для каждого пользователя создаёт отчёт и добавляет его в список.
main():
Инициализирует список пользователей.
Генерирует отчёты и выводит их на экран.