Высокоуровневые методы программирования
Содержание стр
Задание на разработку программного комплекса. 2
Функциональная схема приложения 3
Спецификация программного комплекса. 5
Название задачи. 5
Описание задачи. 5
Управление режимами работы программы. 5
Входные данные. 6
Выходные данные 6
Структурная диаграмма программного комплекса. 7
Блок схема главного модуля 8
Данные для тестирования программного модуля и программного комплекса в целом. 9
Инструкция пользователя. 10
Список используемых источников. 17
Приложение 1 18
Задание на разработку программного комплекса.
Разработать информационную подсистему контроля бюджета семьи.
Информация, обрабатываемая в системе, должна храниться в текстовом или типизированном файлах.
Данные, которые должны быть отражены в подсистеме: месяц, доход, коммунальные расходы, продуктовые расходы, расходы на промтовары, расходы на удовлетворение духовных потребностей, другие расходы.
Сведения о доходах и расходах дополняются по мере их появления.
В подсистеме должны решаться следующие задачи:
- Создание файла.
- Дополнение файла.
- Корректировка данных.
- Формирование ответов на запросы пользователя:
- За указанный месяц определить суммарные доходы и расходы;
- За текущий год вывести на экран в виде таблицы данные об ежемесячных суммарных доходах и расходах;
- За текущий год вывести на экран названия месяцев в порядке убывания разности между доходами и расходами;
- За текущий год по месяцам построить графики изменения расходов на коммунальные услуги в процентах к доходам;
- За указанный месяц построить круговую диаграмму, отражающую долю каждого вида расходов в суммарных расходах;
- Построить столбиковую диаграмму, отражающую за год долю каждого вида расходов в суммарных расходах. Столбики диаграммы расположить в порядке возрастания доли.
Функциональная схема приложения
Запуск программы
Загрузка данных и структуры таблицы из файла
Выбор дальнейших действий
Ввод дополнительных данных в таблицу
Вывод диаграммы
Круговая диаграмма
Столбиковая диаграмма или график
Заполнение временной таблицы
Диаграмма на экране
Сохранение данных в Файл
Спецификация программного комплекса.
Название задачи.
Задача на разработку программы учета семейного бюджета.
Программа называется «Бюджет семьи».
Для разработки использована среда программирования Delphi 2007 и набор дополнительных компонентов Developer Express.
Программа написана для операционной системы Windows XP и её работа гарантируется на любом компьютере поддерживающего работу с данной ОС.
Описание задачи.
Так как в рамках данной программы было необходимо было строить диаграммы соотношения велечин, то в программе использованы следующие формулы.
∑X т.е. сумма всех элементов. Заданного множества. Например сумма доходов за год
∑Y/∑X отношения сумм всех элементов двух различных множеств. Например отношение суммы коммунальных расходов к доходам за месяц.
Управление режимами работы программы.
Для пользователя создан дружественный графический интерфейс, представленные в виде экранов с данными.
Экран 1. Таблица отображающая полные данные. Пользователь имеет возможность отфильтровать, отсортировать или сгруппировать данные по любому столбцу. Тут же можно внести данные напрямую в таблицу.
Экран 2. Круговая диаграмма показывающая какое влияние на итоговую сумму денег в кошельке пользователя повлиял тот или иной год. При нажатие на конкретный год, диаграмма меняется и показывает сумму доходов и каждого типа расходов, и их влияние на итоговую сумму за год.
Экран 3. График изменения доли коммунальных платежей за год по месяцам относительно доходов за месяц.
(Для отображения диаграммы
надо выбрать год вверху
Экран 4. Столбиковая диаграмма показывающая долю каждого типа расходов в доходах за месяц.
В нижней части всех четырех экранов находится кнопка для сохранения внесенных в таблицу данных в файл, т.к. реализована возможность внести данные в таблицу, посмотреть диаграммы и тока потом решить сохранять или нет внесенные данные.
В верхней части экрана находится меню, позволяющее выбирать экран для отображения.
Входные данные.
Входными данными являются год за который вносится запись (тип поля integer), месяц(тип поля String. Вносится из списка) сумма дохода/расхода(тип поля Float), и тип дохода/расхода (тип поля String, вносится из списка).
Выходные данные
Выходными данными являются таблица со значениями, и диаграммы.
Во время ввода данных
отслеживается соответствие типа вводимых
данных типу поля, однообразность написания
месяцев и типов дохода/
Структурная диаграмма программного комплекса.
Программа состоит из одного единственного модуля.
UMAin.
В модуле находится cxGrid, отвечающий за ввод данных в таблицу и вывод данных в виде таблицы и диаграмм.
В этом же модуле находится кнопка сохранения таблицы в файл и меню переключения между таблицей и диаграммами.
В модуле находятся следующие процедуры. Иерархия соответствует уровням списка.
- procedure bMainClick(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure mmCDiagClick(Sender: TObject);
- procedure mmTableClick(Sender: TObject);
- procedure mmGrafClick(Sender: TObject);
- procedure mmSDiagClick(Sender: TObject);
- procedure Summing;
- procedure Adding;
- procedure mmExitClick(Sender: TObject);
Блок схема главного модуля
mmGrafClick
Начало
vtData.LoadFromFile
onClick
bMainClick
mmCDiagClick
mmSDiagClick
mmExitClick
mmTableClick
Конец
Данные для тестирования программного модуля и программного комплекса в целом.
Так как несмотря на то, что данные хранятся в виде типизированного xml файла, приложение по своей сути работает с таблицей и является в некотором роде базой данных, то тестирование сводится к введению в поля таблицы значений для расчета.
Инструкция пользователя.
Ниже представлена краткая
инструкция по работе с программой
Бюджет семьи. При первом запуске
программы пользователю доступны для
отображения тестовые/
Теперь рассмотрим интерфейс программы.
Сразу после запуска перед нами появится следующее окно.
В котором мы видим поле данных в центре, кнопку для сохранения данных в файл с подписью «Внести данные», и в верхней части окна мы видим меню «Файл».
Рассмотрим каждый элемент подробнее.
Начиная с самого простого. Кнопка внесения данных.
Данная кнопка доступна в любой момент работы программы. При нажатии на неё происходит сохранения текущего состояния таблицы в файл Data.xml.
До момента нажатия данной кнопки все изменения в таблице являются временными и существуют только до перезапуска программы.
Далее рассмотрим поле данных
В верхней части находится место куда мы можем перетащить столбец для группировки данных. Например Сгруппировать данные по годам.
В верхнюю часть можно поместить как 1 так и несколько столбцов, путем перетаскивая мышью прямо из таблицы.
При группировке в заголовке группы отображается итоговая сумма по столбцу «Сумма» для данной группы. А внизу поля появляется надпись «в кошельке осталось» показывающая итоговую сумму все доходы-все расходы
Кроме того, по каждому полю можно настроить фильтрацию каких-либо определенных значений. Для этого нужно нажать на заголовке поля и выбрать интересующий нас значения.
При выборе слова Custom нам будет предложено задать более сложный фильтр
В данном окне мы наблюдаем 2 списка условий в левой части, условия могут быть различны, равно, не равно, больше, меньше, больше или равно, меньше или равно, и т.д. условия имеют названия на английском языке. Справа в два поля мы можем ввести значения для данного условия. Условия можно использовать оба сразу или только одно из них, при использовании обоих условий нужно выбрать их соединитель and(и) или or (или), т.е. должны они выполняться оба или хотя бы одно из них.
В нижней части поля данных мы видим ряд кнопок
Слева направо эти кнопки служат
Переход к первой записи, переход к верхней записи в окне(если все записи не помещаются на экран), переход к предыдущей записи, переход к следующей записи, переход к последней записи в окне, переход к последней записи таблицы, добавить запись, добавить запись в конец(разница в месте отображения записи. Сразу после текущей или в конце таблицы), удалить запись, редактировать запись, применить изменения, отменить изменения(эти две кнопки нужны при редактировании или добавлении записи), конструктор фильтров.
Данное окно предлагает нам инструменты для создания фильтров почти любой сложности. Интерфейс на английском языке.
Рассмотрим компоненты меню «Файл»
В данном меню 4 пункта.
3 отвечают за отображения диаграмм. Экраны диаграмм абсолютно аналогичны друг другу.
1)Круговая диаграмма. Вызов диаграммы показывающей долю годовых сумм в итоговой. При нажатии на любой год диаграмма преобразуется в подробную по доходам и расходам в году
Параметр vtfYear показывает какой год сейчас выбран, при нажатии на него открывается список годов за которые есть данные.
2)График. Показывает график изменения %доли комунальных расходов в доходе семьи. Для отображения необходимо выбрать год
3)Столбиковая диаграмма
показывающая долю каждого
4)Выход. Выход из программы
Список используемых источников.
- www.cyberforum.ru
- www.delphikingdom.ru
- www.forum.sources.ru
- www.rsdn.ru
- www.sql.ru
Приложение 1
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, cxStyles, dxSkinsCore, dxSkinsDefaultPainters, dxSkinscxPCPainter,
cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, DB,
cxDBData, StdCtrls, ExtCtrls, cxGridCustomTableView, cxGridTableView,
cxGridDBTableView, cxGridLevel, cxClasses, cxControls, cxGridCustomView,
cxGrid, MemDS, VirtualTable, cxDropDownEdit, cxCurrencyEdit, cxPropertiesStore,
cxGridChartView, cxGridDBChartView, Menus, DBTables, cxLookAndFeels,
cxLookAndFeelPainters, dxSkinBlack, dxSkinBlue, dxSkinCaramel, dxSkinCoffee,
dxSkinDarkRoom, dxSkinDarkSide, dxSkinFoggy, dxSkinGlassOceans,
dxSkiniMaginary, dxSkinLilian, dxSkinLiquidSky, dxSkinLondonLiquidSky,
dxSkinMcSkin, dxSkinMoneyTwins, dxSkinOffice2007Black, dxSkinOffice2007Blue,
dxSkinOffice2007Green, dxSkinOffice2007Pink, dxSkinOffice2007Silver,
dxSkinOffice2010Black, dxSkinOffice2010Blue, dxSkinOffice2010Silver,
dxSkinPumpkin, dxSkinSeven, dxSkinSharp, dxSkinSilver, dxSkinSpringTime,
dxSkinStardust, dxSkinSummer2008, dxSkinValentine, dxSkinXmas2008Blue;
type
TfMain = class(TForm)
cxGrid1DBTableView1: TcxGridDBTableView;
cxGrid1Level1: TcxGridLevel;
cxGrid1: TcxGrid;
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
bMain: TButton;
DataSource1: TDataSource;
cxGrid1DBTableView1vtfMonth: TcxGridDBColumn;
cxGrid1DBTableView1vtfYear: TcxGridDBColumn;
cxGrid1DBTableView1vtfSum: TcxGridDBColumn;
cxGrid1DBTableView1Column1: TcxGridDBColumn;
MainMenu1: TMainMenu;
mmFail: TMenuItem;
mmCDiag: TMenuItem;
cxGrid1Level2: TcxGridLevel;
cxGrid1DBChartView1: TcxGridDBChartView;
cxGrid1DBChartView1Series1: TcxGridDBChartSeries;
cxGrid1DBChartView1DataGroup1: TcxGridDBChartDataGroup;
cxGrid1DBChartView1DataGroup2: TcxGridDBChartDataGroup;
mmTable: TMenuItem;
cxGrid1Level3: TcxGridLevel;
cxGrid1DBChartView2: TcxGridDBChartView;
cxGrid1DBChartView2Series1: TcxGridDBChartSeries;
DataSource2: TDataSource;
mmGraf: TMenuItem;
cxGrid1DBChartView2DataGroup1: TcxGridDBChartDataGroup;
cxGrid1DBChartView2DataGroup2: TcxGridDBChartDataGroup;
cxGrid1Level4: TcxGridLevel;
cxGrid1DBChartView3: TcxGridDBChartView;
cxGrid1DBChartView3Series1: TcxGridDBChartSeries;
cxGrid1DBChartView3DataGroup1: TcxGridDBChartDataGroup;
mmExit: TMenuItem;
mmSDiag: TMenuItem;
cxGrid1DBChartView3DataGroup2: TcxGridDBChartDataGroup;
vtData: TVirtualTable;
vtData2: TVirtualTable;
procedure bMainClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure mmCDiagClick(Sender: TObject);
procedure mmTableClick(Sender: TObject);
procedure mmGrafClick(Sender: TObject);
procedure mmSDiagClick(Sender: TObject);
procedure Summing;
procedure Adding;
procedure mmExitClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fMain: TfMain;
rc, rc1: integer; //переменные содержат номер строки
sy, sm, sty: string; //значение года, месяца тип дохода/расхода
sum, sum1: real; //сумма по данному типу доходов/расходов
bis:boolean; //наличие данных по году во второй таблице
implementation
{$R *.dfm}
procedure TfMain.bMainClick(Sender: TObject);//При нажатии на кнопку
begin
vtData.SaveToFile('Data.xml');
end;
procedure TfMain.FormCreate(Sender: TObject);
begin
vtData.LoadFromFile('Data.xml'
cxGrid1Level1.Visible:=true;//
cxGrid1Level2.Visible:=false;/
cxGrid1Level3.Visible:=false;/
cxGrid1Level4.Visible:=false;/
end;
procedure TfMain.mmCDiagClick(Sender: TObject);//выбор круговой диаграммы
begin
cxGrid1Level1.Visible:=false;/
cxGrid1Level2.Visible:=true;//
cxGrid1Level3.Visible:=false;/
cxGrid1Level4.Visible:=false;/
end;
procedure TfMain.mmExitClick(Sender: TObject);
begin
close();
end;
procedure TfMain.mmGrafClick(Sender: TObject);//при выборе графика
begin
vtData2.Clear;//очищаем временную таблицу
rc:=1;//переходим к первой записи
sum:=0;//обнуляем переменную для суммы
while rc<=vtData.RecordCount+1 do//цикл до конца таблици
begin
vtData.RecNo:=rc;//переход к следующей записи
if vtData.Fields[3].AsString='
begin
sm:=vtData.Fields[0].AsString;
sy:=vtData.Fields[1].AsString;
sum:=sum+ABS(vtData.Fields[2].
rc1:=1;//ставим в начало второй счетчик записей
while rc1<=vtData.RecordCount+1 do//до конца таблици ищем
begin
vtData.RecNo:=rc1;//начиная с первой записи
if (vtData.Fields[0].AsString=sm)
(vtData.Fields[1].AsString=sy)
(vtData.Fields[3].AsString='
begin
sum:=sum/vtData.Fields[2].
vtData2.Append;//вносим
vtData2.Fields[0].AsString:=
vtData2.Fields[1].AsString:=
vtData2.Fields[2].AsFloat:=
end;
inc(rc1);//переходим к следующей строке
end;
sum:=0;//обнуляем сумму за месяц
end;
inc(rc);//ищем далее
end;
cxGrid1Level4.Visible:=false;/
cxGrid1Level3.Visible:=true;//
cxGrid1Level2.Visible:=false;/
cxGrid1Level1.Visible:=false;/
end;
procedure TfMain.mmSDiagClick(Sender: TObject);//при выборе столбиковой диаграммы
begin
vtData2.Clear;//очищаем временную таблицу
summing;//вызов процедуры для заполнения данных
cxGrid1Level1.Visible:=false;/
cxGrid1Level2.Visible:=false;/
cxGrid1Level3.Visible:=false;/
cxGrid1Level4.Visible:=true;//
end;
procedure TfMain.mmTableClick(Sender: TObject);
begin
cxGrid1Level1.Visible:=true;//
cxGrid1Level2.Visible:=false;/
cxGrid1Level3.Visible:=false;/
cxGrid1Level4.Visible:=false;/
end;
procedure TfMain.Summing;
var
rc2, rc3:integer;//счетчики записей
begin
rc2:=1;//счетчик устанавливается в начальное значение
sum:=0;
while rc2<=vtData.RecordCount+1 do//перебор записей до конца таблици
begin
vtData.RecNo:=rc2;//переход к следующей записи
bis:=False;//иначально считается что во временной таблице данных нет
if vtData.Fields[3].AsString='
begin
rc3:=1;//второй счетчик в начальном положении
sy:=vtData.Fields[1].AsString;
while rc3<=vtData2.RecordCount+1 do//до конца таблици ищем
begin
vtData2.RecNo:=rc3;
if vtData2.Fields[1].AsString=sy then//есть ли во временной таблице данные
bis:=true;//за заданный год. Если находим переменная становится истинна
inc(rc3);//переход к следующей записи
end;
if bis=false then//если даненых за год нет, начинаем их собирать
begin
rc3:=rc2+1;//начиная с последней обнаруженной записи по доходу
sum:=sum+vtData.Fields[2].
while rc3<=vtData.RecordCount do//до конца таблицуи
begin
vtData.RecNo:=rc3;
if(vtData.Fields[1].AsString=
(vtData.Fields[3].AsString='
sum:=sum+vtData.Fields[2].
inc(rc3);
end;
sum1:=sum;//записываем сумму доходов в другую переменную
sty:='Комун.Расходы';//задаем тип расходов для поиска
Adding;//находим данные и добавляем в таблицу
sty:='Промтов.Расходы';//для каждого типа
Adding;//с помощью отдельной процедуры
sty:='Продукт. Расходы';//
Adding;//
sty:='Душевные Расходы';//
Adding;//
sty:='Прочие Расходы';//
Adding;//
end;
end;
inc(rc2);
end;
end;
procedure TfMain.Adding;
var
rc4: integer;//счетчик записей
begin
rc4:=1;//ставим в начало
sum:=0;//обнуляем сумму
while rc4<=vtData.RecordCount+1 do//ищем до конца таблици
begin
vtData.RecNo:=rc4;
if((vtData.Fields[1].AsString=
begin//если найденная строка подходит по году и типу суммы
sum:=sum+ABS(vtData.Fields[2].
end;
inc(rc4);
end;
sum:=sum/sum1;//находим отношение
vtData2.Append;//добавляем запись во вторую таблицу
vtData2.Fields[1].AsString:=
vtData2.Fields[2].AsFloat:=
vtData2.Fields[3].AsString:=
end;
end.

- Высокочастотная электротерапия
- Высокочастотные генераторы
- Высокочастотные методы обработки пищевых продуктов
- Высокочастотные микрофильтры
- Высокочастотный нагрев диэлектрических материалов
- Высотна болезнь
- Высотная болезнь
- Высокоскоростной железнодорожный транспорт за рубежом
- Высокоскоростные сети
- Высокотемпературная сверхпроводимость
- Высокотемпературная сверхпроводимость. Достижения и перспективы
- Высокотехнологичные производства
- Высокоточная машина для поперечной резки с компьютерным управлением HQD 800-1600
- Высокоуровневые методы информатики и программирования