Python – Tuplas como registros

python

O exemplo de hoje ilustra um cadastro de funcionários na forma de uma lista de registros em Python.

Design-time:

print('CADASTRO')
try:
    n = int(input('Informe o número de registros (1-16): '))
    print('Dados do funcionário')
    cont = 0
    L = []
    while cont < n:
        id = int(input('Id: '))
        nome = input('Nome: ')
        sexo = input('Sexo (M/F): ')
        cargo = input('Cargo: ')
        admissao = input('Data de admissão (dd/mm/aaaa): ')
        salario = float(input('Salário (0000.00): '))
        T = id, nome, sexo, cargo, admissao, salario
        L.append(T) 
        cont += 1
        print()

    print('{:^10}'.format('Id'), end = '')
    print('{:^10}'.format('Nome'), end = '')
    print('{:^10}'.format('Sexo'), end = '')
    print('{:^10}'.format('Cargo'), end = '')
    print('{:^10}'.format('Admissão'), end = '')
    print('{:^10}'.format('Salário'))

    i = 0
    while i < n:
        j = 0
        while j < 6:
            print('{:^10}'.format(L[i][j]), end = '')
            j += 1
        print()
        i += 1
except:
    print('Valor numérico necessário!')

Runtime:

py_tuple_1

Observações:

  • O número de registros (n) e o código do registro do funcionário (id) devem ser números inteiros, enquanto o salário do funcionário (salario) deve ser número inteiro ou real (decimal, de ponto flutuante).  Para tratamento de eventuais erros foram utilizados os blocos try e except.
  • Dentro do bloco while os valores das variáveis id, nome, sexo, cargo, admissao e salario são atribuídos como elementos da tupla T que, por sua vez, é adicionada à lista L nas instruções: T = id, nome, sexo, cargo, admissao, salario e L.append(T).
  • Observe o uso da função format() para o tratamento da saída dos dados.

 

Dúvidas?

Pensamento do dia: na medida em que se aproximarem as eleições, o neoliberalismo deverá enfrentar o nazismo. Moro, Doria, Huck, a patota do Novo etc. não deverão estar juntos com o Bozo e seus milicianos.  Mas nenhuma dessas opções será boa para o trabalhador.

VBA Excel – Estruturas

excel

Uma tabela, com dados de empregados por exemplo, pode ser construída automaticamente também em VBA no Microsoft Excel usando estruturas, registros ou tipos definidos pelo usuário.  Este exemplo usa um formulário (UserForm frmFicha).  Os dados do cadastro são mostrados em uma planilha do Excel.

Design-time:

* Pasta de Trabalho
Private Sub Workbook_Open()
    Sheets(1).Cells.ClearContents
    Sheets(1).Range("A1").Select
    Selection.Value = "Id"
    ActiveCell.Offset(0, 1).Select
    Selection.Value = "Nome"
    ActiveCell.Offset(0, 1).Select
    Selection.Value = "Sexo"
    ActiveCell.Offset(0, 1).Select
    Selection.Value = "Cargo"
    ActiveCell.Offset(0, 1).Select
    Selection.Value = "Data de Admissão"
    ActiveCell.Offset(0, 1).Select
    Selection.Value = "Salario"
    Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select
    Application.Visible = False
    frmFicha.Show
End Sub

* Módulo
Type TEmpregado
    id As Integer
    nome As String
    admissao As Date
    sexo As String
    cargo As String
    salario As Currency
End Type
Public TCadastros() As TEmpregado
Public iCont As Integer

* Formulário
Private Sub cmdIncluir_Click()
    If txtId.Text <> "" And txtNome.Text <> "" And txtSexo.Text <> "" _
    And txtCargo.Text <> "" And txtData.Text <> "" And txtSalario.Text <> "" Then
        On Error GoTo errorhandler
        ReDim TCadastros(256)
        With TCadastros(cont)
            .id = CInt(txtId.Text)
            .nome = txtNome.Text
            .sexo = txtSexo.Text
            .cargo = txtCargo.Text
            .admissao = CDate(txtData.Text)
            .salario = CCur(txtSalario.Text)
        End With
        Selection.Value = TCadastros(cont).id
        ActiveCell.Offset(0, 1).Select
        Selection.Value = TCadastros(cont).nome
        ActiveCell.Offset(0, 1).Select
        Selection.Value = TCadastros(cont).sexo
        ActiveCell.Offset(0, 1).Select
        Selection.Value = TCadastros(cont).cargo
        ActiveCell.Offset(0, 1).Select
        If IsDate(TCadastros(cont).admissao) Then
                Selection.Value = TCadastros(cont).admissao
        Else
                ActiveCell.Offset(0, 1).Select
        End If
        ActiveCell.Offset(0, 1).Select
        Selection.Value = TCadastros(cont).salario
        ActiveCell.Offset(0, 1).Select
        Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select
        cont = cont + 1
        Application.Visible = True
        txtSalario.Text = ""
        txtData.Text = ""
        txtCargo.Text = ""
        txtSexo.Text = ""
        txtNome.Text = ""
        txtId.Text = ""
        txtId.SetFocus
    End If
    Exit Sub
