Ajuda em Trabalho de C# (Classes)

THOR

Power Member
Boas,

Estou a realizar um trabalho final para uma disciplina de C#... É um simples programa que serve de sistema informático de uma clínica...

Com ele podemos introduzir e listar os funcionários da clínica, introduzir e listar os utentes, e ainda marcar e listar consultas...

Tudo isto é feito através do uso de Classes...

Os funcionários podem ser introduzidos no próprio código:

Funcionario[] listaFuncionarios = new Funcionario[4];

listaFuncionarios[0] = new Funcionario(1, "Rafael", 247653425, 100);
listaFuncionarios[1] = new Funcionario(2, "Tiago", 1376343425, 200);
listaFuncionarios[2] = new Funcionario(3, "Gonçalo", 123543628, 300);
listaFuncionarios[3] = new Funcionario(4, "Silvestre", 985736524, 400);

Mas os utentes são inscritos/introduzidos pelo utilizador através do programa aberto... E a minha dúvida está em como ler os dados introduzidos pelo utilizador e , com eles, criar um novo objeto da classe em questão...

Alguém consegue dar uma ajuda?


Cumps
 
Erm, isso está muito incompleto. És tu que tens que fazer a parte que interage com o utilizador? Se sim, como? E já está alguma coisa feita? Se podes enfiar funcionários directamente no código, porque não os dados do utilizador também?
 
"És tu que tens que fazer a parte que interage com o utilizador?"

R: Sim. Essa parte sei fazer... Só preciso saber como é que, consigo ler dados que o utilizador escreve diretamente para dentro de um novo objeto de uma classe.

"E já está alguma coisa feita?"

R: Sim. As classes e a base do programa em si... Menu, métodos, etc... Falta só a parte de introduzir utentes e marcar consultas.

"Se podes enfiar funcionários directamente no código, porque não os dados do utilizador também?"

R: Porque é assim que a prof quer que seja feito :P Senão já estava acabado :V

--> Se quiseres, posso enviar-te o programa para dares uma vista de olhos :P

Cumps
 
Isso é uma console application certo?

Podes ler da consola os dados introduzidos pelo utilizador. Com esses dados vais fazendo set às propriedades das classes
 
Sim, é uma console application (Estou a usar o Visual Studio 2015).


"Podes ler da consola os dados introduzidos pelo utilizador."

Sim, exato.

"Com esses dados vais fazendo set às propriedades das classes"

Como assim?

Até agora o mais aproximado que tenho àquilo que deve ser o suposto é isto:

int num;
string nome;
int numcontr;
int numsegsoc;


Console.Write("Quantos utentes deseja registar?:");
int count = int.Parse(Console.ReadLine());

for (num = 0; num < count; num++)
{
Utente[] Utentes = new Utente[count];

Console.WriteLine("Nome do utente: ");
nome = Console.ReadLine();

Console.Write("Número de Contribuinte ");
numcontr = int.Parse(Console.ReadLine());

Console.Write("Número de Segurança Social ");
numsegsoc = int.Parse(Console.ReadLine());


Utentes[num] = new Utente(num, nome, numcontr, numsegsoc);

}


Agora não sei é se será mais fácil talvez usar lists em vez de arrays...

Cumps
 
Uma lista é preferível a um array porque nâo sabes a dimensão que o array necessita. (EDIT: Só agora vi que lês primeiro o número de utentes a criar).

Código:
List<Utente> lstUtentes = new List<Utente>();

Console.WriteLine("Nome do utente: ");
nome = Console.ReadLine();

Console.Write("Número de Contribuinte ");
numcontr = int.Parse(Console.ReadLine());

Console.Write("Número de Segurança Social ");
numsegsoc = int.Parse(Console.ReadLine());

Utente u = new Utente(lstUtentes.count, nome, numcontr, numsegsoc);

lstUtentes.Add(u);

Algo deste género não funciona?
 
