2011-01-11 27 views
0

私はWindowsコンソールアプリケーションで簡単な電話帳プログラムを作ろうとしています。私はSortedDictionaryを使用しています。ここでは、Keyは名前でValueは数値、Listはアドレス、StringDictionaryはemail-idです。私はこれらのすべてをDirectoryという名前のクラスに入れ、Mainのインスタンスを通してそれを呼び出しました。私はディレクトリを列挙する際に問題に直面しています。同じ行の人物の4つのエントリーをすべて印刷したいのですが。誰が私にどのように進むべきか教えてもらえますか?電話帳の例

public class Directry  
{  
    List <string> Email_id= new List <string>(); 

    SortedDictionary<string, int> Dict = new SortedDictionary<string, int>(); 
    StringCollection Adress=new StringCollection(); 
    public Directry(SortedDictionary<string, int> dict, StringCollection adress, List<string> email) 
    { 
     this.Dict = dict; 
     this.Email_id = email; 
     this.Adress = adress; 
    }  
} 

class Another 
{ 
    static void Main(string[] args) 
    { 
     SortedDictionary<string, int> dict = new SortedDictionary<string, int>(); 
     List<string> email = new List<string>(); 
     StringCollection adres = new StringCollection(); 
     Directry dir = new Directry(dict, adres,email); 
     string key, adress, Email; 
     int numbr; 
     start_again: 
     for (int i = 0; i <2; i++) 
     { 
      Console.WriteLine("enter name to be added in the directory"); 
      key = Console.ReadLine(); 
      Console.WriteLine("enter number to be added in the directory"); 
      numbr = Convert.ToInt32(Console.ReadLine()); 
      Console.WriteLine("enter address to be added in the directory"); 
      adress = Console.ReadLine(); 
      Console.WriteLine("enter your email-id to be added in the directory"); 
      Email = Console.ReadLine(); 
      dict.Add(key, numbr); 
      email.Add(Email); 
      adres.Add(adress); 
     } 
     Console.WriteLine("do you wish to continue-y/n?"); 
     char c = Convert.ToChar(Console.ReadLine()); 
     if (c == 'y') 
     { 
      Console.WriteLine("you said yes"); 
      goto start_again; 
     } 
     else 
     { 
      Console.WriteLine("no more entries can be added"); 
      Console.WriteLine("Name   Number   adress   email"); 
      foreach (object ot in dir) 
      { 
       Console.WriteLine(ot); 
      }    
     } 
     Console.ReadLine(); 
    } 
} 

感謝 - :これは私がtrying.I不便のための私のlogic..Sorryで多くのミスがあることを十分に確信していた方法です。その様子によって

+0

のようなものが、このコードはコンパイルん持つことができますか? – nik0lias

+0

それは私にforeachの声明の問題を与える!!残りは上品です.. !! – Batrickparry

答えて

2

このコードは、はるかに完璧からですが、それはあなたの方法であなたを取得する必要があります。

public class Directory 
{ 
    public List<string> EmailAddresses = new List<string>(); 
    public List<string> Addresses = new List<string>(); 

    public void Add(string email, string address) 
    { 
     EmailAddresses.Add(email); 
     Addresses.Add(address); 
    } 
} 

class Another 
{ 
    static void Main(string[] args) 
    { 

     SortedDictionary<string, Directory> _directory = new SortedDictionary<string, Directory>(); 
     string key, adress, Email; 
     int numbr; 
    start_again: 
     for (int i = 0; i < 2; i++) 
     { 
      Console.WriteLine("enter name to be added in the directory"); 
      key = Console.ReadLine(); 
      Console.WriteLine("enter number to be added in the directory"); 
      numbr = Convert.ToInt32(Console.ReadLine()); 
      Console.WriteLine("enter address to be added in the directory"); 
      adress = Console.ReadLine(); 
      Console.WriteLine("enter your email-id to be added in the directory"); 
      Email = Console.ReadLine(); 

      Directory dir = new Directory(); 
      dir.Add(Email, adress); 

      _directory.Add(key, dir); 

     } 
     Console.WriteLine("do you wish to continue-y/n?"); 
     char c = Convert.ToChar(Console.ReadLine()); 
     if (c == 'y') 
     { 
      Console.WriteLine("you said yes"); 
      goto start_again; 
     } 
     else 
     { 
      Console.WriteLine("no more entries can be added"); 
      Console.WriteLine("Name   Number   adress   email"); 
      foreach (KeyValuePair<string, Directory> d in _directory) 
      { 
       Console.WriteLine(string.Format("{0}, {1}, {2}", d.Key, d.Value.Addresses.First(), d.Value.EmailAddresses.First())); 
      } 
     } 
     Console.ReadLine(); 
    } 
+0

それはちょっとした作品です...ありがとうございます.. :) – Batrickparry

+0

私は全部を完成させましたが、それで何から学べますか?さらに助けが必要な場合は、ただ聞いてください。答えを受け入れることを忘れないでください:) – nik0lias

+0

私はそれを少し編集しました....今、完璧な.. !!!ありがとう!! – Batrickparry

0

あなたは辞書に

Directry dir = new Directry(dict, adres,email); 

を宣言している。しかし、その後、あなたはコンソールから読み取った値でそれを更新していません。 Dictionaryクラスの中でメソッドを作成すると、dict、adres、およびemailオブジェクトを渡すことができます。

編集辞書から値をつかむために:あなたのDIRECTRYオブジェクトはSortedDictonaryを持って

、それを公開します。

public SortedDictionary<string, int> Dict = new SortedDictionary<string, int>(); 

は、このように列挙:

foreach (KeyValuePair<string, int> kvp in dir.Dict) 
      { 
       Console.WriteLine(kvp.Key, kvp.Value); 
      } 
+0

だから私はどうすればいいのか教えてください!すべてのことが間違っていると私はどのようにそれらの後に行く必要があります! – Batrickparry

+0

良い....私のDicrectoryを更新します...それをどのように列挙しますか? – Batrickparry

2

あなたはこれを特に優れた方法でコーディングしていません。

私はあなたが重複する名前、または何でもしたいを許可しない、注文したディレクトリを維持するためにすべてのことを肉付けすることができます

public class DirectoryEntry 
{ 
    public string Name { get; set; } 
    public string PhoneNumber { get; set; } 
    public string Addresss { get; set; } 
    public string Email { get; set; } 
} 

public class Directory 
{ 
    List<DirectoryEntry> _entries; 

    public Directory() 
    { 
     _entries = new List<DirectoryEntry>(); 
    } 

    public List<DirectoryEntry> Entries { get { return _entries; } } 
} 

...の線に沿って何かにあなたのコードの構造を変更することを示唆しています。

今、あなたは

Directory directory = new Directory(); 
directory.Entries.Add(new DirectoryEntry { Name = "Tom", Number = "01293485943" }) 

foreach (var entry in directory.Entries.OrderBy(de => de.Name)) 
{ 
    Console.WriteLine("Name: {0}, Number: {1}", entry.Name, entry.Number); 
} 
+0

+1の整頓されたコードのために、私はLINQを使うべきです... – nik0lias

関連する問題