پروژه دفترچه تلفن
پروژه دفترچه تلفن یک برنامه ساده اما کاربردی است که به کاربران امکان میدهد اطلاعات تماس (مانند نام و شماره تلفن) را ذخیره، جستجو، ویرایش و حذف کنند. این پروژه میتواند به عنوان یک تمرین آموزشی برای یادگیری مفاهیم پایهای برنامهنویسی و کار با ساختمان دادهها استفاده شود. در این مقاله، پروژه دفترچه تلفن را به سه زبان برنامهنویسی C++، Python و Java پیادهسازی میکنیم. این دفترچه تلفن قابلیتهای زیر را دارد:
اضافه کردن مخاطب: افزودن یک مخاطب جدید به دفترچه.
جستجوی مخاطب: جستجوی یک مخاطب بر اساس نام.
حذف مخاطب: حذف یک مخاطب از دفترچه.
نمایش همه مخاطبین: نمایش تمام مخاطبین موجود.
ذخیره دادهها در فایل: ذخیره اطلاعات مخاطبین در یک فایل.
بازیابی دادهها از فایل: بارگذاری اطلاعات مخاطبین از فایل.
در هر زبان، از فایلها برای ذخیره و بازیابی دادهها استفاده میشود. همچنین، لیست توابع و کاربرد هر یک در برنامه توضیح داده میشود.
پیاده سازی در ++C :
ساختمان دادهها و توابع
- ساختمان داده: از یک لیست پیوندی (Linked List) برای ذخیره مخاطبین استفاده میشود.
- فایل: دادهها در یک فایل متنی ذخیره و بازیابی میشوند.
توابع و کاربرد آنها
addContact
: یک مخاطب جدید به لیست اضافه میکند.searchContact
: یک مخاطب را بر اساس نام جستجو میکند.deleteContact
: یک مخاطب را از لیست حذف میکند.displayContacts
: تمام مخاطبین را نمایش میدهد.saveToFile
: اطلاعات مخاطبین را در یک فایل ذخیره میکند.loadFromFile
: اطلاعات مخاطبین را از فایل بازیابی میکند.
#include
#include
#include
using namespace std;
struct Contact {
string name;
string phone;
Contact* next;
};
class PhoneBook {
private:
Contact* head;
public:
PhoneBook() : head(nullptr) {}
void addContact(string name, string phone) {
Contact* newContact = new Contact{name, phone, nullptr};
if (!head) {
head = newContact;
} else {
Contact* temp = head;
while (temp->next) {
temp = temp->next;
}
temp->next = newContact;
}
cout << "Contact added successfully!\n";
}
void searchContact(string name) {
Contact* temp = head;
while (temp) {
if (temp->name == name) {
cout << "Name: " << temp->name << ", Phone: " << temp->phone << endl;
return;
}
temp = temp->next;
}
cout << "Contact not found!\n";
}
void deleteContact(string name) {
if (!head) return;
if (head->name == name) {
Contact* temp = head;
head = head->next;
delete temp;
cout << "Contact deleted successfully!\n";
return;
}
Contact* temp = head;
while (temp->next) {
if (temp->next->name == name) {
Contact* toDelete = temp->next;
temp->next = temp->next->next;
delete toDelete;
cout << "Contact deleted successfully!\n";
return;
}
temp = temp->next;
}
cout << "Contact not found!\n";
}
void displayContacts() {
Contact* temp = head;
while (temp) {
cout << "Name: " << temp->name << ", Phone: " << temp->phone << endl;
temp = temp->next;
}
}
void saveToFile(string filename) {
ofstream file(filename);
Contact* temp = head;
while (temp) {
file << temp->name << "," << temp->phone << endl;
temp = temp->next;
}
file.close();
cout << "Contacts saved to file!\n";
}
void loadFromFile(string filename) {
ifstream file(filename);
string line;
while (getline(file, line)) {
size_t pos = line.find(",");
string name = line.substr(0, pos);
string phone = line.substr(pos + 1);
addContact(name, phone);
}
file.close();
cout << "Contacts loaded from file!\n";
}
};
int main() {
PhoneBook pb;
pb.loadFromFile("contacts.txt");
pb.addContact("Ali", "123456789");
pb.addContact("Reza", "987654321");
pb.displayContacts();
pb.searchContact("Ali");
pb.deleteContact("Reza");
pb.displayContacts();
pb.saveToFile("contacts.txt");
return 0;
}
پیاده سازی در Python :
ساختمان دادهها و توابع
ساختمان داده: از یک دیکشنری (Dictionary) برای ذخیره مخاطبین استفاده میشود.
فایل: دادهها در یک فایل متنی ذخیره و بازیابی میشوند.
توابع و کاربرد آنها
add_contact
: یک مخاطب جدید به دیکشنری اضافه میکند.search_contact
: یک مخاطب را بر اساس نام جستجو میکند.delete_contact
: یک مخاطب را از دیکشنری حذف میکند.display_contacts
: تمام مخاطبین را نمایش میدهد.save_to_file
: اطلاعات مخاطبین را در یک فایل ذخیره میکند.load_from_file
: اطلاعات مخاطبین را از فایل بازیابی میکند.
class PhoneBook:
def __init__(self):
self.contacts = {}
def add_contact(self, name, phone):
self.contacts[name] = phone
print("Contact added successfully!")
def search_contact(self, name):
if name in self.contacts:
print(f"Name: {name}, Phone: {self.contacts[name]}")
else:
print("Contact not found!")
def delete_contact(self, name):
if name in self.contacts:
del self.contacts[name]
print("Contact deleted successfully!")
else:
print("Contact not found!")
def display_contacts(self):
for name, phone in self.contacts.items():
print(f"Name: {name}, Phone: {phone}")
def save_to_file(self, filename):
with open(filename, "w") as file:
for name, phone in self.contacts.items():
file.write(f"{name},{phone}\n")
print("Contacts saved to file!")
def load_from_file(self, filename):
with open(filename, "r") as file:
for line in file:
name, phone = line.strip().split(",")
self.contacts[name] = phone
print("Contacts loaded from file!")
# Example usage
pb = PhoneBook()
pb.load_from_file("contacts.txt")
pb.add_contact("Ali", "123456789")
pb.add_contact("Reza", "987654321")
pb.display_contacts()
pb.search_contact("Ali")
pb.delete_contact("Reza")
pb.display_contacts()
pb.save_to_file("contacts.txt")
پیاده سازی در java :
ساختمان دادهها و توابع
ساختمان داده: از یک HashMap برای ذخیره مخاطبین استفاده میشود.
فایل: دادهها در یک فایل متنی ذخیره و بازیابی میشوند.
توابع و کاربرد آنها
addContact
: یک مخاطب جدید به HashMap اضافه میکند.searchContact
: یک مخاطب را بر اساس نام جستجو میکند.deleteContact
: یک مخاطب را از HashMap حذف میکند.displayContacts
: تمام مخاطبین را نمایش میدهد.saveToFile
: اطلاعات مخاطبین را در یک فایل ذخیره میکند.loadFromFile
: اطلاعات مخاطبین را از فایل بازیابی میکند.
import java.io.*;
import java.util.HashMap;
import java.util.Map;
public class PhoneBook {
private Map contacts;
public PhoneBook() {
contacts = new HashMap<>();
}
public void addContact(String name, String phone) {
contacts.put(name, phone);
System.out.println("Contact added successfully!");
}
public void searchContact(String name) {
if (contacts.containsKey(name)) {
System.out.println("Name: " + name + ", Phone: " + contacts.get(name));
} else {
System.out.println("Contact not found!");
}
}
public void deleteContact(String name) {
if (contacts.containsKey(name)) {
contacts.remove(name);
System.out.println("Contact deleted successfully!");
} else {
System.out.println("Contact not found!");
}
}
public void displayContacts() {
for (Map.Entry entry : contacts.entrySet()) {
System.out.println("Name: " + entry.getKey() + ", Phone: " + entry.getValue());
}
}
public void saveToFile(String filename) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename))) {
for (Map.Entry entry : contacts.entrySet()) {
writer.write(entry.getKey() + "," + entry.getValue() + "\n");
}
System.out.println("Contacts saved to file!");
} catch (IOException e) {
System.out.println("Error saving to file!");
}
}
public void loadFromFile(String filename) {
try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
String line;
while ((line = reader.readLine()) != null) {
String[] parts = line.split(",");
contacts.put(parts[0], parts[1]);
}
System.out.println("Contacts loaded from file!");
} catch (IOException e) {
System.out.println("Error loading from file!");
}
}
public static void main(String[] args) {
PhoneBook pb = new PhoneBook();
pb.loadFromFile("contacts.txt");
pb.addContact("Ali", "123456789");
pb.addContact("Reza", "987654321");
pb.displayContacts();
pb.searchContact("Ali");
pb.deleteContact("Reza");
pb.displayContacts();
pb.saveToFile("contacts.txt");
}
}
دیدگاهتان را بنویسید