PDA

View Full Version : سوال: درخواست کمک برای انجام پروژه دانشجویی



Forough_M
دوشنبه 18 خرداد 1394, 15:41 عصر
با سلام

از انجا که مبتدی هستم و اطلاعات کمی دارم ،برای انجام پروژه نهایی دانشگاه احتیاج به کمک دارم.
برنامه ای که می خوام بنویسم با C# و SQL است.
جداولشو طراحی کردم و فرمها هم تا حدودی آماده است ولی خیلی به مشکل بر می خورم. و زمانم برای یه ادم مبتدی کمه
چطور می تونم کمک بگیرم؟

ebrahim.rayatparvar
دوشنبه 18 خرداد 1394, 15:54 عصر
سلام مهندس جان.
پروژه ای که داری مینویسی چیه؟ عموما برای پروژه دانشجویی زیاد از تکنلوژی خاصی استفاده نمی کنند.
موضوع برنامه رو بگو. مشکلاتی در هین کار بهش بر میخوری بگو.
اگه جایی خطایی رخ داد و برات سخت بود عکس بگیر یا تکه کدت با خطا رو بزار تا دوستان تو انجمن کمکت کنند تا زودتر پروژه خودت رو انجام بدی و بتونی بیشتر وارد دنیای برنامه نویسی بشی.

sg.programmer
دوشنبه 18 خرداد 1394, 16:02 عصر
عنوان پروژه ات را هم بگو
و بعد تحلیلت از جداول را هم ارائه بده ؟
عکس های از برنامه ات را قرار بده.

Forough_M
جمعه 22 خرداد 1394, 19:48 عصر
جداولی که در Sql ایجاد کردم و همینطور فرم صفحه اصلی و فرم اول برای ثبت اطلاعات را گذاشتم.
برای تبدیل تاریخ نمی دونم باید چی کار کنم هم اینکه فرمت ورودی قبل از ثبت چک بشه
کدهای برای کلید ثبت هم نوشتم و اطلاعات را وارد دیتا بیس می کنه ولی نمی دونم چطور اینجا قرار بدم که بهم نریزه
ممنون میشم راهنمایی بفرمایید


132183132184132185

ali_md110
جمعه 22 خرداد 1394, 20:23 عصر
برای تبدیل تاریخ فرمت بانگتون از نوع Date انتخاب کنید و اگر اشنایی با متدهای الحاقی دارید Extensions Metod از نوع string یا هر شی که میخواید عمل تبدیل روش انجام بشه بسازید و توابع تبدیل تاریخ رو اینجوری حلش کنید نیاز به عمل تبدیل به راحتی قابل حل هست یعنی هنگام ثبت متد ToMiladi و هنگام نمایش از ToShamsi استفاده کنید
شما باید مشخص کنید از ORM ها میخواید استفاده کنید یا دیتاست و دیتاریدر سنتی
این قسمت هم نامفهمومه بیشتر توضیح بدید
کدهای برای کلید ثبت هم و اطلاعات را وارد دیتا بیس می کنه ولی نمی دونم چطور اینجا وارد کنم که بهم نریزه

Forough_M
جمعه 22 خرداد 1394, 20:53 عصر
متوجه توضیحات شما نشدم، در نظر داشته باشید که من مبتدی هستم
اول از همه می خوام کنترل کنم فرمت ورودی تاریخ را در textbox و بعد هم شمسی رو به میلادی تبدیل کنم

ali_md110
شنبه 23 خرداد 1394, 00:55 صبح
متدهای Extension جهت اضافه کردن یک متد اضافی یا دلخواه به لیست متدهای اشیایی که جزو اشیاء کلیدی و رزرو شده دات نت یا کلاسهای ساخته شده شرکتهای دیگر هست می باشد
مثلا دات نت یک کلاس بنام Datetimeداره که در فضای نام System هست خب وقتی فیلدی تعریف میکنیم از نوع DateTime بدین صورت:


public DateTime date{get;set;}

و بخوایم تاریخ رو در یک تکست باکس نشون بدیم بدین صورت هست


textbox.text=date.ToShortDateString();

خب ما نیاز به یک تاریخ شمسی داریم اگر بعد از date نگاه کنیم فقط متدهای پیش فرض وجود دارند مثل ToShortDateString ولی ما نیاز به تاریخ شمسی داریم
یکی از راههای خوب و مناسب همین Extensions متدهاست

کافیه یک کلاس static تعریف کنیم بعد درون این کلاس یک متد از نوع string تعریف و این متد یک ورودی از نوع DateTime هم قبول میکند اسم کلاس دلخواه هست میزاریم شمسی و یک تابع بنام ToShamsi هم اضافه میکنیم ذکر کلمه this قبل از ارگومان الزامی هست چون باید مشخص کنبم که این متد بر روی کلاسهای از نوع DateTiem اجرا میشود


public static class ShamsiDate
{
public static string ToShamsi(this DateTime dt)
{

try
{
var dateSh = new System.Globalization.PersianCalendar();
return dateSh.GetYear(dt) + "/" + dateSh.GetMonth(dt).ToString("00") + "/" + dateSh.GetDayOfMonth(dt).ToString("00");

}
catch (NotImplementedException ex)
{
return ex.ToString();
}
}

}




تابع اضافی آماده شد به همین سادگی .
در مثال قبل میایم یک بار دیگه تاریخ درون یک تکست باکس نمایش بدیم



var dt= DateTime.Now;
textbox.text=dt.ToShamsi();

اینبار یک ToShamsi به لیست متدهای تاریخ اضافه شده که میاد تاریخ رو تبدیل به شمسی میکننه
میتونید یک تست بزنید و امتحان کنید
خب برای تبدبل تاریخ میلادی به شمسی هم بر عکس متد ToShamsi یک تا بع اضافه کنید بنام ToMiladi ولی آرگومان تابع از نوع string باشه و بدنه تابع از نوع DateTime چون تاریخ شمسی یک نوع رشته حساب میشه و باید به نوع DateTime تبدبل و به دیتابیس ارسال کنیم



public static DateTime ToMiladi(this string shamsiDate)
{
if (!string.IsNullOrEmpty(shamsiDate))
{
var pc = new PersianCalendar();
DateTime dt = Convert.ToDateTime(pc.ToDateTime(Convert.ToInt32(s hamsiDate.Substring(0, 4)),
Convert.ToInt32(shamsiDate.Substring(5, 2)),
Convert.ToInt32(shamsiDate.Substring(8, 2)), 0, 0, 0, 0, PersianCalendar.PersianEra)
);
return dt;
}
return DateTime.Now;
}




حالا قضیه برعکس شد وقتی یک تکست باکس داشته باشیم و تاریخ شمسی دورنش باشه برای تبدیل به شمسی کافیه بنویسیم




DateTime dt;
dt=textbox.text.ToMiladi;


این از متدهای الحاقی موفق باشید

pbm_soy
شنبه 23 خرداد 1394, 01:02 صبح
چرا به میلادی تبدیل کنید؟! شما که شمسی دریافت میکنید همون را هم در دیتابیس ثبت کنید اگر فیل را از نوع Date درست کرده باشید در نسخه های SqlServer زیر 2008 فکر میکنم تاریخ شمسی را درست ذخیره نخواهد کرد مگر اینکه در نسخه های پایینتر فیلد تاریخ را از نوع رشته ای با طول 10 کاراکتر بگیرید

برای بررسی صحت تاریخ هم میتوانید مقدار تکست باکس را کاراکتر به کاراکتر بررسی کنید یعنی بخش سال و ماه و روز را جدا کنید و بررسی کنید تقریبا یه چیزی تو این مایه ها :
این یک تابع است که رشته تکست باکس را بهش میدید و به شما true یا false خواهد داد (البته این تابع خیلی ساده و کلی است و خیلی نکات ریز را درنظر نگرفتم مانند سال کبیسه و دیگرجزئیات) فکر میکنم برای یک کار دانشجوئی کافی باشد!


