成績データ XML

成績データ XML(簡易データベース)の作成と利用方法です。

前田稔(Maeda Minoru)の超初心者のプログラム入門

XML FILE の説明

  1. XML(Extensible Markup Language)は、データベースが備わっていない場合の、簡易データベースとしても使えます。
    簡単な成績データ XML の作成と利用方法を紹介します。
    /************************************************/
    /*★ @"C:\test\seiseki.xml" を作成    前田 稔 ★*/
    /************************************************/
    using System;
    using System.Xml.Serialization;
    
    public class MyForm
    {
        [XmlRoot("成績管理")]
        public class SeisekiClass
        {
            [System.Xml.Serialization.XmlElement("成績表")]
            public SeisekiData[] array;
        }
        [XmlRoot("成績表")]
        public class SeisekiData
        {
            [XmlElement("番号")]
            public int          Number;
            [XmlElement("姓名")]
            public NameCls      Name;
            [XmlElement("科目")]
            public KamokuCls    Kamoku;
    
            //Constructor
            public SeisekiData()
            {
            }
            public SeisekiData(int num, string sei, string mei, int ten1, int ten2, int ten3)
            {
                Name = new NameCls();
                Kamoku = new KamokuCls();
                Number = num;
                Name.Sei = sei;
                Name.Mei = mei;
                Kamoku.Ten1 = ten1;
                Kamoku.Ten2 = ten2;
                Kamoku.Ten3 = ten3;
            }
        }
        public class NameCls
        {
            [XmlElement("姓")]
            public string       Sei;
            [XmlElement("名")]
            public string       Mei;
        }
        public class KamokuCls
        {
            [XmlElement("数学")]
            public int          Ten1;
            [XmlElement("英語")]
            public int          Ten2;
            [XmlElement("C言語")]
            public int          Ten3;
        }
    
        static int[]    num  = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        static string[] sei  = { "愛知", "青森", "秋田", "石川", "茨城",
                                 "岩手", "愛媛", "大分", "大阪", "岡山" };
        static string[] mei  = { "真唯子", "孝雄", "景子", "雅夫", "優子",
                                 "あゆみ", "和子", "慎吾", "恵", "英子" };
        static int[]    ten1 = { 100, 0, 10, 20, 30, 40, 50, 60, 70, 80 };
        static int[]    ten2 = { 100, 0, 10, 20, 30, 40, 50, 60, 70, 80 };
        static int[]    ten3 = { 100, 0, 10, 20, 30, 40, 50, 60, 70, 80 };
    
        public static void Main()
        {
            SeisekiClass target = new SeisekiClass();
            target.array = new SeisekiData[10];
            SeisekiData  tmp;
    
            for(int i = 0; i < 10; i++)
            {
                tmp = new SeisekiData(num[i],sei[i],mei[i],ten1[i],ten2[i],ten3[i]);
                target.array[i] = tmp;
            }
    
            //XMLファイルに保存する
            System.Xml.Serialization.XmlSerializer serializer1 =
                new System.Xml.Serialization.XmlSerializer(typeof(SeisekiClass));
            System.IO.FileStream fs1 =
                new System.IO.FileStream(@"C:\test\seiseki.xml", System.IO.FileMode.Create);
            serializer1.Serialize(fs1, target);
            fs1.Close();
        }
    }
    
  2. 成績データは、階層構造を使って定義されています。
    1. SeisekiClass は一番上の階層で、SeisekiData を配列で定義します。
          [XmlRoot("成績管理")]
          public class SeisekiClass
          {
              [System.Xml.Serialization.XmlElement("成績表")]
              public SeisekiData[] array;
          }
              
    2. SeisekiData は一人分の成績データで、学生番号と NameCls と KamokuCls で構成します。
      また個々の成績データを格納するために Constructor が用意されています。
          [XmlRoot("成績表")]
          public class SeisekiData
          {
              [XmlElement("番号")]
              public int          Number;
              [XmlElement("姓名")]
              public NameCls      Name;
              [XmlElement("科目")]
              public KamokuCls    Kamoku;
      
              //Constructor
              public SeisekiData()
              {
              }
              public SeisekiData(int num, string sei, string mei, int ten1, int ten2, int ten3)
              {
                  ・・・
              }
          }
              
    3. 姓名の構造体 NameCls では、姓(Sei)と名(Mei)を定義します。
          public class NameCls
          {
              [XmlElement("姓")]
              public string       Sei;
              [XmlElement("名")]
              public string       Mei;
          }
              
    4. 科目の構造体 KamokuCls では、3科目の成績を定義します。
          public class KamokuCls
          {
              [XmlElement("数学")]
              public int          Ten1;
              [XmlElement("英語")]
              public int          Ten2;
              [XmlElement("C言語")]
              public int          Ten3;
          }
              
  3. 成績データ XML に登録する10件分のデータです。
        static int[]    num  = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        static string[] sei  = { "愛知", "青森", "秋田", "石川", "茨城",
                                 "岩手", "愛媛", "大分", "大阪", "岡山" };
        static string[] mei  = { "真唯子", "孝雄", "景子", "雅夫", "優子",
                                 "あゆみ", "和子", "慎吾", "恵", "英子" };
        static int[]    ten1 = { 100, 0, 10, 20, 30, 40, 50, 60, 70, 80 };
        static int[]    ten2 = { 100, 0, 10, 20, 30, 40, 50, 60, 70, 80 };
        static int[]    ten3 = { 100, 0, 10, 20, 30, 40, 50, 60, 70, 80 };
    
  4. データを SeisekiClass に格納します。
            SeisekiClass target = new SeisekiClass();
            target.array = new SeisekiData[10];
            SeisekiData  tmp;
    
            for(int i = 0; i < 10; i++)
            {
                tmp = new SeisekiData(num[i],sei[i],mei[i],ten1[i],ten2[i],ten3[i]);
                target.array[i] = tmp;
            }
    
  5. 成績データ XML を作成します。
            //XMLファイルに保存する
            System.Xml.Serialization.XmlSerializer serializer1 =
                new System.Xml.Serialization.XmlSerializer(typeof(SeisekiClass));
            System.IO.FileStream fs1 =
                new System.IO.FileStream(@"C:\test\seiseki.xml", System.IO.FileMode.Create);
            serializer1.Serialize(fs1, target);
            fs1.Close();
    
  6. SeisekiData を定義するとき、NameCls と KamokuCls の object をインスタンス化することも出来ます。
    Constructor でインスタンス化するより、こちらの方が解り易いでしょうか。
        [XmlRoot("成績表")]
        public class SeisekiData
        {
            [XmlElement("番号")]
            public int          Number;
            [XmlElement("姓名")]
            public NameCls      Name = new NameCls();
            [XmlElement("科目")]
            public KamokuCls    Kamoku = new KamokuCls();
                ・・・
        
  7. プログラムを実行して、成績データ XML(@"C:\test\seiseki.xml")を確認して下さい。
    TEXT 形式なのでエディタで確認することが出来ます。

成績 XML の入力

  1. 成績 XML から、姓名とC言語の成績を抽出して表示します。
    /**********************************************/
    /*★ XML から姓名とC言語を表示     前田 稔 ★*/
    /**********************************************/
    using System;
    using System.Xml.Serialization;
    
    public class MyForm
    {
        [XmlRoot("成績管理")]
        public class SeisekiClass
        {
            [System.Xml.Serialization.XmlElement("成績表")]
            public SeisekiData[] array = new SeisekiData[10];
        }
        [XmlRoot("成績表")]
        public class SeisekiData
        {
            [XmlElement("姓名")]
            public NameCls      Name;
            [XmlElement("科目")]
            public KamokuCls    Kamoku;
        }
        public class NameCls
        {
            [XmlElement("姓")]
            public string       Sei;
            [XmlElement("名")]
            public string       Mei;
        }
        public class KamokuCls
        {
            [XmlElement("C言語")]
            public int          Ten3;
        }
    
        public static void Main()
        {
            //保存した内容を復元する
            System.Xml.Serialization.XmlSerializer serializer2 =
                new System.Xml.Serialization.XmlSerializer(typeof(SeisekiClass));
            System.IO.FileStream fs =
                new System.IO.FileStream(@"C:\test\seiseki.xml", System.IO.FileMode.Open);
            SeisekiClass loadcls;
            loadcls = (SeisekiClass) serializer2.Deserialize(fs);
            fs.Close();
    
            //復元した内容を表示する
            foreach(SeisekiData obj in loadcls.array)
            {   Console.WriteLine(obj.Name.Sei + obj.Name.Mei + obj.Kamoku.Ten3);  }
        }
    }
    
  2. 各 Class では必要な項目だけを定義して下さい。
        [XmlRoot("成績管理")]
        public class SeisekiClass
        {
            [System.Xml.Serialization.XmlElement("成績表")]
            public SeisekiData[] array = new SeisekiData[10];
        }
        [XmlRoot("成績表")]
        public class SeisekiData
        {
            [XmlElement("姓名")]
            public NameCls      Name;
            [XmlElement("科目")]
            public KamokuCls    Kamoku;
        }
        public class NameCls
        {
            [XmlElement("姓")]
            public string       Sei;
            [XmlElement("名")]
            public string       Mei;
        }
        public class KamokuCls
        {
            [XmlElement("C言語")]
            public int          Ten3;
        }
    
  3. 成績 XML に保存した構造体(class SampleClass)を復元します。
    XML FILE から読み込むときは、逆シリアル化します。
            //保存した内容を復元する
            System.Xml.Serialization.XmlSerializer serializer2 =
                new System.Xml.Serialization.XmlSerializer(typeof(SeisekiClass));
            System.IO.FileStream fs =
                new System.IO.FileStream(@"C:\test\seiseki.xml", System.IO.FileMode.Open);
            SeisekiClass loadcls;
            loadcls = (SeisekiClass) serializer2.Deserialize(fs);
            fs.Close();
    
  4. 抽出したデータ(姓名とC言語)を表示します。
            //復元した内容を表示する
            foreach(SeisekiData obj in loadcls.array)
            {   Console.WriteLine(obj.Name.Sei + obj.Name.Mei + obj.Kamoku.Ten3);  }
    
  5. XML は TEXT 形式で冗長部が多いので「サイズは多少大きくなります」が簡易データベースには最適です。
    C/C++ でも同様のプログラムを作成しています。
    成績データ XML を参照して下さい。

超初心者のプログラム入門(C/C/C++)