Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/34: Рейтинг темы: голосов - 34, средняя оценка - 4.91
1 / 1 / 1
Регистрация: 03.02.2010
Сообщений: 89

С консольного приложения в Dll, Windows Form!

15.11.2011, 10:56. Показов 7345. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание такое: сделать массив для сохранения веса студентов группы из 20 человек. Заполнить массив с помощью класса Random целыми числами в диапазоне от 50 до 100 включительно. Отсортировать массив и вывести на консоль его элементы.
Задание сделано... Вот решение:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
namespace Lab1
{
    class Program
    {
        static void Main(string[] args)
        {
            Random realRnd = new Random();
            int[] array1 = new int[20];
 
            int min = 50, max = 100;
            Console.WriteLine("Випадковi числа в дiапазонi [" + min + "," + max + "]");
            Array.Sort(array1);
            for (int i = 0; i < 20; i++)
            {
                array1[i] = realRnd.Next(min, max);
                
                Console.WriteLine("Вага студента = " + array1[i] + " кг");
            }
            Console.WriteLine("\nТi ж самi числа, але вже вiдсортованi:");
            Array.Sort(array1);
            for (int i = 0; i < 20; i++)
            {
              Console.WriteLine("Вага студента = " + array1[i] + " кг");
            }
            Console.ReadKey();
        }
    }
}
Но теперь ещё есть дополнительное задание с которым я несправился(.
1) Создать DLL-библиотеку, которая содержит реализацию задания. Указать XML-коментарии.
2) Создать решение, которое включает DLL-библиотеку, консольный проэкт, который тестирует работу библиотечных методов.
3) Создать Windows-проэкт в том самом решении, который включает библиотечные методы.
4) Создать DLL-библиотеку как отдельное решение. Связать библиотеку с Windows-проэктом.
Помогите с реализацией. Спасибо!

Добавлено через 22 часа 10 минут
Что никто неможет подсказать какой код нужно вписать в длл а какой тогда в новый консольный калькулятор???
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.11.2011, 10:56
Ответы с готовыми решениями:

Перевод консольного приложения в Windows Form
Доброго времени суток , вот код , который вызывает все ссылки javascript моего сайта в console Помогите пожалуйста переделать его в...

Перевод консольного приложения на Windows Form
Перевести этот код в Visual Studio 2010 в Wuindows Form Application Module Module1 Sub Main() Dim ar As Integer() ...

Перевод консольного приложения на Windows Form
Сортировка слиянием Public Sub MergeSort(ByRef Arr() As Double, ByVal N As Long) Dim C As Boolean Dim I As Long ...

28
1 / 1 / 1
Регистрация: 03.02.2010
Сообщений: 89
16.11.2011, 17:51  [ТС]
Студворк — интернет-сервис помощи студентам
И в чём же тогда разница подскажите пожалуйста... В том что в первой случае можно будет увидеть код длл а во втором нет..?

Добавлено через 1 час 52 минуты
Есть ещё одно задание:
В двумерном массиве сохраняется информация про оценки каждого из 20 студентов группы по каждому из 10 предметов. Первая строка - информация про оценки первого студента, вторая - второго и т.д. Вычислить среднюю успеваемость каждого студента.
Решение для консоля готово:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
namespace Lab__not_random_
{
    class Program
    {
        static void Main(string[] args)
        {
         Console.WriteLine("Оцiнки студентiв.");
         int[,] mas ={{3,5,3,4,2,4,3,5,3,4},                           
                      {2,4,3,4,3,5,5,4,5,3},
                      {3,3,4,5,4,3,4,4,5,4},
                      {4,4,3,5,4,5,4,2,5,4},
                      {3,4,4,5,4,3,4,2,5,4},
                      {5,3,4,5,4,3,4,4,3,4},
                      {3,5,4,5,4,3,4,4,5,3},
                      {2,5,4,5,3,3,5,5,5,5},
                      {5,5,4,5,4,5,5,4,3,3},
                      {3,2,5,5,4,3,4,5,5,4},
                      {5,3,3,5,4,3,4,4,4,5},
                      {3,3,5,5,4,5,5,4,5,2},
                      {5,5,5,5,5,5,4,5,5,5},
                      {4,4,4,3,4,3,5,4,5,4},
                      {2,5,4,5,4,5,4,3,5,3},
                      {4,5,4,5,4,3,4,3,5,5},
                      {5,5,3,5,4,5,4,3,3,4},
                      {4,4,4,5,4,4,4,4,5,3},
                      {3,2,2,5,4,4,4,3,3,4},
                      {5,3,4,4,4,3,3,3,5,5}};
 
            for (int i = 0; i < 20; i++)
            {
                Int32[] tmp = new Int32[mas.GetLength(1)];
                Console.Write("Студент № {0:D2}: ", 1 + i);
                for (int j = 0; j < 10; j++)
                {
                    tmp[j] = mas[i, j];
                    Console.Write(mas[i, j] + " ");
                }
                Console.WriteLine(" Середнiй бал: {0}", tmp.Average());
            }
                Console.ReadKey();
        }
    }
}
А вот что написать в длл я никак немогу понять... Начал делать но выдаёт ошибку:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
namespace Lab2DLL
{
    public class knowledge
    {
        public static int [,] Otsenki()
        {
     int[,] mas ={{3,5,3,4,2,4,3,5,3,4},                           
                      {2,4,3,4,3,5,5,4,5,3},
                      {3,3,4,5,4,3,4,4,5,4},
                      {4,4,3,5,4,5,4,2,5,4},
                      {3,4,4,5,4,3,4,2,5,4},
                      {5,3,4,5,4,3,4,4,3,4},
                      {3,5,4,5,4,3,4,4,5,3},
                      {2,5,4,5,3,3,5,5,5,5},
                      {5,5,4,5,4,5,5,4,3,3},
                      {3,2,5,5,4,3,4,5,5,4},
                      {5,3,3,5,4,3,4,4,4,5},
                      {3,3,5,5,4,5,5,4,5,2},
                      {5,5,5,5,5,5,4,5,5,5},
                      {4,4,4,3,4,3,5,4,5,4},
                      {2,5,4,5,4,5,4,3,5,3},
                      {4,5,4,5,4,3,4,3,5,5},
                      {5,5,3,5,4,5,4,3,3,4},
                      {4,4,4,5,4,4,4,4,5,3},
                      {3,2,2,5,4,4,4,3,3,4},
                      {5,3,4,4,4,3,3,3,5,5}};
            for (int i = 0; i < 20; i++)
            {
                Int32[] tmp = new Int32[mas.GetLength(1)];
                for (int j = 0; j < 10; j++)
                {
                    tmp[j] = mas[i, j];
                }
                tmp.Average();
 
                return mas[i, j] + tmp;
            }
        }        
    }
}
Помогите с реализацией...
0
38 / 40 / 6
Регистрация: 10.11.2011
Сообщений: 70
16.11.2011, 19:04
На вопрос о теории отвечать не буду, это долго. Почитай конспект.

А теперь о приложении:
1 - если ты создал в цикле переменную int i, то после окончания цикла она и умрет, так что использовать ты ее не можешь.
2 - прогу я написал, тебе осталось вынести эти два статических метода в отдельную библиотеку и оформить вывод значений на экран


исправленный код:
КОД
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
class Program
  {
    static void Main(string[] args)
    {
      int[][] students = knowledge.Otsenki();
      double[] ocenki = knowledge.StudentAverage(students);
    }
  }
 
 
  public class knowledge
  {
    /// <summary>
    /// Создаем двухмерный массив оценок для 10-ти студентов
    /// </summary>
    /// <returns></returns>
    public static int[][] Otsenki()
    {
      int[][] mas = {
                      new int[] {3, 5, 3, 4, 2, 4, 3, 5, 3, 4},
                      new int[] {2, 4, 3, 4, 3, 5, 5, 4, 5, 3},
                      new int[] {3, 3, 4, 5, 4, 3, 4, 4, 5, 4},
                      new int[] {4, 4, 3, 5, 4, 5, 4, 2, 5, 4},
                      new int[] {3, 4, 4, 5, 4, 3, 4, 2, 5, 4},
                      new int[] {5, 3, 4, 5, 4, 3, 4, 4, 3, 4},
                      new int[] {3, 5, 4, 5, 4, 3, 4, 4, 5, 3},
                      new int[] {2, 5, 4, 5, 3, 3, 5, 5, 5, 5},
                      new int[] {5, 5, 4, 5, 4, 5, 5, 4, 3, 3},
                      new int[] {3, 2, 5, 5, 4, 3, 4, 5, 5, 4},
                      new int[] {5, 3, 3, 5, 4, 3, 4, 4, 4, 5},
                      new int[] {3, 3, 5, 5, 4, 5, 5, 4, 5, 2},
                      new int[] {5, 5, 5, 5, 5, 5, 4, 5, 5, 5},
                      new int[] {4, 4, 4, 3, 4, 3, 5, 4, 5, 4},
                      new int[] {2, 5, 4, 5, 4, 5, 4, 3, 5, 3},
                      new int[] {4, 5, 4, 5, 4, 3, 4, 3, 5, 5},
                      new int[] {5, 5, 3, 5, 4, 5, 4, 3, 3, 4},
                      new int[] {4, 4, 4, 5, 4, 4, 4, 4, 5, 3},
                      new int[] {3, 2, 2, 5, 4, 4, 4, 3, 3, 4},
                      new int[] {5, 3, 4, 4, 4, 3, 3, 3, 5, 5},
                    };
      return mas;
    }
 
    /// <summary>
    /// Находим среднюю успеваемость для каждого студента
    /// </summary>
    /// <param name="otsenki">двухмерный массив оценок</param>
    /// <returns>массив средних оценок</returns>
    public static double[] StudentAverage(int[][] otsenki)
    {
      // Средняя оценка для каждого студента
      double[] studentAverage = new double[otsenki.GetLength(0)];
 
      for (int i = 0; i < otsenki.GetLength(0); i++)
      {
        studentAverage[i] = otsenki[i].Average();
      }
      return studentAverage;
    }
 
  }
1
38 / 40 / 6
Регистрация: 10.11.2011
Сообщений: 70
17.11.2011, 11:55
Вот тебе полный Solution.
Вложения
Тип файла: zip LabStudents.zip (40.1 Кб, 8 просмотров)
1
1 / 1 / 1
Регистрация: 03.02.2010
Сообщений: 89
17.11.2011, 14:58  [ТС]
2 SergiiK
Спасибо огромнейшее за пример. Только один маленький вопросик по нему:
Как в нём можно сделать так чтобы результат про каждого студента писался в одну строку (как в том консольном приложении что я кидал). например:
Студент № 01: 3 4 5 2 4 2 4 5 3 3 средний бал: 3,5
Заранее спасибо!

Добавлено через 2 часа 9 минут
Вот что получилось реализовать:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/// <summary>
    /// Выводим оценки на экран
    /// </summary>
    /// <param name="otsenki">двухмерный массив оценок</param>
    public static void ShowRating(int[][] rating)
    {
        for (int s = 0; s < rating.Length; s++)
        {
         Console.Write("Студент № {0:D2}: ", 1 + s);
          for (int r = 0; r < rating[s].Length; r++)
            {
             Console.Write(" " + rating[s][r]);
            }
        Console.WriteLine();
        }
     }
 
 
 
/// <summary>
    /// Выводим среднюю успеваемость для каждого студента на экран
    /// </summary>
    /// <param name="otsenki">массив средних оценок</param>
    public static void ShowAverageRating(double[] studentAverage)
    {
            for (int s = 0; s < studentAverage.Length; s++)
            {
                Console.WriteLine("Средний бал= " + studentAverage[s]);
            }
       
    }
Как реализовать так чтобы оно писалось в одну строку я незнаю... Чуствую без хороших изменений кода необойтись... нужно както обьеднить ShowAverageRating и ShowRating...
0
38 / 40 / 6
Регистрация: 10.11.2011
Сообщений: 70
17.11.2011, 17:05
Этот код добавь в библиотеку

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/// <summary>
    /// Выводим номер студнета, оченки и среднюю успеваемость для каждого студента на экран
    /// </summary>
    /// <param name="rating">двухмерный массив оценок</param>
    /// <param name="studentAverage">массив средних оценок</param>
    public static void ShowAverageRatingWithRating(int[][] rating, double[] studentAverage)
    {
      for (int s = 0; s < rating.Length; s++)
      {
        Console.Write("Студент № {0:00}: ", s);
 
        for (int r = 0; r < rating[s].Length; r++)
        {
          Console.Write(" " + rating[s][r]);
        }
 
        Console.WriteLine("  средняя успеваемость: " + studentAverage[s]);
      }
    }
А весь код приложения замени на

C#
1
2
3
4
5
6
7
8
9
10
class Program
  {
    static void Main(string[] args)
    {
      int[][] studentsRating = Knowledge.RatingGenerator();
      double[] averageRating = Knowledge.StudentAverage(studentsRating);
      Knowledge.ShowAverageRatingWithRating(studentsRating, averageRating);  
      Console.ReadKey();
    }
  }
1
1 / 1 / 1
Регистрация: 03.02.2010
Сообщений: 89
17.11.2011, 17:50  [ТС]
А что тогда написать в WindowsForm чтобы при нажатии на кнопку этот массив данных показывался в RichTextBox. Вот начало написал а как дальше ума неприложу:
C#
1
2
3
4
5
private void button1_Click(object sender, EventArgs e)
        {
            richTextBox1.Text = null;
            int[][] studentsRating = Knowledge.RatingGenerator();
            double[] averageRating = Knowledge.StudentAverage(studentsRating);
Пробывал написаь както так, но оно неработает:
C#
1
richTextBox1.Text += Lab1DLL.Knowledge.StudentAverage(studentsRating);
И загвостка в том что тут есть два типа инт и дабл. Хелп!
0
38 / 40 / 6
Регистрация: 10.11.2011
Сообщений: 70
17.11.2011, 18:06
в библиотеку добавь еще и этот метод

код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/// <summary>
    /// Возвращаем текст с номером студнета, оценки и среднюю успеваемость для каждого студента в виде строки
    /// </summary>
    /// <param name="rating">двухмерный массив оценок</param>
    /// <param name="studentAverage">массив средних оценок</param>
    /// <returns>строка</returns>
    public static string AverageRatingWithRating(int[][] rating, double[] studentAverage)
    {
      string result = string.Empty;
      for (int s = 0; s < rating.Length; s++)
      {
        result += String.Format("Студент № {0:00}: ", s);
 
        for (int r = 0; r < rating[s].Length; r++)
        {
          result += " " + rating[s][r].ToString();
        }
 
        result += "  средняя успеваемость: " + studentAverage[s].ToString() + "\n";
      }
      return result;
    }


а в Form button_click

C#
1
richTextBox1.Text = Lab1DLL.Knowledge.AverageRatingWithRating(studentsRating, averageRating);
1
1 / 1 / 1
Регистрация: 03.02.2010
Сообщений: 89
18.11.2011, 13:18  [ТС]
Подскажите ещё тогда что ещё нужно вписать в код WindowsForm чтобы оно функции брало с внешней длл уже скомпилированной рабочей. Чтобы она небыла как ссылка в проэкте а именно подключённая к проэкту.
Нашёл в интернете вот такое:
C#
1
[DllImport("FindCaptureDevice.dll")]
Но как с этим работать дальше я незнаю...
0
38 / 40 / 6
Регистрация: 10.11.2011
Сообщений: 70
18.11.2011, 13:26
Суть библиотеки в том и заключается, что ее можно поправить не зависимо от самого приложения.
Если ты хочешь, чтобы эти методы библиотеки компилировались в само приложение, то создай эти методы в самом приложении, и не надо заниматься йогой.

C#
1
[DllImport("FindCaptureDevice.dll")]
- это атрибут, в атрибутах я не силен.

ЗДЕСЬ И ДАЛЕЕ ПОПРАВЬТЕ МЕНЯ КТО ЗНАЕТ!!!
предлагаемая тобой конструкция подключает библиотеку динамически, т.е. в процессе работы программы. Также она может подключить библиотеку написанную на С++ с "неуправляемым кодом".

Короче, РЕЗЮМЕ:
Если твой софт работает, то не нажимай больше не на какие кнопки. Тем более не создавай себе дополнительных вопросов от преподавателя.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.11.2011, 13:26

Переделать программу из консольного приложения в Windows Form
Помогите переделать программу из консольного приложения в Windows Form в Visual Studio 2008, пожалуйста:)

Из консольного приложения в dll
Доброго времени суток. Есть консольный проект который нужно переделать в dll библиотеку. Вызываться из другой программы будет лишь одна...

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

Нужно создать dll из консольного приложения
Всем привет! У меня есть проект типа &quot;консольное приложение&quot;. Мне нужно скомпилировать его в dll. В VS и C# я мало смыслю. При поисках...

Компиляция консольного приложения. Ошибка msvcp120.dll
Добрый день. Cсоздаю проект консольного приложения фреймворк 2.0 ставлю(не знаю влияет ли это на проблему) Компилировал на релизе на двух...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru