بایگانی نویسنده

تجربه های آقای وکیلی ( قسمت یازدهم) ساخت پایگاه در Data Provider مورد نظر

دی ۱۱م, ۱۳۸۷

ساخت پایگاه در Data Provider مورد نظر ۲
برای ساخت یک پایگاه ابتدا بایستی یک SQL Server را رجیستر کرده باشید به اشکال زیر دقت کنید

۱٫ شروع

21436image001 تجربه های آقای وکيلی ( قسمت يازدهم)  ساخت پايگاه در Data Provider مورد نظر

۲٫ راهنمای قدم به قدم

21436image002 تجربه های آقای وکيلی ( قسمت يازدهم)  ساخت پايگاه در Data Provider مورد نظر

۳٫ مشخص کردن نام سرور (Local/Network) باکمک تایپ یا انتخاب از لیست

21436image003 تجربه های آقای وکيلی ( قسمت يازدهم)  ساخت پايگاه در Data Provider مورد نظر

۴٫ انتخاب نوع ورود به Accountاز طریق الف)Account های ویندوز ۲) از طریق تعاریف کاربران در SqlServer

21436image004 تجربه های آقای وکيلی ( قسمت يازدهم)  ساخت پايگاه در Data Provider مورد نظر

5. نحوه ورود به اطلاعات Account بصورت پیش فرض یا در هنگام ورود هر بار سوال شود

21436image005 تجربه های آقای وکيلی ( قسمت يازدهم)  ساخت پايگاه در Data Provider مورد نظر

۶٫ ایجاد این سرور در گروه قبلی یا در گروه جدید

21436image006 تجربه های آقای وکيلی ( قسمت يازدهم)  ساخت پايگاه در Data Provider مورد نظر

۷٫ اماده شدن برای ثبت سرور

21436image007 تجربه های آقای وکيلی ( قسمت يازدهم)  ساخت پايگاه در Data Provider مورد نظر

۸٫ پیام موفقیت در صورت درست بودن عملیات

21436image008 تجربه های آقای وکيلی ( قسمت يازدهم)  ساخت پايگاه در Data Provider مورد نظر

حالا سرور شما آماده ثبت Data Base شما است. Data Base محلی است که شما می توانید در ان پایگاههای خود را ثبت کنید برای اینکار بترتیب قدمهای زیر را دنبال کنید .هدف ما ثبت یک DataBaseبنام NewData است

۱٫ ایجاد DataBase

21436image009 تجربه های آقای وکيلی ( قسمت يازدهم)  ساخت پايگاه در Data Provider مورد نظر

2. وارد کردن نام DataBase

21436image010 تجربه های آقای وکيلی ( قسمت يازدهم)  ساخت پايگاه در Data Provider مورد نظر

3. DataBaseایجاد شده است

21436image011 تجربه های آقای وکيلی ( قسمت يازدهم)  ساخت پايگاه در Data Provider مورد نظر

چند نکته
بحث های مربوط به Sql Server بسیار مفصل است اما آنچه را که می توان در ۲ جدول بصورت خلاصه مطرح نمود بدین صورت است

21436image012 تجربه های آقای وکيلی ( قسمت يازدهم)  ساخت پايگاه در Data Provider مورد نظر

تجربه های آقای وکیلی ( قسمت دهم) عملیات پیاده سازی

دی ۱۱م, ۱۳۸۷

برای پیاده سازی هر سیستمی ما نیاز داریم که عملیاتی که روی هر بخش یک سیستم تعریف می گردد را بشناسیم بطورکلی عملیات روی یک سیستمی که با پایگاههای اطلاعاتی کار می کند بصورت زیر می باشد :
۱٫ ساخت پایگاه در Data Provider مورد نظر
۲٫ ساخت فرمها ی اصلی و حاشیه ای
۳٫ اضافه نمودن اطلاعات جدید Insert
4. اصلاح اطلاعات وارد شده Update/Edit
5. حذف اطلاعات وارد شده Delete
6. جستجو در اطلاعات Search
a. تک مورد Find
b. مورد به مورد Find Next
c. مجموعه ای از اطلاعات Filter/Select
d. …….
7. گزارش گیری و خروجی
a. از اطلاعات خام List
b. از مجموعه اطلاعات M/D
c. از جستجوها
d. از نتایج محاسبات و یا استنتاج ها
e. برحسب دسته بندی
f. چارتهاو نمودارها
g. ……
8. پشتیبان گیری Back Up
9. بازیابی پشتیبان Restore
10. امنیت و تعیین میزان دسترسی Security
11. زیبا سازی برنامه
۱۲٫ مسائل حاشیه ای دیگر (امنیت برنامه / تست / )
بگذارید یک به یک پیش برویم
اما قبل از شروع خدمتتان عرض می کنم که Data Provider هایی که ما با آن کار می کنیم از نوع
• Paradox 7.0
• SQL Server 7.0/2000
می باشند .

ساخت پایگاه در Data Provider مورد نظر
برای ساخت پایگاههای پارادوکس در دلفی می توانید از Data Base Desktop 7.0 که روی خود دلفی نصب است استفاده کنید برای اینکار به شکلهای زیر دقت کنید :
۱٫ احضار DatabaseDesktop 70

435image001 تجربه های آقای وکيلی ( قسمت دهم)  عمليات پياده سازی

2. ایجاد یک Table جدید
435image003 تجربه های آقای وکيلی ( قسمت دهم)  عمليات پياده سازی
۳٫ انتخاب نوع پایگاه

435image004 تجربه های آقای وکيلی ( قسمت دهم)  عمليات پياده سازی

۴٫ نحوه تعریف فیلدهای پایگاه

435image005 تجربه های آقای وکيلی ( قسمت دهم)  عمليات پياده سازی

۵٫ امکانات اضافه در DataBase Desktop

435image008 تجربه های آقای وکيلی ( قسمت دهم)  عمليات پياده سازی

توجه
۱٫ در شکل ۲ مشاهده می شود که می توان علاوه بر ایجاد یک پایگاه جدید
a. یک Query By Example (پرس و جو با کمک مثال )
b. یک فایل SQL
نیز تشکیل داد که در آینده درباره استفاده از این دو ابزار سودمند توضیح خواهم داد
۲٫ در شکل ۳ می توانید علاوه بر Paradox نوع دیگری را نیز انتخاب کنید که در این صورت صفحات تشکیل پایگاه و امکانات جانبی ان متفاوت خواهد بود
۳٫ در شکل ۴ با وجود طیف گسترده ای از انواع متغیر های پیشنهادی ، بالشخصه پیشنهاد می کنم از انواع زیر استفاده کنید
a. N : برای کلید ها ، مبالغ ، اعداد (صحیح و اعشاری )و غیره
b. A : نام ، فامیل ، تاریخ ، ساعت ، نام عکس ، نام فایل توضیحی و غیره (اصولا فکر میکنم هر چیزی را که با Alphabetic تعریف قدرت خوبی برای کنترل خواهیم داشت به شرط اینکه محدوده طول را درست تعریف کنیم مثلا تاریخ را A(10) یا نام عکس را بدون مسیر A(30))
c. + : کلید های مرتب که نیازی به نمایش ندارند و فقط ترتیب رکورد ها را برحسب انها می توان مرتب نمود
d. L : فیلدهایی که یا درست یا نادرست یا تعیین نشده هستند مانند جنسیت
۴٫ در مورد امکانات اضافی می توانم چند توضیح کوتاه بدهم . اما کار حرفه ای روی انرا از طریق Help یا اگر نیاز شد از طریق یک مقاله دیگر توضیح خواهم داد
a. Validity Checks : در این قسمت به ازای هر فیلدی می توان یکسری پارامترهای کنترلی را یکبار برای همیشه (One Time For Ever) تعریف نمود . مانند میزان مجاز (MinوMax) ، الزامی برای ثبت اطلاعات ((Required ، فرمت دریافت و یا نمایش اطلاعات (Picture) . از انجا که برنامه نویسان تمایل دارند کنترل ها را در برنامه تعیین کنند بعدا در مورد شبیه سازی این قسمت در برنامه مفصلا صحبت خواهیم کرد
b. Table Lookup : می توان از این قسمت با کمک پایگاه جاری و ترکیب ان با یک پایگاه دیگر پایگاهی تشکیل داد که تبادل فیلد داشته باشند . این قسمت را نیز در برنامه خواهیم گفت
c. Secondary Indexes : در این قسمت شما می توانید ایندکسهای دیگری را برای ترتیب نمایش و یا جستجوی خود تعریف کنید . بعدا این قسمت را نیز به روش دیگری شبیه سازی خواهیم کرد
d. Referential Integrity : می توانید در این بخش پایگاههای مرتبط را به هنگام تغییر مقادیر این پایگاه مشخص کنید . درواقع نوعی Update هوشمند و بی دردسر . این بخش را نیز در تکنیکها شبیه سازی می کنیم
e. Password Security : گذاشتن کلمه رمز برای پایگاه . این امکان قدرتمند پارادوکس برای آماتورها بد نیست ولی چون همه می دانند چگونه این امکان را بشکنند از این قسمت صرفنظر می کنیم
f. Table Language : تعیین Char Set مورد استفاده در ثبت اطلاعات . این امکان برای تبادل پایگاهها بین دو سیستم عامل با Char Set نامتناجنس(Win98/Win 2000) بنظر مفید است . من تا حالا تست نکرده ام
g. Dependent Tables : نمایش لیست پایگاههایی که در Referential Integrity معرفی کرده اید
۵٫ نکات مهم در نام فیلد ها
a. در نام فیلدها فاصله بکار نبرید
b. نام فیلدها را فارسی ننویسید
c. سعی کنید یک قاعده ثابت برای نامگذاری فیلدها پیدا کنید مثلا “TellNumber”
d. فیلدهای عددی که با انها محاسبه انجام نمی دهید بصورت Aدر نظر بگیرید
e. سعی کنید از Reserve Wordها استفاده نکنید مثلا Date / Table / IF بجای ان از OutDate / InTable / IFMale استفاده کنید

تجربه های آقای وکیلی ( قسمت هشتم) شروع پیاده سازی ۱

دی ۱۱م, ۱۳۸۷

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

تقسیم بندی پایگاهها :
پایگاهها همیشه یک نوع نیستند. بلکه دارای تقسیم بندی برحسب نوع عملکرد دارند. این تقسیم بندی (که تقریبا همجا یکسان است) بصورت زیر می باشد
۱٫ پایگاههای اصلی (Master): پایگاههایی هستند که اطلاعات مادر رانگهداری می کنند . مثلا پایگاه اطلاعات پرسنل و یا اطلاعات دانش آموزان
تشخیص : این نوع پایگاه داراری تغییرات کمی هستند مثلا تصحیح نام یا تاریخ استخدام و برخی از فیلد ها هرگز تغییر نمی کنند . مثلا شماره شناسایی
۲٫ پایگاههای ثبت تغییرات (Detail) : پایگاههایی که تغییرات مرتبط با پایگاههای مادر را ثبت می کنند. مثلا ورود و خروج کارمندان و یا نمرات دانش آموزان
تشخیص : این نوع پایگاه دارای تغییرات وسیعی می باشد و بیشترین کار کاربر روی فعالیت این نوع پایگاه استوار است
۳٫ پایگاههای مرجع (Reference) : اطلاعاتی که در این نوع پایگاهها ثبت می شوند تقریبا ثابت هستند. مثلا پایگاه واحدهای اندازه گیری یا نحوه محاسبه بیمه و مالیات
نکته : این نوع پایگاهها را نباید با پایگاههای اصلی اشتباه گرفت و همچنین در برخی از موارد این پایگاهها فاقد کلید اصلی هستند
۴٫ پایگاههای راکد (Archive) : پایگاههایی برای نگهداری اطلاعات دوره های قبلی کار سیستم هستند. مثلا بایگانی سالهای مالی و یا سوابق افراد
نکته : در بیشتر موارد اطلاعات موجود در این پایگاهها می بایستی غیر قابل تغییر باشند. همجنین در مورد نحوه تشکیل این پایگاهها می توان به ۲ صورت زیر عمل نمود
• یک فایل ثابث که اطلاعات هردوره به این فایل اضافه می شود
• از طریق تقسیم بندی محل نگهداری (دیسکها ، شاخه ها و … ) این اطلاعات را برحسب دوره از یکدیگر منفک نمود
۵٫ پایگاه های پشتیبان (Back Up) : پایگاههایی برای پشتیبانی از پایگاههای اصلی یا تغییرات هستند و در صورت خرابی فایل ها اصلی مورد استفاده قرار می گیرند .
نکته : انواع روشهای زمانبندی برای پشتیبان گیری وجوددارد . به عنوان مثال روش پدربزرگ که شکل زیر میتواند تاحدودی به نحوه کار ان اشاره کند.
توجه داشته باشید که شدت رنگ میزان خطر از دست رفتن اطلاعات را مشخص می کند

7834frt452ge001 تجربه های آقای وکيلی ( قسمت هشتم)  شروع پياده سازي 1
۶٫ فایل یا پایگاه ثبت تغییرات (Transaction Log) : پایگاه و یا فایلهایی که هرگونه تغییرات در دیگر انواع پایگاهها را ثبت می کنند و بهنگام بروز اشکال ، کاربر می تواند پایگاهها را به زمان پشتیبان گیری برگردانده و از طریق این فایلها تمامی عملیات را مجدد اعمال نماید
نکته : چنانچه شما سیستمی را مورد استفاده قرار می دهید که تعدادی اپراتور در ان ورود و یا اصلاح اطلاعات انجام می دهند ، اینگونه فایلها جزء مهمترین دسته فایلهایی هستند که به شما می توانند کمک کنند.

روشهای بازیابی اطلاعات :
۱٫ روش متوالی (Physical Sequential File Access)
در این روش اطلاعات به ترتیب و رکورد به رکورد خوانده و یا نوشته می شوند
۲٫ روش متوالی منطقی (Logical Sequential Access)
در این روش کلیه رکورد ها بر اساس یکی از فیلد مرتب شده است و پردازش رکورد به رکورد انجام می شود
۳٫ روش دسترسی مستقیم (Direct Access/Random Access)
در این روش دستیابی به یک رکورد فقط از طریق کلید انجام می شود

انواع بانکهای اطلاعاتی :
۱٫ طبقاتی (Hierarchical)
در این روش هر پایگاهی یا بصورت Parent و یا Child است . دستیابی به اطلاعات حتما می بایستی از ریشه شروع شود . مزیت این نوع مشابهت ان با طبیعت سازمانهای اطلاعات است
شکل زیر این نوع را نمایش می دهد

gfwernu7893image002 تجربه های آقای وکيلی ( قسمت هشتم)  شروع پياده سازي 1

. شبکه ای (Network)
در این روش هر پایگاه عضوی (Member) از یک پایگاه دیگر(Owner) است . این روابط را مجموعه ها (Set) تعریف می کنند . از انجا که هر پایگاهی می تواند داراری این رابطه باشد شکل ناشی از این نوع پایگاهها دارار انعطاف بسیار زیادی است . برای پیدا کردن یک رکورد در این مجموعه ابتدا باید به سراغ مالک مجموعه و از طریق ان بسراغ عضو رفت . به شکل زیر دقت کنید

fn4w534image003 تجربه های آقای وکيلی ( قسمت هشتم)  شروع پياده سازي 1
۳٫ نوع رابطه ای (Relational)
در این روش برخلاف دو روش قبل رابطها قطعیت ندارند ، بلکه با روابط ریاضی تعریف می شوند . نمونه این پایگاهها SQL است .در این روش میتوان از پایگاههای اصلی هر نوع جداولی که اطلاعات را به تفکیک یکسری صفات (فیلد ها) نگهداری می کنند ایجاد و روابط بین این جداول را از طریق دستوراتی مانند Select وJoin و… برقرار نمود .توانایی بالای این نوع پایگاهها در ایجاد جداول ، ارتباط بین جداول و یا با پایگاهها و مرتب سازی قدرت انعطاف بسیار بالایی را به این نوع بانکهای اطلاعاتی می دهد. شکل زیر را ببینید

تجربه های آقای وکیلی ( قسمت ششم) – چگونه تحلیل اطلاعات و طراحی کنیم ۴

دی ۱۰م, ۱۳۸۷

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

hjk762f35freimage001 تجربه های آقای وکيلی ( قسمت ششم)    چگونه تحليل اطلاعات و طراحي كنيم 4

اگر شمای کلی یک سیستم را شامل ۳ بخش فوق بدانیم ما هم اکنون بخش اول انرا تهیه کردیم .
برنامه ها در بخش دوم قرار دارند که با UIمتفاوت هستند . برنامه ها در هنگام طراحی صرفا یکسری کدهای بدون وابستگی به زبان خاص(Pseudo Codes )می باشند . شاید اطلاق شرایط محیطی به این برنامه ها برای جلوگیری از اشتباه مفید باشد .

برای نوشتن این شرایط طراحان معمولا از کلمات اشنایی نزدیک به معانی اصلی استفاده می کنند .نمونه این کلمات عبارتند از
c823443f34image002 تجربه های آقای وکيلی ( قسمت ششم)    چگونه تحليل اطلاعات و طراحي كنيم 4
مثال :

Read No
Read K
If No > 100
For 1 to No
{ k = k Mod 10
Print K
}
Else
S = Add (No,5)

اما چگونه از این کد ها می توان استفاده نمود
فرض کنید در برنامه فاکتور می خواهید حتما یکسری تصمیم گیری ها قید و یا محاسباتی انجام شود . به مثالهای زیر توجه کنید
۱) تاریخ فاکتور به ماقبل بر نمی گردد

If Input Date < Current Date
Print “Error in Date”

2) جمع حاصل ضرب فی در تعداد در مبلغ کل ریخته شود

S = 0
For All rows
S=S+Fi * Numner
Monye = S

3) تعداد درخواستی باید کمتر از میزان موجود باشد

If ReqNumber< Remind in stock
………….
Else
Message “Not Enough In Stock “

اما چرا نیاز است که این مطالب را به این صورت بنویسیم . زیرا که اولا امکان خواندن برنامه ها بدون تلاش در فهم متغیر ها امکان پذیر می گرددو ثانیا اهداف برنامه ها را می توان بسادگی پیدا کرد
اما در برخی موارد در نوشتن این برنامه ها در شرطهای تودر تو دچار مشکل می شویم در اینجا بسادگی می توانیم از درختهای تصمیم گیری استفاده کنیم .
بعنوان مثال بجای نوشتن این گونه کد ها
If ………..
……
Else
If ………..
……
.
.
.
می توان از درخت زیر استفاده کرد

cfrwe843g5image003 تجربه های آقای وکيلی ( قسمت ششم)    چگونه تحليل اطلاعات و طراحي كنيم 4

تجربه های آقای وکیلی ( قسمت پنجم) – چگونه تحلیل اطلاعات و طراحی کنیم ۳

دی ۱۰م, ۱۳۸۷

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

قبلا گفته شد که می بایستی از پیچیدگی سیستم بکاهیم . این وظیفه را نرمالایز(Data Normalaization) انجام می دهد.
بترتیب قدمهای زیر را انجام دهید

۱) داده های تکراری را از داده های ثابت جدا کنید و در پایگاههای جداگانه بگذارید
مثال از فاکتور خرید زیر می توان ۲ پایگاه را ایجاد کرد.

v3872image001 تجربه های آقای وکيلی ( قسمت پنجم)    چگونه تحليل اطلاعات و طراحي كنيم 3

۲) کلید شناسایی تهیه کنید . تهیه کلید شناسایی رکورد دارای روشهای بسیار متنوعی است که اگر توانستم بعدا در این زمینه توضیحات بیشتری خواهم داد

اما روش کلی برای ساخت کلید را می توان بصورت زیر عنوان نمود : پیدا کردن فیلدیا ترکیبی از فیلدها که در هیچ حالتی نتواند تکرار داشته باشد . بعنوان مثال فیلد نام خریدار نمی تواند کلید باشد اما شماره فاکتور یک پیشنهاد برای کلید پایگاه اول است.و در پایگاه دوم میتوان ردیف را پیشنهاد نمود . اشکالی که در مثال وجود دارداینست که در پایگاه دوم ردیف تکراری خواهد بود برای حذف این تکرار می بایستی ترکیب این فیلد را با شماره فاکتور پایگاه اول در نظر گرفت . بنابر این یک مجموعه Master / Detail خواهیم داشت . شکل زیر این مسئله را روشن می کند/

