3. Постановка завдання

Написати базу даних (БД), що дозволяє накопичувати інформацію, а саме - телефонний довідник Програма повинна містити утримувати основні функції: додавання добавляти запису, видалення віддалення запису, редагування запису, пошук. Додатково розробити ступені захисту до БД.

 


4. Загальний опис програми

Програмний продукт написаний в середовищі об'єктно орієнтованого програмування Microsoft Visual C# 2008 Exspress Edition.

Сама програма містить 3 основні форми:

MainForm.cs – головна форма програми. Зосереджено основний інтерфейс.

ItemForm.cs – форма вводу інформації про абонента записної книжки.

UserForm.cs – форма створення користувача БД(телефонного довідника). Інтерфейс захисту БД.

Вихідний код програми розміщений в додатках.

Програмний продукт дає можливість запису та зберігання інформації про абонента, а саме його ім’я, номер мобільного та домашнього телефону, його електронну та фізичну адресу, а також дату рейестрації його в БД. Відповідно, ми можемо редагувати записи в телефонному довілнику, - видаляти та змінювати вміст, а також задавати пошук необхідного.

Також ми можемо заходити в БД під своїм логіном та паролем.


Висновок

В рамках даної курсової роботи було поставлено завдання розробити базу даних (БД),що дозволяє зберігати інформацію про абонентів(Ім’я, телефон, мобільний, адреса, email, дата рейестрації). База даних містить утримувати основні функції: додавання добавляти запису, видалення віддалення запису, редагування запису, пошук заданої інформації.

Було проведено ознайомлення з відповідною літературою по дисципліні «бази даних». Після цього була написана програма в середовищі об’єктно-орієнтованого програмування Microsoft Visual C# 2008 Express Edition.

Програмний продукт містить простий та інтуїтивно-зрозумілий інтерфейс. Після тестування програми можна зробити висновок, що вона коректно працює в середовищі Microsoft Windows XP SP3. Вона повністю відповідає вимогам, поставлених в даній курсовій роботі, належить до категорії Open Source, тобто має можливість бути змінена, вдосконалена за бажанням в подальшій розробці.


Додаток 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: Форма створення нового запису в БД


Информация о работе «База даних "Телефонний довідник"»
Раздел: Информатика, программирование
Количество знаков с пробелами: 66828
Количество таблиц: 0
Количество изображений: 15

Похожие работы

Скачать
56508
0
0

... в разі некомпетентного створення та ведення баз даних, інформація може бути використана не повністю, отримуватись користувачем невчасно та у незручній формі. РОЗДІЛ2. Використання баз даних та інформаційно-пошукових систем для раціонального ведення діловодства на прикладі Криворізької районної адміністрації 2.1. Особливості загальної організації діловодства в установі Криворізька районна ...

Скачать
40443
6
27

... одного замовника та одного виконавця. Замовлення може бути виконано або не виконано. Якщо замовлення не виконано протягом одного місяця, то вважається недійсним Створення бази даних "Послуги та клієнти зв’язку" В даній курсовій роботі, у середовищі БД СУБД MS Access створимо програмне забезпечення, за допомогою якого виконується ввід даних у таблиці БД СУБД Access. Замовлення послуг ...

Скачать
213951
5
4

... фінансових операцій та надання у встановленому порядку відповідної інформації до регіонального підрозділу боротьби з відмиванням доходів, одержаних злочинним шляхом; 5 КОНТРОЛЬ ЗА СПРАВЛЯННЯМ ПРЯМИХ ПОДАТКІВ. ПОДАТОК НА ПРИБУТОК   Справляння податку на прибуток підприємств в Україні регулюється наступними законодавчими актами : а) Основні : -  Закон України “Про систему оподаткування в ...

Скачать
39061
0
0

... ійні ресурси архівних веб-сайтів представлені двома-трьома мовами, переважно – мовою країни, що створила сайт, а також англійською або французькою. Цікавою характерною рисою електронних довідників, на відміну від інших форм публікацій в Інтернеті, є домінування національних мов. Між тим на багатьох сайтах є і англомовний варіант. Так, англомовну версію має фінський збірний каталог, каталоги Наці ...

0 комментариев


Наверх