public static bool ChkDate(string n) //این تابع تاریخ ورودی را ازلحاظ درستی چک میکند
{
//درصورت نادرست بودن فالس برمیگرداند
int m, d;
m = int.Parse(n.Substring(5, 2)); //جداکردن بخش ماه
d = int.Parse(n.Substring(8, 2)); //جداکردن بخش روز
if (!(m >= 1 && m <= 12))
{
MessageBox.Show("ماه را در تاریخ صحیح وارد کنید", "توجه", MessageBoxButtons.OK, MessageBoxIcon.Information);
return false;
}
if (!(d >= 1 && d <= 31))
{
MessageBox.Show("روز را در تاریخ صحیح وارد کنید", "توجه", MessageBoxButtons.OK, MessageBoxIcon.Information);
return false;
}
return true;
}



البته برای تاریخ راههای دیگری هم وجود دارد

reza_ali202000
شنبه 23 خرداد 1394, 01:04 صبح
دوست عزیز پیشنهاد بنده اینه که یه دفترچه تلفن که توی همین سایت هم زیاده پیدا کنید و کدهاون رو کپی برداری کند و اونجاهایی که نیاز هست رو تغییر بدین. چون شما الان دیتابیستون اماده هست حالا یا خوب یا بد فقط کد نویسی مونده اونم که سمپل زیاده.
موفق باشید.

pbm_soy
شنبه 23 خرداد 1394, 01:10 صبح
در ضمن برای دریافت تاریخ بصورت خیلی ساده میتوانید بجای تکست باکس از Masked TextBox استفاده کنید و خصوصیت MAsk آنرا برابر 9999/99/99 قرار بدید تا کاربر مجبور نباشد علامتهای / را خودش تایپ کند و همینطور بجای سال و ماه و روز هم از کاربر خودش عدد دریافت میکند و کاراکتر دیگری قبول نخواهد کرد اینطوری برنامه ات بهتر خواهد شد و خیلی از بررسیها را کمتر خواهد کرد
همینطور کنترل Masked textbox خصوصیت MaskFull را دارد که مقدار false به شما خواهد داد درصورتی که کاربر مقادیر آنرا بطور کامل تایپ نکرده باشد

pbm_soy
شنبه 23 خرداد 1394, 01:19 صبح
این هم یک تابع ساده برای اینکه در تکست باکس تاریخ مقدار تاریخ سیستم را نمایش دهی (البته با کمی تغییر میتوانی از آن برای تبدیل تاریخ میلادی به شمسی هم استفاده کنی ) و همینطور با همین روش برعکس کار را هم میتوانی انجام دهی
این تابع تاریخ را از سیستم میگیرد و آنرا به معادل شمسی تبدیل میکند و بصورت رشته تاریخ شمسی را برمیگرداند
توجه داشته باشید که در ابتدای فایل باید دستور ایمپورت (using) زیر را باید بنویسید
using System.Globalization;


public static string shamsiDate()
{
//============ تبدیل میلادی به شمسی
PersianCalendar pc = new PersianCalendar();
int y, m, d;
y = pc.GetYear(DateTime.Today);
m = pc.GetMonth(DateTime.Today);
d = pc.GetDayOfMonth(DateTime.Today);
string yy, mm, dd;
yy = y.ToString();
if (m < 10) mm = "0" + m.ToString(); else mm = m.ToString();
if (d < 10) dd = "0" + d.ToString(); else dd = d.ToString();
string fd = yy + "/" + mm + "/" + dd;
return fd;
}


راه ها و روشهای دیگری هم برای اینکار هست

ali_md110
شنبه 23 خرداد 1394, 01:41 صبح
بحث درباره فیلد تاریخ زیاد شده توی این سایت
استاندارد ذخیره کردن تاریخ میلادی هست به دلیل بحث محاسبات روی فیلد تاریخ یا چند زبانه بودن برنامه و سایر موارد و مشکلات تاریخ شمسی
این متدهای اضافی هنگام کار با ORM ها خیلی کارامد هستن دوستانی که شی گرا برنامه نویسی کردند شاید صحت گفته من رو تایید کنند
در ضمن اگر دوست ما دفترچه تلفن میخواست خودشون جستجو میزدن یا تقاضای یک دفترچه تلفن میکردن سوالی که پرسیده بودن درباره فیلد تاریخ بود که همگی دوستان راهنمایی کردند و البته ایشون کدهای درج و ویرایش رکورد رو نوشتند