Телефонный справочник на основе коллекции - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Помогите, пожалуйста понять, как правильно организовать телефонный справочник (WinForm приложение) который будет хранить все данные (имя, телефон, адрес, год рождения, емаил, null)в коллекции! Кроме того необходимо реализовать поиск по номеру или имени, сортировку, добавление нового, удаление, импорт и экспорт в XML, по-возможности в cvs. Прошу помочь со скелетом приложения, с концепцией, подходом. Итак, думаю, какую коллекцию выбрать? ArrayList, которая может хранить разные типы, в том числе и нуллы...Или просто List ? Как быть в случае с List ? Ну и собственно вопрос с организацией классов (или структур)...какие классы создать...и что от чего унаследовать, чтобы соблюсти все каноны ООП? ) Спасибо.

Решение задачи: «Телефонный справочник на основе коллекции»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
 
namespace PhoneBook {
  public partial class Form1 : Form {
    List<Person> people = new List<Person>();
 
    public Form1() {
      InitializeComponent();
      listView1.View = View.List;
    }
 
 
    private void Form1_Load(object sender, EventArgs e) {
 
      string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
      // Read from XML file when App is Opened
      if (!File.Exists(path + "\\PhoneBook\\settings.xml"))
        return;
 
      XmlDocument xDoc = new XmlDocument();
      try {
        xDoc.Load(path + "\\PhoneBook\\settings.xml");
        foreach (XmlNode xNode in xDoc.SelectNodes("People/Person")) { //Select the node inside xml
          Person p = new Person();
          p.Name = xNode.Attributes["Name"].InnerText;
          p.Phone = xNode.Attributes["Phone"].InnerText;
          p.StreetAddress = xNode.Attributes["StreetAddress"].InnerText;
          p.Email = xNode.Attributes["Email"].InnerText;
          p.Birthday = DateTime.FromFileTime(Convert.ToInt64(xNode.Attributes["Birthday"].InnerText));
          people.Add(p);
        }
      }
      catch {
        return;
      }
      UpdateListView(people);
    }
 
    protected override void OnClosed(EventArgs e) {
 
      string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
 
      if (!Directory.Exists(path + "\\PhoneBook"))
        Directory.CreateDirectory(path + "\\PhoneBook");
      if (!File.Exists(path + "\\PhoneBook\\settings.xml"))
        File.Create("\\PhoneBook\\settings.xml");
 
      XmlTextWriter xw = new XmlTextWriter(path + "\\PhoneBook\\settings.xml", Encoding.UTF8);
      xw.WriteStartElement("People");
      foreach (Person item in people) {
        XmlSerializer xx = new XmlSerializer(typeof(Person));
        xx.Serialize(xw, item);
 
        //xw.WriteStartElement("Person");
        //xw.WriteAttributeString("Name", item.Name);
        //xw.WriteAttributeString("Phone", item.Phone);
        //xw.WriteAttributeString("StreetAddress", item.StreetAddress);
        //xw.WriteAttributeString("Email", item.Email);
        //xw.WriteAttributeString("Birthday", item.Birthday.ToFileTime().ToString());
        //xw.WriteEndElement();
      }
      xw.WriteEndElement();
      xw.Close();
 
      base.OnClosed(e);
    }
 
    private void button2_Click(object sender, EventArgs e) {
 
      Person p = new Person();
      p.Name = textBox1.Text;
      p.Phone = textBox2.Text;
      p.StreetAddress = textBox3.Text;
      p.Email = textBox4.Text;
      p.Birthday = dateTimePicker1.Value;
      people.Add(p);                     //adding created person to the List<>
 
      textBox1.Text = String.Empty;
      textBox2.Text = String.Empty;
      textBox3.Text = String.Empty;
      textBox4.Text = String.Empty;
      dateTimePicker1.Value = DateTime.Now;
 
      UpdateListView(people);
    }
 
    private void listView1_SelectedIndexChanged(object sender, EventArgs e) {
 
      if (listView1.SelectedItems.Count == 0) {
        textBox1.Text =
        textBox2.Text =
        textBox3.Text =
        textBox4.Text = string.Empty;
      }
      else {
        textBox1.Text = people[listView1.SelectedItems[0].Index].Name;
        textBox2.Text = people[listView1.SelectedItems[0].Index].Phone;
        textBox3.Text = people[listView1.SelectedItems[0].Index].StreetAddress;
        textBox4.Text = people[listView1.SelectedItems[0].Index].Email;
        dateTimePicker1.Value = people[listView1.SelectedItems[0].Index].Birthday;
      }
    }
 
    private void button3_Click(object sender, EventArgs e) {
      Remove();
    }
 
    private void UpdateListView(List<Person> list) {
 
      listView1.Items.Clear();
      foreach (var item in list)
        listView1.Items.Add(item.ToString());
    }
 
    void Remove()  //Method deletes items from the ListView
    {
      try {
        listView1.Items.Remove(listView1.SelectedItems[0]);
        people.RemoveAt(listView1.SelectedItems[0].Index);
      }
      catch {
      }
 
    }
 
    private void removeToolStripMenuItem_Click(object sender, EventArgs e)  //Context menu Remove (doesn't work)
    {
      Remove();
    }
 
    private void button1_Click(object sender, EventArgs e)  //Save Changes
    {
      people[listView1.SelectedItems[0].Index].Name = textBox1.Text;
      people[listView1.SelectedItems[0].Index].Phone = textBox2.Text;
      people[listView1.SelectedItems[0].Index].StreetAddress = textBox3.Text;
      people[listView1.SelectedItems[0].Index].Email = textBox4.Text;
      people[listView1.SelectedItems[0].Index].Birthday = dateTimePicker1.Value;
      listView1.SelectedItems[0].Text = textBox1.Text; // Change name in the ListView
    }
    /*
    private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
 
      XmlDocument xDoc = new XmlDocument();
      string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
      xDoc.Load(path + "\\PhoneBook\\settings.xml");
 
      XmlNode xNode = xDoc.SelectSingleNode("People");  // Deleting from Xml to avoid copying records
      xNode.RemoveAll();
      foreach (Person p in people) {
        XmlNode xTop = xDoc.CreateElement("Person");
        XmlNode xName = xDoc.CreateElement("Name");
        XmlNode xPhone = xDoc.CreateElement("Phone");
        XmlNode xStreetAddress = xDoc.CreateElement("StreetAddress");
        XmlNode xEmail = xDoc.CreateElement("Email");
        XmlNode xBirthday = xDoc.CreateElement("Birthday");
        xName.InnerText = p.Name;
        xPhone.InnerText = p.Phone;
        xStreetAddress.InnerText = p.StreetAddress;
        xEmail.InnerText = p.Email;
        xBirthday.InnerText = p.Birthday.ToFileTime().ToString();
        xTop.AppendChild(xName);
        xTop.AppendChild(xPhone);
        xTop.AppendChild(xStreetAddress);
        xTop.AppendChild(xEmail);
        xTop.AppendChild(xBirthday);
        xDoc.DocumentElement.AppendChild(xTop);
      }
      xDoc.Save(path + "\\PhoneBook\\settings.xml");
    }*/
  }
 
  internal class Person {
    public string Name {
      get;
      set;
    }
 
    public string Phone {
      get;
      set;
    }
 
    public string StreetAddress {
      get;
      set;
    }
 
    public string Email {
      get;
      set;
    }
 
    public DateTime Birthday {
      get;
      set;
    }
 
    public override string ToString() {
 
      return Name + " Tel: " + Phone;
    }
  }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы