मैं C # में एक ATM सिम्युलेटर बनाने की कोशिश कर रहा हूं और मैं लॉग इन के साथ फंस गया हूं। मैं उपयोगकर्ता के रूप में परिभाषित एक वर्ग का उपयोग कर रहा हूं जिसे मैंने निम्न रूप से परिभाषित किया है:

public class User
    {
        public string userName { get; set; }
        public string password { get; set; }
        public int savingsAcct { get; set; }
        public int checkAcct { get; set; }
    }

मैंने अपनी कक्षा के तीन उदाहरण बनाए हैं, जिन तीन खातों का मैं उपयोग कर रहा हूँ। तो मैं सोच रहा था कि मैं एक दो आयामी सरणी कैसे बना सकता हूं जो तार और स्याही दोनों को स्वीकार करेगा।

मुझे लगता है कि मैं लॉग के लिए एक दो आयामी सरणी का उपयोग कर सकता हूं क्योंकि मैं सरणी को पार करने के लिए लूप के लिए उपयोग कर सकता हूं और यह देखने के लिए प्रत्येक खाते के उपयोगकर्ता नाम और पासवर्ड की जांच कर सकता हूं कि क्या वे मेल खाते हैं। मुझे पता है कि मैं एक डेटा बेस या कुछ और का उपयोग कर सकता हूं, लेकिन मैं अभी भी C # के लिए अपेक्षाकृत नया हूं, इसलिए मैं कुछ कुशल नहीं देख रहा हूं, मैं बस कुछ काम की तलाश कर रहा हूं। कोई भी सहायताकाफी प्रशंसनीय होगी।

0
Sebastian 28 नवम्बर 2015, 01:30

5 जवाब

सबसे बढ़िया उत्तर

जैसा कि आप अपने User ऑब्जेक्ट्स को स्टोर करना चाह रहे हैं, फिर उन्हें किसी प्रारूप में स्ट्रिंग / इंट कॉम्बो में असहज रूप से निचोड़ने की कोशिश करने के बजाय उन्हें उस प्रारूप में रखें। तो आपको 3 उपयोगकर्ता ऑब्जेक्ट्स सीनी देता है:

var bob = new User { userName = "Bob" };
var alice = new User { userName = "Alice" };
var marvin = new User { userName = "Marvin" };

आइए, उन्हें List<> में डालते हैं एक >:

var users = new List<User> { bob, alice, marvin };

और अब आप अपनी इच्छानुसार इसके चारों ओर लूप कर सकते हैं:

foreach(var user in users)
{
    Console.WriteLine(user.userName);
}

और यदि आप एक विशिष्ट वस्तु ढूंढना चाहते हैं, तो आप इसे जल्दी प्राप्त कर सकते हैं:

var user = users.SingleOrDefault(u => u.userName = "Bob");
if (user != null)
{
    //We found a user called Bob
}

या यहां तक कि विशेष रूप से उपयोगकर्ता नाम और पासवर्ड की जांच करें:

var userIsValid = users.Any(u => u.userName = "Bob" && u.password = "secret");
0
DavidG 27 नवम्बर 2015, 22:56

आपको वास्तव में डेटाबेस के साथ काम करने के कुछ मूल बातें सीखना चाहिए। आपका User वर्ग कुछ ऐसा है जिसे मॉडल कहा जाता है और जिसे आप ढूंढ रहे हैं वह संग्रह है।

सबसे पहले मैं प्रत्येक वस्तु की पहचान करना आसान बनाने के लिए id फ़ील्ड जोड़ने की सलाह दूंगा (हालांकि यह वैकल्पिक है):

public class User
{
    public int id { get; set; }
    public string userName { get; set; }
    public string password { get; set; }
    public int savingsAcct { get; set; }
    public int checkAcct { get; set; }
}

और आप List<User> का उपयोग कर सकते हैं:

List<User> users = new List<User>()
{
   new User() { id = 0, userName = "Alex", etc... }
   new User() { id = 1, userName = "Joshua", etc... }
   new User() { id = 2, userName = "Phil", etc... }
};

विशिष्ट उपयोगकर्ता नाम वाले उपयोगकर्ता को खोजने के लिए आपको यहां LINQ का उपयोग करना होगा:

//                returns null if no such user is found
User alex = users.FirstOrDefault(u => u.userName == "Alex");

