Диплом: Разработка сетевого чата для медицинской организации

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
85
class User {
public int Id { get; set; }
public string Login { get; set; }
public string Password { get; set; }
public string Email { get; set; }
public DateTime RegDate { get; set; }
public User() {}
public User(string login, string password, string email, DateTime regDate) {
Login = login;
Password = password;
Email = email;
RegDate = regDate;
}
public static bool Auth(string login, string password) {
var user = Search(login);
if (user == null) return false;
var hashPass = Hash.sha512(password);
return user.Login == login && user.Password == hashPass;
}
public static int Add(User user) {
try {
SQL.MySqlCommand.CommandText = $"INSERT INTO {UsersTable.Name} " +
$"({UsersTable.Login}, {UsersTable.Password}, {UsersTable.Email}, {UsersTable.RegDate}) " +
$"VALUES ('{user.Login}', '{Hash.sha512(user.Password)}', '{user.Email}', '{UnixTimeStamp.ToUnix(user.RegDate)}')";
SQL.MySqlCommand.ExecuteNonQuery();
}
catch (Exception) { return -1; }
return (int) SQL.MySqlCommand.LastInsertedId;
}
public static User Search(string login) {
SQL.MySqlCommand.CommandText = $"SELECT * FROM {UsersTable.Name} WHERE {UsersTable.Login}='{login}'";
using (var mySqlDataReader = SQL.MySqlCommand.ExecuteReader()) {
User user = null;
if (mySqlDataReader.Read()) {
user = new User {
Id = mySqlDataReader.GetInt32(UsersTable.Id),
Login = mySqlDataReader.GetString(UsersTable.Login),
Password = mySqlDataReader.GetString(UsersTable.Password),
Email = mySqlDataReader.GetString(UsersTable.Email),
RegDate = UnixTimeStamp.ToDateTime(mySqlDataReader.GetInt32(UsersTable.RegDate))
};
}
mySqlDataReader.Close();
return user;
}
}
public static User Search(int id) {
SQL.MySqlCommand.CommandText = $"SELECT * FROM {UsersTable.Name} WHERE {UsersTable.Id}='{id}'";
using (var mySqlDataReader = SQL.MySqlCommand.ExecuteReader()) {
User user = null;
if (mySqlDataReader.Read()) {
user = new User {
Id = mySqlDataReader.GetInt32(UsersTable.Id),
Login = mySqlDataReader.GetString(UsersTable.Login),
Password = mySqlDataReader.GetString(UsersTable.Password),
Email = mySqlDataReader.GetString(UsersTable.Email),
RegDate = UnixTimeStamp.ToDateTime(mySqlDataReader.GetInt32(UsersTable.RegDate))
};
}
mySqlDataReader.Close();
return user;
}
}
}
class HistoryMessage
{
public DateTime MsgDate { get; set; }
public int IdUser { get; set; }
public string Msg { get; set; }
public HistoryMessage(){}
86
public HistoryMessage(DateTime msgDate, int idUser, string msg) {
MsgDate = msgDate;
IdUser = idUser;
Msg = msg;
}
public static List<HistoryMessage> Get() {
var history = new List<HistoryMessage>();
SQL.MySqlCommand.CommandText = $"SELECT * FROM {HistoryTable.Name}";
using (var mySqlDataReader = SQL.MySqlCommand.ExecuteReader()) {
while (mySqlDataReader.Read()) {
var historyMsg = new HistoryMessage {
MsgDate = UnixTimeStamp.ToDateTime(mySqlDataReader.GetInt32(HistoryTable.MsgDate)),
IdUser = mySqlDataReader.GetInt32(HistoryTable.IdUser),
Msg = mySqlDataReader.GetString(HistoryTable.Msg),
};
history.Add(historyMsg);
}
mySqlDataReader.Close();
}
return history;
}
public static int Add(HistoryMessage historyMessage) {
SQL.MySqlCommand.CommandText =
$"INSERT INTO {HistoryTable.Name} " +
$"({HistoryTable.MsgDate}, {HistoryTable.IdUser}, {HistoryTable.Msg}) " +
$"VALUES ('{UnixTimeStamp.ToUnix(historyMessage.MsgDate)}', " +
$"'{historyMessage.IdUser}', '{historyMessage.Msg}')";
SQL.MySqlCommand.ExecuteNonQuery();
return (int)SQL.MySqlCommand.LastInsertedId;
}
private static void DeleteOld() {
SQL.MySqlCommand.CommandText =
$"DELETE FROM {HistoryTable.Name} " +
$"WHERE {HistoryTable.MsgDate} < " +
$"'{UnixTimeStamp.ToUnix(DateTime.Now - TimeSpan.FromMinutes(15))}'";
SQL.MySqlCommand.ExecuteNonQuery();
}
}
<mah:MetroWindow x:Class="Server.Form.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Server"
xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
mc:Ignorable="d"
Title="Чат сервер" Height="400" Width="650" WindowStartupLocation="CenterScreen" MinWidth="640" MinHeight="320"
Loaded="MainWindow_OnLoaded">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30" />
<RowDefinition Height="500*" />
<RowDefinition Height="40" />
</Grid.RowDefinitions>
<Menu Grid.Row="0" Grid.Column="0">
<MenuItem Header="Файл">
<MenuItem Header="Выход" Name="menuExit" Click="MenuExit_OnClick" />
</MenuItem>
<MenuItem Header="Сервер">
<MenuItem Header="Запуск" Name="MenuServerStart" Click="MenuServerStart_OnClick" />
<MenuItem Header="Остановить" Name="menuServerStop" Click="MenuServerStop_OnClick" />
<MenuItem Header="Перезапустить" Name="menuServerRestart" Click="MenuServerRestart_OnClick" />
</MenuItem>
<MenuItem Header="Справка">
<MenuItem Header="О программе" Name="menuAbout" Click="MenuAbout_OnClick" />
</MenuItem>
</Menu>
<Border Grid.Row="1" BorderThickness="1" BorderBrush="#FFCCCCCC" Margin="5,0">
<TextBox x:Name="TextBoxLog" TextWrapping="Wrap" />
</Border>
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
87
<ColumnDefinition />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<TextBox x:Name="TextBoxCommand" TextWrapping="Wrap" KeyUp="TextBoxCommand_KeyUp"
HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Margin="5" />
<Button x:Name="ButtonSend" Content="Отправить" Grid.Column="1" Padding="5" Margin="0,5,5,5"
Click="ButtonSend_Click">
</Button>
</Grid>
</Grid>
</mah:MetroWindow>
<mah:MetroWindow x:Class="Server.Form.StartServer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Server"
xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
mc:Ignorable="d"
Title="Запуск" Height="134.807" Width="235.106" WindowStartupLocation="CenterOwner" ResizeMode="NoResize">
<Grid>
<Button x:Name="buttonStart" Content="Старт" HorizontalAlignment="Left" Margin="10,72,0,0"
VerticalAlignment="Top" Width="211" Click="ButtonStart_Click" />
<Label Content="IP адрес" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top"
Padding="0,5,5,5" />
<Label Content="Порт" HorizontalAlignment="Left" Margin="10,41,0,0" VerticalAlignment="Top" Padding="0,5,5,5" />
<TextBox x:Name="TextBoxIP" HorizontalAlignment="Left" Height="23" Margin="90,10,0,0" TextWrapping="Wrap"
Text="127.0.0.1" VerticalAlignment="Top" Width="131" TextAlignment="Center" />
<TextBox x:Name="textBoxPort" HorizontalAlignment="Left" Height="25" Margin="90,41,0,0" TextWrapping="Wrap"
Text="1122" VerticalAlignment="Top" Width="131" TextAlignment="Center" />
</Grid>
</mah:MetroWindow>
<mah:MetroWindow x:Class="Server.Form.About"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
mc:Ignorable="d"
Title="О программе" Height="269.033" Width="551.446" WindowStartupLocation="CenterOwner" ResizeMode="NoResize">
<Grid>
<Label x:Name="LabelVersion" Content="Версия:" HorizontalAlignment="Left" Margin="10,207,0,0"
VerticalAlignment="Top" />
<TextBox HorizontalAlignment="Left" Height="192" Margin="10,10,0,0" TextWrapping="Wrap"
Text="Се
рверное програ
ммное обеспечение (се
рвер, англ. server от to serve — служить; множественное число
се
рверы, в разговорном языке также употребляется сервера
) — в информационных технологиях — программный компонент
вычислительной системы, выполняющий сервисные (обслуживающие) функции по запросу клиента, предоставляя ему доступ к
определённым ресурсам или услугам."
VerticalAlignment="Top" Width="527" />
<Button x:Name="ButtonClose" Content="Закрыть" HorizontalAlignment="Left" Margin="422,207,0,0"
VerticalAlignment="Top" Width="115" Height="26" Click="ButtonClose_Click" />
</Grid>
</mah:MetroWindow>
88
ПРИЛОЖЕНИЕ 11.
Листинг приложения клиент
<mah:MetroWindow x:Class="Client.Form.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Client"
xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
xmlns:form="clr-namespace:Client.Form"
mc:Ignorable="d"
Title="Чат" Height="400" Width="650" WindowStartupLocation="CenterScreen" Padding="0" MinWidth="640"
MinHeight="320">
<Grid Margin="0">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="355*"/>
<RowDefinition Height="50*"/>
</Grid.RowDefinitions>
<Menu>
<MenuItem Header="Файл">
<MenuItem Header="Выход" Name="menuExit" Click="MenuExit_OnClick" />
</MenuItem>
<MenuItem Header="Аккаунт">
<MenuItem Header="Подключиться" Name="MenuConnect" Click="MenuConnect_OnClick"/>
<MenuItem Header="Зарегистрироваться" Name="menuRegister" Click="MenuRegister_OnClick"/>
</MenuItem>
<MenuItem Header="Справка">
<MenuItem Header="Техническая поддержка" Name="menuSupport" Click="MenuSupport_OnClick"/>
<MenuItem Header="О программе" Name="menuAbout" Click="MenuAbout_OnClick"/>
</MenuItem>
</Menu>
<ScrollViewer x:Name="ScrollViewer" Grid.Row="1" BorderBrush="Black" Margin="5,5,5,0">
<Border BorderThickness="1" BorderBrush="#FFCCCCCC">
<StackPanel x:Name="StackPanelChat"/>
</Border>
</ScrollViewer>
<Grid Grid.Row="2" Margin="0">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="70"/>
<ColumnDefinition Width="90"/>
</Grid.ColumnDefinitions>
<TextBox x:Name="TextBoxInput" TextWrapping="Wrap" KeyDown="TextBoxInput_OnKeyDown" Margin="5,5,0,5"/>
<Button x:Name="ButtonSendFile" Content="Файл" Grid.Column="1" Margin="5,5,0,5" Click="ButtonSendFile_Click"/>
<Button x:Name="ButtonSend" Content="Отправить" Grid.Column="2" Margin="5" Click="ButtonSend_Click"/>
</Grid>
</Grid>
</mah:MetroWindow>
<UserControl x:Class="Client.Form.UserControlMessage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Client.Form"
mc:Ignorable="d" Margin="5" HorizontalAlignment="Left" VerticalAlignment="Top">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock x:Name="TextBlockLogin" TextWrapping="Wrap" Text="user" Margin="0,5,5,5" FontSize="14"
HorizontalAlignment="Left" VerticalAlignment="Center" Foreground="#FF004B97" />
<TextBlock x:Name="TextBlockDate" TextWrapping="Wrap" Text="12:34" Margin="5,5,0,5" FontSize="14"
HorizontalAlignment="Right" VerticalAlignment="Center" Grid.Column="1" Foreground="#FF004B97" />
</Grid>
<Border BorderBrush="#FF59ABFF" BorderThickness="1" Margin="0" Background="#FF90C7FF" CornerRadius="10"
89
Grid.Row="1" MinWidth="200">
<TextBlock x:Name="TextBlock" TextWrapping="Wrap" Text="TextTextTextTextTextTextTextText" Margin="10"
FontSize="14" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="#FF004B97" />
</Border>
</Grid>
</UserControl>
<mah:MetroWindow x:Class="Client.Form.SignIn"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
xmlns:local="clr-namespace:Client"
mc:Ignorable="d"
Title="Подключиться" Height="197.729" Width="217.054" WindowStartupLocation="CenterOwner" ResizeMode="NoResize">
<Grid>
<Button x:Name="ButtonConnect" Content="Подключиться" HorizontalAlignment="Left" Margin="10,134,0,0"
VerticalAlignment="Top" Width="193" Click="ButtonConnect_Click" />
<Label Content="IP адрес" HorizontalAlignment="Left" Margin="10,72,0,0" VerticalAlignment="Top"
Padding="0,5,5,5" />
<Label Content="Порт" HorizontalAlignment="Left" Margin="10,103,0,0" VerticalAlignment="Top" Padding="0,5,5,5"/>
<TextBox x:Name="textBoxIP" HorizontalAlignment="Left" Height="23" Margin="83,72,0,0" TextWrapping="Wrap"
Text="127.0.0.1" VerticalAlignment="Top" Width="120" />
<TextBox x:Name="textBoxPort" HorizontalAlignment="Left" Height="25" Margin="83,103,0,0" TextWrapping="Wrap"
Text="1122" VerticalAlignment="Top" Width="120" />
<Label Content="Логин" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Padding="0,5,5,5" />
<TextBox x:Name="textBoxLogin" HorizontalAlignment="Left" Height="23" Margin="83,10,0,0" TextWrapping="Wrap"
Text="user1" VerticalAlignment="Top" Width="120" />
<PasswordBox x:Name="passwordBoxPassword" HorizontalAlignment="Left" Margin="83,41,0,0" VerticalAlignment="Top"
Password="123" Width="120" />
<Label Content="Пароль" HorizontalAlignment="Left" Margin="10,41,0,0" VerticalAlignment="Top" Padding="0,5,5,5" />
</Grid>
</mah:MetroWindow>
<mah:MetroWindow x:Class="Client.Form.SignUp"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
xmlns:local="clr-namespace:Client"
mc:Ignorable="d"
Title="Регистрация" Height="198.729" Width="269.103" WindowStartupLocation="CenterOwner" ResizeMode="NoResize">
<Grid>
<Label Content="Логин" HorizontalAlignment="Left" Margin="10,41,0,0" VerticalAlignment="Top" Padding="0,5,5,5" />
<Label Content="Пароль" HorizontalAlignment="Left" Margin="10,72,0,0" VerticalAlignment="Top" Padding="0,5,5,5" />
<PasswordBox x:Name="passwordBoxPassword" HorizontalAlignment="Left" Margin="100,72,0,0"
VerticalAlignment="Top" Width="155" Password="123" />
<PasswordBox x:Name="passwordBoxPassword2" HorizontalAlignment="Left" Margin="100,103,0,0"
VerticalAlignment="Top" Width="155" Password="123" />
<Button x:Name="buttonRegister" Content="Регистрация" HorizontalAlignment="Left" Margin="10,134,0,0"
VerticalAlignment="Top" Width="245" Click="ButtonRegister_Click" />
<TextBox x:Name="textBoxLogin" HorizontalAlignment="Left" Height="23" Margin="100,41,0,0" TextWrapping="Wrap"
VerticalAlignment="Top" Width="155" Text="user3" />
<Label Content="Почта" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Padding="0,5,5,5" />
<TextBox x:Name="textBoxEmail" HorizontalAlignment="Left" Height="23" Margin="100,10,0,0" TextWrapping="Wrap"
VerticalAlignment="Top" Width="155" Text="user3@mail.ru" />
</Grid>
</mah:MetroWindow>
<mah:MetroWindow x:Class="Client.Form.Support"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
xmlns:local="clr-namespace:Client"
mc:Ignorable="d"
Title="Техническая поддержка" Height="321.206" Width="614.653" WindowStartupLocation="CenterOwner"
ResizeMode="NoResize">
<Grid>
<TextBox HorizontalAlignment="Left" Height="23" Margin="112,10,0,0" TextWrapping="Wrap" VerticalAlignment="Top"
Width="489" Text="" VerticalContentAlignment="Center" />
<Label Content="Тема" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" />
90
<TextBox HorizontalAlignment="Left" Height="213" Margin="112,41,0,0" TextWrapping="Wrap"
VerticalAlignment="Top" Width="489"
Text=""
VerticalScrollBarVisibility="Auto" />
<Label Content="Сообщение" HorizontalAlignment="Left" Margin="9,41,0,0" VerticalAlignment="Top" />
<Button x:Name="ButtonSend" Content="Отправить" HorizontalAlignment="Left" Margin="112,259,0,0"
VerticalAlignment="Top" Width="487" Click="ButtonSend_Click" Height="26" />
</Grid>
</mah:MetroWindow>
<mah:MetroWindow x:Class="Client.Form.About"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
xmlns:local="clr-namespace:Client"
mc:Ignorable="d"
Title="О программе" Height="250.81" Width="467.285" WindowStartupLocation="CenterOwner" ResizeMode="NoResize">
<Grid>
<Label x:Name="LabelVersion" Content="Версия:" HorizontalAlignment="Left" Margin="10,0,0,10"
VerticalAlignment="Bottom" />
<TextBox Margin="10,10,10,0" TextWrapping="Wrap"
Text="Чат (англ. chatter — болтать) — это обмен сообщениями в реальном времени между двумя и больше
пользователями с помощью сети (интернета). Вернее, это само программное обеспечение, которое позволяет этими сообщениями
обмениваться. А процесс общения называют или просто «чатом», или «чатиться»."
VerticalAlignment="Top" Height="170" />
<Button x:Name="ButtonClose" Content="Закрыть" HorizontalAlignment="Right" Margin="0,0,10,10"
VerticalAlignment="Bottom" Width="115" Height="26" Click="ButtonClose_Click" />
</Grid>
</mah:MetroWindow>

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)
Value-based education: ценности в системе образования и способы их реализации на уроке английского языка. Опыт Европейских стран