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(&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 <= 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(&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(&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(&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(&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, &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 < 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>