پروژه: دفترچه تلفن

پروژه نهایی: دفترچه تلفن با آرایه‌های موازی، جستجو، افزودن و فهرست‌کردن.

پروژه نهایی: دفترچه تلفن 📞

بزرگ‌ترین پروژه دوره! چند آرایه موازی (اسم‌ها و شماره‌ها)، رویه‌های CRUD و جستجو.

ساختار داده

چون هنوز record یاد نگرفته‌ایم، از آرایه‌های موازی استفاده می‌کنیم — ایندکس i در هر دو آرایه متعلق به یک مخاطب است:

const
  MaxContacts = 20;
var
  names: array[1..MaxContacts] of string;
  phones: array[1..MaxContacts] of string;
  count: integer;   { تعداد مخاطبین فعلی }

کد کامل

program PhoneBook;
const
  MaxContacts = 20;
var
  names: array[1..MaxContacts] of string;
  phones: array[1..MaxContacts] of string;
  count: integer;

procedure Init;
begin
  count := 0;
end;

procedure AddContact(name, phone: string);
begin
  if count >= MaxContacts then
  begin
    writeln('دفترچه پر است!');
    exit;
  end;
  count := count + 1;
  names[count] := name;
  phones[count] := phone;
end;

procedure ListContacts;
var
  i: integer;
begin
  writeln('--- CONTACTS (', count, ') ---');
  for i := 1 to count do
    writeln(i:2, '. ', names[i]:15, ' -> ', phones[i]);
end;

procedure Search(name: string);
var
  i: integer;
  found: boolean;
begin
  found := false;
  for i := 1 to count do
    if lowercase(names[i]) = lowercase(name) then
    begin
      writeln('Found: ', names[i], ' -> ', phones[i]);
      found := true;
    end;
  if not found then
    writeln('"', name, '" not found');
end;

procedure SearchPartial(text: string);
var
  i: integer;
begin
  writeln('Contacts containing "', text, '":');
  for i := 1 to count do
    if pos(lowercase(text), lowercase(names[i])) > 0 then
      writeln('  ', names[i], ' -> ', phones[i]);
end;

begin
  Init;

  AddContact('Ali Mohammadi', '0912-111-2222');
  AddContact('Sara Ahmadi', '0935-333-4444');
  AddContact('Mohammad Rezaei', '0919-555-6666');
  AddContact('Neda Karimi', '0912-777-8888');

  ListContacts;

  writeln;
  Search('Sara Ahmadi');
  Search('Nobody');

  writeln;
  SearchPartial('moha');
end.

مفاهیم به‌کاررفته

مفهومکجا؟
آرایه‌های موازیnames و phones با ایندکس مشترک
رویه‌های CRUDAdd، List، Search
جستجوی دقیقمقایسه با lowercase (بدون حساسیت)
جستجوی جزئیpos برای پیدا کردن زیررشته
مدیریت ظرفیتچک MaxContacts قبل از افزودن

چالش‌های تکمیلی

  1. حذف مخاطب (جابجایی عناصر آخر به جا)
  2. ویرایش شماره با جستجو
  3. مرتب‌سازی بر اساس اسم
  4. منوی تعاملی با case و repeat

تبریک! 🎉

شما دوره کامل پاسکال را تمام کردید! از «سلام دنیا» تا سیستم‌های کامل با آرایه‌ها و رویه‌ها. حالا می‌توانید:

این مبحث بخشی از دوره آموزش کامل پاسکال است.

ابزارهای مرتبط