Escolar Documentos
Profissional Documentos
Cultura Documentos
h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h> //biblioteca onde estão as funções sleep() e usleep()
/**
* o projeto foi implementado utilizando duas listas duplamente encadeadas
*
* @ListaDePlaylists, onde o campo info é do tipo Playlist
* @ListaDeAulas, onde o campo info é do tipo Aula
*
* a struct Playlist possui um ponteiro do tipo ListaDeAulas
* logo cada playlist cadastrada possui uma lista de aulas associada
*/
novaPlaylist->ante = NULL;
novaPlaylist->info = playlist;
novaPlaylist->prox = NULL;
if(listaDePlaylistsVazia(playlists)) {
(*playlists) = novaPlaylist;
return 1;
}
percorreLista = (*playlists);
while(percorreLista->prox != NULL) {
percorreLista = percorreLista->prox;
}
novaPlaylist->ante = percorreLista;
percorreLista->prox = novaPlaylist;
return 1;
}
if(listaDePlaylistsVazia(playlists))
return inserirPlaylist(playlists, playlist);
novaPlaylist->ante = NULL;
novaPlaylist->info = playlist;
novaPlaylist->prox = (*playlists);
(*playlists)->ante = novaPlaylist;
(*playlists) = novaPlaylist;
return 1;
}
novaPlaylist->ante = NULL;
novaPlaylist->info = aula;
novaPlaylist->prox = NULL;
if(listaDeAulasVazia(playlist)) {
(*playlist) = novaPlaylist;
return 1;
}
percorreLista = (*playlist);
while(percorreLista->prox != NULL) {
percorreLista = percorreLista->prox;
}
novaPlaylist->ante = percorreLista;
percorreLista->prox = novaPlaylist;
return 1;
}
if(listaDePlaylistsVazia(playlists))
return playlistRemovida;
removida = (*playlists);
playlistRemovida = removida->info;
(*playlists) = (*playlists)->prox;
if((*playlists) != NULL)
(*playlists)->ante = NULL;
free(removida);
return playlistRemovida;
}
if(listaDeAulasVazia(playlist))
return aulaRemovida;
removida = (*playlist);
aulaRemovida = removida->info;
(*playlist) = (*playlist)->prox;
if((*playlist) != NULL)
(*playlist)->ante = NULL;
free(removida);
return aulaRemovida;
}
//remover a última playlist da lista
Playlist removerPlaylistNoFim(ListaDePlaylists **playlists) {
ListaDePlaylists *removida;
Playlist playlistRemovida;
if(listaDePlaylistsVazia(playlists))
return playlistRemovida;
removida = (*playlists);
while(removida->prox != NULL) {
removida = removida->prox;
}
if(removida == (*playlists))
return removerPlaylistNoInicio(playlists);
removida->ante->prox = NULL;
playlistRemovida = removida->info;
free(removida);
return playlistRemovida;
}
if(listaDeAulasVazia(playlist))
return aulaRemovida;
removida = (*playlist);
while(removida->prox != NULL) {
removida = removida->prox;
}
if(removida == (*playlist))
return removerAulaNoInicio(playlist);
removida->ante->prox = NULL;
aulaRemovida = removida->info;
free(removida);
return aulaRemovida;
}
if(listaDePlaylistsVazia(playlists))
return NULL;
percorreLista = (*playlists);
while(percorreLista != NULL) {
if(percorreLista->info.numeroDaPlaylist == numeroDaPlaylist)
return percorreLista;
percorreLista = percorreLista->prox;
}
return NULL;
}
if(listaDePlaylistsVazia(playlists))
return playlistRemovida;
playlistRemovida = removida->info;
//primeira
if(removida == (*playlists))
return removerPlaylistNoInicio(playlists);
//ultima
if(removida->prox == NULL)
return removerPlaylistNoFim(playlists);
removida->ante->prox = removida->prox;
removida->prox->ante = removida->ante;
free(removida);
return playlistRemovida;
}
//system("clear");
system("cls");
printf("REPRODUZINDO PLAYLIST\n\n");
while(aulas != NULL) {
printf("Aula %d - %.2f\n", aulas->info.numeroDaAula, aulas-
>info.tempoDeDuracao);
sleep(5);
usleep(500000);
aulas = aulas->prox;
}
printf("\n");
printf("Voce terminou a playlist\n");
sleep(5);
usleep(500000);
}
/**
* mover uma playlist para primeira posição da lista
* a cada vez que uma playlist é reproduzida o método de ordenação é aplicado
* a playlist reproduzida é alocada para a primeira posição da lista
* quando todas as playlists são reproduzidas, uma após a outra, a ordenação não
acontece
*/
void moverUmaPlaylistParaFrente(ListaDePlaylists **playlists, int numeroDaPlaylist)
{
ListaDePlaylists *playlistParaMover;
Playlist playlistAuxiliar;
if(playlistParaMover == (*playlists)) {
return;
}
if(playlistParaMover->prox == NULL) {
playlistAuxiliar = removerPlaylistNoFim(playlists);
inserirPlaylistNoInicio(playlists, playlistAuxiliar);
return;
}
do {
//system("clear");
system("cls");
printf("PLAYLISTS CADASTRADAS\n\n");
percorreLista = (*playlists);
while(percorreLista != NULL) {
printf("%d. %s\n", percorreLista->info.numeroDaPlaylist, percorreLista-
>info.nomeDaPlaylist);
percorreLista = percorreLista->prox;
}
printf("0. Voltar\n\n");
if(numeroDaPlaylistEscolhida != 0){
ouvirPlaylist(&playlistEscolhida->info.ptrPlaylist);
moverUmaPlaylistParaFrente(playlists, playlistEscolhida-
>info.numeroDaPlaylist);
} else {
return;
}
}while(numeroDaPlaylistEscolhida != 0);
}
do {
//system("clear");
system("cls");
printf("PLAYLISTS CADASTRADAS\n\n");
percorreLista = (*playlists);
while(percorreLista != NULL) {
printf("%d. %s\n", percorreLista->info.numeroDaPlaylist, percorreLista-
>info.nomeDaPlaylist);
percorreLista = percorreLista->prox;
}
printf("0. Voltar\n\n");
if(numeroDaPlaylistEscolhida != 0) {
removerPlaylist(playlists, numeroDaPlaylistEscolhida);
}
else
return;
}while(numeroDaPlaylistEscolhida != 0);
}
if(listaDePlaylistsVazia(playlists)){
return 1;
}
else {
while(percorreLista->prox != NULL) {
percorreLista = percorreLista->prox;
}
return percorreLista->info.numeroDaPlaylist +1;
} //return percorreLista->info.numeroDaPlaylist +1;
}
//system("clear");
system("cls");
novaPlaylist.numeroDaPlaylist = numeroDaProximaPlaylist(playlists);
inicializarListaDeAulas(&novaPlaylist.ptrPlaylist);
inserirPlaylist(playlists, novaPlaylist);
printf("\n");
printf("Playlist cadastrada! Agora cadastre as aulas da Playlist\n\n");
sleep(5);
usleep(500000);
printf("\n");
for(i = 1; i <= numeroDeAulas; i++) {
novaAula.numeroDaAula = i;
inserirAula(&playlistCadastrada->info.ptrPlaylist, novaAula);
}
printf("\n");
printf("Playlist cadastrada com sucesso!\n");
sleep(5);
usleep(500000);
}
//menu do professor
void menuAreaDoProfessor(ListaDePlaylists **playlists) {
int opcaoMenuAreaDoProfessor;
do {
//system("clear");
system("cls");
printf("AREA DO PROFESSOR\n\n");
printf("1. Ver Playlists\n");
printf("2. Excluir Playlist\n");
printf("3. Cadastrar Playlist\n");
printf("0. Voltar\n\n");
printf("Opcao: ");
scanf("%d", &opcaoMenuAreaDoProfessor);
switch(opcaoMenuAreaDoProfessor) {
case 1:
verPlaylists(playlists);
break;
case 2:
excluirPlaylist(playlists);
break;
case 3:
cadastrarPlaylist(playlists);
break;
default:
break;
}
}while(opcaoMenuAreaDoProfessor != 0);
}
while(percorreLista->prox != NULL) {
ouvirPlaylist(&percorreLista->info.ptrPlaylist);
percorreLista = percorreLista->prox;
}
}
//menu do aluno
void menuAreaDoAluno(ListaDePlaylists **playlists) {
int opcaoMenuAreaDoAluno;
do {
//system("clear");
system("cls");
printf("AREA DO ALUNO\n\n");
printf("1. Ver Playlists\n");
printf("2. Reproduzir Todas as Playlists\n");
printf("0. Voltar\n\n");
printf("Opcao: ");
scanf("%d", &opcaoMenuAreaDoAluno);
switch(opcaoMenuAreaDoAluno) {
case 1:
verPlaylists(playlists);
break;
case 2:
ouvirTodasAsPlaylists(playlists);
break;
default:
break;
}
}while(opcaoMenuAreaDoAluno != 0);
}
//menu principal
void menuPrincipal(ListaDePlaylists **playlists) {
int opcaoMenuPrincipal;
do {
//system("clear");
system("cls");
printf("GERENCIADOR DE PLAYLISTS\n\n");
printf("1. Area do Aluno\n");
printf("2. Area do Professor\n");
printf("0. Sair\n\n");
printf("Opcao: ");
scanf("%d", &opcaoMenuPrincipal);
switch(opcaoMenuPrincipal) {
case 1:
menuAreaDoAluno(playlists);
break;
case 2:
menuAreaDoProfessor(playlists);
break;
default:
break;
}
}while(opcaoMenuPrincipal != 0);
}
int main() {
ListaDePlaylists *playlists;
ListaDePlaylists *playlistPesquisada;
Playlist novaPlaylist;
Playlist *playlist;
Aula aulaDaPlaylist;
int i, j;
/**
* o bloco de código abaixo cria registros para testes,
* para facilitar a compreensão do que foi implementado
*/
inicializarListaDePlaylists(&playlists);
inserirAula(&playlistPesquisada->info.ptrPlaylist, aulaDaPlaylist);
}
}
return 0;
}