dsfnkje32image002 تجربه های آقای وکيلی ( قسمت پنجم)    چگونه تحليل اطلاعات و طراحي كنيم 3

۳) داده های قابل استنتاج و غیر کلیدی را حذف کنید ( Calculated Fields)
این گونه داده ها داده هایی هستند که مثلا از جمع مقادیر یک فیلد ، تفاضا ۲ فیلد و یا محاسبه فرمولی یک فیلد دیگر(تاریخ تولد و سن یا تاریخ استخدام و سابقه کاری) بدست می آید .
در مثال فوق مبلغ کل فاکتور در پایگاه اول از این دسته فیلدها است . بنابر این پایگاه را بصوت زیر تکمیل می کنیم.

cdsajk3image003 تجربه های آقای وکيلی ( قسمت پنجم)    چگونه تحليل اطلاعات و طراحي كنيم 3

۴) دادههایی که در چند پایگاه تکرار میشوند را حذف کنید (LookUp Fields)
ممکن است شما برای مشخصات مشتریان خود بخواهید یک پایگاه جداگانه تعریف کنید و یا حتی بخواهید فروشندگان خود را به تفکیک مشخص کنید در این صورت لازم نیست در هر رکورد پایگاه اول تمامی مشخصات انهارا قید کنید ، بلکه کافی است کد مربوطه را به این پایگاه منتقل کنید . شکل زیر تمامی پایگاههای تشکیل شده را نشان میدهد

fdfmk23image004 تجربه های آقای وکيلی ( قسمت پنجم)    چگونه تحليل اطلاعات و طراحي كنيم 3

حال پایگاه شما در حالت کامل نرمالایز قرار دارد
گفتن چند نکته شاید بد نباشد :
۱) بهنگام طی کردن مرحله ۳ می بایستی در مورد فیلدهایی که قابل استنتاج هستند ولی استنتاج انها زمان زیادی می طلبد قدری با احتیاط رفتار کرد . این مساله به نحوه استنتاج شما ارتباط مستقیمی دارد .شاید توضیحات زیر تا حدودی قضیه را روشنتر کند :
• استنتاج زیر ۱۰۰ رکورد با حلقه While را شاید بتوان تحمل کرد، هر چند پیشنهاد نمی شود
• ولی این روش را نمی توان در مورد بالاتر از ان روش درستی نامید . بهتر است با یک دستور SQL این زمان را در مورد تعداد بالاتر کاهش داد .
• اما در برخی موارد دستورات SQL نه تنها در مورد تعداد بالا بلکه در مورد پیچیدگی دستور نیز دچار مشکل و بالطبع زمانبر می شوند در این حالت بهتر است از روشهای بهینه سازی دستورات SQL (تعریف Index ها، تودرتو کردن دستورات و… )استفاده کنید
• اگر با روشها ی فوق به نتیجه نرسیدید و یا علاقه مند به وارد شدن به این مقولات نیستید بهتر است اصلا این فیلد را حذف نکنید
۲) در مورد مرحله ۲ می بایستی تجربه و نگاه خوبی به مساله داشته باشید .
• ممکن است در برخی موارد کلیدی بظاهر یکتا باشدولی بعدا متوجه شوید که یکتا بودن فقط در یک دوره خاص است . این مساله تمامی طراحی های شما را بهم خواهد ریخت .
• ممکن است برخی موارد کلید ها را بیش از پیچیده کنید . مثلا ترکیب چند فیلد برای کلید بودن .این مساله علاوه بر احتمال کاهش سرعت در فیلدهای کلیدی بزرگ باعث خواهد شد که اگر برخی از موارد مورد نیاز شما در حالات خاص وارد نشود شما در تولید کلید دچار مشکل شوید .

تجربه های آقای وکیلی ( قسمت چهارم) چگونه تحلیل اطلاعات و طراحی کنیم ۲

دی ۱۰م, ۱۳۸۷

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

حال به این مسئله می پردازیم که چگونه می باید ارتباط بین این طرههای خام را برقرار کرد

در کل سه نوع ارتباط بین پایگاهها وجود دارد
۱٫ یک به یک : (One To One) ارتباطی است که به ازای یک رکورد در یک پایگاه فقط و فقط یک رکورد در پایگاه مرتبط موجود یاشد
مثال : یک مشتری یک سفارش دارد
۲٫ یک به چند : (One To Many) ارتباطی است که به ازای یک رکورد در یک پایگاه حداقل یک یا بیشتر رکورد در پایگاه مرتبط موجود یاشد
مثال : یک سفارش چند قلم کالا دارد
۳٫ چند به چند : (Many To Many) ارتباطی است که به ازای یک رکورد در یک پایگاه حداقل یک یا بیشتر رکورد در پایگاه مرتبط موجود یاشد و بالعکس
مثال : چند مشتری چند سفارش دارند
شکل زیر نحو ترسیم اینگونه ارتباط ها را نشان می دهد
47834image001 تجربه های آقای وکيلی ( قسمت چهارم)  چگونه تحليل اطلاعات و طراحي كنيم 2
اما تشخیص و ترسیم رابطهای کلی نظام مستلزم طی کردن قدم به قرم مراحل زیر است :
• ابتدا تمامی رابطه های واقعی موجود در سیستم را تک به تک بنویسید
• شکل هریک از رابطه ها را بکشید
• اشکال را برهم منطبق کنید تا موجودیتهای تکراری حذف شوند(شکل کلی ارتباط)
• از طریق تحلیل شکل کلی ارتباط های اضافی را حذف کنید

یک مثال : نظام دانشجو ، استاد ، درس ، برنامه درسی
رابطه ها : (دو قدم اول)
fdsjklc3image002 تجربه های آقای وکيلی ( قسمت چهارم)  چگونه تحليل اطلاعات و طراحي كنيم 2
تکمیل (دو قدم دوم)
dasfkni3image003 تجربه های آقای وکيلی ( قسمت چهارم)  چگونه تحليل اطلاعات و طراحي كنيم 2

تجربه های آقای وکیلی ( قسمت سوم) چگونه تحلیل اطلاعات و طراحی کنیم

دی ۴م, ۱۳۸۷

در ادامه بحث قبل اکنون میرسیم به اینکه با نتایج مرحله قبل چه کنیم
مواردی که اکنون در اختیار ما هست عبارنتد از
• کلیه فرمهای ورودی و خروجی سیستم
• توضیحات مربوط به هریک از فرمها بصورت کامل
• نوارهای صوتی و تصویری احتمالی از مصاحبه ها

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

