webForumDet fria alternativet

Skapa ett skolschema - hur skall databasen se ut?

Webbutveckling

29 svar · 3 914 visningar · startad av Bjuris

Medlem sedan juli 2001514 inlägg
Frågan#1

Jag funderar på att fixa en funktion som skall generera skolscheman, men jag vet inte hur jag skall planera databasen och dess tabeller, finns det någon son har någon ide?

Förutsättning:
Nytt schema varje vecka.
Rumsnummer kopplat till varje tidsenhet.
Schemat är individuellt.

Medlem sedan juli 20041 271 inlägg
#2

Sorry för att bumpa en gammal tråd, men även jag skulle behöva ha tips på hur man kan bygga upp det hela.

Medlem sedan feb. 20011 198 inlägg
#3

Såhär hade jag gjort.
Tabeller för Elev, Rum, Lektion, CREF_Elev_Lektion, CREF_Rum_Lektion borde räcka.
Elev
id Namn

Rum
id Namn

Lektion
id Ämne Start Slut

CREF_Elev_Lektion
Elev_id Lektion_id

CREF_Rum_Lektion
Rum_id Lektion_id

Medlem sedan juli 20041 271 inlägg
#4

Tack för svaret!
Hur löser jag det enklast om det finns fler skolor?

Medlem sedan juli 200012 978 inlägg
#5

Om man utökar Rum med plats så fungerar det att ta ut schema oavsett.

Medlem sedan okt. 2007446 inlägg
#6

för att krångla till saker så bör man ju kunna hantera saker klassvis om man tänker sig att det skall finnas nån form av administrationsgränssnitt på det hela. Kan bli lite trist att sitta och mata in 30 poster för att klass 7a skall ha svenska. Ytterligare knepigheter är väl då om man skall ta hänsyn till halvklass osv

Medlem sedan juli 200012 978 inlägg
#7

Det hela beror nog på hur stort man vill göra det hela.
Men visst bör en elev tillhöra en klass så schemalägger man klasserna.
Glöm nu inte periodiciteten dvs från datum till datum.

Medlem sedan juli 200012 978 inlägg
#8

Att googla på schemlägga klass ger en hel del studiematerial.
http://www.k-skola.com/
Kom ihåg att ju tidigare man börjar programmera, detso längre tid tar det hela.
Så gör en bra förstudie.
Data in, Data ut, vad krävs?
Läs
http://www.schoolsoft.se/docs/schemalaggning-2009-02-09.pdf

Medlem sedan juli 20041 271 inlägg
#9

rhdf skrev:

för att krångla till saker så bör man ju kunna hantera saker klassvis om man tänker sig att det skall finnas nån form av administrationsgränssnitt på det hela.

Precis! Detta ska fungera som ett mindre admin system för lärare.

Medlem sedan juli 20041 271 inlägg
#10

Någon annan som har förslag på hur man kunde bygga upp det hela?

Respektive lärare ska kunna klicka i en tom "cell" i en tabell för att boka in en kursdeltagare.

Schemat är uppbyggt efter tider (30 min. intervall) samt klassrum.
Allt detta ska skötas bakom en inloggning.

Medlem sedan juli 20041 271 inlägg
#11

Jag har fortfarande inte kommit någonstans med mitt "schema".
Är fortfarande lite osäker på hur jag ska strukturera upp det hela. :r

Schemat ska vara "löpande".
Det kommer fungera som så att det är en (1) lärare per elev.
En "admin" ska kunna klicka på ett tomt fält/ledig tid (se screen) för att sedan boka in en (1) elev.

Man ska även kunna boka in elever flera veckor framåt.

Räcker det med att ha följande tabeller:

  • elever
  • lärare
  • tider

Är återigen tacksam för alla förslag på hur jag kan bygga upp det hela.

(Har bifogat ett exempel på hur jag vill att det hela ska se ut.)

scheduler.jpg
Medlem sedan okt. 2007446 inlägg
#12

jag skulle nog ha tabellerna
elever
lärare
klassrum
lektioner

lektioner är då den tabell som själva schemat ligger i och där har man fält för
startTid
slutTid
ElevID
LärarID
KlassRumsID

Medlem sedan juli 20041 271 inlägg
#13

rhdf skrev:

jag skulle nog ha tabellerna
elever
lärare
klassrum
lektioner

lektioner är då den tabell som själva schemat ligger i och där har man fält för
startTid
slutTid
ElevID
LärarID
KlassRumsID

Precis... ungefär så hade jag tänkt. ;)
Hur ritar/skapar man sen själva schemat från mysql?
Vill gärna att alla tider/rum ska visas, även om ingen elev är bokad för just den tiden, i det klassrummet. *lite svårt att förklara*

EDIT: Hur löser jag det enklast med tiderna?
Alltså... när man klickar på ett tomt fält, då ska tiderna redan vara "förinställda".

Hela schemat kommer mer eller mindre fungera som en "vanlig" kalender, där varje schema ska hämtas/genereras beroende på vilken dag man väljer.

Medlem sedan juli 20041 271 inlägg
#14

*bump*

Medlem sedan okt. 2007446 inlägg
#15

vanliga metoden är ju att man skriver ut en kalender, eller i det här fallet ett schema och för varje position man skriver ut så kontrollerar man om det finns en "bokning"
finns det inget så skrivs ju den rutan ut, men utan innehåll=bokningsbar

jag har gjort nåt liknande fast mot den inbyggda kalender-kontrollen i asp.net
där hämtade man helt enkelt ut alla "bokningar" till en collection och sen för kollar man mot den.

nånting i stil med detta borde funka (pseudokod)

//Hämta aktuella bokningar för denna dag
SQL="SELECT startTime,...... WHERE date(startTime)=[valda dagens datum]
//Stoppa in resultatet i tex en array

//skriv ut tabellhuvud
<table>
<tr><td>Tid</td><th>Klassrum 1</th>.... osv
//Loopa ut rader för alla "lektionsblock"
<tr>
  <td>[tiden]</td>
//Här nånstans måste man då kolla om det finns en bokning för just detta block och i vilken "cell" det skall ligga
if bokning_finns then
  Skriv ut cell med bokningsinfo 
Else
  skriv ut en bokningsbar cell
End If 
//Slut loop
</tr>

hur du löser kontrollen av vilket klassrum det gäller är den pilliga biten
men om du skriver ut klassrummen ordnat efter ID så borde det vara enkelt

för att lösa att tiden skall vara förinställt är väl enklast om man skickar med starttiden som en variabel i det script som öppnar inmatningsrutan
ha en länk som är lika stor som tabellcellen och en onclick på den som anropar tex openMakeBooking(starttiden) denna öppnar då en popup med sidan MakeBooking.aspx?sTime=starttiden.
sen får den sidan fixa till så att starttiden sätts i rätt fält, och då även lägga på tid så att sluttiden sätts

Det här förutsätter ju dock att varje lektion bara är tex 40 min, skall man ha dubbelpass så blir det lite knepigare

Medlem sedan juli 20041 271 inlägg
#16

Tack för infon, ska kolla lite på detta. :birp
(Sedan ska man kunna boka antingen 30 eller 60 minuter.)

Men eftersom att jag vill visa alla tider (utfyllnad) även om det inte finns någon bokning för just den tiden, hur löser jag då det? *sorry för luddiga förklaringar*

Medlem sedan okt. 2007446 inlägg
#17

som jag gjorde ovan ;)
dvs du skriver ut alla tider men stoppar bara in info i de det finns bokningar
så det du bygger är först kod som skapar scema-layouten "parallellt" med det så stoppr du in bokningarna i schemat

jag klurade lite på det här med 30 eller 60 min bokningar
det går ju att lösa genom att varje "cell" egentligen är 2 celler, sen vid utskriften får man kolla om bokningen är 60 eller 30 min lång
(vid bokningsformuläret får men dessutom göra en dubbelkoll så att ingen försöker att boka tex mellan 10:00 och 11:00 när det redan finns en bokning 10:30-11:00 i det klassrummet)

Medlem sedan juli 20041 271 inlägg
#18

rhdf skrev:

du skriver ut alla tider men stoppar bara in info i de det finns bokningar
så det du bygger är först kod som skapar scema-layouten "parallellt" med det så stoppr du in bokningarna i schemat

Jo, jag läste det sedan. :r
Men var får jag tiderna ifrån?

(Nu är tiderna hårdkodade direkt i HTML.)

Medlem sedan okt. 2007446 inlägg
#19

du får helt enkelt ta en starttid tex 07:00
och sen lägga på 30 min i gammal klassisk ASP skulle det bli nånting i stil med
Dim startTime : startTime=TimeSerial(7,0,0)
For i=0 To 10
Response.write(formatDateTime(startTime,4)&<br />")
startTime=DateAdd("n", 30,startTime)
Next

du måste ju ändå generera hela tabellen för schemat dynamisk

vilket språk tänkte du dig att bygga i?

Medlem sedan juli 20041 271 inlägg
#20

rhdf skrev:

vilket språk tänkte du dig att bygga i?

Jag har redan börjar lite smått med att loopa ut alla klassrum (som finns i en egen tabell).
(Använder php + mysql.)

Har lite svårt att tänka "logiskt" i detta skede, speciellt när det gäller att generera schemat (dynamiskt), även om det inte finns några bokningar.

261 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)