توضیحات :
با نرم افزار TURBO C++ یا با Microsoft Visual Studio 2010 Final اجرا کنید.
عملکرد این کد در زیر توضیح داده شده است:
این توضیحات نیز در یک فایل PDF جدا گانه بعد از خرید همراه کد در اختیار شما قرار میگیرد.
این برنامه یک فایل را می خواند و این فایل را با استفاده از رکوردهای با طول ثابت
سازماندهی می کند . در این رکوردها فیلدهای نام با 20 کاراکتر ، نام خانوادگی با 20
کاراکتر و شماره دانشجویی با 10 کاراکتر قرار دارند . ضمناً برای برنامه شماره
دانشجویی باید حتماً 10 رقمی وارد شود . این برنامه برای ایندکسها فایلی جداگانه
باز می کند که انجام عمل پیگرد فقط شماره دانشجویی ها را خوانده و در ایندکس
قرار می دهد و بعد از هر شماره دانشجویییکعدد صفر قرار میدهد که برای مرتب
کردن ایندکسبه ستاره تبدیل شود تا نشان دهد که این ایندکسدر فایل ایندکس
مرتب شده قرار گرفته است . این فایل ایندکسی که در ابتدا ایجاد می کنیم در واقع
نامرتب است و باید فایل دیگری ایجاد کنیم تا ایندکسمرتب شده را در آن قرار دهیم .
در ایندکسمرتب شده در جلوی هر شماره دانشجویی شماره ای قرار می گیرد که
نشان می دهد این شماره دانشجویی مربوط به کدام رکورد است ، در واقع شماره
رکورد آن شماره دانشجویی را در جلوی آن می نویسد .برای جداکردن فیلد ها از هم
از کاراکتر نقطه استفاده کرده ایم و برای جدا کردن رکوردها از هم از کاراکتر حد
فاصل استفاده کرده ایم . حال به شرح مختصری از ساختار برنامه میپردازیم :
که در واقع رشته name در این برنامه متغیرهایی تعریف شده اند که عبارتند از : 1
را در خود جای داده و برای این استکه در فایل برای هر فیلد نام آن فیلد name =
را در fname = که رشته fname را نوشته و محتوای آن را در جلوی آن بنویسد. _ 1
را در خود جای داده است. در اینجا stno = که رشته stno خود نگاه دشته است. _ 1
تعریفشده اند که تعریفشده اند که هیچ نیازی static این ها بدلیل این از نوع
تعریفنشوند هنگامیکه برنامه را اجرا می static دیگر به تغییر این ها نداریم و اگر
کنیم در بعد از انجام اولین نوشتن برای بار دوم یکییا دوتای آن ها خالیمیشوند و
را زیاد انجام می seek نظم فایل را به هم می ریزند و چون ما در این برنامه عمل
دهیم ، این عمل در پردازششبا مشکل مواجه می شود . ( این فرآیند در مرحله مرحله
برای name , fname , stno («watch در » انجام دادن برنامه مشاهده شده است
دریافت ورودی هستند . ( در این برنامه از روشوارد کردن دستیو حلقه استفاده
برای چاپکاراکتر ها در فایل استکه بیشتر برای ch کاراکتر ( random شده نه
برای این استکه هنگام مرتب st چاپنقطه و خطفاصل استفاده میشود . رشته
سازی ایندکسشماره دانجویی که مدنظر است و باید در ایندکسمرتب شده جای
کیرد ، در آن قرار داده شده و بعد از تأیید به فایل ایندکسمرتبانتقال داده شود . به
این دلیل 9 کاراکتری در نظر گرفته شده استکه هنگامی که 10 کاراکتری در نظر
گرفته می شود در حافظه کاراکترهایی به آن اضافه می گردد که در هنگام چاپ در
ایندکسچاپ خواهد شد و با این کار از این خطا جلوگیری میکنیم . _ ئ که یکعدد
است برای این آورده شده که چون فیلد ما ثابت است اگر رشته ورودی مربوط به فیلد
نام و نام خانوادگی از 20 کاراکتر کمتر باشند اختلاف تعداد کاراکتر هایی را که تا 20
برسند مشخصمی کند . و با حلقه ای این تعداد را جای خالی قرار می دهد تا تر کیب
برابر استبا عددی که هنگام مرتبسازی شماره رکورد شماره c _ . فیلد به هم نخورد
یکشمارنده counter _ . دانشجوییکوچک تر در هر بار را در خود نگه میدارد
number _ . استکه برای هر شماره دانشجوییشماره رکورد را مشخصمیکند
یک r _ . استفاده شده به کار میرود case برای تبدیل عدد به کاراکتر که از یک
حاوی مقدار عددی هر یکاز کاراکترهای شماره دانشجویی m شمارنده است. _ 1
استدر نتیجه شماره دانشجوییهم به صورت text است. ( چون فایل به صورت
کاراکتر خواهد بود که برای مرتب سازی باید به عدد تبدیل شود تا مرتب سازی صورت
قرار می m گیرد در نتیجه کاراکتر به ترتیببه عدد تبدیل میشوند و در آرایه 1
که در آن هنگامیکه بخواهیم عدد را به کاراکتر تبدیل کنیم در آن t گیرند ) _ 1
حاوی رشته است که عدد شماره رکورد s کاراکتر مربوط به عدد را قرار می دهیم . _ 1
پساز تبدیل به رشته به صورت معکوسدر آن قرار می گیرد . به این دلیل 7 تاییدر
این رشته count _ . نظر گرفته شده که طول این رشته از 7 تا بیشتر نخواهد شد
که به صورتبرعکساست، برعکسکرده اشرا در خود که s شماره رکورد در 1
که در اینجا برای تبدیل شماره k همان عدد درسترکورد است قرار می دهد . _ 2
دانشجویی به عدد باید اعداد با توجه به مکان خود در ضرایبی از 10 ضرب شوند و با
یکدیگر جمع گردند تا مقدار عددی شماره دانجویی بدست آید . باتوجه به اینکه شماره
تعریفکرده ایم اما جون long دانجویی 10 رقمیحتیبا اینکه متغیرها را از نوع
مقدار عدد زیاد است در برنامه مقداری منفی می دهد ، ولی چون به روال مرتب سازی
ما آسیبی نمی زند و مقایسه ها درستصورت می گیرند آن را همانطور قرار دادیم . _
خواهد بود برای اینکه میخواهیم شماره رکورد را به number باقیمانده عدد t
مقدار عددی شماره دانشجوییرا در خود نگه میدارد num _ . کاراکتر تبدیل کنیم
مقدار min _ ( مقایسه میشود min تا کوچکترین شماره دانشجوییپیدا شود ( با
برای این است str _ . کوچکترین شماره را برای مقایسه تا پایان در خود نگه میدارد
که هنگام خواندن فایل ها به صورتکاراکتر کاراکتر حاوی کاراکتر میشود و در رشته
قرار میدهد . s
استفاده کرده ایم زیرا هنگام دریافترشته اگر در بین رشته cin. Getline از تابع
این cin کاراکتر جای خالیباشد بعد از کاراکتر جای خالیرا هم بخواند زیرا تابع
را 58 در نظر گرفته ایم که از اول seek عمل را انجام نخواهد داد . به این دلیل
رکورد تا ابتدای شماره دانشجویی 58 کاراکتر فاصله می باشد . به این دلیل محتوای
را خالیمیکنیم ( به جای خالی) که برای انجام عمل بعد و دریافت s1 , count
رشته رشته را به طور صحیح در فایل قرار دهیم .
در این برنامه فقط 20 رکورد را می گیرد که می توان آن را در حلقه افزایشدهیم . و
همچنین می توان در صورتبزرگبودتتعداد رکورد ها ، آن ها را به چهار قسمت
تقسیم کنیم و با مرتب سازی هر قسمتبه صورت ایندکسی در پایان آنها را با هم ادغام
کنیم و در فایل ایندکسدیگری قرار دهیم .