حال بترتیب عملیات زیر را انجام دهید
۱ <<<انچه در اختیار دارید را دسته بندی کنید
مثلا در مورد یک سیستم پرسنلی دسته ها می توانند بصورت : اطلاعات پرسنل، مدارک ، مرخصی ، مزایا و… باشند
۲<<<بر اساس دسته بندی اولیه خود نمودار کلی نظام را ترسیم کنید(System Narrative)

414image001 تجربه های آقای وکيلی ( قسمت سوم)  چگونه تحليل اطلاعات و طراحي كنيم

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

۳<<< نمودار گردش داده(Data Flow Diagram یا DFD) را ترسیم کنید این نمودار می تواند به ما نشان دهد که دادهای خروجی و ورودی هریک از اجزاء چیست و وضعیت گردش انها به چه ترتیب است . در مورد ترسیم این نمودار می بایستی تمامی گردش کار بدقت ترسیم شود چرا که به عنوان یک نمودار عملیاتی بعدا مورد استفاده مکرر شما و مشتری خواهد بود

414image002 تجربه های آقای وکيلی ( قسمت سوم)  چگونه تحليل اطلاعات و طراحي كنيم

۴<<< نمودارهای DFD خود را از سطح صفر به سطح یک و … ببرید. هر سطح نشانه داخلی تر بودن پردازش خواهد بود : مثال سطح ۱

414image003 تجربه های آقای وکيلی ( قسمت سوم)  چگونه تحليل اطلاعات و طراحي كنيم

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

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

414image004 تجربه های آقای وکيلی ( قسمت سوم)  چگونه تحليل اطلاعات و طراحي كنيم

414image005 تجربه های آقای وکيلی ( قسمت سوم)  چگونه تحليل اطلاعات و طراحي كنيم

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

حال در قدم بعدی می توانید اطلاعات موجود در جدول را بصورت زیر در یک Data Catalog ثبت نمود . این کاتالوگ پیشنهادی است که اطلاح شده فرمهای مفصل و دست و پاگیر (ولی قدرتمند) اصلی (Data Dictionary)می باشد. در Data Dictionaryهای اصلی نه تنها همین مطالب که مطالب بیشتری مانند محلهای استفاده ، محدودیتهای محل و غیره را میتوان قید نمود با مراجعه به کتب طراحی می توانید به مطالب بیشتری دست پیدا کنید .
همچنین یک نام نیز برای پایگاه انتخاب کنید
Factor(پایگاه فاکتور فروش)

414image006 تجربه های آقای وکيلی ( قسمت سوم)  چگونه تحليل اطلاعات و طراحي كنيم

این طرح خام و اولیه پایگاه شماست

تجربه های آقای وکیلی ( قسمت دوم) چگونه شروع کنیم

دی ۴م, ۱۳۸۷

برای شروع لازم است در مورد مسائلی که به ترتیب عنوانهای آنها قید می شود … علاوه بر توضیحات این مقاله مطالعه وسیع و مداومی نیز داشته باشید

البته لازم به ذکر است که فرض این مقاله بر این است که مشتری یا خود شما امکان و یا به صرفه بودن تولید نرم افزار را براورد و درمورد ان مطمئن هستید.

حل هر مسئله و خصوصا برنامه های کامپیوتری مستلزم گذراندن ۵ مرحله است که در شکل نشان داده شده است

zq2 تجربه های آقای وکيلی ( قسمت دوم)  چگونه شروع كنيم

همانگونه که از شکل مشخص است هرچه ۴ مرحله اول دقیق تر انجام شود احتمال تکرار مراحل قبلی کمتر و بالطبع زمان و در پی ان هزینه تولید نرم افزار کاهش می یابد . در میان ۵ مرحله تحلیل مهمترین بخش است چراکه تعریف صورت مساله در تحلیل انجام میشود. نمی خواهم بحث را طولانی کنم .فقط این قضیه را خاطر نشان می کنم که اهمیت “تحلیل ” بقدری زیاد است که در خارج از کشور شرکتها ی تولیدکننده نرم افزار حتما داراری چندین تحلیلگر ماهر هستند که از ابتدا تا انتهای پروژه هدف پروژه را کنترل و مسیر انرا اصلاح میکنند.

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

zq1 تجربه های آقای وکيلی ( قسمت دوم)  چگونه شروع كنيم

“فهم مساله نیمی از حل مساله می باشد”

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

پس قدم اول شناخت صورت مساله است .هدف از انجام این قدم را می توان پرداختن به ۴ موضوع زیر دانست

تعیین اطلاعاتی که قابل مکانیزه کردن می باشد
افرادی که لازم است با این ابزار(نرم افزارها) کار کنند.در پروژه های بزرگ این مسئله شامل سلسله مراتب اولویت افراد نیز می گردد
انتخاب نمونه های اصلی برای کار روی انها(فرمها پرونده ها اسناد و غیره…….)
میزان گستردگی نمونه های انتخاب شده و همچنین کاهش میزان پیچیدگی نرم افزار در موارد کم اهمیت

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

مصاحبه : با یک یا چند کارشناس مسلط به کار (هر چند درکی از کامپیوتر نداشته باشند) صحبت کنید . این کار را گاه لازم است بطور مداوم تکرار کنید تا مطمئن شوید که می دانید چه می خواهید .
فرمهای نظر سنجی : ممکن است برنامه ای قبلا نوشته شده باشد و یا ذهن یک جامعه (منظور مجموعه ای از افراد است ) نسبت به یک مسئله روشن باشد ، بهتر است نظر انها را در مورد نواقص سیستم قبلی(حتی ممکن است سیستم قبلی یک سیستم دستی باشد) و یا پیشنهاد سیستم جدید بدانید .
مرور انچه که هست : برخی موارد (بجز مواردی که یک نرم افزار خاصی وجود دارد ) می توانید با مراجعه به انچه انجام شده(نرم افزارهای قبلی) به بررسی نقاط ضعف و قوت نرم افزارها بپردازید و از این راه تحلیل خود را محکم تر کنید
مشاهده عینی : بایستی بطور مداوم با حضور در محل روند کار وانچه گفته می شود را با انچه می دانید ترکیب و مقایسه کنید تا بتوانید به نکات ریز و ظریفی که وجود دارد پی ببرید . گاه نکته ای که از دید کارفرما بدیهی است از دید شما ناشناخته است
عکسبرداری و فیلمبرداری و یا ضبط صوت : انسان هیچگاه نمی تواند به حافظه خود جهت یادآوری اتکا کند . بهتر است از این سه ابزار ساده و ارزان قیمت ( در مقایسه با نتایجی که بدست می آورید ) استفاده کنید تا در هنگام تحلیل بتوانید با مراجعه مکرر امکان خطا را کاهش دهید
ثبت انچه بدست می اورید : مطالبی که شما جمع اوری میکنید دارای ارزش زیادی هستند . انها را بطور مداوم دسته بندی و یادداشت کنید . اینکار باعث می گردد تا اولا براحتی در مراجعه بعدی مطلب را پیدا کنید و ثانیا با حذف یک شخص خاص از پروژه (اخراج ، عدم تمایل به کار، بیماری و یا ….) کل پروژه از کار نیفتاد
همانگونه که می بینید در این مورد این مساله نکات ظریف بسار زیاد است .

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

البته در حین مراحل تحقیق چند نکته را از یاد نبرید

پررو باشید : از سه عامل پول ، پارتی و پررویی اگر دوتای اول را ندارید حداقل سومی را داشته باشید . البته این به معنای بی ادب بودن نیست بلکه به معنای سمج بودن یا در اصطلاح ادبی “پشتکار داشتن ” برای دست یافتن به مطلب مورد نظر است
ایجاد وحشت نکنید : با فیلمبرداری و ضبط صدا و یا حتی یادداشتها کاری نکنید که کارمندان احساس کنند شما درحال جمع اوری مدرک علیه او هستید

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

تجربه های آقای وکیلی قسمت اول … تجربه های برنامه نویسی

دی ۴م, ۱۳۸۷

بنام انکه جان را فکرت آموخت

با بررسی های و تجربیاتی که بنده در زمینه برنامه نویسی های پایگاههای اطلاعاتی انجام دادم مشکلات بزرگ برنامه نویسان را در عوامل متععددی پیدا کردم که درطی سال گذشته ( از دی ماه ۸۱ تا خرداد ۸۲ ) سعی کردم این مشکلات را حل کنم برای حل برخی از این مشکلات به راهنمایی و کمکهای ارزنده دوستانی( که هرگز ندیدمشان ولی خود را وامدار آنها می دانم ) مدیون هستم و برخی دیگر را لطف الهی می دانم … به هر حال از انجایی که این نتایج را نمی خواهم تنها در اختیار خود داشته باشم و آنرا متعلق به همه می دانم ، سعی خواهم کرد طی مقالاتی گزارشی از راهی که پیموده ام را خدمت دوستان عزیز تقدیم کنم.

۱) انچه در شروع باید بدانیم
الف ) بنابر یک اصل کلی در حل مسائل “ابتدا باید مقصد را مشخص سپس ابزار رسیدن را انتخاب نمود ”
اگر به این مسئله معتقد باشیم باشیم انگاه دیگر درگیر معضلاتی همچون “تعصب بروی یک نرم افزار خاص” و یا “چون من فقط همین نرم افزار را می دانم پس بهترین راه همین است ” نخواهیم شد. وصد البته اینکار نیازمند مطالعه و تحقیق مداوم برای رسیدن به بهترین راه حل خواهد بود.

ب) “همه کس همه چیز را نمی داند”
… اعتقاد به این اصل باعث خواهد شد تا شما اولا سعی در تیمی کردن پروژه های بزرگ کنید و ثانیا انجام نرم افزارهایی که از حیطه توانایی شما خارج است (ومدت کوتاهی برای اتمام آن دارید ) را قبول نکنید چراکه با شکست در انجام آن اعتبار خود را زیر سوال خواهید برد

ج ) “چند کار کوچک بهتر از ۱ کار بزرگ است ”
این به معنای اینست که
• اگر تازه کار هستید با پروژه های کوچک شروع کنید و پس از کسب تجربه به سراغ اهداف بزرگتر بروید
• اگر پروژه بزرگی دارید (بزرگی پروژه بنابر منطق فازی به خودتان بستگی دارد) آنرا به قسمتهای کوچکتری تقسیم کنید تارسیدن به انها ساده تر باشد

د) “مشکلترین راه حل همیشه بهترین نیست”
همیشه اینگونه نیست که بتوانید همه چیز را بنابر مصالحی (همچون “استقلال برنامه از ابزار” ) با کد نویسی حل کنید چرا که اینکار نه تنها باعث افزایش زمان پروژه خواهد شد که احتمال خطا را نیز افزایش می دهد . بنده از سال ۷۴ تا ۷۵ در حدود ۱۲۰۰۰ خط برنامه بزبان پاسکال نوشتم که Utilityمحسوب می شد و باعث گردید که مشکلاتی همچون فارسی نویسی، ارتباط با شبکه مرتب سازی بانکهای اطلاعاتی و غیره را حل کنم و باکمک آنها چند برنامه مفید نوشتم اما اکنون از عیب یابی این برنامه ها وحشت دارم چه رسد به کسترش این برنامه ها

ه) “خیال پرداز باشید ”
در سینما به این اصطلاح “حس گرفتن ” گفته می شود. در واقع تخیل شما در باره محصول نهایی همیشه مشوق شما برای پیدا کردن راه حلها و فهم ندانسته های شما خواهد بود . این حس ذاتی است و انهایی که از این حس کمتر بهره مند هستند تا زمان تحویل پروژه متوجه نواقص ان نخواهند شد

و) “دست پیش را بگیرید تا پس نیفتید”
در مورد ۲ عامل مهم تاکید می کنم این ضرب المثل را فراموش نکنید
• زمان انجام پروژه
• مبلغ قرارداد
همواره پس از شنیدن صورت مسئله ،اعداد و ارقام ذهنتان را ۲ تا ۳ برابر اعلام کنید چراکه در این صورت نه تنها با ارامش خیال بدون واهمه زمان کافی برای انجام پروژ خواهید داشت که در اخر کار پس از کسر صورت هزینه هایی که حتی تصورشان را هم نمی کردید مقداری استفاده برایتان خواهد ماند.

ز) “شما ۲ گوش دارید و ۱ زبان ”
مشتری همیشه می داند که چه کار می خواهد انجام شود ولی قرار نیست شما با حرفهای بزرگ زدن مسئله را برای او وخودتان پیچیده تر از آنچه که هست کنید . همیشه گوش کنید و نکات ظریف مسئله را با دقت تمام دنبال کنید . شاید در لحظه ای که شما فکر می کنید “مسئله ساده ای است ” یک “فاجعه” در انتظار شما باشد در ان لحظه به این مسئله فکر کنید “زبان سرخ سرسبز می دهد برباد”

ح) “من نمی دانم ”
همیشه با همه برای فهم انچه نمی دانید در ارتباط باشید .
• همواره با مشتری خود مشورت کنید . شاید او از مسائل برنامه نویسی چیزی نداند ولی مطمئننا از انچه که می خواهد با اطلاع است . نگذارید این دانش او با ایراد گرفتن به شما منتقل شود.
• همیشه در حال جستجوی اطلاعات جدید در اینترنت و یا کتب ویا حتی دوستانی که دارید باشید .

