4 void separar_string(char *s, int *numero, float *precio)
6 /* Bueno el ' ' y reemplazo por \0 */
10 while ((s[pos] != '\0') && (s[pos] != ' ')) pos++;
17 *precio = atof(s+pos+1);
19 /* Dejo todo como esta! */
23 int main(int argc, char *argv[])
28 int numero, i,j, cant_items, CANT;
34 printf("Modo de uso :\n");
35 printf("\t#> %s salida.xml <cantidad de facturas a generar>\n", argv[0]);
43 if ((fp=fopen(argv[1], "rt")) == NULL) {
44 printf("No se pudo generar archivo de salida.\n");
48 articulos = dict_crear("articulos.txt");
49 if (articulos == NULL) {
50 printf("No se encontro registro de articulos (articulos.txt). Es posible que deba correr generar_art primero.");
53 notas = dict_crear("notas.txt");
55 fprintf(fp, "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n");
56 fprintf(fp, "<FACTURAS>\n");
57 for(i=0; i<CANT; i++) {
58 fprintf(fp, "\t<FACTURA NroFac=\"%d\" ", i);
59 fprintf(fp, "FechaEmisión=\"2004%02d%02d\" ", (i<(CANT/2))?4:5, al_azar(1, 30));
60 /* Genero la info importante */
61 /* Selecciono la forma de Pago (FP) */
62 if (i < CANT*0.3) { /* FP = "CH" */
63 fprintf(fp, " FP=\"CH\" ");
65 if (ch <= CANT*0.3*0.2) {
66 fprintf(fp, " Estado=\"SF\" ");
67 } else if (ch <= CANT*0.3*0.5) {
68 fprintf(fp, " Estado=\"NC\" ");
69 } else if (ch <= CANT*0.3) {
70 fprintf(fp, " Estado=\"PN\" ");
72 fprintf(fp, "NroCheque=\"%04d-%03d-%05d-%03d\" ", al_azar(1, 9999), al_azar(1, 999), al_azar(1, 99999), al_azar(1, 999));
73 } else if (i < CANT*0.6) { /* FP = "CR" */
74 fprintf(fp, " FP=\"CR\" ");
76 if (cr <= CANT*0.3*0.08) { /* Hasta el 8 % */
77 fprintf(fp, " Estado=\"CM\" ");
78 } else if (cr <= CANT*0.3*0.4) { /* Desde 8 a 40 = 32% */
79 fprintf(fp, " Estado=\"CD\" ");
80 } else if (cr <= CANT*0.3) { /* Desde 40 a 100 = 60% */
81 fprintf(fp, " Estado=\"PN\" ");
83 fprintf(fp, "NroCtaCte=\"%d\" ", al_azar(111111, 99999));
84 } else if (i < CANT) { /* FP = "CO" */
85 fprintf(fp, " FP=\"CO\" Estado=\"PN\" ");
88 fprintf(fp, "\t\t<NOTA>%s</NOTA>\n", dict_get_al_azar(notas));
89 /* Veo cuantos items necesita esta factura */
91 cant_items = al_azar(2, 5);
97 cant_items = al_azar(6, 10);
100 cant_items = al_azar(10, 15);
102 for(j=0; j<cant_items; j++) {
103 /* Obtengo un articulo al azar */
104 s = dict_get_al_azar(articulos);
105 separar_string(s, &numero, &precio);
106 fprintf(fp, "\t\t<ITEMVENTA NroArtículo=\"%d\" CV=\"%d\" PVU=\"%.2f\" />\n", numero, al_azar(1, 10), precio);
108 fprintf(fp, "\t</FACTURA>\n");
110 fprintf(fp, "\t</FACTURAS>\n");
112 dict_destruir(articulos);
113 dict_destruir(notas);