Você está na página 1de 21

Computadores e Programao

Tecnologia dos Equipamentos de Sade

Programa de Registo e Identificao de Avarias dos Equipamentos de Sade Relatrio do Trabalho Prtico 1 Semestre 2011/2012

Nome: Joo Maria Perira Nmero: 2110332

Nome: Joo Gil Nmero: 2110331

Nome: Daniel Jardan Nmero: 2110326

Docente: Carlos Ferreira

TES CP 2011/2012 Joo Pereira (2110332), Daniel Jardan (2110326), Joo Gil (2110331)

NDICE 1. INTRODUO .................................................................................................................................... 3 2. DESCRIO DA APLICAO ......................................................................................................... 4 3. DESENHO ............................................................................................................................................ 5 4. IMPLEMENTAO ...................................................................................................................... 6 - 9 5. CONCLUSO .................................................................................................................................... 10 ANEXO LISTAGEM DO CDIGO .............................................................................................. 11 - 21

2 / 21

TES CP 2011/2012 Joo Pereira (2110332), Daniel Jardan (2110326), Joo Gil (2110331)

1. Introduo
O Trabalho pretende avaliar a parte prtica da unidade curricular de Computadores e Programao. Aprendemos, neste curso, os conceitos bsicos da linguagem de programao C a qual se tem tornado cada vez mais popular, devido sua versatilidade e ao seu poder. O C uma linguagem de programao genrica que utilizada para a criao de programas diversos. C uma linguagem poderosa, robusta, flexvel e madura. Conhecer todos os seus detalhes, truques e armadilhas requer um estudo criterioso e profundo. Mas o C uma linguagem de sintaxe simples e elegante que permite rpido entendimento pelo programador iniciante. Desde da sua criao, o C tornou-se uma linguagem popular tanto entre programadores profissionais quanto iniciantes. Um programa de computador um conjunto instrues que representam um algoritmo para a resoluo de algum problema. Estas instrues so escritas atravs de um conjunto de cdigos (smbolos e palavras). Este conjunto de cdigos possui regras de estruturao lgica e sintctica prpria. Dizemos que este conjunto de smbolos e regras formam uma linguagem de programao. O Programa tem um menu principal constitudo por: Registar (E)quipamento; Registar (A)varia; Registar (R)eparao; Mostrar Avarias (P)endentes; Mostrar E(s)tatsticas; (G)ravar Dados; (F)inalizar Programa. Permite escolher uma das opes anteriores, como por exemplo, se optarmos por Registar Equipamento iremos encontrar diversos equipamentos, tais como: 1-Aparelhos de Electroterapia;

2-Aparelhos de ultrassons; 3-Audimetros; 4-Autoclaves; 5-Esterilizadores; 6-Esfigmomanmetros; 7-Espirmetros; 8-Serras de Gesso; 9-Oxmetros; 10-Oftalmoscpios; 11-Desfibrilhadores;

12-Electrocardiografos. A execuo do trabalho permitiu atingir objectivos como aprender utilizar o programa Codeblocks, como tambm aplicar toda a matria que foi leccionada nas aulas.

3 / 21

TES CP 2011/2012 Joo Pereira (2110332), Daniel Jardan (2110326), Joo Gil (2110331)

2. Descrio da Aplicao
Esta aplicao desenvolvida pode ser utilizada por diversos funcionarios de uma empresa de reparao de equipamentos de sade , uma vez que a funo principal desta registar equipamentos, registar avarias, consultar o estado atual do equipamento no processo de reparao,tal como uma visualizao estatistica dos mesmos. A funo guardar dados tem como finalidade o acesso a toda informao acerca dos equipamentos em qualquer situao. A aplicao dever permitir o registo do equipamento (nmero, tipo) e as avarias deste (numero, tipo). Para alm do registo, o utilizador dever poder efectuar alteraes e consultas sobre os dados armazenados, efectuar algumas reparaes e anlises estatsticas que permitam tirar concluses sobre a situao atual do equipamento registado.

4 / 21

TES CP 2011/2012 Joo Pereira (2110332), Daniel Jardan (2110326), Joo Gil (2110331)

