База даних "Телефонний довідник"
Додаток 1: Вихідний код програми
Головна форма:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Phonebook.Classes;
using System.Diagnostics;
using System.IO;
using System.Xml.Linq;
using System.Globalization;
namespace Phonebook
{
public partial class MainForm: Form
{
float FontSize = 10.0f;
public MainForm()
{
InitializeComponent();
}
#region Buttons
void buttonNew_Click(object sender, EventArgs e)
{
try
{
ItemForm newForm = new ItemForm(true, false);
newForm.Font = new Font(this.Font.Name, this.FontSize, this.Font.Style, this.Font.Unit, this.Font.GdiCharSet, this.Font.GdiVerticalFont);
newForm.Text = "Додати новий запис";
newForm.lableRegDate.Text = christianToolStripMenuItem.Checked ? DateTime.Now.ToString(): ConvertToPersianDate(DateTime.Now.ToString());
newForm.ShowDialog();
LoadPhoneBookItems();
int contactsNumbers = Variables.xDocument.Descendants("Item").Where(q => q.Attribute("UserID").Value == Variables.CurrentUserID).Count();
this.Text = Variables.Caption + Variables.CurrentUserName + ": " + contactsNumbers.ToString() + " Contacts";
}
catch (Exception ex)
{
StackFrame file_info = new StackFrame(true);
Messages.error(ref file_info, ex.Message, this);
}
}
void buttonClearSearchTextBox_Click(object sender, EventArgs e)
{
textBoxSearch.Text = "";
LoadPhoneBookItems();
}
void buttonEdit_Click(object sender, EventArgs e)
{
try
{
if (listView1.SelectedItems.Count < 1) return;
string id = listView1.SelectedItems[0].Name.Replace("Item", "");
var item = (from q in Variables.xDocument.Descendants("Item")
where q.Attribute("UserID").Value == Variables.CurrentUserID && q.Attribute("ID").Value == id
select q).First();
if (item == null) return;
ItemForm editForm = new ItemForm(false, true);
editForm.Font = new Font(this.Font.Name, this.FontSize, this.Font.Style, this.Font.Unit, this.Font.GdiCharSet, this.Font.GdiVerticalFont);
editForm.Text = "Edit Item";
editForm.textBoxAddress.Text = item.Attribute("Address").Value;
editForm.textBoxEMail.Text = item.Attribute("Email").Value;
editForm.textBoxMobile.Text = item.Attribute("Mobile").Value;
editForm.textBoxName.Text = item.Attribute("Name").Value;
editForm.textBoxPhone.Text = item.Attribute("Phone").Value;
editForm.lableRegDate.Text = christianToolStripMenuItem.Checked ? item.Attribute("RegDate").Value: ConvertToPersianDate(item.Attribute("RegDate").Value);
editForm.ItemID = id;
editForm.ShowDialog();
LoadPhoneBookItems();
}
catch (Exception ex)
{
StackFrame file_info = new StackFrame(true);
Messages.error(ref file_info, ex.Message, this);
}
}
void buttonDelete_Click(object sender, EventArgs e)
{
try
{
if (listView1.SelectedItems.Count < 1) return;
if (MessageBox.Show("Ви впевнені, що хочете видалити запис,його потім не відновиш?", "Попередження", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No) return;
string id = listView1.SelectedItems[0].Name.Replace("Item", "");
var item = (from q in Variables.xDocument.Descendants("Item")
where q.Attribute("UserID").Value == Variables.CurrentUserID && q.Attribute("ID").Value == id
select q).First();
item.Remove();
TripleDES.EncryptToFile(Variables.xDocument.ToString(SaveOptions.DisableFormatting), Variables.DBFile, TripleDES.ByteKey, TripleDES.IV);
//Variables.xDocument.Save("debug.xml");
LoadPhoneBookItems();
int contactsNumbers = Variables.xDocument.Descendants("Item").Where(q => q.Attribute("UserID").Value == Variables.CurrentUserID).Count();
this.Text = Variables.Caption + Variables.CurrentUserName + ": " + contactsNumbers.ToString() + " Contacts";
}
catch (Exception ex)
{
StackFrame file_info = new StackFrame(true);
Messages.error(ref file_info, ex.Message, this);
}
}
#endregion
#region Menu Strip Events
#region Settings
void rightToLeftToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
rightToLeftToolStripMenuItem.Checked = true;
leftToRightToolStripMenuItem.Checked = false;
textBoxSearch.RightToLeft = RightToLeft.Yes;
listView1.RightToLeft = RightToLeft.Yes;
var query = (from q in Variables.xDocument.Descendants("Setting")
where q.Attribute("UserID").Value == Variables.CurrentUserID
select q).First();
query.Attribute("RightToLeft").Value = "Yes";
TripleDES.EncryptToFile(Variables.xDocument.ToString(SaveOptions.DisableFormatting), Variables.DBFile, TripleDES.ByteKey, TripleDES.IV);
//Variables.xDocument.Save("debug.xml");
}
catch { }
}
void leftToRightToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
leftToRightToolStripMenuItem.Checked = true;
rightToLeftToolStripMenuItem.Checked = false;
textBoxSearch.RightToLeft = RightToLeft.No;
listView1.RightToLeft = RightToLeft.No;
var query = (from q in Variables.xDocument.Descendants("Setting")
where q.Attribute("UserID").Value == Variables.CurrentUserID
select q).First();
query.Attribute("RightToLeft").Value = "NO";
TripleDES.EncryptToFile(Variables.xDocument.ToString(SaveOptions.DisableFormatting), Variables.DBFile, TripleDES.ByteKey, TripleDES.IV);
}
catch { }
}
void toolStripMenuItemFontSize_Click(object sender, EventArgs e)
{
try
{
toolStripMenuItemFontSize8.Checked = toolStripMenuItemFontSize10.Checked = toolStripMenuItemFontSize12.Checked = toolStripMenuItemFontSize14.Checked = toolStripMenuItemFontSize16.Checked = toolStripMenuItemFontSize18.Checked = false;
ToolStripMenuItem menuItem = sender as ToolStripMenuItem;
menuItem.Checked = true;
this.FontSize = float.Parse(menuItem.Text.Trim());
if (this.Font.Size!= this.FontSize)
{
this.Font = new Font(this.Font.Name, this.FontSize, this.Font.Style, this.Font.Unit, this.Font.GdiCharSet, this.Font.GdiVerticalFont);
var query = (from q in Variables.xDocument.Descendants("Setting")
where q.Attribute("UserID").Value == Variables.CurrentUserID
select q).First();
query.Attribute("FontSize").Value = this.FontSize.ToString();
TripleDES.EncryptToFile(Variables.xDocument.ToString(SaveOptions.DisableFormatting), Variables.DBFile, TripleDES.ByteKey, TripleDES.IV);
//Variables.xDocument.Save("debug.xml");
}
}
catch { }
}
void christianToolStripMenuItem_Click(object sender, EventArgs e)
{
christianToolStripMenuItem.Checked = true;
persianToolStripMenuItem.Checked = false;
var query = (from q in Variables.xDocument.Descendants("Setting")
where q.Attribute("UserID").Value == Variables.CurrentUserID
select q).First();
query.Attribute("Dates").Value = "Christian";
TripleDES.EncryptToFile(Variables.xDocument.ToString(SaveOptions.DisableFormatting), Variables.DBFile, TripleDES.ByteKey, TripleDES.IV);
//Variables.xDocument.Save("debug.xml");
}
void persianToolStripMenuItem_Click(object sender, EventArgs e)
{
christianToolStripMenuItem.Checked = false;
persianToolStripMenuItem.Checked = true;
var query = (from q in Variables.xDocument.Descendants("Setting")
where q.Attribute("UserID").Value == Variables.CurrentUserID
select q).First();
query.Attribute("Dates").Value = "Persian";
TripleDES.EncryptToFile(Variables.xDocument.ToString(SaveOptions.DisableFormatting), Variables.DBFile, TripleDES.ByteKey, TripleDES.IV);
//Variables.xDocument.Save("debug.xml");
}
#endregion
void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
void newUserToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
UserForm newUserForm = new UserForm(true, false, false);
newUserForm.Font = new Font(this.Font.Name, this.FontSize, this.Font.Style, this.Font.Unit, this.Font.GdiCharSet, this.Font.GdiVerticalFont);
newUserForm.ShowDialog();
ApplySettings();
LoadPhoneBookItems();
if (Variables.CurrentUserName!= "" && Variables.CurrentUserID!= "")
{
int contactsNumbers = Variables.xDocument.Descendants("Item").Where(q => q.Attribute("UserID").Value == Variables.CurrentUserID).Count();
this.Text = Variables.Caption + Variables.CurrentUserName + ": " + contactsNumbers.ToString() + " Contacts";
DisableEnableControls(true);
}
else
DisableEnableControls(false);
}
catch (Exception ex)
{
DisableEnableControls(false);
StackFrame file_info = new StackFrame(true);
Messages.error(ref file_info, ex.Message, this);
}
}
void changeUserToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
UserForm userForm = new UserForm(false, true, false);
userForm.Font = new Font(this.Font.Name, this.FontSize, this.Font.Style, this.Font.Unit, this.Font.GdiCharSet, this.Font.GdiVerticalFont);
userForm.ShowDialog();
ApplySettings();
LoadPhoneBookItems();
if (Variables.CurrentUserName!= "" && Variables.CurrentUserID!= "")
{
int contactsNumbers = Variables.xDocument.Descendants("Item").Where(q => q.Attribute("UserID").Value == Variables.CurrentUserID).Count();
this.Text = Variables.Caption + Variables.CurrentUserName + ": " + contactsNumbers.ToString() + " Contacts";
DisableEnableControls(true);
}
else
DisableEnableControls(false);
}
catch (Exception ex)
{
DisableEnableControls(false);
StackFrame file_info = new StackFrame(true);
Messages.error(ref file_info, ex.Message, this);
}
}
void changeInfoToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
UserForm changeInfoForm = new UserForm(false, false, true);
changeInfoForm.Font = new Font(this.Font.Name, this.FontSize, this.Font.Style, this.Font.Unit, this.Font.GdiCharSet, this.Font.GdiVerticalFont);
var userElement = from q in Variables.xDocument.Descendants("User")
where q.Attribute("ID").Value == Variables.CurrentUserID
select q;
string username = userElement.First().Attribute("UserName").Value;
string email = userElement.First().Attribute("Email").Value;
changeInfoForm.textBoxUsername.Text = username;
changeInfoForm.textBoxEmail.Text = email;
changeInfoForm.ShowDialog();
if (Variables.CurrentUserName!= "" && Variables.CurrentUserID!= "")
{
int contactsNumbers = Variables.xDocument.Descendants("Item").Where(q => q.Attribute("UserID").Value == Variables.CurrentUserID).Count();
this.Text = Variables.Caption + Variables.CurrentUserName + ": " + contactsNumbers.ToString() + " Contacts";
DisableEnableControls(true);
}
else
DisableEnableControls(false);
}
catch (Exception ex)
{
DisableEnableControls(false);
StackFrame file_info = new StackFrame(true);
Messages.error(ref file_info, ex.Message, this);
}
}
void aboutProgrammerToolStripMenuItem_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("http://vkontakte.ru/id2688556");
}
#endregion
void LoadPhoneBookItems()
{
try
{
listView1.Items.Clear();
var items = from q in Variables.xDocument.Descendants("Item")
where q.Attribute("UserID").Value == Variables.CurrentUserID
select q;
if (items.Count() < 1)
return;
foreach (var item in items)
{
ListViewItem listViewItems;
if (christianToolStripMenuItem.Checked)
listViewItems = new ListViewItem(new string[]
{ item.Attribute("Name").Value,
item.Attribute("Phone").Value,
item.Attribute("Mobile").Value,
item.Attribute("Email").Value,
item.Attribute("Address").Value,
item.Attribute("RegDate").Value});
else
listViewItems = new ListViewItem(new string[]
{ item.Attribute("Name").Value,
item.Attribute("Phone").Value,
item.Attribute("Mobile").Value,
item.Attribute("Email").Value,
item.Attribute("Address").Value,
ConvertToPersianDate(item.Attribute("RegDate").Value)});
listViewItems.Name = "Item" + item.Attribute("ID").Value;
listView1.Items.Add(listViewItems);
}
}
catch (Exception ex)
{
DisableEnableControls(false);
StackFrame file_info = new StackFrame(true);
Messages.error(ref file_info, ex.Message, this);
}
}
void ApplySettings()
{
try
{
if (Variables.xDocument == null)
{
DisableEnableControls(false);
return;
}
var Settings = (from q in Variables.xDocument.Descendants("Setting")
where q.Attribute("UserID").Value == Variables.CurrentUserID
select q).First();
if (Settings.Attribute("RightToLeft").Value == "Yes")
rightToLeftToolStripMenuItem_Click(null, null);
else
leftToRightToolStripMenuItem_Click(null, null);
if (Settings.Attribute("Dates").Value == "Persian")
{
persianToolStripMenuItem.Checked = true;
christianToolStripMenuItem.Checked = false;
}
else
{
persianToolStripMenuItem.Checked = false;
christianToolStripMenuItem.Checked = true;
}
this.FontSize = float.Parse(Settings.Attribute("FontSize").Value);
this.Font = new Font(this.Font.Name, this.FontSize, this.Font.Style, this.Font.Unit, this.Font.GdiCharSet, this.Font.GdiVerticalFont);
if (this.FontSize == 8)
{
toolStripMenuItemFontSize8.Checked = true;
toolStripMenuItemFontSize10.Checked = false;
toolStripMenuItemFontSize12.Checked = false;
toolStripMenuItemFontSize14.Checked = false;
toolStripMenuItemFontSize16.Checked = false;
toolStripMenuItemFontSize18.Checked = false;
}
else if (this.FontSize == 10)
{
toolStripMenuItemFontSize8.Checked = false;
toolStripMenuItemFontSize10.Checked = true;
toolStripMenuItemFontSize12.Checked = false;
toolStripMenuItemFontSize14.Checked = false;
toolStripMenuItemFontSize16.Checked = false;
toolStripMenuItemFontSize18.Checked = false;
}
else if (this.FontSize == 12)
{
toolStripMenuItemFontSize8.Checked = false;
toolStripMenuItemFontSize10.Checked = false;
toolStripMenuItemFontSize12.Checked = true;
toolStripMenuItemFontSize14.Checked = false;
toolStripMenuItemFontSize16.Checked = false;
toolStripMenuItemFontSize18.Checked = false;
}
else if (this.FontSize == 14)
{
toolStripMenuItemFontSize8.Checked = false;
toolStripMenuItemFontSize10.Checked = false;
toolStripMenuItemFontSize12.Checked = false;
toolStripMenuItemFontSize14.Checked = true;
toolStripMenuItemFontSize16.Checked = false;
toolStripMenuItemFontSize18.Checked = false;
}
else if (this.FontSize == 16)
{
toolStripMenuItemFontSize8.Checked = false;
toolStripMenuItemFontSize10.Checked = false;
toolStripMenuItemFontSize12.Checked = false;
toolStripMenuItemFontSize14.Checked = false;
toolStripMenuItemFontSize16.Checked = true;
toolStripMenuItemFontSize18.Checked = false;
}
else if (this.FontSize == 18)
{
toolStripMenuItemFontSize8.Checked = false;
toolStripMenuItemFontSize10.Checked = false;
toolStripMenuItemFontSize12.Checked = false;
toolStripMenuItemFontSize14.Checked = false;
toolStripMenuItemFontSize16.Checked = false;
toolStripMenuItemFontSize18.Checked = true;
}
}
catch (Exception ex)
{
DisableEnableControls(false);
StackFrame file_info = new StackFrame(true);
Messages.error(ref file_info, ex.Message, this);
}
}
void MainForm_Shown(object sender, EventArgs e)
{
try
{
if (!File.Exists(Variables.DBFile))
{
newUserToolStripMenuItem_Click(null, null);
return;
}
Variables.xDocument = XDocument.Parse(TripleDES.DecryptFromFile(Variables.DBFile, TripleDES.ByteKey, TripleDES.IV));
var users = from q in Variables.xDocument.Descendants("User")
select q;
if (users.Count() < 1)//No user exist
{
newUserToolStripMenuItem_Click(null, null);
return;
}
else//More than one user exist
{
changeUserToolStripMenuItem_Click(null, null);
}
}
catch (Exception ex)
{
DisableEnableControls(false);
StackFrame file_info = new StackFrame(true);
Messages.error(ref file_info, ex.Message, this);
try
{
File.Delete(Variables.DBFile);
}
catch
{
MessageBox.Show("Будь-ласка, видаліть файл бази даних", "Критична помилка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
void DisableEnableControls(bool enable)
{
if (enable)
{
changeInfoToolStripMenuItem.Enabled = settingsToolStripMenuItem.Enabled = true;
textBoxSearch.Enabled = listView1.Enabled = true;
buttonNew.Enabled = true;
}
else
{
changeInfoToolStripMenuItem.Enabled = settingsToolStripMenuItem.Enabled = false;
textBoxSearch.Enabled = listView1.Enabled = false;
buttonNew.Enabled = false;
}
}
string ConvertToPersianDate(string stringDate)
{
try
{
DateTime dateTime = DateTime.Parse(stringDate);
PersianCalendar persianCalendar = new PersianCalendar();
var str = persianCalendar.GetYear(dateTime).ToString() + " / " +
persianCalendar.GetMonth(dateTime).ToString() + " / " +
persianCalendar.GetDayOfMonth(dateTime).ToString() + " " +
persianCalendar.GetHour(dateTime).ToString() + ":" +
persianCalendar.GetMinute(dateTime).ToString() + ":" +
persianCalendar.GetSecond(dateTime).ToString();
return str;
}
catch (Exception ex)
{
StackFrame file_info = new StackFrame(true);
Messages.error(ref file_info, ex.Message, this);
return "";
}
}
#region listview
void textBoxSearch_TextChanged(object sender, EventArgs e)
{
try
{
if (textBoxSearch.Text.Trim() == "")
{
LoadPhoneBookItems();
return;
}
listView1.Items.Clear();
var query = from q in Variables.xDocument.Descendants("Item")
where q.Attribute("UserID").Value == Variables.CurrentUserID &&
(q.Attribute("Name").Value.ToLower().Contains(textBoxSearch.Text.Trim().ToLower())
q.Attribute("Phone").Value.ToLower().Contains(textBoxSearch.Text.Trim().ToLower())
q.Attribute("Mobile").Value.ToLower().Contains(textBoxSearch.Text.Trim().ToLower())
q.Attribute("Email").Value.ToLower().Contains(textBoxSearch.Text.Trim().ToLower())
q.Attribute("Address").Value.ToLower().Contains(textBoxSearch.Text.Trim().ToLower()))
select q;
if (query.Count() < 1) return;
foreach (var item in query)
{
ListViewItem listViewItems = new ListViewItem(new string[]
{ item.Attribute("Name").Value,
item.Attribute("Phone").Value,
item.Attribute("Mobile").Value,
item.Attribute("Email").Value,
item.Attribute("Address").Value,
item.Attribute("RegDate").Value});
listViewItems.Name = "Item" + item.Attribute("ID").Value;
listView1.Items.Add(listViewItems);
}
}
catch (Exception ex)
{
StackFrame file_info = new StackFrame(true);
Messages.error(ref file_info, ex.Message, this);
}
}
void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
{
//var item = listView1.GetItemAt(e.X, e.Y);
buttonEdit_Click(null, null);
}
#endregion
}
}
Форма введення запису про абонентів:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using Phonebook.Classes;
using System.Xml.Linq;
using System.IO;
using System.Drawing.Imaging;
namespace Phonebook
{
public partial class ItemForm: Form
{
public string ItemID = "";
bool NewItem = false;
bool EditItem = false;
public ItemForm(bool newItem, bool editItem)
{
InitializeComponent();
this.tableLayoutPanel1.CellPaint += new TableLayoutCellPaintEventHandler(tableLayoutPanel1_CellPaint);
//////////////////////
this.NewItem = newItem;
this.EditItem = editItem;
if (NewItem)
this.Text = "Додати новий запис";
else if (EditItem)
this.Text = "Редагувати запис";
}
void tableLayoutPanel1_CellPaint(object sender, TableLayoutCellPaintEventArgs e)
{
try
{
if (e.Row % 2 == 0)
{
Graphics g = e.Graphics;
Rectangle r = e.CellBounds;
g.FillRectangle(new SolidBrush(Color.FromArgb(225, 225, 225)), r);
}
}
catch (Exception ex)
{
StackFrame file_info = new StackFrame(true);
Messages.error(ref file_info, ex.Message, this);
}
}
private void buttonSubmit_Click(object sender, EventArgs e)
{
try
{
errorProvider1.Clear();
#region add new item
if (NewItem)
{
if (textBoxName.Text.Trim() == "")
{
errorProvider1.SetError(textBoxName, "Будь-ласка, введіть ім'я");
return;
}
int maxID = 0;
try
{
maxID = (from q in Variables.xDocument.Descendants("Item")
where q.Attribute("UserID").Value == Variables.CurrentUserID
select (int)q.Attribute("ID")).Max();
}
catch { }
maxID++;
XElement newItem = new XElement("Item", new XAttribute("ID", maxID),
new XAttribute("UserID", Variables.CurrentUserID),
new XAttribute("Name", textBoxName.Text.Trim()),
new XAttribute("Mobile", textBoxMobile.Text.Trim()),
new XAttribute("Phone", textBoxPhone.Text.Trim()),
new XAttribute("Email", textBoxEMail.Text.Trim()),
new XAttribute("Address", textBoxAddress.Text.Trim()),
new XAttribute("RegDate", DateTime.Now.ToString()));
var ItemsElement = (from q in Variables.xDocument.Descendants("Items")
select q).First();
ItemsElement.Add(newItem);
}
#endregion
#region edit item
else if (EditItem)
{
if (textBoxName.Text.Trim() == "")
{
errorProvider1.SetError(textBoxName, "Будь-ласка, введіть ім'я");
return;
}
var theItem = (from q in Variables.xDocument.Descendants("Item")
where q.Attribute("ID").Value == this.ItemID
select q).First();
theItem.Attribute("Name").Value = textBoxName.Text.Trim();
theItem.Attribute("Mobile").Value = textBoxMobile.Text.Trim();
theItem.Attribute("Phone").Value = textBoxPhone.Text.Trim();
theItem.Attribute("Email").Value = textBoxEMail.Text.Trim();
theItem.Attribute("Address").Value = textBoxAddress.Text.Trim();
}
#endregion
TripleDES.EncryptToFile(Variables.xDocument.ToString(SaveOptions.DisableFormatting), Variables.DBFile, TripleDES.ByteKey, TripleDES.IV);
//Variables.xDocument.Save("debug.xml");
this.Close();
}
catch (Exception ex)
{
StackFrame file_info = new StackFrame(true);
Messages.error(ref file_info, ex.Message, this);
}
}
#region
Image ResizeImage(Image FullsizeImage, int NewWidth, int MaxHeight, bool OnlyResizeIfWider)
{
// Prevent using images internal thumbnail
FullsizeImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
FullsizeImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
if (OnlyResizeIfWider)
{
if (FullsizeImage.Width <= NewWidth)
{
NewWidth = FullsizeImage.Width;
}
}
int NewHeight = FullsizeImage.Height * NewWidth / FullsizeImage.Width;
if (NewHeight > MaxHeight)
{
// Resize with height instead
NewWidth = FullsizeImage.Width * MaxHeight / FullsizeImage.Height;
NewHeight = MaxHeight;
}
System.Drawing.Image NewImage = FullsizeImage.GetThumbnailImage(NewWidth, NewHeight, null, IntPtr.Zero);
// Clear handle to original file so that we can overwrite it if necessary
FullsizeImage.Dispose();
// Save resized picture
return NewImage;
}
string ImageToBase64String(Image image, ImageFormat format)
{
MemoryStream memory = new MemoryStream();
image.Save(memory, format);
string base64 = Convert.ToBase64String(memory.ToArray());
memory.Close();
return base64;
}
Image ImageFromBase64String(string base64)
{
MemoryStream memory = new MemoryStream(Convert.FromBase64String(base64));
Image result = Image.FromStream(memory);
memory.Close();
return result;
}
#endregion
}
}
Форма користувача:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Xml.Linq;
using Phonebook.Classes;
using System.Diagnostics;
using System.Net.Mail;
using System.Net;
namespace Phonebook
{
public partial class UserForm: Form
{
bool NewUser = false;
bool ChangeUser = false;
bool ChangeInfo = false;
public UserForm(bool newUser, bool changeUser, bool changeInfo)
{
InitializeComponent();
/////////////////////
this.NewUser = newUser;
this.ChangeInfo = changeInfo;
this.ChangeUser = changeUser;
if (NewUser)
{
this.Text = "Додати нового користувача";
labelPass1.Text = "Пароль:";
labelPass2.Text = "Підтвердити пароль:";
checkBoxForgetPass.Enabled = false;
}
else if (ChangeUser)
{
this.Text = "Обрати користувача";
labelPass1.Text = "Пароль:";
labelPass2.Text = "Новий пароль:";
labelPass2.Enabled = textBoxPassword2.Enabled = false;
labelEmail.Enabled = textBoxEmail.Enabled = false;
}
else if (ChangeInfo)
{
this.Text = "Змінити інформацію користувача";
labelPass1.Text = "Старий пароль:";
labelPass2.Text = "Новий пароль:";
}
}
private void buttonSubmit_Click(object sender, EventArgs e)
{
try
{
errorProvider1.Clear();
#region Forgets the password
if (checkBoxForgetPass.Enabled && checkBoxForgetPass.Checked)
{
if (textBoxUsername.Text.Trim() == "")
{
errorProvider1.SetError(this.textBoxUsername, "Будь-ласка, введіть ім'я користувача");
textBoxUsername.Focus();
return;
}
errorProvider1.Clear();
var user = Variables.xDocument.Descendants("User").Where(q => q.Attribute("UserName").Value.ToLower() == textBoxUsername.Text.Trim().ToLower());
if (user.Count() < 1)
{
errorProvider1.SetError(this.textBoxUsername, "Таке ім'я користувача відсутнє у базі даних!!!!");
return;
}
string password = user.First().Attribute("Password").Value;
try
{
NetworkCredential loginInfo = new NetworkCredential("username", "password");
MailMessage msg = new MailMessage();
msg.From = new MailAddress("CyberkillerPS@gmail.ru");
msg.To.Add(new MailAddress(user.First().Attribute("Email").Value));
msg.Subject = "Phonebook Password";
msg.Body = "Yours Password = " + password;
msg.IsBodyHtml = true;
SmtpClient client = new SmtpClient("smtp.gmail.ru");
client.EnableSsl = true;
client.UseDefaultCredentials = false;
client.Credentials = loginInfo;
client.Send(msg);
MessageBox.Show("Ваш пароль був відісланий вам на email", "Відправка пароля", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Помилка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
return;
}
#endregion
#region add new user
else if (this.NewUser)
{
if (textBoxUsername.Text.Trim() == "" && textBoxUsername.Enabled)
{
errorProvider1.SetError(this.textBoxUsername, "Будь-ласка, введіть ім'я користувача");
return;
}
else if (textBoxPassword1.Text.Trim() == "" && textBoxPassword1.Enabled)
{
errorProvider1.SetError(this.textBoxPassword1, "Будь-ласка, введіть пароль");
return;
}
else if (textBoxPassword2.Text.Trim() == "" && textBoxPassword2.Enabled)
{
errorProvider1.SetError(this.textBoxPassword2, "Будь-ласка, введіть підтвердження пароля");
return;
}
else if (textBoxPassword2.Text.Trim()!= textBoxPassword1.Text.Trim())
{
errorProvider1.SetError(this.textBoxPassword1, "Ваші паролі повинні співпадати");
errorProvider1.SetError(this.textBoxPassword2, "Ваші паролі повинні співпадати");
return;
}
else if (textBoxEmail.Text.Trim() == "" && textBoxEmail.Enabled)
{
errorProvider1.SetError(this.textBoxEmail, "Будь-ласка, введіть правельний Email");
return;
}
if (!File.Exists(Variables.DBFile))
{
Variables.xDocument = new XDocument(
new XComment("\n Don't edit manually \n"),
new XElement("PhoneBook",
new XElement("Users",
new XElement("User",
new XAttribute("ID", "01"),
new XAttribute("UserName", textBoxUsername.Text.Trim()),
new XAttribute("Password", textBoxPassword1.Text.Trim()),
new XAttribute("Email", textBoxEmail.Text.Trim()),
new XAttribute("RegDate", DateTime.Now.ToString()))),
new XElement("Settings",
new XElement("Setting",
new XAttribute("UserID", "01"),
new XAttribute("RightToLeft", "NO"),
new XAttribute("Dates", "Persian"),
new XAttribute("FontSize", "10"))),
new XElement("Items")));
Variables.CurrentUserID = "01";
}
else
{
Variables.xDocument = XDocument.Parse(TripleDES.DecryptFromFile(Variables.DBFile, TripleDES.ByteKey, TripleDES.IV));
var SameUserQuery = from q in Variables.xDocument.Descendants("User")
where q.Attribute("UserName").Value.ToLower() == textBoxUsername.Text.Trim().ToLower()
select q;
if (SameUserQuery.Count() >= 1)
{
errorProvider1.SetError(this.textBoxUsername, "Таке ім'я користувача вже існує, Будь-ласка, оберіть інше");
return;
}
int maxID = 0;
try
{
maxID = (from q in Variables.xDocument.Descendants("User")
select (int)q.Attribute("ID")).Max();
}
catch { }
maxID++;
Variables.CurrentUserID = maxID.ToString();
XElement xElement = new XElement("User",
new XAttribute("ID", maxID),
new XAttribute("UserName", textBoxUsername.Text.Trim()),
new XAttribute("Password", textBoxPassword1.Text.Trim()),
new XAttribute("Email", textBoxEmail.Text.Trim()),
new XAttribute("RegDate", DateTime.Now.ToString()));
var usersElement = (from q in Variables.xDocument.Descendants("Users")
select q).First();
usersElement.Add(xElement);
xElement = new XElement("Setting",
new XAttribute("UserID", maxID),
new XAttribute("RightToLeft", "NO"),
new XAttribute("Dates", "Persian"),
new XAttribute("FontSize", "10"));
var settingsElement = (from q in Variables.xDocument.Descendants("Settings")
select q).First();
settingsElement.Add(xElement);
}
Variables.CurrentUserName = textBoxUsername.Text.Trim();
TripleDES.EncryptToFile(Variables.xDocument.ToString(SaveOptions.DisableFormatting), Variables.DBFile, TripleDES.ByteKey, TripleDES.IV);
//Variables.xDocument.Save("debug.xml");
}
#endregion
#region change user
else if (this.ChangeUser)
{
if (Variables.xDocument == null)
{
MessageBox.Show("Ваше ім'я користувача та пароль невірні", "Помилка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (textBoxUsername.Text.Trim() == "")
{
errorProvider1.SetError(this.textBoxUsername, "Будь-ласка, введіть ім'я користувача");
return;
}
else if (textBoxPassword1.Text.Trim() == "" && textBoxPassword1.Enabled)
{
errorProvider1.SetError(this.textBoxPassword1, "Будь-ласка, введіть пароль");
return;
}
var query = from q in Variables.xDocument.Descendants("User")
where textBoxUsername.Text.Trim().ToLower() == q.Attribute("UserName").Value.ToLower()
&& textBoxPassword1.Text.Trim().ToLower() == q.Attribute("Password").Value.ToLower()
select q;
if (query.Count() == 1)
{
Variables.CurrentUserID = query.First().Attribute("ID").Value;
Variables.CurrentUserName = textBoxUsername.Text.Trim();
}
else
{
Variables.CurrentUserID = "";
Variables.CurrentUserName = "";
MessageBox.Show("Ваше ім'я користувача та пароль невірні", "Помилка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
#endregion
#region change info
else if (this.ChangeInfo)
{
bool changePassword = true;
if (textBoxUsername.Text.Trim() == "" && textBoxUsername.Enabled)
{
errorProvider1.SetError(this.textBoxUsername, "Ваше ім'я користувача та пароль невірні");
return;
}
else if (textBoxEmail.Text.Trim() == "" && textBoxEmail.Enabled)
{
errorProvider1.SetError(this.textBoxEmail, "Будь-ласка, введіть вірний Email");
return;
}
else if (textBoxPassword1.Text.Trim() == textBoxPassword2.Text.Trim() && textBoxPassword2.Text.Trim() == "")
{
changePassword = false;
}
else if (textBoxPassword1.Text.Trim() == "" && textBoxPassword1.Enabled)
{
errorProvider1.SetError(this.textBoxPassword1, "Будь-ласка, введіть старий пароль");
return;
}
else if (textBoxPassword2.Text.Trim() == "" && textBoxPassword2.Enabled)
{
errorProvider1.SetError(this.textBoxPassword2, "Будь-ласка, введіть новий пароль");
return;
}
errorProvider1.Clear();
var query = (from q in Variables.xDocument.Descendants("User")
where q.Attribute("ID").Value == Variables.CurrentUserID
select q).First();
string oldPassword = query.Attribute("Password").Value;
if (oldPassword.ToLower()!= textBoxPassword1.Text.Trim().ToLower() && changePassword)
{
errorProvider1.SetError(this.textBoxPassword1, "Старий пароль невірний");
return;
}
else if (oldPassword == textBoxPassword1.Text.Trim() && changePassword)
{
query.Attribute("UserName").Value = textBoxUsername.Text.Trim();
query.Attribute("Password").Value = textBoxPassword2.Text.Trim();
query.Attribute("Email").Value = textBoxEmail.Text.Trim();
}
else if (!changePassword)
{
query.Attribute("UserName").Value = textBoxUsername.Text.Trim();
query.Attribute("Email").Value = textBoxEmail.Text.Trim();
}
Variables.CurrentUserID = query.Attribute("ID").Value;
Variables.CurrentUserName = textBoxUsername.Text.Trim();
TripleDES.EncryptToFile(Variables.xDocument.ToString(SaveOptions.DisableFormatting), Variables.DBFile, TripleDES.ByteKey, TripleDES.IV);
//Variables.xDocument.Save("debug.xml");
}
#endregion
this.Close();
}
catch (Exception ex)
{
Variables.CurrentUserID = Variables.CurrentUserName = "";
StackFrame file_info = new StackFrame(true);
Messages.error(ref file_info, ex.Message, this);
}
}
}
}
Додаток 2: Головне вікно програми
Додаток 3: Форма користувача БД
Додаток 4: Форма створення нового запису в БД
Страницы: 1, 2
|