first
This commit is contained in:
388
main.cpp
Normal file
388
main.cpp
Normal file
@@ -0,0 +1,388 @@
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
|
||||
|
||||
using namespace std;
|
||||
|
||||
struct contacts *FindNode(string);
|
||||
|
||||
struct contacts {
|
||||
string name;
|
||||
string phone;
|
||||
string fax;
|
||||
string job;
|
||||
string email;
|
||||
string address;
|
||||
string qq;
|
||||
string folder;
|
||||
struct contacts *next;
|
||||
};
|
||||
// create head node
|
||||
contacts *head = NULL;
|
||||
|
||||
|
||||
void PrintMenu(void) {
|
||||
cout << "*********************************************************" << endl;
|
||||
cout << "1.Add contacts" << endl;
|
||||
cout << "2.Find contacts" << endl;
|
||||
cout << "3.Edit" << endl;
|
||||
cout << "4.Delete" << endl;
|
||||
cout << "5.List all" << endl;
|
||||
cout << "6.Filter and print" << endl;
|
||||
cout << "8.Load data.csv" << endl;
|
||||
cout << "9.Save to data.csv" << endl;
|
||||
cout << "0.Exit" << endl;
|
||||
cout << "*********************************************************" << endl;
|
||||
|
||||
}
|
||||
|
||||
|
||||
void DeleteAll(void) {
|
||||
contacts *p = head;
|
||||
while (p != NULL) {
|
||||
head = p->next;
|
||||
delete p;
|
||||
p = head;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
AddNode(string name, string phone, string fax, string job, string email, string address, string qq, string folder) {
|
||||
contacts *p = new contacts;
|
||||
p->name = name;
|
||||
p->phone = phone;
|
||||
p->fax = fax;
|
||||
p->job = job;
|
||||
p->email = email;
|
||||
p->address = address;
|
||||
p->qq = qq;
|
||||
p->folder = folder;
|
||||
p->next = NULL;
|
||||
if (head == NULL) {
|
||||
head = p;
|
||||
} else {
|
||||
contacts *q = head;
|
||||
while (q->next != NULL) {
|
||||
q = q->next;
|
||||
}
|
||||
q->next = p;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void AddContacts(void) {
|
||||
while (1) {
|
||||
//input a name,check if the name is already in the linked list
|
||||
//if yes,ask user to input another name
|
||||
string input_name;
|
||||
cout << "input a name:";
|
||||
cin >> input_name;
|
||||
//get the node address of the name
|
||||
contacts *p = NULL;
|
||||
p = FindNode(input_name);
|
||||
//check if the name is already in the linked list
|
||||
// if not,create a new node and add it to the linked list
|
||||
if (p == NULL) {
|
||||
//input other information
|
||||
string input_phone;
|
||||
string input_fax;
|
||||
string input_job;
|
||||
string input_email;
|
||||
string input_address;
|
||||
string input_qq;
|
||||
string input_folder;
|
||||
cout << "input phone:";
|
||||
cin >> input_phone;
|
||||
cout << "input fax:";
|
||||
cin >> input_fax;
|
||||
cout << "input job:";
|
||||
cin >> input_job;
|
||||
cout << "input email:";
|
||||
cin >> input_email;
|
||||
cout << "input address:";
|
||||
cin >> input_address;
|
||||
cout << "input qq:";
|
||||
cin >> input_qq;
|
||||
cout << "input folder:";
|
||||
cin >> input_folder;
|
||||
//add the node to the linked list
|
||||
AddNode(input_name, input_phone, input_fax, input_job, input_email, input_address, input_qq, input_folder);
|
||||
cout << "add successfully" << endl;
|
||||
|
||||
} else {
|
||||
cout << "the name is already in the linked list" << endl;
|
||||
cout << "please input another name" << endl;
|
||||
}
|
||||
//ask user continue or stop
|
||||
char input_char;
|
||||
cout << "continue?(y/n)" << endl;
|
||||
cin >> input_char;
|
||||
if (input_char == 'n') {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void FindContacts(void) {
|
||||
//find the node by name
|
||||
//output data
|
||||
struct contacts *p;
|
||||
p = head;
|
||||
cout << "input name:";
|
||||
string name;
|
||||
cin >> name;
|
||||
while (p != NULL) {
|
||||
if (p->name == name) {
|
||||
cout << "name:" << p->name << endl;
|
||||
cout << "phone:" << p->phone << endl;
|
||||
cout << "fax:" << p->fax << endl;
|
||||
cout << "job:" << p->job << endl;
|
||||
cout << "email:" << p->email << endl;
|
||||
cout << "address:" << p->address << endl;
|
||||
cout << "qq:" << p->qq << endl;
|
||||
cout << "folder:" << p->folder << endl;
|
||||
break;
|
||||
}
|
||||
p = p->next;
|
||||
}
|
||||
}
|
||||
|
||||
struct contacts *FindNode(string name) {
|
||||
//find the node by name
|
||||
// return NULL if not found
|
||||
struct contacts *p;
|
||||
p = head;
|
||||
while (p != NULL) {
|
||||
if (p->name == name) {
|
||||
return p;
|
||||
}
|
||||
p = p->next;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
struct contacts *FindNodeByFolders(string folder){
|
||||
struct contacts *p;
|
||||
p = head;
|
||||
while(p != NULL){
|
||||
if(p->folder == folder){
|
||||
return p;
|
||||
}
|
||||
p = p->next;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
*/
|
||||
void EditContacts(void) {
|
||||
//find the node by name
|
||||
//input name
|
||||
string name;
|
||||
cout << "input the name you want to edit:";
|
||||
cin >> name;
|
||||
// get node address by name
|
||||
struct contacts *p;
|
||||
p = FindNode(name);
|
||||
if (p == NULL) {
|
||||
cout << "not found" << endl;
|
||||
return;
|
||||
}
|
||||
//if it was found , then input new data
|
||||
cout << "input new name:";
|
||||
cin >> p->name;
|
||||
cout << "input new phone:";
|
||||
cin >> p->phone;
|
||||
cout << "input new fax:";
|
||||
cin >> p->fax;
|
||||
cout << "input new job:";
|
||||
cin >> p->job;
|
||||
cout << "input new email:";
|
||||
cin >> p->email;
|
||||
cout << "input new address:";
|
||||
cin >> p->address;
|
||||
cout << "input new qq:";
|
||||
cin >> p->qq;
|
||||
cout << "input new folder:";
|
||||
cin >> p->folder;
|
||||
// Edit finished
|
||||
cout << "Edit finished" << endl;
|
||||
|
||||
}
|
||||
|
||||
void DeleteContacts(void) {
|
||||
while (true) {
|
||||
//find the node by name
|
||||
//input name
|
||||
string name;
|
||||
cout << "input the name you want to delete:";
|
||||
cin >> name;
|
||||
// get node address by name
|
||||
struct contacts *p;
|
||||
p = FindNode(name);
|
||||
// check if the name is already in the linked list
|
||||
// if not ,print error message
|
||||
if (p == NULL) {
|
||||
cout << "not found" << endl;
|
||||
|
||||
}
|
||||
// if it was found , then delete it
|
||||
else {
|
||||
if (p == head) {
|
||||
head = head->next;
|
||||
} else {
|
||||
struct contacts *q = head;
|
||||
while (q->next != p) {
|
||||
q = q->next;
|
||||
}
|
||||
q->next = p->next;
|
||||
}
|
||||
delete p;
|
||||
cout << "delete successfully" << endl;
|
||||
}
|
||||
//ask user continue or stop
|
||||
char input_char;
|
||||
cout << "continue?(y/n)" << endl;
|
||||
cin >> input_char;
|
||||
if (input_char == 'n') {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ListAllContacts(void) {
|
||||
//print all the contacts as table
|
||||
struct contacts *p;
|
||||
p = head;
|
||||
cout << "name" << "\t" << "phone" << "\t" << "fax" << "\t" << "job" << "\t" << "email" << "\t" << "address" << "\t"
|
||||
<< "qq" << "\t" << "folder" << endl;
|
||||
while (p != NULL) {
|
||||
cout << p->name << "\t" << p->phone << "\t" << p->fax << "\t" << p->job << "\t" << p->email << "\t"
|
||||
<< p->address << "\t" << p->qq << "\t" << p->folder << endl;
|
||||
p = p->next;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void Filter(void) {
|
||||
//filter by folder
|
||||
string folder;
|
||||
cout << "input the folder you want to filter:";
|
||||
cin >> folder;
|
||||
// print the filter result as table
|
||||
struct contacts *p;
|
||||
p = head;
|
||||
cout << "name" << "\t" << "phone" << "\t" << "fax" << "\t" << "job" << "\t" << "email" << "\t" << "address" << "\t"
|
||||
<< "qq" << "\t" << "folder" << endl;
|
||||
while (p != NULL) {
|
||||
if (p->folder == folder) {
|
||||
cout << p->name << "\t" << p->phone << "\t" << p->fax << "\t" << p->job << "\t" << p->email << "\t"
|
||||
<< p->address << "\t" << p->qq << "\t" << p->folder << endl;
|
||||
}
|
||||
p = p->next;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// load data from csv file
|
||||
void OpenFile() {
|
||||
DeleteAll();
|
||||
// load data from csv file to linked list
|
||||
ifstream fin;
|
||||
fin.open("contacts.csv");
|
||||
if (!fin) {
|
||||
cout << "open file error" << endl;
|
||||
return;
|
||||
}
|
||||
string name, phone, fax, job, email, address, qq, folder;
|
||||
while (!fin.eof()) {
|
||||
getline(fin, name, ',');
|
||||
getline(fin, phone, ',');
|
||||
getline(fin, fax, ',');
|
||||
getline(fin, job, ',');
|
||||
getline(fin, email, ',');
|
||||
getline(fin, address, ',');
|
||||
getline(fin, qq, ',');
|
||||
getline(fin, folder);
|
||||
if (name == "") {
|
||||
break;
|
||||
}
|
||||
AddNode(name, phone, fax, job, email, address, qq, folder);
|
||||
}
|
||||
fin.close();
|
||||
}
|
||||
|
||||
|
||||
// save the data to file as csv
|
||||
void SaveToFile(void) {
|
||||
ofstream outfile;
|
||||
outfile.open("contacts.csv");
|
||||
struct contacts *p;
|
||||
p = head;
|
||||
while (p != NULL) {
|
||||
outfile << p->name << "," << p->phone << "," << p->fax << "," << p->job << "," << p->email << "," << p->address
|
||||
<< "," << p->qq << "," << p->folder << endl;
|
||||
p = p->next;
|
||||
}
|
||||
outfile.close();
|
||||
}
|
||||
|
||||
|
||||
int main() {
|
||||
while (1) {
|
||||
system("pause");
|
||||
system("cls");
|
||||
// print menu
|
||||
PrintMenu();
|
||||
// read a choice
|
||||
int choice;
|
||||
//1.Add a new contact
|
||||
//2.Find a contact
|
||||
//3.Edit a contact
|
||||
//4.Delete a contact
|
||||
//5.List all contacts
|
||||
//6.Filter by folder
|
||||
//8.Load data from file
|
||||
//9.Save data to file
|
||||
//10.Exit
|
||||
|
||||
|
||||
cout << "please input your choice:";
|
||||
cin >> choice;
|
||||
switch (choice) {
|
||||
case 1:
|
||||
AddContacts();
|
||||
break;
|
||||
case 2:
|
||||
FindContacts();
|
||||
break;
|
||||
case 3:
|
||||
EditContacts();
|
||||
break;
|
||||
case 4:
|
||||
DeleteContacts();
|
||||
break;
|
||||
case 5:
|
||||
ListAllContacts();
|
||||
break;
|
||||
case 6:
|
||||
Filter();
|
||||
break;
|
||||
case 8:
|
||||
OpenFile();
|
||||
break;
|
||||
case 9:
|
||||
SaveToFile();
|
||||
break;
|
||||
case 0:
|
||||
exit(0);
|
||||
default:
|
||||
cout << "input error" << endl;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user