PDA

View Full Version : سوال: مشکل با کلاس ها در C#‎



milad_d993
شنبه 16 آذر 1392, 16:44 عصر
سلام دوستان
سوال:


کلاسی به نام دفترچه تلفن ایجاد کنید که دارای متد های add, delete, search باشد.



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



حذف بر اساس نام انجام شود.



همچنین دارای صفتی برای برگرداندن درصد استفاده از دفتر تلفن باشد. (دفترچه تلفن به صورت پیش فرض دارای 50 نفر ظرفیت باشد).



همچنین در زمان ایجاد دفترچه تلفن بتوان تعداد عناصر آن را تعیین کرد. (2 تابع سازنده لازم است)

دوستان من این کلاس رو نوشتم:

phonBook.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PhoneBook
{
public class PersonInfo
{
string _name;
string _number;
public string Name
{
set
{
_name = value;
}
get
{
return _name;
}

}
public string Number
{
set
{
_number = value;
}
get
{
return _number;
}
}
}

class PhoneBook
{
PersonInfo[] person;
int max = 50;
int count = 0;
int i;

public PhoneBook(int m)
{
max = m;
person = new PersonInfo[m];
}

public int add_person(PersonInfo p)
{
if (count <= max)
{
if (search_person(p.Name) == null)
{
count++;
person[count] = p;
return 1;
}
return -1;
}
return 0;
}

public PersonInfo search_person(string name)
{
PersonInfo result = new PersonInfo();

result = null;

for (i = 0; i < count; i++)
if (person[i].Name == name)
{
result = person[i];
break;
}
return result;
}

public bool delete_person(string name)
{
bool s = false;
for (i = 0; i < count; i++)
{
if (person[i].Name == name)
s = true;
if (s)
person[i] = person[i + 1];
}
if (s)
{
count--;
return true;
}
return false;
}

public int percent()
{
return (count * 100) / max;
}
}
}





form1.cs


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace PhoneBook
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

PhoneBook phBook = new PhoneBook(50);

private void button1_Click(object sender, EventArgs e)
{
PersonInfo man = new PersonInfo();
int s;
man.Name = nameTbx.Text;
man.Number = numberTxb.Text;
s = phBook.add_person(man);
if (s == 0)
MessageBox.Show("دفترچه تلفن پر است!!!");
else if (s == -1)
MessageBox.Show("نام تکراری است!!!");
else
{
progressBar1.Value = phBook.percent();
label3.Text = phBook.percent().ToString() + "%";
}
}

private void button2_Click(object sender, EventArgs e)
{
PersonInfo man = new PersonInfo();
man = phBook.search_person(txbName.Text);
if (man != null)
MessageBox.Show(man.Number);
else
MessageBox.Show("یافت نشد!!!");
}

private void button3_Click(object sender, EventArgs e)
{
bool s;
s = phBook.delete_person(txbName.Text);
if (s)
{
MessageBox.Show("حذف شد...");
progressBar1.Value = phBook.percent();
label3.Text = phBook.percent().ToString() + "%";
}
else
MessageBox.Show("حذف نشد!!!");

}
}
}



اولین دفعه که مقداری توش نیست، و اطلاعات رو add میکنم درست کار میکنه؛ ولی دفعه های بعد کار نمیکنه
میشه بگین مشکلش چیه؟؟؟

خود برنامه رو هم ضمیمه کردم

ممنون از جوابهاتون...

sadepush
شنبه 16 آذر 1392, 19:12 عصر
شما هیچ محلی برای ذخیره ندارین
پس کجا میخواین ذخیره کنید؟

بهتون توصیه میکنم برای دفتر تلفن از Hashtable استفاده کنید

این روش آسون ترین روش هست

اگه خواستین بگین واستون در این مورد توضیح بدیم

esafb52
شنبه 16 آذر 1392, 19:14 عصر
شما خطا رو بذارین

milad_d993
شنبه 16 آذر 1392, 20:52 عصر
شما خطا رو بذارین
از خط 72 phonBook.cs خطا میگیره:
Object reference not set to an instance of an object.

vb8334
شنبه 16 آذر 1392, 21:27 عصر
دوست عزیز شما در ابتدا متغیر count رو اضافه میکنی و بعد person رو اضافه میکنی که ایرادش اینجا بود.

public int add_person(PersonInfo p)
{
if (count <= max)
{
if (search_person(p.Name) == null)
{
person[count] = p;
count++;
return 1;
}
return -1;
}
return 0;
}

موفق باشی