# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > VB.NET >  برنامه دفترچه تلفن بهمراه نمودار ER و وتوضیحات جداول

## asghar2008

سلام

با اجازه از اساتید گرامی و دوستان محترم

اینو برای آزمایشگاه پایگاه داده آماده کرده بودم.گفتم اینجا بذار شاید به درد بعضی از دوستان بخوره.

تصاویری از برنامه:

5.jpg
2.jpg
4.jpg
aks.jpg
3.jpg

فردا نمودار ER به همراه توضیحات رو میذارم.

از دوستان گلم ممنون میشم در مورد ظاهر برنامه نظر بدن.میدونم برنامه ساده است(من خودم مبتدی ام). اما خوشحال میشم انتقاد و پیشنهاد کنید.(برای بهتر شدن کارهای آینده !)

----------


## asghar2008

سلام

اینم نمودار ER بهمراه فایل Word که ضمیمه شده.

تصویر:
er.jpg
اینم فایل وردش:

----------


## JaVa

سلام . خسته نباشید.

برنامه خوبی نوشتید. و اکثر فرماتون هم کاربر پسند هستند بغیر از فرم حذف و ویرایش - فرم مشاهده و جستجو. می تونستید در فرم حذف و ویرایش اون گرید رو بالای فرم قرار می دادید و همچنین خاصیت SelectionMode رو برابر FullRowSelect قرار می دادید که کاربر وقتی روی یکی از رکوردهای گرید کلیک می کنه کل سطر انتخاب بشه. و من اینجور تصور می کنم که به احتمال زیاد شما برای بدست آوردن کلید که می خواستید از طریق اون رکورد رو حذف کنید گفتید "حداقل یکبار بر روی رکورد کلیک کنید" بجاش می تونستید هیچی ننویسد و نیازی به گفتن این قضیه نبود خود کاربر واقعا نمی فهمید که باید روی رکورد کلیک کنه بعد دکمه حذف رو بزنه کافی بود برای شرط مثلا اینجور می نوشتید DGV.CurrentRow.Cells(0).Value که دیگه نیازی به کلیک کاربر نیاشه که شماره رکورد رو بدست بیارید.(البته اینی که گفتم فقط یه فرض هست) در ضمن فرم مشاهده و جستجو هم می تونست از لحاظ گرافیکی قشنگتر باشه.

بازم آفرین به شما که پروژه پایانی(آزپایگاه) رو برای دانلود گذاشتید توی سایت برنامه نویس. :تشویق:  :تشویق: 

اگه امکانش هست یه توضیحی هم در خصوص برقراری ارتباط با بانکتون هم بگید که از چه روشی استفاده کردید.((همراه پروژه ویژوال استودیو))

بازم تشکر :لبخند:

----------


## asghar2008

> اگه امکانش هست یه توضیحی هم در خصوص برقراری ارتباط با بانکتون هم بگید که از چه روشی استفاده کردید.((همراه پروژه ویژوال استودیو))
> 
> بازم تشکر


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

برنامه با VS2008 و پایگاه داده آن توسط SQL Express2005  که همراه خود VS2008 نصب میشه پیاده سازی شده.

برای اتصال به بانک از رشته اتصال زیر استفاده شده:
con.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector  y|\Database\dbphone.mdf;Integrated Security=True;User Instance=True"

و هم چنین برای ذخیره داده ها از ADO.NET استفاده شده که دوست گرامی اوبالیت به بو در اینجا توضیحات کامل رو داده اند

----------


## asghar2008

فرم اصلی برنامه:

Untitled.jpg

وبقیه فرم ها:
back.jpg

t.jpg

m.jpg

fax.jpg

----------


## M.KH-SH

نرم افزار جالبی هستش ولی دوست عزیز بهتر نبود خاصیت allow add rows رو false میکردی و خاصیت delete row.

برای یک شروع خیلی خوب هستش یاد 4 سال پیش خودم افتادم خسته نباشی ایشاالله روز به روز پیشرفت خواهی کرد.

