从对象数组列表中保存和加载文件

时间:2015-07-27 02:23:20

标签: c#

您好我正在尝试使用对象数组构建一个联系人管理器程序来存储数据。我需要查看显示可用联系人摘要的报告,然后有一个菜单允许用户与该程序进行交互。我需要选择保存和加载文件,但我不确定如何执行此操作。

任何指导都将不胜感激。

static void Main(string[] args)
        {
            //The MAXPLAYERS constant is the physical table size
            const Int32 MAXCONTACTS = 23;

            //Declare the player tables

            Contact[] contacts = new Contact[MAXCONTACTS];

            //Keep track of the actual number of players (i.e. logical table size)
            Int32 contactCount = 0;
            Int32 number = 0;
            String lastName = " ";
            String phoneNumber = " "; 
            String emailAddress = " "; 

            String firstName = " "; ;

            Console.WriteLine("Contact List");
            // display the menu to the user
            Console.WriteLine("Enter option or M for menu:");
            //Main Driver
            char menuItem;
            Console.WriteLine("Welcome to the player system...\n");
            menuItem = GetMenuItem();
            while (menuItem != 'X')
            {

                ProcessMenuItem(menuItem, number, firstName, lastName, phoneNumber, emailAddress, contacts, ref contactCount, MAXCONTACTS);
                menuItem = GetMenuItem();

            }
            Console.WriteLine("\nThank you, goodbye");
            Console.ReadLine();
        }
        static char GetMenuItem()
        {
            char menuItem;
            DisplayMenu();
            menuItem = IOConsole.GetChar((Console.ReadLine()));

            while (menuItem != 'C'
                && menuItem != 'L' && menuItem != 'X' && menuItem != 'R' && menuItem != 'U' && menuItem != 'D')
            {
                Console.WriteLine("\nError - Invalid menu item");
                DisplayMenu();
                //menuItem = IOConsole.GetChar((Console.ReadLine()));
            }
            return menuItem;
        }

        static void DisplayMenu()
        {
           Console.WriteLine("C-> Create Contacts");
           Console.WriteLine("R-> Remove Contacts");
           Console.WriteLine("U-> Update Contacts");
           Console.WriteLine("D -> Load data from file");
           Console.WriteLine("S-> Save data to file");
           Console.WriteLine("L-> View sorted by last name");
           Console.WriteLine("F-> View sorted by first name");
           Console.WriteLine("P-> View by partial name search");
           Console.WriteLine("T-> View by contact type");
           Console.WriteLine("Q-> Quit");
        }

        //Routes to the appropriate process routine based on the user menu choice
        static void ProcessMenuItem(Char menuItem, Int32 number, String firstName, String lastName, String phoneNumber,
            String emailAddress, Contact[] contacts, ref Int32 contactCount, Int32 MAXCONTACTS)
        {
            switch (menuItem)
            {
                case 'C':
                    createContact();
                    break;
                case 'R':
                    removeContact();
                    break;
                case 'U':
                    updateContact();
                    break;
                case 'D':
                    LoadToFile();
                    break;
                case 'S':
                    saveToFile();
                    break;

                case 'L':
                    sortByLastName();
                    break;
                case 'F':
                    sortByFirstName();
                       break;
                case 'P':

                       break;
                case 'T':

                       break;
                case 'Q':

                       break;

            }                   
        }


        public static void saveToFile()
        {

        }
        public static void LoadToFile()
        {

        }

1 个答案:

答案 0 :(得分:0)

您可以通过以下方式保存/加载Contact对象数组:

  1. 序列化(Serialize ArrayList of Objects

  2. XML(https://msdn.microsoft.com/en-us/library/ms172872.aspx

  3. JSON(https://msdn.microsoft.com/en-us/library/bb412179(v=vs.110).aspx

  4. ...或您想要的任何其他格式。

    但是你可以专注于上面那些格式,看看哪种方法最简单。

    作为补充解决方案,您可以尝试从此代码中学习,使用DataSetDataTable保存Contact对象,并将其写入xml文件:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Data;
    
    namespace TestContacts
    {
        class Contact
        {
            public string Name = "";
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                Contact c1 = new Contact();
                c1.Name = "Name1";
    
                Contact c2 = new Contact();
                c2.Name = "Name2";
    
                Contact c3 = new Contact();
                c3.Name = "Name3";
    
                //Simpliest approach could be saving it to data table 
                DataSet ds = new DataSet("Contact");
                DataTable dt = new DataTable("Info");
                dt.Columns.Add("name", typeof(string));
    
                //You can loop but for simplicity add one by one
                DataRow r1 = dt.NewRow();
                r1["name"] = c1.Name;
                dt.Rows.Add(r1);
    
                DataRow r2 = dt.NewRow();
                r2["name"] = c2.Name;
                dt.Rows.Add(r2);
    
                DataRow r3 = dt.NewRow();
                r3["name"] = c3.Name;
                dt.Rows.Add(r3);
    
                //Save to file using XML file format
                ds.Tables.Add(dt);
                ds.WriteXml("C:\\contacts.xml", XmlWriteMode.WriteSchema);
    
                //You can also load via
                ds.ReadXml("C:\\contacts.xml", XmlReadMode.ReadSchema);
    
            }
        }
    }