⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 电话号码管理.cpp

📁 管理电话号码的c++源程序 适合课程设计等 非常不错
💻 CPP
字号:
#include<iostream.h>
#include<fstream.h>
#include<conio.h>
#include<iomanip.h>
#include<string.h>
#include<stdlib.h>
struct friend_node  //结构体类型定义,包括:姓、名和电话号码
{
	char last_name[20];
	char first_name[15];
	char phone_num[12];
	friend_node * next;
	friend_node * last;
};
class list
{
    friend_node * head_ptr;    //链头指针
    friend_node * end_ptr;     //链尾结点
	friend_node * current_ptr; //用于指明当前在链表中的位置
public:
	list()
	{	head_ptr=end_ptr=current_ptr=NULL;   }
	~list();
	void load_record_from_file();
	void add_record_to_file();
	void changephone_num();
	void handle_choise(int);
	void insert_node(friend_node *);
	void add_record();
	void display_list();
	void delete_record();
	void search_by_name();
	void search_by_lastname();
	void help_me();
};
void getchar()
{
	cout<<"\n\n按任意键继续."<<endl;
	getch();
}
int choice,n;
void main()
{
	cout<<"THIS FILE WAS WRITTEN BY HUANG KUN."<<endl<<endl;
	cout<<"欢迎来到电话簿管理系统!"<<endl;
	getchar();
	list l1;
	l1.load_record_from_file();
	do
	{
		system("cls");
		cout<<"1-添加记录"<<endl;
		cout<<"2-显示所有记录"<<endl;
		cout<<"3-查找记录"<<endl;
		cout<<"4-删除记录"<<endl;
		cout<<"5-帮助"<<endl;
		cout<<"6-修改记录"<<endl;
		cout<<"7-退出系统"<<endl;
		cout<<"请选择:";
		cin>>choice;
		l1.handle_choise(choice);
	}while(choice!=7);
}
void list::add_record()
{
	system("cls");
	friend_node * ptr=new friend_node;
	cin.ignore(20,'\n');
	cout<<"姓:";
	cin.getline(ptr->last_name,20);
	cout<<"名:";
	cin.getline(ptr->first_name,15);
	cout<<"电话号码:";
	cin.getline(ptr->phone_num,12);
	ptr->last=ptr->next=NULL;
	if(head_ptr==NULL) head_ptr=end_ptr=ptr;
	else
	{
		end_ptr->next=ptr;
		ptr->last=end_ptr;
		end_ptr=ptr;
	}
}
void list::add_record_to_file()
{
	ofstream outfile;
	outfile.open("friend.dat",ios::in);
	if(&outfile)
	{
		current_ptr=head_ptr;
		while(current_ptr)
		{
			outfile<<current_ptr->last_name<<endl;
			outfile<<current_ptr->first_name<<endl;
			outfile<<current_ptr->phone_num<<endl;
			current_ptr=current_ptr->next;
		}
		outfile<<"END OF FILE"<<endl;
		outfile.close();
	}
	else cout<<"写入失败"<<endl;
}
void list::changephone_num()
{
	cin.ignore(20,'\n');
	char lastname[20],firstname[15];
	cout<<"姓:";
	cin.getline(lastname,20);
	cout<<"名:";
	cin.getline(firstname,15);
    current_ptr=head_ptr;
	while((current_ptr!=0)&&((strcmp(current_ptr->last_name,lastname)!=0)||(strcmp(current_ptr->first_name,firstname)!=0)))
		current_ptr=current_ptr->next;
	if(current_ptr)
	{
		cout<<"\n\n姓名:"<<current_ptr->last_name<<current_ptr->first_name<<endl;
	    cout<<"电话:"<<current_ptr->phone_num<<endl;
		do
		{
			cout<<"\n1,修改姓  2,修改名  3,修改电话号码  4,退出"<<endl;
			cin>>n;
			switch(n)
			{
			case 1:
			     cin.ignore(20,'\n');
		         cout<<"姓:";
		         cin.getline(current_ptr->first_name,15);
		         break;
 	        case 2:
		         cin.ignore(20,'\n');
		         cout<<"名:";
		         cin.getline(current_ptr->last_name,20);
		         break;
	        case 3:
		         cin.ignore(20,'\n');
		         cout<<"电话号码:";
		         cin.getline(current_ptr->phone_num,20);
		         break;
			}
		}while(n!=4);
	}
	else cout<<"没有该记录!"<<endl;
}
void list::delete_record()
{
	char lastname[20],firstname[15];
	n=0;
	friend_node * ptr;
	cin.ignore(20,'\n');
	cout<<"请输入姓:";
	cin.getline(lastname,20);
	cout<<"请输入名:";
	cin.getline(firstname,15);
	ptr=head_ptr;
	if(ptr)
	{
		while((ptr!=0)&&((strcmp(ptr->last_name,lastname)!=0)||(strcmp(ptr->first_name,firstname)!=0)))
			ptr=ptr->next;
		if(ptr)
		{
			if(ptr->last) ptr->last->next=ptr->next;
			else head_ptr=ptr->next;
			if(ptr->next) ptr->next->last=ptr->last;
			else end_ptr=ptr->last;
			delete ptr;
			n++;
		}
	}
	if(n) cout<<"成功!"<<endl;
	else cout<<"无点可删!"<<endl;
	getchar();
}
list::~list()
{
	while(head_ptr)
	{
		current_ptr=head_ptr;
		head_ptr=head_ptr->next;
		delete current_ptr;
	}
}		
void list::load_record_from_file()
{
	friend_node * new_record;
	fstream infile;
	n=0;
	infile.open("friend.dat",ios::in);
	if(&infile)
	{
		do 
		{
			new_record=new friend_node;
			if(new_record)
			{
				infile.get(new_record->last_name,20);
				infile.ignore(20,'\n');
				if((strcmp(new_record->last_name,""))&&(strcmp(new_record->last_name,"END OF FILE")))
				{
					infile.get(new_record->first_name,15);
					infile.ignore(20,'\n');
					infile.get(new_record->phone_num,12);
					infile.ignore(20,'\n');
					insert_node(new_record);
				}
				else n=1;
			}
			else 
			{
				cout<<"读取失败!"<<endl;
				delete new_record;
				n=1;
			}
		}while(n==0);
		infile.close();
	}
	cout<<"读取完毕!"<<endl;
}
void list::display_list()
{
	int count=0;
	system("cls");
	cout<<"每次显示几个记录?";
	cin>>n;
	cin.ignore(20,'\n');
	system("cls");
	current_ptr=head_ptr;
	while(current_ptr)
	{
		cout<<"姓名:"<<current_ptr->last_name<<current_ptr->first_name<<endl;
	    cout<<"电话:"<<current_ptr->phone_num<<endl<<endl;
		current_ptr=current_ptr->next;
		count++;
		if(count%n==0)
		{
			getchar();
			system("cls");
		}
	}
	cout<<"没有数据!"<<endl;
    getchar();
}
void list::handle_choise(int a)
{
	switch(a)
	{
	case 1:add_record(); break;
	case 2:display_list(); break;
	case 3:
		cout<<"1 按姓查找,2 按姓名查找。";
		cin>>n;
		if(n==1) search_by_lastname();
		if(n==2) search_by_name();
		break;
	case 4:delete_record(); break;
	case 5:help_me(); break;
	case 6:changephone_num(); break;
	case 7:add_record_to_file(); break;
	}
}
void list::insert_node(friend_node * a)
{
	a->last=a->next=0;
	if(head_ptr==0) head_ptr=end_ptr=a;
	else
	{
		a->last=end_ptr;
		end_ptr->next=a;
		end_ptr=a;
	}
}
void list::help_me()
{
	 do{
		 system("cls");
		 cout<<"欢迎来到帮助系统,请选择:"<<endl;
		 cout<<"1,我的记录怎么了?"<<endl;
		 cout<<"2,如何清除所有记录?"<<endl;
		 cout<<"3,何时会有新版本?"<<endl;
		 cout<<"4,新版本会增加什么功能?"<<endl;
		 cout<<"5,离开。"<<endl;
		 cin>>n;
		 switch(n)
		 {
		 case 1:
			 system("cls");
		     cout<<"在目录里查找文件Friends.dat;"<<endl;
		     cout<<"如果不存在则将一个文件该为Friends.dat;"<<endl;
		     getchar();
		     break;
	     case 2:
		     system("cls");
		     cout<<"删除文件Friends.dat;"<<endl;
		     getchar();
		     break;
	     case 3:
		     system("cls");
		     cout<<"等我有时间。"<<endl;
		     getchar();
		     break;
	     case 4:
		     system("cls");
		     cout<<"我希望增加如下功能:"<<endl;
		     cout<<"多个用户及增加密码;"<<endl;
		     cout<<"加密功能"<<endl;
		     cout<<"删除所有记录的指令;"<<endl;
		     cout<<"病毒预防系统;"<<endl;
		     getchar();
		     break;
		 }
	 }while(n!=5);
}
void list::search_by_lastname()
{
	system("cls");
	char lastname[20];
	n=0;
	cin.ignore(20,'\n');
	cout<<"姓:";
	cin.getline(lastname,20);
	current_ptr=head_ptr;
	while(current_ptr)
	{
		if(strcmp(current_ptr->last_name,lastname)==0)
		{
			cout<<"姓名:"<<current_ptr->last_name<<current_ptr->first_name<<endl;
			cout<<"电话号码:"<<current_ptr->phone_num<<endl;
			n++;
		}
		current_ptr=current_ptr->next;
	}
	cout<<"共找到"<<n<<"个记录。"<<endl;
    getchar();
}
void list::search_by_name()
{
	system("cls");
	char lastname[20],firstname[15];
	n=0;
	cin.ignore(20,'\n');
	cout<<"姓:";
	cin.getline(lastname,20);
	cout<<"名:";
	cin.getline(firstname,15);
	current_ptr=head_ptr;
	if(current_ptr)
	{
		while(current_ptr&&(strcmp(current_ptr->last_name,lastname)||strcmp(current_ptr->first_name,firstname)))
			current_ptr=current_ptr->next;
		if(current_ptr)
		{
			cout<<"姓名:"<<current_ptr->last_name<<current_ptr->first_name<<endl;
			cout<<"电话号码:"<<current_ptr->phone_num<<endl;
			n++;
		}
	}
	if(n) cout<<"成功!"<<endl;
	else cout<<"找不到!"<<endl;
	getchar();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -