Базы данных для карманного персонального компьютера

Запросы

Разбить на страницы
Показывать лекцию целиком

Задача темы: изучить методику и получить навыки в разработке методов выборки данных из таблиц

Разработка: Приложение "Запросы" для выборки данных из таблиц движения средств на банковских пластиковых карточках

Состав выполняемых функций:

  • Файловые операции: открыть
  • Алгоритмы: выборка данных по целям платежей и фирмам с группировкой
  • Информационно-справочные: О программе
  • Наращивание функциональности не предусматривается.

    Защита данных – запрет доступа пользователя к данным.

    В качестве входных данных используются файлы с данными о движении средств на банковских карточках. Выходные данные программы – графическое отображение результатов в виде таблиц DataGrid для SmartDevice

    Шаг 1. Разработка графического интерфейса

    (рис 12.2) (рис 12.1)

    Предусматривается одна форма с TabControl из двух закладок "Доходы и расходы" с единственным элементом DataGrid и "Структура расходов" с DataGrid и двумя кнопками запуска запросов "По целям" и "По фирмам".

    Из невидимых элементов – главное меню с опциями "Открыть", "Выход"; openFileDialog со свойством Filter = Файлы XML (*.xml)|*.xml – примерный дизайн на рис. 12.1 и 12.2.

    Шаг 2. Добавляем библиотеки

    using System;
    using System.Drawing;
    using System.Collections;
    using System.Windows.Forms;
    using System.Data;
    //добавляем
    using System.IO;
    using System.Xml;

    Шаг 3. Добавляем переменные в public class Form1 : System.Windows.Forms.Form

    string file_name="dataSet.xml";
    // глобальный датасет
    DataSet dataSet;
    DataSet dataSetCell;
    //глобальный дататейбл
    DataTable dataTable;
    DataTable dataCell;
    DataTable dataFirma;
    DataRow newRow;

    Шаг 4. В public Form1() вызываем функцию чтения данных file_read() ;

    {
    InitializeComponent();
    file_read();
    }

    Шаг 5. Создаем функцию чтения данных из XML-файла

    private void file_read() {
    FileStream fin;
    try {
    fin=new FileStream(file_name,FileMode.Open);
    fin.Close();
    }
    catch(IOException exc) {
    MessageBox.Show ("Невозможно открыть файл \n"+file_name,"Ошибка");
    return;}
    // Считываем значения из файла
    XmlTextReader xml_in=new XmlTextReader(file_name); 
    dataSet=new DataSet();
    dataTable=dataSet.Tables.Add("CardVISA");
    dataSetCell=new DataSet();
    dataCell=dataSetCell.Tables.Add("CardCell");
    dataFirma=dataSet.Tables.Add("CardFirma");
    dataTable.Columns.Add("Сумма",System.Type.GetType("System.String"));
    dataTable.Columns.Add("Цель",System.Type.GetType("System.String"));
    dataTable.Columns.Add("Фирма",System.Type.GetType("System.String"));
    dataTable.Columns.Add("Дата",System.Type.GetType("System.String"));
    dataTable.Columns.Add("ID",System.Type.GetType("System.Int64"));
    dataTable.Columns["Сумма"].ReadOnly=true;
    dataTable.Columns["Цель"].ReadOnly=true;
    dataTable.Columns["Фирма"].ReadOnly=true;
    dataTable.Columns["Дата"].ReadOnly=true;
    dataTable.Columns["ID"].ReadOnly=true;
    dataSet.ReadXml(@xml_in);
    xml_in.Close();
    DataView sortedView=new DataView(dataTable);
    sortedView.Sort="ID DESC";
    dataGrid1.DataSource=sortedView;
    // добавляем столбцы в dataCell
    dataCell.Columns.Add("Процент",System.Type.GetType("System.String"));
    dataCell.Columns.Add("Цель",System.Type.GetType("System.String"));
    dataCell.Columns.Add("Сумма",System.Type.GetType("System.String"));
    // добавляем столбцы в dataFirma 
    dataFirma.Columns.Add("Сумма",System.Type.GetType("System.String"));
    dataFirma.Columns.Add("Фирма",System.Type.GetType("System.String"));
    dataFirma.Columns.Add("Процент",System.Type.GetType("System.String"));
    }

    Шаг 6. Создаем диалог открытия файла

    Для опции главного меню "Открыть" пишем:

    private void menuItem2_Click(object sender, System.EventArgs e) {
    if (openFileDialog1.ShowDialog()==DialogResult.OK) {
    file_name=openFileDialog1.FileName;
    file_read();
    	}
    }

    Шаг 7. Создаем запрос-выборку данных "По фирмам"

    Для кнопки "По фирмам" пишем:

    // обновляем запрос по фирмам
    private void button2_Click_1(object sender, System.EventArgs e) {
    // считывание строк из dataTable и добавление в dataCell
    string my_cell;
    foreach (DataRow row in dataTable.Rows) {
    newRow=dataFirma.NewRow();
    my_cell=(row["Фирма"].ToString());
    newRow["Фирма"]=my_cell; 
    // ищем строку - создаем массив строк 
    DataRow[] rowCell=dataFirma.Select("Фирма='"+my_cell+"'");
    //Если длина (не size, а Length!) массива 0
    if (rowCell.Length==0) {
    this.dataFirma.Rows.Add(newRow);
    		}
    	}
    // А теперь считаем суммы
    float  my_summa=0;
    foreach (DataRow row in dataFirma.Rows) {
    my_cell=(row["Фирма"].ToString());
    DataRow[] rowCell=dataTable.Select("Фирма='"+my_cell+"'");
    foreach (DataRow rowTable in rowCell) {
    my_summa=my_summa+float.Parse(rowTable["Сумма"].ToString());
    		}
    if (my_summa>=0) {
    row["Сумма"]=my_summa.ToString();
    }
    else {row["Сумма"]="0";
    		}
    my_summa=0;
    	}
    // А теперь считаем итого
    foreach (DataRow row in dataFirma.Rows) {
    my_summa=my_summa+float.Parse(row["Сумма"].ToString());
    	}
    float my_total=my_summa;
    // заполняем структуру
    double my_procent;
    string my_format;
    foreach (DataRow row in dataFirma.Rows) {
    my_procent=double.Parse(row["Сумма"].ToString())*100/my_total;
    // добавляем 0, если меньше 10
    if (my_procent>=10) {
    my_format=my_procent.ToString();
    }
    else {my_format="0"+my_procent.ToString();
    		}
    // обрезаем строку до 5 символов
    if (my_format.Length>=5) {
    row["Процент"]=(my_format.Substring(0,5));
    }
    else {row["Процент"]=my_format;
    		}
    	}
    // А теперь считаем 100 %
    my_summa=0;
    foreach (DataRow row in dataFirma.Rows) {
    my_summa=my_summa+float.Parse(row["процент"].ToString());
    		}
    // сортируем по цели
    DataView sortedCell=new DataView(dataFirma);
    sortedCell.Sort="Процент DESC";
    // фильтруем пустые строки
    sortedCell.RowFilter="Сумма<>'0'";
    dataGrid2.DataSource=sortedCell;		
    }

    Шаг 8. Создаем запрос-выборку "По целям"

    Для кнопки "По целям пишем":

    private void button1_Click(object sender, System.EventArgs e) {
    // считывание строк из dataTable и добавление в dataCell
    string my_cell;
    foreach (DataRow row in dataTable.Rows) {
    newRow=dataCell.NewRow();
    my_cell=(row["Цель"].ToString());
    newRow["Цель"]=my_cell; 
    // ищем строку - создаем массив строк 
    DataRow[] rowCell=dataCell.Select("Цель='"+my_cell+"'");
    //Если длина (не size, а Length!) массива 0
    if (rowCell.Length==0) {
    this.dataCell.Rows.Add(newRow);
    		}
    	}
    // А теперь считаем суммы
    float  my_summa=0;
    foreach (DataRow row in dataCell.Rows) {
    my_cell=(row["Цель"].ToString());
    DataRow[] rowCell=dataTable.Select("Цель='"+my_cell+"'");
    foreach (DataRow rowTable in rowCell) {
    my_summa=my_summa+float.Parse(rowTable["Сумма"].ToString());
    		}
    if (my_summa>=0) {
    row["Сумма"]=my_summa.ToString();
    }
    else {row["Сумма"]="0";
    		}
    my_summa=0;
    	}
    // А теперь считаем итого
    foreach (DataRow row in dataCell.Rows) {
    my_summa=my_summa+float.Parse(row["Сумма"].ToString());
    	}
    float my_total=my_summa;
    // заполняем структуру
    double my_procent;
    string my_format;
    foreach (DataRow row in dataCell.Rows) {
    my_procent=double.Parse(row["Сумма"].ToString())*100/my_total;
    // добавляем 0, если меньше 10
    if (my_procent>=10) {
    my_format=my_procent.ToString();
    }
    else {my_format="0"+my_procent.ToString();
    		}
    // обрезаем строку до 5 символов
    if (my_format.Length>=5) {
    row["Процент"]=(my_format.Substring(0,5));
    }
    else {row["Процент"]=my_format;
    		}
    	}
    // А теперь считаем 100 %
    my_summa=0;
    foreach (DataRow row in dataCell.Rows) {
    my_summa=my_summa+float.Parse(row["процент"].ToString());
    		}
    // сортируем по цели
    DataView sortedCell=new DataView(dataCell);
    sortedCell.Sort="Процент DESC";
    // фильтруем пустые строки
    sortedCell.RowFilter="Сумма<>'0'";
    dataGrid2.DataSource=sortedCell;
    }

    Шаг 9. Создаем процедуру "О программе"

    Для опции главного меню "О программе" пишем:

    private void menuItem5_Click(object sender, System.EventArgs e) {
    MessageBox.Show("Программа запросов с группировкой данных\n"+
    "по целям платежей и фирмам-поставщикам товаров и услуг\n"+
    	"(C)Родигин Л.А., март 2006,\n"+
    	"Платформа C#.NET MS VisualStudio 2003","О программе");
    }

    Шаг 10. Выход из приложения

    Для опции главного меню "Выход" пишем:

    private void menuItem4_Click(object sender, System.EventArgs e) {
    Application.Exit();
    }
    Страницы:

    Задача темы: изучить методику и получить навыки в разработке методов выборки данных из таблиц

    Разработка: Приложение "Запросы" для выборки данных из таблиц движения средств на банковских пластиковых карточках

    Состав выполняемых функций:

  • Файловые операции: открыть
  • Алгоритмы: выборка данных по целям платежей и фирмам с группировкой
  • Информационно-справочные: О программе
  • Наращивание функциональности не предусматривается.

    Защита данных – запрет доступа пользователя к данным.

    В качестве входных данных используются файлы с данными о движении средств на банковских карточках. Выходные данные программы – графическое отображение результатов в виде таблиц DataGrid для SmartDevice

    Шаг 1. Разработка графического интерфейса

    (рис 12.2) (рис 12.1)

    Предусматривается одна форма с TabControl из двух закладок "Доходы и расходы" с единственным элементом DataGrid и "Структура расходов" с DataGrid и двумя кнопками запуска запросов "По целям" и "По фирмам".

    Из невидимых элементов – главное меню с опциями "Открыть", "Выход"; openFileDialog со свойством Filter = Файлы XML (*.xml)|*.xml – примерный дизайн на рис. 12.1 и 12.2.

    Шаг 2. Добавляем библиотеки

    using System;
    using System.Drawing;
    using System.Collections;
    using System.Windows.Forms;
    using System.Data;
    //добавляем
    using System.IO;
    using System.Xml;

    Шаг 3. Добавляем переменные в public class Form1 : System.Windows.Forms.Form

    string file_name="dataSet.xml";
    // глобальный датасет
    DataSet dataSet;
    DataSet dataSetCell;
    //глобальный дататейбл
    DataTable dataTable;
    DataTable dataCell;
    DataTable dataFirma;
    DataRow newRow;

    Шаг 4. В public Form1() вызываем функцию чтения данных file_read() ;

    {
    InitializeComponent();
    file_read();
    }

    Шаг 5. Создаем функцию чтения данных из XML-файла

    private void file_read() {
    FileStream fin;
    try {
    fin=new FileStream(file_name,FileMode.Open);
    fin.Close();
    }
    catch(IOException exc) {
    MessageBox.Show ("Невозможно открыть файл \n"+file_name,"Ошибка");
    return;}
    // Считываем значения из файла
    XmlTextReader xml_in=new XmlTextReader(file_name); 
    dataSet=new DataSet();
    dataTable=dataSet.Tables.Add("CardVISA");
    dataSetCell=new DataSet();
    dataCell=dataSetCell.Tables.Add("CardCell");
    dataFirma=dataSet.Tables.Add("CardFirma");
    dataTable.Columns.Add("Сумма",System.Type.GetType("System.String"));
    dataTable.Columns.Add("Цель",System.Type.GetType("System.String"));
    dataTable.Columns.Add("Фирма",System.Type.GetType("System.String"));
    dataTable.Columns.Add("Дата",System.Type.GetType("System.String"));
    dataTable.Columns.Add("ID",System.Type.GetType("System.Int64"));
    dataTable.Columns["Сумма"].ReadOnly=true;
    dataTable.Columns["Цель"].ReadOnly=true;
    dataTable.Columns["Фирма"].ReadOnly=true;
    dataTable.Columns["Дата"].ReadOnly=true;
    dataTable.Columns["ID"].ReadOnly=true;
    dataSet.ReadXml(@xml_in);
    xml_in.Close();
    DataView sortedView=new DataView(dataTable);
    sortedView.Sort="ID DESC";
    dataGrid1.DataSource=sortedView;
    // добавляем столбцы в dataCell
    dataCell.Columns.Add("Процент",System.Type.GetType("System.String"));
    dataCell.Columns.Add("Цель",System.Type.GetType("System.String"));
    dataCell.Columns.Add("Сумма",System.Type.GetType("System.String"));
    // добавляем столбцы в dataFirma 
    dataFirma.Columns.Add("Сумма",System.Type.GetType("System.String"));
    dataFirma.Columns.Add("Фирма",System.Type.GetType("System.String"));
    dataFirma.Columns.Add("Процент",System.Type.GetType("System.String"));
    }

    Шаг 6. Создаем диалог открытия файла

    Для опции главного меню "Открыть" пишем:

    private void menuItem2_Click(object sender, System.EventArgs e) {
    if (openFileDialog1.ShowDialog()==DialogResult.OK) {
    file_name=openFileDialog1.FileName;
    file_read();
    	}
    }

    Шаг 7. Создаем запрос-выборку данных "По фирмам"

    Для кнопки "По фирмам" пишем:

    // обновляем запрос по фирмам
    private void button2_Click_1(object sender, System.EventArgs e) {
    // считывание строк из dataTable и добавление в dataCell
    string my_cell;
    foreach (DataRow row in dataTable.Rows) {
    newRow=dataFirma.NewRow();
    my_cell=(row["Фирма"].ToString());
    newRow["Фирма"]=my_cell; 
    // ищем строку - создаем массив строк 
    DataRow[] rowCell=dataFirma.Select("Фирма='"+my_cell+"'");
    //Если длина (не size, а Length!) массива 0
    if (rowCell.Length==0) {
    this.dataFirma.Rows.Add(newRow);
    		}
    	}
    // А теперь считаем суммы
    float  my_summa=0;
    foreach (DataRow row in dataFirma.Rows) {
    my_cell=(row["Фирма"].ToString());
    DataRow[] rowCell=dataTable.Select("Фирма='"+my_cell+"'");
    foreach (DataRow rowTable in rowCell) {
    my_summa=my_summa+float.Parse(rowTable["Сумма"].ToString());
    		}
    if (my_summa>=0) {
    row["Сумма"]=my_summa.ToString();
    }
    else {row["Сумма"]="0";
    		}
    my_summa=0;
    	}
    // А теперь считаем итого
    foreach (DataRow row in dataFirma.Rows) {
    my_summa=my_summa+float.Parse(row["Сумма"].ToString());
    	}
    float my_total=my_summa;
    // заполняем структуру
    double my_procent;
    string my_format;
    foreach (DataRow row in dataFirma.Rows) {
    my_procent=double.Parse(row["Сумма"].ToString())*100/my_total;
    // добавляем 0, если меньше 10
    if (my_procent>=10) {
    my_format=my_procent.ToString();
    }
    else {my_format="0"+my_procent.ToString();
    		}
    // обрезаем строку до 5 символов
    if (my_format.Length>=5) {
    row["Процент"]=(my_format.Substring(0,5));
    }
    else {row["Процент"]=my_format;
    		}
    	}
    // А теперь считаем 100 %
    my_summa=0;
    foreach (DataRow row in dataFirma.Rows) {
    my_summa=my_summa+float.Parse(row["процент"].ToString());
    		}
    // сортируем по цели
    DataView sortedCell=new DataView(dataFirma);
    sortedCell.Sort="Процент DESC";
    // фильтруем пустые строки
    sortedCell.RowFilter="Сумма<>'0'";
    dataGrid2.DataSource=sortedCell;		
    }

    Шаг 8. Создаем запрос-выборку "По целям"

    Для кнопки "По целям пишем":

    private void button1_Click(object sender, System.EventArgs e) {
    // считывание строк из dataTable и добавление в dataCell
    string my_cell;
    foreach (DataRow row in dataTable.Rows) {
    newRow=dataCell.NewRow();
    my_cell=(row["Цель"].ToString());
    newRow["Цель"]=my_cell; 
    // ищем строку - создаем массив строк 
    DataRow[] rowCell=dataCell.Select("Цель='"+my_cell+"'");
    //Если длина (не size, а Length!) массива 0
    if (rowCell.Length==0) {
    this.dataCell.Rows.Add(newRow);
    		}
    	}
    // А теперь считаем суммы
    float  my_summa=0;
    foreach (DataRow row in dataCell.Rows) {
    my_cell=(row["Цель"].ToString());
    DataRow[] rowCell=dataTable.Select("Цель='"+my_cell+"'");
    foreach (DataRow rowTable in rowCell) {
    my_summa=my_summa+float.Parse(rowTable["Сумма"].ToString());
    		}
    if (my_summa>=0) {
    row["Сумма"]=my_summa.ToString();
    }
    else {row["Сумма"]="0";
    		}
    my_summa=0;
    	}
    // А теперь считаем итого
    foreach (DataRow row in dataCell.Rows) {
    my_summa=my_summa+float.Parse(row["Сумма"].ToString());
    	}
    float my_total=my_summa;
    // заполняем структуру
    double my_procent;
    string my_format;
    foreach (DataRow row in dataCell.Rows) {
    my_procent=double.Parse(row["Сумма"].ToString())*100/my_total;
    // добавляем 0, если меньше 10
    if (my_procent>=10) {
    my_format=my_procent.ToString();
    }
    else {my_format="0"+my_procent.ToString();
    		}
    // обрезаем строку до 5 символов
    if (my_format.Length>=5) {
    row["Процент"]=(my_format.Substring(0,5));
    }
    else {row["Процент"]=my_format;
    		}
    	}
    // А теперь считаем 100 %
    my_summa=0;
    foreach (DataRow row in dataCell.Rows) {
    my_summa=my_summa+float.Parse(row["процент"].ToString());
    		}
    // сортируем по цели
    DataView sortedCell=new DataView(dataCell);
    sortedCell.Sort="Процент DESC";
    // фильтруем пустые строки
    sortedCell.RowFilter="Сумма<>'0'";
    dataGrid2.DataSource=sortedCell;
    }

    Шаг 9. Создаем процедуру "О программе"

    Для опции главного меню "О программе" пишем:

    private void menuItem5_Click(object sender, System.EventArgs e) {
    MessageBox.Show("Программа запросов с группировкой данных\n"+
    "по целям платежей и фирмам-поставщикам товаров и услуг\n"+
    	"(C)Родигин Л.А., март 2006,\n"+
    	"Платформа C#.NET MS VisualStudio 2003","О программе");
    }

    Шаг 10. Выход из приложения

    Для опции главного меню "Выход" пишем:

    private void menuItem4_Click(object sender, System.EventArgs e) {
    Application.Exit();
    }
    Вернуться к учебному плану