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

📄 list.cpp

📁 大二时候做的C++课程设计。题目是“通讯录”
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "list.h"

//构造函数 把记事本里的信息建立单项(?)链表
CAddrList::CAddrList()
{
	CAddrList::m_isempty=false;  //初始化为 非空的通讯录
	m_ischain=false;
	head=NULL;
}
    
void CAddrList::addmem()
{
	
	char ch;
	FILE *fp;
	if(this->m_isempty)
	{
		if((fp=fopen("myaddrlist.txt","w"))==NULL)
		{
			cout<<"增加成员时文件打开失败!"<<endl;
			return;
		}
	}
	//fseek(fp,0,SEEK_END);
	do
	{
		do
		{
			system("cls");
			cout<<endl;
			cout<<endl;
			cout<<endl;
			cout<<"             ╔════════════════════╗"<<endl;
			cout<<"             ║        这里可以添加通讯录的成员        ║"<<endl;
			cout<<"             ╔════════════════════╗"<<endl;
			cout<<"             ║   a.开始录入    b.查看说明    c.返回   ║"<<endl;
			cout<<"             ║   如果你是第一次使用建议你看一下说明   ║"<<endl;
			cout<<"             ╚════════════════════╝"<<endl;
			cin>>ch;
			switch(ch)
			{
			case 'a':
			case 'A':
				break;
			case 'b':
			case 'B':
				cout<<endl;
				cout<<"             ╔════════════════════╗"<<endl;
				cout<<"             ║     1.如果没有某一项信息请填写“无”   ║"<<endl;
				cout<<"             ║       或者自己知道代表“无”的标记     ║"<<endl;
				cout<<"             ║     2.生日的填写格式 (month/day)       ║"<<endl;		
				cout<<"             ║     3.名字的长度最好不要超过3个        ║"<<endl;
				cout<<"             ║     4.性别的长度最好不要超过3个        ║"<<endl;
				cout<<"             ║     5.假如你加了信息,请正确退出程序   ║"<<endl;
				cout<<"             ║	  6.任意键继续增添功能...            ║"<<endl;
				cout<<"             ╚════════════════════╝"<<endl;
				system("pause>nul");
				break;
			case 'c':
			case 'C':
				if(this->m_isempty)	fclose(fp);
				return;
				break;
			default:
				break;
			}
		}while(ch!='a' || ch!='a');
		Person p;
		//p=(Person*)malloc(sizeof(Person));
		cout<<"请输入名字:";	cin>>p.name;		
		cout<<"请输入性别(M/W):";	cin>>p.sex;		
		cout<<"请输入手机号码:";	cin>>p.mobile;		
		cout<<"请输入座机号码:";	cin>>p.telph;		
		cout<<"请输入电子邮件:";	cin>>p.email;		
		cout<<"请输入邮政编号:";	cin>>p.postalcode;		
		cout<<"请输入家庭住址:";	cin>>p.homeaddr;		
		cout<<"请输入工作地址:";	cin>>p.workaddr;		
		cout<<"请输入 QQ 号码:";	cin>>p.qq;	
		cout<<"请输入对方生日:";	cin>>p.birthday;
		

		if(this->m_isempty)
		{
			fwrite(&p,sizeof(Person),1,fp);
			this->m_isempty=false;
			fclose(fp);
		}
		
		//把新成员插到最前
		if(m_ischain)
		{
			chain *pc;
			pc=(chain*)malloc(sizeof(chain));
			pc->pnext=head;
			pc->info=p;
			this->head=pc;
		}
		else
		{
			//建立链表
			this->createchain();
		}
	}while(cout<<"继续添加吗?(Y/N)...",cin>>ch,(ch=='Y' || ch=='y'));
	//this->save();
	
/*	//测试
	if((fp=fopen("myaddrlist.txt","r+"))==NULL)
	{
		cout<<"增加成员时文件打开失败!"<<endl;
		return;
	}
	Person myPer;
	fread(&myPer,sizeof(Person),1,fp);
	cout<<myPer.name;
	fclose(fp);
*/
}

void CAddrList::display()
{
	cout<<"\t姓  名\t\t性 别\t\t 手  机 \t\t家庭住址"<<endl;
	cout<<"\t════════════════════════════════"<<endl;
	chain *temp;
	temp=NULL;
	if(m_ischain)
	{
		temp=this->head;
		while(temp!=NULL)
		{
			cout<<"\t"
				<<temp->info.name<<"\t\t"
				<<temp->info.sex<<"\t\t"
				<<temp->info.mobile<<"\t\t"
				<<temp->info.homeaddr<<endl;
			temp=temp->pnext;
		}
	}
	cout<<"\t════════════════════════════════"<<endl;
}

void CAddrList::query()
{
	if(!this->m_ischain)	
	{
		cout<<"通讯录为空!任意键返回..."<<endl;
		system("pause>nul");
		return;
	}
	char get;
	char getchs[20];
	do
	{
		system("cls");
		cout<<"                           ╔══════════╗"<<endl;
		cout<<"                           ║    选择查找方式    ║"<<endl;
		cout<<"                           ╚══════════╝"<<endl;
		cout<<"                           ║a.姓名        d.手机║"<<endl; 
		cout<<"                           ║                    ║"<<endl;
		cout<<"                           ║b.性别        e.邮编║"<<endl;
		cout<<"                           ║                    ║"<<endl;
		cout<<"                           ║c.座机        f.返回║"<<endl;
		cout<<"                           ╚══════════╝"<<endl;
		cin>>get;
		switch(get)
		{
		case 'a':
		case 'A':
			cout<<"请输入姓名:";
			cin>>getchs;
			gettell(1,getchs);
			break;
		case 'b':
		case 'B':
			cout<<"请输入性别:";
			cin>>getchs;
			gettell(2,getchs);
			break;
		case 'c':
		case 'C':
			cout<<"请输入座机号:";
			cin>>getchs;
			gettell(3,getchs);
			break;
		case 'd':
		case 'D':
			cout<<"请输入手机号:";
			cin>>getchs;
			gettell(4,getchs);
			break;
		case 'e':
		case 'E':
			cout<<"请输入邮编:";
			cin>>getchs;
			gettell(5,getchs);
			break;
		case 'f':
		case 'F':
			return;
			break;
		}//switch
	}while(cout<<"继续查询吗?(Y/N):",cin>>get,(get=='Y' || get=='y'));
}

void CAddrList::remove()
{
	if(!this->m_ischain)
	{
		cout<<"通讯录为空!任意键返回主菜单..."<<endl;
		system("pause>nul");
		return;
	}
	char get;
	char getname[15];
	chain *temp,*pre;
	do
	{
		pre=temp=this->head;
		system("cls");
		this->display();
		cout<<"                                                        返回主菜单(BACK)"<<endl;

		cout<<" 你要删除谁的记录(输入姓名):";
		cin>>getname;
		if(strcmp(getname,"back")==0 || strcmp(getname,"BACK")==0) return;

		while(temp!=NULL)
		{
			if(strcmp(getname,temp->info.name)==0)
			{
				if(cout<<"真的要删除?(Y/N):",cin>>get,(get=='Y' || get=='y'))
				{
					if(temp==head)//如果为第一个结点
					{
						this->head=temp->pnext;
						free(temp);
					}
					else if(temp->pnext==NULL)//最后一个节点
					{
						pre->pnext=NULL;
						free(temp);
					}
					else//一般结点
					{
						pre->pnext=temp->pnext;
						free(temp);
					}
					
					break;//删除一个节点后跳出循环
				}
			}
			pre=temp;
			temp=temp->pnext;
		}
	}while(cout<<"继续删除吗?(Y/N):",cin>>get,(get=='Y' || get=='y'));
}

void CAddrList::rework()
{
	char get;
	char getname[10];
	chain *temp;
	if(this->head==NULL)
	{
		cout<<"通讯录为空!任意键返回..."<<endl;
		system("pause>nul");
		return;
	}
	while(1)
	{
label:
		system("cls");
		this->display();

		cout<<"                                                   返回主菜单(BACK)"<<endl;

		cout<<"确定要修改?(Y/N):";
		cin>>get;
		if(get=='N' || get=='n') return;

		cout<<"输入你要修改的人的名字:";
		cin>>getname;
		if(strcmp(getname,"BACK")==0 || strcmp(getname,"back")==0) return;

		temp=head;
		while(temp!=NULL)
		{
			if(strcmp(getname,temp->info.name) == 0) 
			{
				do
				{
					system("cls");
					cout<<"                           ╔══════════╗"<<endl;
					cout<<"                           ║    选择修改项目    ║"<<endl;
					cout<<"                           ╚══════════╝"<<endl;
					cout<<"                           ║a.姓名        f.Q Q ║"<<endl; 
					cout<<"                           ║                    ║"<<endl;
					cout<<"                           ║b.性别        g.mail║"<<endl;
					cout<<"                           ║                    ║"<<endl;
					cout<<"                           ║c.座机        h.邮编║"<<endl;
					cout<<"                           ║                    ║"<<endl;
					cout<<"                           ║d.手机        i.地址║"<<endl;
					cout<<"                           ║                    ║"<<endl;
					cout<<"                           ║e.生日        j.返回║"<<endl;
					cout<<"                           ╚══════════╝"<<endl;
					cin>>get;
					switch(get)
					{
					case 'a':
					case 'A':
						cout<<"新姓名:";	cin>>temp->info.name;					
						break;
					case 'b':
					case 'B':
						cout<<"新性别:";	cin>>temp->info.sex;		
						break;
					case 'c':
					case 'C':
						cout<<"新座机:";	cin>>temp->info.telph;	
						break;
					case 'd':

⌨️ 快捷键说明

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