دوست گلم میدونم بلد هستی ولی برای عکس گرفتن از فرم ها از دکمه alt+ print screen استفاده کن که فقط خود فرم بیوفته که نیاز به ویرایش نداشته باشه و شکل فرم هم دست نخورده باشه.

در کل کاره خوبی هست و در آنده بهتره قابلیت های مثل ارسال ایمیل ، اس ام اس رو هم اضافه کن و عکس کاربر و تغییر پوسته و ... که به عنوان یک نرم افزار کاربردی بشه حساب کرد.

----------


## asghar2008

> نرم افزار جالبی هستش ولی دوست عزیز بهتر نبود خاصیت allow add rows رو false میکردی و خاصیت delete row.
> 
> برای یک شروع خیلی خوب هستش یاد 4 سال پیش خودم افتادم خسته نباشی ایشاالله روز به روز پیشرفت خواهی کرد.
> 
> دوست گلم میدونم بلد هستی ولی برای عکس گرفتن از فرم ها از دکمه alt+ print screen استفاده کن که فقط خود فرم بیوفته که نیاز به ویرایش نداشته باشه و شکل فرم هم دست نخورده باشه.
> 
> در کل کاره خوبی هست و در آنده بهتره قابلیت های مثل ارسال ایمیل ، اس ام اس رو هم اضافه کن و عکس کاربر و تغییر پوسته و ... که به عنوان یک نرم افزار کاربردی بشه حساب کرد.


سلام
ممنون از راهنماییتون.
تنظیماتی که گفتین رو اعمال میکنم. 

به نکته ی خیلی جالبی(alt+printscreen) اشاره کردین.بازم ممنون .

خیلی خوشحال میشم که اساتیدی مثل شما اشکالات و نواقص برنامه  رو گوشزد میکنند. :لبخند: 
با تشکر

----------


## ghayour

سلام
به نظر من فرم مشاهده و جستجو کمی گیج کننده باشه به خاطر تعداد زیاد دیتاگریدویو. همچنین اگه دیتاگریدویو اصلی بزرگتر باشد خیلی بهتر است چون کاربر به تعداد افراد بیشتری اشراف دارد.
به نظر من بهتره دیتاگریدویو اضافه رو برداری و در صورتی که کاربر دوبار روی اسم فرد کلیک کرد مشخصات کامل با عکس فرد بر روی فرمی زیبا ظاهر شود.
ضمنا چرا اسکرول بار پایین همین فرم از چپ به راست هست؟!! بهتره اصلاحش کنی.
همچنین کنترلهای Close , Maximize , Minimize بهتره در سمت راست فرم باشه چون کاربر به این طرف عادت کرده.

و در آخر هم در مورد تصویر برداری از فرم هم میتونی در ویندوز 7 و 8 از Sniping Tool استفاده کنی که خیلی جالب هست و چهار حالت خاص برای تصویر برداری از صفحه داره.

موفق باشید

----------


## amirmms

نرم افزار خوبیه ولی چون منم خودم دارم یکیشو میزنم سعی کن یه چندتا چیز بذاری توش :
1- تاریخ تولد مخاطب را دریافت کنه و روز تولد به کاربر اعلام کنه که تولد مخاطب هست /.
2- سعی کنه کارت ویزیت بزنه ، یعنی نام مخاطب رو داره شمارشم داره و .... ، راحت میتونه کارت ویزیت رو بزنه/.

در آخر خوب هست /. به امید موفقیت روز افزون شما :لبخند گشاده!:

----------


## asghar2008

