رفتن به مطلب
  • 0

کمک در ساخت دیتابیس یک برنامه مجموعه رمان


majerajoo

سوال

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

دوستان الان هفته هاست میخوام یه مجموعه رمان درست کنم اما من یه راه سختی رو طی میکنم نمیدونم میشه اینو راحت ترش کرد یا نه

 

مجموعه رمان بنده دارای چند نویسنده و هر نویسنده چند رمان و هر رمان چند فصل هستش

اگه مجموعه هم چند تا رمان بودو رو هر رمان میزنی که متنشو نشون بده هیچ مشکلی نبود و به راحتی با دیتابیس درست میشد

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

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

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

لینک ارسال
به اشتراک گذاری در سایت های دیگر

12 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

خیلی ساده هستش میتونی از value کمک بگیری مثلا نویسنده ها id بده بهد در برنامه بزن اگه select اجرا شد ولیو رو از اسم نویسنده بگیره و کوری اجرا بشه

لینک ارسال
به اشتراک گذاری در سایت های دیگر

داداش راستش من خیلی مبتدی هستم زیاد از رو توضیحات متوجه نمیشم

شرمنده

لینک ارسال
به اشتراک گذاری در سایت های دیگر

خب سخته یکم واس مبتدی این کار اول بیا یک listview در لایوت بزار generate کن

 

بعد از این کد استفاده کن

dim cur as cursor

cur= sql1.exeqyery("select * from nevisande")

dim i as int

for i=0 to cur.rowcunt-1
cur.position=i
listview.addsingleline2(cur.getstring("name_nevisande"),cur.getstring("id"))
next


میاد نام نوینده رو میگیره و id نویسنده به جای event ها

لینک ارسال
به اشتراک گذاری در سایت های دیگر

خب سخته یکم واس مبتدی این کار اول بیا یک listview در لایوت بزار generate کن

 

بعد از این کد استفاده کن

dim cur as cursor

cur= sql1.exeqyery("select * from nevisande")

dim i as int

for i=0 to cur.rowcunt-1
cur.position=i
listview.addsingleline2(cur.getstring("name_nevisande"),cur.getstring("id"))
next


میاد نام نوینده رو میگیره و id نویسنده به جای event ها

دوست من شما که فقط دارید لود نویسینده هارو میگید!!

 

ببینید من این رو بلدم و منظورم چیز دیگه هست

حالا فرض کنیم بنده این نویسنده ها رو لود کردم که این نویسینده ها اسماشون در دیتابیسی به اسم nevisande.db هستش

حالا میخوام رو هر کدوم بزنم رمان های مخصوصش رو توی لیت ویو لود کنه و این رمان ها هر کدوم تو یه دیتابیس مخصوص خودشون هستن مثلا من 10 تا دیتابیس دارم تو هر کدوم رمان های هر نویسینده هست

مثلا دیتابیس های زیر:

sirk.db

ashbah.db

kerebsli.db

 

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

nevisande.db

توی این  دیتابیسم دو تا ستون دارم یکی آی دی و یکی نام

توی ستون نام اسم نویسینده ها هست

 

حالا مثلا من میخوام وقتی روی نویسنده اول کلیک کردم دیتابیس sirk.db توی لیست ویوی لود بشه و الی آخر....

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ببین شما اول یه صفحه برای شروع برنامه درست کن (اسم نویسنده ها)

 

بعد یه صفحه درست کن برای لیست رمان ها ( با توجه به اسم نویسنده)

 

در اخر هم یه صفحه درست کن برای لیست فصل ها ( با توجه به اسم رمان)

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


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

لینک ارسال
به اشتراک گذاری در سایت های دیگر

اگه یه کم میفهمیدم از توضیحات خوب بود حیف که خنگم

شما منظور من رو متوجه شدی اما من نه!!

لینک ارسال
به اشتراک گذاری در سایت های دیگر

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

لینک ارسال
به اشتراک گذاری در سایت های دیگر

به هرحال هرجوری که هست من نمیتونم از رو توضیحات چیزی رو متوجه بشم...

لینک ارسال
به اشتراک گذاری در سایت های دیگر

اگه یه کم میفهمیدم از توضیحات خوب بود حیف که خنگم

شما منظور من رو متوجه شدی اما من نه!!

الان یه کد واست اماده میکنم 

ولی موتوجه شدنش با خودت

لینک ارسال
به اشتراک گذاری در سایت های دیگر

به هرحال هرجوری که هست من نمیتونم از رو توضیحات چیزی رو متوجه بشم...

امید وارم کمکت کنه 

دانلود http://s1.picofile.com/file/8262852342/example.rar.html

لینک ارسال
به اشتراک گذاری در سایت های دیگر

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

بیا به پیشنهاد بنده به این صورت عمل کن 

یک دیتابیس اصلی به اسم master.db داشته باش با سه جدول
جدول اول 
ستونهایی به اسامی زیر 
نام رمان  (دارم براساس داشته های شما دستبندی میکنم که مطمعنا رمان دارید و مشخصاتش رو میدونید )
نام نویسنده 
سال انتشار 
موضوع 
سبک 
تعداد صفحه 
و هر اطلاعاتی که داره و بعدا میتونید بر اساس اون دسته بندی به کار بر ارایه بدید
فقط یک آید به هر رمان اختصاص میدید که در آخر بتونیم فراخانی کنیم
 

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

آیدی
نام رمان 
فصل یک 

فصل دو 

فصل سه 

تا مثلا 150 فصل

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

لینک ارسال
به اشتراک گذاری در سایت های دیگر

زیاد پیچیده نیست چند تا مرحله ساده است:

فاز اول (تهیه دیتابیس):

مرحله اول:

یه دیتابیس بساز به اسم مثلا book.db

مرحله دوم:

یه جدول به اسم nevisande بساز که باید دو تا ستون داشته باشه اولی nID و دومی name . اولی شماره ردیفه و دومی اسم نویسنده.

مرحله سوم:

یه جدول به اسم roman بساز که سه تا ستون داره با اسامی : rID (شماره ردیف این رمان در این جدول) و name (اسم رمان) و nID (شماره ردیف نویسنده رمان در جدول قبلی) .

مرحله چهارم:

آخرین جدولی که باید بسازی fasl هست که سه تا ستون داره با اسامی fID (شماره ردیف فصل در این جدول) و name (اسم فصل) و text (متن فصل) و rID (شماره ردیف رمان در جدول قبلی).

خب تا این جای کار جدول nevisande اسامی کل نویسنده ها است جدول roman اسامی کل رمان هاست و جدول fasl هم متن همه فصل هاست.

فاز دوم (کدنویسی):

چهار تا اکتیویتی نیازه اولی برای نویسنده ها دومی برای رمان ها و سومی برای فصل ها و آخری برای متن فصل.

اکتیویتی نویسنده ها:

Sub Process_Globals
	Dim sql1 As SQL
	Dim cur As Cursor
End Sub

Sub Globals
	Private listview1 As ListView
End Sub

Sub Activity_Create(FirstTime As Boolean)
	Activity.LoadLayout("layout1")
	File.Copy(File.DirAssets,"book.db",File.DirInternal,"book.db")
	If sql1.IsInitialized = False Then
		sql1.Initialize(File.DirInternal,"book.db",False)
	End If
	
	cur = sql1.ExecQuery("SELECT * FROM nevisande")
	Dim i As Int
	For i=0 To cur.RowCount-1
		cur.Position = i
		listview1.AddSingleLine(cur.GetString("name"))
	Next
End Sub

Sub ListView1_ItemClick (Position As Int, Value As Object)
	cur = sql1.ExecQuery("SELECT * FROM nevisande")
	cur.Position = Position
	roman.nevisande_num = cur.GetInt("nID")
	StartActivity("roman")
End Sub
اکتیویتی رمان ها:

Sub Process_Globals
	Dim nevisande_num As Int
End Sub

Sub Globals
	Private listview1 As ListView
End Sub

Sub Activity_Create(FirstTime As Boolean)
	Activity.LoadLayout("layout2")
	Main.cur = Main.sql1.ExecQuery("SELECT * FROM roman WHERE nID='"&nevisande_num&"'")
	Dim i As Int
	For i=0 To Main.cur.RowCount-1
		Main.cur.Position = i
		listview1.AddSingleLine(Main.cur.GetString("name"))
	Next
End Sub

Sub ListView1_ItemClick (Position As Int, Value As Object)
	Main.cur = Main.sql1.ExecQuery("SELECT * FROM roman WHERE name='"&Value&"' AND nID='"&nevisande_num&"'")
	Main.cur.Position = 0
	fasl.fasl_num = Main.cur.GetInt("rID")
	StartActivity("fasl")
End Sub
اکتیویتی فصل ها:

Sub Process_Globals
	Dim fasl_num As Int
End Sub

Sub Globals
	Private listview1 As ListView
End Sub

Sub Activity_Create(FirstTime As Boolean)
	Activity.LoadLayout("layout3")
	Main.cur = Main.sql1.ExecQuery("SELECT * FROM fasl WHERE rID='"&fasl_num&"'")
	Dim i As Int
	For i=0 To Main.cur.RowCount-1
		Main.cur.Position = i
		listview1.AddSingleLine(Main.cur.GetString("name"))
	Next
End Sub

Sub ListView1_ItemClick (Position As Int, Value As Object)
	Main.cur = Main.sql1.ExecQuery("SELECT * FROM fasl WHERE name='"&Value&"' AND rID='"&fasl_num&"'")
	Main.cur.Position = 0
	text.FinalTXT = Main.cur.GetString("text")
	StartActivity("text")
End Sub
اکتیویتی متن:

اینجا آخر خطه دیگه اول اینو تو پروسس گلوبال تعریف میکنیم:

Sub Process_Globals
	Dim FinalTXT As String
End Sub
بعد خیلی راحت تو create اکتیویتی مینویسیم:

	Label1.Text = FinalTXT
فاز سوم (توضیح کدها):

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

روال کار اینه ما تو create اکتیویتی میاییم اعضای لیست رو از دیتابیس خارج میکنیم حالا در اکتیویتی اول که هنوز اتفاقی نیفتاده و چیزی انتخاب نشده ما گفتیم که همه رو بیار اما در بقیه اکتیویتی ها از یک متغیر در اون اکتیویتی استفاده میکنیم و شرط می‌گذاریم که باید مبنای داده ها بر اساس این متغیر باشه . این متغیر در واقع برای پاس کاری اطلاعات بین اکتیویتی هاست مثلا ما از اکتیویتی نویسنده شماره ردیف رو پاس دادیم به اکتیویتی رمان ها بعد شرط کردیم که فقط رکورد هایی که نویسنده اونا این id رو داره نشون بده بقیه هم به همین صورت مثلا دوباره رمان رو پاس میدیم به فصل و الی آخر.... رویداد کلیک لیست هم که میاد بر اساس اطلاعاتی که تا حالا پاس کاری شده متغیر بعدی که باید به اکتیویتی بعدی بره مشخص میشه.

نکات آخر:

کار سختی نیست و فقط من زیاد توضیح دادم تا متوجه بشین و گرنه آسونه.

درضمن به نظرم برای این کار حتما از همین روش چند اکتیویتی و پاس کاری متغیر استفاده کنید بهتره چون اگه همه رو بخواهید در یه اکتیویتی قرار بدین کیفیت کتاب به شدت میاد پایین چرا؟ چون اینجا ما داریم "کتاب" مینویسیم که درجه زیبایی اون باید ترجیح داده بشه به مثلا خلاصه کردن کد ها برای استاندارد بودن برنامه. به این صورت در هر اکتیویتی میتونید دیزاین متفاوتی پیاده کنید و برنامه یکنواخت به نظر دیگر نمی رسد کاربر هم بیشتر راضیه. در هر صورت برنامه موفق برنامه ای هست که این نکات زیباشناسی در اون رعایت شده باشه.

موفق باشید.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

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

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...