Obrigado pela dica, já vou testar com listas :)

Mas antes disso esclareçam-me uma coisa....

Eu tenho um método "inscrever utentes" com o seguinte código:

public static void inscreverUtentes()
{
int num;
string nome;
int numcontr;
int numsegsoc;
bool quotas=true;


int count = 1;




for (num = 0; num < count; num++)
{
Utente[] Utentes = new Utente[100];

Console.WriteLine("Nome do utente: ");
nome = Console.ReadLine();

Console.Write("Número de Contribuinte ");
numcontr = int.Parse(Console.ReadLine());

Console.Write("Número de Segurança Social ");
numsegsoc = int.Parse(Console.ReadLine());


Utentes[num] = new Utente(num, nome, numcontr, numsegsoc, quotas);



subMenu();
}

}

E depois tenho outro método que uso para listar os dados dos utentes:

public static void listarUtentes()
{

foreach (Utente U in Utentes)
Console.WriteLine(U.ToString());
}

O problema é que não sei como aceder no método listarUtentes ao array criado no outro método...

Diz: "The name "Utentes" is not available in the current context"

Como resolvo isto?

Se usar lists, a lógica é a mesma?

Cumps
 
Vai acontecer o mesmo se usares listas sim.

Se crias uma instância dentro de um método/ciclo/... essa instância só vai existir nesse scope.

Podes declarar o array de utentes fora do método inscreverUtentes. Se o método listarUtentes estiver na mesma classe que o inscreverUtentes já consegues aceder.

Porque estás a declarar todos os métodos como static?
 
Podes declarar o array de utentes fora do método inscreverUtentes. Se o método listarUtentes estiver na mesma classe que o inscreverUtentes já consegues aceder.

Porque estás a declarar todos os métodos como static?

Ao declarar o Array fora do método, continava a não conseguir usá-lo no método listarUtentes... Acabei por perceber que tinha a ver com a tal questão dos métodos serem static... removi o static dos métodos, mas agora não consigo chamar o método Menu() dentro do main porque o Main tem de ser estático...

smh

Como resolvo isto?
 