> سلام
> به نظر من فرم مشاهده و جستجو کمی گیج کننده باشه به خاطر تعداد زیاد دیتاگریدویو. همچنین اگه دیتاگریدویو اصلی بزرگتر باشد خیلی بهتر است چون کاربر به تعداد افراد بیشتری اشراف دارد.
> به نظر من بهتره دیتاگریدویو اضافه رو برداری و در صورتی که کاربر دوبار روی اسم فرد کلیک کرد مشخصات کامل با عکس فرد بر روی فرمی زیبا ظاهر شود.
> ضمنا چرا اسکرول بار پایین همین فرم از چپ به راست هست؟!! بهتره اصلاحش کنی.
> همچنین کنترلهای Close , Maximize , Minimize بهتره در سمت راست فرم باشه چون کاربر به این طرف عادت کرده.
> 
> و در آخر هم در مورد تصویر برداری از فرم هم میتونی در ویندوز 7 و 8 از Sniping Tool استفاده کنی که خیلی جالب هست و چهار حالت خاص برای تصویر برداری از صفحه داره.
> 
> موفق باشید


سلام

ممنون دوست عزیز

شما درست میفرمایید فرم مشاهده وجستجو گیج کننده است. نمیدونستم چطور طراحیش کنم. بهمین خاطر گفتم موقعی که کاربر بر روی نام شخص کلیک کرد تمامی مشخصات(موبایل - فکس - آدرس و...) در بقیه گریدها فیلتر بشه.

اول خواستم با Join جداول رو با هم ادغام کنم.اما با این ممکن بود رکورد های اضافه نشون داده بشه. به عنوان مثال:
یک شخص می تونه چندتا شماره همراه داشته باشه ،در این موقع نمایش اطلاعات بصورت زیر نمایش داده میشه :

نام--------------------------------نام خانوادگی------------------------موبایل

علی-------------------------------مولایی-----------------------------09125555
علی-------------------------------مولایی-----------------------------09128888
علی-------------------------------مولایی-----------------------------09123333
علی-------------------------------مولایی-----------------------------09126666

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

به نظر شما و دوستان از دیتا گرید های متعدد استفاده کنم یا همشون Join کرده ودر یک گرید بریزم؟


در مورد   Close , Maximize , Minimize  نظر شما درسته . دلیل چپ چین کردن این بود که گفتم فرم ها RTL باشه . اینهارم تغییر میدم.

بازم مرسی از انتقادات وپیشنهادات سازنده تون.

----------


## asghar2008

> نرم افزار خوبیه ولی چون منم خودم دارم یکیشو میزنم سعی کن یه چندتا چیز بذاری توش :
> 1- تاریخ تولد مخاطب را دریافت کنه و روز تولد به کاربر اعلام کنه که تولد مخاطب هست /.
> 2- سعی کنه کارت ویزیت بزنه ، یعنی نام مخاطب رو داره شمارشم داره و .... ، راحت میتونه کارت ویزیت رو بزنه/.
> 
> در آخر خوب هست /. به امید موفقیت روز افزون شما


سلام
ممنون دوست عزیز

در مورد 1 : پیشنهاد قشنگیه. ان شاء الله پیاده سازی میشه.
در مورد2: دقیقا نمیدونم چطوری  باید پیاده سازی شه.ممنون میشم روش پیاده سازی رو مختصر توضیح بدین. 

مرسی

----------


## M.KH-SH

> در مورد2: دقیقا نمیدونم چطوری  باید پیاده سازی شه.ممنون میشم روش پیاده سازی رو مختصر توضیح بدین.


قبل از گفتن این بهتره که تمام کنترل ها را در یک group box قرار بدین و group box رو هم dock کنین اینجوری کار خیلی تمیز تر میشه و قابلیت re size فرم رو هم تا حدی میدی البته بهتر هستش که از table layout panel استفاده کنی و کنترل ها رو این سوار کنی (یکم کارت سخت میشه)

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

ببین دوست من برای این شما نیاز به استفاده از توابع drawing استفاده کنی و از graphic ها شما باید یک عکس رو انتخاب کنی به عنوان زمینه کار و بر روی اون شماره ها و توضیحات خاصی رو بنویسی که برنامه باید به صورت auto این کار رو انجام بده.

