PDA

View Full Version : نرم افزار كتابخانه



حامد_رشنو
پنج شنبه 25 تیر 1388, 10:02 صبح
سلام بچه ها
من دارم رو يه برنامه كتابخونه كار ميكنم و يه جاش گير كردم اگه ميشه كمكم كنيد.
من ميخام امكان ثبت موضوع و زير شاخه هاشو به عهده كاربر بزارم مثلا بتونه موضوع كامپيوترو اضافه كنه بعد شاخه برنامه نويسي بهش اضافه كنه بعد به برنامه نويسي مثلا وي بي رو اضافه كنه و ...

hozouri
پنج شنبه 25 تیر 1388, 10:56 صبح
مساله شاخه ها مسئله سنگینی هست اما شما باید شاخه ها رو جوری در بانک ذخیره کنید که اندیس شاخه پدر خود را به همراه داشته باشید و شاخه های اصلی هم اندیسی ندارند.
حالا نمی دونم چقدر تونستم چقدر به شما کمک کنم.
البته ذخیره کردن خیلی راحت تر از لود کردن شاخه ها هستش...

sd.CSharpProgrammer
پنج شنبه 25 تیر 1388, 11:00 صبح
با سلام

دوست عزيز ميتوني يه جدول تو ديتابيست براي گروه ها تعريف كني (مثل اين) :


Id
GName
SubGroups


فيلد Id شماره يكتاي گروه رو مشخص ميكنه و در فيلد GName نام گروه قرار ميگيره. فيلد SubGroups هم زير شاخه هاي گروه رو نگهداري ميكنه. ميتوني زير شاخه ها رو با فرمت خواصي تو اين فيلد ذخيره كني. مثلاً ميتوني با استفاده از كاراكتر ; اونا رو از هم جدا كني.
مثال :

computer;vb.net;c#.net;java;c++;assembly


با اين فرمت تمام زير شاخه هاي گروهت رو در فيلد SubGroups ذخيره كن. بعداً ميتوني اين اين فيلد رو واكشي كني و تمامي زير شاخه ها رو با استفاده از متد Split از هم جدا كرده و استفاده كني.
اگه توضيح بيشتر خواستي بگو برات بذارم

موفق باشي

hozouri
پنج شنبه 25 تیر 1388, 11:06 صبح
فيلد Id شماره يكتاي گروه رو مشخص ميكنه و در فيلد GName نام گروه قرار ميگيره. فيلد SubGroups هم زير شاخه هاي گروه رو نگهداري ميكنه

اگر خود هر زیر شاخه , چند زیر شاخه داشته باشه با این روش که نمی تونی درخت n سطحی رو بازیابی کنی.

Armin060
پنج شنبه 25 تیر 1388, 17:00 عصر
موضوع اصلي كامپيوتر
زير شاخه موضوع اصلي، برنامه نويسي و گرافيك
زير شاخه برنامه نويسي، وي بی و سي شارپ
زير شاخه گرافيك فوتوشاپ
زير شاخه سی شارپ، بانك داده

به صورت زير در بانك ذخيره كنيد

نام موضوع - شناسه - شناسه پدر

كامپيوتر - 0 -
برنامه نويسی - 1 - 0
گرافيك - 2 - 0
وي بي - 3 - 1
سی شارپ - 4 - 1
فوتوشاپ - 5 - 2
بانك داده - 6 - 4

احتمالا خودتون فهميديد كه چطوري بخونيدش.

f_pakzad
شنبه 10 مرداد 1388, 16:57 عصر
با سلام

دوست عزيز ميتوني يه جدول تو ديتابيست براي گروه ها تعريف كني (مثل اين) :


Id
GName
SubGroups


فيلد Id شماره يكتاي گروه رو مشخص ميكنه و در فيلد GName نام گروه قرار ميگيره. فيلد SubGroups هم زير شاخه هاي گروه رو نگهداري ميكنه. ميتوني زير شاخه ها رو با فرمت خواصي تو اين فيلد ذخيره كني. مثلاً ميتوني با استفاده از كاراكتر ; اونا رو از هم جدا كني.
مثال :

computer;vb.net;c#.net;java;c++;assembly


با اين فرمت تمام زير شاخه هاي گروهت رو در فيلد SubGroups ذخيره كن. بعداً ميتوني اين اين فيلد رو واكشي كني و تمامي زير شاخه ها رو با استفاده از متد Split از هم جدا كرده و استفاده كني.
اگه توضيح بيشتر خواستي بگو برات بذارم

موفق باشي


