用c++设计一个通讯录系统,联系人基本信息包括:联系人姓名、手机号码、邮 箱、工作单位、家庭住址等基本信息,完成下面的功能需求,根据功能需求选 择合适的逻辑结构和存储结构。 二、功能需求 (1)增加功能:能添加新的联系人信息。 (2)删除功能:能够删除通讯录中的联系人。 (3)修改功能:能够对通讯录中的联系人信息进行修改。 (4)查询功能:通过员工号查询员工信息,并显示该员工所有信息。 (5)排序功能:可以对联系人信息排序,对联系人姓名按照字典序排序, 之后显示排序后的通讯录所有联系人信息。 (6)显示功能:显示通讯录中所有联系人信息。 另一功能:能够从文本中读取联系人信息,对联系人信息更改之后可以将 通讯录中联系人信息保存到文本中,方便下次读取。
时间: 2024-03-18 13:46:08 浏览: 47
好的,这是一个很完整的功能需求。以下是我提供的一个简单的设计思路:
1. 逻辑结构:由于需要支持添加、删除、修改、查询等操作,我们可以使用链表来存储联系人信息。链表的节点可以定义为一个结构体,存储联系人姓名、手机号码、邮箱、工作单位、家庭住址等信息,同时包含指向下一个节点的指针。
2. 存储结构:可以使用文件来存储联系人信息。每个联系人的信息占用一行,可以使用逗号或其他符号分隔各个字段。在程序启动时,读取文件中的信息,构建链表,程序结束时,将链表的信息保存回文件中。
3. 增加功能:用户输入联系人信息后,将其作为一个节点插入到链表的末尾即可。
4. 删除功能:用户输入联系人姓名或手机号码等信息后,遍历链表,找到该节点并将其从链表中删除。
5. 修改功能:用户输入联系人姓名或手机号码等信息后,遍历链表,找到该节点,再根据用户输入的新信息修改节点中的相应字段。
6. 查询功能:用户输入联系人姓名或手机号码等信息后,遍历链表,找到该节点并显示其所有信息。
7. 排序功能:使用冒泡排序等算法,对链表中的联系人姓名进行排序,然后遍历链表,显示排序后的所有联系人信息。
8. 显示功能:遍历链表,显示所有联系人信息。
9. 读取和保存功能:在程序启动时,读取文件中的信息,构建链表。在程序结束时,将链表的信息保存回文件中。
以上是一个简单的设计思路,可以根据实际需求进行修改和完善。
相关问题
写c++程序:设计一个通讯录系统,联系人基本信息包括:联系人姓名、手机号码、邮 箱、工作单位、家庭住址等基本信息,完成下面的功能需求,根据功能需求选 择合适的逻辑结构和存储结构。 二、功能需求 (1)增加功能:能添加新的联系人信息。 (2)删除功能:能够删除通讯录中的联系人。 (3)修改功能:能够对通讯录中的联系人信息进行修改。 (4)查询功能:通过员工号查询员工信息,并显示该员工所有信息。 (5)排序功能:可以对联系人信息排序,对联系人姓名按照字典序排序, 之后显示排序后的通讯录所有联系人信息。 (6)显示功能:显示通讯录中所有联系人信息。 另一功能:能够从文本中读取联系人信息,对联系人信息更改之后可以将 通讯录中联系人信息保存到文本中,方便下次读取。
好的,以下是一个简单的通讯录系统的C++代码,实现了您所需的所有功能:
```cpp
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
// 节点结构体
struct ContactNode {
string name;
string phone;
string email;
string company;
string address;
ContactNode* next;
};
// 链表类
class ContactList {
public:
// 构造函数
ContactList() {
head = nullptr;
}
// 析构函数
~ContactList() {
ContactNode* current = head;
while (current != nullptr) {
ContactNode* temp = current;
current = current->next;
delete temp;
}
}
// 增加联系人
void addContact() {
ContactNode* newContact = new ContactNode;
cout << "请输入联系人姓名:";
cin >> newContact->name;
cout << "请输入联系人手机号码:";
cin >> newContact->phone;
cout << "请输入联系人邮箱:";
cin >> newContact->email;
cout << "请输入联系人工作单位:";
cin >> newContact->company;
cout << "请输入联系人家庭住址:";
cin >> newContact->address;
newContact->next = head;
head = newContact;
cout << "联系人添加成功!" << endl;
}
// 删除联系人
void deleteContact() {
string name;
cout << "请输入要删除的联系人姓名:";
cin >> name;
ContactNode* current = head;
ContactNode* prev = nullptr;
while (current != nullptr) {
if (current->name == name) {
if (prev == nullptr) {
head = current->next;
} else {
prev->next = current->next;
}
delete current;
cout << "联系人删除成功!" << endl;
return;
} else {
prev = current;
current = current->next;
}
}
cout << "找不到要删除的联系人!" << endl;
}
// 修改联系人
void modifyContact() {
string name;
cout << "请输入要修改的联系人姓名:";
cin >> name;
ContactNode* current = head;
while (current != nullptr) {
if (current->name == name) {
cout << "请输入联系人手机号码:";
cin >> current->phone;
cout << "请输入联系人邮箱:";
cin >> current->email;
cout << "请输入联系人工作单位:";
cin >> current->company;
cout << "请输入联系人家庭住址:";
cin >> current->address;
cout << "联系人修改成功!" << endl;
return;
} else {
current = current->next;
}
}
cout << "找不到要修改的联系人!" << endl;
}
// 查询联系人
void searchContact() {
string name;
cout << "请输入要查询的联系人姓名:";
cin >> name;
ContactNode* current = head;
while (current != nullptr) {
if (current->name == name) {
cout << "姓名:" << current->name << endl;
cout << "手机号码:" << current->phone << endl;
cout << "邮箱:" << current->email << endl;
cout << "工作单位:" << current->company << endl;
cout << "家庭住址:" << current->address << endl;
return;
} else {
current = current->next;
}
}
cout << "找不到要查询的联系人!" << endl;
}
// 排序联系人
void sortContact() {
int size = 0;
ContactNode* current = head;
while (current != nullptr) {
size++;
current = current->next;
}
ContactNode** arr = new ContactNode*[size];
current = head;
for (int i = 0; i < size; i++) {
arr[i] = current;
current = current->next;
}
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (arr[j]->name > arr[j + 1]->name) {
swap(arr[j], arr[j + 1]);
}
}
}
head = arr[0];
current = head;
for (int i = 1; i < size; i++) {
current->next = arr[i];
current = current->next;
}
current->next = nullptr;
cout << "联系人排序成功!" << endl;
}
// 显示所有联系人
void displayAll() {
ContactNode* current = head;
while (current != nullptr) {
cout << "姓名:" << current->name << endl;
cout << "手机号码:" << current->phone << endl;
cout << "邮箱:" << current->email << endl;
cout << "工作单位:" << current->company << endl;
cout << "家庭住址:" << current->address << endl << endl;
current = current->next;
}
}
// 从文件中读取联系人信息
void readFromFile() {
ifstream infile("contacts.txt");
if (!infile.is_open()) {
cout << "无法打开文件!" << endl;
return;
}
string name, phone, email, company, address;
while (infile >> name >> phone >> email >> company >> address) {
ContactNode* newContact = new ContactNode;
newContact->name = name;
newContact->phone = phone;
newContact->email = email;
newContact->company = company;
newContact->address = address;
newContact->next = head;
head = newContact;
}
infile.close();
cout << "联系人信息读取成功!" << endl;
}
// 将联系人信息保存到文件中
void writeToFile() {
ofstream outfile("contacts.txt");
if (!outfile.is_open()) {
cout << "无法打开文件!" << endl;
return;
}
ContactNode* current = head;
while (current != nullptr) {
outfile << current->name << " " << current->phone << " " << current->email << " " << current->company << " " << current->address << endl;
current = current->next;
}
outfile.close();
cout << "联系人信息保存成功!" << endl;
}
private:
ContactNode* head;
};
// 主函数
int main() {
ContactList contacts;
cout << "欢迎使用通讯录系统!" << endl;
contacts.readFromFile();
while (true) {
cout << endl;
cout << "请选择要进行的操作:" << endl;
cout << "1. 增加联系人" << endl;
cout << "2. 删除联系人" << endl;
cout << "3. 修改联系人" << endl;
cout << "4. 查询联系人" << endl;
cout << "5. 排序联系人" << endl;
cout << "6. 显示所有联系人" << endl;
cout << "7. 保存联系人信息到文件" << endl;
cout << "8. 退出通讯录系统" << endl;
int choice;
cin >> choice;
switch (choice) {
case 1:
contacts.addContact();
break;
case 2:
contacts.deleteContact();
break;
case 3:
contacts.modifyContact();
break;
case 4:
contacts.searchContact();
break;
case 5:
contacts.sortContact();
break;
case 6:
contacts.displayAll();
break;
case 7:
contacts.writeToFile();
break;
case 8:
contacts.writeToFile();
cout << "感谢使用通讯录系统!" << endl;
return 0;
default:
cout << "无效的选项!" << endl;
break;
}
}
}
```
注意,在运行程序之前,需要先创建一个名为 "contacts.txt" 的文本文件,用于存储联系人信息。另外,以上代码只是一个简单的实现,您可以根据需要进行修改和完善。
写c++程序 设计一个通讯录系统,联系人基本信息包括:联系人姓名、手机号码、邮箱、工作单位、家庭住址等基本信息,完成下面的功能需求,根据功能需求选择合适的逻辑结构和存储结构。二、功能需求(1)增加功能:能添加新的联系人信息。(2)删除功能:能够删除通讯录中的联系人。(3)修改功能:能够对通讯录中的联系人信息进行修改。(4)查询功能:通过员工号查询员工信息,并显示该员工所有信息。(5)排序功能:可以对联系人信息排序,对联系人姓名按照字典序排序,之后显示排序后的通讯录所有联系人信息。(6)显示功能:显示通讯录中所有联系人信息。功能:能够从文本中读取联系人信息,对联系人信息更改之后可以将通讯录中联系人信息保存到文本中,方便下次读取。
好,这是一个比较详细的功能需求,我可以为你提供一个基本的 C++ 程序框架,你可以在此基础上进行修改和完善,实现你所需要的功能。程序主要分为以下几个部分:
1. 定义联系人结构体
```
struct Contact {
std::string name;
std::string phone;
std::string email;
std::string company;
std::string address;
};
```
2. 定义通讯录类
```
class AddressBook {
public:
// 添加联系人
void addContact(const Contact& contact);
// 删除联系人
void deleteContact(const std::string& name);
// 修改联系人信息
void modifyContact(const std::string& name, const Contact& contact);
// 查询联系人信息
void queryContact(const std::string& name);
// 排序联系人信息
void sortContacts();
// 显示所有联系人信息
void displayAllContacts();
// 从文件中读取联系人信息
void readContactsFromFile(const std::string& filename);
// 将联系人信息保存到文件中
void saveContactsToFile(const std::string& filename);
private:
std::vector<Contact> contacts_;
};
```
3. 实现通讯录类的各个方法
```
void AddressBook::addContact(const Contact& contact) {
contacts_.push_back(contact);
}
void AddressBook::deleteContact(const std::string& name) {
for (auto it = contacts_.begin(); it != contacts_.end(); ++it) {
if (it->name == name) {
contacts_.erase(it);
break;
}
}
}
void AddressBook::modifyContact(const std::string& name, const Contact& contact) {
for (auto& c : contacts_) {
if (c.name == name) {
c.phone = contact.phone;
c.email = contact.email;
c.company = contact.company;
c.address = contact.address;
break;
}
}
}
void AddressBook::queryContact(const std::string& name) {
for (const auto& c : contacts_) {
if (c.name == name) {
std::cout << "Name: " << c.name << std::endl;
std::cout << "Phone: " << c.phone << std::endl;
std::cout << "Email: " << c.email << std::endl;
std::cout << "Company: " << c.company << std::endl;
std::cout << "Address: " << c.address << std::endl;
return;
}
}
std::cout << "Contact not found." << std::endl;
}
void AddressBook::sortContacts() {
std::sort(contacts_.begin(), contacts_.end(), [](const Contact& c1, const Contact& c2) {
return c1.name < c2.name;
});
}
void AddressBook::displayAllContacts() {
for (const auto& c : contacts_) {
std::cout << "Name: " << c.name << std::endl;
std::cout << "Phone: " << c.phone << std::endl;
std::cout << "Email: " << c.email << std::endl;
std::cout << "Company: " << c.company << std::endl;
std::cout << "Address: " << c.address << std::endl;
std::cout << std::endl;
}
}
void AddressBook::readContactsFromFile(const std::string& filename) {
std::ifstream file(filename);
if (!file.is_open()) {
std::cerr << "Failed to open file: " << filename << std::endl;
return;
}
std::string line;
while (std::getline(file, line)) {
std::vector<std::string> fields;
std::istringstream iss(line);
std::string field;
while (std::getline(iss, field, ',')) {
fields.push_back(field);
}
if (fields.size() != 5) {
std::cerr << "Invalid file format." << std::endl;
return;
}
Contact contact;
contact.name = fields[0];
contact.phone = fields[1];
contact.email = fields[2];
contact.company = fields[3];
contact.address = fields[4];
addContact(contact);
}
}
void AddressBook::saveContactsToFile(const std::string& filename) {
std::ofstream file(filename);
if (!file.is_open()) {
std::cerr << "Failed to open file: " << filename << std::endl;
return;
}
for (const auto& c : contacts_) {
file << c.name << "," << c.phone << "," << c.email << "," << c.company << "," << c.address << std::endl;
}
}
```
4. 在主函数中使用通讯录类
```
int main() {
AddressBook addressBook;
addressBook.readContactsFromFile("contacts.txt");
while (true) {
int choice;
std::cout << "1. Add contact" << std::endl;
std::cout << "2. Delete contact" << std::endl;
std::cout << "3. Modify contact" << std::endl;
std::cout << "4. Query contact" << std::endl;
std::cout << "5. Sort contacts" << std::endl;
std::cout << "6. Display all contacts" << std::endl;
std::cout << "7. Save contacts to file" << std::endl;
std::cout << "8. Exit" << std::endl;
std::cout << "Enter your choice: ";
std::cin >> choice;
switch (choice) {
case 1: {
Contact contact;
std::cout << "Enter name: ";
std::cin >> contact.name;
std::cout << "Enter phone: ";
std::cin >> contact.phone;
std::cout << "Enter email: ";
std::cin >> contact.email;
std::cout << "Enter company: ";
std::cin >> contact.company;
std::cout << "Enter address: ";
std::cin >> contact.address;
addressBook.addContact(contact);
std::cout << "Contact added." << std::endl;
break;
}
case 2: {
std::string name;
std::cout << "Enter name: ";
std::cin >> name;
addressBook.deleteContact(name);
std::cout << "Contact deleted." << std::endl;
break;
}
case 3: {
std::string name;
Contact contact;
std::cout << "Enter name: ";
std::cin >> name;
std::cout << "Enter phone: ";
std::cin >> contact.phone;
std::cout << "Enter email: ";
std::cin >> contact.email;
std::cout << "Enter company: ";
std::cin >> contact.company;
std::cout << "Enter address: ";
std::cin >> contact.address;
addressBook.modifyContact(name, contact);
std::cout << "Contact modified." << std::endl;
break;
}
case 4: {
std::string name;
std::cout << "Enter name: ";
std::cin >> name;
addressBook.queryContact(name);
break;
}
case 5: {
addressBook.sortContacts();
std::cout << "Contacts sorted." << std::endl;
break;
}
case 6: {
addressBook.displayAllContacts();
break;
}
case 7: {
addressBook.saveContactsToFile("contacts.txt");
std::cout << "Contacts saved to file." << std::endl;
break;
}
case 8: {
return 0;
}
default: {
std::cout << "Invalid choice." << std::endl;
break;
}
}
}
return 0;
}
```
这个程序框架可以实现你所需的基本功能,你可以根据需求进行修改和完善。
阅读全文