روش دوم اینه یک فرم none بسازی و عکسی رو به صورت back ground قرار بدی و بر روی اون از label با back ground = transparent استفاده کن و اطلاعات روش قرار بده
بعد هم مثل همیشه یک پرینت قرار بده و تمام.

----------


## asghar2008

> ببین دوست من برای این شما نیاز به استفاده از توابع drawing استفاده کنی و از graphic ها شما باید یک عکس رو انتخاب کنی به عنوان زمینه کار و بر روی اون شماره ها و توضیحات خاصی رو بنویسی که برنامه باید به صورت auto این کار رو انجام بده.


متاسفانه با توابع Drawing کار نکردم.



> روش دوم اینه یک فرم none بسازی و عکسی رو به صورت back ground قرار بدی و بر روی اون از label با back ground = transparent استفاده کن و اطلاعات روش قرار بده
> بعد هم مثل همیشه یک پرینت قرار بده و تمام.


با روش دوم که فرمودید میشه پیاده سازی کرد. فقط باید کل فرم رو به Printer بفرستیم. درسته؟

----------


## M.KH-SH

بله کل فرم رو به پرینت بفرستین البته قبل از ارسال باید فرم حتما none بشه و هرچی button و امثال اینا هست رو به صورت hide در بیارین که در print نمایش داده نشه.

----------


## MOR_MS

با سلام
من متوجه نشدم شما براي هر كدام از  شماره تلفن يا موبايل و ديگر مشخصات  يك جدول ايجاد كردين ؟

اگه  انيطوري ميشه تمام شماره تلفن ها و ادرس هار اكتر.نكي فرد را در يك جدول  اورد و در نمايش روي فرم يك گريد مشخصات فردي و در گريد دوم تمام شماره  تلفنها و ادرسهاي الكترونكي را نمايش داد  و اينطوري فرم زيبا تر ميشه و  ميتوني اطلاعت ديگه را هم نمايش بدين تصوير  ضميمه مربوط به برنامه سپرده است كه يك فرم جهت نمايش اطلاعات درست كردم
066.JPG

----------


## asghar2008

> با سلام
> من متوجه نشدم شما براي هر كدام از  شماره تلفن يا موبايل و ديگر مشخصات  يك جدول ايجاد كردين ؟
> 
> 066.JPG


توضیحات کامل رو دوست عزیزمون mrg_vb دادند




> فقط من اینجا توی یه چیز گیر کردم الان کلید خارجی اینا چیه ؟


در نمودار ER پست شماره 2# نکته اصلی رو مشخص کردم.

من یه فیلدی با نام IDS در جدول مشخصات در نظر گرفتم که با اضافه کردن شخص جدید بعلاوه 1 میشه. 

نکته : اگر یک شخص هر کدام از موجودیت های (تلفن ثابت ، موبایل ، ایمیل ،وب سایت و فکس ) را داشته باشد آن موقع ID شخص(IDS) در کنار آنها ظاهر می شود.

----------


## JaVa

> توضیحات کامل رو دوست عزیزمون mrg_vb دادند


ببخشید که پاکشون کردم. الان دوباره می نویسمشون


کار ایشون کاملا درسته. 

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

و هر فردی هم می تونه چندین شماره تلفن - چندین پست الکترونیکی - چندین شماره فکس و... داشته باشه.

ایشون هم اومده به این موضوعات به عنوان یک مجودیت جدید نگاه کرده که بازم این ایرادی نداره.

در ضمن ممنون از پاسخگویی به سئوال بنده

موفق باشید.

----------


## MOR_MS

0067.JPGبا سلام
من براي شماره تلفن هاي مشتري ها جدولها را به اين صورن تنظيم كردم 
با توجه به توضيحاتي كه داديد در مورد نرمال سازي در اين روش من به مشكلي بر نخواهم خورد ؟ لطفا راهنماي كنيد

----------


## M.KH-SH

چرا مشکل میخورد به شدت:دی

دوست من مگر اینکه در هنگام ویرایش کد ملی شما بیای 3 تا کوئری update بنویسی ;)
بهتر نبود به جای اینا و این کد ملی از id کاربر برای بقیه استفاده میکردی تا دیگه هیچ وقت مشکل نخوری؟
انوقت تنها برای delete کاربر باید چند عدد کوئری کوچک برای پاک کردن بنویسی نه اینکه برای update هم بنویسی.

----------


## asghar2008

> 0067.JPG



به نظر دوستان بهتر نبود در جدول آدرس بجای فیلد های (استان-شهر-آدرس) یه فیلد با نام آدرس قرار داده میشد؟

اگه میخوای آدرس رو وارد کنی به نظرم  بهتره فیلد های استان وشهر رو حذف کنید ویه فیلد آدرس قرار بدین.

----------


## asghar2008

اینم از ارتباط جداول .

tblphoedata.jpg

 اگه ایراد و مشکلی داره ، دوستان وعزیزان محبت کنند وبگند تا تغییرات رو اعمال کنیم.

باتشکر

----------


## MOR_MS

سلام
خوب هر برنامه اي يك سري مشخصات خاص خودشو داره برنامه من به اين اطلاعات نياز داره اين قسمت اطلاعاتشو از ساير قسمتها ميگيره كه برام فيلتر كردن استانها و شهر ها جهت آمار گيري مهمه

----------


## MOR_MS

> بهتر نبود به جای اینا و این کد ملی از id کاربر برای بقیه استفاده میکردی تا دیگه هیچ وقت مشکل نخوری؟


سلام
كد ملي من همان ids دوستمون توي جدولهاش است بقيه جدولها هم id خودشونو دارند و اينكه كد ملي قابل ويرايش نخواهد بود 
درضمن من توي جدولها از رابطه ها استفاده نمي كنم ترجيح ميدم از كد نويسي استفاده كنم

----------


## amirmms

> سلام
> ممنون دوست عزیز
> 
> در مورد 1 : پیشنهاد قشنگیه. ان شاء الله پیاده سازی میشه.
> در مورد2: دقیقا نمیدونم چطوری  باید پیاده سازی شه.ممنون میشم روش پیاده سازی رو مختصر توضیح بدین. 
> 
> مرسی


خوبه
در مورد 2 :
شما یه فیلد دیگه به دیتا بیستون اضافه کنید که عکس مخاطب رو بگیره و سپس ، یک کارت ویزیت برای طرف بزنه 
کارت ویزیت میتونه شامل موارد ذیل باشه :
1- نام و نام خانوادگی مخاطب
2- تخصص یا شغل شخص
3- عکس مخاطب
4- تلفن همراه + تلفن ثابت مخاطب
5- ایمیل مخاطب
6- سایت مخاطب
همین /.
می تونی با تمام موتور های ریپورت درست کنی .
موفق باشی

----------


## asghar2008

> كد ملي من همان ids دوستمون توي جدولهاش است بقيه جدولها هم id خودشونو دارند و اينكه كد ملي قابل ويرايش نخواهد بود


سلام

بهتر از یه id جداگونه استفاده کنید . اگه کاربر کد ملی رو  اشتباه وارد کنه اون موقع واست مشکل ساز میشه.




> درضمن من توي جدولها از رابطه ها استفاده نمي كنم ترجيح ميدم از كد نويسي استفاده كنم



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

----------


## MOR_MS

> بهتر از یه id جداگونه استفاده کنید . اگه کاربر کد ملی رو  اشتباه وارد کنه اون موقع واست مشکل ساز میشه.


باسلام
منظور از اشتباه چيه ؟ يعني كد ملي كسي ديگه رو ؟ در غير اينصورت اول بررسي ميكنم كه درست باشد يا نه

----------


## asghar2008

بله ، منظورم کد ملی شخص دیگه است.

----------

