PDA

View Full Version : سوال: راهنمایی در ساخت برنامه مدیریت فایل "index-sequential"



Ali0Boy
شنبه 06 خرداد 1391, 08:39 صبح
http://s3.picofile.com/file/7389508923/qust.jpg


باسلام خدمت شما اساتید و دوستان گرامی
من در قسمتی از پروژه ی پایانی خودم که برداشته ام باید با مدیریت فایل ترتیبی شاخص دار (index-sequential) کار کنم.
در این نوع فایل همان طور که در تصویر مشاهده می کنید دارای 3 فایل از نوع رندم می باشد.
فایل اول با نام index.dat برای شاخص گذاری داده های بانک بر حسب کد آنها می باشد که مکان آن ها را نمایش می دهد که با انجام عملیات های محاسباتی آدرس رکورد در فایل main بدست می آید که به آنجا seek خواهیم کرد.
فال دوم با نام main.dat برای نگهداری داده ها می باشد که در اینجا دارای 4 قسمت می باشد(از چپ به راست): کد، نام، معدل، کد، آدرس داده در فایل Over [البته این آیتم ها قابل تغییر و اضافه یا کم شدن دارند]
فایل سوم با نام over.dat مانند همان فایل main فقط با یکسری تفاوت که در زیر به آن اشاره شده است.

اجرای عملیات:
الف) درج یک رکورد جدید:
برنامه وقتی اجرا می شود دو فایل index و main را بررسی می کند اگه داده ای در آن نبود تا زمان بستن و اجرای دوباره آن هرگاه رکوردی اضافه شد، در فایل main درج می کند و کد و آدرس آن را در فایل index نیز ذخیره می کند، حال در اجرای مجدد برنامه باز همان مراحل را اجرا می کند ولی اگر در دو فایل main و index داده ای نبود به اینصورت پیش می رود که اگر کاربر عددی وارد نمود بررسی می کند این عدد از کدام قسمت در فایل index بزرگتر و از گزینه بعدی کوچکتر است، بعد به آدرس عدد کوچکتر از خودش می رود و حالا بررسی می کند که آیا آن رکورد در فایل main در فیلد آخرش یعنی "آدرس رکورد در فایل over" آیا آدرسی وجود دارد یا خیر، اگر وجود ندارد این رکورد جدید را در فایل over اضافه کرده و آدرس آن را در این فیل اضافه می کند و اما اگر وجود دارد به آدرس رکورد مربوطه در فایل over رفته و باز آن را بررسی می کند که در قسمت "آدرس رکورد در فایل over" آیا آدرسی وجود دارد یا خیر باز اگر وجود نداشت به پایان فایل over رکورد جدید را اضافه و آدرس آن را در این فیلد درج می کند اما حال اگر آدرسی موجود بود باز این عملیات بازگشتی را فقط در فایل over بررسی می کند و در آخرین مرحله که به آدرسی رفت که در فیلد "آدرس رکورد در فایل over" هیچ داده ای موجود نبود رکورد را در فایل over درج و آدرس ان را در این فیلد اضافه می کند.

ب) نمایش یک رکورد خاص:
کاربر در صفحه ای دیگر کد مربوطه خود را زده و برنامه در فایل index چک می کند که آیا وجود دارد یا خیر، اگر وجود داشت به آن رکورد رفته و نمایش می دهد در غیر اینصورت به آدرس بزرگترین رکورد کوچک تر از رکورد در خواستی رفته و بررسی می کند ایا در فیلد "آدرس رکورد در فایل over" آیا آدرسی وجود دارد یا خیر، حال اگر وجود نداشت که پیغام می دهد این رکورد موجود نمی باشد ولی اگر وجود داشت که به آن آدرس در فایل over رفته و بررسی می کند که آیا کد رکورد مربوطه برابر هست یا خیر، اگر بود نمایش می دهد و اگر نبود فیل "آدرس رکورد در فایل over" را بررسی می کند اگر آدرسی موجود نبود پیغام می دهد که داده پیدا نشد و اگر بود باز به آن ادرس رفته و این عمل بازگشتی همچنان ادامه دارد.

ج) بازسازی فایل ها:
در این عملیات برنامه تمامی داده ها را از فایل over و main جمع آوری کرده و برحست زمان ورودشان در برنامه آن ها را در فایل main یکجا می نشاند و تمامی فیلد های "آدرس رکورد در فایل over" مربوط به این رکورد ها را خالی(non) می کند و فایل index را دوباره بر حسب اطلاعات فایل main جدید بازسازی می کند و البته توجه کنید که بعد داده ها باید در فایل index مرتب شده بر حسب کد رکورد باشند و نه زمان ورود رکورد یا آدرسشان چون زمان جستجو شدیدا لازم داریم.

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

باتشکر

Ali0Boy
شنبه 06 خرداد 1391, 16:52 عصر
دوستان خواهشا کمک کنید. شدیدا لازم دارم !!!