Ir para conteúdo
Fórum Script Brasil

AlineI

Membros
  • Total de itens

    24
  • Registro em

  • Última visita

Tudo que AlineI postou

  1. AlineI

    (Resolvido) Arquivos

    Ahh sim, vou tentar ver também qual seria o problema do feof... Obrigado!
  2. Bom, este programa consiste em Cadastrar e Buscar no arquivo de registro, usando fread e fwrite, mas, na execução do programa, ao achar o livro atraves do autor, ele imprimi as caracteristicas do livro duas vezes, mas lá no arquivo que foi criado, ele imprimi só uma vez, como deve ser. Ou seja, quando é só um arquivo, ele le de novo, mas já fiz teste com dois, e isso não acontece. Qual poderia ser o problema? Na condição de parada? obs: ignorem alguns comentários que eram válidos quando era apenas um teste. #include <stdio.h> #include <stdlib.h> #include<string.h> typedef struct { char titulo[20]; char autor[20]; char assunto[20]; char editora[20]; int edicao; }reg; typedef reg registro; registro regLivro; void Cadastro() { //funcao que grava os dois regs acima no arquivo. FILE *ptrArq; ptrArq = fopen("Teste.txt","wb");//escrita binaria printf("Titulo: "); gets(regLivro.titulo); printf("Autor: "); gets(regLivro.autor); printf("Assunto: "); gets(regLivro.assunto); printf("Editora: "); gets(regLivro.editora); printf("Edicao: "); scanf("%d", ®Livro.edicao); fflush(stdin); fwrite(®Livro,sizeof(registro),1,ptrArq);//salva o arquivo 1, //fwrite(&teste2,sizeof(registro),2,arq);//o parametro mudou para 2, //para não sobrescrever o //registro 1 fclose(ptrArq);//fecha o arquivo para não ferra-lo. //Somente salva o arquivo no disco. } void Busca(char *autor)//passa como parametro uma chave pela qual busca... { FILE *ptrArq;//arquivo... ptrArq = fopen("Teste.txt","rb");//leitura binaria, usada para ler registros. registro temp;//registro temporario //int posicao =1;//so para mostrar onde achou o reg no arquivo... while(!feof(ptrArq))//enquanto não FimDeArquivo(NomeDoArquivo) { fread(&temp,sizeof(registro),1,ptrArq);//Le um registro salvando o no temp... //no caso esta comparando o paramentro com o campo TESTE do registro /* *Poderiamos buscar em um registro por exemplo pelo campo RGA, então essa busca seria util... */ if (strcmp(temp.autor,autor)==0)//e compara se a chave do registro lido é igual a procurada. { //printf("Achou a parada na posicao %d\n",posicao);//se encontrou mostra-a. printf("\nTitulo: %s", temp.titulo); printf("\nAutor: %s", temp.autor); printf("\nAssunto: %s", temp.assunto); printf("\nEditora: %s", temp.editora); printf("\nEdicao: %d", temp.edicao); } else printf("Livro inexistente no arquivo"); //posicao++;//avanca o contador. } fclose(ptrArq);//fecha } int main() { char autor[20]; Cadastro(); printf("Informe o autor para efetuar a busca: "); gets(autor); Busca(autor); return 0; }
  3. Olha, não sei, mas parece um tanto trabalhoso isso. Eu fiz uma tabela mágica, ano passado q nem sei onde está... é a base de regras, truque, que seja... onde a pessoa escolhe o numero de colunas que a tabela vai ter, os numeros são gerados, mas existe uma regra pra isso, dai a pessoa pensa no numero e informa em quais colunas ele está e em quais ele não está. Através de um método, é "adivinhado" o numero que a pessoa pensou. É interessante. Mas é só uma analogia ao que você está fazendo.
  4. Bom, tem alguém que saiba mexer com C e OpenGL?! Tenho que fazer o programa das Curvas de Hilbert rodar no OpenGL... mas é em 2D mesmo, menos mal. Se tiver, eu posto o programa aqui ;) Pra ir me auxiliando.
  5. Então isso é com structs? Bom, foi isso que eu entendi... Então, ficaria assim: struct { char nome[30]; char sexo; int anoNasc; int codEscolaridade; /*dai na hora que pergunta o codigo da escolaridade, imprima as opções (1- analfabeto 2- primeiro grau 3-segundo grau 4- superior), e o usuario digita apenas o codigo, que seria 1, 2, 3 ou 4.*/ }
  6. AlineI

    Jogo da Velha

    Bom, eu fiz um em C. Usei a função a seguir, para que eu pudesse chamar ela e receber as letras (A até I) para representar o tabuleiro como referência para o usuário. Ele diz se é na posição A ou B ou C... ou I, que quer jogar. Isso de início, pois cada uma das variaveis c1, c2... c9, estão inicializadas com A, B... I, respectivamente. Depois essa função é chamada num laço de repetição onde o tabuleiro é imprimido a cada jogada, devidamente atualizado. void imprime() { printf("\n::.TABULEIRO.::\n"); printf("\n %c | %c | %c \n", c1, c2, c3); printf("___________\n"); printf(" %c | %c | %c \n", c4, c5, c6); printf("___________\n"); printf(" %c | %c | %c \n", c7, c8, c9); } Então, o tabuleiro primeiramente é apresentado assim: _A_|_B_|_C_ _D_|_E_|_F_ _G_|_H_|_I_ E caso o jogador escolha a posição A, o tabuleiro atualiza e é exibido com um X ou uma O na posição A, enquanto o resto fica como está (B, C... I), e assim por diante. Bom, esta é apenas uma idéia, pode pegar como base para aperfeiçoar ou sei la... Espero ter ajudado. E ah! Como o kuroi questionou, não sabemos se você irá fazer com gráficos ou apenas no dos, mas creio que seja no dos, então... essa seria a minha contribuição, caso seja gráficos... nem posso ajudar, aliás, estou com problemas com gráficos. hehe.
  7. AlineI

    jogo do bingo

    Pois é... randomize é do pascal... srand é em C. Voce pode usar a funcao srand() e rand() da stdlib. A srand() tem mais ou menos a mesma funcao da Randomize do pascal. Dai, para voce gerar um numero aleatorio (entre 0 e RAND_MAX) voce faz uma chamada para a funcao rand(). #include <stdio.h> #include <time.h> #include <stdlib.h> int main(){ srand(time(NULL)); while (1) printf("%d\n", rand()); return 0; } Se voce quiser gerar um numero entre linf (limite inferior) e lsup (limite superior) (dois valores que voce escolhe), voce pode fazer assim: int rvalue = linf + (rand() % (lsup - linf));
  8. 1º) Baixar o arquivo "MinGW-5.1.4.exe": http://sourceforge.net/project/showfiles.p...ckage_id=240780 2º) Após fazer o download, execute o programa. Escolha a opção FULL e depois "DOWNLOAD & INSTALL". Ele vai baixar todos os arquivos do compilador. Após isso instale o compilador no diretório padrão "C:\MinGW" (não na pasta Arquivos de Programas, apenas dentro do disco C). 3º) Após instalá-lo, baixe o arquivo: http://dessent.net/tmp/gcc-vista-3.4.5-20060117-1.tar.gz. Descompacte-o e jogue as pastas "bin" e "libexec" dentro da pasta onde o compilador MinGW está instalado, substituindo tudo. 4º) Após isso, baixar o Code::Blocks sem MinGW : http://downloads.sourceforge.net/codeblock...setup.exe" e instale-o. ^_^
  9. Como que eu faço pra colocar [resolvido] no tópico? :rolleyes:
  10. Sim, interessante para a lógica e própria linguagem. A função da qual já comentou-se que há... é a toupper. ;)
  11. AlineI

    jogo do bingo

    você sabe onde está sorteando o que? Tem mais de uma função rand aí no código... tem essa cart[j] = randcart(); usada no ínicio do programa... é usada num for. (realmente ainda não analisei bem para ver pra que serve). tem três funções no final que usam o rand também... /*----------------------------Funcao sorteia numeros dos cartoes-------------------- int randnume() { int numero; /*Retorna inteiros*/ numero = random(90)+1; return(numero); } //*-----------------funcao do sorteio da quantidade de cartoes------------------------ int randcart() { int cart; /*Retorna inteiro*/ cart = random(2)+1; return(cart); } //*--------------------funcao escolhe um numero de 1 a 90------------------------------ int numbola() { int bola; /*Retorna este numero*/ bola = random(90)+1; return(bola); } Primeiro, está comentado nessas funções acima pra que servem... então, o que você quer mudar para randmize() ? Como assim apenas te falaram?! Pesquise e veja como essa função randemize funciona!! Depois tente colocar aonde você quer, se é na função para sortear números de cartões, quantidade de cartões ou numero das bolas... Por favor, é realmente muito importante que você estude este código antes de tentar fazer alguma alteração.
  12. Bom, implementei programas de cópia de arquivo por caracter, linha e bloco... mas o de bloco tem um pequeno erro. O programa consiste em informar um RGM e o nome do aluno (RGM e Aluno em uma struct)... quando quiser parar, informe -1 para o RGM. Então a ultima struct informada (RGM e Aluno), são repetidos no arquivo de saída, aparecem dois iguais... por exemplo: Programa sendo executado: RGM: 12 Aluno: Aline RGM: 15 Aluno: Gessica RGM: -1 process returned 1 (0x1) execution time... Ok. Lá na pasta onde estou gravando o .txt com o arquivo de Entrada e o de Saida(cópia)... o de Entrada está perfeito, enquanto o de Saída repete as informações da ultima struct, no caso do exemplo, exibe Géssica e seu rgm duas vezes. Aí vai o código: #include <stdio.h> #include <stdlib.h> typedef struct { char nome[20]; int rgm; }tReg; tReg regAluno; unsigned CopiaArqPorBloco (const char *arqDeEntrada, const char *arqDeSaida) { FILE *ptrEntrada, *ptrSaida; /*streams*/ char c; ptrEntrada = fopen(arqDeEntrada, "rb"); if(ptrEntrada == NULL) return 0; ptrSaida = fopen(arqDeSaida, "wb"); if(ptrSaida == NULL) { fclose(ptrEntrada); return 0; } do { fread (&regAluno, sizeof(tReg), 1, ptrEntrada); fwrite (&regAluno, sizeof(tReg), 1, ptrSaida); }while (!feof(ptrEntrada)); fclose(ptrEntrada); fclose(ptrSaida); return 1; } int CriaArq(char *nomeArq) { FILE *ptrArq; tReg Aluno; ptrArq = fopen(nomeArq, "wb"); if (ptrArq == NULL) return 0; do { printf("RGM: "); scanf("%d", &Aluno.rgm); if (Aluno.rgm!= -1) { printf("Nome: "); scanf("%s", Aluno.nome); fwrite (&Aluno, sizeof(tReg), 1, ptrArq); } }while (Aluno.rgm != -1); fclose(ptrArq); return 1; } int main() { char *nomeArqE, *nomeArqS; //printf("Informe o nome do Arquivo: "); //scanf("%s", nomeArq); nomeArqE = "ArqEntrada.txt"; nomeArqS = "ArqSaida.txt"; if (!CriaArq(nomeArqE)) { printf("Falhou CriaArq"); return 0; } if (!CopiaArqPorBloco(nomeArqE, nomeArqS)) { printf("Falhou CopiaArqPorBloco"); return 0; } return 1; }
  13. AlineI

    jogo do bingo

    Onde tem a função rand ou random no código... foi você que fez ou pegou pronto? Se não foi você, deve pelo menos entender como funciona a função rand que está sortiando as cartelas e bolas... associando ao que eu disse, você saberá se é possível ir mudando o indice para sortear numeros diferentes ou pode ser que não dê , de acordo com o funcionamento do programa... eu nem testei esse programa... E uma observação: sou mulher.
  14. AlineI

    jogo do bingo

    cart[j] = randcart(); essa função ai... é que sorteia, então... que eu saiba ela sempre sorteia o mesmo tanto. Eu uso o rand diferente, assim: vetor/matriz = rand()%100; //100 seria até onde sairia numeros, por exempli: se definir a matriz ou vetor com 50 elementos, vai ter 50 números, cada um entre 0 e 100. Se eu mudar esse 100, aí ele vai sortear de novo, novos numeros, caso esse número seja o mesmo, irá sempre sortear os mesmos. No seu caso eu não analisei pra saber o que significa sua variavel JOG que é o indice q está sendo usado no rand. Não tenho certeza se não dá pra mudar isso, mas está ai o que eu sei, só vai mudar se você mudar, o que é nesse exemplo, o 100.
  15. Kuroi.. Sim, sei que procedimentos não retornam e funções sim. O que eu disse tem nada a ver com isso, acontece que tanto procedimentos como funções são passados parametros para mandar um ou mais resultados para outras funções ou para a main, em função pode se tornar mais facil caso queira retornar apenas um resultado, então a função pode retornar apenas um... mas se for precisar de outros resultados de calculos, usa-se a passagem de parametros (por valor ou por referencia). Mas em C, não existe procedimentos... existem funções que retornam e funções que não retornam (void), mas ambas passam parametros, os de referencia utiliza-se ponteiros. Então... sim, algumas vezes é mais pratico e tudo mais, ESCREVER (PRINTF), nas funções... mas o aconselhado é apenas RETORNAR E PASSAR PARAMETROS DE ENTRADA (por valor) OU/E DE ENTRADA E SAIDA (por referencia), e usar a função em outro local (em outras funções ou na main), atribuir a alguma variavel e imprimir na main... e na maioria das vezes isso necessita passagens a mais de parametro, do que precisaria caso escrevesse na função, mas realmente escrever na função eu não acho errado... só disse q meu prof disse q é mais certo funções haverem apenas calculos, retorno (ou não no caso de C) e passagens de parametros... Se é mais certo não sei bem dizer, mas q treina MUITO mais a passagem de parametros, isso é certeza! Ainda mais quando se usa função dentro de função... depois procurar imprimir somente na main, com certeza encontrará mais dificuldade procurando escrever somente na main. Agora POG tem de muitos jeitos, mas isso não é comigo... conheço gente q é expert nisso, não sei como consegue complicar tanto o programa.
  16. void fibonacci (int n) { int a=1,b=1,i,x; printf("\n Na posicao 1 o valor = 1\n"); printf("\n Na posicao 2 o valor = 1\n"); for(i=3;i<=n;i++) { x=a+b; a=b; b=x; printf("\n na posicao %i o valor = %i\n",i, x); } } int main() { int n; printf("\nDigite ate que posição que ir na sequencia: "); scanf("%d",&n); fibonacci(n); system ("pause"); return 0; } Maaas, retornar o x agora não seria o correto, embora tenha funcionado. Pois você está escrevendo já o resultado dentro da função... Então creio que assim seria mais válido: a função não retornar, ser void, e apenas ser chamada la na main. Nesse caso e em muitos outros é mais fácil e prático escrever nas funções, porém meu prof dizia que não poderia fazer isso, na função fica só o calculo, na main imprimi tudo que tiver que imprimir, e isso tras algumas dificuldades, e isso também treina passagens de parâmetros.
  17. double fibonacci (int n) { int a=1,b=1,x,i; printf("\n Na posicao 1 o valor = 1\n"); printf("\n Na posicao 2 o valor = 1\n"); for(i=3;i<=n;i++) { x=a+b; a=b; b=x; printf("\n na posicao %i o valor = %i\n",i, x); } return x; } int main() { int x,n; printf("\nDigite ate que posição que ir na sequencia: "); scanf("%d",&n); x=fibonacci(n); system ("pause"); return 0; } Assim que deverá ser, pelo menos é uma resolução, já imprimi 1 e 1... E quanto ao for que começa de 1, i é o contador, porque estava declarado um contador? rs. Não que não use quando usar for (porque for já tem contador), mas no caso não sei porque você colocou, pra que quis usar. o contador começa do 1, no caso desse exercicio... então, na posição 1 do i, está o 1, e na posição 2 está o 1 também, os dois primeiros elementos que não eram precisos calcular, pois já eram dados. Por isso começa o for pela posição 3.
  18. isso aqui ficou meio estranho. tipo, não é mas facil setar 1 direto, porque duas variaveis valendo 1?? mas pelo menos funciona. mas ficou faltando tb fehcar a funcao (com }). o codigo original ta assim tb?? se tivesse acho q não ia nem compilar. É... era mais pratico setar 1 direto, mas eu não modifiquei o codigo, quem postou só queria a explicação, então só expliquei o codigo que ele mesmo postou. E quanto a fechar a função, é eu vi, pois compilei pra ver o que exatamente fazia, e editei e arrumei. E tem problema nenhum editar, eu até esperava que alguém fizesse isso, porque eu não estava sabendo como colocar como código, agora eu sei. Obrigada.
  19. double fibonacci (int n) //uma função que passa um parâmetro por valor, ou seja, apenas de entrada, é o // elemento que o usuário quer que seja mostrado da sequencia. { //declaração e inicialização das variaveis; int a=1,b=1,x //x é uma variavel auxiliar,i; if(n==1) x=a; //o primeiro elemento é 1! 'a' esta valendo 1, de acordo com sua inicialização. if(n==2) x=b; //e o segundo também é 1! 'b' esta valendo 1, de acordo com sua inicialização. /* repare que isso (acima) está fora do laço do for, logo não repetirá o calculo, pois não é preciso visto que os dois primeiros elementos é dado no problema (1º elemento=1 e 2º elemento=1), pois através deles é que é iniciado o calculo da sequencia, pois inicialmente, precisamos de dois elementos para serem somados para gerar o proximo termo. Isso é regra da sequencia de fibonacci. */ for(i=3;i<=n;i++) //para i de 3 (porque já é o terceiro elemento, o primeiro e o segundo você sabe quais são!, //até n (o elemento que deseja exibir). i++, contador incrementado. { x=a+b; //a sequencia de fibonacci é dada por: soma dos ultimos termos gerados, resulta no próximo. //então, some os termos. //agora é preciso atualizar os dois ultimos termos, pois eles não podem ficar pra sempre sendo 1 e 1. a=b; //o valor q esta em 'b', ainda precisamos dele, apenas trocamos ele de lugar pra ficar mais organizado. //ficou no lugar do 'a', pro valor contido em x ficar no lugar do b. b=x; //é preciso guardar o que foi gerado anteriormente (nesse calculo, na primeira passada seria o 2, soma de 1+1). Calculamos e guardamos no x, certo!?, então agora o b recebe o x. /* agora temos o novos a e b para serem somados e gerarem o próximo elemento. */ } return x; //esta função retorna o valor de cada elemento calculado. } int main() { int x,n; printf("\nDigite n-esimo termo: "); scanf("%d",&n); x=fibonacci(n); //chama a função. printf("\n\n%d\n",x); system ("pause"); return 0; } /* veja essa explicação: f1 = 1. f2 = 1. f3 = f1 + f2; f3 = 1+1 = 2. f4 = f2 + f3; f4 = 1+2 = 3. f5 = f3 + f4; f5 = 2+3 = 5. Fazendo o teste de mesa: n | i = n ? | a | b | x<-a+b | a<-b | b<-x | x=a+b | ----------------------------------------------------------------- 5 | i=3. Não | 1 | 1 | x=2 | a=1 | b=1 | x=2 | 5 | i=4. Não | 1 | 2 | x=3 | a=2 | b=3 | x=3 | 5 | i=5. Sim | 2 | 3 | x=5 | a=3 | b=5 | x=5 | */ SUGESTÃO: Tene fazer um programa para imprimir a sequencia onde o usuário enra com a quanidade que deseja exibir e enão, em vez de exibir somente o último termo, o S, exibe, no caso, N=5: 1, 1, 2, 3, 5. E antes de procurar na interne a solução, pense muito e tente resolver.
  20. AlineI

    Arquivo de registro

    Obrigada! Qualquer ajuda é muito bem vinda, e essa foi importante!
  21. AlineI

    Arquivo de registro

    Bom, tenho que colocar um programa já pronto, mas sem arquivo, em um arquivo... a professora de algoritmos deu ele sem arquivos pra fazer, fiz... e agora o prof de programação quer ele com arquivos, mas ele mal explicou e já mandou fazer esse... nem treinamos, só aprendemos a abrir 'malemal'... e tals, tenho a mínima idéia de como colocaria dentro do arquivo, se é registro por registro, ou como que é... O programa consiste em cadastro de livros, de usuarios, emprestimo de livro, devolução e exibição do extrato do usuário (codigos dos livros que ele tem emprestado); Alguma dica? Aqui está o código sem arquivos: #include <stdio.h> #include <stdlib.h> #include <string.h> /* LEMBRAR de inicializar todos campos do registro. todos livros.disponivel devem ser = 1, pois estao disponiveis. Todos livros do usuario, devem receber -1, pra dizer que estao vazios. */ typedef struct//usuarios { char nome[30]; //nome do usuario int codigo; //codigo usuario char endereco[40]; //endereço char dataNasc; //data de nascimento int telefone; //telefone char categoria[10]; //categoria /aluno ou professor/ int livros[3]; //3 livros por usuario; } usr; typedef usr usuario; usuario usuarios[30]; //cria um vetor de usuario typedef struct //livros { int codigo; //codigo livros char titulo[30]; char autor[30]; char assunto[30]; char editora[10]; int ano; int edicao; int disponivel; }liv; typedef liv livro; livro livros[100]; //cria um vetor de livros... void inicializa() { int i=0; for(i=0;i<50;i++) { usuarios[i].livros[0]=-1; usuarios[i].livros[1]=-1; usuarios[i].livros[2]=-1; } for(i=0;i<100;i++) { livros[i].disponivel=1;//de começo todos livros estao disponiveis! } } int buscaUsuario(usuario usuarios[],int numeroUsuarios,int codigoUsuario) //passa como parametro o vetor dos usuarios, o numero de usuarios cadastrados //e o codigo do usuario a ser procurado. { int i=0; for(i=0;i<numeroUsuarios;i++) { if(usuarios[i].codigo==codigoUsuario) return i; } return -1; //busca o usuario, se achar retorna o indice dele no vetor; //se não achar, retorna -1... } int cadastrarUsuarios(usuario usuarios[]) { printf("\n\n*** CADASTRO DE USUARIOS ***\n\n"); int numeroUsuarios=0; int i=0; printf("\nInforme o numero de usuarios a serem cadastrados: "); scanf("%d",&numeroUsuarios); for(i=0;i<numeroUsuarios;i++) { printf("\nNome: "); scanf("%s",&usuarios[i].nome); fflush(stdin); printf("\nCodigo: "); scanf("%d",&usuarios[i].codigo); fflush(stdin); printf("\nEndereco: "); scanf("%d",&usuarios[i].endereco); fflush(stdin); printf("\nData de Nascimento: "); scanf("%d",&usuarios[i].dataNasc); fflush(stdin); printf("\nTelefone: "); scanf("%d",&usuarios[i].telefone); fflush(stdin); printf("\nCategoria: "); scanf("%d",&usuarios[i].categoria); fflush(stdin); } } int locaLivro(livro livros[], int nLivros,int codigoLivro) { int i=0; for(i=0; i<nLivros;i++) { if(livros[i].codigo==codigoLivro ) { if(livros[i].disponivel==1)//não tava verificando a disponibilidade do livro, //sempre que alguém queria pegar, podia... { //se o livro existir, e se for disponivel retorna seu codigo.... livros[i].disponivel=0; return (livros[i].codigo); } else { printf("\nO Livro não esta disponivel!"); return -1;//senao retorna -1! } } } return -1; //Vai chamar pro usuario, ai atribui o resultado numa posicao do vetor do //usuario. } int devolve(livro livros[],int nLivros,int codigo) { int i=0; for(i=0;i<nLivros;i++) { if(livros[i].codigo==codigo) { livros[i].disponivel=1; return -1; } } return -1; } int cadastraLivro(livro livros[]) { printf("\n\n*** CADASTRO DE LIVROS ***\n\n"); int i=0; int numeroLivros; printf("Quantidade de livros: "); scanf("%d",&numeroLivros); for(i=0;i<numeroLivros;i++) { printf("\nTitulo: "); scanf("%s",&livros[i].titulo); fflush(stdin); printf("\nCodigo: "); scanf("%d",&livros[i].codigo); fflush(stdin); printf("\nAutor: "); scanf("%s",&livros[i].autor); fflush(stdin); printf("\nAssunto: "); scanf("%s",&livros[i].assunto); fflush(stdin); printf("\nEditora: "); scanf("%s",&livros[i].editora); fflush(stdin); printf("\nAno: "); scanf("%s",&livros[i].ano); fflush(stdin); printf("\nEdicao: "); scanf("%s",&livros[i].edicao); fflush(stdin); } return numeroLivros;//vai retornar a quantidade de livros que tem, //que ficara salva como variavel global para ser //acessada por outras funções. } void ConsultaLivro(livro livros[]) { int i=0; char tOUa[15]; //titulo ou autor; printf("\n\n*** CONSULTA DE LIVRO ***\n\n"); printf("\n\nInforme o titulo ou o autor do livro que deseja consultar: "); scanf("%s", &tOUa); fflush(stdin); if ((strcmp(tOUa,livros[i].titulo)== 0 ) || (strcmp(tOUa,livros[i].autor)== 0)) { printf("\nTitulo: %s", livros[i].titulo); printf("\nCodigo: %d", livros[i].codigo); printf("\nAssunto: %s", livros[i].assunto); printf("\nAutor: %s", livros[i].autor); printf("\nEditora: %s", livros[i].editora); printf("\nAno %d", livros[i].ano); printf("\nEdicao: %d", livros[i].edicao); } if (livros[i].disponivel == 1) { printf("\n\nEste livro esta disponivel\n\n"); } else if (livros[i].disponivel == 0) { printf("\n\nEste livro não esta disponivel\n\n"); } } void Extrato (livro livros[], usuario usuarios[], int numeroUsuarios) { printf("\n\n*** EXTRATO DO USUARIO ***\n\n"); int i=0; int codUsuario=0; printf("Informe seu codigo de usuario: "); scanf("%d", &codUsuario); int pos = buscaUsuario(usuarios, numeroUsuarios, codUsuario); if(usuarios[pos].livros[0]!=-1) printf("Livro 1 : %d", livros[i].codigo); if(usuarios[pos].livros[1]!=-1) printf("Livro 2 : %d", livros[i].codigo); if(usuarios[pos].livros[2]!=-1) printf("Livro 3 : %d\n\n", livros[i].codigo); if ((usuarios[pos].livros[0] == -1) && (usuarios[pos].livros[1] == -1) && (usuarios[pos].livros[2] == -1)) printf("Este usuario não tem livros em seu extrato/locados"); } int main() { printf("*ATENCAO: AO INICIAR O PROGRAMA, CADASTRE LIVRO(S) E USUARIO(S) PRIMEIRAMENTE*\n\n"); int numeroLivros=0; //inicializa com 0, senao na busca da pau! int opcao=0; int codigoUsuario=0; int codigoLivro=0; int numeroUsuarios=0; inicializa(); //zera os livros dos usuarios; do { printf("\n*** MENU ***\n\n"); printf("Opcoes:\n"); printf("\n1 - Cadastrar livros"); printf("\n2 - Cadastrar usuarios"); printf("\n3 - Consultar Livros"); printf("\n4 - Locar livro"); printf("\n5 - Devolver Livro"); printf("\n6 - Extrato Usuario"); printf("\n7 - Sair do programa\n\n"); printf("Informe a opcao: "); scanf("%d",&opcao); switch(opcao) { case 1: { numeroLivros=cadastraLivro(livros); break; } case 2: { numeroUsuarios=cadastrarUsuarios(usuarios); break; } case 3: { if(numeroLivros>0) { ConsultaLivro(livros); } else printf("\nNenhum livro no acervo!\n"); break; } case 4: { printf("\n\n*** EMPRESTIMO DE LIVROS ***\n\n"); printf("\nCodigo do usuario: "); scanf("%d",&codigoUsuario);//le o codigo do usuario que vai locar o livro... printf("\nCodigo do livro: "); scanf("%d",&codigoLivro); //se o codigo do usuario existe, [pos] guardara sua posicao no vetor; //procura a primeira posicao vazia! //lembrar de verificar se tem usuarios cadastrados e tals... int pos = buscaUsuario(usuarios,numeroUsuarios,codigoUsuario); if(usuarios[pos].livros[0]==-1) usuarios[pos].livros[0]=locaLivro(livros,numeroLivros,codigoLivro); printf("\nO Livro foi emprestado!\n\n"); else if(usuarios[pos].livros[1]==-1) usuarios[pos].livros[1]=locaLivro(livros,numeroLivros,codigoLivro); printf("\nO Livro foi emprestado!\n\n"); else if(usuarios[pos].livros[2]==-1) usuarios[pos].livros[2]=locaLivro(livros,numeroLivros,codigoLivro); printf("\nO Livro foi emprestado!\n\n"); else printf("\nNao foi possivel locar o livro\n"); break; } case 5: { printf("\n\n*** DEVOLUCAO DE LIVROS ***\n\n"); printf("\nCodigo do usuario: "); scanf("%d",&codigoUsuario); printf("\nCodigo do livro: "); scanf("%d",&codigoLivro); int pos = buscaUsuario(usuarios,numeroUsuarios,codigoUsuario); if(usuarios[pos].livros[0]==codigoLivro) usuarios[pos].livros[0]=devolve(livros,numeroLivros,codigoLivro); printf("\nO Livro foi devolvido!\n\n"); else if(usuarios[pos].livros[1]==codigoLivro) usuarios[pos].livros[1]=devolve(livros,numeroLivros,codigoLivro); printf("\nO Livro foi devolvido!\n\n"); else if(usuarios[pos].livros[2]==codigoLivro) usuarios[pos].livros[2]=devolve(livros,numeroLivros,codigoLivro); printf("\nO Livro foi devolvido!\n\n"); else printf("\nNao foi possivel entregar o livro"); break; } case 6: { Extrato(livros, usuarios, numeroUsuarios); break; } case 7: { exit(0);//chama uma funcao da stdlib.h, que sai do programa, passando como //parametro 0: uma antiga convenção para dizer que saiu por vontade da //programadora, e não por um erro do sistema. break; } default: { printf("\nEntre com uma opcao valida!\n"); break; } } }while(1);//vai repitir até escolher a opcao 7. }
×
×
  • Criar Novo...