I need to create a gradebook

Hi. I’m a private school admin. I want to try creating a gradebook becuase the software we have our teachers use is a pain in the butt. I feel like a gradebook should be easy for Glide, but when I think of what my teachers need, it gets complicated. **I need help thinking through how to create a gradebook with some advanced features: ** I’m willing to abandon anything I’ve written below and try a completely different route. So suggest anything:

I started off with the idea of a table of assignments, and a table of users (some are teachers, some are students). The assignments is structured like you see in the picture below. Each row is an assignment and each column is some of the features of that assignment like

Grade category: quiz, homework, test, project
Assignment Description: each assignment usually has a description

  • Assignment Due Date:*
  • Etc…

Next I have a table of users. They have roles like teachers, students. Nothing Fancy

So how would I create a screen/mechanism that lets a teacher/user insert a grade for each inidivudal student. I set the “grade/score” column for each assignment as a user specific becuase each user needs to have his/her own grade in that cell. But I still can’t visualize how to do it.

**Maybe think of each assignment like a product in a store (w/ attributes & a price analogous to attributes and a grade/score for an assignment). ** The student is like the shopper. Who buys one of every "product/assignment). The total shopping-cart value is like their grade at the end of the term.

Problem: in school the student has 6 or7 classes, so thats like 6-7 shopping carts.
Problem: the above is a student view. There also has to be a teacher view, where the teahcer can see all the students and their grades.

A gradebook is like showing a set of 10-20 shoppers/students that all share a certain attribute in common (e.g. course/teacher name). And the gradebook shows all the products/assignments along the x axis and all the students along the y axis… and their grades fill in the grid made by x and y axis.

See example below (random internet image). Is it possible to display something like this?

That’s a bad idea, because you will have no way to get a view of grades across several students.

What I would do is create a 3rd table for Grades.
This table would have at a minimum 3 columns:

  • Assignment ID
  • Student ID
  • Grade Score

So there would be one row per student, per assignment.
And every time a teacher creates grade, it’s simply a matter of adding a row to that table.

Reporting and visualisation per Assignment and/or per Student will be quite simple. It would be just a matter of creating appropriate relations between the tables.

3 Likes

I’ll try to think about it. I sort of get it. However students get not only assignment grades, they have the FINAL class grade, which is an average all the assignment grades. Would you make yet another table for final class grade? With a 3 columns,

  • Course/Class ID
  • Student ID
  • Grade Score (an average of all the students grade scores from the table/sheet you recommended.

No, there is no need for another table. To get a “final” grade for each Student:

  • Create a multiple relation column in the Users table that matches the StudentID (RowID) with the StudentID in the Grades table
  • Use a rollup->sum through the relation to get an average.
1 Like

As a K-12 educator at a private school, I can attest that this is complicated. I attempted to build a gradebook at one point and the trickiest part is the end-user interface.

Teachers expect the ability to “add a grade column” to the gradebook, but in Glide, users can’t create columns…only add rows. So, if you’re okay with the gradebook looking like a list of items, then it’s possible, but otherwise, Glide is not the right platform for this.

Did you try concatenating the grades in a single column (and perhaps using json)? With this I suppose the teachers may be able to add as many grades as they like for each student.

1 Like

Yes, this is exactly what I did on the data side. However, as I mentioned, the issue is the UI to add new columns to the gradebook. Every gradebook platform I’ve ever used as a teacher allows users to add new gradebook columns with students in each row. New assignments equals a new column and teachers can edit the cells directly to assign a grade to a student for any column. However, this UI is not possible with glide unless someone’s able to figure out some sort of crazy AI component work around.

2 Likes

Jeff: “Hold my beer.”
Robert: “Okay, but you hold my beer too then.”

2 Likes

I don’t know much about json yet but I thought you might’ve been able to specify the assignment name in json objects and then extract it to eliminate the need for a new column.
By the way, do you have json tutorial videos for total beginners?

Intro to JSON: The Internet’s Standard Data Format (blog post)

JSON Glide Apps Tutorial (video)

1 Like

thanks @nathanaelb !

1 Like

@Robert_Petitto I’d be willing to bet that a Custom AI component could do that, reading and storing everything in JSON. I have one that I created and use for notes that lets me type text and insert images, all in one entry box. Images can also be resized within the entry box. The whole thing builds html and datauri’s for the images on the fly. I had to add a Save button to get past a ping-pong issue, but other than that, it constructs HTML to save to a single table column and deconstructs the HTML to load the entry box again.

3 Likes

Definitely possible with a simple proof of concept. Adding a student adds a new row to the grid. Adding an assignment adds a new assignment column to the grid, all with editable entry fields for scores. Save commits it to the table as a single JSON value.

This is the generated JSON when the Save button is clicked.

{"students":[{"name":"Jeff","grades":["95","99","100"]},{"name":"Robert","grades":["100","100","100"]},{"name":"Nathanael","grades":["99","99","99"]}],"assignments":["Worksheet 1","Worksheet 2","Final Test"]}

Here are my prompts:

2 Likes

brilliant @Jeff_Hager :+1: :+1:

2 Likes

I used to work with JSON a lot when Code component is still a thing. Nice experience to get past the “ping-pong” updates, had to actually dive into Alpine.js but after a while it does work.

What I did is basically introduce a variable that is built-in to the component (not tied to the actual data at all), then add a wait, before writing that value back to the actual column I want.

3 Likes

Yeah I’ll have to experiment some more and see if I can prompt something like that. That’s about my biggest frustration right now with the custom component.

1 Like

Thanks for this. Just getting back into the office. I’ll take all of this to mind and see what I can cook up.

2 Likes