int main(){ int op, count = 0, tam; int encontrado = 0, rrnDeletar, i, j; int op2, enc = 0; char dadosArq[192], aux[2], str[192]; char chBusca[39], rgStr[192]; char chave[8], nomeAzul[39], nomeVermelho[39]; char data[10], duracao[5]; char nomeWinner[39], apelidoMVP[39]; char placarAzul[2], placarVermelho[2]; FILE *matches, *iprim, *isec, *iwinner, *imvp; FILE *auxFile; Registro vetorPrim[TOT], vetorWinner[TOT], vetorMVP[TOT]; matches = fopen("matches.dat", "r+"); if(matches == NULL){ matches = fopen("matches.dat", "w+"); } iprim = fopen("iprimary.idx", "r+"); if(iprim == NULL){ iprim = fopen("iprimary.idx", "w+"); } iwinner = fopen("iwinner.idx", "r+"); if(iwinner == NULL){ iwinner = fopen("iwinner.idx", "w+"); } imvp = fopen("imvp.idx", "r+"); if(imvp == NULL){ imvp = fopen("imvp.idx", "w+"); } fseek(matches, 0L, SEEK_END); int fileLen = ftell(matches); fseek(matches, 0L, SEEK_SET); //Se ja houver registros no matches.dat, preenche os vetores de indice com as chaves if(fileLen != 0){ int t; char aux1[39], aux2[39], aux3[39]; char aux4[39], aux5[39], aux6[39]; fseek(matches, 0L, SEEK_END); t = ftell(matches); fseek(matches, 0L, SEEK_SET); for(i = 0; i < t; i += 192){ fseek(matches, i, SEEK_SET); for(j = 0; j < 192; j++){ rgStr[j] = fgetc(matches); } rgStr[192] = '\0'; char auxiliar[192], *ch, *c1, *w, *m; int x = 0; ch = malloc(sizeof(char) * 39 + 1); if(ch == NULL) exit(1); c1 = malloc(sizeof(char) * 39 + 1); if(c1 == NULL) exit(1); w = malloc(sizeof(char) * 39 + 1); if(w == NULL) exit(1); m = malloc(sizeof(char) * 39 + 1); if(m == NULL) exit(1); while(rgStr[x] != '#'){ auxiliar[x] = rgStr[x]; x++; } auxiliar[x] = '\0'; ch = strtok(auxiliar, "@"); c1 = strtok(NULL, "@"); c1 = strtok(NULL, "@"); c1 = strtok(NULL, "@"); c1 = strtok(NULL, "@"); w = strtok(NULL, "@"); c1 = strtok(NULL, "@"); c1 = strtok(NULL, "@"); m = strtok(NULL, "@"); int k; for(k = 0; k < strlen(ch); k++) vetorPrim[count].chave[k] = ch[k]; vetorPrim[count].rrn = i; for(k = 0; k < strlen(ch); k++) vetorWinner[count].chave[k] = ch[k]; for(k = 0; k < strlen(w); k++) vetorWinner[count].winner[k] = w[k]; for(k = 0; k < strlen(ch); k++) vetorMVP[count].chave[k] = ch[k]; for(k = 0; k < strlen(m); k++) vetorMVP[count].mvp[k] = m[k]; vetorPrim[count].rrn = i; count++; } fseek(iprim, 0L, SEEK_SET); //Se os indices ja existirem if(getTamanhoArq(iprim) != 0){ //Se nao estiverem consistentes com o arquivo de dados if(fgetc(iprim) == '0'){ remove("iprimary.idx"); fclose(iprim); iprim = fopen("iprimary.idx", "r+"); if(iprim == NULL) iprim = fopen("iprimary.idx", "w+"); fputs("1\n", iprim); int i; for(i = 0; i < count; i++){ int t = getTamanhoArq(iprim); fseek(iprim, t, SEEK_SET); fprintf(iprim, "%s %d lol\n", vetorPrim[i].chave, vetorPrim[i].rrn); } } } }else printf("Arquivo de dados vazio!\n"); fseek(matches, 0L, SEEK_SET); fclose(matches); fclose(iprim); fclose(iwinner); fclose(imvp); while(1){ printMenu(); scanf("%d", &op); getchar(); switch(op){ //Inserir novo registro case 1: matches = fopen("matches.dat", "r+"); if(matches == NULL){ matches = fopen("matches.dat", "w+"); } scanf("%[^\n]s", nomeAzul); getchar(); scanf("%[^\n]s", nomeVermelho); getchar(); scanf("%[^\n]s", data); getchar(); //Verificar data while(verificaData(data) != 1){ printf("Campo invalido ! Tente novamente: "); scanf("%[^\n]s", data); getchar(); } scanf("%[^\n]s", duracao); getchar(); //Verificar duracao while(verificaDuracao(duracao) != 1){ printf("Campo invalido ! Tente novamente: "); scanf("%[^\n]s", duracao); getchar(); } scanf("%[^\n]s", nomeWinner); getchar(); scanf("%[^\n]s", placarAzul); getchar(); //Verificar placar azul while(verificaPlacar(placarAzul) != 1){ printf("Campo invalido ! Tente novamente: "); scanf("%[^\n]s", placarAzul); getchar(); } scanf("%[^\n]s", placarVermelho); getchar(); //Verificar placar vermelho while(verificaPlacar(placarVermelho) != 1){ printf("Campo invalido ! Tente novamente: "); scanf("%[^\n]s", placarVermelho); getchar(); } //Verificar validade do vencedor while(verificaVencedor(nomeAzul, nomeVermelho, nomeWinner, placarAzul, placarVermelho) != 1){ printf("Campo invalido ! Tente novamente: "); scanf("%[^\n]s", nomeWinner); getchar(); } scanf("%[^\n]s", apelidoMVP); getchar(); //Gerar a chave primaria chave[0] = toupper(nomeAzul[0]); chave[1] = toupper(nomeVermelho[0]); chave[2] = toupper(apelidoMVP[0]); chave[3] = toupper(apelidoMVP[1]); chave[4] = data[0]; chave[5] = data[1]; chave[6] = data[3]; chave[7] = data[4]; chave[8] = '\0'; if(chaveJaExiste(vetorPrim, chave, count) == 1) printf("ERRO: Já existe um registro com a chave primária %s.\n", chave); else{ //Inserir os valores no arquivo matches.dat insereArq(matches, nomeAzul, nomeVermelho, data, duracao, nomeWinner, placarAzul, placarVermelho, apelidoMVP, chave); //Passar a chave e o RRN da partida pro vetor primario strcpy(vetorPrim[count].chave, chave); vetorPrim[count].rrn = RRN; //Passando o nome do vencedor e a chave primaria para o vetor de vencedores strcpy(vetorWinner[count].winner, nomeWinner); strcpy(vetorWinner[count].chave, chave); //Passando o apelido do MVP e a chave primaria para o vetor dos MVP's strcpy(vetorMVP[count].mvp, nomeWinner); strcpy(vetorMVP[count].chave, chave); //Passa a chave e o RRN para o indice primario //Em seguida, escrevemos os valores corretos no indice primario fprintf(iprim, "%s %d\n", vetorPrim[count].chave, vetorPrim[count].rrn); //Passando para os indices secundarios //Indice do nome do vencedor fprintf(iwinner, "%s %s\n", vetorWinner[count].winner, vetorWinner[count].chave); //Indice do MVP fprintf(imvp, "%s %s\n", vetorMVP[count].mvp, vetorMVP[count].chave); RRN += 192; count++; } fclose(matches); break; //Remover registro case 2: //int encontrado = 0, rrnDeletar, i; matches = fopen("matches.dat", "r+"); if(matches == NULL){ matches = fopen("matches.dat", "w+"); } scanf("%[^\n]s", chBusca); getchar(); for(i = 0; i < count; i++){ if(strcmp(vetorPrim[i].chave, chBusca) == 0){ encontrado = 1; rrnDeletar = vetorPrim[i].rrn; //vetorPrim[i].rrn = -1; vetorPrim[i].chave[0] = '*'; vetorPrim[i].chave[1] = '|'; printf("rrn delete = %d\n", rrnDeletar); fseek(matches, rrnDeletar, SEEK_SET); fputc('*', matches); fputc('|', matches); vetorPrim[i].rrn = -1; } } if(encontrado == 0) printf("Registro nao encontrado!\n"); fclose(matches); break; //Alterar registro case 3: matches = fopen("matches.dat", "r+"); if(matches == NULL){ matches = fopen("matches.dat", "w+"); } scanf("%[^\n]s", chBusca); getchar(); int enc = 0, rrnBusca, contador = 0; char novaDur[5]; for(i = 0; i < count; i++){ if(strcmp(vetorPrim[i].chave, chBusca) == 0){ enc = 1; rrnBusca = vetorPrim[i].rrn; break; } } //Se o registro for encontrado no arquivo de dados if(enc == 1){ scanf("%[^\n]s", novaDur); getchar(); while(verificaDuracao(novaDur) != 1){ printf("Campo invalido ! Tente novamente: "); scanf("%[^\n]s", novaDur); getchar(); } fseek(matches, rrnBusca, SEEK_SET); //Conta o numero de @'s ate chegar no campo de duracao da partida while(contador != 4){ char c = fgetc(matches); if(c == '@') contador++; } //Insere os novos valores da duracao fputc(novaDur[0], matches); fputc(novaDur[1], matches); fputc(novaDur[2], matches); fputc(novaDur[3], matches); fputc(novaDur[4], matches); }else printf("Registro nao encontrado!\n"); fclose(matches); break; //Busca registro case 4: matches = fopen("matches.dat", "r+"); if(matches == NULL){ matches = fopen("matches.dat", "w+"); } printf("1. Busca por Codigo\n2. Busca por Nome da Equipe Vencedora\n3. Busca por Apelido do MVP\n"); scanf("%d", &op2); getchar(); if(op2 == 1){ int rrnBusca, j; enc = 0; scanf("%[^\n]s", chBusca); getchar(); for(i = 0; i < count; i++){ if(strcmp(vetorPrim[i].chave, chBusca) == 0){ enc = 1; rrnBusca = vetorPrim[i].rrn; break; } } if(enc == 1){ //Se o arquivo de dados nao esta vazio if(getTamanhoArq(matches) != 0){ fseek(matches, rrnBusca, SEEK_SET); for(j = 0; j < 191; j++){ dadosArq[j] = fgetc(matches); } dadosArq[192] = '\0'; //printf("string louca: %s\n", dadosArq); int x = 0; char a[192]; while(dadosArq[x] != '#'){ a[x] = dadosArq[x]; x++; } a[x] = '\0'; printDados(a); } }else printf("Registro nao encontrado!\n"); fseek(matches, 0L, SEEK_SET); }else if(op2 == 2){ int j, rrnBusca, vai = 0; char ch[8]; enc = 0; scanf("%[^\n]s", chBusca); getchar(); for(i = 0; i < count; i++){ if(strcmp(vetorWinner[i].winner, chBusca) == 0){ enc = 1; strcpy(ch, vetorWinner[i].chave); for(j = 0; j < count; j++){ if((strcmp(vetorPrim[j].chave, ch)) == 0){ vai = 1; rrnBusca = vetorPrim[j].rrn; } fseek(matches, 0L, SEEK_END); fileLen = ftell(matches); fseek(matches, 0L, SEEK_SET); if(vai == 1){ if(fileLen != 0){ fseek(matches, rrnBusca, SEEK_SET); for(j = 0; j < 191; j++){ dadosArq[j] = fgetc(matches); } dadosArq[192] = '\0'; int x = 0; char a[192]; while(dadosArq[x] != '#'){ a[x] = dadosArq[x]; x++; } a[x] = '\0'; printDados(a); } } vai = 0; } } } if(enc == 0) printf("Registro nao encontrado!\n"); }else if(op2 == 3){ int j, rrnBusca, vai = 0; char ch[8]; enc = 0; scanf("%[^\n]s", chBusca); getchar(); for(i = 0; i < count; i++){ if(strcmp(vetorMVP[i].mvp, chBusca) == 0){ enc = 1; vetorMVP[i].chave[8] = '\0'; strcpy(ch, vetorMVP[i].chave); for(j = 0; j < count; j++){ if((strcmp(vetorPrim[j].chave, ch)) == 0){ vai = 1; rrnBusca = vetorPrim[j].rrn; } fseek(matches, 0L, SEEK_END); fileLen = ftell(matches); fseek(matches, 0L, SEEK_SET); if(vai == 1){ if(fileLen != 0){ fseek(matches, rrnBusca, SEEK_SET); for(j = 0; j < 191; j++){ dadosArq[j] = fgetc(matches); } dadosArq[192] = '\0'; int x = 0; char a[192]; while(dadosArq[x] != '#'){ a[x] = dadosArq[x]; x++; } a[x] = '\0'; printDados(a); } } vai = 0; } } } if(enc == 0) printf("Registro nao encontrado!\n"); }else printf("Opcao invalida!\n"); fclose(matches); break; //Lista registros case 5: matches = fopen("matches.dat", "r+"); if(matches == NULL){ matches = fopen("matches.dat", "w+"); } if(getTamanhoArq(matches) == 0) printf("Arquivo vazio!\n"); else{ printf("1. Listagem por codigo\n2. Listagem por nome da equipe vencedora\n3. Listagem por apelido do MVP\n"); scanf("%d", &op2); Registro *vAux; vAux = malloc(sizeof(Registro) * count); if(vAux == NULL) exit(1); //Busca pela chave primaria if(op2 == 1){ int rrnBusca, enc = 0, j; char aux[192], dados[192]; for(i = 0; i < count; i++) vAux[i] = vetorPrim[i]; ordenaPorChave(vAux, count); for(i = 0; i < count; i++){ if(vAux[i].rrn != -1){ rrnBusca = vAux[i].rrn; fseek(matches, rrnBusca, SEEK_SET); for(j = 0; j < 192; j++) dados[j] = fgetc(matches); j = 0; while(dados[j] != '#'){ aux[j] = dados[j]; j++; } aux[j] = '\0'; printDados(aux); } } fseek(matches, 0L, SEEK_SET); //Busca pelo nome da equipe vencedora }else if(op2 == 2){ char chav[8], aux[192], dados[192], c; int r, x, j; for(i = 0; i < count; i++) vAux[i] = vetorWinner[i]; ordenaPorVenc(vAux, count); for(i = 0; i < count; i++) printf("nome win = %s\n", vAux[i].winner); printf("\n"); for(i = 0; i < count; i++){ strcpy(chav, vAux[i].chave); for(j = 0; j < count; j++){ if(strcmp(chav, vetorPrim[j].chave) == 0) r = vetorPrim[j].rrn; if(r != -1){ fseek(matches, r, SEEK_SET); for(x = 0; x < 192; x++){ dados[x] = fgetc(matches); } x = 0; while(dados[x] != '#'){ aux[x] = dados[x]; x++; } aux[x] = '\0'; } } printDados(aux); } fseek(matches, 0L, SEEK_SET); }else if(op2 == 3){ char chav[8], aux[192], dados[192], c; int r, x, j; for(i = 0; i < count; i++) vAux[i] = vetorMVP[i]; ordenaPorMVP(vAux, count); for(i = 0; i < count; i++){ vAux[i].chave[8] = '\0'; strcpy(chav, vAux[i].chave); for(j = 0; j < count; j++){ if(strcmp(chav, vetorPrim[j].chave) == 0) r = vetorPrim[j].rrn; if(r != -1){ fseek(matches, r, SEEK_SET); for(x = 0; x < 192; x++){ dados[x] = fgetc(matches); } x = 0; while(dados[x] != '#'){ aux[x] = dados[x]; x++; } aux[x] = '\0'; } } printDados(aux); } fseek(matches, 0L, SEEK_SET); }else printf("Opcao invalida!\n"); fseek(matches, 0L, SEEK_SET); } /*matches = fopen("matches.dat", "r+"); if(matches == NULL){ matches = fopen("matches.dat", "w+"); }*/ fclose(matches); break; //Libera memoria case 6: matches = fopen("matches.dat", "r+"); if(matches == NULL){ matches = fopen("matches.dat", "w+"); } auxFile = fopen("auxfile.dat", "a+"); //Verifica quem esta marcado para remocao (*|) e finaliza a op fseek(matches, 0L, SEEK_END); tam = ftell(matches); fseek(matches, 0L, SEEK_SET); for(i = 0; i < tam; i += 192){ int cont = 0; char c; fseek(matches, i, SEEK_SET); c = fgetc(matches); if(c == '*') cont++; c = fgetc(matches); if(c == '|') cont++; fseek(matches, i, SEEK_SET); if(cont != 2){ char dadosAux[192]; int j; for(j = 0; j < 192; j++) dadosAux[j] = fgetc(matches); dadosAux[192] = '\0'; j = 0; fputs(dadosAux, auxFile); fseek(auxFile, (i * 192), SEEK_SET); } } fclose(matches); remove("matches.dat"); matches = fopen("matches.dat", "r+"); if(matches == NULL) matches = fopen("matches.dat", "w+"); for(i = 0; i < (getTamanhoArq(auxFile) / 192); i++){ fseek(auxFile, (i * 192), SEEK_SET); int j; for(j = 0; j < 192; j++) str[j] = fgetc(auxFile); str[192] = '\0'; fseek(matches, (i * 192), SEEK_SET); fputs(str, matches); } fclose(auxFile); remove("auxfile.dat"); fclose(matches); break; //Finaliza operacao case 7: remove("iprimary.idx"); remove("iwinner.idx"); remove("imvp.idx"); iprim = fopen("iprimary.idx", "r+"); if(iprim == NULL){ iprim = fopen("iprimary.idx", "w+"); } iwinner = fopen("iwinner.idx", "r+"); if(iwinner == NULL){ iwinner = fopen("iwinner.idx", "w+"); } imvp = fopen("imvp.idx", "r+"); if(imvp == NULL){ imvp = fopen("imvp.idx", "w+"); } //Atualizando os indices no disco atualizaPrim(vetorPrim, iprim, count); atualizaWinner(vetorWinner, iwinner, count); atualizaMVP(vetorMVP, imvp, count); fclose(iprim); fclose(iwinner); fclose(imvp); return 0; default: break; } } return 0; }
//função main void main (){ do{ system ("cls"); printf ("\t\tJOGO DA FORCA"); char nome[20], palavra[27]; pegaNomePalavra (nome, palavra); //função que pede o nome e a palavra int tamanhoPalavra = strlen (palavra); //conta quantos caracteres tem na palavra int tentativaAtual = 0; //guarda a quantidade de tentativas que ja entraram char tentativas [50]; int erros = 0; int i; int vencedor = 0; //se ainda é ou não vencedor while (erros <= 6){ system ("cls"); printf ("\t\tJOGO DA FORCA"); printf ("\n\n%s, adivinhe a palavra: \n\n\n", nome); //fulano, adivinhe a palavra int i; for (i = 0; i < tamanhoPalavra; i++){ char letraAtual = palavra[i]; //guarda a letra atual na posição da palavra int e = existe(letraAtual, tentativas, tentativaAtual); //"e" recebe o resultado da execução da função existe, passando a letraAtual para procurar no array(tentativas) até a posição tentativa atual! if (e == 1){ //verifica se é verdadeiro ou falso, se 1(V) printa a letra. Senão se 0(F) printa somente o anderline. printf ("%c ", palavra[i]); }else{ printf ("_ "); } } printf ("\n\n"); printf ("Tentativas: "); for (i = 0; i < tentativaAtual; i++){ printf ("%c ", tentativas[i]); //imprime na tela todas as letras(tentativas) que ja foram tecladas até a ultima(Atual) } printf ("\n"); desenhaForca (erros); //função que desenha a forca!!!! if (erros >= 6 || vencedor == 1){ //para ter somente 6 erros, e não pedir a sétima tentativa. encerra o while quando for ganhador ou acabar as tentativas =( break; } printf ("\n\nTecle uma tentativa: "); char tent = getch(); //le do teclado e guarda dentro de tent! int e = existe (tent, palavra, tamanhoPalavra); //verifica se a tecla digitada existe na palavra tentativas[tentativaAtual] = tent; //joga a letra digitada dentro da coleçao de tentativas na posição de tentativaAtual!! tentativaAtual++; //incrementa if (e == 0){ //se não existe a letra, incrementa o erro!! erros++; }else{ //senão, vamos verificar se a pessoa ja venceu vencedor = verificaVencedor(tamanhoPalavra, palavra, tentativas, tentativaAtual); //criei uma variavel que recebe a execução de verificaVencedor :D } } printf ("\nFIM do Jogo!"); //ahhh :( if (vencedor == 1){ printf ("\n\nParab\202ns!! Voce Venceu!!!"); //Gênio!!!! }else{ printf ("\nVoce Perdeu =( !!!"); } printf ("\n\nPalavra: %s\n", palavra); //printa a palavra do jogo printf ("Acertos: "); for (i = 0; i < tamanhoPalavra; i++){ int e = existe (palavra[i], tentativas, tentativaAtual); if (e == 1){ //se ele acertou a letra, aparece S em baixo =D printf ("S"); }else{ //senão, aparace N =( printf ("N"); } } }while(jogarNovamente() == 'S'); // recebe o resultado de jogarNovamente e compara. Se S, repete do inicio. Se N sai do 'do while' :) printf ("\n\n\tTchau tchau, obrigada por jogar =D"); }