Karbust Posted May 28, 2016 Share Posted May 28, 2016 Boas pessoal Venho aqui postar o meu mais recente trabalho de avaliação para a aula de linguagens de programação #include <stdio.h> #include <conio.h> #include <string.h> struct trabalhador { int id_trabalhador; char nome[50]; int idade; char morada[30]; float salario_bruto; float percentagem_irs; float percentagem_tsu; char departamento[50]; float valor_irs; float valor_tsu; float salario_liquido; }; #define num_trabalhadores 100 struct trabalhador x[num_trabalhadores]; alterar_struct(int id_trab) { printf("%d\n\n", id_trab); int idade2; float salario_bruto2, salario_liquido2, percentagem_irs2, percentagem_tsu2, valor_tsu2, valor_irs2; char nome2[50], morada2[30], departamento2[50]; printf("ATENCAO: Quando pretender manter o valor anterior introduza 0!\n\n"); //------------------------------------------------------------------------------------------------- printf("Introduza o um novo nome para o trabalhador %d: ", id_trab); scanf(" %s", &nome2); //printf("%s\n", nome2); if(nome2 == "0") { return; } else { strcpy((x+(id_trab-1))->nome,nome2); } //------------------------------------------------------------------------------------------------- printf("Introduza uma nova idade para o trabalhador %d: ", id_trab); scanf("%d", &idade2); if(idade2 == 0) { return; } else { (x+(id_trab-1))->idade = idade2; } //------------------------------------------------------------------------------------------------- printf("Introduza uma nova morada para o trabalhador %d: ", id_trab); scanf(" %s", &morada2); if(morada2 == "0") { return; } else { strcpy((x+(id_trab-1))->morada,morada2); } //------------------------------------------------------------------------------------------------- printf("Introduza um novo departamento para o trabalhador %d: ", id_trab); scanf(" %s", &departamento2); if(departamento2 == "0") { return; } else { strcpy((x+(id_trab-1))->departamento,departamento2); } //------------------------------------------------------------------------------------------------- printf("Introduza uma nova percentagem de IRS para o trabalhador %d (ex: 10%c = 0.10): ", id_trab); scanf("%f", &percentagem_irs2); if(percentagem_irs2 == 0) { return; } else { (x+(id_trab-1))->percentagem_irs = percentagem_irs2; } //------------------------------------------------------------------------------------------------- printf("Introduza uma nova percentagem de TSU para o trabalhador %d (ex: 10%c = 0.10): ", id_trab); scanf("%f", &percentagem_tsu2); if(percentagem_tsu2 == 0) { return; } else { (x+(id_trab-1))->percentagem_tsu = percentagem_tsu2; } //------------------------------------------------------------------------------------------------- printf("Introduza um novo salario bruto para o trabalhador %d: ", id_trab); scanf("%f", &salario_bruto2); if(salario_bruto2 == 0) { return; } else { (x+(id_trab-1))->salario_bruto = salario_bruto2; (x+(id_trab-1))->valor_irs = (x+(id_trab-1))->salario_bruto * (x+(id_trab-1))->percentagem_irs; (x+(id_trab-1))->valor_tsu = (x+(id_trab-1))->salario_bruto * (x+(id_trab-1))->percentagem_tsu; (x+(id_trab-1))->salario_liquido = (x+(id_trab-1))->salario_bruto - ((x+(id_trab-1))->valor_irs + (x+(id_trab-1))->valor_tsu); } //------------------------------------------------------------------------------------------------- printf("Trabalhador %d editado com sucesso!", id_trab); } eliminar_dado(int id) { strcpy((x+(id-1))->nome,""); (x+(id-1))->idade = 0; strcpy((x+(id-1))->morada,""); (x+(id-1))->salario_bruto = 0; (x+(id-1))->percentagem_irs = 0; (x+(id-1))->percentagem_tsu = 0; strcpy((x+(id-1))->departamento,""); (x+(id-1))->valor_irs = 0; (x+(id-1))->valor_tsu = 0; (x+(id-1))->salario_liquido = 0; (x+(id-1))->id_trabalhador = 0; } main() { int opcao, op, id, num_dados; int i; do { printf("Menu:\n"); printf("1 - Inserir dados\n"); printf("2 - Listagem geral dos dados\n"); printf("3 - Consultar dados e alterar dados\n"); printf("4 - Alterar dados\n"); printf("5 - Eliminar dado\n"); printf("6 - Sair\n"); printf("Insira o numero da opcao: "); scanf("%d",&opcao); printf("\n"); switch(opcao) { case 1: printf("Quantos dados pretende inserir? "); scanf("%d",&num_dados); if(num_dados <= 0 || num_dados > num_trabalhadores) { printf("So pode inserir valores entre 1 e %d", num_trabalhadores); } else { for(i=0; i < num_dados; i++) { int id_trabalhador_antes; int *id_trabalhador_antes_ponteiro; printf("\nInsira o id do trabalhador %d: ", i+1); scanf("%d",&id_trabalhador_antes); id_trabalhador_antes_ponteiro = id_trabalhador_antes; if(id_trabalhador_antes_ponteiro <= 0) { printf("Os valores tem de ser maiores que 0."); getch(); break; } int i2; for(i2=0; i2 < num_trabalhadores; i2++) { if((x+i2)->id_trabalhador == id_trabalhador_antes_ponteiro) { printf("Ja existe um trabalhador com esse id!"); getch(); system("cls"); main(); } else { (x+i)->id_trabalhador=id_trabalhador_antes_ponteiro; } } printf("Insira o nome do trabalhador %d: ", i+1); //scanf(" %s",&x.nome); scanf("%s",&(x+i)->nome); printf("Insira a idade do trabalhador %d: ", i+1); scanf("%d",&(x+i)->idade); printf("Insira a morada do trabalhador %d: ", i+1); scanf("%s",&(x+i)->morada); printf("Insira o salario bruto do trabalhador %d: ", i+1); scanf("%f",&(x+i)->salario_bruto); printf("Insira a percentagem de IRS do trabalhador %d (ex: 10%c = 0.10): ", i+1, 37); scanf("%f",&(x+i)->percentagem_irs); printf("Insira a percentagem de TSU do trabalhador %d (ex: 10%c = 0.10): ", i+1, 37); scanf("%f",&(x+i)->percentagem_tsu); printf("Insira o nome do departamento do trabalhador %d: ", i+1); scanf("%s", &(x+i)->departamento); (x+i)->valor_irs = (x+i)->salario_bruto * (x+i)->percentagem_irs; (x+i)->valor_tsu = (x+i)->salario_bruto * (x+i)->percentagem_tsu; (x+i)->salario_liquido = (x+i)->salario_bruto - ((x+i)->valor_irs + (x+i)->valor_tsu); system("cls"); } } break; case 2: if(num_dados <= 10) { for(i=0; i < num_dados; i++) { printf("ID Trabalhador: %d\n", (x+i)->id_trabalhador); printf("Nome: %s\n", (x+i)->nome); printf("Idade: %d\n", (x+i)->idade); printf("Morada: %s\n", (x+i)->morada); printf("Departamento: %s\n", (x+i)->departamento); printf("Salario Bruto: %.2f\n", (x+i)->salario_bruto); printf("Percentagem IRS: %.2f\n", (x+i)->percentagem_irs); printf("Percentagem TSU: %.2f\n", (x+i)->percentagem_tsu); printf("Valor IRS: %.2f\n", (x+i)->valor_irs); printf("Valor TSU: %.2f\n", (x+i)->valor_tsu); printf("Salario Liquido: %.2f\n\n", (x+i)->salario_liquido); } } else if(num_dados > 10) { for(i=0; i < num_dados; i++) { if(i % 10 == 0) { getch(); } printf("ID Trabalhador: %d\n", (x+i)->id_trabalhador+1); printf("Nome: %s\n", (x+i)->nome); printf("Idade: %d\n", (x+i)->idade); printf("Morada: %s\n", (x+i)->morada); printf("Departamento: %s\n", (x+i)->departamento); printf("Salario Bruto: %.2f\n", (x+i)->salario_bruto); printf("Percentagem IRS: %.2f\n", (x+i)->percentagem_irs); printf("Percentagem TSU: %.2f\n", (x+i)->percentagem_tsu); printf("Valor IRS: %.2f\n", (x+i)->valor_irs); printf("Valor TSU: %.2f\n", (x+i)->valor_tsu); printf("Salario Liquido: %.2f\n\n", (x+i)->salario_liquido); } } getch(); system("cls"); break; case 3: printf("Introduza o id de trabalhador que pretende visualizar: "); scanf("%d",&id); printf("ID Trabalhador: %d\n", (x+(id-1))->id_trabalhador); printf("Nome: %s\n", (x+(id-1))->nome); printf("Idade: %d\n",(x+(id-1))->idade); printf("Morada: %s\n", (x+(id-1))->morada); printf("Departamento: %s\n", (x+(id-1))->departamento); printf("Salario Bruto: %.2f\n", (x+(id-1))->salario_bruto); printf("Percentagem IRS: %.2f\n", (x+(id-1))->percentagem_irs); printf("Percentagem TSU: %.2f\n", (x+(id-1))->percentagem_tsu); printf("Valor IRS: %.2f\n", (x+(id-1))->valor_irs); printf("Valor TSU: %.2f\n", (x+(id-1))->valor_tsu); printf("Salario Liquido: %.2f\n\n", (x+(id-1))->salario_liquido); getch(); printf("Pretende editar os dados do trabalhador?\n"); printf("1 - Sim\n"); printf("2 - Nao\n"); scanf("%d",&op); if(op == 1) { alterar_struct(id); } else if (op == 2) { system("cls"); } else { printf("Opcao Invalida!"); } break; case 4: printf("Introduza o id de trabalhador que pretende alterar: "); scanf("%d",&id); alterar_struct(id); system("cls"); break; case 5: printf("Introduza o id de trabalhador que pretende remover: "); scanf("%d",&id); eliminar_dado(id); getch(); system("cls"); break; case 6: exit(0); break; } } while(opcao != 6); } Link no Pastebin http://pastebin.com/FakrKAut Qualquer dúvida, digam Abraço Link to comment Share on other sites More sharing options...
PACI Posted May 28, 2016 Share Posted May 28, 2016 Só um tip: quando um if (ao ser true ou false) só chama uma função, não precisas de usar as chavetas. Ex: if (cond) return; Link to comment Share on other sites More sharing options...
Karbust Posted May 28, 2016 Author Share Posted May 28, 2016 Só um tip: quando um if (ao ser true ou false) só chama uma função, não precisas de usar as chavetas. Ex: if (cond) return; Eu sei, mas estou mais habituado assim, é uma questão de organização para mim... Mas obrigado pela dica Link to comment Share on other sites More sharing options...
Berhart Posted May 28, 2016 Share Posted May 28, 2016 Gostei da iniciativa e do teu trabalho :megusta: . Talvez também tome a liberdade de postar o meu trabalho de projeto sobre exatamente o mesmo tema. Link to comment Share on other sites More sharing options...
Karbust Posted May 28, 2016 Author Share Posted May 28, 2016 Era para fazer um para gestão de alunos, mas como já tinha esse feito para uns módulo anterior, adicionei a estrutura e os ponteiros... Link to comment Share on other sites More sharing options...
Berhart Posted May 29, 2016 Share Posted May 29, 2016 Visto que no teu trabalho implementaste estruturas e ponteiros não podias ter brincado com Malloc's e Free's ? Por exemplo em vez de declarares o teu vetor principal onde metes toda a informação: x[num_trabalhadores] podias ter feito já em notação de ponteiros *x e depois farias talvez uma função de inicialização do teu vetor para lhe dar os bytes necessários através do malloc. Aspeto/sugestão: Penso eu(ainda não sou pro na àrea xD) que normalmente quando usas estruturas tens de encapsular a tua informação ao máximo para o utilizador não saber o que andas a fazer por exemplo: Criares Operações Básicas para a tua estrutura e.g: Função que Remove/Adiciona/Procura um trabalhador ou quem sabe uma Função que ordene o teu vetor por ordem alfabética do departamento num ficheiro à parte que depois compilavas e juntava tudo. Por fim resta-me dizer que existem estruturas melhores que vetores para o teu programa ser mais eficiente por exemplo em termos de procura de um certo elemento que o utilizador queira como: Listas Simplesmente/Duplamente Ligadas, HashTables e Arvores(AVL, Binária, RedBlack). PS: Eu dei estas sugestões mas não sei qual era o objetivo do teu trabalho ao certo, de qualquer forma mais uma vez gostei da tua partilha dado que implementaste pequenas coisas que eu não sabia como a inclusão da biblioteca <conio.h> e de alguns comandos como: getch() e o system(). Link to comment Share on other sites More sharing options...
Karbust Posted May 29, 2016 Author Share Posted May 29, 2016 Visto que no teu trabalho implementaste estruturas e ponteiros não podias ter brincado com Malloc's e Free's ? Por exemplo em vez de declarares o teu vetor principal onde metes toda a informação: x[num_trabalhadores] podias ter feito já em notação de ponteiros *x e depois farias talvez uma função de inicialização do teu vetor para lhe dar os bytes necessários através do malloc. Aspeto/sugestão: Penso eu(ainda não sou pro na àrea xD) que normalmente quando usas estruturas tens de encapsular a tua informação ao máximo para o utilizador não saber o que andas a fazer por exemplo: Criares Operações Básicas para a tua estrutura e.g: Função que Remove/Adiciona/Procura um trabalhador ou quem sabe uma Função que ordene o teu vetor por ordem alfabética do departamento num ficheiro à parte que depois compilavas e juntava tudo. Por fim resta-me dizer que existem estruturas melhores que vetores para o teu programa ser mais eficiente por exemplo em termos de procura de um certo elemento que o utilizador queira como: Listas Simplesmente/Duplamente Ligadas, HashTables e Arvores(AVL, Binária, RedBlack). PS: Eu dei estas sugestões mas não sei qual era o objetivo do teu trabalho ao certo, de qualquer forma mais uma vez gostei da tua partilha dado que implementaste pequenas coisas que eu não sabia como a inclusão da biblioteca <conio.h> e de alguns comandos como: getch() e o system(). O objetivo do meu trabalho era englobar a matéria dada até ao módulo em que estou (6 ou 7 acho eu >.<), e foi isso que fiz, a função malloc e os free's ainda não dei, e essas listas de que aí falaste não sei o que são >.< Na biblioteca conio.h só a uso para a função getch(), que faz o mesmo que return 0; acho eu, apenas serve para parar o programa para se poder ver o output, e quando se quer continua basta clicar numa tecla qualquer... Essa de ordenar por ordem alfabética nem me lembrei, talvez venha a fazer num próximo trabalho, acho que agora vamos dar ficheiros, posso até fazer um import de um ficheiro txt fazendo de base de dados, guardando depois na estrutura para a execução e talvez possa ordenar por ordem alfabética no ficheiro... Link to comment Share on other sites More sharing options...
Berhart Posted May 29, 2016 Share Posted May 29, 2016 O meu segundo projeto de algoritmos foi fazer um programa que tendo só 4-5 comandos era fazer um buffer de hashtags como o twitter faz. Por exemplo recebendo frases tem de selecionar só as hashtags e fazer algo com elas. O problema do projeto é sobretudo eficiência e não a dificuldade em si. Se nos for dado mais de 1kk de hashtags convém que a coisa corra rápido e que não use muita memória Link to comment Share on other sites More sharing options...
Karbust Posted May 29, 2016 Author Share Posted May 29, 2016 O meu segundo projeto de algoritmos foi fazer um programa que tendo só 4-5 comandos era fazer um buffer de hashtags como o twitter faz. Por exemplo recebendo frases tem de selecionar só as hashtags e fazer algo com elas. O problema do projeto é sobretudo eficiência e não a dificuldade em si. Se nos for dado mais de 1kk de hashtags convém que a coisa corra rápido e que não use muita memória O meu professor não quer avançar muito no C, ele diz que esta linguagem já não é usada por nenhuma empresa... Ele está à espera que instalem o Visual Studio nos pc's da escola para começar com o C# Link to comment Share on other sites More sharing options...
Berhart Posted May 29, 2016 Share Posted May 29, 2016 Pois isso tem a ver com cada escola xD Eu faço o que me pedem e pronto, vivemos felizes para sempre. Mas é certo que se começares com C vais saber trabalhar melhor com C++ e C#, porque convém começares no mais básico e depois é só aprenderes os pormenores das outras linguagens que advêm do C Link to comment Share on other sites More sharing options...
Karbust Posted May 29, 2016 Author Share Posted May 29, 2016 Não acho nada C# parecido com C, já C++ tem as suas parecenças Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now