PDA

View Full Version : مبتدی: طراحی شی گرای



ghazal_mohammady
شنبه 14 تیر 1393, 08:04 صبح
عرض سلام و ادب
میخوام یه دید شی گرایی به برنامه ی مدیریت کتابخانه داشته باشم، توضیحات ادامه نحوه ی استدلال منه، میشه راهنماییم کنید که درسته یا نه یا میشه یه چیزایی بهش اضافه کنید که بهتر شه؟
یه کلاس Book داریم که هر کتابی که بخواد به این کتابخانه وارد شه اونو new میکنه


private int _id;
private string _name;
private int _rentId;
public Book(int id,string name)
{
_id = id;
_name = name;
_rentId = 0;
}
public Book()
{
_id =0;
_name = "";
_rentId = 0;
}
public void GiveBook(int MemId)
{
_rentId = MemId;
}
public void ReciveBook()
{
_rentId = 0;
}


یه کلاس عضو داریم که هر عضوی باید اونو نیو کنه


abstract class Member
{
protected int Id;
protected string Name;
protected string Type;
protected int Status;
public abstract void Setinfo();
public abstract void SetId();

}
دیگه نمیدونم چی بذارم.
برای این کتابخونه بهتره از پایگاه داده ی خود ویژوال استفاده کرد یا اس کیو ال؟ اصلا فرق این دوتا چیه؟
سپاس از راهنمایی شما

Davidd
شنبه 14 تیر 1393, 11:38 صبح
جدا از نحوه طراحي كلاس ها، چطور اين كلاس ها به پايگاه داده نگاشت بشن؟ يعني يك شي از كلاس كتاب ساخته بشه چطوري توي پايگاه داده اضافه بشه؟
اين كلاسهايي كه شما نوشتي در واقع جدول هاي پايگاه داده هستند. اگر شما entity framework بلدي خب اين روش توجيه داره چون خودش از روي اين كلاس ها پايگاه داده ميسازه و در واقع يك نگاشت ايجاد ميكنه. اما اگه قرار نيس از entity framework استفاده كني اين طراحي جالب نيست. در اين حالت بهتره يك كلاس BookUtility و يك كلاس MemberUtility بسازي كه متدهاي كار با كتاب و اعضا داخلش باشن و همچنين يك كلاس DBUtility كه براي ارتباط با DB و اجراي كوئري هاي select و insert و ... .
پايگاه داده ويژوال استوديو هم اسكيول سرور هست فقط نسخه متفاوتي داره ( نسخه Express) .نسخه Express يك نسخه رايگانه كه امكاناتش محدوده مثلا محدوديت حجم DB داره (4 گيگ يا 10 گيگ). فعلا نيازهاي شما رو رفع ميكنه و نيازي به نسحه هاي پيشرفته تر نيس.

ghazal_mohammady
یک شنبه 15 تیر 1393, 09:46 صبح
خیلی ممنونم ، اما چطور می تونم بحث وراثت و پولیمورفیسم رو اعمال کنم تو این پروژه؟

Arcsinos
یک شنبه 15 تیر 1393, 11:15 صبح
خیلی ممنونم ، اما چطور می تونم بحث وراثت و پولیمورفیسم رو اعمال کنم تو این پروژه؟

قبل از هر چیز شما باید ببینید اصلا به همچین چیزهایی نیاز دارید یا خیر؟ برای بحث وراثت می تونید یه کلاس BaseBook بسازید و کلاس های Book و eBook رو از اون مشتق کنید برای پولیمورفیسم هم باید ببینید اصلا تابعی دارید که قابلیت پیاده شدن با چند ورودی یا چند روش مختلف رو داشته باشه یا نه. من تو لینک زیر برنامه ی یه کتابخونه ی تقریبا جامع رو نوشتم و سورسشم قرار دادم ولی یادم نمیاد که از وراثت و پولیمورفیسم استفاده کرده باشم. موفق باشید
http://persianit.net/%D8%B3%D9%88%D8%B1%D8%B3-%DA%A9%D8%AF-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%DA%A9%D8%AA%D8%A7%D8%A8%D8%AF%D8%A7%D8%B1%DB%8C-arcsin.html

ghazal_mohammady
سه شنبه 17 تیر 1393, 14:10 عصر
سپاس گزارم اما نمیتونم به برنامه شما وارد شم، ارتباط با دیتابیس برقرار نمیکنه:ناراحت:

Arcsinos
سه شنبه 17 تیر 1393, 15:27 عصر
سپاس گزارم اما نمیتونم به برنامه شما وارد شم، ارتباط با دیتابیس برقرار نمیکنه:ناراحت:

خب این ها دیگه یه جورایی مشکلات فنی هست، سورس رو مشاهده کنید، همه چیز به صورت ماژولار و کلاس بندی شده نوشته شده. از نصب و در حال اجرا بودن SQL Server Express اطمینان حاصل کنید. به هر حال بحث چیز دیگه ای بود و اون این بود که الزاما قرار نیست در همه ی برنامه های شی گرا وراثت و پولیمورفیسم استفاده بشه و اینها در صورت نیاز مورد استفاده قرار می گیرن.
موفق و پیروز در پناه حق

