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

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

Autor: Stewart
- CalculoDiferencial (Matematica): 0/2 exemplares

Livro: EstruturaDados
Categoria: Computacao
Autores: Cormen, Rivest
Exemplares: 5/6 (83% disponibilidade)