school management system demo – Golang fyne GUI Source Code

school management system demo – Golang fyne GUI Source Code

 

Source Code

<div>
<div>package main</div>
<div>import (</div>
<div>    "context"</div>
<div>    "fmt"</div>
<div>    "image/color"</div>
<div>    "log"</div>
<div>    "strconv"</div>
<div>    "time"</div>
<div>    "fyne.io/fyne/v2"</div>
<div>    "fyne.io/fyne/v2/app"</div>
<div>    "fyne.io/fyne/v2/canvas"</div>
<div>    "fyne.io/fyne/v2/container"</div>
<div>    "fyne.io/fyne/v2/dialog"</div>
<div>    "fyne.io/fyne/v2/layout"</div>
<div>    "fyne.io/fyne/v2/widget"</div>
<div>    "go.mongodb.org/mongo-driver/bson"</div>
<div>    "go.mongodb.org/mongo-driver/bson/primitive"</div>
<div>    "go.mongodb.org/mongo-driver/mongo"</div>
<div>    "go.mongodb.org/mongo-driver/mongo/options"</div>
<div>)</div>
<div>var ctx = context.TODO()</div>
<div>var url1 = options.Client().ApplyURI("mongodb://localhost:27017")</div>
<div>var users *mongo.Collection</div>
<div>var users_fees *mongo.Collection</div>
<div>func init() {</div>
<div>    client, _ := mongo.Connect(ctx, url1)</div>
<div>    users = client.Database("student").Collection("users")</div>
<div>    users_fees = client.Database("student").Collection("fees")</div>
<div>}</div>
<div>type MUser struct {</div>
<div>    Id           string `json:"_id" bson:"_id"`</div>
<div>    StudentName  string `json:"student_name" bson:"student_name"`</div>
<div>    StudentClass string `json:"student_class" bson:"student_class"`</div>
<div>}</div>
<div>type MUser_fees struct {</div>
<div>    Id                string `json:"_id" bson:"_id"`</div>
<div>    StudentId         string `json:"student_id" bson:"student_id"`</div>
<div>    StudentName       string `json:"student_name" bson:"student_name"`</div>
<div>    StudentClass      string `json:"student_class" bson:"student_class"`</div>
<div>    StudentFeesYear   string `json:"student_fees_year" bson:"student_fees_year"`</div>
<div>    StudentFeesMonth  string `json:"student_fees_month" bson:"student_fees_month"`</div>
<div>    StudentFeesDate   string `json:"student_fees_date" bson:"student_fees_date"`</div>
<div>    StudentFeesAmount string `json:"student_fees_amount" bson:"student_fees_amount"`</div>
<div>}</div>
<div>type DUser_fees struct {</div>
<div>    Id                primitive.ObjectID `json:"_id" bson:"_id"`</div>
<div>    StudentName       string             `json:"student_name" bson:"student_name"`</div>
<div>    StudentClass      string             `json:"student_class" bson:"student_class"`</div>
<div>    StudentId         string             `json:"student_id" bson:"student_id"`</div>
<div>    StudentFeesYear   string             `json:"student_fees_year" bson:"student_fees_year"`</div>
<div>    StudentFeesMonth  string             `json:"student_fees_month" bson:"student_fees_month"`</div>
<div>    StudentFeesDate   string             `json:"student_fees_date" bson:"student_fees_date"`</div>
<div>    StudentFeesAmount string             `json:"student_fees_amount" bson:"student_fees_amount"`</div>
<div>}</div>
<div>var t = time.Now().Local()</div>
<div>func main() {</div>
<div>    a := app.New()</div>
<div>    w := a.NewWindow("My app")</div>
<div>    w.Resize(fyne.NewSize(400, 400))</div>
<div>    label := widget.NewLabel("School Management System")</div>
<div>    label.Alignment = fyne.TextAlignCenter</div>
<div>    student_name := widget.NewEntry()</div>
<div>    student_name.PlaceHolder = "Enter Student Name"</div>
<div>    student_class := widget.NewEntry()</div>
<div>    student_class.PlaceHolder = "Enter Class"</div>
<div>    btn2_enter_student_data := widget.NewButton("Enter", func() {</div>
<div>        result, _ := users.InsertOne(</div>
<div>            ctx, bson.D{</div>
<div>                {"student_name", student_name.Text},</div>
<div>                {"student_class", student_class.Text},</div>
<div>            })</div>
<div>        fmt.Println(result)</div>
<div>    })</div>
<div>    c := container.NewVBox(label, student_name, student_class, btn2_enter_student_data)</div>
<div>    dlg := dialog.NewCustom("School Management System", "I want to search students", c, w)</div>
<div>    dlg.Resize(fyne.NewSize(350, 350))</div>
<div>    dlg.Show()</div>
<div>    student_search := widget.NewEntry()</div>
<div>    student_search.PlaceHolder = "Search Student Name"</div>
<div>    student_search.Move(fyne.NewPos(10, 50))</div>
<div>    student_search.Resize(fyne.NewSize(200, 40))</div>
<div>    label_name := widget.NewLabel("")</div>
<div>    label_name.Move(fyne.NewPos(10, 100))</div>
<div>    label_name.Resize(fyne.NewSize(300, 40))</div>
<div>    label_name.Alignment = fyne.TextAlignTrailing</div>
<div>    label_class := widget.NewLabel("")</div>
<div>    label_class.Move(fyne.NewPos(10, 150))</div>
<div>    label_class.Resize(fyne.NewSize(300, 40))</div>
<div>    label_class.Alignment = fyne.TextAlignTrailing</div>
<div>    btn1 := widget.NewButton("Search", func() {</div>
<div>        var user MUser</div>
<div>        users.FindOne(ctx, bson.D{{"student_name", student_search.Text}}).Decode(&amp;user)</div>
<div>        //filter := bson.D{{"name", "pi"}}</div>
<div>        fmt.Println(user)</div>
<div>        if user.Id == "" {</div>
<div>            label_name.Text = "No Record Found.."</div>
<div>            label_name.Resize(fyne.NewSize(200, 40))</div>
<div>            label_name.Refresh()</div>
<div>        } else {</div>
<div>            label_name.Text = "" + user.StudentName</div>
<div>            label_name.Refresh()</div>
<div>            label_class.Text = "" + user.StudentClass</div>
<div>            label_class.Refresh()</div>
<div>        }</div>
<div>    })</div>
<div>    btn1.Move(fyne.NewPos(250, 50))</div>
<div>    btn1.Resize(fyne.NewSize(100, 40))</div>
<div>    ///////////////////</div>
<div>    line := canvas.NewLine(color.RGBA{R: 255, G: 0, B: 0, A: 255})</div>
<div>    line.Position1 = fyne.NewPos(10, 100)</div>
<div>    line.Position2 = fyne.NewPos(390, 100)</div>
<div>    line.StrokeWidth = 2</div>
<div>    line2 := canvas.NewLine(color.RGBA{R: 255, G: 0, B: 0, A: 255})</div>
<div>    line2.Position1 = fyne.NewPos(10, 140)</div>
<div>    line2.Position2 = fyne.NewPos(390, 140)</div>
<div>    line2.StrokeWidth = 2</div>
<div>    line3 := canvas.NewLine(color.RGBA{R: 255, G: 0, B: 0, A: 255})</div>
<div>    line3.Position1 = fyne.NewPos(10, 190)</div>
<div>    line3.Position2 = fyne.NewPos(390, 190)</div>
<div>    line3.StrokeWidth = 2</div>
<div>    ////////////////////////////</div>
<div>    label_namex1 := widget.NewLabel("Name:")</div>
<div>    label_namex1.Move(fyne.NewPos(10, 100))</div>
<div>    label_namex1.Resize(fyne.NewSize(200, 40))</div>
<div>    label_namex1.Alignment = fyne.TextAlignLeading</div>
<div>    label_classx1 := widget.NewLabel("Class: ")</div>
<div>    label_classx1.Move(fyne.NewPos(10, 150))</div>
<div>    label_classx1.Resize(fyne.NewSize(200, 40))</div>
<div>    label_classx1.Alignment = fyne.TextAlignLeading</div>
<div>    ///////////////////</div>
<div>    //select options</div>
<div>    years := func() []string {</div>
<div>        var s []string</div>
<div>        for i := 2022; i &lt;= 2049; i++ {</div>
<div>            is := fmt.Sprintf("%d year", i)</div>
<div>            s = append(s, is)</div>
<div>        }</div>
<div>        return s</div>
<div>    }</div>
<div>    selecty := widget.NewSelect(years(), func(s string) {</div>
<div>        fmt.Println(s)</div>
<div>    })</div>
<div>    selecty.PlaceHolder = "year"</div>
<div>    // select month</div>
<div>    months := func() []string {</div>
<div>        var s = []string{"jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"}</div>
<div>        return s</div>
<div>    }</div>
<div>    select_month := widget.NewSelect(months(), func(s string) {</div>
<div>        fmt.Println(s)</div>
<div>    })</div>
<div>    select_month.PlaceHolder = "month"</div>
<div>    btnOK := widget.NewButton("OK", func() {</div>
<div>        if selecty.SelectedIndex() == -1 {</div>
<div>            selecty.SetSelectedIndex(t.Year() - 2022)</div>
<div>        }</div>
<div>        if select_month.SelectedIndex() == -1 {</div>
<div>            select_month.SetSelectedIndex(int(t.Month()))</div>
<div>        }</div>
<div>        fmt.Printf("%s month index=%d\n", selecty.Selected, selecty.SelectedIndex())</div>
<div>        fmt.Printf("%s year index=%d\n", select_month.Selected, select_month.SelectedIndex())</div>
<div>    })</div>
<div>    hbox := container.New(layout.NewHBoxLayout(), selecty, select_month, btnOK)</div>
<div>    hbox.Move(fyne.NewPos(70, 200))</div>
<div>    hbox.Resize(fyne.NewSize(380, 40))</div>
<div>    //////</div>
<div>    student_fees_amount := widget.NewEntry()</div>
<div>    student_fees_amount.PlaceHolder = "Enter fees amount"</div>
<div>    student_fees_amount.Move(fyne.NewPos(10, 250))</div>
<div>    student_fees_amount.Resize(fyne.NewSize(380, 40))</div>
<div>    /////////////////</div>
<div>    btn3_input_fees := widget.NewButton("Deposit Fees", func() {</div>
<div>        var user MUser</div>
<div>        users.FindOne(ctx, bson.D{{"student_name", student_search.Text}}).Decode(&amp;user) //filter := bson.D{{"name", "pi"}}</div>
<div>        fmt.Println(user)</div>
<div>        if user.Id == "" {</div>
<div>            label_name.Text = "No Record Found.."</div>
<div>            label_name.Resize(fyne.NewSize(200, 40))</div>
<div>            label_name.Refresh()</div>
<div>        } else {</div>
<div>            label_name.Text = "" + user.StudentName</div>
<div>            label_name.Refresh()</div>
<div>            label_class.Text = "" + user.StudentClass</div>
<div>            label_class.Refresh()</div>
<div>            fmt.Printf("%s month index=%d\n", selecty.Selected, selecty.SelectedIndex())</div>
<div>            fmt.Printf("%s year index=%d\n", select_month.Selected, select_month.SelectedIndex())</div>
<div>            fmt.Printf("%s fees\n", student_fees_amount.Text)</div>
<div>            _, _, date_today := t.Date()</div>
<div>            date_converted := fmt.Sprint(date_today)</div>
<div>            fmt.Printf(date_converted)</div>
<div>            if student_fees_amount.Text != "" {</div>
<div>                result, _ := users_fees.InsertOne(</div>
<div>                    ctx, bson.D{</div>
<div>                        {"student_name", user.StudentName},</div>
<div>                        {"student_class", user.StudentClass},</div>
<div>                        {"student_id", user.Id},</div>
<div>                        {"student_fees_year", selecty.Selected},</div>
<div>                        {"student_fees_month", select_month.Selected},</div>
<div>                        {"student_fees_date", date_converted},</div>
<div>                        {"student_fees_amount", student_fees_amount.Text},</div>
<div>                    })</div>
<div>                fmt.Println(result)</div>
<div>            }</div>
<div></div>
<div>        }</div>
<div>    })</div>
<div>    btn3_input_fees.Move(fyne.NewPos(160, 300))</div>
<div>    btn3_input_fees.Resize(fyne.NewSize(120, 40))</div>
<div>    //////////////</div>
<div>    btn4_check_fees := widget.NewButton("Fees Status", func() {</div>
<div>        var user MUser</div>
<div>        var fees_status MUser_fees</div>
<div>        users.FindOne(ctx, bson.D{{"student_name", student_search.Text}}).Decode(&amp;user)</div>
<div>        //filter := bson.D{{"name", "pi"}}</div>
<div>        if user.Id == "" {</div>
<div>            label_name.Text = "No Record Found.."</div>
<div>            label_name.Resize(fyne.NewSize(200, 40))</div>
<div>            label_name.Refresh()</div>
<div>        } else {</div>
<div>            label_name.Text = "" + user.StudentName</div>
<div>            label_name.Refresh()</div>
<div>            label_class.Text = "" + user.StudentClass</div>
<div>            label_class.Refresh()</div>
<div>            users_fees.FindOne(ctx, bson.D{</div>
<div>                {"student_name", student_search.Text},</div>
<div>                {"student_class", user.StudentClass},</div>
<div>                {"student_fees_year", selecty.Selected},</div>
<div>                {"student_id", user.Id},</div>
<div>                {"student_fees_month", select_month.Selected},</div>
<div>            }).Decode(&amp;fees_status)</div>
<div>            fmt.Println("--------------------------------------")</div>
<div>            fmt.Printf("%s", fees_status.StudentFeesAmount)</div>
<div>            fmt.Printf("%s", fees_status.StudentClass)</div>
<div>            fmt.Printf("%s", fees_status.StudentFeesDate)</div>
<div>            label.Text = fees_status.StudentName + " Fees Status"</div>
<div>            label.Refresh()</div>
<div>            c := container.NewVBox(</div>
<div>                label,</div>
<div></div>
<div>                container.NewGridWithColumns(2, widget.NewLabel("Student Name"), widget.NewLabel(fees_status.StudentName)),</div>
<div>                canvas.NewLine(color.RGBA{R: 255, G: 0, B: 0, A: 255}),</div>
<div>                container.NewGridWithColumns(2, widget.NewLabel("Student Class"), widget.NewLabel(fees_status.StudentClass)),</div>
<div>                canvas.NewLine(color.RGBA{R: 255, G: 0, B: 0, A: 255}),</div>
<div>                container.NewGridWithColumns(2, widget.NewLabel("Fees Amount"), widget.NewLabel(fees_status.StudentFeesAmount)),</div>
<div>                canvas.NewLine(color.RGBA{R: 255, G: 0, B: 0, A: 255}),</div>
<div>                container.NewGridWithColumns(2,</div>
<div>                    widget.NewLabel("Date "),</div>
<div>                    widget.NewLabel(fmt.Sprintf(</div>
<div>                        "%s / %s /%s ", fees_status.StudentFeesDate, fees_status.StudentFeesMonth, fees_status.StudentFeesYear)),</div>
<div>                ),</div>
<div>                canvas.NewLine(color.RGBA{R: 255, G: 0, B: 0, A: 255}),</div>
<div>            )</div>
<div>            dlg := dialog.NewCustom("Fees Management System", "ok", c, w)</div>
<div>            dlg.Resize(fyne.NewSize(350, 350))</div>
<div>            dlg.Show()</div>
<div>        }</div>
<div>    })</div>
<div>    btn4_check_fees.Move(fyne.NewPos(10, 300))</div>
<div>    btn4_check_fees.Resize(fyne.NewSize(140, 40))</div>
<div>    /////</div>
<div>    btn5_check_fees := widget.NewButton("Fees Status", func() {</div>
<div>        var fees_status1 []DUser_fees</div>
<div>        var user MUser</div>
<div>        users.FindOne(ctx, bson.D{{"student_name", student_search.Text}}).Decode(&amp;user) //filter := bson.D{{"name", "pi"}}</div>
<div>        cur, err := users_fees.Find(ctx, bson.D{</div>
<div>            {"student_name", student_search.Text},</div>
<div>            {"student_fees_year", selecty.Selected},</div>
<div>            {"student_id", user.Id},</div>
<div>        })</div>
<div>        if err != nil {</div>
<div>            log.Fatal(err)</div>
<div>        }</div>
<div>        defer cur.Close(ctx)</div>
<div></div>
<div>        if err = cur.All(ctx, &amp;fees_status1); err != nil {</div>
<div>            panic(err)</div>
<div>        }</div>
<div>        fmt.Println(fees_status1)</div>
<div></div>
<div>        if err := cur.Err(); err != nil {</div>
<div>            log.Fatal(err)</div>
<div>        }</div>
<div>        if user.Id == "" {</div>
<div>            label_name.Text = "No Record Found.."</div>
<div>            label_name.Resize(fyne.NewSize(200, 40))</div>
<div>            label_name.Refresh()</div>
<div>        } else {</div>
<div>            label_name.Text = "" + user.StudentName</div>
<div>            label_name.Refresh()</div>
<div>            label_class.Text = "" + user.StudentClass</div>
<div>            label_class.Refresh()</div>
<div>            label.Text = user.StudentName + " Fees Status"</div>
<div>            label.Refresh()</div>
<div>            c := container.NewVBox(</div>
<div>                label,</div>
<div>            )</div>
<div>            for i := 0; i &lt; len(fees_status1); i++ {</div>
<div>                x := strconv.Itoa(i + 1)</div>
<div>                c.Add(canvas.NewLine(color.RGBA{R: 255, G: 0, B: 0, A: 255}))</div>
<div>                c.Add(</div>
<div>                    container.NewGridWithColumns(3, widget.NewLabel(x), widget.NewLabel(fees_status1[i].StudentFeesMonth), widget.NewLabel("Paid")),</div>
<div>                )</div>
<div>            }</div>
<div>            another_container_for_scrolling := container.NewHScroll(c)</div>
<div>            dlg := dialog.NewCustom("Fees Management System", "ok", another_container_for_scrolling, w)</div>
<div>            dlg.Resize(fyne.NewSize(350, 350))</div>
<div>            dlg.Show()</div>
<div>        }</div>
<div>    })</div>
<div>    btn5_check_fees.Move(fyne.NewPos(280, 300))</div>
<div>    btn5_check_fees.Resize(fyne.NewSize(140, 40))</div>
<div>    /////////</div>
<div>    c_container := container.NewWithoutLayout(</div>
<div>        hbox,</div>
<div>        line,</div>
<div>        line2,</div>
<div>        line3,</div>
<div>        btn1,</div>
<div>        btn5_check_fees,</div>
<div>        btn4_check_fees,</div>
<div>        student_fees_amount,</div>
<div>        btn3_input_fees,</div>
<div>        label_class,</div>
<div>        label_classx1,</div>
<div>        label_name,</div>
<div>        label_namex1,</div>
<div>        student_search,</div>
<div>        widget.NewLabel("Search Student Database"))</div>
<div>    w.SetContent(</div>
<div>        c_container,</div>
<div>    )</div>
<div>    w.ShowAndRun()</div>
<div>}</div>
</div>
Tony BB
 

TonyBB is a Coach , marketer, hypnotist and a founder of RSKVF Production who specializes in providing simple, affordable, and easy to use solutions for Life.

Click Here to Leave a Comment Below 0 comments

Leave a Reply: