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: Форма створення нового запису в БД
... в разі некомпетентного створення та ведення баз даних, інформація може бути використана не повністю, отримуватись користувачем невчасно та у незручній формі. РОЗДІЛ2. Використання баз даних та інформаційно-пошукових систем для раціонального ведення діловодства на прикладі Криворізької районної адміністрації 2.1. Особливості загальної організації діловодства в установі Криворізька районна ...
... одного замовника та одного виконавця. Замовлення може бути виконано або не виконано. Якщо замовлення не виконано протягом одного місяця, то вважається недійсним Створення бази даних "Послуги та клієнти зв’язку" В даній курсовій роботі, у середовищі БД СУБД MS Access створимо програмне забезпечення, за допомогою якого виконується ввід даних у таблиці БД СУБД Access. Замовлення послуг ...
... фінансових операцій та надання у встановленому порядку відповідної інформації до регіонального підрозділу боротьби з відмиванням доходів, одержаних злочинним шляхом; 5 КОНТРОЛЬ ЗА СПРАВЛЯННЯМ ПРЯМИХ ПОДАТКІВ. ПОДАТОК НА ПРИБУТОК Справляння податку на прибуток підприємств в Україні регулюється наступними законодавчими актами : а) Основні : - Закон України “Про систему оподаткування в ...
... ійні ресурси архівних веб-сайтів представлені двома-трьома мовами, переважно – мовою країни, що створила сайт, а також англійською або французькою. Цікавою характерною рисою електронних довідників, на відміну від інших форм публікацій в Інтернеті, є домінування національних мов. Між тим на багатьох сайтах є і англомовний варіант. Так, англомовну версію має фінський збірний каталог, каталоги Наці ...
0 комментариев