现在的位置: 首页 > 综合 > 正文

[期末小项目]通讯录,basic version

2014年02月01日 ⁄ 综合 ⁄ 共 5140字 ⁄ 字号 评论关闭
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
//what a lonely project 2013-11-11 20:48:12 to 2013-11-13 18:36:16

//define a data stype - contact
struct contact{
	bool existence;
	int index;
	char name[20];
	char email[35];
	char cellphone[25];
	char qq[15];
};

void deleteperson(contact *person);
void addcontact(int begin, contact *person);
void quit(contact *person);
void findname(contact *person);
void findemail(contact *person);
void findcellphone(contact *person);
void findqq(contact *person);
void findall(contact *person);

//load the data
int main(){
	contact person[20];
	int begin = 0;
	
	for (int i = 0; i < 20; ++i){
		person[i].existence = 0;
	}
	
	//read the data from the saved text
	ifstream fin;
	fin.open("contact.txt");
	for (int i = 0; i < 20; ++i){
		person[i].index = -1;
	}
	for (int i = 0; i < 20; ++i){
		char invalue;
		fin >> invalue;
		fin >> person[i].name;
		fin >> person[i].email;
		fin >> person[i].cellphone;
		fin >> person[i].qq;
		if (fin.get() == EOF)
			break;
		++begin;
		person[i].existence = 1;
	}
	
	//interface
	fmain:
	cout << "-- Main menu --" << endl;
	cout << "1. add a contact" << endl;
	cout << "2. find contacts" << endl;
	cout << "3. delete a contact" << endl;
	cout << "9. exit" << endl;
	
	int selection;
	cin >> selection;
	switch (selection){
	case 1:	
		addcontact(begin, person);
		goto fmain;
		break;
	case 2:
	//find contacts
		cout << "-- Find contacts --" << endl;
		cout << "1. Find by name" << endl;
		cout << "2. Find by email" << endl;
		cout << "3. Find by cellphone" << endl;
		cout << "4. Find by QQ" << endl;
		cout << "5. Find all" << endl;
		int choice;
		cin >> choice;
	
		switch (choice){
			case 1:
				findname(person);
				break;
			case 2:
				findemail(person);
				break;
			case 3:
				findcellphone(person);
				break;
			case 4:
				findqq(person);
				break;
			case 5:
				findall(person);
				break;
			default:
				cout << "Wrong choice" << endl;
				break;
		}
		
		goto fmain;
		break;
	case 3:
		deleteperson(person);
		goto fmain;
		break;
	case 9:
		quit(person);
		break;
	default:
		cout << "Wrong choice" << endl;
		goto fmain;
		return 0;
	}
}

//exit the program
void quit(contact *person){
	cout << "-- Exit --" << endl;
	cout << "1. exit without save" << endl;
	cout << "2. save and exit" << endl;
	int choice;
	cin >> choice;
	if (1 == choice)	return;
	ofstream fout;
	fout.open("contact.txt");	//open the file
	
	//write the data into a text
	int i = 0, t = 0;
	while (i < 20){
		if (person[i].existence){
			fout << i + 1 << endl;
			fout << person[i].name << endl;
			fout << person[i].email << endl;
			fout << person[i].cellphone << endl;
			fout << person[i].qq << endl;
			++t;
		}	
		++i;
	}
	if (!t){
		fout << "0" << endl;
	}
	fout.close();//close the file
}

bool compare(char a[20], char b[20]){	//search a in b from b's the first character
	for (int k = 0; a[k] != '\0'; ++k){
		if (a[k] != b[k])	return 0;
	}
	return 1;
}

//add a contact
void addcontact(int begin, contact *person){
	static int times = begin;
	cout << "-- Add a contact --" << endl;
	cout << "name:";
	cin >> person[times].name;
	cout << "email:";
	cin >> person[times].email;
	cout << "cellphone:";
	cin >> person[times].cellphone;
	cout << "QQ:";
	cin >> person[times].qq;
	for (int i = 0; i < 20; ++i){
		if ((person[i].existence) && (compare(person[times].name, person[i].name))){
			cout << "Error: name already exists" << endl;
			return;
		}
	}
	person[times].existence = 1;
}