میشه بفرمایید در این حالت برای ویرایشش باید چه کار کنیم؟یعنی چه طور باید به آی دی دسترسی داشته باشیم.
من همه مثال های treeview رو در برنامه نویس و codeproject در این مورد مطالعه کردم.اما هنوز نتونستم یه تری ویو با سطوح نا محدود درست کنم که بتونه اضافه و ویرایش و بارگذاری اطلاعات رو از طریق یک جدول اطلاعاتی انجام بده.
ممنون میشم اگه یه مثال کوچولو بنویسید.

hozouri
شنبه 10 مرداد 1388, 17:02 عصر
دوست عزیز من پیش تر هم ذکر کرده بودم اگر شما ساختمان داده ها رو بخونید درخت ها به طور مفصل از نوشتن تا خواندن و بازیابی دستگیرتون میشه.

f_pakzad
شنبه 10 مرداد 1388, 17:33 عصر
دوست عزیز من پیش تر هم ذکر کرده بودم اگر شما ساختمان داده ها رو بخونید درخت ها به طور مفصل از نوشتن تا خواندن و بازیابی دستگیرتون میشه.

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

sd.CSharpProgrammer
شنبه 10 مرداد 1388, 17:40 عصر
میشه بفرمایید در این حالت برای ویرایشش باید چه کار کنیم؟یعنی چه طور باید به آی دی دسترسی داشته باشیم.
من همه مثال های treeview رو در برنامه نویس و codeproject در این مورد مطالعه کردم.اما هنوز نتونستم یه تری ویو با سطوح نا محدود درست کنم که بتونه اضافه و ویرایش و بارگذاری اطلاعات رو از طریق یک جدول اطلاعاتی انجام بده.
ممنون میشم اگه یه مثال کوچولو بنویسید.

دوست عزيز توضيحاتي كه بنده دادم واضح هستن. ولي با اينحال يك مثال ميزنم :

فرض كنيم گروهي به نام حسابداري داريم كه شامل زير گروه (يا شاخه)هاي زير هست :
- حسابداري صنعتي
- حسابداري بازرگاني
.
.
.

البته من در مورد انواع شاخه هاي حسابداري آگاهي زيادي ندارم ولي اونايي رو كه ميدونستم اينجا نام بردم.
حالا شما با روشي كه من گفتم مياي به جدول Groups يك ركورد در انتهاش وارد ميكني به صورت زير :

Id = پيشنهاد ميكنم اين فيلد رو از نوع AutoNumber تعريف كني
GName = حسابداري
SubGroups = صنعتي;بازرگاني


بعداً ميتوني از تو برنامه ات با استفاده از نام گروه به شاخه هاي اون (كه در اينجا فيلد SubGroups هست) دسترسي داشته باشي و اونا رو تو برنامه استفاده كني.
تا اينجا ما گروه ها رو تو ديتابيس ثبت كرديم. حالا اگه بخواي هنگام ثبت يك كتاب جديد گروهش رو مشخص كني ميتوني تو جدول كتاب ها يك فيلد به اسم Group داشته باشي و تو اون نام گروه و شاخه كتاب رو به صورت زير ذخيره كني :

حسابداري;بازرگاني


يعني در قالب كلي اول نام گروه و بعد نام شاخه رو مينويسي (بينشون يك سمي كولن ميذاري). و بعداً ميتوني اونا رو واكشي و استفاده كني.
البته روشهاي زيادي براي انجام اينكار هست كه هر كدوم داراي مزايا و معايب خودشه! شما سعي كن بهترين روش رو انتخاب كني. يكي از روشها همين بود كه گفتم

موفق باشي

hozouri
شنبه 10 مرداد 1388, 17:41 عصر
خب دوست عزیز باید یه حلقه درست کنی به طوری که حلقه اول سطح اول , حلقه دوم سطح دوم و ...
رو بارگزاری کنه و برای این کار از توابع بازگشتی استفاده کن.

sd.CSharpProgrammer
شنبه 10 مرداد 1388, 17:49 عصر
اگر خود هر زیر شاخه , چند زیر شاخه داشته باشه با این روش که نمی تونی درخت n سطحی رو بازیابی کنی.

دوست عزيز با كمي تغيير در روشي كه گفتم ميشه درخت n سطحي رو در ديتابيس درست كرد :

ميتونيم يك جدول براي شاخه ها درست كنيم كه شامل نام موضوع اصلي و نام شاخه و نام زيرشاخه ها باشه. هر شاخه اي توي اين جدول ثبت ميشه و اگه زير شاخه اي داشته باشه هر كدوم از زير شاخه ها به همراه اطلاعات خودشون (نام موضوع اصلي و نام شاخه ها و نام زير شاخه ها) در اين جدول ثبت بشه. اينطوري ميتونيم تا هر چند سطح كه لازم بود اطلاعات مربوط به گروه و شاخه ها رو در ديتابيس ذخيره كنيم (همون n سطحي كه شما عرض كرديد).
البته اين يك مثال كلي بود و شايد بعضي جاهاش كم و زياد باشه و تغييراتي توش انجام بشه ولي به طور كلي فكر كنم اينكار مشكل درختهاي n سطحي رو بتونه حل كنه.
اگه تو اين روش هم ايرادي پيدا كردين حتماً بگين تا دوباره به فكر راه حل باشم :لبخند:

با تشكر
همگي موفق باشين

hozouri
شنبه 10 مرداد 1388, 18:01 عصر
دوست عزيز با كمي تغيير در روشي كه گفتم ميشه درخت n سطحي رو در ديتابيس درست كرد :

ميتونيم يك جدول براي شاخه ها درست كنيم كه شامل نام موضوع اصلي و نام شاخه و نام زيرشاخه ها باشه. هر شاخه اي توي اين جدول ثبت ميشه و اگه زير شاخه اي داشته باشه هر كدوم از زير شاخه ها به همراه اطلاعات خودشون (نام موضوع اصلي و نام شاخه ها و نام زير شاخه ها) در اين جدول ثبت بشه. اينطوري ميتونيم تا هر چند سطح كه لازم بود اطلاعات مربوط به گروه و شاخه ها رو در ديتابيس ذخيره كنيم (همون n سطحي كه شما عرض كرديد).
البته اين يك مثال كلي بود و شايد بعضي جاهاش كم و زياد باشه و تغييراتي توش انجام بشه ولي به طور كلي فكر كنم اينكار مشكل درختهاي n سطحي رو بتونه حل كنه.
اگه تو اين روش هم ايرادي پيدا كردين حتماً بگين تا دوباره به فكر راه حل باشم :لبخند:

با تشكر
همگي موفق باشين

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

اما درخت های n سطحی با توابع بازگشتی قابل اجرا هستند.

من خودم قبلاً این کار رو برای سازمان ها و دبیرخانه ها برای سلسله مراتب پرسنل یا همان چارت سازمانی انجام دادم و از روی معلومات و تجربه و سابقه این رو عرض می نمایم.

f_pakzad
شنبه 10 مرداد 1388, 22:33 عصر
دوست عزيز توضيحاتي كه بنده دادم واضح هستن. ولي با اينحال يك مثال ميزنم :

فرض كنيم گروهي به نام حسابداري داريم كه شامل زير گروه (يا شاخه)هاي زير هست :
- حسابداري صنعتي
- حسابداري بازرگاني
.
.
.

البته من در مورد انواع شاخه هاي حسابداري آگاهي زيادي ندارم ولي اونايي رو كه ميدونستم اينجا نام بردم.
حالا شما با روشي كه من گفتم مياي به جدول Groups يك ركورد در انتهاش وارد ميكني به صورت زير :

Id = پيشنهاد ميكنم اين فيلد رو از نوع AutoNumber تعريف كني
GName = حسابداري
SubGroups = صنعتي;بازرگاني


بعداً ميتوني از تو برنامه ات با استفاده از نام گروه به شاخه هاي اون (كه در اينجا فيلد SubGroups هست) دسترسي داشته باشي و اونا رو تو برنامه استفاده كني.
تا اينجا ما گروه ها رو تو ديتابيس ثبت كرديم. حالا اگه بخواي هنگام ثبت يك كتاب جديد گروهش رو مشخص كني ميتوني تو جدول كتاب ها يك فيلد به اسم Group داشته باشي و تو اون نام گروه و شاخه كتاب رو به صورت زير ذخيره كني :

حسابداري;بازرگاني


يعني در قالب كلي اول نام گروه و بعد نام شاخه رو مينويسي (بينشون يك سمي كولن ميذاري). و بعداً ميتوني اونا رو واكشي و استفاده كني.
البته روشهاي زيادي براي انجام اينكار هست كه هر كدوم داراي مزايا و معايب خودشه! شما سعي كن بهترين روش رو انتخاب كني. يكي از روشها همين بود كه گفتم

موفق باشي


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

hozouri
یک شنبه 11 مرداد 1388, 07:42 صبح
من از این الگوریتم برای خواندن استفاده می کنم خیلی ساده است از حلقه و توابع بازگشتی استفاده کردم



