Just nu i M3-nätverket
Gå till innehåll

Lägga till personklass?


Greger88

Rekommendera Poster

Jag har en uppgift som går ut på att man ska skapa en personklass som innehåller förnamn, efternamn samt personnummer. Därefter ska man ange sina uppgifter och så ska man få reda på om personnummret stämmer osv.

Jag har skrivit ihop ett program som faktiskt gör detta, dock så glömde jag att man skulle ha med en personklass och jag är inte helt säker på hur jag ska fixa in en personklass här...

Tacksam för svar!

Koden:

 



using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
 
namespace Inlämningsuppgift3 

 
    public partial class Identity : Form 
    { 
        public struct Person // En struct där de datatyper som ska användas läggs till. 
        { 
            public double idok; 
            public string fname; 
            public string lname; 
            public string id; 
            public string sex; 
            public string year; 
            public string fyear; 
        } 
        public Identity() 
        { 
            InitializeComponent(); 
        } 
 
        static Person[] person = new Person[1]; // Skapar en vektor med enbart en plats, denna kommer att spara uppgifterna som matas in. 
        public Person ReadPerson()             //Metoden ReadPerson läser in samtliga uppgifter, vissa genom inmatning, andra genom att anropa andra metoder. 
        { 
            Person p = new Person(); 
            p.fname = FirstNameBox.Text;       //Förnamn läses in via textruta ett. 
            p.lname = LastNameBox.Text;      //Efternamn via ruta två. 
            p.id = SocialNumberBox.Text;        //Personnummer via ruta tre. 
            p.sex = GetGender(p);       //Kör metoden som kontrollerar könssiffran. 
            p.fyear = YTS(p);          //Kör en metod som koverterar årtalet till en string. 
            p.year = YOB(p);          //Skriver ut födelseåret. 
            p.idok = CheckID(p);     //Kontrollerar så att personnumret stämmer. 
            return p; 
        } 
 
        public static string GetGender(Person p) //GetGender avgör om könssiffran är jämnt delbar med två. 
        { 
            int a = p.id[8] - 48; 
 
            if ((a % 2) == 1) //Om nej, juridiskt kön = Man. 
            { 
                return "Man"; 
            } 
            else // Om ja, juridiskt kön = Kvinna. 
            { 
                return "Kvinna"; 
            } 
        } 
        public static string YTS(Person p) //Konverterar de två första charsen till en string. 
        { 
            char y1 = p.id[0]; 
            char y2 = p.id[1]; 
            return new string(new char[] { y1, y2 }); 
        } 
        public static string YOB(Person p) //Läser in stringen och konverterar denna till ett tal. 
        { 
            int z = int.Parse(p.fyear); ; 
            if (z < 13) // Om talet är mindre än 13 så är personen född på 2000-talet.(Nästan säkert...) 
            { 
                char y4 = p.id[0]; 
                char y5 = p.id[1]; 
                return new string(new char[] { '2', '0', y4, y5 }); 
            } 
            else //Annars är personen född på 1900-talet. 
            { 
                char y3 = p.id[0]; 
                char y4 = p.id[1]; 
                return new string(new char[] { '1', '9', y3, y4 }); 
            } 
        } 
        public static double CheckID(Person p) 
        { 
            int value = 0; 
            for (int i = 0; i < p.id.Length; i++) //Gå igenom hela personnumret för varje i. 
            { 
                int t = (p.id[i] - 48)  //Beräkna varje teckens värde genom att subtrahera 48.  
                    << (1 - (i & 1));  // Multiplicera med två varannan gång genom att skrifta ett steg åt vänster för jämna i. 
                if (t > 9) t = t - 9; // Om talet är större än 9 så får man subtrahera 9. Siffersumman blir alltid talet - 9. 
                value += t;          // Adderar talen. 
            } 
            return (value % 10);   // Returnerar resten från talet dividerat med 10. För att personnumret ska vara giltigt måste resten var 0. 
        } 
 
        private void Run_Click(object sender, EventArgs e) //Klicka på knappen och ovanstående metoder körs. 
        { 
            Results.Text = "Resultat:"; //Skriver ut resultat i den dolda rutan. 
            string a = SocialNumberBox.Text; //Läser snabbt in personnumret för att sedan avgöra dess längd.  
            if (a.Length == 10)      //Kontrollerar personnummrets längd. Om längden är 10 så är det godkänt. 
            { 
                person[0] = ReadPerson(); //Kör metoden Readperson. 
                foreach (Person p in person) 
                { 
                    if (p.idok == 0) //Om personnumret är giltigt så skriver vi ut uppgifterna. 
                    { 
                        PrintResults.Text = ("Förnamn: " + p.fname + "\n" + "Efternamn: " + p.lname + "\n" + "Juridiskt kön: " + p.sex + "\n" + "Födelseår: " + p.year); 
                    } 
                    else // Felaktigt personnummer om värdet inte är jämnt delbart med 10. 
                    { 
                        PrintResults.Text = ("Felaktigt personnummer, försök igen!"); 
                    } 
                } 
            } 
            else //Felaktigt personnummer om antalet tecken är fel. 
            { 
                PrintResults.Text = ("Felaktigt personnummer, försök igen!"); 
            } 
        }  
        
        private void Restart_Click(object sender, EventArgs e) //Startar om programmet. 
        { 
            Application.Restart(); 
        } 
        private void Exit_Click(object sender, EventArgs e) //Stänger programmet. 
        { 
            this.Close(); 
        } 
    } 
}  
 
 


 

