learning

16
 !" #$%& '%(  )*$+ ,-$./  $012  $3  !1&  * )  456 )7$89: ;+<3  ,-$+ 4:$2=&  >5 #7- !?@  4A$B: C5 7- . '57- *$.2 =5* -7<: 4& D.E =F * GH@ : - visual studio )$F 4IJ2 * KL5 2003 !9& 4&  - K3$MNO  >2$& 7<3<:  >5 SQL )  4IJ2 =F * ) 2000,2005,2008 ) ( express, enterprise,… (  P$2$L: KQ9R -<S K: =5* -7<: G:$S 4:$2=&  - T$L: Login =&7$(  - 7- P$MNO  )=JL5  ,!F$U: Grid View  - 7- ,!S V$I12 W5-7 * P$MNO  XYZ T$L: Grid View  - ,!S V$I12  W5-7 [5=5\ T$L:  - P$MNO )<]1J^ Grid View  - !5!^ -7<(7  >5 _H`  * 4%.0&  \ -7- KA$a: 4H%^ $R=b 4:$2=& C5 G.8L3  \ )*$+ $F!( _+  ,!S 7Yc\ ,!%2<" 4& . * !S !F<" 48.8d _5$02 7- 4:$2=&  e7<+ .  _+  456 >5 fA$@ 7- $F7$(  )!%&  41+- \ '.JB3  )  456 )7$89:  KQ(  X!F .  456 4+ $: )7$89: C5 7- Interface, Logic, DataAccess '57- .  - 6 45 DataAccess Tg 4& 4(  K37<1+-  )=^  \ K3$MNO  >2$& $& T-=(  7=@=& h$H37 4i.j\ -7- 7 '.F!.: .  

Upload: arghavan63

Post on 17-Jul-2015

9 views

Category:

Documents


0 download

TRANSCRIPT

5/14/2018 Learning - slidepdf.com

http://slidepdf.com/reader/full/learning-55a9312003b54 1/16

 

 بنام خدا

  یپاده سازي  کنم   تا انتها .در یان مقاله قصد دارم کی برنامه ساده  توسط معماري یاله اي از ابتدا

:قبل از هر یچز به موارد یزر یناز دایرم

-visual studioياه هخسن زا د2003یکیعب هب 

 اطالعایت- ,)2000,2005,2008)(expressاز هر نسخه ايSQLکی موتور باکن

enterprise,…( 

 برنامه شامل موارد یزر یم شودفعیلاکمانات

  کاربرLoginاکمان-

 Grid Viewمشاهده کیسري اطالعات در-

 Grid Viewاکمان حذف اطالعات از ریدف انتخاب شده در-

 اکمان یوریاش ریدف انتخاب شده-

 Grid Viewجستجوي اطالعات-

 ثبت کی کرورد جیدد-

 دارد و بیهنه* .به خواننده وگاذار شده است کدهاسازي و  کتیملیان برنامه صرفا جنبه مثایل

 .سورس برنامه در نهیات ضیممه خواهد شد*

 معماري یاله اي  تقیسم و دسته بندي  کارها در قالب کی یاله است  .هدف  کیل

 سه یاله  .دایرمInterface, Logic, DataAccessدر یان معماري ما

  که به آنDataAccessیهال-  اطالعایت و اجراي دستورایت ویظفه ارتباط برقرار  کردن با باکن

 دارد  .یمدیهم را

5/14/2018 Learning - slidepdf.com

http://slidepdf.com/reader/full/learning-55a9312003b54 2/16

 

 داردLogicیاله- مثال در مثال اداره آموزش کی دانشجوي.ویظفه یاجاد قواینن و منطق برنامه را

در شریاط مختلفیان قوایننبیدیه است  که.واحد درس انتخاب  کند14مشرویط نیمتواند یبش از 

 به عنوان مغز متکفر یسستم عمل  کندLogicدر نیتجه یان ویظفه یاله.متفاوت است  .است  تا

طرایح فرم ها و.یان یاله مربوط به رابط  کاربري برنامه است.یم باشدInterfaceیاله آخر-

 .در یان یاله قرار یم  یگرد... گزارشات و 

 معماري یاله اي آشنییا دارد بهبا فرض یان  که خوانند  .ادامه مبحث یم  پردایزمه با

 با  توجه به اکمانایت  که در باال  گفته شد جداول یزر متصور است

 :جدول  کاربران

 نام  کاربر-

 رمز عبور-

 :کی جدول دلخواه گیدر مثال جدول  کاال

  کد  کاال-

 نام  کاال-

 سازنده-   کپماین

 یقمت-

 براي ساخت یدت   ایبس و جداول باال کبار یگبیرددستورات یزر را

Create database dataSample

go

use dataSample

go

Create table users

5/14/2018 Learning - slidepdf.com

http://slidepdf.com/reader/full/learning-55a9312003b54 3/16

 

(

code smallint primary key identy(1,1),

name nvarchar(50) not null,

pass nvarchar(50) not null

)

go

Insert into users(name,pass)values('admin','1')

go

Create table product

(

code int primary key identy(1,1),

name nvarchar(50) not null,

company nvarchar(50),

price float not null

)

insert into product(name,company,price)values('Cpu','AMD',60000)

insert into product(name,company,price)values('Cpu','Intel',70000)

insert into product(name,company,price)values('Graphic

9500','Geforce',80000)

insert into product(name,company,price)values('Ram

1GB','Kingmax',24000)

5/14/2018 Learning - slidepdf.com

http://slidepdf.com/reader/full/learning-55a9312003b54 4/16

 

insert into product(name,company,price)values('Hard

500GB','Maxtor',54000)  

 به هر نحوي یاجاد.ادامه  پروژه منوط به ساخت یدتایبس باال یم باشد* در نیتجه  کایفست یدتایبس را

 کی  کاربر به جدو کیند  .و در صورت  تمیال  تعدادي  کاال هم اضافه  کیندل  کاربرانو موقتا

 نشدن مقاله از ساخت*  . پریهز یم  کنم...وSPوviewبه خاطر  یچیپده نشدن و طوالین

 بصورت  کتابخانه هايبرنامه هاي چ  یپاده سازيدر  ند یاله اي معموال بجز یاله رابط  کاربر سیار یاله ها

dllدنوش یم يزاس هدایپ . 

 :بصورت یزر عمل کیمینمVSبراي ساخت چینن برنامه هییا در میحط

یاجادdataSampleبا نامايWindows applicationدر میحط ژیووال استویدو کی  پروژه

 .دهدکی فرم آماده به ما  تحیول یمVisual studioبعد از یاجاد معموال.کیمینم

 بهیاجاد شدهنام فرمSolution Explorerدر  پنجره  . تییغر دیهدfrmLoginرا

 بصورت یزر طرایح کیمینمLoginفرم :را

 

 .حاال کی فرم در یاله رابط یاجاد شد

 :ساخت سیار یاله ها

 وارد  کرده و بعد از زدن  کیلد ورود در صورت معتبر بودن رمز به قرار است  که  کاربر رمز عبور خود را

 : کیل به صورت یزر خواهد بود طوردر نیتجه روال  کار ب .صفحه اصیل منتقل شود

 یمشودفرستادهبه کی  تابعرمز-

5/14/2018 Learning - slidepdf.com

http://slidepdf.com/reader/full/learning-55a9312003b54 5/16

 

انتخاب یمشود  که داراي رمز عبور کاربران شخیصاز جدول که بر اساس آنکی  کوئري نوشته شده-

 .وارده است

 ب نمیاش دادهس صورت یگیمرد و در یغر یان صورت  یپغام منا،Loginدر صورت وجود شخص- .یمشود

 :از سنایروي باال  کارهاي یزر استنباط یمشود

 ) کوئرينوشتن(خواندن اطالعات از یدتایبس-

 ) کاربري وجود دارد یا یخر( تصیمم  یگري بر طبق اطالعات خوانده شده-

 و یا  یپغام خطا(وکانش نهییا-  )منتقل شدن به فرم اصیل

 انجام دهدحال با یان یدگداه یاله اي یاجاد کیمینم  که  ) )Logicتصیمم  یگري را

 انتخاب کیمینمadd new projectو پسسAdd گیزنهFileدر منوي  .را

 نامطبق  تصیور  پروژه را همانطور  که یمیبیند یان نوع از.اضافه یم  کینمSolutionبهLogicبا

 .به عنوان خرویج  تحیول یمدهندdll پروژه ها فیال 

5/14/2018 Learning - slidepdf.com

http://slidepdf.com/reader/full/learning-55a9312003b54 6/16

 

 

 به نامClass1 که هم کانون یاجاد شد نامLogicدر یالهSolution Explorerدر  پنجره را

Business.csدیهد رییغت .ار دوش یم رهاظ هیم  کاغم  یپان رییغت  زا دعبYesرد هیس  کالم  کان ات  دینک 

  کندClass1داخل محتیوات   .بود ینز  تییغر  یپدا

 یاله  پییان  تر از خود در ارتباط باشد بیاد ارتباط یالهحاال از آنجییا  که هر یاله فقط یمتواند با

Interfaceارهیال ابLogicمینر  کارقرب.دینه  کظحالم   : تصیور یزر را

5/14/2018 Learning - slidepdf.com

http://slidepdf.com/reader/full/learning-55a9312003b54 7/16

 

 

SolutionهايProjectاز یمان.Referenceبراي یاله رابط اضافه  کریدمReferenceکی

 یان  کار در واقع  گفیتم  که یاله رابط  تنها یم  تواند با یاله منطق ارتباط برقرار  کند.انتخاب شده حاال.با

  کینم  خواین  فرا  .از درون یاله رابط یمتواینم  توابع یاله منطق را

  پس  کالس ،میند  کاجیا یجنس رابتعا يارب دتم ت کیسا رارقBusinessار ریز دتم و هدرز  کاب  را

 :براي  کالس یم نیویسم

public static bool Login(string password)

{

}

در نظر یگیمیرم  تا ینازي بهStaticیاله ها متدهاي  کالسها ران  تعداد رجوعات بهبه خاطر یزاد بود

دربیدیه است  که در یان روش یناز به رعیات دقت یبشتري.ساخت کی یش  ئ از نوع آن  کالس نباشد

 .برنامه نیویس است

 دارد  پس بیاد اطالعات از باکن خوانده شده و در صورت وجودLoginمتد یناز به اطالعات از باکن

 چینن رمزي ورود صورت  یگرد DataAccessاز آنجییا  که خواندن اطالعات در یاله.شخص با

 یاجاد یم  کینم نام یاله را.است))Logicمراحل یاجاد همانند یاله قبیل.صورت یم  یگرد یاله را

DataAccessار نآ نورد سالم  کان وAccessدیمانب.هب وReferenceقطنم هیال ياه

DataAccessدینه  کفاضا   نمیاش دهد Solution Explorerتا یان لحظه.را  بیاد کشل یزر را

5/14/2018 Learning - slidepdf.com

http://slidepdf.com/reader/full/learning-55a9312003b54 8/16

 

 

 دارد  را اما از آنجییا  که مکمن است متدهاي درون آن.یان یاله  تنها ویظفه خواندن و نوشتن در باکن

 براي افزیاش    کند لذا  در یان یاله ینز افزیاش  یپدا یزاد شوند و  تعداد دستورات براي یاجاد اتصال به باکن

به  پروژهExecuteبا کی  کالس به نامDatabaseانعطاف  پیذري کی یاله گیدر  تحت عنوان 

.به یاله یدتایبس براي یاله دستریس به داده اضافه یم  کینمReferenceو کی.اضافه یم  کینم

5/14/2018 Learning - slidepdf.com

http://slidepdf.com/reader/full/learning-55a9312003b54 9/16

 

 

 .حاال برنامه داراي چهار یاله شد

 از یالهSQLکی دستورdatabaseیاله-  کیمندDataAccessرا   گرفته و اجرا

 بر طبق یناز یالهSQLکی دستورDataAccessیاله-  به یالهLogicرا یاجاد کیمند و براي اجرا

Databaseدنکیم لاسرا. 

 .یم  کند DataAccessتقاضاي اطالعات از یالهLogicیاله-

 بهInterfaceیاله-  .ارسال کیمند Logicتقاضاهاي خود را

 یمنیویسمInterfaceدر یالهورود کیلدمربوط بهClickدر متد   کد یزر را

private void btnLogin_Click(object sender, EventArgs e)

{

if (Logic.Business.Login(txtPassword.Text) == true)

{//goto main menu

}

}

 به ابتداي فرم اضافه  کینم ینازي به نوشتنLogicبیدیه است  که گار ف  ض  اي نام  در ابتدايLogicرا

 .دستورات نیم باشد

 یمشود و دو حالتLoginمتد درصورت درسیت دستورات.بر گیمرداندtrue,falseیاله منطق اجرا

 شده به صفحه اصیل منتقل یمشیوم  .داخل شرط اجرا

5/14/2018 Learning - slidepdf.com

http://slidepdf.com/reader/full/learning-55a9312003b54 10/16

 

 به یاله   را   که در یان یاله صورت یگیمرد یمتواند یان باشد  که  کاربر مثال مقدار خایل معموال  کنتریل

  گذاشتن کی شرط د.منطق ارسال کنند  یمتوان انجام دادبا  .ر ابتداي متد  ککیل یان برریس را

 .falseیابگررداندtrueحاال یاله منطق بیاد  تصیمم  یگري  کند  که

executeReadوexecuteNoneدر یان یاله دو متد به نام هاي.یمریومdatabaseبه یاله

 کیمند و  تعداد گرفته وراSQLمتد اول کی دستور.یاجاد کیمینمExecuteدر  کالس  فقط اجرا

 برگیمرداند   که  تحت  تایثر دستور قرار  گرفته اند را   گرفته و.کروردهییا بعد از اجرامتد دوم کی دستور را

 .بر گیمرداندDataTableکی 

 :استبه یان صورتExecuteمحتیوات  کالس

using System.Data;

using System.Data.SqlClient;

namespace Database

{

public class Execute

{

static string cnn = "Data Source=.;Initial

Catalog=dataSample;Integrated Security=True";

static SqlConnection conection = new SqlConnection(cnn);

static SqlCommand cmd = new SqlCommand("", conection);

static SqlDataAdapter da = new SqlDataAdapter(cmd);

public static int executeNone(string sql)

{

conection.Open();

cmd.CommandText = sql;

int a = cmd.ExecuteNonQuery();

conection.Close();

return a;

}

public static DataTable executeRead(string sql)

{

DataTable dt = new DataTable();

da.SelectCommand.CommandText = sql;

da.Fill(dt);

return dt;

}

}

 بصورت یزر یمنیویسمLoginمتدAccessو در  کالسDataAccessدر یاله  :را

using System.Data;

namespace DataAccess

{

public class Access

{

5/14/2018 Learning - slidepdf.com

http://slidepdf.com/reader/full/learning-55a9312003b54 11/16

 

  static string q = "";

public static DataTable Login(string password)

{

DataTable dt = new DataTable();

q = "select * from users where pass='" + password + "'";

dt = Database.Execute.executeRead(q);

return dt;}

}

}

 و دادن خرویج بهLoginمتد خرویج.ارسال کیمندDatabaseکی  کوئري یاجاد و براي اجرا

 .ارسال خواهد شدLogicحاصل ینز به عنوان کی جدول به یاله 

 :Business کالسLogic،محتیوات یاله

using System.Data;

namespace Logic

{

public class Business

{

public static bool Login(string password)

{

DataTable dt = new DataTable();

dt = DataAccess.Access.Login(password);

if (dt==null)

{

return false;

}

if (dt.Rows.Count > 0){

return true;

}

else

return false;

}

}

}

  که از یاله  بهDataAccessخرویج جدویل   پردازش کیمند و در نهیات کی مقدار را یهالیم یآد را

 .رابط بر گیمرداند

  کتیمل کیمینم Clickبه برنامه اضافه کیمینم و ریودادfrmMainکی فرم با نام.حاال یاله رابط را

  کتیمل کیمینمfrmLoginدر فرممربوط به  کیلد ورود :را

 private void btnLogin_Click(object sender, EventArgs e)

{

if (Logic.Business.Login(txtPassword.Text) == true)

{

frmMain f = new frmMain();

f.Show();

Hide();

}else

{

5/14/2018 Learning - slidepdf.com

http://slidepdf.com/reader/full/learning-55a9312003b54 12/16

 

  MessageBox.Show("زمر روبع هابتشا تسا");}

 یمنیویسمfrmMainمربوط بهFormClosedو در نهیات براي  کتیمل برنامه در ریودادprivate void frmMain_FormClosed(object sender, FormClosedEventArgs e)

{

Application.Exit();

}  .شیتمبه یان  تریتب کی سنایرو براي ورود  کاربر به برنامه با استفاده از معماري یاله اي نو

 سنایروي بعدي

 Grid Viewنمیاش اطالعات در-

Logicدقت داشته بایشد  که معموال براي انجام هر  کاري در نرم افزار یناز به نوشتن کی متد در یالهراGetProductsمتدDataAccessدر یالهGirdنمیاش اطالعات جدول  کاال دربراي.هست

 . گرداندبر یمDataTableخرویج کیدر کهنیویسمبه صورت یزر یمpublic static DataTable GetProducts()

{

DataTable dt = new DataTable();

q = "select * from product";

dt = Database.Execute.executeRead(q);

return dt;

}

 در قالب کی جدول از یاله   بریرزدیمdtخوانده و درdatabaseمتد باال اطالعات را و جدول را . گرداندیم

 پس در.بر  گرداندGridجدول براي نمیاش درمتدي نوشته  که کیLogicدر یاله تواینمحاال یم

 اضافه  :یم  کینمیاله منطق متد یزر راpublic static DataTable GetProducts()

{

DataTable dt = new DataTable();

dt = DataAccess.Access.GetProducts();

return dt;

}

 اضافه یمfrmMainو در نهیات داخل یاله رابط در فرم   کینمیان  کدها راDataTable dt = new DataTable();

protected void showProducts()

{

dt = Logic.Business.GetProducts();

DG.DataSource = dt;

}

private void btnShowProducts_Click(object sender, EventArgs e)

{

showProducts();

5/14/2018 Learning - slidepdf.com

http://slidepdf.com/reader/full/learning-55a9312003b54 13/16

 

 در کد باال شامل    کندGridکی متد  که اطالعات را  فراخواین .یم باشدبیرزد و کی  کیلد  که متد را

 :بصورت یزر بیاد طرایح شودfrmMainکشل 

 بهDataGridViewشامل کی  کیلد و کی  . تییغر داده امDG که نام آن را

بصورت سراسري  تعیرف  کردم یان است  کهDataTableیان فرم کیقسمت  کدعلت یان  که در

 براي جستجوي اطالعات از آن استفاده خوایهم  کرد  .بعدا

 .حاال نوبت جستجوي اطالعات هست.به اتمام ریسدGridسنایروي نمیاش اطالعات در

 یمتوان در هیمن یاله انجام داد  که در باال بصورتdt کایفست اطالعات داخل.جستجوي اطالعات را

 یفلتر  کینم و کی  کیلد براي جستجو روي فرمTextBoxبراي شروع کی.سراسري  تعیرف  کریدم را مشخص  کردDropDownهچمینن یمتوایند کی.اضافه  کیند  بتوان نوع جستجو را  .اضافه  کیند  تا

 :مانند یزر

5/14/2018 Learning - slidepdf.com

http://slidepdf.com/reader/full/learning-55a9312003b54 14/16

 

 

 هم در ریوداد  ککیل مربوط به  کیلد جستجو یم نیویسم : کد یزر راprivate void btnSearch_Click(object sender, EventArgs e)

{

if (dt==null)

{

return;

}

if (txtSearchKey.Text == "")

{

dt.DefaultView.RowFilter = "";

}

else

{

switch (drpSearch.Items[drpSearch.SelectedIndex].ToString())

{

case "name":dt.DefaultView.RowFilter = "name like '%" +

txtSearchKey.Text + "%'";

break;

case "company":

dt.DefaultView.RowFilter = "company like '%" +

txtSearchKey.Text + "%'";

break;

case "price":

dt.DefaultView.RowFilter = "price =" +

txtSearchKey.Text;

break;

}

}DG.DataSource = dt;

}

 .Grid Viewسادهجستجويکییان هم از

 سنایروي بعدي

 .اطالعایتافزودن  کاال به جدول باکن

ستریسکی متد در یاله منطق و کی متد در یاله دفرم دیرافت اطالعات وکیبراي یان بخش یناز به

 .به داده دایرم

5/14/2018 Learning - slidepdf.com

http://slidepdf.com/reader/full/learning-55a9312003b54 15/16

 

در یالهابتدا پس.قرار است اطالعات  کاال به عنوان آگرومان ورودي به یاله منطق ارسال شود

DataAccessمیسیون یم   :متد یزر راpublic static int AddProduct(string name, string company, float price)

{

q = "insert into product(name,company,price)values('" +name + "','" + company + "'," + price + ")";

int a = Database.Execute.executeNone(q);

return a;

}

 اضافه یم  کینم  :و در یاله منطق متد یزر راpublic static bool AddProduct(string name, string company, float price)

{

if (DataAccess.Access.AddProduct(name, company, price) > 0)

{

return true;

}

return false;

}

 طرایح یم  کینم کی  کیلد براي باز  کردن فرم ثبت  کاال و کی فرم با.حاال به یاله رابط رفته و فرم را

 :مورد یناز است ت اطالعات  کاالبراي دیراف طرایح یزر

 یم نیویس   : مدر ریوداد  ککیل مربوط به  کیلد ثبت  کد یزر راprivate void btnAdd_Click(object sender, EventArgs e)

{

if (txtName.Text=="")

{

MessageBox.Show("مان الاا کر دراو دینک");return;

}

if (txtCompany.Text == "")

{

MessageBox.Show("مان تکرش ار دراو دینک");

5/14/2018 Learning - slidepdf.com

http://slidepdf.com/reader/full/learning-55a9312003b54 16/16

 

  return;

}

float f;

if (float.TryParse(txtPrice.Text,out f)==false)

{

MessageBox.Show("تمیق ار تسرد دراو دینک");

return;}

if (

Logic.Business.AddProduct

(

txtName.Text,

txtCompany.Text,

float.Parse(txtPrice.Text)

)==true

)

{

Close();

}

else{

MessageBox.Show("اطخ رد تبث تاعالطا");}

 یم  کند  فراخواین  کی اعتبار سنیج از اطالعات  کرده و پسس متد ثبا  کاال در یاله منطق را  . کد باال ابتدا

 .ثبت هم به اتمام ریسد

شود و بعد در یاله دستریس به داده دستور حذف اده ت  کایفست کی  کد به یاله منطق فرس براي حذف

 شود و بعده خواننده  گذاشته یم. ن صورت انجام خواهد شدهیم یوریاش اطالعات هم به.کرورد اجرا.شود

 .از صبر و حوصله شما پساگسذارم

  تکشر محمد باقراین  با