Kyaria

Praktikum 3 - Komplett

Jun 11th, 2019
2,726
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 11.69 KB | None | 0 0
  1. fun main() {
  2.  
  3.     val verwaltung = Musikverwaltung()
  4.  
  5.     val song1 = Song("Led Zeppelin", "Led Zeppelin", 180, 90)
  6.     val song2 = Song("Led Zeppelin II", "Led Zeppelin", 147, 80)
  7.     val song3 = Song("Led Zeppelin III", "Led Zeppelin", 260, 72)
  8.     val song4 = Song("[Led Zeppelin IV]", "Led Zeppelin", 451, 85)
  9.     val song5 = Song("Houses of the Holy", "Led Zeppelin", 332, 94)
  10.     val song6 = Song("Physical Graffiti", "Led Zeppelin", 174, 100)
  11.     val song7 = Song("Presence", "Led Zeppelin", 80, 67)
  12.     val song8 = Song("In Through the Out Door", "Led Zeppelin", 270, 93)
  13.  
  14.     verwaltung.hinzufuegen(song1)
  15.     verwaltung.hinzufuegen(song2)
  16.     verwaltung.hinzufuegen(song3)
  17.     verwaltung.hinzufuegen(song4)
  18.     verwaltung.hinzufuegen(song5)
  19.     verwaltung.hinzufuegen(song6)
  20.     verwaltung.hinzufuegen(song7)
  21.     verwaltung.hinzufuegen(song8)
  22.  
  23.     val newPlaylist = Playlist(mutableListOf<Song>(song1, song2, song3))
  24.     val zufallsPlaylist: Playlist = verwaltung.zufallsPlaylist()
  25.     val dynPlaylist = DynamicPlaylist(mutableListOf<Song>(song1, song2, song3))
  26.  
  27.     val bew = 80
  28.  
  29.     newPlaylist.alleAbspielen()
  30.     println("\nSpieldauer von newPlaylist: ${newPlaylist.gesamteSpieldauer()} Sekunden, ${String.format("%.2f",newPlaylist.gesamteSpieldauer() / 60.0)} Minuten")
  31.     println("\nAnzahl der Songs mit einer  Bewertung von $bew oder besser: ${newPlaylist.SpieldauerMitXOderBesser(bew)}")
  32.  
  33.     println("\n-----SEPERATOR-----\n")
  34.  
  35.     zufallsPlaylist.alleAbspielen()
  36.     println("\nSpieldauer von zufallPlaylist: ${zufallsPlaylist.gesamteSpieldauer()} Sekunden, ${String.format("%.2f",zufallsPlaylist.gesamteSpieldauer() / 60.0)} Minuten")
  37.     println("\nAnzahl der Songs mit einer  Bewertung von $bew oder besser: ${zufallsPlaylist.SpieldauerMitXOderBesser(bew)}")
  38.  
  39.     println("\n-----SEPERATOR-----\n")
  40.  
  41.     dynPlaylist.alleAbspielen()
  42.     println("\nSpieldauer von dynPlaylist: ${dynPlaylist.gesamteSpieldauer()} Sekunden, ${String.format("%.2f",dynPlaylist.gesamteSpieldauer() / 60.0)} Minuten")
  43.     println("\nAnzahl der Songs mit einer  Bewertung von $bew oder besser: ${dynPlaylist.SpieldauerMitXOderBesser(bew)}")
  44.  
  45.     //dynPlaylist Test
  46.  
  47.     dynPlaylist.add(song6)
  48.  
  49.     println("\n-----SEPERATOR-----\n")
  50.  
  51.     dynPlaylist.alleAbspielen()
  52.     println("\nSpieldauer von dynPlaylist: ${dynPlaylist.gesamteSpieldauer()} Sekunden, ${String.format("%.2f",dynPlaylist.gesamteSpieldauer() / 60.0)} Minuten")
  53.     println("\nAnzahl der Songs mit einer  Bewertung von $bew oder besser: ${dynPlaylist.SpieldauerMitXOderBesser(bew)}")
  54.  
  55.     println("\n-----SEPERATOR-----\n")
  56.  
  57.     val testSong = dynPlaylist.take()
  58.  
  59.     println(testSong?.titel)
  60.  
  61.     dynPlaylist.alleAbspielen()
  62.     println("\nSpieldauer von dynPlaylist: ${dynPlaylist.gesamteSpieldauer()} Sekunden, ${String.format("%.2f",dynPlaylist.gesamteSpieldauer() / 60.0)} Minuten")
  63.     println("\nAnzahl der Songs mit einer  Bewertung von $bew oder besser: ${dynPlaylist.SpieldauerMitXOderBesser(bew)}")
  64.  
  65.     println("\n-----SEPERATOR-----\n")
  66.    
  67.     dynPlaylist.reset()
  68.  
  69.     dynPlaylist.alleAbspielen()
  70.     println("\nSpieldauer von dynPlaylist: ${dynPlaylist.gesamteSpieldauer()} Sekunden, ${String.format("%.2f",dynPlaylist.gesamteSpieldauer() / 60.0)} Minuten")
  71.     println("\nAnzahl der Songs mit einer  Bewertung von $bew oder besser: ${dynPlaylist.SpieldauerMitXOderBesser(bew)}")
  72.  
  73.     val besterSong: Song = verwaltung.besterSong()
  74.  
  75.     println("\nDer beste Song in der Datenbank ist: ${besterSong.titel} von ${besterSong.interpret}, Spieldauer: ${besterSong.spieldauer / 60.0}, Bewertung: ${besterSong.bewertung}")
  76.  
  77.     do{
  78.  
  79.         println("Bitte geben Sie einen Suchbegriff ein!")
  80.         val eingabe = readLine().toString()
  81.  
  82.         if(eingabe != "stopp") {
  83.             val seekSong = verwaltung.suchen(eingabe)
  84.             seekSong?.abspielen() ?: println("\nIhre Suche ergab keine Treffer!\n")
  85.         }
  86.     }
  87.     while(eingabe != "stopp")
  88.  
  89.     val  player = Wiedergabe(newPlaylist, 0)
  90.     /*
  91.     player.startStopErneut(0)
  92.     player.nMalNeachsterSong(3)
  93.     player.startStopErneut(1)
  94.     println("aktuellerSong: ${player.aktuellerSong}")
  95.     player.startStopErneut(1)
  96.     player.neachsterSong()
  97.     println("aktuellerSong: ${player.aktuellerSong}")
  98.     player.wiedergabemodusSetzen(2)
  99.     println("aktuellerSong: ${player.aktuellerSong}")
  100.     player.neachsterSong()
  101.  
  102.     println("aktuellerSong: ${player.aktuellerSong}")
  103.     */
  104.  
  105. }
  106.  
  107. import kotlin.random.Random
  108.  
  109. class Wiedergabe(var aktuellePlaylist: Playlist, var wiedergabemodus: Int){
  110.  
  111.     var aktuellerSong: Int = 0
  112.  
  113.     fun aktuellePlaylistSetzen(zuSetzendePlaylist: Playlist){
  114.  
  115.         aktuellePlaylist = zuSetzendePlaylist
  116.     }
  117.  
  118.     fun wiedergabemodusSetzen(zuSetzenderWiedergabemodus: Int){
  119.  
  120.         wiedergabemodus = zuSetzenderWiedergabemodus
  121.     }
  122.  
  123.     fun neachsterSong(){
  124.  
  125.         var wiederholen: String = "n"
  126.  
  127.         if( wiedergabemodus == 0) {
  128.  
  129.             do {
  130.  
  131.                 if(aktuellerSong < aktuellePlaylist.songliste.size) {
  132.                     aktuellePlaylist.songliste.get(aktuellerSong).abspielen()
  133.                     aktuellerSong++
  134.                 }
  135.  
  136.                 if(aktuellerSong < aktuellePlaylist.songliste.size) {
  137.                     println("Wiederholen? y/n")
  138.                     wiederholen = readLine().toString()
  139.                 }
  140.                 else {
  141.                     wiederholen = "n"
  142.                     startStopErneut(1)
  143.                 }
  144.             }while (wiederholen != "n")
  145.         }
  146.         else if(wiedergabemodus == 1){
  147.  
  148.             do {
  149.                 for (s in aktuellePlaylist.songliste)
  150.                     s.abspielen()
  151.  
  152.                 println("Wiederholen? y/n")
  153.                 wiederholen = readLine().toString()
  154.  
  155.             }while (wiederholen != "n")
  156.         }
  157.         else{
  158.             do{
  159.                 aktuellePlaylist.songliste.get(Random.nextInt(aktuellePlaylist.songliste.size)).abspielen()
  160.  
  161.                 println("Wiederholen? y/n")
  162.                 wiederholen = readLine().toString()
  163.             }while (wiederholen != "n")
  164.         }
  165.     }
  166.  
  167.     fun nMalNeachsterSong(n: Int){
  168.  
  169.         for (s in 0..n)
  170.             neachsterSong()
  171.     }
  172.  
  173.     fun startStopErneut(action: Int){
  174.  
  175.         if(action == 0){
  176.             neachsterSong()
  177.         }
  178.         else if(action == 1)
  179.             aktuellerSong = 0
  180.         else {
  181.             aktuellerSong = 0
  182.             neachsterSong()
  183.         }
  184.     }
  185. }
  186.  
  187. open class Playlist(val songliste: MutableList<Song>) {
  188.  
  189.     open fun gesamteSpieldauer() = songliste.sumBy { it.spieldauer }
  190.  
  191.     fun SpieldauerMitXOderBesser(x: Int): Int {
  192.  
  193.         var tmp: Int = 0
  194.  
  195.         for (s in songliste) {
  196.             if(s.bewertung >= x){
  197.                 tmp += 1
  198.             }
  199.         }
  200.  
  201.         return tmp
  202.     }
  203.  
  204.     open fun alleAbspielen() {
  205.  
  206.         for (s in songliste) {
  207.  
  208.             s.abspielen()
  209.         }
  210.     }
  211. }
  212.  
  213. class DynamicPlaylist (songlisteParam: MutableList<Song>): Playlist(songlisteParam){
  214.  
  215.     class SongNode(val song : Song, var nextSong : SongNode?)
  216.  
  217.     private var first: SongNode? = null
  218.     private var last: SongNode? = null
  219.  
  220.     init {
  221.  
  222.         reset();
  223.  
  224.         /*first = SongNode(songliste.get(0), null)
  225.  
  226.         var runPointer = first
  227.  
  228.         for( i in 1..songliste.size){
  229.  
  230.             runPointer?.nextSong = SongNode(songliste.get(i), null)
  231.             runPointer = runPointer?.nextSong ?: runPointer
  232.         }
  233.  
  234.         last = runPointer*/
  235.     }
  236.  
  237.     fun add(derSongTM : Song){
  238.  
  239.         last?.nextSong = SongNode(derSongTM, null)
  240.     }
  241.  
  242.     fun take() : Song?{
  243.  
  244.         var tmp = first
  245.         first = first?.nextSong
  246.  
  247.         return tmp?.song
  248.     }
  249.  
  250.     fun reset(){
  251.  
  252.         first = SongNode(songliste.get(0), null)
  253.  
  254.         var runPointer = first
  255.  
  256.         for( i in 1..songliste.size-1){
  257.  
  258.             runPointer?.nextSong = SongNode(songliste.get(i), null)
  259.             runPointer = runPointer?.nextSong ?: runPointer
  260.         }
  261.  
  262.         last = runPointer
  263.     }
  264.  
  265.     override fun gesamteSpieldauer() : Int{
  266.  
  267.         var runPointer = first
  268.         var tmp : Int = 0
  269.  
  270.         while (runPointer != null){
  271.  
  272.             tmp += runPointer.song.spieldauer
  273.             runPointer = runPointer.nextSong
  274.         }
  275.  
  276.         return tmp
  277.     }
  278.  
  279.     override fun alleAbspielen() {
  280.  
  281.         var runPointer = first
  282.  
  283.         while (runPointer != null){
  284.  
  285.             runPointer.song.abspielen()
  286.             runPointer = runPointer.nextSong
  287.         }
  288.     }
  289.  
  290. }
  291.  
  292. import kotlin.random.Random
  293.  
  294. class Musikverwaltung() {
  295.  
  296.     val songliste: MutableList<Song> = mutableListOf<Song>()
  297.  
  298.     fun hinzufuegen(song: Song) {
  299.  
  300.         songliste.add(song)
  301.     }
  302.  
  303.     fun suchen(begriff: String): Song?{
  304.  
  305.         for(s in songliste){
  306.  
  307.             if(s.search(begriff)) {
  308.  
  309.                 return s
  310.             }
  311.         }
  312.  
  313.         return null
  314.     }
  315.  
  316.     fun besterSong(): Song{
  317.  
  318.         var tmp = songliste.get(0)
  319.  
  320.         for(s in songliste){
  321.  
  322.             if(s.bewertung > tmp.bewertung)
  323.                 tmp = s
  324.         }
  325.  
  326.         return tmp
  327.     }
  328.  
  329.     fun zufallsPlaylist(): Playlist{
  330.  
  331.         val newSongliste: MutableList<Song> = mutableListOf<Song>()
  332.         var laengePlaylist = Random.nextInt(songliste.size)
  333.  
  334.         var istVorhanden = false
  335.  
  336.         for(i in 0..laengePlaylist){
  337.  
  338.             for (s in newSongliste){
  339.  
  340.                 if(songliste.get(Random.nextInt(songliste.size)) == s)
  341.                     istVorhanden = true
  342.             }
  343.  
  344.             if(!istVorhanden)
  345.                 newSongliste.add(songliste.get(Random.nextInt(songliste.size)))
  346.             else
  347.                 laengePlaylist++
  348.         }
  349.  
  350.         return Playlist(newSongliste)
  351.     }
  352. }
  353.  
  354. open class Song(val titel: String, val interpret: String, val spieldauer: Int, _bewertung: Int) {
  355.  
  356.     var bewertung = _bewertung
  357.         set(value) {
  358.             if (value !in 0..100)
  359.                 field = 0
  360.             else
  361.                 field = value
  362.         }
  363.  
  364.     open fun abspielen() {
  365.  
  366.         var decke: Int
  367.  
  368.         if (spieldauer % 60 == 0)
  369.             decke = spieldauer / 60
  370.         else
  371.             decke = spieldauer / 60 + 1
  372.  
  373.         for (i in 1..decke)
  374.             println("Spiele: $titel von $interpret (Bewertung: $bewertung Punkte)")
  375.     }
  376.  
  377.     fun change(newValue: Int) {
  378.  
  379.         bewertung = newValue
  380.     }
  381.  
  382.     open fun search(searchString: String): Boolean {
  383.  
  384.         var istDrin = false
  385.  
  386.         if (titel.contains(searchString))
  387.             istDrin = true
  388.  
  389.         if (interpret.contains(searchString))
  390.             istDrin = true
  391.  
  392.         return istDrin
  393.     }
  394.  
  395. }
  396.  
  397. class SongMitText(titelParam: String, interpretParam: String, spieldauerParam: Int, bewertungParam: Int, var textzeile: String) : Song(titelParam, interpretParam, spieldauerParam, bewertungParam){
  398.  
  399.     override fun search(searchString: String): Boolean {
  400.  
  401.         var istDrin = false
  402.  
  403.         if (titel.contains(searchString))
  404.             istDrin = true
  405.  
  406.         if (interpret.contains(searchString))
  407.             istDrin = true
  408.  
  409.         if (textzeile.contains(searchString))
  410.             istDrin = true
  411.  
  412.         return istDrin
  413.     }
  414. }
  415.  
  416. class SongMitAutobewertung(titelParam: String, interpretParam: String, spieldauerParam: Int, bewertungParam: Int) : Song(titelParam, interpretParam, spieldauerParam, bewertungParam){
  417.  
  418.     override fun abspielen() {
  419.  
  420.         var decke: Int
  421.  
  422.         if (spieldauer % 60 == 0)
  423.             decke = spieldauer / 60
  424.         else
  425.             decke = spieldauer / 60 + 1
  426.  
  427.         bewertung++
  428.  
  429.         for (i in 1..decke)
  430.             println("Spiele: $titel von $interpret (Bewertung: $bewertung Punkte)")
  431.     }
  432. }
Advertisement
Add Comment
Please, Sign In to add comment