void findall(contact *person){
	int amout = 0;
	
	for (int i = 0; i < 20; ++i){
		if (person[i].existence)
			++amout;
	}

	if (!amout){
		cout << "Not found" << endl;
		return;
	}
	
	for (int k = 0; k < 20; ++k){
		if (person[k].existence){
			if (person[k].index < 0)
				person[k].index = k + 1;
			cout << person[k].index << ". "
				<< person[k].name << ", "
				<< "Email:" << person[k].email << ", "
				<< "Cellphone:" << person[k].cellphone << ", "
				<< "QQ:" << person[k].qq << endl;
		}
	}
	return;
}

void findqq(contact *person){
	cout << "-- Find contacts by QQ --" << endl;
	cout << "QQ:";
	char QQ[15];
	cin >> QQ;
	int sum = 0;
	for (int k = 0; k < 20; ++k){
		if (person[k].existence){
			if (compare(person[k].qq, QQ)){
				++sum;
				person[k].index = sum;
				cout << person[k].index << ". "
					<< person[k].name << ", "
					<< "Email:" << person[k].email << ", "
					<< "Cellphone:" << person[k].cellphone << ", "
					<< "QQ:" << person[k].qq << endl;				
			}
		}
	}
	if (!sum)
		cout << "Not found" << endl;
}

void findcellphone(contact *person){
	cout << "-- Find contacts by cell --" << endl;
	cout << "cell:";
	char QQ[15];
	cin >> QQ;
	int sum = 0;
	for (int k = 0; k < 20; ++k){
		if (person[k].existence){
			if (compare(person[k].cellphone, QQ)){
				++sum;
				person[k].index = sum;
				cout << person[k].index << ". "
					<< person[k].name << ", "
					<< "Email:" << person[k].email << ", "
					<< "Cellphone:" << person[k].cellphone << ", "
					<< "QQ:" << person[k].qq << endl;				
			}
		}
	}
	if (!sum)
		cout << "Not found" << endl;
}

void findname(contact *person){
	cout << "-- Find contacts by name --" << endl;
	cout << "name:";
	char QQ[15];
	cin >> QQ;
	int sum = 0;
	for (int k = 0; k < 20; ++k){
		if (person[k].existence){
			if (compare(person[k].name, QQ)){
				++sum;
				person[k].index = sum;
				cout << person[k].index << ". "
					<< person[k].name << ", "
					<< "Email:" << person[k].email << ", "
					<< "Cellphone:" << person[k].cellphone << ", "
					<< "QQ:" << person[k].qq << endl;				
			}
		}
	}
	if (!sum)
		cout << "Not found" << endl;
}

void findemail(contact *person){
	cout << "-- Find contacts by email --" << endl;
	cout << "email:";
	char QQ[15];
	cin >> QQ;
	int sum = 0;
	for (int k = 0; k < 20; ++k){
		if (person[k].existence){
			if (compare(person[k].email, QQ)){
				++sum;
				person[k].index = sum;
				cout << person[k].index << ". "
					<< person[k].name << ", "
					<< "Email:" << person[k].email << ", "
					<< "Cellphone:" << person[k].cellphone << ", "
					<< "QQ:" << person[k].qq << endl;				
			}
		}
	}
	if (!sum)
		cout << "Not found" << endl;
}

void deleteperson(contact *person){
	cout << "-- Delete a contact--" << endl;
	cout << "Contact index:";												
	int id = 0, n = 0;
	cin >> id;
	for (int k = 0; k < 20; ++k){
		if (person[k].index > 0 && id == person[k].index){
			++n;
			person[k].existence = 0;
			cout << "Deleted: "
					<< person[k].index << ". "
					<< person[k].name << ", "
					<< "Email:" << person[k].email << ", "
					<< "Cellphone:" << person[k].cellphone << ", "
					<< "QQ:" << person[k].qq << endl;	
			--person[k + 1].index;
			return;
		}
	}
	
	if (!n){
		cout << "Error: failed to delete" << endl;
		cout << "Please 'Find' again to set indexes" << endl;
	}
}

抱歉!评论已关闭.