Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 12.09.2013
Сообщений: 70
1

Написать программу "Мини-АТС" с интерфейсом на WPF

21.11.2014, 22:08. Показов 2373. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Надо написать программу Мини-АТС на языке С#, интерфейс в виде панели для набора цифр и экрана (в виде телефона) кнопками в WPF, чтоб при наборе номера и звоне было видно что звонят или занято.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.11.2014, 22:08
Ответы с готовыми решениями:

Установить мини IP-АТС
Доброе время суток! Есть такая задача, установить мини IP-АТС на обычной аналоговой линии с одним...

Подбор Мини АТС SIP
Добрый день. Занимаюсь поиском Мини АТС работающей по SIP-протоколу, Рассматривал варианты...

Мини АТС NEC SL1000
У кого нибудь есть русский мануал по данной АТС, а также руководство по программированию? Где...

мини АТС на 100 абонентов
Имеется 19 дюймовый шкаф в который сводится 100 портов (телефон) кабелем UTP 2х2х0,5. Помогите...

8
45 / 45 / 32
Регистрация: 15.04.2011
Сообщений: 187
21.11.2014, 22:23 2
Riko747, Клиент-сервер? Или откуда куда звонить то?)
0
0 / 0 / 0
Регистрация: 12.09.2013
Сообщений: 70
22.11.2014, 23:07  [ТС] 3
Что-то вроде этого)
0
116 / 116 / 70
Регистрация: 10.11.2013
Сообщений: 445
23.11.2014, 02:13 4
drondez, ага, и вагоном реализовать пару паттернов необходимых (Синглтон для станции.. посредник, слуга и реестр для неё же...)

Наверняка, просто на WPF обычное десктопная приложуха...


Но всё же это не для новичков задание.. нахаляву вряд ли кто-то сделает.
0
45 / 45 / 32
Регистрация: 15.04.2011
Сообщений: 187
23.11.2014, 03:24 5
Anderok, ну если мне будет не сильно лень то я б сделал=) Я как раз щас в WPF'ом разбираюсь да с Expresson Blend=)
0
116 / 116 / 70
Регистрация: 10.11.2013
Сообщений: 445
23.11.2014, 03:34 6
Цитата Сообщение от Anderok Посмотреть сообщение
Синглтон для станции.. посредник, слуга и реестр для неё же
drondez, тогда об этом не забудь xD
0
660 / 530 / 137
Регистрация: 07.07.2011
Сообщений: 1,232
23.11.2014, 11:54 7
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

Вот то, что я cмог сделать за пару часов, код не совсем хороший, но может вам пригодится.
Скрин интерфейса:
Написать программу "Мини-АТС" с интерфейсом на WPF


Исходный код:
Кликните здесь для просмотра всего текста

Connection.cs

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
namespace ATC
{
    class Connection
    {
        public Telephone telephone1 { get; private set; }
        public Telephone telephone2 { get; private set; }
 
        public Connection( Telephone telephone1, Telephone telephone2 )
        {
            this.telephone1 = telephone1;
            this.telephone2 = telephone2;
        }
 
        public bool FindTelephone( int number )
        {
            return telephone1.thisNumber == number || telephone2.thisNumber == number;
        }
    }
}


DistpecherConnection.cs
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
using System.Collections.ObjectModel;
 
namespace ATC
{
    static class DistpecherConnection
    {
        static public ObservableCollection<Connection> _listConnections = new ObservableCollection<Connection>();
 
        static public bool AddConnection( Telephone telephone1, Telephone telephone2 )
        {
            try
            {
                if ( telephone1.Status == Status.None && telephone2.Status == Status.None )
                {
                    telephone1.Status = Status.DuringConnection;
                    telephone2.Status = Status.DuringConnection;
 
                    _listConnections.Add( new Connection( telephone1, telephone2 ) );
 
                    telephone1.Status = Status.Connection;
                    telephone2.Status = Status.Connection;
 
                    telephone1.Closing += TelephoneClosing;
                    telephone2.Closing += TelephoneClosing;
 
                    return true;
                }
            }
            catch
            {
                return false;
            }
 
            return false;
        }
 
        private static void TelephoneClosing( object sender, System.ComponentModel.CancelEventArgs e )
        {
            foreach ( var i in _listConnections )
            {
                if ( i.FindTelephone( (sender as Telephone).thisNumber ) )
                {
                    i.telephone1.Status = Status.None;
                    i.telephone2.Status = Status.None;
 
                    _listConnections.Remove( i );
 
                    break;
                }
            }
        }
 
        static public bool AddConnection( int number1, int number2 )
        {
            return AddConnection(
                telephone1: RegisterTelephone.FindTelephone( x => x.thisNumber == number1 ),
                telephone2: RegisterTelephone.FindTelephone( x => x.thisNumber == number2 )
                );
        }
    }
}


RegisterTelephone.cs
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
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
 
namespace ATC
{
    static class RegisterTelephone
    {
        static public MainWindow mainWindow { get; set; }
 
        static private int _number = 1;
        static private List<Telephone> _listTelephones = new List<Telephone>(); 
 
        static public void AddTelephone( Telephone telephone )
        {
            telephone.thisNumber = _number++;
 
            telephone.onCall += Telephone_onCall;
            telephone.Closing += Telephone_Closing;
 
            _listTelephones.Add( telephone );
        }
 
        static public Telephone FindTelephone( Predicate<Telephone> predicat )
        {
            return _listTelephones.Find( x => predicat( x ) );
        }
 
        private static void Telephone_Closing( object sender, System.ComponentModel.CancelEventArgs e )
        {
            Telephone telephone = sender as Telephone;
            _listTelephones.Remove( telephone );
        }
 
        private static void Telephone_onCall( object sender, CallEventArgs e )
        {
            if ( DistpecherConnection.AddConnection( e.thisNumber, e.connectNumber ) )
            {
                /*mainWindow.setNumber1( e.thisNumber );
                mainWindow.setNumber2( e.connectNumber );
                mainWindow.setStatus( (sender as Telephone).Status );*/
            }
        }
    }
}


StatusEnum.cs
C#
1
2
3
4
namespace ATC
{
    public enum Status { Disconnect, DuringConnection, Connection, None };
}


Вложения
Тип файла: rar ATC.rar (826.6 Кб, 40 просмотров)
1
660 / 530 / 137
Регистрация: 07.07.2011
Сообщений: 1,232
23.11.2014, 11:55 8
Исходный код продолжение:
Кликните здесь для просмотра всего текста

Telephone.xaml.cs
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
using System.Windows;
using System.Windows.Input;
using System.Windows.Shapes;
 
namespace ATC
{
    /// <summary>
    /// Interaction logic for Telephone.xaml
    /// </summary>
    public partial class Telephone : Window
    {
        private int _thisNumber;
        private Status _status;
        public int thisNumber
        {
            get { return _thisNumber; }
            set
            {
                MyNumber.Text = string.Format( "Мой номер: {0}", value );
                _thisNumber = value;
            }
        }
        public int connectNumber
        {
            get
            {
                return int.Parse( Number.Text );
            }
 
            set
            {
                Number.Text = value.ToString();
                this.connectNumber = value;
            }
        }
        public Status Status
        {
            get
            {
                return _status;
            }
 
            set
            {
                switch( value )
                {
                    case Status.DuringConnection:
                    {
                        StatusText.Text = "Ожидаем соеденения...";
                        break;
                    }
 
                    case Status.Disconnect:
                    {
                        StatusText.Text = "Сброс вызова";
                        break;
                    }
 
                    case Status.Connection:
                    {
                        StatusText.Text = "Идет разговор";
                        break;
                    }
 
                    case Status.None:
                    {
                        StatusText.Text = string.Empty;
                        break;
                    }
                }
 
                _status = value;
            }
        }
 
        public delegate void CallEventHandler( object sender, CallEventArgs e );
        public event CallEventHandler onCall;
 
        public Telephone()
        {
            InitializeComponent();
        }
 
        private void Border_MouseDown(object sender, MouseButtonEventArgs e)
        {
        }
 
        private void Clear_MouseLeftButtonUp( object sender, MouseButtonEventArgs e )
        {
            Number.Text = string.Empty;
        }
 
        private void Border_MouseLeftButtonDown( object sender, MouseButtonEventArgs e )
        {
            this.DragMove();
        }
 
        private void Exit_MouseLeftButtonUp( object sender, MouseButtonEventArgs e )
        {
            this.Close();
        }
 
        private void NumberButtonMouseDown( object sender, MouseButtonEventArgs e )
        {
            if ( (sender as Ellipse).Name[0] == '_' )
            {
                int num = int.Parse( (sender as Ellipse).Name[1].ToString() );
                Number.Text += num.ToString();
            }
        }
 
        private void Call_MouseLeftButtonDown( object sender, MouseButtonEventArgs e )
        {
            if ( onCall != null )
                onCall( 
                    this, 
                    new CallEventArgs( thisNumber, connectNumber ) 
                    );
        }
    }
 
    public class CallEventArgs
    {
        public CallEventArgs( int ThisNumber, int ConnectNumber )
        {
            this.thisNumber = ThisNumber;
            this.connectNumber = ConnectNumber;
        }
 
        public int thisNumber { get; set; }
        public int connectNumber { get; set; }
    }
}

MainWindows.xaml.cs
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
using System.Windows;
using System.Windows.Controls;
 
namespace ATC
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            RegisterTelephone.mainWindow = this;
 
            Number.ItemsSource = DistpecherConnection._listConnections;
            Number2.ItemsSource = DistpecherConnection._listConnections;
            Status.ItemsSource = DistpecherConnection._listConnections;
        }
 
        private void button_Click( object sender, RoutedEventArgs e )
        {
            Telephone telephone = new Telephone();
            telephone.Status = ATC.Status.None;
            RegisterTelephone.AddTelephone( telephone );
            telephone.Show();
        }
    }
}



Да кстати, телефон закрывается на звездочку, а номер стирается на решетку.
0
0 / 0 / 0
Регистрация: 12.09.2013
Сообщений: 70
23.11.2014, 12:32  [ТС] 9
Вот спасибо так спасибо! Что бы я без вас делал!)
0
23.11.2014, 12:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.11.2014, 12:32
Помогаю со студенческими работами здесь

Информация из мини атс на сайте
Доброго времени суток! За ранее прошу прощения если пишу не в той ветке, т.к. я далек от web...

Мини АТС panasonic KX-TDA200
Ребят есть у кого ПО для Мини АТС panasonic KX-TDA200 выручайте Добавлено через 6 часов 10 минут...

продам Мини-АТС Panasonic KX-TEM824
Мини-атс Panasonic KX-TEM824. б/у, полностью рабочая. Отправлю в любой регион транспортной...

Подключение к мини атс lg ldk-100
Приветствую други, на работе имеется настроенная 8 лет назад АТС LG ldk-100. Никогда до этого не...

В телефоне, подключённом к мини-АТС, тишина
Здравствуйте, есть мини-АТС Samsung NX-1232 и подключенный к ней телефон, на который звонят извне....

Мини АТС Panasonic Tes824 + LinksysPAP
Доброе время суток всем! Ситуация следующая. В офисе телефония подается через LinksysPAP. Все...

Выбор проводов для мини АТС
Добрый день! Разворачиваю небольшую телефонную сеть на основе мини АТС KX-NS500RU для маленького...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru