Add README
Update some stuff
This commit is contained in:
30
README.md
30
README.md
@@ -1,2 +1,32 @@
|
|||||||
# CleverClass
|
# CleverClass
|
||||||
|
CleverClass ist eine Android-App, die Schülern hilft, ihre Schulnoten zu verwalten, ihren Durchschnitt zu berechnen, den Vertretungsplan von DSBmobile einzusehen, den Stundenplan zu speichern und anzuzeigen sowie ein Periodensystem zu nutzen.
|
||||||
|
|
||||||
|
## Funktionen und Verwendung
|
||||||
|
- **Notenverwaltung:** Trage deine Schulnoten ein und berechne deinen Durchschnitt. Perfekt, um alle Noten aus der Schule übersichtlich zu speichern.
|
||||||
|
- **Vertretungsplan:** Rufe den aktuellen Vertretungsplan von DSBmobile direkt in der App auf.
|
||||||
|
- **Stundenplan:** Trage deinen Stundenplan ein, speichere und verwalte ihn in der App, um immer den Überblick zu behalten.
|
||||||
|
- **Periodensystem:** Nutze das integrierte Periodensystem, um schnell Informationen zu chemischen Elementen nachzuschlagen.
|
||||||
|
## Installation
|
||||||
|
CleverClass kann einfach über den Play Store installiert werden oder durch das Herunterladen der APK-Datei:
|
||||||
|
|
||||||
|
Play Store:
|
||||||
|
- Öffne den Google Play Store auf deinem Android-Gerät
|
||||||
|
- Suche nach "CleverClass"
|
||||||
|
- Tippe auf "Installieren"
|
||||||
|
|
||||||
|
APK-Datei:
|
||||||
|
- Lade die APK-Datei von der [Website](https://google.com/) herunter
|
||||||
|
- Öffne die heruntergeladene APK-Datei auf deinem Android-Gerät
|
||||||
|
- Folge den Anweisungen auf dem Bildschirm, um die Installation abzuschließen
|
||||||
|
## Anforderungen
|
||||||
|
Betriebssystem: Android
|
||||||
|
## Autoren
|
||||||
|
- Paul Posch
|
||||||
|
- Matthias Meyer
|
||||||
|
- Jakub Szarko
|
||||||
|
- Emilian Bührer
|
||||||
|
## Lizenz
|
||||||
|
Dieses Projekt steht unter der [GNU General Public License](LICENSE) Version 3, 29 June 2007.
|
||||||
|
|
||||||
|
## Sonstiges
|
||||||
|
Dieses Projekt ist als Schulprojekt inerhalb von 3 Monaten entstanden.
|
||||||
@@ -89,7 +89,6 @@ class FachActivity : ComponentActivity() {
|
|||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
getGrades(this@FachActivity, name).collect { savedGrades ->
|
getGrades(this@FachActivity, name).collect { savedGrades ->
|
||||||
grades = savedGrades.toMutableList()
|
grades = savedGrades.toMutableList()
|
||||||
println()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -513,7 +512,7 @@ fun GradePrefab(
|
|||||||
@Composable
|
@Composable
|
||||||
fun Item(name : String, onItemClick: (String) -> Unit){
|
fun Item(name : String, onItemClick: (String) -> Unit){
|
||||||
DropdownMenuItem(
|
DropdownMenuItem(
|
||||||
text = { Text(text = name) },
|
text = { Text(text = name, style = MaterialTheme.typography.labelMedium) },
|
||||||
onClick = { onItemClick(name) }
|
onClick = { onItemClick(name) }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -114,8 +114,11 @@ fun NotenContent(activity: ComponentActivity){
|
|||||||
val editor = sharedPreferences.edit()
|
val editor = sharedPreferences.edit()
|
||||||
|
|
||||||
var allAverage by remember {
|
var allAverage by remember {
|
||||||
mutableStateOf(calculateAllAverage(loadAllAverages(sharedPreferences)))
|
mutableStateOf(0f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
allAverage = calculateAllAverage(sharedPreferences)
|
||||||
|
|
||||||
var showDeleteConfirmation by remember {
|
var showDeleteConfirmation by remember {
|
||||||
mutableStateOf(false)
|
mutableStateOf(false)
|
||||||
}
|
}
|
||||||
@@ -189,7 +192,7 @@ fun NotenContent(activity: ComponentActivity){
|
|||||||
saWeight = saWeights[i],
|
saWeight = saWeights[i],
|
||||||
activity = activity,
|
activity = activity,
|
||||||
sharedPreferences = sharedPreferences,
|
sharedPreferences = sharedPreferences,
|
||||||
onAvgChange = { allAverage = calculateAllAverage(loadAllAverages(sharedPreferences)) }
|
onAvgChange = { allAverage = calculateAllAverage(sharedPreferences) }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,7 +204,7 @@ fun NotenContent(activity: ComponentActivity){
|
|||||||
saWeight = saWeights[i],
|
saWeight = saWeights[i],
|
||||||
activity = activity,
|
activity = activity,
|
||||||
sharedPreferences = sharedPreferences,
|
sharedPreferences = sharedPreferences,
|
||||||
onAvgChange = { allAverage = calculateAllAverage(loadAllAverages(sharedPreferences)) }
|
onAvgChange = { allAverage = calculateAllAverage(sharedPreferences) }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -213,7 +216,7 @@ fun NotenContent(activity: ComponentActivity){
|
|||||||
saWeight = saWeights[i],
|
saWeight = saWeights[i],
|
||||||
activity = activity,
|
activity = activity,
|
||||||
sharedPreferences = sharedPreferences,
|
sharedPreferences = sharedPreferences,
|
||||||
onAvgChange = { allAverage = calculateAllAverage(loadAllAverages(sharedPreferences)) }
|
onAvgChange = { allAverage = calculateAllAverage(sharedPreferences) }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -225,7 +228,7 @@ fun NotenContent(activity: ComponentActivity){
|
|||||||
saWeight = saWeights[i],
|
saWeight = saWeights[i],
|
||||||
activity = activity,
|
activity = activity,
|
||||||
sharedPreferences = sharedPreferences,
|
sharedPreferences = sharedPreferences,
|
||||||
onAvgChange = { allAverage = calculateAllAverage(loadAllAverages(sharedPreferences)) }
|
onAvgChange = { allAverage = calculateAllAverage(sharedPreferences) }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -237,7 +240,7 @@ fun NotenContent(activity: ComponentActivity){
|
|||||||
saWeight = saWeights[i],
|
saWeight = saWeights[i],
|
||||||
activity = activity,
|
activity = activity,
|
||||||
sharedPreferences = sharedPreferences,
|
sharedPreferences = sharedPreferences,
|
||||||
onAvgChange = { allAverage = calculateAllAverage(loadAllAverages(sharedPreferences)) }
|
onAvgChange = { allAverage = calculateAllAverage(sharedPreferences) }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -343,9 +346,10 @@ fun GroopTitle(name: String, top: Boolean){
|
|||||||
Spacer(modifier = Modifier.height(12.dp))
|
Spacer(modifier = Modifier.height(12.dp))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun calculateAllAverage(avgs: List<Float>): Float{
|
fun calculateAllAverage(sharedPreferences: SharedPreferences): Float{
|
||||||
var total = 0.0f
|
var total = 0.0f
|
||||||
var number = 0
|
var number = 0
|
||||||
|
val avgs = loadAllAverages(sharedPreferences)
|
||||||
|
|
||||||
avgs.forEach{ avg ->
|
avgs.forEach{ avg ->
|
||||||
if (avg != 0.0f && !avg.isNaN()){
|
if (avg != 0.0f && !avg.isNaN()){
|
||||||
@@ -353,6 +357,7 @@ fun calculateAllAverage(avgs: List<Float>): Float{
|
|||||||
number += 1
|
number += 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (total / number)
|
return (total / number)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import androidx.compose.foundation.layout.padding
|
|||||||
import androidx.compose.foundation.layout.size
|
import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.foundation.layout.width
|
import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.foundation.layout.wrapContentHeight
|
import androidx.compose.foundation.layout.wrapContentHeight
|
||||||
|
import androidx.compose.foundation.layout.wrapContentSize
|
||||||
import androidx.compose.foundation.rememberScrollState
|
import androidx.compose.foundation.rememberScrollState
|
||||||
import androidx.compose.foundation.verticalScroll
|
import androidx.compose.foundation.verticalScroll
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
@@ -129,17 +130,24 @@ fun SettingsContent(activity: ComponentActivity) {
|
|||||||
horizontalAlignment = Alignment.CenterHorizontally
|
horizontalAlignment = Alignment.CenterHorizontally
|
||||||
) {
|
) {
|
||||||
Divider()
|
Divider()
|
||||||
Spacer(modifier = Modifier.height(16.dp))
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
Text(
|
Box(
|
||||||
text = "About",
|
contentAlignment = Alignment.Center,
|
||||||
style = MaterialTheme.typography.bodySmall,
|
modifier = Modifier
|
||||||
color = MaterialTheme.colorScheme.onBackground,
|
.wrapContentSize()
|
||||||
modifier = Modifier.clickable {
|
.clickable {
|
||||||
val intent = Intent(activity, AboutActivity::class.java)
|
val intent = Intent(activity, AboutActivity::class.java)
|
||||||
activity.startActivity(intent)
|
activity.startActivity(intent)
|
||||||
}
|
}
|
||||||
)
|
) {
|
||||||
Spacer(modifier = Modifier.height(16.dp))
|
Text(
|
||||||
|
text = "About",
|
||||||
|
style = MaterialTheme.typography.bodySmall,
|
||||||
|
color = MaterialTheme.colorScheme.onBackground,
|
||||||
|
modifier = Modifier.padding(horizontal = 32.dp, vertical = 8.dp)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user