На одном из предыдущих уроков я уже затрагивал вопрос о подготовке технического задания на разработку программы.
И все же, чтобы мой уважаемый читатель имел представление о том, что его ждет впереди, я предлагаю своеобразный способ постановки технического задания - скриншоты меню с учетом изложенной ранее формулы.
Напомню, что о том, как создать и наполнить пунктами главное меню приложения, я уже рассказывал в уроке №2.
Итак, как и любая другая программа, работающая с цифрами, программа "Расходы" должна позволять оператору выполнять стандартный набор функций:
- ввод данных,
- изменение данных,
- получение отчетности (вывод результатов на печать или экспорт в общепринятый формат электронной таблицы).
И было бы совсем не плохо, если ли бы программа поддерживала многоязыковый интерфейс и имела бы контекстно зависимую справочную систему.
Если воспринимать данный рисунок как техническое задание на разработку программы, то становится примерно понятно: как много нужно всего сделать, чтобы программа стала полноценным инструментом.
Я уверен, что, используя навыки, полученные на уроке 4, Вы легко создадите ActionList и оформите пункт меню "Файл - Выход" :-)
На этом можно было бы и закончить, предоставив Вам время на создание заготовки будущего приложения.
Но! На самом первом уроке! я рассказывал о том, как исключить запуск второй копии программы. Здесь уместно будет добавить пару проверок в код проекта.
Первая из новых функций будет предназначена для проверки формата системной даты. Обусловлено это тем, что хранилищем для данных, с которыми будет работать программа, я выбрал базу данных Access, о создании которой мы поговорим чуть позже. Access - самая подходящая для подобных разработок среда. Имея ввиду простоту ее использования, ее даже называют "средой для домашних хозяек". Однако, многолетняя практика использования СУБД Access дает мне все основания утверждать, что встроенные возможности SQL, путаясь в неоднозначностях форматов даты заокеанского и прочих, использующих в качестве разделителя точку, нередко приводят к ошибкам при обращении к таблицам базы данных посредством SQL запросов, содержащих поля типа "дата". Я нашел "средство борьбы" с особенностями национальных настроек. Access перестает пугать корявыми результатами запросов, если в системной дате вместо разделителя "." использовать допустимый разделитель "/". Новая функция как раз и будет отвечать на вопрос: "Является ли разделителем разрядов в системной дате "/"?"
Вторая функция будет пытаться определить наличие файла настроек программы, т.е. файла с расширением ini, без которого работа программы также невозможна.
Итак. Вы создали новый проект, сохранили его как Rashod.bdsproj, а единственную форму в нем - как Main.pas.
Используйте меню Project - View Source:
program Rashod;
uses Forms, Windows, iniFiles, ...; // По мере создания программы список будет пополняться
{$R *.res}
uses Forms, Windows, iniFiles, ...; // По мере создания программы список будет пополняться
{$R *.res}
// Несколько необходимых переменных
var HM: THandle;
var HM: THandle;
ini: TIniFile; // Переменная, позволяющая обратиться
// к файлу ini
ConnectionString :string; // Переменная, в которую в будущем
// будет записана строка подключения к базе данных
// Эту функцию мы уже рассматривали ранее
function Check: boolean; {проверка на запуск второй копии программы}
begin
HM := OpenMutex(MUTEX_ALL_ACCESS, false, 'MyOwnMutex');
Result := (HM <> 0);
if HM = 0 then HM := CreateMutex(nil, false, 'MyOwnMutex');
end;
// Функция проверки формата даты
function CheckDate: boolean; {проверка на Правильность системной даты (/)}
var fStr: String;
begin
Result:=false;
fStr:=DateToStr(Date()); // Получение системной даты, преобразование ее в строку
If Pos('/',fStr)=0 Then ShowMessage('Формат системной даты не верен, работа программы невозможна. ') else Result:=True; // Поиск символа "/" в строке
end;
// Функция проверки наличия ini файла
Function Check_No_INI: boolean;
begin // попытка считывания из ini файла, находящегося в текущем каталоге
ini:=TiniFile.Create(GetCurrentDir + '\Rashod.ini');
ConnectionString:=Ini.ReadString('General','ConnectionString','');
if ConnectionString='' then
begin Result:=true; MessageDlg('Файл Rashod.ini не определён. Обратитесь к разработчику.',mtError, [mbOk], 0); end
else Result:=false
end;
// Использование всех имеющихся функций перед стартом приложения
begin
if CheckDate then
if Check then exit
else
if Check_No_INI then exit
else
begin
Application.Initialize;
Application.Title := 'Учет доходов и расходов';
Application.HelpFile := '';
Application.CreateForm(TMainFrm, MainFrm);
Application.Run;
end;
end.
Что же дальше?
Наверное, кто-то этого ждал уже давно: в следующем уроке я буду рассказывать о создании базы данных.
Наверное, кто-то этого ждал уже давно: в следующем уроке я буду рассказывать о создании базы данных.
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.