成績データ XML

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

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

成績 XML の作成

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

成績 XML の入力

  1. 成績 XML から、姓名とC言語の成績を抽出して表示します。
    各 Class では必要な項目だけを定義して下さい。
    public ref class NameCls
    {
      public:
        [XmlElement("姓")]
        String^      Sei;
        [XmlElement("名")]
        String^      Mei;
    };
    
    public ref class KamokuCls
    {
      public:
        [XmlElement("C言語")]
        int          Ten3;
    };
    
    [XmlRoot("成績表")]
    public ref class SeisekiData
    {
      public:
        [XmlElement("姓名")]
        NameCls^     Name;
        [XmlElement("科目")]
        KamokuCls^   Kamoku;
    };
    
    [XmlRoot("成績管理")]
    public ref class SeisekiClass
    {
      public:
        [XmlElement("成績表")]
        array<SeisekiData^>^  Sdata;
    };
    
  2. 成績 XML に保存した構造体(class SampleClass)を復元します。
    XML FILE から読み込むときは、逆シリアル化します。
        XmlSerializer^ serializer = gcnew XmlSerializer(SeisekiClass::typeid);
        FileStream^ fs = gcnew FileStream("c:\\tmp\\config.xml", FileMode::Open);
        SeisekiClass^ target = (SeisekiClass^)serializer->Deserialize(fs);
        fs->Close();
    
  3. 抽出したデータ(姓名とC言語)を表示します。
        for(int i=0; i<10; i++)
        {   Console::Write(target->Sdata[i]->Name->Sei + target->Sdata[i]->Name->Mei);
            Console::WriteLine(" : " + target->Sdata[i]->Kamoku->Ten3);
        }
    
  4. XML は TEXT 形式で冗長部が多いので「サイズは多少大きくなります」が簡易データベースには最適です。
    C# でも同様のプログラムを作成しています。
    成績データ XML を参照して下さい。

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