Nu har jag fått fram det här, men jag måste få min Run_Click() att läsa in personuppgifterna från ReadPerson och som sedan skriver ut resultatet. Hur skapar jag ett Person-objekt som gör detta?

 

Så här ser det ut hittills:

 



using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
 
namespace Inlämningsuppgift3 

 
    public partial class Identity : Form 
    { 
        public Person ReadPerson()             //Metoden ReadPerson läser in samtliga uppgifter, vissa genom inmatning, andra genom att anropa andra metoder.  
        { 
            Person p = new Person(); 
            p.fname = FirstNameBox.Text;       //Förnamn läses in via textruta ett.  
            p.lname = LastNameBox.Text;      //Efternamn via ruta två.  
            p.id = SocialNumberBox.Text;        //Personnummer via ruta tre.  
            p.sex = GetGender(p);       //Kör metoden som kontrollerar könssiffran.  
            p.fyear = YTS(p);          //Kör en metod som koverterar årtalet till en string.  
            p.year = YOB(p);          //Skriver ut födelseåret.  
            p.idok = CheckID(p);     //Kontrollerar så att personnumret stämmer.  
            return p; 
        } 
 
    } 
 
    public class Person // En struct där de datatyper som ska användas läggs till.  
     
    { 
        private string _id;      
        public double idok {get{return CheckID();}}   
        public string fname {get; set;}  
        public string lname {get; set;}  
        public string id {set{_id=value;}}  
        public string sex {get{return GetGender();}}  
        public string year {get{return YOB();}}  
        public string fyear {get{return YTS();}}   
             
         
        public Identity() 
        { 
            InitializeComponent(); 
        } 
 
        Person[] person = new Person[1]; // Skapar en vektor med enbart en plats, denna kommer att spara uppgifterna som matas in.  
         
 
        public string GetGender(Person p) //GetGender avgör om könssiffran är jämnt delbar med två.  
        { 
            int a = p.id[8] - 48; 
 
            if ((a % 2) == 1) //Om nej, juridiskt kön = Man.  
            { 
                return "Man"; 
            } 
            else // Om ja, juridiskt kön = Kvinna.  
            { 
                return "Kvinna"; 
            } 
        } 
        public string YTS(Person p) //Konverterar de två första charsen till en string.  
        { 
            char y1 = p.id[0]; 
            char y2 = p.id[1]; 
            return new string(new char[] { y1, y2 }); 
        } 
        public string YOB(Person p) //Läser in stringen och konverterar denna till ett tal.  
        { 
            int z = int.Parse(p.fyear); ; 
            if (z < 13) // Om talet är mindre än 13 så är personen född på 2000-talet.(Nästan säkert...)  
            { 
                char y4 = p.id[0]; 
                char y5 = p.id[1]; 
                return new string(new char[] { '2', '0', y4, y5 }); 
            } 
            else //Annars är personen född på 1900-talet.  
            { 
                char y3 = p.id[0]; 
                char y4 = p.id[1]; 
                return new string(new char[] { '1', '9', y3, y4 }); 
            } 
        } 
        public double CheckID(Person p) 
        { 
            int value = 0; 
            for (int i = 0; i < p.id.Length; i++) //Gå igenom hela personnumret för varje i.  
            { 
                int t = (p.id[i] - 48)  //Beräkna varje teckens värde genom att subtrahera 48.   
                    << (1 - (i & 1));  // Multiplicera med två varannan gång genom att skrifta ett steg åt vänster för jämna i.  
                if (t > 9) t = t - 9; // Om talet är större än 9 så får man subtrahera 9. Siffersumman blir alltid talet - 9.  
                value += t;          // Adderar talen.  
            } 
            return (value % 10);   // Returnerar resten från talet dividerat med 10. För att personnumret ska vara giltigt måste resten var 0.  
        } 
 
    } 
 
 
        private void Run_Click(object sender, EventArgs e) //Klicka på knappen och ovanstående metoder körs.  
        { 
            PrintResults.Text = "Resultat:"; //Skriver ut resultat i den dolda rutan.  
            string a = SocialNumberBox.Text; //Läser snabbt in personnumret för att sedan avgöra dess längd.   
            if (a.Length == 10)      //Kontrollerar personnummrets längd. Om längden är 10 så är det godkänt.  
            { 
                person[0] = ReadPerson(); //Kör metoden Readperson.  
                foreach (Person p in person) 
                { 
                    if (p.idok == 0) //Om personnumret är giltigt så skriver vi ut uppgifterna.  
                    { 
                        PrintResults.Text = ("Förnamn: " + p.fname + "\n" + "Efternamn: " + p.lname + "\n" + "Juridiskt kön: " + p.sex + "\n" + "Födelseår: " + p.year); 
                    } 
                    else // Felaktigt personnummer om värdet inte är jämnt delbart med 10.  
                    { 
                        PrintResults.Text = ("Felaktigt personnummer, försök igen!"); 
                    } 
                } 
            } 
            
            else //Felaktigt personnummer om antalet tecken är fel.  
            { 
                PrintResults.Text = ("Felaktigt personnummer, försök igen!"); 
            } 
        } 
 
        private void Exit_Click_1(object sender, EventArgs e) //Stänger programmet.  
        { 
            this.Close(); 
        } 
}  


Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...