errorhandler:
    MsgBox "Somente inteiros, por favor!"
    Unload Me
    ThisWorkbook.Close savechanges = False
    Application.Quit
End Sub

Private Sub cmdSair_Click()
    Unload Me
    ThisWorkbook.Close savechanges
    Application.Quit
End Sub

Runtime:

excel_struct_0

Observações:

Como no caso do QB64, as estruturas em BASIC e os registros em Pascal/Object Pascal são implementados com as instruções Type/End Type e type record/end.

Feliz 2020, se houver amanhã.  E isto é uma referência, sim.  Pense.  Ainda não é proibido.

C# – Estruturas

csharp

Da mesma forma que fizemos com QB64, vamos repetir o exemplo da tabela (matriz) de alunos e notas, mas desta vez usaremos estruturas, ou registros, que são os tipos definidos pelo usuário.

Declaramos a estrutura TAluno com 2 membros: registromedia. Como não consegui usar nem Array nem ArrayList como membro ou campo da estrutura,  declarei separadamente um array para as notas (nota).  Em compensação, defini um dos membros da estrutura TAluno, registro, como outra estrutura (TId, com os campos nome e sobrenome).

Design-time:

/*C:\Windows\Microsoft.NET\Framework64\v4.0.30319
csc Notas.cs
Notas
*/
using System;
class Notas
{
	public struct Tid{
		public string nome;
		public string sobrenome;
	}
	public struct Taluno{
		public Tid registro;
		public float media;
	}
	public static void Main(){	
		int maxAlunos, maxNotas, i, j;
		float somaMedia, somaNota, mediaClasse;
		somaMedia = 0;		

		Console.WriteLine("Informe numero de alunos (1-16): ");
		maxAlunos = int.Parse(Console.ReadLine());
		Console.WriteLine("Informe numero de notas (1-4): ");
		maxNotas = int.Parse(Console.ReadLine());

		Taluno[] TAcadastro = new Taluno[maxAlunos];
		float[,] nota = new float[maxAlunos, maxNotas];
	//data input
		for(i=0;i<maxAlunos;i++){
			somaNota = 0;
			Console.Write("Nome do aluno {0}:\t",i+1);
			TAcadastro[i].registro.nome = Console.ReadLine();
			Console.Write("Sobrenome do aluno {0}:\t", i+1);
			TAcadastro[i].registro.sobrenome = Console.ReadLine();
			for(j=0;j<maxNotas;j++){
				Console.Write("Nota {0}:\t", j+1);
				nota[i,j] = float.Parse(Console.ReadLine());
				somaNota = somaNota + nota[i,j];
			}
			TAcadastro[i].media = somaNota / maxNotas;
			somaMedia = somaMedia + TAcadastro[i].media;			
		}
		mediaClasse = somaMedia / maxAlunos;
	//data output
		Console.Write("Aluno\t\t");
		for(j=1;j<=maxNotas;j++){
			Console.Write("Nota {0}\t", j);
		}
		Console.WriteLine("Media");
		for(i=0;i<maxAlunos;i++){
			Console.Write(TAcadastro[i].registro.nome);
			Console.Write(TAcadastro[i].registro.sobrenome);
			for(j=0;j<maxNotas;j++){
				Console.Write("\t"+ nota[i,j]);	
			}
			Console.WriteLine("\t" + TAcadastro[i].media);
		}
		Console.Write("Media da classe:\t"+ mediaClasse);
	}
}

 

Runtime:

cs_struct_0

Observações:

Comparando-se com o exercício anterior, o array de estrutura TAcadastro substitui os arrays nome e media, enquanto o array nota foi declarado e inicializado após a definição das variáveis maxAlunos (antes a) e maxNotas (antes n).

Após tentar em vão usar Array e ArrayList como campo de estrutura, desisti de tentar fazê-lo com List<T>.  Minha dúvida de hoje: seria possível?

Minha única certeza hoje: enquanto o Brasil está subserviente aos Estados Unidos desde o golpe de 2016, os Estados Unidos têm sido subservientes a Israel desde 1948.