• 12-03-2024, 20:07:55
    #1
    package main
    
    import (
    "html/template"
        "net/http"
        "strconv"
    )
    
    var formTemplate = `
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Investment Calculator</title>
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
    </head>
    
    <body>
        <div class="container">
            <h1>Investment Calculator</h1>
            <form method="post">
                <div class="mb-3">
                    <label for="maas" class="form-label">Monthly Salary</label>
                    <input type="number" step="0.0001" class="form-control" id="maas" name="maas" value="{{.Maas}}" required>
                </div>
                <div class="mb-3">
                    <label for="yatirimOrani" class="form-label">Investment Ratio (as a decimal)</label>
                    <input type="number" step="0.0001" class="form-control" id="yatirimOrani" name="yatirimOrani" value="{{.YatirimOrani}}" required>
                </div>
                <div class="mb-3">
                    <label for="aylikFaizOrani" class="form-label">Monthly Interest Rate (as a decimal)</label>
                    <input type="number" step="0.0001" class="form-control" id="aylikFaizOrani" name="aylikFaizOrani" value="{{.AylikFaizOrani}}" required>
                </div>
                <div class="mb-3">
                    <label for="yillikZamOrani" class="form-label">Annual Raise Rate (as a decimal)</label>
                    <input type="number" step="0.0001" class="form-control" id="yillikZamOrani" name="yillikZamOrani" value="{{.YillikZamOrani}}" required>
                </div>
                <div class="mb-3">
                    <label for="hedefBakiye" class="form-label">Target Balance</label>
                    <input type="number" step="0.0001" class="form-control" id="hedefBakiye" name="hedefBakiye" value="{{.HedefBakiye}}" required>
                </div>
                <div class="mb-3 form-check">
                    <input type="checkbox" class="form-check-input" id="mevcutBirikimVar" name="mevcutBirikimVar" {{if .MevcutBirikimVar}}checked{{end}}>
                    <label class="form-check-label" for="mevcutBirikimVar">Do you have existing savings?</label>
                </div>
                <div class="mb-3">
                    <label for="mevcutBirikim" class="form-label">Existing Savings</label>
                    <input type="number" step="0.0001" class="form-control" id="mevcutBirikim" name="mevcutBirikim" value="{{.MevcutBirikim}}">
                </div>
                <button type="submit" class="btn btn-primary">Calculate</button>
            </form>
        </div>
    </body>
    
    </html>
    `
    
    var resultTemplate = `
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Investment Result</title>
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
    </head>
    
    <body>
        <div class="container">
            <h1>Investment Result</h1>
            <p>Total Savings: ${{printf "%.2f" .Total}}</p>
            <p>Cost: ${{printf "%.2f" .Maliyet}}</p>
            <p>Months: {{printf "%.0f" .Ay}}</p>
            <p>Monthly Salary: ${{printf "%.0f" .Maas}}</p>
            <p>Existing Savings: ${{printf "%.2f" .MevcutBirim}}</p>
            <form action="/" method="get">
                <button type="submit" class="btn btn-primary">New Calculation</button>
            </form>
        </div>
    </body>
    
    </html>
    `
    
    type FormData struct {
    Maas float64
        YatirimOrani     float64
        AylikFaizOrani   float64
        YillikZamOrani   float64
        HedefBakiye      float64
        MevcutBirikimVar bool
        MevcutBirikim    float64
    }
    
    var lastCalculation FormData
    
    func getiriAylik(w http.ResponseWriter, r *http.Request) {
    if r.Method == "GET" {
    tmpl := template.Must(template.New("index").Parse(formTemplate))
    tmpl.Execute(w, lastCalculation)
    } else if r.Method == "POST" {
    r.ParseForm()
    
    maas, _ := strconv.ParseFloat(r.Form.Get("maas"), 64)
    yatirimOrani, _ := strconv.ParseFloat(r.Form.Get("yatirimOrani"), 64)
    aylikFaizOrani, _ := strconv.ParseFloat(r.Form.Get("aylikFaizOrani"), 64)
    yillikZamOrani, _ := strconv.ParseFloat(r.Form.Get("yillikZamOrani"), 64)
    hedefBakiye, _ := strconv.ParseFloat(r.Form.Get("hedefBakiye"), 64)
    var mevcutBirikim float64
    
           if r.Form.Get("mevcutBirikimVar") == "on" {
    mevcutBirikim, _ = strconv.ParseFloat(r.Form.Get("mevcutBirikim"), 64)
    }
    
    var aylikYatirilan, total, ay, maliyet float64 = 0, mevcutBirikim, 0, 0
    
           for total < hedefBakiye {
    for i := 0; i < 12; i++ {
    aylikYatirilan = maas * yatirimOrani
    maliyet += aylikYatirilan
    total = aylikYatirilan + (total * (1 + aylikFaizOrani))
    ay++
    if total > hedefBakiye {
    break
                 }
    }
    
    maas = maas // Maaş artışı olmadığı için maaş değerini aynen kullanıyoruz.
              aylikYatirilan = 0
           }
    
    lastCalculation = FormData{
    Maas: maas, // Stringi doğrudan kullanıyoruz.
              YatirimOrani: yatirimOrani,
    AylikFaizOrani: aylikFaizOrani,
    YillikZamOrani: yillikZamOrani,
    HedefBakiye: hedefBakiye,
    MevcutBirikimVar: r.Form.Get("mevcutBirikimVar") == "on",
    MevcutBirikim: mevcutBirikim,
    }
    
    result := struct {
    Total float64
              Maliyet     float64
              Ay          float64
              Maas        float64
              MevcutBirim float64
           }{
    Total: total,
    Maliyet: maliyet,
    Ay: ay,
    Maas: maas,
    MevcutBirim: mevcutBirikim,
    }
    
    tmpl := template.Must(template.New("result").Parse(resultTemplate))
    tmpl.Execute(w, result)
    }
    }
    
    func main() {
    http.HandleFunc("/", getiriAylik)
    http.ListenAndServe(":8080", nil)
    }

    calıştırmak için

    go run main.go
  • 12-03-2024, 20:11:08
    #2
    Teşekkürler paylaşım için
  • 12-03-2024, 20:11:57
    #3
    Honomy adlı üyeden alıntı: mesajı görüntüle
    Teşekkürler paylaşım için
    Rica ederim.