ط) “اول کوچکترها بعد بزرگترها”
یکی از عوامل موفقیت شما در شبیه سازی پروژه های بزرگ به صورت کوچک و تعمیم آن به برنامه های بزرگتر است . بیاد داشته باشید که در پروژه های بزرگ شما باید مسائل حاشیه ای را ( که حتی ممکن است به اصل صورت مسئله ارتباط مستقیم ندارد ) در نظر بگیرید . اما شبیه سازی در مقیاس کوچک به شما فرصت حل اصل مسئله را خواهد داد.

ی)”سریع و کثیف ”
زیبا سازی برنامه را برای بعد بگذارید .. مهم نیست اول چه فونتی با چه رنگی انتخاب می شود . مهم اینست که ایا برنامه درست عمل می کند یا خیر . مشتری در هنگام استفاده دیدن یک برنامه زیبا را مهم می داند نه در هنگام تولید .

ک) “عقل تابع چشم است ”
• (در مورد مشتری )یک برنامه زیبا بیشتر به دل می نشیند
• (در مورد برنامه نویس ) هرچه بیشتر نمونه برنامه ببینید ، ذهن شما قدرت خیالپردازی بیشتری پیدا میکند و بالطبع دید وسیع تری را در عمل کردن خواهید داشت

در مقاله بعدی خواهم گفت که از کجا شروع کنیم

آموزش پاسکال قسمت چهارم

آذر ۲۴م, ۱۳۸۷
دستورات زیر را در نظر بگیرید:

Var y1,y2:real;
St1,st2 : string;
Y1:=352.768
Y2:=476.395
Str(y1:7:2,st1);
Str(y2:3:1,st2);

با اجرای دستور str اول مقدار ۳۵۲٫۷۶۸ به رشته ’۳۵۲٫۷۶۸′ تبدیل میشود و در st1 قرار میگیرد و با اجرای دستورstr دوم مقدار ۴۷۶٫۳۹۵ به رشته ’۴۷۶٫۳۹۵′تبدیل میشود و در st2 قرار میگیرد.
جدا کردن زیررشته ای از رشته:
زیررشته بخشی از رشته است و برای جدا کردن زیررشته از رشته از تابع copy استفاده میشودتابع copy به صورت زیر به کار میرود.

Copy (source,index,size)
S:=’I am learning pascal ‘;
S1:=copy(s,15,6);

دستور copy باعث میگردد تا با شروع از محل ۱۵ تعداد ۶ کاراکتر از رشته s استخراج شود و در s1 قرار گیرد. بنابراین محتویات رشته s1 برابر است با ‘pascal’.
الحاق رشته ها :
منظور از الحاق رشته ها اتصال رشته ها به یکدیگر است به عنوان مثال اگرs1:=’ab’ و s2:=’cde’ الحاق دو رشته (s1,s2) به صورت ‘abcde’ خواهد بود برای الحاق رشته ها از تابع concat استفاده میشود:
(اسامی رشته ها)concat
دستورات زیر را در نظر بگیرید:

S1:=’pascal’;
S2:=’is a ;
S3:=’language’;
S4:=concat(s1,s2,s3);

با اجرای این دستور s3 به انتهای s2 متصل میشود و رشته نتیجه به انتهای s1 متصل میگردد و در نتیجه رشته s4 عبارت است از’pascal is a language’: . اگر طول رشته حاصل بیش از ۲۵۵ باشد بقیه کاراکترها حذف میشوند.
جستجوی رشته ای در رشته دیگر:
برای این کار از تابع pos استفاده میشود کاربرذ این تابع به صورت زیر است:

Pos(s1,s2)

S1 رشته ای است که باید در s2 وجود داشته باشد محل اولین وقوع آن برگردانده میشود و گر نه مقدار صفر برگردانده میشود دستورات زیر را در نظر بگیرید:

S1:=’learning’
S2:=’I am learning pascal’;
S3:=’english’
X:=pos(s1,s2)
y:=pos(s3,s2)

چون رشته s1 در s2 وجود دارد دستور pos اول مقدار ۶ را در x قرار میدهد و معنایش این است که رشته ‘learning’ در محل ۶ رشته s2 وجود ندارد مقدار صفر در y قرار میگیرد.
محاسبه طول رشته :
برای محاسبه طول رشته از تابع length به صورت زیر استفاده میشود:
(رشته)length
دستورات زیر را در نظر بگیرید:

S1:=’xymn’
X:=length(s1)

چون طول رشته s1 برابر ۴ است مقدار x برابر ۴ خواهد بود.
حذف و درج زیررشته:
زیر رشته ای را میتوان از رشته ای حذف کرد و یا زیررشته ای را میتوان در رشته ای درج کرد برای حذف زیر رشته از زیربرنامه ها به صورت زیر به کار میروند:

Delete(source,index,size)
Insert(pattern,destination,index)

در زیربرنامه delete زیررشته ای به طول size با شروع از محل index از رشته source حذف میشود و در زیربرنامه insert زیررشته pattern با شروع از محل index در رشته destination درج میشوددستورات زیر را در نظر بگیرید:

S1:=pas***cal
Delete(s1,4,3)
S2:=’paal’;
S3:=’sc’;
Insert(s3,s2,);

دستور delete باعث میشود تا با شروع از محل ۴ رشته s1 حذف شده و رشته s1 به pascalتبدیل شود دستور insert موجب میشود تا رشته s3 در s2 درج شود و در نتیجه رشته s2 به ‘pascal’ تبدیل شود.
مثال : برنامه ای بنویسید که یک اسم را از ورودی دریافت و آنرا بر عکس چاپ کند

Readln(name);
For i:=length(name) downto 1 do
Write (name[i])

مثال : برنامه ای بنویسید که که یک نام را از ورودی دریافت و به ما بگوید که آیا این نام با حرف a شروع میشود یا خیر؟

Readln(name);
If name[1]=’a’ then
Writeln(‘ok’)
Else
Writeln(‘not ok’);

مثال : برنامه ای بنویسید که یک نام را از ورودی دریافت و حروف آنرا یک در میان چاپ کند.

Readln(name);
For i:=1 to length(name) do
If I mod 2 = 0 then
Writeln(name[i]);

روش دیگر:”

For i:=1 to int(length(name)/2) do
Writeln(name[i*2]);

مثال : برنامه ای بنویسید که یک رشته را از ورودی دریافت و متقارن بودن آنرا چک کند.
۱ ۲ ۳ ۴ ۵ ۵ ۴ ۳ ۲ ۱

var
N:string;
Begin
Readln(n);
For i:=1 to int(length(n)/2) do
Begin
If n[i] <> n[length(n)-i+1] then
K:=0;
End;
If k=1 then
Writeln (‘ok’)
Else
Writeln(‘no’);
End.

مثال : برنامه ای بنویسید که تعداد حروف a موجود در یک رشته ورودی را بشمارد.

Var st:string;
Begin
Readln(st);
C:=0;
For i:=1 to length(st) do
If st[i]=’a’ then ?if st[i] in ['a','A'] then
C:=c+1;
Writeln(c)