ghazal_mohammady
سه شنبه 17 تیر 1393, 15:40 عصر
سپاس گزارم جناب Arcsinos (http://barnamenevis.org/member.php?137710-Arcsinos)
چون پروژه ی من مبنی بر درس شی گرایی است، مجبورم این روند رو پی گیری کنم ..
بازهم سپاس از راهنمایی شما

ghazal_mohammady
پنج شنبه 19 تیر 1393, 11:40 صبح
عرض سلام و ادب
من تو کلاس book خودم این کد رو نوشتم

public void Add()
{

string SQL = "insert into BookTable(Name,PublishYear,Publisher,NumberOfPubli shing,";
SQL += "Author,TranslateOrCreate,RegisterDate,Category,Tra nslator) ";
SQL += " values(N'{0}',{1},N'{2}',{3},{4},{5},N'{6}',{7},{8 },{9},{10}) ";
SQL = string.Format(SQL, this.Name,
this.PublishYear,
this.PublishId,
this.NumberCover,
this.Author,
this.TranslateorCreat,
this.RegisterDate,
this.Category,
this.Translator
);

MyDataAcsses.Connect();
MyDataAcsses.DoCommand(SQL);
MyDataAcsses.Disconnect();

}
و تو دکمه ادم

private void button1_Click(object sender, EventArgs e)
{
if (txtName.Text == "" || txtAuthur.Text == "")
{
return;
}
else
{
BookUtil MyBook = new BookUtil();
MyBook.Name = txtName.Text;
MyBook.Author = txtAuthur.Text;
MyBook.TranslateorCreat = Convert.ToInt32(ckbTranslate.Checked);
MyBook.Translator = txtTranslator.Text;
try
{
MyBook.PublishYear = Int32.Parse(txtYear.Text);
if (txtYear.Text.Length != 4)
{
MessageBox.Show("شماره سال باید چهار رقمی باشد");

return;
}
MyBook.NumberCover = Int32.Parse(txtPublishNumber.Text);
MyBook.RegisterDate = int.Parse(txtYear.Text + txtMonth.Text + txtDay.Text);
MyBook.PublishId = 1;
MyBook.TranslateorCreat = Convert.ToInt32(ckbTranslate.Checked);
MyBook.Category = "ff";
}
catch (Exception ex)
{
MessageBox.Show("سال انتشار و شماره جلد و نوبت چاپ باید عدد باشد");
return;
}
MyBook.Add();
this.Hide();
this.Close();
}
}
اما این ارور رو میده

Index (zero based) must be greater than or equal to zero and less than the size of the argument list.
این ارور رو از متد Add کلاس بوک می گیره، چرا؟

abbas.oveissi
پنج شنبه 19 تیر 1393, 17:30 عصر
عرض سلام و ادب
من تو کلاس book خودم این کد رو نوشتم

public void Add()
{

string SQL = "insert into BookTable(Name,PublishYear,Publisher,NumberOfPubli shing,";
SQL += "Author,TranslateOrCreate,RegisterDate,Category,Tra nslator) ";
SQL += " values(N'{0}',{1},N'{2}',{3},{4},{5},N'{6}',{7},{8 },{9},{10}) ";
SQL = string.Format(SQL, this.Name,
this.PublishYear,
this.PublishId,
this.NumberCover,
this.Author,
this.TranslateorCreat,
this.RegisterDate,
this.Category,
this.Translator
);

MyDataAcsses.Connect();
MyDataAcsses.DoCommand(SQL);
MyDataAcsses.Disconnect();

}
و تو دکمه ادم

private void button1_Click(object sender, EventArgs e)
{
if (txtName.Text == "" || txtAuthur.Text == "")
{
return;
}
else
{
BookUtil MyBook = new BookUtil();
MyBook.Name = txtName.Text;
MyBook.Author = txtAuthur.Text;
MyBook.TranslateorCreat = Convert.ToInt32(ckbTranslate.Checked);
MyBook.Translator = txtTranslator.Text;
try
{
MyBook.PublishYear = Int32.Parse(txtYear.Text);
if (txtYear.Text.Length != 4)
{
MessageBox.Show("شماره سال باید چهار رقمی باشد");

return;
}
MyBook.NumberCover = Int32.Parse(txtPublishNumber.Text);
MyBook.RegisterDate = int.Parse(txtYear.Text + txtMonth.Text + txtDay.Text);
MyBook.PublishId = 1;
MyBook.TranslateorCreat = Convert.ToInt32(ckbTranslate.Checked);
MyBook.Category = "ff";
}
catch (Exception ex)
{
MessageBox.Show("سال انتشار و شماره جلد و نوبت چاپ باید عدد باشد");
return;
}
MyBook.Add();
this.Hide();
this.Close();
}
}
اما این ارور رو میده

Index (zero based) must be greater than or equal to zero and less than the size of the argument list.
این ارور رو از متد Add کلاس بوک می گیره، چرا؟

به خاطر اینکه توی String.Format اون همه جا برای مقدار دادن گذاشتی اما 9 متغیر یا مقدار بهش پاس دادی