Última edição:
namespace ProjetoFinal_POO
{
class Clinica
{
Utente[] listaUtentes = new Utente[100];
private static object n;

public void inscreverUtentes()
{
int num;
string nome;
int numcontr;
int numsegsoc;
bool quotas=true;

//Console.Write("Quantos utentes deseja registar?:");
//int count = int.Parse(Console.ReadLine());

int count = 1;

// var newPersons = new List<Persons>count);


for (num = 0; num < count; num++)
{



Console.WriteLine("Nome do utente: ");
nome = Console.ReadLine();

Console.Write("Número de Contribuinte ");
numcontr = int.Parse(Console.ReadLine());

Console.Write("Número de Segurança Social ");
numsegsoc = int.Parse(Console.ReadLine());


listaUtentes[num] = new Utente(num, nome, numcontr, numsegsoc, quotas);



subMenu();
}

}

public void listarUtentes()
{

foreach (Utente U in listaUtentes)
Console.WriteLine(U.ToString());
}

void Funcionários()
{

//Inserir dados dos Funcionários

Funcionario[] listaFuncionarios = new Funcionario[4];

listaFuncionarios[0] = new Funcionario(1, "Rafael", 247653425, 100);
listaFuncionarios[1] = new Funcionario(2, "Tiago", 1376343425, 200);
listaFuncionarios[2] = new Funcionario(3, "Gonçalo", 123543628, 300);
listaFuncionarios[3] = new Funcionario(4, "Silvestre", 985736524, 400);

//Mostrar dados dos Funcionários
Console.WriteLine("Número | Nome | Contribuinte | Seg. Social");

foreach (Funcionario F in listaFuncionarios)
Console.WriteLine(F.ToString());


//Inserir dados dos Médicos

Medico M1 = new Medico(1, "Álvaro", 908756478, 500, 125);
Medico M2 = new Medico(2, "Vitor", 947636458, 600, 127);


//Mostrar dados dos Médicos

M1.Mostrar();
M2.Mostrar();


//Chamar subMenu
subMenu();

}

void Menu()
{

int menu = 0;

Console.WriteLine("\n MENU \n");
Console.WriteLine("1 - Listar dados dos Funcionários ");
Console.WriteLine("2 - Listar dados dos Utentes: ");
Console.WriteLine("3 - Inscrever Utente");
Console.WriteLine("4 - Marcar Consulta");


Console.WriteLine("\nEscolha uma opcao: ");
menu = Convert.ToInt32(Console.ReadLine());

switch (menu)
{
case 1:
Console.Clear();
Console.WriteLine("Dados dos Funcionários:");
Funcionários();
break;
case 2:
Console.Clear();
Console.WriteLine("Dados dos utentes:");

//Chamar subMenu
subMenu();
break;
case 3:
Console.Clear();
Console.WriteLine("Inscrever novo utente");
inscreverUtentes();
break;
case 4:
Console.Clear();
Console.WriteLine("Marcar Consulta");

//Chamar subMenu
subMenu();
break;
default:
Console.Clear();
Console.WriteLine("Opção Inválida!");
System.Threading.Thread.Sleep(1000);
Console.Clear();
Menu();
break;
}
}
void subMenu()
{
int menu = 0;

Console.WriteLine("--------------------");

Console.WriteLine("1 - Voltar ao Menu ");
Console.WriteLine("2 - Sair ");

Console.WriteLine("--------------------");


Console.WriteLine("\nEscolha uma opcao: ");
menu = Convert.ToInt32(Console.ReadLine());

switch (menu)
{
case 1:
Console.Clear();
Menu();
break;
case 2:
Environment.Exit(0);
break;
default:
Console.Clear();
Console.WriteLine("Opção Inválida!");
System.Threading.Thread.Sleep(1000);
Console.Clear();
Funcionários();
break;
}
}

static void Main(string[] args)
{
Menu();
//Console.WriteLine(F1.ToString());
Console.WriteLine();
Console.ReadKey();

}
}
}
 
Obrigado pelo tempo todo que já "gastaste" a olhar para o meu código :P

Agora já corre o programa, porém se introduzir dados no método InscreverUtentes e depois usar o método listarUtentes para ver o utente que inseri antes no array, não aparece nada....

Cumps
 
Ok, aí está:

Estava agora a experimentar com listas mas "não funciona" na mesma

Código:
namespace ProjetoFinal_POO
{
    class Clinica
    {

        public Clinica()
        { }

        //Utente[] listaUtentes = new Utente[100];
        List<Utente> lstUtentes = new List<Utente>();

        public void inscreverUtentes()
        {
            //int num;
            string nome;
            int numcontr;
            int numsegsoc;
            bool quotas=true;

           //usando listas

            Console.WriteLine("Nome do utente: ");
            nome = Console.ReadLine();

            Console.Write("Número de Contribuinte ");
            numcontr = int.Parse(Console.ReadLine());

            Console.Write("Número de Segurança Social ");
            numsegsoc = int.Parse(Console.ReadLine());

            Utente u = new Utente(lstUtentes.Count, nome, numcontr, numsegsoc, quotas);

            lstUtentes.Add(u);


            //usando arrays

            //for (num = 0; num < 1; num++)
            //{

            //    Console.WriteLine("Nome do utente: ");
            //    nome = Console.ReadLine();

            //    Console.Write("Número de Contribuinte ");
            //    numcontr = int.Parse(Console.ReadLine());

            //    Console.Write("Número de Segurança Social ");
            //    numsegsoc = int.Parse(Console.ReadLine());
         
            //    listaUtentes[num] = new Utente(num, nome, numcontr, numsegsoc, quotas);

       

                subMenu();
           

        }

        public void listarUtentes()
        {

            foreach (Utente U in lstUtentes)
                Console.WriteLine(U.ToString());
        }

