В этом сценарии база данных MySQL служит хранилищем данных о личных расходах по различным, заранее предопределенным категориям. Пользователь имеет возможность вводить расходы по этим категориям, пользуясь простым интерфейсом. Этот вывод потом преобразуется в SQL-запросы и сохраняется в базе данных MySQL, откуда они и могут быть выбраны и проанализированы для вывода отчета.
При создании приложения подобного образа сначала необходимо спроектировать таблицы, в которых будет храниться вся необходимая информация.
Листинг 19.28.
CREATE TABLE categories
(cid int(8) NOT NULL default '0', cname varchar(255) NOT NULL default', PRIMARY KEY (cid)
)
CREATE TABLE data (
eid int(8) NOT NULL auto_increment, cid int(8) NOT NULL default '0', date date NOT NULL default '0000-00-00', amt float(11,2) NOT NULL default '0.00', PRIMARY KEY (eid)
)
Для создания этого приложения воспользуемся простой архитектурой. В таблице categories будем хранить список категорий, каждой из них будет присвоен соответствующий номер, а в таблице data будут храниться данные о расходах, введенные пользователем. Каждая запись о расходах в таблице data также идентифицируется уникальным идентификатором записи и имеет три атрибута: дату расхода, сумму расхода и категорию, к которой этот расход можно причислить (это внешний ключ на идентификатор категории, который задан в таблице categories).
Добавим еще несколько категорий в таблицы categories и "зальем" начальную информацию в таблицу data.
Листинг 19.29.
INSERT INTO categories (cid, cname) VALUES (1, 'Развлечения');
INSERT INTO categories(cid, cname) VALUES (2, 'Путешествия');
INSERT INTO categories(cid, cname) VALUES (3, 'Подарки');
INSERT INTO categories (cid, cname) VALUES (4, 'Ремонты');
INSERT INTO data (cid, cid, date, amt) VALUES (1, 1, '2003-04-05',568.99);
INSERT INTO data (cid, cid, date, amt) VALUES (2, 4, '2003-11-19',100.00);
INSERT INTO data (cid, cid, date, amt) VALUES (3, 1, '2003-06-12',250.00);
INSERT INTO data (cid, cid, date, amt) VALUES (4, 2, '2003-08-16',50.00);
Итак, данные получены. Как видите, создание программы и использованием C API-интерфейса MySQL - довольно простая задача. Получившаяся программа выглядит следующим образом.
Листинг 19.30.
#include <stdio.h> #include <mysql.h> int main ()
{
/* объявить переменные */
В отличие от предыдущего клиента, этот клиент не принимает параметры соединения с базой данных из командной строки. Для этих целей он берет данные из конфигурационного файла expenses.conf, расположенного в том же каталоге и считывает из него аргументы для функции mysql_real_connect() . Этот конфигурационный файл предельно прост: он содержит одну строку в формате host:user:pass:db. Первые несколько строк исходного текста в предыдущей распечатке имеют отношение непосредственно к анализу этого файла.
После прочтения конфигурационного файла, делается попытка соединения с базой данных MySQL, и при успешном завершении отображается меню для выбора возможных действий. Если пользователь выбирает вариант № 1, запускается оператор SELECT с объединением таблиц categories и data по полю cid, где с помощью функции SUM() и предложения GROUP BY, будут получены суммы по каждой категории. При выборе действия № 2, программа запрашивает дату, количество и идентификатор категории и использует эти данные для создания и выполнения запроса INSERT с целью сохранения этой записи в базе данных MySQL. Ввод любого другого значения приводит к закрытию программой соединения с базой данных MySQL и к завершению работы.
Ниже представлено несколько примеров работы этого приложения.
Листинг 19.31.
[user@host]$ ./expenses.bin [1] Просмотр суммарных расходов [2] Ввести расходы [3] Выход
Выбрать значение из списка: 1 Развлечения = 1518.99 Подарки = 250.00 Ремонт = 200.00 Путешествия = 150.00
[user@host]$ ./expenses.bin
[1] Просмотр суммарных расходов
[2] Ввести расходы
[3] Выход
Выбрать значение из списка: 2 Ввести дату (yyyy-mm-dd): 2003-12-15 Ввести значение: 2450.50
Вести номер категории (1=Развлечения 2=Путешествия 3=Подарки 4= Ремонт ): 2
[user@host]$ ./expenses.bin [1] Просмотр суммарных расходов [2] Ввести расходы [3] Выход
Выбрать значение из списка: 1 Развлечения = 1518.99 Подарки = 250.00 Ремонт = 200.00 Путешествия = 2600.50
Резюме
В этой главе представлено обсуждение работы C API-интерфейса MySQL, поставляемого вместе с MySQL. В ней показано, каким образом с помощью ЯП C можно создать клиент, который мог бы работать с MySQL-сервером. C API-интерфейс MySQL имеет несколько различных функций, предназначенных для упрощения задачи подключения к серверу, выполнения запросов и обработки результатов.
Эта глава содержит два практических примера: интерактивный SQL-клиент, принимающий SQL-запросы и возвращающий результирующие наборы, во многом аналогичный тому, что поставляется вместе с дистрибутивом MySQL, и приложение, предназначенное для учета расходов и позволяющее получать примитивные суммарные отчеты. Оба приложения реализованы с помощью C API-интерфейса MySQL, с иллюстрацией процедуры подключения к базе данных, выборки из таблиц и обновления данных в таблицах, а также форматирования результатов для их вывода на экран.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
Все о MySQL. Учет расходов
28-12-2009
<< Предыдущая статья | Следующая статья >> |
Все о MySQL. Практическое применение C API-интерфейса MySQL | Все о MySQL. MySQL и Perl |