कभी-कभी List<T> की तुलना में Dictionary<TKey, TValue> का उपयोग करना अधिक उपयुक्त होता है:

Dictionary<string, User> users = new Dictionary<string, User>()
{
   { "Alex", new User() { id = 0, userName = "Alex", etc... } },
   { "Joshua", new User() { id = 1, userName = "Joshua", etc... } },
   { "Phil", new User() { id = 2, userName = "Phil", etc... } },
};

फिर आप इंडेक्सर की मदद से उपयोगकर्ताओं को उनके नाम से एक्सेस कर सकते हैं:

User alex = users["Alex"];
2
Fabjan 27 नवम्बर 2015, 23:32

यह एक कार्यशील उदाहरण दिखाता है, लेकिन आपको अपने कोड में मालिश करने की आवश्यकता होगी:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    public class User
    {
        public string userName { get; set; }
        public string password { get; set; }
        public int savingsAcct { get; set; }
        public int checkAcct { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // here you'll take the user and password from the form
            string userNameEnteredIntoScreen = "???";
            string passwordEnteredIntoScreen = "???";

            // build list of valid users (amend to suit)
            var users = new List<User>();
            users.Add(new User
            {
                userName = "user1",
                password = "abc",
                savingsAcct = 1,
                checkAcct = 2,
            });
            users.Add(new User
            {
                userName = "user2",
                password = "xyz",
                savingsAcct = 3,
                checkAcct = 4,
            });

            // then to check if they're valid
            var user = users.SingleOrDefault(u =>
                u.userName == userNameEnteredIntoScreen &&
                u.password == passwordEnteredIntoScreen
                );

            if (user != null)
            {
                // the user and password was valid, and 'user' variable
                // now contains the details of the user
            }
        }
    }
}
1
Will 27 नवम्बर 2015, 22:55

जैसा कि टिप्पणियों में स्पष्ट किया गया है, आप एक संग्रह की तलाश में हैं जो आपके आवेदन में User वस्तुओं को संग्रहीत कर सके।

यदि आपको संग्रह की सामग्री को बदलने में सक्षम होने की आवश्यकता है, तो एक List<T> एक अच्छा विकल्प है - इसका एक निश्चित आकार नहीं है, इसलिए इसमें वस्तुओं को जोड़ना और निकालना आसान है।

List<User> _allUsers = new List<User>();
_allUsers.Add(/* user object */); //populate the list with Users using .Add()

foreach (var user in _allUsers)
{
    if(user.userName == someInputVariable && user.passWord == someOtherInputVariable)
    {
        ...
    }
}

के लिए MSDN प्रलेखन List<T>

आप User के 1-आयामी सरणी का भी उपयोग कर सकते हैं, लेकिन मुझे लगता है कि आप जो करने की कोशिश कर रहे हैं, उसके लिए अधिक समझ में आता है, और किसी ऐसे व्यक्ति के साथ काम करना बहुत आसान है जो अभी शुरू कर रहा है भाषा सीखें।

0
E. Moffat 27 नवम्बर 2015, 22:58

C # में, आप दो अलग-अलग डेटा प्रकारों के साथ दो आयामी सरणी नहीं बना सकते हैं, आपके मामले में, int और string। आप केवल एक ही डेटा प्रकार के दो आयामी सरणी बना सकते हैं।

यदि आपको दो डेटा प्रकार रखने के लिए डेटा संरचना की आवश्यकता होती है, तो आप एक शब्दकोश जोड़े का उपयोग कर सकते हैं।

//e.g.
Dictionary<int, string> data = new Dictionary<int, string>
{ 
   {1, "value 1"},
   {2, "value 2"},
   {3, "value 3"}
};


//With your POCO can create a Dictionary as below
Dictionary<int, User> data = new Dictionary<int, User>
{ 
   {1, new User{ userName = "username1", password = "password1", savingsAcct  = 1,checkAcct = 1 }},
   {2, new User{ userName = "username2", password = "password2", savingsAcct  = 1,checkAcct = 2 }},
   {3, new User{ userName = "username3", password = "password3", savingsAcct  = 1,checkAcct = 3}}
};

आप अपने शब्दकोश को आरंभ करने के लिए एक लूप का उपयोग कर सकते हैं

-1
DavidG 27 नवम्बर 2015, 23:24