private void LoadTreeView(string code, TreeNode treeNode)
{
//گرفتن کدهای زیر مجموعه (سطح پایین همان گره(

//خواندن اطلاعات در یک حلقه
{
TreeNode treeNodeSub = new TreeNode(dataRow["Name"].ToString());
treeNodeSub.Tag = //کد گره را در تگ بریز ;
LoadTreeView((کد گره, treeNodeSub);
treeNode.Nodes.Add(treeNodeSub);
}
}

sd.CSharpProgrammer
یک شنبه 11 مرداد 1388, 11:26 صبح
از توضیحاتتون ممنونم.اما من با این الگوریتم مشکلی ندارم.موضوع اینه که نمی دونم موقع ویرایش چه طور به id این نودها دسترسی پیدا کنم و البته مشکلات دیگری هم هست که موقع نوشتن کد به راحتی این الگوریتمی که می فرمایید نیست.اگه با یه مثال توضیح می دادید بهتر بود.
متشکرم

دوست عزيز در اسرع وقت سعي ميكنم يك پروژه نمونه براي شما درست كنم و در همين تاپيك بگذارم. شما اين تاپيك رو پيگيري كنيد تا وقتي پروژه رو گذاشتم دانلود كنيد

seven7777777
دوشنبه 12 مرداد 1388, 01:27 صبح
من تعجب مي كنم ، اين كه اينقدر دردسر نداره .

براحتي ميشه اين كارو كرد . برات يه مثال ميزنم . فرض كن مي خوايم ايران ، استانها ، شهرها و روستاها و توابع رو نگهداري كنيم . براي اينكار يه جدول با سه فيلد لازمه . id كه كد زيرموضوع هست ، pid كه كد والد اون زير موضوع هست و subject كه عنوان موضوع هست .
خوب خيلي راخت و به شكل زير عمل ميشه :


subject - pid - id
================
0 - -1 - iran
================
1 - 0 - tehran
================
2 - 0 - esfahan
================
3 - 1 - karaj
================
4 - 1 - shemiran
================
5 - 2 - kashan
================
6 - 5 - aran va bidgol

خوب واضحه ايران والد اصليه . تهران و اصفهان زيرگروه هاي ايرانند . كرج و شميران زير گروه هاي تهران و كاشان زير گروه اصفهانه . آران و بيدگل هم زيرگروه كاشانه .
حتما متوجه شدي چي شد . اينجوري تا 1000 درجه ميتوني زيرگروه بسازي و ميبيني كه دسترسي به اونها هم چه سادست . اگه سوالي بود بپرس .
دوست عزيز راه زير راهيه كه در وبسايت ها وقتي شما استاني انتخاب مي كني شهرهاشو بهت نشون ميده .

Armin060
دوشنبه 12 مرداد 1388, 11:32 صبح
براحتي ميشه اين كارو كرد . برات يه مثال ميزنم . فرض كن مي خوايم ايران ، استانها ، شهرها و روستاها و توابع رو نگهداري كنيم . براي اينكار يه جدول با سه فيلد لازمه . id كه كد زيرموضوع هست ، pid كه كد والد اون زير موضوع هست و subject كه عنوان موضوع هست .
خوب خيلي راخت و به شكل زير عمل ميشه :
نقل قول:
subject - pid - id
================
0 - -1 - iran
================
1 - 0 - tehran
================
2 - 0 - esfahan
================
3 - 1 - karaj
================
4 - 1 - shemiran
================
5 - 2 - kashan
================
6 - 5 - aran va bidgol
خوب واضحه ايران والد اصليه . تهران و اصفهان زيرگروه هاي ايرانند . كرج و شميران زير گروه هاي تهران و كاشان زير گروه اصفهانه . آران و بيدگل هم زيرگروه كاشانه .
حتما متوجه شدي چي شد . اينجوري تا 1000 درجه ميتوني زيرگروه بسازي و ميبيني كه دسترسي به اونها هم چه سادست . اگه سوالي بود بپرس .
دوست عزيز راه زير راهيه كه در وبسايت ها وقتي شما استاني انتخاب مي كني شهرهاشو بهت نشون ميده .

اين دقيقا راه حلی بود كه من گفتم، ولی نميدونم چرا بهش اهميتی ندادند؟؟؟؟:متفکر:

13601360
دوشنبه 12 مرداد 1388, 11:45 صبح
دوست عزیز این نمونه برنامه رو ببینید


http://www.codeproject.com/KB/database/TreesAndSQL.aspx