Архивы рубрики: Базы данных

Работа с email рассылками: выжимаем максимум!

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

Я считаю, что любой сайт или страницу можно дополнительно оптимизировать. Вопрос только в затратах на эту оптимизацию, потому что после определенного рубежа дополнительная оптимизация отнимает больше денег, чем заработок от этой оптимизации. Однако, если вы оперируете крупными объемами — постоянная оптимизация необходима. Например, уменьшение размера этикетки на бутылке пива на 5-10% приводит к экономии в миллионы рублей с партии. Потребитель может даже не заметить, а лишние деньги можно потратить на что-то более эффективное. То же самое и для сайтов, если вы считаете, что с вашего трафика больше ничего не выжать — вы очень сильно ошибаетесь.
Читать далее

Автоматизируйся комплексно с 1С

Комплексная автоматизация с фирмой 1С – это решение задач автоматизации учета и управления для всех видов предприятий.

Объединенная информационная база для ведения управленческого и регламентированного учета необходима для эффективной работы как одного предприятия, так и группы. За счет использования общих данных существенно сокращается трудоемкость ведения учета. Вести управленческий учет можно в любой валюте. Вот налоговый, а также бухгалтерский учет ведется в национальной валюте. Формирование регламентированной отчетности происходит отдельно для каждой организации.

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

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

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

Управлять продажами, закупками и запасами лучше с помощью соответствующей программы. Автоматизируя учет. Контроль, управление и анализ в организации, которая осуществляет какую-либо торговлю (розничную/оптовую/комиссионную) можно вести грамотно и эффективно сегодня только с помощью специально разработанных решений для комплексной автоматизации. Решая ряд задач, таких как: планирование и управление продажам, запасами и закупками, взаиморасчетами.

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

При розничной торговле может идти работа с (не)автоматизированными торговыми точками. Механизм возвратов товаров также автоматизирован в программе.

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

Дата публикации 23.04.2012, 16:43

Поразрядная сортировка в C# (Csharp)

Поразрядная сортировка в C# (Csharp)
Применение поразрядной сортировки имеет одно ограничение: перед началом сортировки необходимо знать
length — максимальное количество разрядов в сортируемых величинах (например, при сортировке слов необходимо знать максимальное количество букв в слове),
range — количество возможных значений одного разряда (при сортировке слов — количество букв в алфавите).
Количество проходов равно числу length.

Пошаговое описание алгоритма

Допустим у нас есть числа: 39, 47, 54, 59, 34, 41, 32 (length = 2, range = 10)

1. Создаем пустые списки, количество которых равно числу range.

2. Распределяем исходные числа по этим спискам в зависимости от величины младшего разряда (по возрастанию).

Для нашего примера получим:
41
32
54, 34
47
59, 39

(Вообще надо создать 10 списков, но некоторые из них оказались пустыми)

3. Собираем числа в той последовательности, в которой они находятся после распределения по спискам.

Получим: 41, 32, 54, 34, 47, 59, 39

4. Повторяем пункты 2 и 3 для всех более старших разрядов поочередно.

Для двузначных чисел мы должны сделать еще один проход. Распределение по спискам будет выглядеть так:
32, 34, 39
41, 47
54, 59
Объединив числа в последовательность, получим отсортированный массив.

Реализация на C#

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

Класс RadixSorting, содержащий функцию быстрой сортировки, и класс Test для тестирования этой функции:
class RadixSorting {
public static void sorting(int[] arr, int range, int length) {
ArrayList[] lists = new ArrayList[range];
for(int i = 0; i < range; ++i)
lists[i] = new ArrayList();

for(int step = 0; step < length; ++step) {
//распределение по спискам
for(int i = 0; i < arr.Length; ++i) {
int temp = (arr[i] % (int)Math.Pow(range, step + 1)) /
(int)Math.Pow(range, step);
lists[temp].Add(arr[i]);
}
//сборка
int k = 0;
for(int i = 0; i < range; ++i) {
for(int j = 0; j < lists[i].Count; ++j) {
arr[k++] = (int)lists[i][j];
}
}
for(int i = 0; i < range; ++i)
lists[i].Clear();
}
}
}
class Test {
static void Main(string[] args) {
int[] arr = new int[100];
//fill the array with random numbers
Random rd = new Random();
for(int i = 0; i < arr.Length; ++i) {
arr[i] = rd.Next(0, 100);
}
System.Console.WriteLine(«The array before sorting:»);
foreach(double x in arr) {
System.Console.Write(x + » «);
}
RadixSorting.sorting(arr, 10, 2);
System.Console.WriteLine(«\n\nThe array after sorting:»);
foreach(double x in arr) {
System.Console.Write(x + » «);
}
System.Console.WriteLine(«\n\nPress the key»);
System.Console.ReadLine();

 

Пространства имен (namespaces) в C# (Csharp)

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

Для примера добавим структуру Book в пространство имен BookStore:

namespace BookStore
{
public struct Book
{
// Код структуры …
}
}

Если в дальнейшем нужно будет еще добавлять классы и структуры, которые логически связаны с продажей книг — правильно будет добавлять их в пространство имен BookStore.

Каждое имя в пространистве имен состоит из названий тех пространств имен, в которое оно входит и начинается из самого внешнего имени. Для примера: System.Windows.Forms. Такой принцип именования может дать нам слишком длинные конструкции, которые неудобно использовать в коде (System.Windows.Forms.Form) для этого в C# существует директива using, которая пишется в самом начале кода имеет вид:
using System.Windows.Forms;

Если мы подключили с помощью директивы using пространство имен System.Windows.Forms.Form — то в коде уже можно напрямую обращаться к Form (без полной записи). Важной особенностью пространств имен в C# является также и то, что они не зависят от сборок. Можно создавать различные пространства в пределах одной сборки так само, как и создавать несколько сборок в пределах одного пространства имен.

Еще одним применением ключевого слова using в C# является назначение псевдонимов классам и пространствам имен. Если у вас сложный проект и пространства имен имеют очень большую вложенность — в таком случае пространству имен назначается псевдоним, который в общем виде выглядит так:
using alias = NamespaceName;

В заключение хочется сказать что программисты, которые переходят на C# из С++ очень часто путают пространства имен с заголовочными файлами #include. Главное не путать эти понятия, так как пространства имен это не файлы — а логическое понятие, которое обьединяет классы и типы, которые имеют логические связи.

 

Работа программистов в группе

Причины объединения

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

Сейчас огромную популярность набрали форумы, чаты, программа ICQ и ее аналоги,- это объясняется тем, что у людей присутствует брак общения на темы, так или иначе касающиеся их направления в компьютерной сфере (программирование, веб-дизайн и тд.).Именно средствами сети, а конкретно форумов, чатов, то есть за счет общения — много программистов находят себе помощников и соратников через интернет.После написания нескольких программ, программистам хочется самореализоваться через интернет (других способов для начинающих я просто не вижу). Программист выставляет свои «маленькие» программы на всеобщее обсуждение на форумах, регистрирует на разных софт-каталогах. При этом его желания и опыт растут. Приходит время, когда есть идея написать что-то серьезное, но сам он естественно не справится. Тогда он обращается к тем, кто ему помогал, с кем он делился исходниками и мыслями. И если его друзья достигли того же уровня, то они больше всего решат работать вместе. Так рождается маленькая группа программистов. У каждой группы должен быть сайт в интернете. Если создатели группы задумали делать серьезный проект или просто хотят собрать больше единомышленников, то на сайте создается раздел «Как вступить в группу», и далее к ним присоединяется все больше и больше программистов. В том, что к ним будут присоединяться — можно не сомневаться, так как я уже говорил — в наше время очень много программистов одиночек.
Правила вступления и устав группы.

Для всей группы сначала составляется устав, в котором участнику представлены его права. В уставе группы оговариваются и финансовые вопросы.Обязательно в группе должен быть лидер, решение которого играло бы решающую роль в принятии важных решений. В большинстве случаев лидером является основатель группы. Лидер нужен для того, чтобы избежать ссор и неувязок. Представьте себе, что группа — 15 человек и у каждого свое мнение, а обьеденить эти мнения в одно — работа именно лидера группы. От того, какие решения примет группа и зависит успех проектов! Поэтому все вопросы должны выносится на всеобщее обсуждение. Нужно почаще делать опросы на форуме группы (форум или чат должен быть обязательно, именно там происходит обсуждение проектов).Ч еловек, который хочет вступить в группу обязан рассказать остальным участникам группы о себе, показать свои возможности в сфере программирования, предоставить готовые проекты.
Модульность проектов и разделение обязанностей

После того, как набралась основа группы и определены возможности каждого из участников, нужно создать четкую структуру группы и определить статус каждого из участников. В группе, участником которой я являюсь, статус члена группы определяет количество баллов, которые начисляется по следующим правилам:
После регистрации в группе, у вас 0 баллов.
После удачного проекта или за активное участие в жизни группы,вы получаете 1 балл. Когда у вас 1 балл — можно модерировать форум группы и тд. , то есть вы получаете некоторые привилегии.
2 балла — предел фантазии. Ваш голос становится все более и более весомых в решениях группы. Вы можете «проверять» новичков, давать им задания.
3 балла имеет только создатель группы, он управляет всей группой и его голос самый весомый (но не окончательный!).Если группа решила приступить к реализации проекта, необходимо составить план работы. Разделить группу на подгруппы: по написанию кода, рисованию графики и тд.

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

Подведем итоги: бесспорно, участвовать в группе программистов надо, надо для того, чтобы:
Научиться работать группой;
Разрабатывать серьезные программы, которые сами вы не в состоянии сделать;
Набраться опыта и знаний;
Научиться продавать программы через интернет;
Заработать деньги;

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

 

Быстрая сортировка в C# (Csharp)

1. Из массива выбирается элемент a[i]. Как правило, в качестве этого элемента берется центральный элемент массива.

2. Остальные элементы распределяются таким образом, чтобы слева от a[i] оказались все элементы, меньшие или равные a[i]. Элементы, большие или равные a[i], помещаются справа.

3. Производится проверка количества элементов в левой и правой частях массива. Если какая-либо часть (или обе части) содержит более двух элементов, то для этой части (или частей) запускается та же процедура сортировки с помощью рекурсивного вызова.

Реализация на C#

Класс QuickSorting, содержащий функцию быстрой сортировки, и класс Test для тестирования этой функции:
class QuickSorting {
public static void sorting(double[] arr, long first, long last) {
double p = arr[(last — first)/2 + first];
double temp;
long i = first, j = last;
while(i <= j) {
while(arr[i] < p && i <= last) ++i;
while(arr[j] > p && j >= first) —j;
if(i <= j) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
++i; —j;
}
}
if(j > first) sorting(arr, first, j);
if(i < last) sorting(arr, i, last);
}
}
class Test {
static void Main(string[] args) {
double[] arr = new double[100];
//заполняем массив случайными числами
Random rd = new Random();
for(int i = 0; i < arr.Length; ++i) {
arr[i] = rd.Next(1, 101);
}
System.Console.WriteLine(«The array before sorting:»);
foreach(double x in arr) {
System.Console.Write(x + » «);
}
//сортировка
QuickSorting.sorting(arr, 0, arr.Length — 1);
System.Console.WriteLine(«\n\nThe array after sorting:»);
foreach(double x in arr) {
System.Console.Write(x + » «);
}
System.Console.WriteLine(«\n\nPress the key»);
System.Console.ReadLine();
}
}

 

Перечисления (enumerations) в C# (C sharp)

Перечисления (enumerations) — целочисленные типы, которые определяет пользователь. При обьявлении перечислений вы специфицируете набор допустимых значений, которые могут принимать экземпляры перечислений. Кроме того нужно присвоить значениям интуитивно понятные имена.
В дальнейшей работе перечисления могут сыграть очень важную роль и облегчить жизнь программисту. Обьявляются перечисления вот так:
public enum DaysOfWeek

{
Monday = 0,
Tuesday = 1,
Wednesday = 2,
Thursday = 3,
Friday = 4,
Saturday = 5,
Sunday = 6
}

Здесь мы используем целые значения, которые соответствуют дням недели (стоит отметить что день можно определить из названия переменной) Доступ к конкретному дню недели можно получить вот так: DaysOfWeek.Wednesday вернет 2. Обычно перечисления используют в тех случаях, когда нужно передавать соответствующее значение методу, который будет проходить по всем значениям спомощью switch и выдавать соответствующий результат. Давайте разберем это на очень простом примере, который даст понять логику работы с перечислениями:
using System;
using System.Collections.Generic;
using System.Text;

namespace EnumerationExample
{
class Program
{
public enum DaysOfWeek
{
Monday = 0,
Tuesday = 1,
Wednesday = 2,
Thursday = 3,
Friday = 4,
Saturday = 5,
Sunday = 6
}

static void Main(string[] args)
{
WriteText(DaysOfWeek.Sunday);
Console.ReadLine();
}

static void WriteText(DaysOfWeek days)
{
switch (days)
{
case DaysOfWeek.Monday:
Console.WriteLine(«Понедельник — день тяжелый!»);
break;
case DaysOfWeek.Tuesday:
Console.WriteLine(«Вторник — это значит что понедельник уже прошел!»);
break;
case DaysOfWeek.Wednesday:
Console.WriteLine(«Среда! Средина недели!»);
break;
case DaysOfWeek.Thursday:
Console.WriteLine(«Четверг! До выходных уже рукой подать!»);
break;
case DaysOfWeek.Friday:
Console.WriteLine(«Это волшебное слово — Пятница!!!»);
break;
case DaysOfWeek.Saturday:
Console.WriteLine(«Суббота… сколько в этом слове радости»);
break;
case DaysOfWeek.Sunday:
Console.WriteLine(«Да, завтра понедельник :)»);
break;
}
}
}
}
Теперь запустите программу, и вы увидите что в консоли появится текст «Да, завтра понедельник :)». Мы увидели именно эту фразу, потому что передали в метод WriteText элемент перечисления Sunday, попробуйте передать туда другие дни недели, и вы убедитесь что программа будет выводить именно тот текст что принадлежит соответствующему дню недели. Метод WriteText принимает перечисление, и в зависимости от передаваемого параметра, выводит текст. Это очень простой пример, но он дает понять как можно использовать перечисления в C# (C sharp).

 

Ваша первая программа на C# (Csharp)

Ваша первая программа на C# (Csharp)
Как принято у программистов, любое изучение языка программирования начинается с написания простенькой консольной программы, которая выводит такую же простенькую фразу «Hello World!». На данный момент большинство разработчиков пишут свои проекты на Microsoft Visual Studio 2005, потому первую программу мы будем писать именно в этой IDE.
Итак, запускаем Visual Studio, выбираем File->New->Project->ConsoleApplication (заодно можете ознакомиться с другими типами проектов). Назовите проект например Hello_world. Студия создаст для нас самое замечательное что может быть — чистый проект, который мы превратим в рабочую программу!

Листинг пустой программы выглядит так:
using System;

namespace Hello_world
{
class Program
{
static void Main(string[] args)
{
}
}
}
Рассмотрим то что у нас есть:
using System; — оператор using подключает те пространства имен, которые нужны для нормальной работы программы.
namespace Hello_world — пространство имен нашей программы.

Так как в C# весь код должен содержаться внутри класса, то VS2005 сразу создает основной класс Program.
Точкой входа для любой консольной программы в C# является метод Main() (обратите внимание что буква «М» — заглавная). Эта функция вызывается при запуске программы. Этот метод должен либо возвращать целочисленное значение (int), либо не должен возвращать ничего (void).

Далее давайте добавим функциональность нашей программе:
Напишем в методе Main такой код:
Console.WriteLine(«Hello World!»);
Console.ReadLine();
return;

В данном случае мы вызываем метод WriteLine(string str) класса System.Console и выводим заветную фразу «Hello World!».
ReadLine читает пользовательский ввод. Этот метод мы вызываем для того чтобы программа не закрывалась сразу после запуска.
return мы вызываем для того чтобы выйти из метода (а в нашем случае из программы). Теперь все готово к компиляции нашей программы, нажимайте F5 и наслаждайтесь работой вашей первой программы на C# — Hello World!. Я в свою очередь поздравляю Вас с первой программой и думаю что это только начало, первая ступень в изучении такого интересного и богатого языка как C#.
Итоговый листинг программы «Hello World!»:
using System;

namespace Hello_world
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(«Hello World!»);
Console.ReadLine();
return;
}
}
}
Для того чтобы выйти из программы нажмите Enter.