        void Funcionários()
        {

            //Inserir dados dos Funcionários

            Funcionario[] listaFuncionarios = new Funcionario[4];

            listaFuncionarios[0] = new Funcionario(1, "Rafael", 247653425, 100);
            listaFuncionarios[1] = new Funcionario(2, "Tiago", 1376343425, 200);
            listaFuncionarios[2] = new Funcionario(3, "Gonçalo", 123543628, 300);
            listaFuncionarios[3] = new Funcionario(4, "Silvestre", 985736524, 400);

            //Mostrar dados dos Funcionários
            Console.WriteLine("Número | Nome | Contribuinte | Seg. Social");

            foreach (Funcionario F in listaFuncionarios)
                Console.WriteLine(F.ToString()); 


            //Inserir dados dos Médicos

            Medico M1 = new Medico(1, "Álvaro", 908756478, 500, 125);
            Medico M2 = new Medico(2, "Vitor", 947636458, 600, 127);


            //Mostrar dados dos Médicos

            M1.Mostrar();
            M2.Mostrar();


            //Chamar subMenu
            //subMenu();

        }

         void Menu()
        {

            int menu = 0;

            Console.WriteLine("\n MENU \n");
            Console.WriteLine("1 - Listar dados dos Funcionários ");
            Console.WriteLine("2 - Listar dados dos Utentes");
            Console.WriteLine("3 - Inscrever Utente");
            Console.WriteLine("4 - Marcar Consulta");
            Console.WriteLine("5 - Sair");
     
            Console.WriteLine("\nEscolha uma opcao: ");
            menu = Convert.ToInt32(Console.ReadLine());

            switch (menu)
            {
                case 1:
                    Console.Clear();
                    Console.WriteLine("Dados dos Funcionários:");
                    Funcionários();
                    break;
                case 2:
                    Console.Clear();
                    Console.WriteLine("Dados dos utentes:");

                    //Chamar subMenu
                    subMenu();
                    break;
                case 3:
                    Console.Clear();
                    Console.WriteLine("Inscrever novo utente");
                    inscreverUtentes();
                    break;
                case 4:
                    Console.Clear();
                    Console.WriteLine("Marcar Consulta");

                    //Chamar subMenu
                    subMenu();
                    break;
                case 5:
                    Environment.Exit(0);
                    break;
                default:
                    Console.Clear();
                    Console.WriteLine("Opção Inválida!");
                    System.Threading.Thread.Sleep(1000);
                    Console.Clear();
                    Menu();
                    break;
            }       
        }
         void subMenu()
        {
            int menu = 0;

            Console.WriteLine("--------------------");

            Console.WriteLine("1 - Voltar ao Menu ");
            Console.WriteLine("2 - Sair ");

            Console.WriteLine("--------------------");


            Console.WriteLine("\nEscolha uma opcao: ");
            menu = Convert.ToInt32(Console.ReadLine());

            switch (menu)
            {
                case 1:
                    Console.Clear();
                    Menu();
                    break;
                case 2:
                    Environment.Exit(0);
                    break;
                default:
                    Console.Clear();
                    Console.WriteLine("Opção Inválida!");
                    System.Threading.Thread.Sleep(1000);
                    Console.Clear();
                    Funcionários();
                    break;
            }
        }

     static void Main(string[] args)
        {
            Clinica C1 = new Clinica();

            C1.Menu();
            Console.WriteLine();
            Console.ReadKey();

        }
    }
}
 
Se eu puser isto :

foreach (Utente U in lstUtentes)
Console.WriteLine(U.ToString());

dentro do método de inscreverUtentes já mostra os utentes inscritos... mas não é assim que é suposto funcionar... O utilizador tem de poder ver os utentes inscritos a qualquer momento... sem ter de inscrever um novo

PS: Já percebi o erro... :facepalm:
 
Última edição:
Back
Topo