Разработка Web-приложения средствами C++ Builder

Тип работы:
Отчет
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Оглавление

  • Введение
  • Глава 1. Разработка Web-приложения
  • Постановка задачи
  • Карта сайта
  • Интерфейс сайта
  • Алгоритмы реализации интерактивных функций сайта
  • Анализ работы по разработке сайта
  • Глава 2. Разработка программного продукта средствами C++ Builder
  • Постановка задачи
  • Структура программы
  • Интерфейс программы
  • Алгоритмы реализации основных функций программы
  • Анализ работы по разработке программного продукта
  • Заключение
  • Приложения
  • Техническое задание для сайта
  • Программный код сайта
  • Программный код программы

Введение

Цель и задача практики

Цель:

Формирование у студентов общих и профессиональных компетенций, приобретение практического опыта при освоении таких видов деятельности, как «Разработка программных модулей, программного обеспечения для компьютерных систем» и «Разработка Web-приложений»

Задачи:

1. Разработка программного модуля, программного обеспечения для компьютерных систем (средствами C++ Builder).

2. Разработка Web-приложения (средствами PHP, AJAX).

Общие сведения о предприятии.

ООО НоваИнТех Сферы деятельности: Ремонт оргтехники, продажа программного обеспечения, услуги системного администрирования, ремонт компьютеров. Расположен по ул. Ленина, 10п ст3.

Глава 1. Разработка Web-приложения

Постановка задачи

Сайт предназначен для публикации данных связанных с Игримским профессиональным колледжем. Данные включают в себя общую информацию об учреждении, информацию необходимую для поступления, информацию о значимых событиях, в которых участвуют либо участвовали студенты, преподаватели, администрация колледжа. Целевой аудиторией являются как студенческий состав с руководством, так и потенциальные абитуриенты. Разделим всех посетителей на несколько групп в порядке повышения уровня отношений с сайтом:

· Случайные

· Заинтересовавшиеся

· Целевые

· Постоянные

Случайные — Посетители, которые просматривают одну или несколько страниц сайта и уходят. Они приходят случайно, не находят нужных данных и покидают сайт.

Заинтересовавшиеся — Посетители, которые опять-таки попали на сайт случайно, но заинтересовавшись в обнаруженных данных решают изучить найденное подробнее. В итоге посетители относящиеся к этой категории либо переходят в категорию «Целевые» либо покидают сайт забывая о нем.

Целевые — Люди, которые наиболее часто приходят, увидев сайт в результатах поисковой выдачи по своему запросу. Они намерены ознакомится со всей информацией которой они интересовались. Изучив ее они покидают сайт.

Постоянные — Это люди которые заходят на сайт уже не в первый раз, они следят за обновлениями на сайте ожидая публикации новой информацией которой они заинтересованы. Как правило это сами студенты и преподаватели.

Карта сайта

Интерфейс сайта

Как можно увидеть из скриншота интерфейс сайта прост и не вызовет никаких вопросов, но если вопрос возник всегда можно задать его воспользуясь страницей обратной связи. В верхней части расположены ссылки на странички, посвященные указанным разделам сайта. В правой части можно увидеть структурированное меню, благодаря которому облегчается поиск искомой информации. И наконец, на главной части сайта располагается искомая информация, на скриншоте это «Новости».

Алгоритмы реализации интерактивных функций сайта

При создании сайта я брал в инициативу простоту реализации, так как собственные написанные функции не привели бы к максимально эффективным и простым способам решения я решил не «изобретать велосипед» и прибег к использованию уже готовых функций. В пример фотогалерея.

Подключаемся к файлам todo. js который содержит набор функций для работы и gallery. css который является листом стилей отвечает за красивое отображение самой формы галереи.

< link href="./. /css/gallery. css" rel="stylesheet" type="text/css">

< script type="text/javascript" src="./. /css/todo. js"></script>

< script type="text/javascript">