3. Desenho
Inicio

Menu principal

Registar Avarias

Gravar Dados
Registar Reparao
Mostrar Avarias

Opo do programa

Pendentes

Registar Equipamentos Mostrar Estatsticas

Finalizar Programa

Sair

5 / 21

TES CP 2011/2012 Joo Pereira (2110332), Daniel Jardan (2110326), Joo Gil (2110331)

4. Implemetao
Inicialmente projectou-se o algoritmo do que viria a ser o programa, tendo-se iniciado o desenvolvimento do seu cdigo a partir dos menus iniciais. -Menu Principal;

Aps ter sido concludo o desenvolvimento do menu principal, foram tambm desenvolvidos os menus secundrios. -Opo Registar (E)quipamentos;

Esta opo permite escolher um numero a atribuir a um determinado equipamento ( de 0 a 99 ), posteriormente deveremos escolher outro numero ( de 0 a 12 ), para identificar o tipo de equipamento registado anteriormente.

6 / 21

TES CP 2011/2012 Joo Pereira (2110332), Daniel Jardan (2110326), Joo Gil (2110331)

-Opo Registar (A)varia;

Esta opo permite escolher o cdigo de um equipamento anteriormente registado e atribuir lhe uma avaria ( 1 a 100 ), apos isso o programa permite tambm registar o tipo de avaria ( 1 a 7 ). -Opo Registar (R)eparao;

A opo (R) permite registar a reparao que foi feita ao respectivo equipamento, existem vrias hipteses ( 1 a 3 ), em que apos uma seleco a reparao fica associada ao equipamento em questo.

7 / 21

TES CP 2011/2012 Joo Pereira (2110332), Daniel Jardan (2110326), Joo Gil (2110331)

-Opo Mostrar Avarias (P)endentes;

A opo (P)endentes mostra todos os equipamentos que no foram reparados, apresenta o numero do equipamento, o numero da avaria, o tipo de equipamento e o tipo de avaria, para que assim possa haver uma analise do presente estado do equipamento. -Opo Mostrar E(s)tatistica;

A opo estatstica apresenta estatisticamente o nmero de equipamentos e o estado em que se encontram como por exemplo: Equipamentos atendidos, Avarias pendentes, Avarias resolvidas com sucesso, Avarias com reparao invivel e Frequncia do tipo de avaria.
8 / 21

TES CP 2011/2012 Joo Pereira (2110332), Daniel Jardan (2110326), Joo Gil (2110331)

-Opo (G)ravar Dados;

A opo Gravar Dados permite armazenar os registos acerca dos equipamentos que foram inseridos e toda a informao sobre os mesmos. -Opo (F)inalizar Programa;

Caso anteriormente o utilizador no tenha guardado os dados, nesta etapa quando o programa se depara com a questo de querer sair ou no apresenta duas hipteses: Se (s)im o programa grava automaticamente de modo a prevenir perda indesejvel de dados, caso a opo escolhida pelo utilizador for (n)o, o programa volta novamente ao Menu Principal.

9 / 21

TES CP 2011/2012 Joo Pereira (2110332), Daniel Jardan (2110326), Joo Gil (2110331)

5. Concluso

Apesar de o trabalho ter sido parcialmente concludo, tendo sido a parte concluda executada com sucesso, uma das grandes dificuldades para a realizao deste trabalho foi grande parte das vezes a falta de tempo por causa de horrios no compatveis e pela complexidade do trabalho. Temos de ter em considerao que, programar revelou-se uma tarefa extremamente complexa que requer uma concentrao e uma ateno redobrada de modo a minimizar os erros e pequenos problemas que sem dar-mos conta podem comprometer o nosso programa. Porm o grupo manifestou empenho ao participar nas orientaes tutoriais disponibilizadas pelo docente, e os conhecimentos adquiridos com o avanar das aulas ajudaram na realizao deste projeto.

10 / 21

TES CP 2011/2012 Joo Pereira (2110332), Daniel Jardan (2110326), Joo Gil (2110331)

Anexo Listagem do Cdigo #include <stdio.h> #include <string.h> #define MAX_EQUIP 100 void menu(int equip[], int tipo_equip[], int avar[], int tipo_avar[], int repar[], char tipo[], char tipoa[], char outra[10][100], int coment); char ler_letra(); int ler_num(int min, int max); void equipamento(int equip[], int tipo_equip[], char tipo[]); void limpavect(int equip[], int avar[], int repar[], int tipo_equip[], int tipo_avar[]); int descodifica_tipos_equip(int num, char tipo[]); int descodifica_tipos_avar(int num, char tipoa[]); void avaria(int equip[], int avar[], int tipo_avar[], char tipoa[], char outra[10][100], int coment); void reparacao(int equip[], int repar[], int avar[], int tipo_avar[]); void gravar_equipamentos(int equip[], int tipo_equip[]); void ler_equipamentos(int equip[], int tipo_equip[]); void gravar_avarias(int avar[], int repar[], int tipo_avar[], char outra[10][100], int coment); void ler_avarias(int avar[], int repar[], int tipo_avar[], char outra[10][100], int coment); void pendentes(int equip[], int tipo_equip[], int avar[], int tipo_avar[], char tipo[], char tipoa[]); void gravar(int equip[], int tipo_equip[], int avar[], int repar[], int tipo_avar[], char outra[10][100], int coment); void estatistica(int equip[], int repar[],int tipo_avar[],char tipoa[], int avar[]); int sair(); main(){ char tipoa [7]; char tipo [13]; int equip[MAX_EQUIP]; int tipo_equip[MAX_EQUIP]; int avar[MAX_EQUIP]; int tipo_avar[MAX_EQUIP]; int repar[MAX_EQUIP]; char outra [10][100]; int coment = 0;

limpavect(equip, avar, repar, tipo_equip, tipo_avar); ler_equipamentos(equip, tipo_equip); ler_avarias(avar, repar, tipo_avar, outra, coment); menu(equip, tipo_equip, avar, tipo_avar, repar, tipo, tipoa, outra, coment); gravar(equip, tipo_equip, avar, repar, tipo_avar, outra, coment); }
11 / 21

TES CP 2011/2012 Joo Pereira (2110332), Daniel Jardan (2110326), Joo Gil (2110331)

void menu(int equip[], int tipo_equip[], int avar[], int tipo_avar[], int repar[], char tipo[], char tipoa[], char outra[10][100], int coment){ char ordem; char confirmar_sair; do { confirmar_sair = 'n'; printf("\n\n********************************************************************************\n\ n"); printf("\t\t\t M E N U P R I N C I P A L \t\t\t\n\n"); printf("********************************************************************************\n\n"); printf(" -> Registar (E) quipamento\n\n\n"); printf(" -> Registar (A) varia\n\n\n"); printf(" -> Registar (R) eparacao\n\n\n"); printf(" -> Mostrar Avarias (P) endentes\n\n\n"); printf(" -> Mostrar E (s) tatisticas\n\n\n"); printf(" -> (G) ravar Dados\n\n\n"); printf(" -> (F) inalizar Programa\n\n\n"); printf(" ? "); ordem = ler_letra(); switch(ordem) { case 'e': case 'E':equipamento(equip, tipo_equip, tipo); break; case 'a': case 'A':avaria(equip, avar, tipo_avar, tipoa, outra, coment); break; case 'r': case 'R':reparacao(equip, repar, avar, tipo_avar); break; case 'p': case 'P':pendentes(equip, tipo_equip, avar, tipo_avar, tipo, tipoa); break; case 'S': case 's':estatistica(equip, repar, tipo_avar, tipoa, avar); break; case 'g':
12 / 21

TES CP 2011/2012 Joo Pereira (2110332), Daniel Jardan (2110326), Joo Gil (2110331)

case 'G':gravar(equip, tipo_equip, avar, repar, tipo_avar, outra, coment); break; case 'f': case 'F':confirmar_sair = sair(); break; default: printf("Opcao Invalida!"); }

} while (confirmar_sair != 'S' && confirmar_sair != 's'); } void limpavect(int equip[], int avar[], int repar[], int tipo_equip[], int tipo_avar[]){ int i; for(i=0; i<MAX_EQUIP; i++) { equip[i]=-1; avar[i]=-1; repar[i]=-1; tipo_equip[i]=-1; tipo_avar[i]=-1; } } void equipamento(int equip[], int tipo_equip[], char tipo []){ int op,op2; printf("\nInsira o codigo do equipamento:(de 0 a %d)\n", MAX_EQUIP-1 ); op = ler_num(0, MAX_EQUIP-1); if (equip[op]!=-1) {printf("codigo ocupado\n"); system ("pause");} else { equip[op]=op; printf("\nO equipamento foi registado com o codigo %d\n",op); printf("\nQual o equipamento?\n\n"); printf("1 - Aparelhos de Electroterapia\n\n"); printf("2 - Aparelhos de ultrassons\n\n"); printf("3 - Audiometros\n\n"); printf("4 - Autoclaves\n\n");

13 / 21

TES CP 2011/2012 Joo Pereira (2110332), Daniel Jardan (2110326), Joo Gil (2110331)

printf("5 - Estrelizadores\n\n"); printf("6 - Esfigmomanometros\n\n"); printf("7 - Espirometros\n\n"); printf("8 - Serras de Gesso\n\n"); printf("9 - Oximetros\n\n"); printf("10 - Oftalmoscopios\n\n"); printf("11 - Desfibrilhadores\n\n"); printf("12 - Electrocardiografos\n\n"); op2 = ler_num(1,12); tipo_equip[op] = op2; printf("O equipamento foi registado com o numero %d e e um %s ", op, descodifica_tipos_equip(op2, tipo)); system ("pause");}

} int descodifica_tipos_equip(int num, char tipo[]){ switch(num) { case 1: strcpy(tipo,"Aparelho de Electroterapia"); break; case 2: strcpy(tipo,"Aparelhos de ultrassons"); break; case 3: strcpy(tipo,"Audiometros"); break; case 4: strcpy(tipo,"Autoclaves"); break; case 5: strcpy(tipo,"Estrelizadores"); break; case 6: strcpy(tipo,"Esfigmomanometros"); break; case 7: strcpy(tipo,"Espirometros");
14 / 21

TES CP 2011/2012 Joo Pereira (2110332), Daniel Jardan (2110326), Joo Gil (2110331)

break; case 8: strcpy(tipo,"Serras de Gesso"); break; case 9: strcpy(tipo,"Oximetros"); break; case 10: strcpy(tipo,"Oftalmoscopios"); break; case 11: strcpy(tipo,"Desfibrilhadores"); break; case 12: strcpy(tipo,"Electrocardiografos"); break; } } int descodifica_tipos_avar(int num, char tipoa[]){ switch(num) { case 1: strcpy(tipoa,"Manutencao Periodica"); break; case 2: strcpy(tipoa,"Nao liga"); break; case 3: strcpy(tipoa,"Visor nao funciona"); break; case 4: strcpy(tipoa,"Medicao de valores incorrectos"); break; case 5: strcpy(tipoa,"Desliga antes de tempo"); break; case 6: strcpy(tipoa,"Nao emite sinal sonoro"); break; case 7: strcpy(tipoa,"Outra"); break; } } void avaria(int equip[], int avar[], int tipo_avar[], char tipoa[], char outra[10][100], int coment){
15 / 21

TES CP 2011/2012 Joo Pereira (2110332), Daniel Jardan (2110326), Joo Gil (2110331)

int op, op2, i; char comentario[100]; printf("Qual o codigo do equipamento avariado?\n"); op = ler_num(0, MAX_EQUIP-1); if (equip[op]!=-1) { printf("\n\nAtribua um codigo a avaria?(0, %d)\n", MAX_EQUIP-1); avar[op] = ler_num(0, MAX_EQUIP-1); printf("1 - Manutencao Periodica ?\n\n"); printf("2 - Nao liga?\n\n"); printf("3 - Visor nao funciona?\n\n"); printf("4 - Medicao de valores incorrectos?\n\n"); printf("5 - Desliga antes de tempo?\n\n"); printf("6 - Nao emite sinal sonoro?\n\n"); printf("7 - Outra?\n\n"); printf("Qual o codigo da avaria?\n\n"); op2 = ler_num(1,7); switch(op2){ case 7: if (coment<11){ printf("\nDescreva a avaria(max:100 caracteres):\nPara terminar click Enter.\n"); fflush(stdin); fgets(comentario, 100, stdin); for (i = 0; i < 100 ; i++){ outra[coment][i]=comentario[i]; } coment++; } else printf("\n\nMemoria cheia! Impossivel armazenar mais descrioes."); default: tipo_avar[op]=op2; printf("A avaria do equipamento descodifica_tipos_avar(op2, tipoa)); system ("pause"); %d foi registada com o n %d %s", op, avar[op],

16 / 21

TES CP 2011/2012 Joo Pereira (2110332), Daniel Jardan (2110326), Joo Gil (2110331)

} } else { printf("Esse equipamento nao existe\n"); } } void reparacao(int equip[], int repar[], int avar[], int tipo_avar[]){ int op, op2; printf("Qual o codigo do equipamento a reparar?\n"); op = ler_num(0,MAX_EQUIP-1);

if (equip[op]!=-1 && avar[op]!=-1 ) { printf("1 - Reparado?\n"); printf("2 - Pendente?\n"); printf("3 - Inviavel?\n"); printf("Qual o codigo da reparacao?\n"); op2 = ler_num(1,3);

switch(op2) { case 1:avar[op] = -1; repar[op]= 1; printf("A reparacao foi registada!"); system ("pause"); break; case 2:repar[op] = 2; printf("A reparacao ficou pendente!"); system ("pause"); break; case 3:avar[op] = -1; tipo_avar[op]=-1; repar[op]=3; printf("A reparacao foi registada como inviavel!"); system ("pause"); break; } }
17 / 21

TES CP 2011/2012 Joo Pereira (2110332), Daniel Jardan (2110326), Joo Gil (2110331)

else{ printf("Esse equipamento nao tem avaria registada!\n"); system ("pause"); }} void pendentes(int equip[], int tipo_equip[], int avar[], int tipo_avar[], char tipo[], char tipoa[]){ int conta=0, i=0, num, num1; printf("Equipamentos pendentes\n\n"); printf("# equipamentos, # avarias, tipo de equipamento, tipo de avaria.\n\n");

for (i=0; i<MAX_EQUIP; i++){ if (equip[i]!=-1 && avar[i]!=-1){ num=tipo_equip[i]; num1=tipo_avar[i]; printf("\t %d, \t\t%d, %s, ",equip[i], avar[i], descodifica_tipos_equip(num, tipo)); printf(" %s \n", descodifica_tipos_avar(num1, tipoa)); conta=conta+1; } } printf("\n\nExistem %d equipamentos pendentes\n",conta); system ("pause"); } void gravar(int equip[], int tipo_equip[], int avar[], int repar[], int tipo_avar[], char outra[10][100], int coment){ gravar_equipamentos(equip, tipo_equip); gravar_avarias(avar, repar, tipo_avar, outra, coment); } void gravar_equipamentos(int equip[], int tipo_equip[]) { FILE *fp; fp = fopen("equipamentos.bin", "wb"); if (fp == NULL) { printf("\nERRO na gravacao do ficheiro!\n"); return; } fwrite(equip, sizeof(int), MAX_EQUIP, fp); fwrite(tipo_equip, sizeof(int), MAX_EQUIP, fp); fclose(fp); } void ler_equipamentos(int equip[], int tipo_equip[]) { FILE *fp;
18 / 21

TES CP 2011/2012 Joo Pereira (2110332), Daniel Jardan (2110326), Joo Gil (2110331)

fp = fopen("equipamentos.bin", "rb"); if (fp == NULL) { printf("\nERRO na leitura do ficheiro!\n"); return; } fread(equip, sizeof(int), MAX_EQUIP, fp); fread(tipo_equip, sizeof(int), MAX_EQUIP, fp); fclose(fp); } void gravar_avarias(int avar[], int repar[], int tipo_avar[], char outra[10][100], int coment) { FILE *fp; fp = fopen("avarias.bin", "wb"); if (fp == NULL) { printf("\nERRO na gravacao do ficheiro!\n"); return; } fwrite(avar, sizeof(int), MAX_EQUIP, fp); fwrite(repar, sizeof(int), MAX_EQUIP, fp); fwrite(tipo_avar, sizeof(int), MAX_EQUIP, fp); fwrite(outra, sizeof(char), 10*100, fp); fwrite(&coment, sizeof(int), 1, fp); fclose(fp); printf("Os seus registos foram salvos!"); system ("pause"); } void ler_avarias(int avar[], int repar[], int tipo_avar[], char outra[10][100], int coment) { FILE *fp; fp = fopen("avarias.bin", "rb"); if (fp == NULL) { printf("\nERRO na leitura do ficheiro!\n"); return; } fread(avar, sizeof(int), MAX_EQUIP, fp); fread(repar, sizeof(int), MAX_EQUIP, fp); fread(tipo_avar, sizeof(int), MAX_EQUIP, fp); fread(outra, sizeof(char), 10*100, fp); fread(&coment, sizeof(int), 1, fp); fclose(fp); }
19 / 21

TES CP 2011/2012 Joo Pereira (2110332), Daniel Jardan (2110326), Joo Gil (2110331)

void estatistica(int equip[], int repar[], int tipo_avar[], char tipoa[], int avar[]){ int i, k; int conta_equip=0; int conta_pend=0; int conta_sucesso=0; int conta_inviaveis=0; int conta_tipos_resol[7]={0}; int conta_tipo_pend[7]={0}; int total_resolvidas=0; float percent_resol=0; float percent_invia=0;

printf("\nEstatisticas\n\n"); for (i=0; i<MAX_EQUIP; i++){ if (equip[i]!=-1) conta_equip++; if (avar[i]!=-1) conta_pend++; if (repar[i]==1) conta_sucesso++; if (repar[i]==3) conta_inviaveis++;

if (repar[i]==1){ for (k=0; k<7; k++){ if (tipo_avar[i]==k+1) conta_tipos_resol[k]++; } } if (avar[i]!=-1){ for (k=0; k<7; k++){ if (tipo_avar[i]==k+1) conta_tipo_pend[k]++; } } }

total_resolvidas=conta_inviaveis+conta_sucesso; percent_resol=(float)conta_sucesso/total_resolvidas*100; percent_invia=(float)conta_inviaveis/total_resolvidas*100; printf("Equipamentos atendidos: %d\n\n",conta_equip); printf("Avarias pendentes: %d\n\n",conta_pend); printf("Avarias Resolvidas com sucesso: %d (%0.0f %%)\n\n",conta_sucesso, percent_resol);
20 / 21

TES CP 2011/2012 Joo Pereira (2110332), Daniel Jardan (2110326), Joo Gil (2110331)

printf("Avarias com reparacao inviavel: %d (%0.0f %%)\n\n",conta_inviaveis, percent_invia); printf("Frequencia do tipo de avaria:\n\n"); for (k=0; k<7; k++){ if (conta_tipos_resol[k]!=0 || conta_tipo_pend[k]!=0) printf("\t %s : %d resolvidas, %d pendentes.\n", descodifica_tipos_avar(k+1, tipoa), conta_tipos_resol[k], conta_tipo_pend[k]); } system ("pause");

} int ler_num (int min, int max){ int aux; do { scanf("%*[^0-9] %d", &aux); if (aux < min || aux > max){ printf("\nValor invalido - insira um numero entre %d e %d!\n", min, max); } } while(aux < min || aux > max); return aux; } char ler_letra (){ char aux; scanf(" %c", &aux); return aux; } int sair(){ char op;

do{ printf("\nTem a certeza que pretende sair?(S/N)"); op=ler_letra(); } while(op !='s' && op !='S' && op != 'N' && op != 'n'); return op; }

21 / 21