Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <string.h>
- #define archMonos "monotributistas.bin"
- typedef struct {
- int dni;
- char nombreYapellido[30];
- char categoria; /// a,b,c,d,etc...
- float recaudacion;
- } monotributista;
- /// PROTOTIPADO
- int cargar_monotributistas (monotributista m[], int dimension);
- void mostrar_array_monotributistas (monotributista m[], int cant);
- void ordenacion_por_seleccion (monotributista m[], int cant);
- int encontrar_menor_pos (monotributista m[], int cant, int pos);
- void array_to_archivo (monotributista m[], int cant);
- void mostrar_archivo ();
- int cantidad_registros ();
- float porcentaje_categoria (char categoria);
- void mostrar_registro (int reg);
- /// FIN PROTOTIPADO
- int main() {
- monotributista monos[30];
- int cant_monos = cargar_monotributistas (monos, 30);
- system("pause");
- system("cls");
- mostrar_array_monotributistas(monos, cant_monos);
- system("pause");
- system("cls");
- ordenacion_por_seleccion (monos, cant_monos);
- mostrar_array_monotributistas(monos, cant_monos);
- system("pause");
- system("cls");
- array_to_archivo(monos, cant_monos);
- mostrar_archivo();
- system("pause");
- system("cls");
- int cant_reg=cantidad_registros();
- printf("La cantidad de registros en el archivo es de: %d\n", cant_reg);
- system("pause");
- system("cls");
- char cat;
- printf("De que categoria quiere conocer el pocentaje de monotributistas? ");
- fflush(stdin);
- scanf("%c", &cat);
- float porcent= porcentaje_categoria (cat);
- printf("\nEl porcentaje que supone esa categoria es de %.2f%% del total.\n", porcent);
- system("pause");
- system("cls");
- int reg;
- printf("Que registro desea ver? ");
- scanf("%d", ®);
- mostrar_registro (reg);
- return 0;
- }
- /// carga el array de monotributistas
- int cargar_monotributistas (monotributista m[], int dimension) {
- int i=0;
- int control='s';
- while (i<dimension && control=='s'){
- puts("\n|| CARGAR MONOTRIBUTISTA ||");
- printf("Ingrese nombre y apellido: ");
- fflush(stdin);
- gets(&m[i].nombreYapellido);
- printf("Ingrese su DNI: ");
- scanf("%d", &m[i].dni);
- printf("Ingrese su categoria: ");
- fflush(stdin);
- scanf("%c", &m[i].categoria);
- printf("Ingrese su recaudadion: ");
- scanf("%f", &m[i].recaudacion);
- i++;
- printf("\nDesea cargar otro registro? (S/N)\n");
- control=getch();
- }
- return i;
- }
- /// muestra el array de monotributistas
- void mostrar_array_monotributistas (monotributista m[], int cant) {
- int i=0;
- while (i<cant) {
- puts("\n|| MONOTRIBUTISTAS ||");
- printf("Nombre y apellido: %s\n", m[i].nombreYapellido);
- printf(" DNI: %d\n", m[i].dni);
- printf(" Categoria: %c\n", m[i].categoria);
- printf(" Recaudacion: %f\n", m[i].recaudacion);
- i++;
- }
- }
- /// funcion auxiliar para la ordenacion
- int encontrar_menor_pos (monotributista m[], int cant, int pos) {
- int i=pos+1;
- int menorPos=pos;
- int menorDni=m[pos].dni;
- while (i<cant){
- if (menorDni>m[i].dni) {
- menorDni=m[i].dni;
- menorPos=i;
- }
- i++;
- }
- return menorPos;
- }
- /// ordena los elementos del arreglo por DNI
- void ordenacion_por_seleccion (monotributista m[], int cant) {
- int i=0;
- int menor;
- monotributista aux;
- while (i<cant) {
- menor=encontrar_menor_pos(m, cant, i);
- aux=m[menor];
- m[menor]=m[i];
- m[i]=aux;
- i++;
- }
- }
- /// pasa del arreglo al archivo los monotributistas con una recaudacion de mas de 25000
- void array_to_archivo (monotributista m[], int cant) {
- int i=0;
- monotributista aux;
- FILE *archi=fopen(archMonos, "ab");
- if (archi!=NULL) {
- while (i<cant) {
- aux=m[i];
- if (aux.recaudacion>=25000) {
- fwrite(&aux, sizeof(monotributista),1,archi);
- }
- i++;
- }
- fclose(archi);
- } else {
- printf("El archivo no pudo ser abierto.");
- }
- }
- /// muestra el archivo cargado en la func anterior
- void mostrar_archivo () {
- FILE *archi=fopen(archMonos, "rb");
- monotributista m;
- if (archi!=NULL) {
- puts("\n|| MONOTRIBUTISTAS ||");
- while (fread(&m, sizeof(monotributista),1,archi)>0) {
- printf("Nombre y apellido: %s\n", m.nombreYapellido);
- printf(" DNI: %d\n", m.dni);
- printf(" Categoria: %c\n", m.categoria);
- printf(" Recaudacion: %f\n\n", m.recaudacion);
- }
- fclose(archi);
- } else {
- printf("\nEl archivo no se pudo abrir.");
- }
- }
- /// devuelve la cant de registros ingresados al archivo
- int cantidad_registros () {
- int regs=0;
- FILE *archi=fopen(archMonos, "rb");
- if (archi!=NULL) {
- fseek(archi, 0, SEEK_END);
- regs=ftell(archi)/sizeof(monotributista);
- } else {
- printf("El archivo no se pudo abrir.\n");
- }
- return regs;
- }
- /// devuelve el porcentaje que significa una categoria sobre el total
- float porcentaje_categoria (char categoria) {
- int total_monos=cantidad_registros();
- int total_categoria=0;
- float porcent;
- monotributista aux;
- FILE *archi=fopen(archMonos, "rb");
- if (archi!=NULL){
- while (fread(&aux, sizeof(monotributista),1,archi)>0){
- if (aux.categoria==categoria){
- total_categoria++;
- }
- }
- fclose(archi);
- } else {
- printf("El archivo no se pudo abrir.\n");
- }
- porcent=(total_categoria*100)/total_monos;
- return porcent;
- }
- /// muestra un registro especifico
- void mostrar_registro (int reg) {
- int pos=reg-1;
- int cant=cantidad_registros();
- FILE *archi=fopen(archMonos, "rb");
- monotributista aux;
- if (archi!=NULL){
- if (pos<cant) {
- fseek(archi, sizeof(monotributista)*(reg-1), SEEK_SET);
- fread(&aux, sizeof(monotributista),1,archi);
- puts("\n|| MONOTRIBUTISTA ELEGIDO ||");
- printf("Nombre y apellido: %s\n", aux.nombreYapellido);
- printf(" DNI: %d\n", aux.dni);
- printf(" Categoria: %c\n", aux.categoria);
- printf(" Recaudacion: %f\n", aux.recaudacion);
- } else {
- printf("El registro buscado no existe");
- printf("Te pasaste de la cantidad maxima de registros");
- }
- fclose(archi);
- } else {
- printf("El archivo no pudo ser abierto.\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement