Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Structs com vetor e persistencia em memória secundária
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <locale.h>
- #define n 10
- const char pathFile[50] = "db_crud.log";
- int is_ptbr = 1;
- //Structs: Declaração das estruturas de dados heterogêneas (novos tipos de dados)
- typedef struct { // Cria uma STRUCT para armazenar datas
- int dia, mes, ano;
- } Data; // Define o nome do novo tipo criado
- typedef struct { // Cria uma STRUCT para armazenar vendas
- int qde;
- float preco, total;
- Data data_venda;
- } Venda; // Define o nome do novo tipo criado
- //Prototipos
- Venda novaVenda();
- void listaTotalVendas(Venda v[], int qt_reg);
- void ReadFromFile(Venda v[], int *cnt);
- void SaveToFile(Venda v[], int qt_reg);
- int getLanguagePtBr();
- int main() {
- is_ptbr = getLanguagePtBr();
- Venda vet_vendas[n];
- int opc=1;
- int cnt=0;
- //Ler os dados do arquivo
- ReadFromFile(vet_vendas, &cnt);
- while(opc > 0) {
- //Limpa a tela
- #ifdef __linux__
- system("clear");
- #else
- system("@cls||clear");
- #endif
- //Menu
- printf("\nEscolha a opção no menu: \n Inserir nova venda: 1 \n Imprimir relatório: 2 \n Sair: 0 \n Sua opção: ");
- scanf("%d", &opc);
- if(opc == 0)
- printf(" Bye!\n");
- else if(opc == 1) {
- if(cnt<n) {
- vet_vendas[cnt] = novaVenda();
- cnt++;
- } else {
- printf("\nImpossível inserir novo.\n Número máximo de registros já atingido (%d).\n", n);
- system("pause");
- }
- }
- else if(opc == 2) {
- listaTotalVendas(vet_vendas, cnt);
- system("pause");
- }
- else {
- printf(" Opção Inválida!\n");
- sleep(3);
- }
- }
- //Salva os dados no arquivo antes de fechar o programa
- SaveToFile(vet_vendas, cnt);
- return 0;
- }
- Venda novaVenda() {
- char help_txt[30] = "";
- if(is_ptbr)
- strncpy(help_txt, "(Padrão ptBR: Ex: 9,89)", 30);
- Venda v;
- printf("\nNova Venda:");
- printf("\n Insira dia mes e ano da venda, separando por espaço: ");
- scanf("%d %d %d", &v.data_venda.dia, &v.data_venda.mes, &v.data_venda.ano);
- printf(" Insira a qtde vendida: ");
- scanf("%d", &v.qde);
- printf(" Insira o preço %s: ", help_txt);
- scanf("%f", &v.preco);
- v.total = v.qde * v.preco;
- return v;
- }
- void listaTotalVendas(Venda v[], int qt_reg) {
- int qt_venda=0;
- float tot=0;
- for(int i=0; i<qt_reg; i++) {
- qt_venda += v[i].qde;
- tot += v[i].total;
- }
- printf("\n Relatório Totais de vendas:");
- printf("\n Quantidade de vendas já realizadas: %d", qt_reg);
- printf("\n Quantidade total de unidades vendidas: %d", qt_venda);
- printf("\n Valor total faturamento: R$ %.2f\n\n", tot);
- }
- void ReadFromFile(Venda v[], int *cnt) {
- // dia;mes;ano;qde;preco,total
- FILE *fp;
- char *line = NULL;
- size_t len = 0;
- ssize_t read;
- int dia, mes, ano, qtde;
- float valor, total;
- fp = fopen (pathFile, "r");
- if (fp == NULL)
- return;
- while ((read = getline(&line, &len, fp)) != -1) {
- Venda venda;
- sscanf(line, "%d;%d;%d;%d;%f;", &venda.data_venda.dia, &venda.data_venda.mes, &venda.data_venda.ano, &venda.qde, &venda.preco);
- //printf("%d %d %d %d %.2f %.2f\n", venda.data_venda.dia, venda.data_venda.mes, venda.data_venda.ano, venda.qde, venda.preco, venda.total);
- venda.total = venda.qde * venda.preco;
- v[(*cnt)++] = venda;
- }
- int resp_close = fclose(fp);
- printf("resp_close: %d", resp_close);
- }
- void SaveToFile(Venda v[], int qt_reg) {
- char* buffer = NULL;
- size_t bufferSize = 0;
- FILE *fp;
- fp = fopen (pathFile, "w");
- for(int i=0; i<qt_reg; i++) {
- fprintf(fp, "%d;%d;%d;%d;%.2f;%.2f;\n", v[i].data_venda.dia, v[i].data_venda.mes, v[i].data_venda.ano, v[i].qde, v[i].preco, v[i].total);
- }
- fclose(fp);
- }
- int getLanguagePtBr() {
- char *loc_str = setlocale(LC_ALL, "");
- char * ptr = strpbrk(loc_str, "Portuguese");
- return !strcmp(loc_str, ptr);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement