Escolar Documentos
Profissional Documentos
Cultura Documentos
cidade
2021
UNIP EaD
Nome: xxxxxxxxxxxxx
RA: xxxxxxxxxxxxxxx
Curso: Análise e Desenvolvimento de Sistemas
Semestre: Terceiro
cidade
2021
Resumo
O Projeto Integrado Multidisciplinar proposto pela universidade UNIP Interativa, visa aplicar o
conhecimento adquirido no semestre pelas aulas de Engenharia de Software I e Linguagem e
Técnicas de Programação. Este projeto propõe o desenvolvimento de um sistema em linguagem C
para cadastro de pacientes diagnosticados com covid-19. Apresento de forma objetiva todos os
requisitos necessários para o desenvolvimento do sistema, iniciando com um breve estudo teórico
sobre engenharia de software e a linguagem de programação utilizada no sistema. Neste projeto
também será apresentado uma análise de requisitos para o sistema, apontando todas as funcionais e
não-funcionais da aplicação, e suas diferenças. Além das apresentações dos fluxogramas de dados e
as atividades desenvolvidas para a elaboração da aplicação, explicando suas funções e código fonte
do sistema.
Abstract
The Integrated Multidisciplinary Project proposed by the UNIP Interativa university, aims to apply
the knowledge acquired in the semester by the classes of Software Engineering I and Language and
Programming Techniques. This project proposes the development of a C language system for
registering patients diagnosed with covid-19. I present in an objective way all the necessary
requirements for the development of the system, starting with a brief theoretical study about software
engineering and the programming language used in the system. This project will also present an
analysis of requirements for the system, pointing out all the functional and non-functional aspects of the
application, and their differences. In addition to the presentations of the data flowcharts and the
activities developed for the elaboration of the application, explaining its functions and source code of
the system.
Sumário
1 - Introdução ............................................................................................................................................ 6
2 - Necessidade do Cliente ...................................................................................................................... 7
3 – Referencia Teórica ............................................................................................................................. 7
3.1 - Engenharia de software .................................................................................................................... 7
3.2 - Engenharia de software .................................................................................................................... 7
3.3 - Modelos de processos de Software .................................................................................................. 8
4 - Analise do Sistema............................................................................................................................ 10
4.1 - Definição de Requisitos .................................................................................................................. 10
4.1.1 - Requisitos funcionais .................................................................................................................. 10
4.1.2 - Requisitos não-funcionais ........................................................................................................... 10
5 - Codificação ........................................................................................................................................ 11
6 - Código do Sistema ............................................................................................................................ 14
7 - Conclusão .......................................................................................................................................... 16
8 - Referência ......................................................................................................................................... 17
6
1 Introdução
2 Necessidade do Cliente
3 Referencial Teórico
Criada em 1972, por Dennis Ritchie, C é uma das linguagens de programação mais populares
e tem influenciado muitas outras linguagens de programação, no final da década de 70, a linguagem
C começou a substituir a linguagem BASIC como a linguagem de programação mais utilizada.
C é uma linguagem imperativa e procedural com pontos primários em fornecer um
desenvolvimento com acesso de baixo nível à memória e baixos requerimentos de hardware,
desenvolvido também para ser utilizado como linguagem de alto nível com maior reaproveitando de
código.
É uma linguagem extremamente simples, com diversos recursos que dão maior flexibilidade
a programação, como a utilização de ponteiros e estrutura de variáveis (structs), que permitem que
dados relacionados sejam combinados e manipulados como um todo, por ser reconhecida como
linguagem estruturada permite muitas possibilidades de programação, suportando construções de
diversos loops (laços), e a criação de funções, que são blocos de construção onde pode possuir
diversos parâmetros e atividades que serão executadas no programa.
• V-Model - Parecido com o modelo cascata, mas com uma organização melhor, que
permite que se compare com outros modelos mais modernos. Principal ponto é que para cada etapa
de um lado tem uma verificação do outro, criando um gráfico no formato da letra V com 2 cascatas.
• Espiral - O modelo espiral incorpora-os de uma forma iterativa permitindo que as ideias e
o progresso sejam verificados e avaliados constantemente. Cada iteração à volta da espiral pode ser
baseada num modelo diferente e pode ter diferentes atividades. No modelo espiral para engenharia
de requisitos mostra-se que as diferentes atividades são repetidas até uma decisão ser tomada e
o documento de especificação de requisitos a ser aceito.
Modelo cascata
Fonte: https://pt.wikipedia.org/wiki/Ficheiro:Waterfall_diagram.jpg
O projeto é baseado neste modelo, que é um modelo bem definido, no qual os processos são
executados de forma sequencial. Os principais estágios do modelo cascata retratam as atividades
de desenvolvimento fundamentais, conforme é esquematizado na figura a cima.
10
4 ANALISE DO SISTEMA
software e suas restrições. O objetivo da definição dos requisitos é especificar o que o sistema
deverá fazer e determinar os critérios de validação que serão utilizados para que se possa avaliar se
• RNF01 – Usabilidade: Para garantir a usabilidade a interface do sistema possui telas de fácil
entendimento e aprendizagem, maximizando a produtividade e minimizando a taxa de erros.
• RNF02 – Disponibilidade: Para garantir a disponibilidade o sistema possui todo seu modulo
baseado em aplicações off-line, podendo ser utilizado onde e quando for necessário.
• RNF03 – Organização e Legibilidade: Para garantir a organização e legibilidade do sistema, o
código é organizado e comentado de forma a qualquer desenvolvedor com conhecimento da
linguagem de programação possa entender o código-fonte.
5 CODIFICAÇÃO
Para o desenvolvimento do software envolvido neste trabalho utilizamos o DEV C++ como IDE
(Integrated Development Environment) ou Ambiente de Desenvolvimento Integrado. Este compilador
utiliza os compiladores do projeto GNU para conseguir compilar programas baseados no sistema
operacional Microsoft Windows. Possível escrever programas utilizando-se das linguagens C e C++,
possuindo ainda suporte a toda biblioteca ANSI. A IDE foi desenvolvida utilizando-se a linguagem que
não será objetivo deste trabalho. No caso especifico de nosso projeto utilizamos a linguagem C para
toda a codificação desenvolvida no projeto. Seguem abaixo algumas características importantes da
linguagem C:
2. A função pela qual o programa começa a ser executado chama-semain.3. Após cada comando em
C deve-se colocar um; (ponto-e-vírgula).4. Um programa em C deve ser isentado para que possa ser
lido com mais facilidade.
Além disso é importante discutirmos que tipos de componentes estruturas da linguagem foram
utilizados em nosso desenvolvimento para correto entendimento dos trechos de código produzidos
em nosso trabalho. Começar discutindo os identificadores, que nada mais são do que os nomes que
daremos as nossas funções ou variáveis. Identificadores como dissemos acima são os nomes que
daremos as nossas funções ou variáveis. Para que isso seja feito de forma correta é necessário
seguir algumas regras universais que foram convencionadas para que os códigos sejam compilados
com sucesso.
É possível atribuir novos valores através de comandos de atribuição, onde altera o valor
armazenado naquela posição de memória para um novo valor durante a execução de nosso software.
Cada variável na linguagem C, assim como em outras linguagens, possuem tipos diferentes que
12
podem ser atribuídos a cada uma delas. Especificamente em C, temos alguns tipos de variáveis e
seus respectivos exemplos abaixo:
É importante notar que cada variável possui apenas, e somente um tipo. Além disso todas as
variáveis de seu programa devem ser declaradas corretamente antes de serem iniciadas com
quaisquer valores.
No caso das variáveis vimos que elas podem ter seu valor alterado ao longo do programa, caso
tenha casos onde precisar lidar com valores que não se alteram, temos um tipo especifico de
estrutura chamada CONSTANTES para este fim. Usualmente em C utiliza-se o comando #define para
se declarar constantes no início do código-fonte do seu programa. Existem ainda as variáveis do tipo
String que são utilizadas para armazenamento de um conjunto de caracteres que são declarados
sempre entre aspas duplas, ao se declarar estas variáveis é mandatório determinar a quantidade de
caracteres que esta variável será capaz de armazenar. Este comando de atribuição de um valor a
uma variável do tipo String se dá pelo comando strcpy. A função printf exibe dados na tela. Esta
função deve receber pelo menos dois parâmetros, separados por vírgula:
• String de formato que define, através de caracteres especiais, os tipos os dados a serem impressos
e suas posições na linha de impressão;
• Dado a ser impresso. Este dado pode ser qualquer um dos dados visto anteriormente.
Segue um exemplo do uso da função printf abaixo: rintf ("%s","código-Fonte"); "%s”: é a string
de formato "Código-fonte”: é o dado a ser impresso. A string de formato define quais os tipos dos
dados a serem impressos, enquanto o símbolo %s será substituído pelo dado que vem após a
vírgula. Os dados definem quais os valores a serem impressos. Em alguns casos é necessário que
uma string de formato pode ter a necessidade de definir que mais de um dado será impresso. Para
que isso seja possível, ao se utilizar a string de formato deve haver mais de um %, quantas vezes
tivermos dados a serem impressos. Neste caso, os dados devem vir após a string de formato
separados por vírgulas. É possível ainda imprimir números inteiros utilizando-se da função printf ao
se utilizar o sinalizador %d. Caso estejamos trabalhando com números reais deve-se utilizar o
sinalizador %f, no caso dos números reais é possível ainda determinar via código, de que forma o
número será exibido na tela, para isso usamos em conjunto com o %f uma determinação de quantas
casas decimais o número deve ter. Determina-se também o número total de caracteres do número a
ser impresso. por exemplo: %4.2f especifica que se quer imprimir um float com 2 casas decimais e
com um tamanho total de 4 caracteres no total. Seguem-se regras para impressão de um número
real:
13
• O número de casas decimais é sempre respeitado. Se for preciso, zeros serão acrescentados à
direita do número;
• Se a soma do número de caracteres da parte inteira, mais o ponto decimal, mais a parte fracionária,
mais um eventual sinal de menos ainda for menor do que o tamanho total especificado no formato,
então, espaços em branco serão acrescentados à esquerda da parte real do número;
• Se a soma do número de caracteres da parte inteira, mais o ponto decimal, mais a parte fracionária,
mais um eventual sinal de menos for maior do que o tamanho total especificado no formato, então,
apenas o número de casas decimais é respeitado. Ainda se tratando de números, podemos lidar com
os operadores aritméticos:
• -: sinal de menos (unário) - Maior precedência (avaliado antes);
No caso de nosso programa ainda lidamos com uma parte importante da linguagem C: as
bibliotecas. O nome e as características de cada função que fazem parte de determinada biblioteca
estão em um arquivo chamado cabeçalho, mas a implementação das funções está em um arquivo
separado. A nomenclatura e o objetivo dos cabeçalhos são comuns a diferentes implementações,
mas a organização das bibliotecas pode ser feita de forma diferente, isto significa que cada
compilador C possui sua implementação da biblioteca padrão C especifica ao seu contexto. Como os
compiladores C geralmente oferecem funcionalidades adicionais que não são especificadas pelo
ANSI C, a implementação da biblioteca padrão de um compilador tende a não funcionar com os
demais. Em nosso programa utilizamos especificamente utilizamos as bibliotecas stdio.h stdlib.h. A
biblioteca stdio.h é uma das principais e mais usadas bibliotecas em C pois é quem nos permite
interagir com a entrada e saída de dados para os programas sendo desenvolvidos, o seu nome vem
do significado de standard input and output, ou seja, padrão de entrada e saída. Ela inclui as
operações mais comuns como tratamento de entrada/saída e conjunto de caracteres. Ao contrário de
outras linguagens como COBOL, Fortran e, C não inclui palavras-chave nativas para essas tarefas, o
que significa que praticamente todos os programas desenvolvidos em C farão uso dela.
A biblioteca stdio.h por exemplo contém funções importantes como printf e scanf, ambas
amplamente usados em programas desenvolvidos em C. Já a biblioteca stdlib.h funciona como um
emulador do terminal dois temas operacionais em que você está trabalhando, caso seja Windows ele
emula todos os comandos do terminal do DOS, e caso você estiver trabalhando no Linux, quem será
emulado é o Terminal.
É através desta biblioteca que conseguimos com apenas algumas linhas de código acessar
pastas, mover diretórios e executar programas por exemplo.
14
6 Código do Sistema
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
/* Constantes */
#define T_ESTADO 10
#define T_CIDADE 30
#define T_RUA 25
#define T_CEP 10
#define T_NOME 40
#define T_TELEFONE 15
#define T_DIAGNOSTICO 500
#define T_PROBLEMA 500
/* Definições */
struct info_data
{
unsigned char dia, mes;
unsigned short ano;
};
struct info_endereco
{
char estado[T_ESTADO];
char cidade[T_CIDADE];
char rua[T_RUA];
char cep[T_CEP];
unsigned short casa;
unsigned short quadra;
};
struct dados_paciente
{
char nome[T_NOME];
unsigned char idade;
struct info_data data;
struct info_endereco endereco;
char telefone[T_TELEFONE];
char diagnostico[T_DIAGNOSTICO];
char problema[T_PROBLEMA];
};
void
pressEnter(void);
void
erroMsg(char *m);
void
mostraInfoPaciente(struct dados_paciente *p);
int
pegaInfoPaciente(struct dados_paciente *p);
int main(void)
{
struct dados_paciente paciente;
if (pegaInfoPaciente(&paciente)) {
printf("\nCadastro incompleto!\n");
printf("tchau!");
pressEnter();
return(0);
} else {
printf("\nOs dados do paciente.\n");
mostraInfoPaciente(&paciente);
}
pressEnter();
return(0);
}
void
pressEnter(void)
{
printf("\nPressione enter para continuar...");
getchar();
}
void
erroMsg(char *m)
{
printf("\n%s",m);
pressEnter();
}
void
mostraInfoPaciente(struct dados_paciente *p)
{
printf("\nFicha do paciente\n");
printf("Nome:\t%s", p->nome);
printf("Idade:\t%hhu\n", p->idade);
printf("Data de nascimento:\t%hhu\\%hhu\\%hu\n", p->data.dia, p->data.mes, p->data.ano);
}
int
pegaInfoPaciente(struct dados_paciente *p)
15
{
char str[STR_MAX], op;
do {
printf("\n\tPreencha a ficha do paciente.");
/* Pega o nome do paciente */
do {
printf("\nDigite o nome completo do paciente.\n");
fgets(str, STR_MAX, stdin);
if (strlen(str) > T_NOME) {
printf("O nome do paciente deve ser menor do que %i caracteres.",T_NOME);
pressEnter();
} else {
printf("\nO nome está correto S\\N.\nDigite 0 para voltar para o menu anterior.\n:");
scanf("%c%*c",&op);
if (op == '0')
return(1);
}
} while (strlen(str) > T_NOME || toupper(op) == 'N');
strcpy(p->nome, str);
do {
/* Pega a data de nascimente do paciente */
printf("\nDigite a data de nascimento do paciente.\n");
/* Dia */
do {
printf("\nDigite dia.\n");
fgets(str, STR_MAX, stdin);
p->data.dia = atoi(str);
if (strlen(str) > 3 || p->data.dia == 0 || p->data.dia > 31) {
erroMsg("dia invalido.");
} else {
printf("\no dia esta correta S\\N\nDigite 0 para voltar para o menu anterior.\n:");
scanf("%c%*c",&op);
if (op == '0')
return(1);
}
} while (strlen(str) > 3 || p->data.dia == 0 || p->data.dia > 31);
/* Mês */
do {
printf("\nDigite mes.\n");
fgets(str, STR_MAX, stdin);
p->data.mes = atoi(str);
if (strlen(str) > 3 || p->data.mes == 0 || p->data.mes > 12) {
erroMsg("mes invalido.");
} else {
printf("\no mes esta correta S\\N\nDigite 0 para voltar para o menu anterior.\n:");
scanf("%c%*c",&op);
if (op == '0')
return(1);
}
} while (strlen(str) > 3 || p->data.mes == 0 || p->data.mes > 12);
/* Ano */
do {
printf("\nDigite ano.\n");
fgets(str, STR_MAX, stdin);
p->data.ano = atoi(str);
if (strlen(str) > 5 || p->data.ano < 1920 || p->data.ano > 2100) {
erroMsg("ano invalido.");
} else {
printf("\no ano esta correta S\\N\nDigite 0 para voltar para o menu anterior.\n:");
scanf("%c%*c",&op);
if (op == '0')
return(1);
}
} while (strlen(str) > 5 || p->data.ano < 1920 || p->data.ano > 2100);
printf("\n%hhu\\%hhu\\%hu", p->data.dia, p->data.mes, p->data.ano);
printf("\nA data de nascimento esta correta\nS\\N:");
scanf("%c%*c",&op);
} while (toupper(op) == 'N');
mostraInfoPaciente(p);
printf("\nA ficha do paciente esta correta?\nS\\N:");
scanf("%c%*c", &op);
} while (toupper(op) != 'S');
return(0);
}
16
7 Conclusão
Durante o desenvolvimento do projeto, adquirimos inúmeros conhecimentos sobre
engenharia de software e linguagem de programação, explorando diversos modelos de processos de
software e seus requisitos, além dos conhecimentos de transição teórico-prática, com a criação do
software desenvolvido, que satisfaz as necessidades do cliente para que ele utilize o sistema de
forma fácil e pratica evitando assim preenchimentos de papeis, reduzindo o tempo de mão de obra e
minimizando a probabilidade de erros no exercício de suas atividades.
17
8 Referências
ALVES, William Pereira. C++ Builder 6: desenvolva aplicações para Windows. 2. ed.
São Paulo: Érica, 2007
MIZRAHI, Viviane Victorine. Treinamento em Linguagem C++. 2. ed. São Paulo:
Pearson Education, 2005.
MANZANO, José Augusto N. G.. Programação de Computadores com C++: guia
rápido de orientação e desenvolvimento. São Paulo: Érica, 2010
PRESSMAN, Roger S.. Engenharia de Software: uma abordagem profissional. 7 ed.
AMGH, 2011.