I am doing a census system but when it comes to calling, for example, the texts that were stored in the Sex variable, I don't know how it can be done, since in my menu I have an option to display only the data that has sex M or F (male and female)
Instructions of what to do menus:
- The statistical option by male gender should display to the user all those registered persons of male gender. At the bottom of the screen, display the total number of registered persons.
- The statistical option by female gender should display to the user all those people registered as female. At the bottom of the screen, display the total number of people registered.
- Finally, option 5 must ask the user for an age and, according to the entered age, those people registered with said age must be displayed. At the end of its screen, all the people registered with said age must be displayed.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace CENSOPOBLACIONAL_DANIELRIVAS
{
class Program
{
static void Main(string[] args)
{
menuprincipal();
}
static void menuprincipal()
{
int op;
String nombre;
Console.Write("Por favor ingrese su nombre: ");
nombre = Console.ReadLine();
Console.Clear();
Console.WriteLine("Bienvenido usuario/a: " + nombre);
Console.WriteLine(" ");
Console.WriteLine(" Menú principal: ");
Console.WriteLine("--------------------------------------");
Console.WriteLine("| 1. Registrar Censo |");
Console.WriteLine("| 2. Visualizar Censo |");
Console.WriteLine("| 3. Estadística por Genero Masculino |");
Console.WriteLine("| 4. Estadística por Genero Femenino |");
Console.WriteLine("| 5. Estadística por Edad |");
Console.WriteLine("| 6. Salir |");
Console.WriteLine("|-------------------------------------|");
Console.WriteLine(" ");
Console.Write("Elija una opción para continuar: ");
op = int.Parse(Console.ReadLine());
switch (op)
{
case 1: registrar_censo(); break;
case 2: visualizar_censo(); break;
case 3: estadistica_xgeneromasculino(); break;
case 4: estadistica_xgenerofemenino(); break;
case 5: estadistica_xedad(); break;
case 6: salir(); break;
default: Console.WriteLine("Opcion Incorrecta, verifique"); Console.ReadKey();
menuprincipal();
break;
}
static void registrar_censo()
{
Console.Clear();
int idCenso,edad;
String Nombre_completo, direccion, genero;
Console.WriteLine(" "); idCenso = functionCorrelativoCENSO();
StreamWriter archivo_registrocenso = File.AppendText("RegistoCenso.txt");
Console.WriteLine("El correlativo del Censo actual es: " + idCenso);
Console.WriteLine(" ");
Console.WriteLine("Ingrese el Nombre completo del censado (Sin caracteres especiales)");
Console.Write("Nombre: ");
Nombre_completo = Console.ReadLine();
Console.WriteLine(" ");
Console.WriteLine("Ingrese La dirección de la casa (Sin caracteres especiales (-,/,',´,æ,ñ,etc)");
Console.Write("Direccion: ");
direccion = Console.ReadLine();
Console.WriteLine(" ");
Console.WriteLine("Ingrese el genero del censado (M = Masculino, F = Femenino)");
Console.Write("Genero (M o F): ");
genero = Console.ReadLine();
Console.WriteLine(" ");
Console.WriteLine("Ingrese la edad del censado (Sólo el número, ej: 1-120)");
Console.Write("Edad: ");
edad = Convert.ToInt32(Console.ReadLine());
archivo_registrocenso.Write(idCenso + " | ");
archivo_registrocenso.Write(Nombre_completo + " | ");
archivo_registrocenso.Write(direccion + " | ");
archivo_registrocenso.Write(genero + " | ");
archivo_registrocenso.Write(edad + " | ");
archivo_registrocenso.WriteLine();
archivo_registrocenso.Close();
Console.WriteLine(" ");
Console.WriteLine("Datos ingresados guardados con éxito");
salir();
}
static void visualizar_censo()
{
Console.Clear();
Console.WriteLine("Se recomienda maximizar la pantalla para poder visualizar los datos correctamente");
Console.WriteLine("Si ya maximizó la pantalla presione cualquier tecla para continuar...");
Console.ReadKey();
Console.Clear();
string rutaCompleta = @"RegistoCenso.txt";
string line = "";
try
{
using (StreamReader leer_archivoCENSO = new StreamReader("RegistoCenso.txt"))
{
while ((line = leer_archivoCENSO.ReadLine()) != null)
{
Console.WriteLine(" ");
Console.WriteLine(" idCenso | Nombre | Dirección | Género | Edad");
Console.WriteLine("---------------------------------------------------------------------------------------------------");
Console.WriteLine(line);
Console.WriteLine(" ");
}
leer_archivoCENSO.Close();
}
}
catch (Exception)
{
Console.WriteLine("El archivo no se puede leer, verifique...");
}
Console.WriteLine(" ");
Console.Write("Si desea terminar la visualización del sistema presione una tecla...");
Console.ReadKey();
salir();
}
static void estadistica_xgeneromasculino()
{
Console.Clear();
Console.WriteLine(" ");
}
static void estadistica_xgenerofemenino()
{
Console.Clear();
Console.WriteLine(" ");
}
static void estadistica_xedad()
{
Console.Clear();
Console.WriteLine(" ");
}
static void salir()
{
Console.Clear();
Console.WriteLine(" ");
String op;
Console.Write("¿Que desea hacer? (salir / empezar): ");
op = Console.ReadLine();
if (op.Equals("salir"))
{
Console.Clear();
Console.Write("Presione una tecla para salir...");
Console.ReadKey();
}
else if(op.Equals("empezar"))
{
Console.Clear();
menuprincipal();
}
}
static int functionCorrelativoCENSO()
{
int idCenso;
String cadena;
try
{
StreamReader leer_archivoCENSO = File.OpenText("RegistoCenso.txt");
idCenso = 1;
cadena = leer_archivoCENSO.ReadLine();
while (cadena != null)
{
idCenso = idCenso + 1;
Console.WriteLine(" ");
cadena = leer_archivoCENSO.ReadLine();
}
leer_archivoCENSO.Close();
return idCenso;
}
catch
{
return 1;
}
}
}
}
}
You don't have to work the file line by line iterating it while you read it, there are more practical ways, such as the use of
File.ReadAllLines()
then you could do
With the help of
linq
you can work the lines applying onesplit
of each data and filter it, all in the same operationThen you only show the data, if you want to know the number of records you count them using
For the option
F
it is the same, you only change thewhere
and for the age the same, you only change the position where the data is and convert it to numeric to be able to compare