fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. //STRUCTS
  6. struct Books{
  7. int id;
  8. char titulo[31];
  9. char categoria[16];
  10. int num_autores;
  11. char nome_autores[3][100];
  12. float exemplares_totais;
  13. float exemplares_disponiveis;
  14. };
  15. typedef struct Books Livros;
  16. //FIM-STRUCTS
  17.  
  18. //PROTOTIPOS
  19. void Registrar_Livros(int Livros_Registar, Livros Biblioteca[500]);
  20. void Operacao_Livros(int Numero_Operacoes, Livros Biblioteca[500], int Livros_Registrados);
  21. void Consulta_Livros(int Numero_Consultas, Livros Biblioteca[500], int Livros_Registrados);
  22. void Organizar_Alfabetico(char VetorMsmTitulo[500][31], int TamVetor);
  23. //FIM-PROTITIPOS
  24.  
  25. //FUNÇÕES
  26. void Registrar_Livros(int Livros_Registar, Livros Biblioteca[500]){
  27. int i, j;
  28. for(i = 0; i < Livros_Registar; i++){
  29. scanf("%i", &Biblioteca[i].id);
  30. scanf("%s", Biblioteca[i].titulo);
  31. scanf("%s", Biblioteca[i].categoria);
  32. scanf("%i", &Biblioteca[i].num_autores);
  33. for(j = 0; j<Biblioteca[i].num_autores; j++)
  34. scanf("%s", Biblioteca[i].nome_autores[j]);
  35. scanf("%f", &Biblioteca[i].exemplares_totais);
  36. Biblioteca[i].exemplares_disponiveis = Biblioteca[i].exemplares_totais;
  37. }
  38. }
  39. void Operacao_Livros(int Numero_Operacoes, Livros Biblioteca[500], int Livros_Registrados){
  40. char Operacao[20];
  41. int i2, j2;
  42. int Id_Ope;
  43. for(j2 = 0; j2 < Numero_Operacoes; j2++){
  44. scanf("%s", Operacao);
  45. scanf("%i", &Id_Ope);
  46. if(strcmp(Operacao, "EMPRESTAR") == 0){
  47. i2 = 0;
  48. while(i2 < Livros_Registrados){
  49. if(Biblioteca[i2].id == Id_Ope && Biblioteca[i2].exemplares_disponiveis != 0){
  50. Biblioteca[i2].exemplares_disponiveis = Biblioteca[i2].exemplares_disponiveis - 1;
  51. i2 = Livros_Registrados;
  52. }
  53. else
  54. i2++;
  55. }
  56. }
  57. else if(strcmp(Operacao, "DEVOLVER") == 0){
  58. i2 = 0;
  59. while(i2 < Livros_Registrados){
  60. if(Biblioteca[i2].id == Id_Ope && Biblioteca[i2].exemplares_disponiveis != Biblioteca[i2].exemplares_totais){
  61. Biblioteca[i2].exemplares_disponiveis = Biblioteca[i2].exemplares_disponiveis + 1;
  62. i2 = Livros_Registrados;
  63. }
  64. else
  65. i2++;
  66. }
  67. }
  68. }
  69. }
  70. void Consulta_Livros(int Numero_Consultas, Livros Biblioteca[500], int Livros_Registrados){
  71. int i3, i4, i5, i6, ContarTamVetorTitulos, flag, Id_Cons, flag2;
  72. float Porcentagem_Disp;
  73. char Tipo_Cons[50], Categoria_Cons[20], Autor_Cons[100];
  74. char VetorMsmTitulo[500][31], TodosAutores[300];
  75.  
  76. for(i3 = 0; i3<Numero_Consultas; i3++){
  77. scanf("%s", Tipo_Cons);
  78.  
  79. //AQUI SÃO OS TIPOS DE CONSULTAS
  80. if(strcmp(Tipo_Cons, "DISPONIVEL") == 0){//CONSULTA DISPONÍVEL
  81. ContarTamVetorTitulos = 0;
  82. scanf("%s", Categoria_Cons);
  83. for(i4 = 0; i4 < Livros_Registrados; i4++){
  84. if(strcmp(Biblioteca[i4].categoria, Categoria_Cons) == 0)
  85. ++ContarTamVetorTitulos;
  86. }
  87.  
  88. i6 = i4 = flag2 = 0;
  89. for(i4 = 0; i4 < Livros_Registrados; i4++){
  90. if(ContarTamVetorTitulos == 1 && strcmp(Biblioteca[i4].categoria, Categoria_Cons) == 0){
  91. printf("Categoria: %s\n- %s (%i): %.0f/%.0f exemplares", Categoria_Cons, Biblioteca[i4].titulo, Biblioteca[i4].id, Biblioteca[i4].exemplares_disponiveis, Biblioteca[i4].exemplares_totais);
  92. i4 = Livros_Registrados;
  93. flag2 = 1;
  94. }
  95. else if(strcmp(Biblioteca[i4].categoria, Categoria_Cons) == 0 && ContarTamVetorTitulos > 1){
  96. strcpy(VetorMsmTitulo[i6], Biblioteca[i4].titulo);
  97. i6++;
  98. }
  99. }
  100.  
  101. Organizar_Alfabetico(VetorMsmTitulo, ContarTamVetorTitulos);
  102. i6 = flag = i4 = 0;
  103. for(i4 = 0; i4 < Livros_Registrados; i4++){//ESTE FOR SÓ SERÁ ACESSADO SE VETOR_MSMS_TITULOS TIVER PREENCHIDO
  104. if(strcmp(Biblioteca[i4].titulo, VetorMsmTitulo[i6]) == 0 && flag == 0 && flag2 == 0){
  105. printf("Categoria: %s\n- %s (%i): %.0f/%.0f exemplares", Categoria_Cons, Biblioteca[i4].titulo, Biblioteca[i4].id, Biblioteca[i4].exemplares_disponiveis, Biblioteca[i4].exemplares_totais);
  106. i6++;
  107. flag = 1;
  108. i4 = -1;
  109. }
  110. else if(strcmp(Biblioteca[i4].titulo, VetorMsmTitulo[i6]) == 0 && flag > 0 && flag2 == 0){
  111. printf("\n- %s (%i): %.0f/%.0f exemplares", Biblioteca[i4].titulo, Biblioteca[i4].id, Biblioteca[i4].exemplares_disponiveis, Biblioteca[i4].exemplares_totais);
  112. i6++;
  113. i4 = -1;
  114. }
  115. }
  116. if(i3 < Numero_Consultas - 1)
  117. printf("\n\n");
  118. }
  119.  
  120. else if(strcmp(Tipo_Cons, "AUTOR") == 0){//CONSULTA AUTORES
  121. ContarTamVetorTitulos = 0;
  122. scanf("%s", Autor_Cons);
  123. for(i4 = 0; i4 < Livros_Registrados; i4++){
  124. for(i5 = 0; i5 < Biblioteca[i4].num_autores; i5++){
  125. if(strcmp(Biblioteca[i4].nome_autores[i5], Autor_Cons) == 0)
  126. ++ContarTamVetorTitulos;
  127. }
  128. }
  129.  
  130. i6 = i4 = flag2 = 0;
  131. for(i4 = 0; i4 < Livros_Registrados; i4++){
  132. for (i5 = 0; i5 < Biblioteca[i4].num_autores; i5++){
  133. if (ContarTamVetorTitulos == 1 && strcmp(Biblioteca[i4].nome_autores[i5], Autor_Cons) == 0){
  134. printf("Autor: %s\n- %s (%s): %.0f/%.0f exemplares", Autor_Cons, Biblioteca[i4].titulo, Biblioteca[i4].categoria, Biblioteca[i4].exemplares_disponiveis, Biblioteca[i4].exemplares_totais);
  135. i6++;
  136. flag2 = 1;
  137. }
  138. else if (strcmp(Biblioteca[i4].nome_autores[i5], Autor_Cons) == 0 && ContarTamVetorTitulos > 1){
  139. strcpy(VetorMsmTitulo[i6], Biblioteca[i4].titulo);
  140. i6++;
  141. }
  142. }
  143. }
  144.  
  145. Organizar_Alfabetico(VetorMsmTitulo, ContarTamVetorTitulos);
  146. i6 = flag = i4 = 0;
  147. for(i4 = 0; i4 < Livros_Registrados; i4++){//ESTE FOR SÓ SERÁ ACESSADO SE VETOR_MSMS_TITULOS TIVER PREENCHIDO
  148. if(strcmp(Biblioteca[i4].titulo, VetorMsmTitulo[i6]) == 0 && flag == 0 && flag2 == 0){
  149. printf("Autor: %s\n- %s (%s): %.0f/%.0f exemplares", Autor_Cons, Biblioteca[i4].titulo, Biblioteca[i4].categoria, Biblioteca[i4].exemplares_disponiveis, Biblioteca[i4].exemplares_totais);
  150. i6++;
  151. flag = 1;
  152. i4 = -1;
  153. }
  154. else if(strcmp(Biblioteca[i4].titulo, VetorMsmTitulo[i6]) == 0 && flag > 0 && flag2 == 0){
  155. printf("\n- %s (%s): %.0f/%.0f exemplares", Biblioteca[i4].titulo, Biblioteca[i4].categoria, Biblioteca[i4].exemplares_disponiveis, Biblioteca[i4].exemplares_totais);
  156. i6++;
  157. i4 = -1;
  158. }
  159. }
  160. if(i3 < Numero_Consultas - 1)
  161. printf("\n\n");
  162. }
  163.  
  164. else if(strcmp(Tipo_Cons, "STATUS") == 0){
  165. scanf("%i", &Id_Cons);
  166. for(i4 = 0; i4 < Livros_Registrados; i4++){
  167. if(Biblioteca[i4].id == Id_Cons && Biblioteca[i4].num_autores == 1){
  168. Porcentagem_Disp = (Biblioteca[i4].exemplares_disponiveis / Biblioteca[i4].exemplares_totais) * 100;
  169. printf("Livro: %s\nCategoria: %s\nAutores: %s\nExemplares: %.0f/%.0f (%.0f%% disponibilidade)", Biblioteca[i4].titulo, Biblioteca[i4].categoria, Biblioteca[i4].nome_autores, Biblioteca[i4].exemplares_disponiveis, Biblioteca[i4].exemplares_totais, Porcentagem_Disp);
  170. }
  171. else if(Biblioteca[i4].id == Id_Cons && Biblioteca[i4].num_autores > 1){
  172. Porcentagem_Disp = (Biblioteca[i4].exemplares_disponiveis / Biblioteca[i4].exemplares_totais) * 100;
  173. for(i5 = 0; i5 < Biblioteca[i4].num_autores; i5++){
  174. if(i5 < Biblioteca[i4].num_autores - 1){
  175. strcpy(TodosAutores, Biblioteca[i4].nome_autores[i5]);
  176. strcat(TodosAutores, ", ");
  177. }
  178. else{
  179. strcat(TodosAutores, Biblioteca[i4].nome_autores[i5]);
  180. }
  181. }
  182. printf("Livro: %s\nCategoria: %s\nAutores: %s\nExemplares: %.0f/%.0f (%.0f%% disponibilidade)", Biblioteca[i4].titulo, Biblioteca[i4].categoria, TodosAutores, Biblioteca[i4].exemplares_disponiveis, Biblioteca[i4].exemplares_totais, Porcentagem_Disp);
  183. }
  184. }
  185. if(i3 < Numero_Consultas - 1)
  186. printf("\n\n");
  187. }
  188. }
  189. }
  190.  
  191. void Organizar_Alfabetico(char VetorMsmTitulo[500][31], int TamVetor){
  192. char Aux_Titulo[31];
  193. int i, i2;
  194.  
  195. for(i = 0; i < TamVetor; i++){
  196. for(i2 = 0; i2 < TamVetor-1; i2++){
  197. if(strcmp(VetorMsmTitulo[i2], VetorMsmTitulo[i2+1]) > 0){
  198. strcpy(Aux_Titulo, VetorMsmTitulo[i2]);
  199. strcpy(VetorMsmTitulo[i2], VetorMsmTitulo[i2+1]);
  200. strcpy(VetorMsmTitulo[i2+1], Aux_Titulo);
  201. }
  202. }
  203. }
  204. }
  205. //FIM-FUNÇÕES
  206.  
  207. int main(){
  208. //VARS
  209. int N, M, Q; //1 ≤ N ≤ 500, 1 ≤ M ≤ 1000, 1 ≤ Q ≤ 100
  210. Livros Biblioteca[500];
  211.  
  212. //COD
  213. scanf("%i", &N);
  214. scanf("%i", &M);
  215. scanf("%i", &Q);
  216. Registrar_Livros(N, Biblioteca);
  217. Operacao_Livros(M, Biblioteca, N);
  218. Consulta_Livros(Q, Biblioteca, N);
  219.  
  220. return 0;
  221. }
Success #stdin #stdout 0s 5312KB
stdin
4 6 4
1 IntroducaoProgramacao Computacao 1 Deitel 4
2 CalculoDiferencial Matematica 2 Stewart Larson 2
3 FisicaClassica 1 Halliday 3
4 EstruturaDados Computacao 2 Cormen Rivest 6
EMPRESTAR 1
EMPRESTAR 2
EMPRESTAR 2
EMPRESTAR 4
DEVOLVER 1
EMPRESTAR 3
DISPONIVEL Computacao
DISPONIVEL Matematica
AUTOR Stewart
STATUS 4
stdout
Categoria: Computacao
- IntroducaoProgramacao (1): 4/4 exemplares

Categoria: Matematica
- CalculoDiferencial (2): 0/2 exemplares