مثال : برنامه ای بنویسید که تعداد اسامی alireza موجود در رشته را بشمارد.

Begin
Readln(st);
C:=0;
While pos(‘alireza’,st) <> 0 do
Begin
C:=c+1;
J:=pos(‘alireza’,st);
Delete(st,pos(‘ali’,st),3);
End;
Write ( c );
End.

مثال : برنامه ای بنویسید که دو رشته را از ورودی دریافت و بعد از کاراکترمساوی که در رشته اول وجود دارد رشته دوم را چاپ کند.

Readln(st,st1);
J:=pos(‘=’,st);
Writeln(copy ((st,1 j) , st1, copy (st,j+1,100));

تکلیف : برنامه ای بنویسید که با دریافت سه حرف و قرار دادن آنها در یک آرایه سه تایی کلیه ترکیبات ممکن را که سه حرف ترکیباتشان به هم نخورد چاپ کند.
W a x
A x w
W a x
مثال : برنامه ای بنویسید که یک رشته را از ورودی دریافت و کلیه کلمات موجود در آن را بشمارد.

Readln(st);
S:=0;
St:=st+’ ‘
While pos(‘ ‘,st) <> 0 do
Begin
S;=s+1;
Delete(st,1,pos(‘ ‘,st));
While st[1]=’ ‘do
Delet (st,1,1);
End;
End.

تکلیف : برنامه ای بنویسید که ۱۰۰ رسته را از ورودی دریافت و در یک آرایه به طول ۱۰۰ از نوع string بریزید و به سؤالات زیر جواب دهد.
۱- تعداد کل کلمات
۱- تعداد کل حروف
۲- تعداد حروف صدا دار

ذخیره اطلاعات :
Log file : فایلی است که تمام تغییرات مربوط به یک محیط را ثبت میکند
فایلها :
۱- متنی text
2- رکوردی typed
3-بدون نوع
۴-untyped

معرفی فایلهای متنی :
Var

Text : نام فایل

نسبت دادن فایل :

; (‘نام خارجی ,’نام فایل ) assign

مثال :

Assign(f,’c:a1.dat.ddd’);

باز کردن جهت خواندن

;( نام فایل)reset

باز کردن جهت نوشتن

; ( نام فایل)rewrite
) ___,نام فایل)readln
) ___,نام فایل)writeln
) نام فایل)close

تا close انجام نشود data ذخیره نمیشود .
نکته بسیار مهم : در هر یک از مسائلی که در مورد فایلها مطرح میشود می بایستی به نحوی از یکی از تکنیکهای نگهداری اطلاعات در حافظه اصلی استفاده نمود این تکنیکها ممکن است استفاده از متغیرها و آرایه ها و ماتریسها و ودرختهاو…استفاده نمود ولی تنها با دو عمل خواندن و نوشتن به روی فایل کار انجام میشود
Update : میخوانیم ولی دوباره میریزیم سر جاش
Append : بهش یک چیزی اضافه میکنیم
نکته : عمل rewrite باعث میگردد چنانچه فایل وجود نداشته باشد ایجاد و چنانچه وجود دارد اطلاعاتش به طور کامل پاک شود.
مثال : برنامه ای بنویسید که۱۰۰ اسم را از ورودی دریافت و آنها را در یک فایل به نام a1.dat))بنویسد.

Var
F:text;a:string;
Begin
Assign(f,’a1.dat’);
Rewrite(f);
For i:=1 to 100 do
Readln(a);
Writeln(f,a);
End;
Close(f);
End.

مثال : برنامه ای بنویسید که فایل a1.dat را خوانده و به ما بگوید چند بار اسم ali تکرار شده است؟

Var
A:text;
B:string;
Begin
Assign(a,’a1.dat’);
Reset(a);
Sum:=0;
For i:=1 to 00 do
Begin
Readln(a,b);
If b=’ali’ then
Sum:=sum+1;
End;
Close(a,b);
End;

مثال : برنامه ای بنویسید که تعدادی اسم را که آخرین آنها end است از ورودی دریافت و در یک فایل به نام aa.dat بریزد آنگاه فایل را بسته و قسمتهای زیر را به طور جداگانه انجام دهد.
۱- تعداد حسنها بیستر است یا علی ها
۲- چند اسم وجود دارد که با حرف z شروع میشود.

Var
f:text;
Name:string;
Begin
Assign(f,’aa.dat’);
Rewrite(f);
Readln(name);
While name<> ‘end’ do
Begin
Writeln(f,name);
Readln(name);
End;
Close(f);
H:=1;
A:=1;
Z:=1;
Reset(f);
While not eof (f) do
Begin
Readln(f,name);
If name=’ali’ then
A:=a+1;
If name =’hassan’ then
H:=h+1;
End;
Close(a);
If h>a then writeln(‘h>a’);
If h
If h=a then writeln(‘h=a’);
End;
Close(f);
Reset(f);
While not eof (f) do
Begin
Readln(f,name);
If name[i]=’z’ then
Z;=z+1;
End;
Close(f);
Writeln(‘sum of z is :’z);
End.

تکلیف : برنامه ای بنویسید که تعدادی نام را از ورودی دریافت و در یک فایل بریزد سپس فایل تشکیل شده را باز کرده و از روی این فایل دو فایل دیگر تشکیل دهید که در یکی از آنها اسامی که بین a تا z قرار گرفته اند ریخته و در فایل دوم کلیه اسامی که از v تا z هستند را بریزد.

Program test;
Var
Name : string;
F,f1,f2:text;
Begin
Assign(f,’a.dat’);
Rewrite(f);
Writeln(‘enter a name ‘);
Readln(name);
While length(name)>0 do
Begin
Writeln(f,name);
Writeln(‘enter a name’);
Readln(name);
End;
Close(f);
Reset(f);
Assign(f1,’a1.dat’);
Assign(f2,’a2.dat’);
Rewrite(f1);
Rewrite(f2);
While not eof (f) do
begin
Readln(f,name);
Case name[1] of
‘a’..’u':writeln(f1,name);
‘v’..’z':writeln(f2,name);
end;
end;
close(f2);
close(f1);
close(f);
end.

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

var
h,f,g:text;
a:string;
begin

writeln(‘enter first filename’) ;
readln(a);
assign(h,a);
writeln(‘enter second filename’) ;
readln(a);
assign(f,a);
reset(h);
reset(f);
assign(g,’out.dat’);
rewrite(g);
while not eof(h) do
begin
readln(h,a);
writeln(g,a);
end;
while not eof(f) do
begin
readln(f,a);
writeln(g,a);
end;
close(f);
close(h);
close(g);
End.

تکلیف :برنامه ای بنویسید که در ضمن عمل merge دو فایل مرتب شده را با یکدیگر ترکیب و یک فایل مرتب شده به دست آوریم.