todo. onload (function (){

todo. gallery ('gallery');

каждый элемент (Изображение) галереи является элементом маркированного списка, поэтому обращатся к ним мы будем так

< p><a href="images/1/7. jpg" rel="gallery[1]" title="">

< img src="images/1/7. jpg" alt="" width="300"> </a> < /p>

< p><a href="images/1/5. jpg" rel="gallery[1]" title="">

< img src="images/1/5. jpg" alt="" width="300"> </a> < /p>

Код реализации переключения между элементами

'next': function (){if (this. current<this.a. length-1)this. set (this. a[this. current+1]);},

'prev': function (){if (this. current>0)this. set (this. a[this. current-1]);},

'setTitle': function (){if (this. a[this. current]. title){this.e. appendChild (todo. create ('div',{'class':'todo_gallery_title'}, this. a[this. current]. title),{});}},

'setNav': function (){

if (this.a. length==1)return;

var e=this.e. appendChild (todo. create ('div',{'class':'todo_gallery_nav'},(this. current+1)+' of '+this.a. length));

if (this. current>0){

var left=e. appendChild (todo. create ('div',{'class':'todo_gallery_button_left','title':'Prev'}));

left. _gallery=this;

left. onclick=function (){this. _gallery. prev ();};

};

if (this. current<this.a. length-1){

var right=e. appendChild (todo. create ('div',{'class':'todo_gallery_button_right','title':'Next'}));

right. _gallery=this;

right. onclick=function (){this. _gallery. next ();};

}

Анализ работы по разработке сайта

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

Тщательно проанализировав сайт, основываясь на собственных знаниях, я сделал следующие выводы. С точки зрения соответствия нормативным требованием на сайте соблюдены и не нарушены пункты заключенные в законе об образовании. Однако с точки зрения удобств обновления сайт показал себя не с лучшей стороны. Информация находящаяся на сайте (включая большинство изображений и документации) хаотично разбросана в одной единственной директории «_private», такой подход конечно прост, но с увеличением хранимой информации это вызовет огромное количество проблем при обновлении. Располагаемые данные в разделе «События» идут сплошняком, что еще сильнее усложнит ситуацию в будущем. С точки зрения удобства поиска информации, меню обустроено неплохо, однако при его структурировании можно было бы добиться большей эффективности. Плотно расставленные элементы меню расположенные сплошным списком отпугивают глаза и в целом придают не очень приятный внешний вид. С дизайнерской же точки зрения сайт так же относительно неплох. Подобранные цвета при нужном колорите могли бы придать сайту более приятный вид. Способ просмотра фотогалереи никуда не годится! Иногда в текстах встречается слишком много жирного и курсивно подкрашенного текста, не говоря уже о громадной размерности некоторых текстов, это не хороший тон в оформлении содержимого.

При создании собственного варианта сайта я постарался учесть все замеченные мной недостатки, однако некоторые оставил неизменными, так как не имел необходимых знаний для их исправлений. К примеру огромные тексты на некоторых страницах пришлось оставить неизменными, так как у меня нет знаний о том какую степень важности они имеют.

Глава 2. Разработка программного продукта средствами C++ Builder.

Постановка задачи

Программа предназначена для автоматизации рабочих процессов, в частности поиска и удаления в excel документах неправильных либо устаревших данных. Основной функцией программы является осуществление поиска списка неправильных email в списках с правильными email. Программа должна автоматически найти и удалить все вхождения неправильных email в списке с правильными email. Она так же автоматически определяет местоположение столбца с email в файле, в случае если столбец с email не обнаружен, выдает пользователю соответствующее сообщение. Так как списки могут достигать огромных размеров и некоторые email повторяются программа не должна удалять email в файле большее количество раз чем он входит в список с неправильными email. Пользователю должен быть дан выбор, удалять ли не заполненные строки в списках с правильными email. По завершению работы должна быть представлена информация по количеству удаленных email, количеству email до удаления и после удаления, так же должно быть предложено повторить процедуру. Программа предназначена для использования сотрудниками офиса в целях автоматизации процесса обработки excel документов. Программа должна иметь простой и понятный интерфейс.

Структура программы

< Подключение заголовочных файлов>

< Объявление глобальных переменных>

< Обьявление функций, классов и др. >

Пользователь выбирает файл с неправильными email

{

Проверяем точно ли пользователь выбрал файл

{

Сообщаем об ошибке если пользователь не выбрал файл и прекращаем работу

}

иначе

{

Открываем соединение с файлом

Получение параметров таблицы: кол-во строк, столбцов

Записываем полученные данные для работы

Записываем неправильных email в массив

Закрываем соединение с файлом

Сообщаем количество неправильных email

}

}

Проверяем выбрал ли пользователь файл с неправильными email

{

Если не выбрал сообщаем об этом и прекращаем работу

}

Иначе

{

Пользователь выбирает файл с правильными email

{

Сообщаем если пользователь не выбрал файл с правильными email и прекращаем работу

}

Иначе

{

Открываем соединение с файлом

Получаем параметры таблицы

Определяем столбец с email

Закрываем соединение с файлом

}

}

}

Создаем копию файла с правильными email

{

Открываем соединение

Получаем параметры таблицы для работы

Осуществляем поиск неправильных email в файле с правильными email

Сохраняем обработанную копию под новым именем

Открываем файл для просмотра

Сообщаем количество удаленных email, email до и после удаления

Спрашиваем пользователя желает ли он обработать еще один файл

{

Желает, заного выполняем все действия

}

Иначе завершаем работу

}

Интерфейс программы

Как показано на скриншоте интерфейс программы прост, он будет понятен даже не обученным к работе с ПК сотрудникам. При нажатии на кнопку выбора файла с неправильными email откроется диалоговое окно в котором вам будет предоставлен выбор. При нажатии на кнопку выбора файла с правильными email откроется диалоговое окно в котором вам будет предоставлен выбор, после выбора на форме автоматически заполнится колонка с email вы должны будете проверить ту ли колонку нашла программа. Если поставить галочку напротив «Удалять пустые строки» то по нажатию кнопки сохранения файл будет обработан так, что пустые строки будут удалены. Если же не ставить галочку файл будет обработан без удаления пустых строк, удалены будут лишь строки содержащие неправильный email. В большом списке справа можно будет просмотреть неправильные email. Под этим списком расположена полоса состояния, в процессе работы программы она будет постепенно заполнятся и когда дойдет до конца, вы будете знать, что программа завершила работу.

Алгоритмы реализации основных функций программы

Основной функцией программы является конечно же поиск и удаление, ниже приведенный код описывает основной цикл реализации поставленной задачи.

while (ListBox1-> Count>0)

{

Application-> ProcessMessages ();

String str= vCells. OlePropertyGet («Item», q, w);

if (CheckBox1-> Checked)

{

Application-> ProcessMessages ();

String str= vCells. OlePropertyGet («Item», q, w);

if (str == ««)

{

AnsiString ch = q;

vVarSheet. OlePropertyGet («Rows», ch. c_str ()). OleProcedure («Select»);

MyExcel. OlePropertyGet («Selection»). OleProcedure («Delete»);

}

else

{

if (ListBox1-> Items->IndexOf (str) == -1)

{

q++;

}

if (ListBox1-> Items->IndexOf (str) ≠ -1)

{

int i = ListBox1-> Items->IndexOf (str);

ListBox1-> Items->Delete (i);

emaildel++;

AnsiString ch = q;

vVarSheet. OlePropertyGet («Rows», ch. c_str ()). OleProcedure («Select»);

MyExcel. OlePropertyGet («Selection»). OleProcedure («Delete»);

}

iRowsCount = MyExcel. OlePropertyGet («ActiveSheet»). OlePropertyGet («UsedRange»). OlePropertyGet («Rows»). OlePropertyGet («Count»);

}

if (q> iRowsCount)

{

ListBox1-> Items->Clear ();

}

iRowsCount = MyExcel. OlePropertyGet («ActiveSheet»). OlePropertyGet («UsedRange»). OlePropertyGet («Rows»). OlePropertyGet («Count»);

ProgressBar1-> Position++;

}

else

{

if (ListBox1-> Items->IndexOf (str) == -1 || str == «»)

{

q++;

}

if (ListBox1-> Items->IndexOf (str) ≠ -1)

{

int i = ListBox1-> Items->IndexOf (str);

ListBox1-> Items->Delete (i);

emaildel++;

AnsiString ch = q;

vVarSheet. OlePropertyGet («Rows», ch. c_str ()). OleProcedure («Select»);

MyExcel. OlePropertyGet («Selection»). OleProcedure («Delete»);

}

iRowsCount = MyExcel. OlePropertyGet («ActiveSheet»). OlePropertyGet («UsedRange»). OlePropertyGet («Rows»). OlePropertyGet («Count»);

ProgressBar1-> Position++;

if (q> iRowsCount)

{

ListBox1-> Items->Clear ();

}

}

}

Данный цикл будет работать до тех пор пока количество неправильных email не будет равно 0. Если в процессе обработки у нас останутся неправильные email они будут стерты как только мы проверим все строки с правильными email в файле, что позволит корректно завершить работу цикла.

Анализ работы по разработке программного продукта

В целом считаю практику по работе в С++ Builder очень полезной для собственного развития. В процессе работы над программой мне пришлось прочесть множество разнообразной литературы для того, что бы выполнить поставленную задачу. У меня возникали трудности, с которыми я раньше не сталкивался и для их преодоления иногда мне нужна была помощь. Я пополнил свои знания и в будущем буду их применять.

Заключение

программный сайт интерфейс компьютерный

В заключении скажу, что я получил много знаний и навыков необходимых для работы.

Приложения

Техническое задание для сайта

* 1. Название сайта.

Сайт Игримского профессионального колледжа.

* 2. Назначение сайта (цель создания сайта).

2.1. Сайт предназначен для публикации данных связанных с Игримским

* 3. Язык сайта.

Русский.

* 4. Предполагаемая возрастная аудитория сайта.

От 16 лет и старше.

* 5. Количество страниц сайта.

Сайт должен содержать следующие обязательные html страницы: 1 — Главная (домашняя) страница; 2 — О колледже; 3 — Перечень нормативных документов; 4 — Обратная связь; 5 — Информация необходимая для поступления;

* 6. Кнопки управления (навигация сайта).

С каждой страницы сайта должен быть обеспечен переход (установлена гиперссылка) на главную страницу сайта

* 7. Блок схема сайта.

Головная (начальная) страница сайта должна содержать гиперссылки, обеспечивающие переход с нее на все страницы сайта.

* 8. Объём сайта, Мб.

Не оговаривается.

* 9. Пропускная способность линии связи.

Среднее время загрузки страниц не должно превышать 35 секунд при скорости соединения 28.8 Кбит/сек. Допускается увеличение времени загрузки отдельных страниц до 45 секунд, но не более чем на 25% числа страниц сайта. Головная (начальная) страница должна иметь время загрузки не более 55 секунд.

Примечание:

Во всех случаях не учитывается время загрузки подгружаемых элементов (счетчики, баннеры, информеры и т. д.).

* 10. Основной диапазон разрешения мониторов, на которых будет просматриваться сайт.

От 600×800 до 1240×1024 пикселей (от 15″ ЭЛТ до 19″ ЭЛТ или 17″ LCD).

Основное разрешение, на которое оптимизируется сайт: 1024×768 пикселей (17″ ЭЛТ или 15″ LCD).

* 11. Минимальное разрешение монитора, в котором будет просматриваться сайт.

600×800 пикселей (15″ ЭЛТ).

При указанном разрешении допускается возможность просмотра страниц сайта с горизонтальной прокруткой в окне браузера.

* 12. Основной браузер, которым будет просматриваться сайт, и его минимальная версия.

IE 6.0 и выше.

* 13. Цветовая палитра.

Основной режим мониторов, на которых будет просматриваться сайт: 15 разрядов цветов и выше (число цветов 65 536 и выше).

При разработке сайта должен быть обеспечена возможность его просмотра при использовании безопасной цветовой палитры (разрядность цветов 8). Изменения оттенков цветов, при просмотре сайта с использованием безопасной цветовой палитры, не оговариваются.

* 14. Размер и вид шрифта сайта.

Размер шрифта для оформления заголовков, названия страниц и т. д. не оговаривается. Вид (название) шрифта не оговаривается.

* 15. Дополнительные условия.

Каждая страница сайта должна содержать логотип и название Фирмы.

Внизу на каждой странице сайта должна быть указана контактная информация.

Программный код сайта

Выкладывать ВЕСЬ код сайта безумие, документ приобретет невероятный размер, поэтому ограничусь кодом 2ух страниц, а именно:

Главная страница:

< !DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.0 Transitional//EN» «http: //www. w3. org/TR/xhtml1/DTD/xhtml1-transitional. dtd"><html xmlns="http: //www. w3. org/1999/xhtml"><head>

< meta http-equiv="Content-Type" content="text/html; charset=iso-8859−1">

< title>БУ СПО ИПК< /title>

< link rel="stylesheet" type="text/css" href="css/style. css">

< /head><body>

< div id="container">

< div id="holder" class="clearfix">

< div id="logo">

< h1>Игримский профессиональный колледж< /h1>

< /div>

< div id="navigation">

< ul>

< li><a href="index. html">Главная</a></li>

< li><a href="pages/photogallery/photogallery. html">Фотогалерея</a></li>

< li><a href="pages/contacts/contacts. html">Контакты</a></li>

< li><a href="pages/about us/about. html">О нас< /a></li>

< li><a href="pages/documents/documents. html">Нормативные документы< /a></li>

< li><a href="error. html">Форум</a></li><li><a href="index. php">Обратная связь< /a></li></ul>

< /div>

< div id="header"> </div>

< div id="content">

< h1>Новости < /h1>

< p><strong>Спартакада ипк< /strong> < /p>

<p align="justify"> 20 июня на площади перед зданием колледжа состоялось торжественное закрытие Спартакиады ИПК 2011−2012 учебного года. Спартакиада — это традиционное мероприятие, которое проходит ежегодно в нашем колледже. В течение года все группы участвуют в соревнованиях по 10-ти видам спорта, как в командном, так и в личном зачете. <a href="pages/news/5. html">Читать далее… </a></p>

< p> < strong>Лето, ах, лето!< /strong></p>

<p align="justify"> С наступлением теплых летних деньков как-то не хочется все время думать об учебе. Жизнь в нашем общежитии скучной не назовешь -& nbsp;одни делают ремонт в комнате, другие пишут диплом, третьи просто гуляют, наслаждаясь теплыми деньками, а вот мы решили заняться полезным делом. <a href="pages/news/4. html">Читать далее… </a></p>

< p> < strong>Неделя здоровья в колледже< /strong></p>

<p align="justify"> Как отмечалось ранее, Неделя Здоровья обещала быть насыщенной и интересной! Но, по известным всем причинам (траур в связи с авиакатастрофой в Тюмени), тематическая дискотека «Здорово жить!» с конкурсами и играми не состоялась. Ребята отнеслись с пониманием к этому факту и согласились провести её позже. Запланированная зимняя рыбалка из соображений безопасности (уж слишком быстро весна вступила в свои права), обещала стать летней. <a href="pages/news/3. html">Читать далее… </a></p>

< p> < strong>Строки, опаленные …< /strong></p>

<p align="justify"> 5 мая, в преддверии торжеств по случаю Великой Победы, состоялся праздничный концерт! Ежегодно в колледже проводится конкурс песен и стихов на военную тематику «Строки, опаленные войной». <a href="pages/news/2. html">Читать далее… </a><br>

< /p>

< p> < strong>Днем молодого изберателя< /strong></p>

<p align="justify"> К этому событию была приурочена интеллектуальная игра «У тебя есть свой голос!», в ходе этой игры ребятам предстояло проявить свои знания в области избирательного права, проявить смекалку в блиц — опросе, эффектно представить команду, заявив о своем политическом кредо, достойно пройти испытания в капитанском конкурсе и многое другое. <a href="pages/news/1. html">Читать далее… </a></p>

< /div>

< div id="news">

< div class="newsItem">

< h1>Администрация</h1>

< p><a href="pages/administration/director. html">Директор</a></p>

< p><a href="pages/administration/staff. html">Список сотрудников< /a></p>

< /div>

< div class="newsItem">

< h1>Студсовет</h1>

< p><a href="pages/student council/struct. html">Структура</a></p>

< p><a href="pages/student council/composition. html">Состав</a></p>

< p><a href="pages/student council/charter. html">Устав</a></p>

< /div>

< div class="newsItem">

< h1>Образование</h1>

< p><a href="pages/education/specialty. html">Специальности</a></p>

< p><a href="pages/education/candidate. html">Абитуриенту</a></p>

< p><a href="pages/education/student. html">Студенту</a></p>

< p><a href="pages/education/och. html">Очно-заочное</a></p>

< /div>

< div class="newsItem">

< h1>Другое</h1>

< p><a href="pages/news/all. html">Все новости< /a></p>

< p><a href="pages/news/contest. html">Конкурсы</a></p>

< p><a href="pages/news/FGOS. html">Ведение ФГОС< /a></p>

< p><a href="pages/news/publicdoc. html">Публичный доклад< /a></p>

< p><a href="pages/news/innovation. html">Инновационная деятельность< /a></p>

< /div>

< /div>

< /div>

< div id="footer">

< ul>

< li><a href="index. html">Главная</a></li>

< li><a href="pages/photogallery/photogallery. html">Фотогалерея</a></li>

< li><a href="pages/contacts/contacts. html">Контакты</a></li>

< li><a href="pages/about us/about. html">О нас< /a></li>

< li><a href="pages/documents/documents. html">Нормативные документы< /a></li>

< li><a href="error. html">Форум</a></li><li><a href="index. php">Обратная связь< /a></li>

< /ul>

< /div>

< /div>

< /body></html>

Страница обратной связи:

< html>

< head>

< meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

< title>Обратная связь< /title>

< style type="text/css">

@import url ('assets/css/contact. css');

@import url ('assets/css/lay. css');

. style1 {color: #FFFFFF}

< /style>

< script type="text/javascript" src="assets/js/jquery. js"></script>

< script type="text/javascript" src="assets/js/js. js"></script>

< /head>

< body>

< div id="contact">

< div id="top">

< h1>Напишите нам< /h1>

< /div>

< div id="center">

< div id="contact_form">

< form method="post" action="assets/php/send. php" id="contactForm">

< div class="error" id="error"> Произошла ошибка, сообщение не может быть отправлено!< /div>

< div class="success" id="success"> Сообщение успешно отправлено!< br /> Спасибо. </div>

< span class="input">

< label for="name"> <b>Ваше имя: </b> < /label>

< input type="text" id="name" name="name" />

< div class="warning" id="nameError"> Это поле обязательно для заполнения< /div>

< /span>

< span class="input">

< label for="email"> <b>Ваш Email: </b> < /label>

< input type="text" id="email" name="email" />

< div class="warning" id="emailError"> Введите правильный email!< /div>

< /span>

< span class="input">

< label for="sales"> <b>Тема:</b> < /label>

< select id="sales" name="sales">

< option value="Support"> Вопрос от абитуриента< /option>

< option value="Sales"> Вопрос от студента< /option>

< option value="Other"> Другое</option>

< /select>

< /span>

< span class="input">

< label for="message"> <b>Ваше сообщение: </b> < /label>

< textarea id="message" name="message"> Здравствуйте,

< /textarea>

< div class="warning" id="messageError"> Это поле обязательно для заполнения< /div>

< /span>

< span class="input">

< label for="security_code"> <b>Цифры:</b> < /label>

< input class="noicon" type="text" id="security_code" name="security_code" style="width:100px"/>

<img src="assets/php/security/1/sec. php" style="vertical-align:middle;"/>

<div class="warning" id="security_codeError"> Цифры введены неверно!< /div>

< /span>

< span id="submit" class="input">

< label for="submit"> </label>

<p id="ajax_loader" style="text-align:center;"><img src="assets/img/contact/ajax-loader. gif" /> </p>

< input id="send" type="submit" value="Отправить письмо!" />

< /span>

< /form>

< /div>

< /div>

< div id="bot"> <!--bottom--></div>

< /div>

< /body>

< /html>

Программный код программы

//---------------------------------------------------------------------------

#include < vcl. h>

#include < ComObj. hpp>

#include < utilcls. h>

#pragma hdrstop

#include «Unit1. h»

//---------------------------------------------------------------------------

#pragma package (smart_init)

#pragma resource «*. dfm»

TForm1 *Form1;

TStringList *s=new TStringList;

int ech=0;

AnsiString name;

AnsiString name2;

int nep=0;

int prav=0;

//---------------------------------------------------------------------------

__fastcall TForm1: :TForm1(TComponent* Owner)

: TForm (Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1: :Button1Click (TObject *Sender)

{

ComboBox1-> Items->Clear ();

ComboBox1-> Text="";

Variant MyExcel = CreateOleObject («Excel. Application»);

if (ListBox1-> Count==0)

{

ShowMessage («Вы еще не выбрали файл с неправильными email»);

}

else

{

if (OpenDialog1-> Execute ()) name2=OpenDialog1-> FileName;

if (name2=="")

{

ShowMessage («Вы не выбрали файл с правильными email!»);

}

else

{

MyExcel. OlePropertyGet («WorkBooks»). OleProcedure («Open», name2. c_str ());

Variant vCells = MyExcel. OlePropertyGet («Cells»);

Variant vVarSheet = MyExcel. OlePropertyGet («Worksheets»). OlePropertyGet («Item», 1);

int iFirstRow = MyExcel. OlePropertyGet («ActiveSheet»). OlePropertyGet («UsedRange»). OlePropertyGet («Row»);

int iColumnCount = MyExcel. OlePropertyGet («ActiveSheet»). OlePropertyGet («UsedRange»). OlePropertyGet («Columns»). OlePropertyGet («Count»);

int iFirstCol = MyExcel. OlePropertyGet («ActiveSheet»). OlePropertyGet («UsedRange»). OlePropertyGet («Column»);

String mail;

for (int i=0; i< iColumnCount; i++)

{

mail = vCells. OlePropertyGet («Item», iFirstRow, iFirstCol);

ComboBox1-> Items->Add (mail);

iFirstCol++;

}

int w = 1;

String str= vCells. OlePropertyGet («Item», 2, w);

String str2= vCells. OlePropertyGet («Item», 3, w);

while (((str. Pos («@»)==0)&&(str2. Pos («@»)==0))&&(w<=iColumnCount))

{

w++;

str= vCells. OlePropertyGet («Item», 2, w);

str2= vCells. OlePropertyGet («Item», 3, w);

}

w--;

if (str. Pos («@»)||str2. Pos («@»))

{

ComboBox1-> ItemIndex = w;

}

else

{

ComboBox1-> ItemIndex = -1;

ShowMessage («Пожалуйста выберите колонку с email вручную»);

}

ech++;

MyExcel. OleProcedure («Quit»);

}

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1: :Button2Click (TObject *Sender)

{

AnsiString name;

Variant MyExcel = CreateOleObject («Excel. Application»);

s-> Clear ();

ListBox1-> Clear ();

if (OpenDialog1-> Execute ()) name=OpenDialog1-> FileName;

if (name=="")

{

ShowMessage («Вы не выбрали файл с неправильными email!»);

}

else

{

MyExcel. OlePropertyGet («WorkBooks»). OleProcedure («Open», name. c_str ());

// получение параметров таблицы: кол-во строк, столбцов

int iFirstRow = MyExcel. OlePropertyGet («ActiveSheet»). OlePropertyGet («UsedRange»). OlePropertyGet («Row»);

int iFirstCol = MyExcel. OlePropertyGet («ActiveSheet»). OlePropertyGet («UsedRange»). OlePropertyGet («Column»);

int iRowsCount = MyExcel. OlePropertyGet («ActiveSheet»). OlePropertyGet («UsedRange»). OlePropertyGet («Rows»). OlePropertyGet («Count»);

int iColsCount = MyExcel. OlePropertyGet («ActiveSheet»). OlePropertyGet («UsedRange»). OlePropertyGet («Columns»). OlePropertyGet («Count»);

Variant vCells = MyExcel. OlePropertyGet («Cells»);

for (int i=iFirstRow-1; i< iRowsCount; i++)

{

for (int j=iFirstCol; j< iFirstCol+iColsCount; j++)

{

s-> Add (vCells. OlePropertyGet («Item», i+1,j));

Application-> ProcessMessages ();

}

}

ListBox1-> Items->AddStrings (s);

int Strok=s-> Count;

String stroki= Strok;

ShowMessage («Кол-во неправильных email: «+ String (stroki));

nep=1;

MyExcel. OleProcedure («Quit»);

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1: :Button3Click (TObject *Sender)

{

Variant MyExcel = CreateOleObject («Excel. Application»);

if (ListBox1-> Count==0)

{

ShowMessage («Вы еще не выбрали файл с неправильными email»);

}

else

{

if (name2=="")

{

ShowMessage («Вы не выбрали файл с правильными email!»);

}

else

{

if (SaveDialog1-> Execute ()) name=SaveDialog1-> FileName+". xls";

{

if (name=="")

{

ShowMessage («Вы не выбрали куда сохранить новый файл!»);

}

else

{

if (!CopyFile (OpenDialog1-> FileName. c_str (), name. c_str (), true))

{

ShowMessage («Невозможно скопировать» + OpenDialog1-> FileName + «. «);

}

MyExcel. OlePropertyGet («WorkBooks»). OleProcedure («Open», name. c_str ());

Variant vCells = MyExcel. OlePropertyGet («Cells»);

Variant vVarSheet = MyExcel. OlePropertyGet («Worksheets»). OlePropertyGet («Item», 1);

int iFirstRow = MyExcel. OlePropertyGet («ActiveSheet»). OlePropertyGet («UsedRange»). OlePropertyGet («Row»);

int iRowsCount;

int q=iFirstRow;

int w=ComboBox1-> ItemIndex;

w++;

iRowsCount = MyExcel. OlePropertyGet («ActiveSheet»). OlePropertyGet («UsedRange»). OlePropertyGet («Rows»). OlePropertyGet («Count»);

ProgressBar1-> Position = 0;

ProgressBar1-> Max = iRowsCount;

//Кол-во email до проверки < <<

int yRowsCount = MyExcel. OlePropertyGet («ActiveSheet»). OlePropertyGet («UsedRange»). OlePropertyGet («Rows»). OlePropertyGet («Count»);

int emaildel = 0;

q=iFirstRow;

ProgressBar1-> Position = 0;

ProgressBar1-> Max = iRowsCount;

while (ListBox1-> Count>0)

{

Application-> ProcessMessages ();

String str= vCells. OlePropertyGet («Item», q, w);

if (CheckBox1-> Checked)

{

Application-> ProcessMessages ();

String str= vCells. OlePropertyGet («Item», q, w);

if (str == ««)

{

AnsiString ch = q;

vVarSheet. OlePropertyGet («Rows», ch. c_str ()). OleProcedure («Select»);

MyExcel. OlePropertyGet («Selection»). OleProcedure («Delete»);

}

else

{

if (ListBox1-> Items->IndexOf (str) == -1)

{

q++;

}

if (ListBox1-> Items->IndexOf (str) ≠ -1)

{

int i = ListBox1-> Items->IndexOf (str);

ListBox1-> Items->Delete (i);

emaildel++;

AnsiString ch = q;

vVarSheet. OlePropertyGet («Rows», ch. c_str ()). OleProcedure («Select»);

MyExcel. OlePropertyGet («Selection»). OleProcedure («Delete»);

}

iRowsCount = MyExcel. OlePropertyGet («ActiveSheet»). OlePropertyGet («UsedRange»). OlePropertyGet («Rows»). OlePropertyGet («Count»);

}

if (q> iRowsCount)

{

ListBox1-> Items->Clear ();

}

iRowsCount = MyExcel. OlePropertyGet («ActiveSheet»). OlePropertyGet («UsedRange»). OlePropertyGet («Rows»). OlePropertyGet («Count»);

ProgressBar1-> Position++;

}

else

{

if (ListBox1-> Items->IndexOf (str) == -1 || str == «»)

{

q++;

}

if (ListBox1-> Items->IndexOf (str) ≠ -1)

{

int i = ListBox1-> Items->IndexOf (str);

ListBox1-> Items->Delete (i);

emaildel++;

AnsiString ch = q;

vVarSheet. OlePropertyGet («Rows», ch. c_str ()). OleProcedure («Select»);

MyExcel. OlePropertyGet («Selection»). OleProcedure («Delete»);

}

iRowsCount = MyExcel. OlePropertyGet («ActiveSheet»). OlePropertyGet («UsedRange»). OlePropertyGet («Rows»). OlePropertyGet («Count»);

ProgressBar1-> Position++;

if (q> iRowsCount)

{

ListBox1-> Items->Clear ();

}

}

}

int Rowsa=yRowsCount-1;

int Rowsb=iRowsCount-1;

ShowMessage («Кол-во удаленных email:» + String (emaildel) + «nКол-во email до проверки: «+ String (Rowsa)+ «nКол-во email после проверки: «+ String (Rowsb));

MyExcel. OlePropertySet («Visible», true);

emaildel=0;

name="";

name2="";

if (ListBox1-> Count==0)

{

LPCSTR Text = «Хотите выбрать еще один файл с правильными email ?»;

LPCSTR Caption = «ExcelFind»;

LPCSTR Text2 = «Восстановить список с неправильными email ?»;

if (MessageBox (Handle, Text, Caption, MB_YESNO) == IDYES)

{

if (MessageBox (Handle, Text2, Caption, MB_YESNO) == IDNO)

{ ShowMessage («Выберите файл с неправильными email»);

Button2-> Click ();

if (ListBox1-> Count>0)

{

ShowMessage («Выберите файл с правильными email»);

Button1-> Click ();

}

else

{

ShowMessage («Вы не выбрали файл с неправильными email n выберите его еще раз»);

}

}

else

{

ListBox1-> Items->AddStrings (s);

ShowMessage («Выберите файл с правильными email»);

Button1-> Click ();

}

}

}

}

}

}

}

}

//---------------------------------------------------------------------------

ПоказатьСвернуть
Заполнить форму текущей работой