C++利用线性表实现简单的通讯录管理系统
通讯录内容包括每个人的姓名及电话、QQ、E_mail四项内容;通讯录中的内容按姓名顺序(升序)存放;插入一项新的信息或修改一项信息后通讯录任然有序;查询某人的信息时,如果...
通讯录内容包括每个人的姓名及电话、QQ、E_mail四项内容;
通讯录中的内容按姓名顺序(升序)存放;
插入一项新的信息或修改一项信息后通讯录任然有序;
查询某人的信息时,如果找到了,则显示该人的信息,如果未找到,则提示通讯录中没有此人的信息;
修改某人的信息,如果未找到要修改的人,则提示通讯录中没有此人的信息;
删除某人的信息,如果未找到要删除的人,则提示通讯录中没有此人的信息;
能显示通讯录中的所有记录;
采用菜单操作。
【测试数据】
自己指定。
【选作内容】
通讯录的内容保存到数据文件中。 展开
通讯录中的内容按姓名顺序(升序)存放;
插入一项新的信息或修改一项信息后通讯录任然有序;
查询某人的信息时,如果找到了,则显示该人的信息,如果未找到,则提示通讯录中没有此人的信息;
修改某人的信息,如果未找到要修改的人,则提示通讯录中没有此人的信息;
删除某人的信息,如果未找到要删除的人,则提示通讯录中没有此人的信息;
能显示通讯录中的所有记录;
采用菜单操作。
【测试数据】
自己指定。
【选作内容】
通讯录的内容保存到数据文件中。 展开
2个回答
展开全部
你好。我之前写有一个,是C++的,要完成这个项目,首先要对链表的基本操作要掌握(如创建、添加、删除等),多看一下书,加强理解,挺容易的。下面是代码,仅供参考(只要你改一下变量就可以和你的一样了):
#include"stdafx.h"
using namespace std;
struct contaxt
{
char name[10];
char sex[5];
char Adrre[50];
char Class[20];
char Mobi[20];
char qq[10];
struct contaxt *next;
};
//声明函数
typedef struct contaxt CONT;
CONT *InsertCon(CONT *head);////插入联系人的基本信息
CONT *AddContaxt(int n); ////初始化联系人的基本信息
CONT *FindCon(CONT *head); ////查找联系人的基本信息
CONT *AmendMessage(CONT *head);//修改联系人的基本信息
CONT *DeleteMessage(CONT *head);//删除联系人的基本信息
void showmessage(CONT *head); ////显示联系人的基本信息
int menu(CONT *head); //主菜单
CONT *saveFileCONT(CONT *head );//保存联系人的基本信息
CONT *readFileCONT(CONT *head);//读取联系人的基本信息
int choose;
//系统入口
void main()
{
CONT *head;
head = NULL;
menu(head);
}
//系统主菜单
int menu(CONT *head)
{
cout << "请选择操作菜单!!!" << endl ;
do
{
cout << "---------------------------欢迎进入通讯录管理系统-------------------------------"
<< "---------------------------------操作菜单---------------------------------------";
cout << "--------------------------------------------------------------------------------"
<< " 1 添加联系人信息 "
<< " 2 插入联系人信息 " << endl
<< " 3 查找联系人信息 "
<< " 4 修改联系人信息 " << endl
<< " 5 删除联系人信息 "
<< " 6 显示联系人信息 " << endl
<< " 7 退出本系统 " << endl
<< " 8 保存文件 " << endl
<< " 9 读取文件 " << endl
<< "--------------------------------------------------------------------------------" << endl;
cout << "请选择操作菜单!!!" << endl ;
int choose;
//choose = getchar();
fflush(stdin);
//return choose;
cin >> choose;
if(choose != 1&& choose != 2 && choose != 3 && choose !=4 && choose != 5 && choose !=6 && choose !=7&&choose != 8)
{
cout << "输入错误:"<<endl;
}
else
{
switch(choose)
{
case 1:
int n;
do
{
fflush(stdin);
cout << "请确定要添加几个联系人:";
cin >> n;
}while(n <= 0);
head = AddContaxt(n);
break;
case 2:
system("CLS");
head = InsertCon(head);
break;
case 3:
head = FindCon(head);
break;
case 6:
system("CLS");
showmessage(head);
break;
case 7:
exit(0);
break;
case 4:
system("CLS");
AmendMessage(head);
break;
case 5:
system("CLS");
DeleteMessage(head);
break;
case 8:
system("CLS");
head = saveFileCONT(head );
break;
case 9:
// head = readFileCONT(head);
default:
system("CLS");
cout << "你输入错误,请重新选择!!!" << endl;
break;
}
}
}while(choose != 1&& choose != 2 && choose != 3 && choose !=4 && choose != 5 && choose !=6 && choose !=7);
return choose;
}
//初始化联系人的基本信息
CONT *AddContaxt(int n)
{
CONT *p,*q,*head;
int i;
system("CLS");
p = (CONT *)malloc(sizeof(CONT));
cout << "开始添加联系人信息:"<< endl;
cout << "输入姓名:";
cin >> p->name;
cout << "输入姓别:";
cin >> p->sex ;
cout << "输入班级:";
cin >> p->Class ;
cout << "输入住址:";
cin >> p->Adrre ;
cout << "输入手机号:";
cin >> p->Mobi ;
cout << "输入qq号:";
cin >> p->qq ;
head = p;
for(i = 2;i <= n;i++)
{
q = (CONT *)malloc(sizeof(CONT));
p->next = q ;
p = q;
system("CLS");
cout<< "总共需要输入"<< n << "个联系人的信息,"<<"现在你已输入" << i-1<< "个联系人信息."<< endl<< "请继续输入第"<<i << "个人的信息!!"<< endl;
cout << "输入姓名:";
cin >> p->name;
cout << "输入姓别:";
cin >> p->sex ;
cout << "输入班级:";
cin >> p->Class ;
cout << "输入住址:";
cin >> p->Adrre ;
cout << "输入手机号:";
cin >> p->Mobi ;
cout << "输入qq号:";
cin >> p->qq ;
}
p->next = NULL;
return head;
}
//按照不同的要求插入联系人的基本信息
CONT *InsertCon(CONT *head)
{
CONT *pc,*p,*q;
int choose ;
char name[10];
if(head ==NULL)
{
cout << "还没有添加任何联系人,请先添加联系人!!"<< endl;
return head;
}
pc = (CONT *)malloc(sizeof(CONT));
cout << "请依次输入被插入人的信息:姓名 /性别/班级/住址/手机号/qq号"<< endl;
cin >> pc->name >> pc->sex >> pc->Class >> pc->Adrre >> pc->Mobi >> pc->qq ;
pc ->next = NULL;
cout << "请选择自己喜欢的插入方式: "<< endl<< "1 插入在自己喜欢的人之前"<< endl << "2 插入在最后" << endl << "3 插入在开头" << endl;
do {
cin >> choose;
switch(choose)
{
case 1:
cout << "请输入自己喜欢的人的名字:";
cin >> name ;
if(strcmp(head->name ,name)==0)
{
pc->next = head;
head = pc;
return head;
}
else
{
q = head;
p = head->next ;
while(strcmp(p->name,name)!=0 && p->next !=NULL)
{
q = p;
p = p->next ;
}
if(strcmp(p->name ,name)==0)
{
pc->next = p ;
q = pc;
return head;
}
else
{
p->next = pc;
return head;
}
}
break;
case 2:
//cout << "请输入自己喜欢的人的名字:";
//cin >> name ;
p = head;
while(p->next != NULL)
p = p->next ;
p->next = pc;
return head;
break;
case 3:
//cout << "请输入自己喜欢的人的名字:";
//cin >> name ;
pc->next = head;
head = pc;
return head;
break;
default :
cout<<"error"<< endl;
break;
}
}while(choose!=1 &&choose != 2 && choose != 3);
}
//查找联系人的基本信息
CONT *FindCon(CONT *head)
{
system("CLS");
char na[20];
CONT *p,*q;
if(head == NULL)
{
cout << "没有任何信息可查找,请先添加信息!!"<< endl;
return head;
}
cout << "请您输入要查找人的姓名:"<< endl;
cin >> na;
p = head;
while(p!= NULL)
{
if(strcmp(p->name ,na)==0)
{
q = p;
cout << "找到联系人,信息如下!!"<< endl;
cout << "姓名:" << q->name <<" 性别: " << q->sex << q->Class <<" 住址: " <<q->Adrre <<" 手机号: " <<q->Mobi <<" qq号: "
<< q->qq << endl;
break;
}
else
p = p->next ;
}
return head;
}
//修改联系人的基本信息
CONT *AmendMessage(CONT *head)
{
CONT *p;
char nam[10];
char sex[5];
char Adrre[50];
char Class[20];
char Mobi[20];
char qq[10];
if(head == NULL)
{
cout<< "没有任何信息,请返回添加信息!!!"<< endl;
return head;
}
else
p = head;
cout << "请你输入要修改人的名字:";
cin >> nam;
while(p != NULL && p->name != nam)
{
if(strcmp(p->name ,nam)==0)
{
strcpy(p->name ,nam);
int choose;
do
{
cout << "请选择要修改哪一项的信息!!!"<< endl;
cout << "1 修改性别 2 修改班别 3 修改地址 4 修改手机号码 5 修改qq号 " << endl;
cin >> choose;
switch(choose)
{
case 1:
cout << "请输入要修改后的性别:";
cin >> sex;
strcpy(p->sex , sex);
cout << "修改成功!!!"<< endl;
system("CLS");
return head;
break;
case 2:
cout << "请输入修改后的班别:";
cin >> Class;
strcpy(p->Class ,Class);
system("CLS");
cout << "修改成功!!!"<< endl;
return head;
break;
case 3:
cout << " 请输入修改后的地址:";
cin >> Adrre;
strcpy(p->Adrre ,Adrre);
system("CLS");
cout << "修改成功!!!"<< endl;
return head;
break;
case 4:
cout << "请输入修改后的手机号码:";
cin >> Mobi;
strcpy(p->Mobi ,Mobi);
system("CLS");
cout << "修改成功!!!"<< endl;
return head;
break;
case 5:
cout << "请输入修改后的qq号:";
cin >> qq;
strcpy(p->qq ,qq);
system("CLS");
cout << "修改成功!!!"<< endl;
return head;
break;
default:
cout << "输入错误,重新选择!!" << endl;
break;
}
}while(choose != 0);
}
else if(p->next != NULL && p->name != nam)
{
p = p->next ;
}
else
{
cout << "输入名字错误,请重新选择4修改!!!" << endl;
return head;
}
}
//return head;
}
//删除联系人的基本信息
CONT *DeleteMessage(CONT *head)
{
CONT *p,*q,*t;
char name[20];
char elem[10];
cout << "请输入要删除联系人的姓名:";
cin >> name;
if(head == NULL)
{
cout << "没有任何信息可删除,请添加信息!!"<< endl;
return head;
}
else if(strcmp(head->name,name)==0 )
{
t = head;
head = head->next ;
return head;
}
else
{
p = head->next ;
q = head;
}
while(p !=NULL && p->name != name)
{
q = p;
p = p->next ;
}
if(strcmp(p->name ,name)==0)
{
q->next = p->next ;
free(p);
//t = p;
}
else
{
cout<< "表中无该元素!" << endl;
return head;
}
if(t)
{
// elem = t->name ;
free(t);
}
return head;
}
//保存文件
CONT *saveFileCONT(CONT *head )
{
char *fileName;
FILE *fp;
CONT *p;
p = (CONT *)malloc(sizeof(CONT));
if(p=NULL)
{
cout <<"分配内存失败"<< endl;
// exit(0);
}
if(head ==NULL)
{
cout <<"没有任何信息,请先添加信息!!"<< endl;
return head;
}
else
{
p = head;
fileName = (char *)malloc(sizeof(char));
cout << "请输入文件名:" << endl;
cin >> fileName;
fileName = strcat(fileName,".txt");
if( (fp = fopen(fileName,"a")) == NULL)
cout << "can't open file" << endl;
do
{
//fwrite(head,sizeof(CONT),1,fp);
//fprintf(fp,p->name,p->sex,p->Class,p->Adrre,p->Mobi,p->qq );
fprintf(fp," 姓名:");
fprintf(fp, p->name );
fprintf(fp," 性别:");
fprintf(fp, p->sex);
fprintf(fp," 班别:");
fprintf(fp, p->Class);
fprintf(fp," 地址:");
fprintf(fp, p->Adrre);
fprintf(fp," 手机号:");
fprintf(fp, p->Mobi);
fprintf(fp," qq号:");
fprintf(fp, p->qq);
fprintf(fp,"\n");
cout << endl;
cout << "--------------------------------------------------------------------------------";
cout << " "<<"姓名:" <<p->name <<" 性别:" <<p->sex << " 班别:" <<p->Class <<" 住址:" <<p->Adrre <<"手机号:"
<< p->Mobi <<" qq号:" << p->qq << endl;
cout << "--------------------------------------------------------------------------------";
p=p->next ;
}while(p!=NULL);
}
fclose(fp);
return head;
}
//读取文件内容
CONT *readFileCONT(CONT *head)
{
char *fileName;
CONT *p;
FILE *fp;
fileName = (char *)malloc(sizeof(char));
cout << "请输入要打开的文件名:";
cin >> fileName;
fileName = strcat(fileName,".txt");
fp = fopen(fileName,"r");
if(fp == NULL)
{
cout << "文件没有任何信息,请先输入信息!!"<< endl;
}
else
{
while(!feof(fp))
{
p = (CONT *)malloc(sizeof(CONT));
if(p == NULL)
{
cout << "分配内存失败!!"<< endl;
return head;
}
fscanf(fp,p->name );
fscanf(fp,p->sex );
fscanf(fp,p->Class );
fscanf(fp,p->Adrre );
fscanf(fp,p->Mobi );
fscanf(fp,p->qq );
cout << "--------------------------------------------------------------------------------";
cout << " "<<"姓名:" <<p->name <<" 性别:" <<p->sex << " 班别:" <<p->Class <<" 住址:" <<p->Adrre <<"手机号:"
<< p->Mobi <<" qq号:" << p->qq << endl;
cout << "--------------------------------------------------------------------------------";
p->next = head;
head = p;
p = p->next ;
}
fclose(fp);
cout<< "读取信息成功!!!"<< endl;
}
fclose(fp);
return head;
}
//显示信息
void showmessage(CONT *head)
{
CONT *p;
int i=0;
if(head == NULL )
{
cout << "没有任何信息可输出,请添加信息!!!"<< endl;
}
else
{
p = head;
cout << "*******************************联系表如下***************************************";
do
{
i++;
cout << "--------------------------------------------------------------------------------";
cout << i << " "<<"姓名:" <<p->name <<" 性别:" <<p->sex << " 班别:" <<p->Class <<" 住址:" <<p->Adrre <<"手机号:"
<< p->Mobi <<" qq号:" << p->qq << endl;
cout << "--------------------------------------------------------------------------------";
p = p->next ;
}while(p!=NULL);
}
cout << "*********************************联系表***************************************";
cout << endl;
}
#include"stdafx.h"
using namespace std;
struct contaxt
{
char name[10];
char sex[5];
char Adrre[50];
char Class[20];
char Mobi[20];
char qq[10];
struct contaxt *next;
};
//声明函数
typedef struct contaxt CONT;
CONT *InsertCon(CONT *head);////插入联系人的基本信息
CONT *AddContaxt(int n); ////初始化联系人的基本信息
CONT *FindCon(CONT *head); ////查找联系人的基本信息
CONT *AmendMessage(CONT *head);//修改联系人的基本信息
CONT *DeleteMessage(CONT *head);//删除联系人的基本信息
void showmessage(CONT *head); ////显示联系人的基本信息
int menu(CONT *head); //主菜单
CONT *saveFileCONT(CONT *head );//保存联系人的基本信息
CONT *readFileCONT(CONT *head);//读取联系人的基本信息
int choose;
//系统入口
void main()
{
CONT *head;
head = NULL;
menu(head);
}
//系统主菜单
int menu(CONT *head)
{
cout << "请选择操作菜单!!!" << endl ;
do
{
cout << "---------------------------欢迎进入通讯录管理系统-------------------------------"
<< "---------------------------------操作菜单---------------------------------------";
cout << "--------------------------------------------------------------------------------"
<< " 1 添加联系人信息 "
<< " 2 插入联系人信息 " << endl
<< " 3 查找联系人信息 "
<< " 4 修改联系人信息 " << endl
<< " 5 删除联系人信息 "
<< " 6 显示联系人信息 " << endl
<< " 7 退出本系统 " << endl
<< " 8 保存文件 " << endl
<< " 9 读取文件 " << endl
<< "--------------------------------------------------------------------------------" << endl;
cout << "请选择操作菜单!!!" << endl ;
int choose;
//choose = getchar();
fflush(stdin);
//return choose;
cin >> choose;
if(choose != 1&& choose != 2 && choose != 3 && choose !=4 && choose != 5 && choose !=6 && choose !=7&&choose != 8)
{
cout << "输入错误:"<<endl;
}
else
{
switch(choose)
{
case 1:
int n;
do
{
fflush(stdin);
cout << "请确定要添加几个联系人:";
cin >> n;
}while(n <= 0);
head = AddContaxt(n);
break;
case 2:
system("CLS");
head = InsertCon(head);
break;
case 3:
head = FindCon(head);
break;
case 6:
system("CLS");
showmessage(head);
break;
case 7:
exit(0);
break;
case 4:
system("CLS");
AmendMessage(head);
break;
case 5:
system("CLS");
DeleteMessage(head);
break;
case 8:
system("CLS");
head = saveFileCONT(head );
break;
case 9:
// head = readFileCONT(head);
default:
system("CLS");
cout << "你输入错误,请重新选择!!!" << endl;
break;
}
}
}while(choose != 1&& choose != 2 && choose != 3 && choose !=4 && choose != 5 && choose !=6 && choose !=7);
return choose;
}
//初始化联系人的基本信息
CONT *AddContaxt(int n)
{
CONT *p,*q,*head;
int i;
system("CLS");
p = (CONT *)malloc(sizeof(CONT));
cout << "开始添加联系人信息:"<< endl;
cout << "输入姓名:";
cin >> p->name;
cout << "输入姓别:";
cin >> p->sex ;
cout << "输入班级:";
cin >> p->Class ;
cout << "输入住址:";
cin >> p->Adrre ;
cout << "输入手机号:";
cin >> p->Mobi ;
cout << "输入qq号:";
cin >> p->qq ;
head = p;
for(i = 2;i <= n;i++)
{
q = (CONT *)malloc(sizeof(CONT));
p->next = q ;
p = q;
system("CLS");
cout<< "总共需要输入"<< n << "个联系人的信息,"<<"现在你已输入" << i-1<< "个联系人信息."<< endl<< "请继续输入第"<<i << "个人的信息!!"<< endl;
cout << "输入姓名:";
cin >> p->name;
cout << "输入姓别:";
cin >> p->sex ;
cout << "输入班级:";
cin >> p->Class ;
cout << "输入住址:";
cin >> p->Adrre ;
cout << "输入手机号:";
cin >> p->Mobi ;
cout << "输入qq号:";
cin >> p->qq ;
}
p->next = NULL;
return head;
}
//按照不同的要求插入联系人的基本信息
CONT *InsertCon(CONT *head)
{
CONT *pc,*p,*q;
int choose ;
char name[10];
if(head ==NULL)
{
cout << "还没有添加任何联系人,请先添加联系人!!"<< endl;
return head;
}
pc = (CONT *)malloc(sizeof(CONT));
cout << "请依次输入被插入人的信息:姓名 /性别/班级/住址/手机号/qq号"<< endl;
cin >> pc->name >> pc->sex >> pc->Class >> pc->Adrre >> pc->Mobi >> pc->qq ;
pc ->next = NULL;
cout << "请选择自己喜欢的插入方式: "<< endl<< "1 插入在自己喜欢的人之前"<< endl << "2 插入在最后" << endl << "3 插入在开头" << endl;
do {
cin >> choose;
switch(choose)
{
case 1:
cout << "请输入自己喜欢的人的名字:";
cin >> name ;
if(strcmp(head->name ,name)==0)
{
pc->next = head;
head = pc;
return head;
}
else
{
q = head;
p = head->next ;
while(strcmp(p->name,name)!=0 && p->next !=NULL)
{
q = p;
p = p->next ;
}
if(strcmp(p->name ,name)==0)
{
pc->next = p ;
q = pc;
return head;
}
else
{
p->next = pc;
return head;
}
}
break;
case 2:
//cout << "请输入自己喜欢的人的名字:";
//cin >> name ;
p = head;
while(p->next != NULL)
p = p->next ;
p->next = pc;
return head;
break;
case 3:
//cout << "请输入自己喜欢的人的名字:";
//cin >> name ;
pc->next = head;
head = pc;
return head;
break;
default :
cout<<"error"<< endl;
break;
}
}while(choose!=1 &&choose != 2 && choose != 3);
}
//查找联系人的基本信息
CONT *FindCon(CONT *head)
{
system("CLS");
char na[20];
CONT *p,*q;
if(head == NULL)
{
cout << "没有任何信息可查找,请先添加信息!!"<< endl;
return head;
}
cout << "请您输入要查找人的姓名:"<< endl;
cin >> na;
p = head;
while(p!= NULL)
{
if(strcmp(p->name ,na)==0)
{
q = p;
cout << "找到联系人,信息如下!!"<< endl;
cout << "姓名:" << q->name <<" 性别: " << q->sex << q->Class <<" 住址: " <<q->Adrre <<" 手机号: " <<q->Mobi <<" qq号: "
<< q->qq << endl;
break;
}
else
p = p->next ;
}
return head;
}
//修改联系人的基本信息
CONT *AmendMessage(CONT *head)
{
CONT *p;
char nam[10];
char sex[5];
char Adrre[50];
char Class[20];
char Mobi[20];
char qq[10];
if(head == NULL)
{
cout<< "没有任何信息,请返回添加信息!!!"<< endl;
return head;
}
else
p = head;
cout << "请你输入要修改人的名字:";
cin >> nam;
while(p != NULL && p->name != nam)
{
if(strcmp(p->name ,nam)==0)
{
strcpy(p->name ,nam);
int choose;
do
{
cout << "请选择要修改哪一项的信息!!!"<< endl;
cout << "1 修改性别 2 修改班别 3 修改地址 4 修改手机号码 5 修改qq号 " << endl;
cin >> choose;
switch(choose)
{
case 1:
cout << "请输入要修改后的性别:";
cin >> sex;
strcpy(p->sex , sex);
cout << "修改成功!!!"<< endl;
system("CLS");
return head;
break;
case 2:
cout << "请输入修改后的班别:";
cin >> Class;
strcpy(p->Class ,Class);
system("CLS");
cout << "修改成功!!!"<< endl;
return head;
break;
case 3:
cout << " 请输入修改后的地址:";
cin >> Adrre;
strcpy(p->Adrre ,Adrre);
system("CLS");
cout << "修改成功!!!"<< endl;
return head;
break;
case 4:
cout << "请输入修改后的手机号码:";
cin >> Mobi;
strcpy(p->Mobi ,Mobi);
system("CLS");
cout << "修改成功!!!"<< endl;
return head;
break;
case 5:
cout << "请输入修改后的qq号:";
cin >> qq;
strcpy(p->qq ,qq);
system("CLS");
cout << "修改成功!!!"<< endl;
return head;
break;
default:
cout << "输入错误,重新选择!!" << endl;
break;
}
}while(choose != 0);
}
else if(p->next != NULL && p->name != nam)
{
p = p->next ;
}
else
{
cout << "输入名字错误,请重新选择4修改!!!" << endl;
return head;
}
}
//return head;
}
//删除联系人的基本信息
CONT *DeleteMessage(CONT *head)
{
CONT *p,*q,*t;
char name[20];
char elem[10];
cout << "请输入要删除联系人的姓名:";
cin >> name;
if(head == NULL)
{
cout << "没有任何信息可删除,请添加信息!!"<< endl;
return head;
}
else if(strcmp(head->name,name)==0 )
{
t = head;
head = head->next ;
return head;
}
else
{
p = head->next ;
q = head;
}
while(p !=NULL && p->name != name)
{
q = p;
p = p->next ;
}
if(strcmp(p->name ,name)==0)
{
q->next = p->next ;
free(p);
//t = p;
}
else
{
cout<< "表中无该元素!" << endl;
return head;
}
if(t)
{
// elem = t->name ;
free(t);
}
return head;
}
//保存文件
CONT *saveFileCONT(CONT *head )
{
char *fileName;
FILE *fp;
CONT *p;
p = (CONT *)malloc(sizeof(CONT));
if(p=NULL)
{
cout <<"分配内存失败"<< endl;
// exit(0);
}
if(head ==NULL)
{
cout <<"没有任何信息,请先添加信息!!"<< endl;
return head;
}
else
{
p = head;
fileName = (char *)malloc(sizeof(char));
cout << "请输入文件名:" << endl;
cin >> fileName;
fileName = strcat(fileName,".txt");
if( (fp = fopen(fileName,"a")) == NULL)
cout << "can't open file" << endl;
do
{
//fwrite(head,sizeof(CONT),1,fp);
//fprintf(fp,p->name,p->sex,p->Class,p->Adrre,p->Mobi,p->qq );
fprintf(fp," 姓名:");
fprintf(fp, p->name );
fprintf(fp," 性别:");
fprintf(fp, p->sex);
fprintf(fp," 班别:");
fprintf(fp, p->Class);
fprintf(fp," 地址:");
fprintf(fp, p->Adrre);
fprintf(fp," 手机号:");
fprintf(fp, p->Mobi);
fprintf(fp," qq号:");
fprintf(fp, p->qq);
fprintf(fp,"\n");
cout << endl;
cout << "--------------------------------------------------------------------------------";
cout << " "<<"姓名:" <<p->name <<" 性别:" <<p->sex << " 班别:" <<p->Class <<" 住址:" <<p->Adrre <<"手机号:"
<< p->Mobi <<" qq号:" << p->qq << endl;
cout << "--------------------------------------------------------------------------------";
p=p->next ;
}while(p!=NULL);
}
fclose(fp);
return head;
}
//读取文件内容
CONT *readFileCONT(CONT *head)
{
char *fileName;
CONT *p;
FILE *fp;
fileName = (char *)malloc(sizeof(char));
cout << "请输入要打开的文件名:";
cin >> fileName;
fileName = strcat(fileName,".txt");
fp = fopen(fileName,"r");
if(fp == NULL)
{
cout << "文件没有任何信息,请先输入信息!!"<< endl;
}
else
{
while(!feof(fp))
{
p = (CONT *)malloc(sizeof(CONT));
if(p == NULL)
{
cout << "分配内存失败!!"<< endl;
return head;
}
fscanf(fp,p->name );
fscanf(fp,p->sex );
fscanf(fp,p->Class );
fscanf(fp,p->Adrre );
fscanf(fp,p->Mobi );
fscanf(fp,p->qq );
cout << "--------------------------------------------------------------------------------";
cout << " "<<"姓名:" <<p->name <<" 性别:" <<p->sex << " 班别:" <<p->Class <<" 住址:" <<p->Adrre <<"手机号:"
<< p->Mobi <<" qq号:" << p->qq << endl;
cout << "--------------------------------------------------------------------------------";
p->next = head;
head = p;
p = p->next ;
}
fclose(fp);
cout<< "读取信息成功!!!"<< endl;
}
fclose(fp);
return head;
}
//显示信息
void showmessage(CONT *head)
{
CONT *p;
int i=0;
if(head == NULL )
{
cout << "没有任何信息可输出,请添加信息!!!"<< endl;
}
else
{
p = head;
cout << "*******************************联系表如下***************************************";
do
{
i++;
cout << "--------------------------------------------------------------------------------";
cout << i << " "<<"姓名:" <<p->name <<" 性别:" <<p->sex << " 班别:" <<p->Class <<" 住址:" <<p->Adrre <<"手机号:"
<< p->Mobi <<" qq号:" << p->qq << endl;
cout << "--------------------------------------------------------------------------------";
p = p->next ;
}while(p!=NULL);
}
cout << "*********************************联系表***************************************";
cout << endl;
}
展开全部
以前写了一个简单的:
#include <stdio.h>
#include <stdlib.h> /*与malloc.h差不多*/
#include <string.h>
#include <iostream>
using namespace std;
#define maxlen 15
struct persons
{int num; /*定义结构体数组用于缓存数据*/
char name[20];
char e_addr[20];
char tel_no[15];
char sim_no;
char arch;
}persons[maxlen];
typedef struct lnode
{ /*通讯录结构中结点的定义*/
int num;
char name[20];
char e_addr[20];
char tel_no[15];
char sim_no;
char arch;
struct lnode *next;
}listnode,*linklist;
linklist head=NULL,r=NULL; /*定义头指针和尾指针*/
listnode *s,*p0,*p1,*p2,*p3,*p4,*p5,*p6,*p7,*p8,*p9;
int i;
char name1[10],ch;
char tel_no1[15];
char arch1;
char sim_no1;
char e_addr1[20];
char s1[20];
FILE *fp; /*定义文件指针*/
void creat() /*将文件的信息读入结构体数组在转存入链表中*/
{ int j;
long k;
fp=fopen("数据文件.txt","r t"); /*打开文件*/
if(fp!=NULL)
{for(i=0;i<=maxlen;i++ )
{ j=fgetc(fp);
if(j==EOF)
return;
k=i;
fseek(fp,k*sizeof(struct persons),0); /*读取一个人的信息*/
fread(&persons[i],sizeof(struct persons),1,fp);
s=(linklist)malloc(sizeof(listnode)); /*装存入链表中*/
s->num=persons[i].num;
strcpy(s->name,persons[i].name);
strcpy(s->e_addr,persons[i].e_addr);
strcpy(s->tel_no,persons[i].tel_no);
s->sim_no=persons[i].sim_no;
s->arch=persons[i].arch;
if(head==NULL) /*用尾插法将其插入链表中*/
else
{r->next=s;
r=s;r->next=NULL;
}
}fclose(fp);
}
else
{ fp=fopen("数据文件.txt","w"); /*不能打开另开辟一个文件*/
i=1;
}
}
void Show()
void Delete()
void Input() /*向.通讯录中输入一个人的信息*/
{ s=(linklist)malloc(sizeof(listnode));
printf("\n\n\t请输入该用户的信息:");
printf("姓名:");
scanf("%s",&s->name);
printf("电话号码:");
scanf("%s",&s->tel_no);
printf("单键拨号:");
scanf("%s",&s->sim_no);
printf("E-mail地址:");
scanf("%s",&s->e_addr);
printf("类别:");
scanf("%s",&s->arch);
if(head==NULL)printf("\n\n");
else
{p8=head;
while(p8!=NULL&&strcmp(s->name,p8->name)!=0&&strcmp(s->tel_no,p8->tel_no)!=0)
p8=p8->next;
if(p8!=NULL)
{printf("您添加的用户已存在!");
free(s);}}
if(head==NULL)
{
s->next = 0;
head=s;
r = s;
}
else
{
s->next = 0;
r->next = s;
r = s;
}
}
void Alter()
int main()
{
system("color a");
creat();
do
{
printf("\n\n\t\t请选择操作:");
printf("\n\t\t1.显示通讯录");
printf("\n\t\t2.删除通讯录");
printf("\n\t\t3.添加通讯录");
printf("\n\t\t4.编辑通讯录");
printf("\n\n\n");
printf("\t请选择:");
cin>>ch;
switch(ch)
{ case '1': Show(); /*用单条件多选择语句实现调用与循环*/
break;
case '2': Delete();
break;
case '3': Input();
break;
case '4': Alter();
break;
fclose(fp);
exit(0);
break;
default:
printf("\n\t The num should 1-6!!! \n");
break;
}
}
while(1);
}
#include <stdio.h>
#include <stdlib.h> /*与malloc.h差不多*/
#include <string.h>
#include <iostream>
using namespace std;
#define maxlen 15
struct persons
{int num; /*定义结构体数组用于缓存数据*/
char name[20];
char e_addr[20];
char tel_no[15];
char sim_no;
char arch;
}persons[maxlen];
typedef struct lnode
{ /*通讯录结构中结点的定义*/
int num;
char name[20];
char e_addr[20];
char tel_no[15];
char sim_no;
char arch;
struct lnode *next;
}listnode,*linklist;
linklist head=NULL,r=NULL; /*定义头指针和尾指针*/
listnode *s,*p0,*p1,*p2,*p3,*p4,*p5,*p6,*p7,*p8,*p9;
int i;
char name1[10],ch;
char tel_no1[15];
char arch1;
char sim_no1;
char e_addr1[20];
char s1[20];
FILE *fp; /*定义文件指针*/
void creat() /*将文件的信息读入结构体数组在转存入链表中*/
{ int j;
long k;
fp=fopen("数据文件.txt","r t"); /*打开文件*/
if(fp!=NULL)
{for(i=0;i<=maxlen;i++ )
{ j=fgetc(fp);
if(j==EOF)
return;
k=i;
fseek(fp,k*sizeof(struct persons),0); /*读取一个人的信息*/
fread(&persons[i],sizeof(struct persons),1,fp);
s=(linklist)malloc(sizeof(listnode)); /*装存入链表中*/
s->num=persons[i].num;
strcpy(s->name,persons[i].name);
strcpy(s->e_addr,persons[i].e_addr);
strcpy(s->tel_no,persons[i].tel_no);
s->sim_no=persons[i].sim_no;
s->arch=persons[i].arch;
if(head==NULL) /*用尾插法将其插入链表中*/
else
{r->next=s;
r=s;r->next=NULL;
}
}fclose(fp);
}
else
{ fp=fopen("数据文件.txt","w"); /*不能打开另开辟一个文件*/
i=1;
}
}
void Show()
void Delete()
void Input() /*向.通讯录中输入一个人的信息*/
{ s=(linklist)malloc(sizeof(listnode));
printf("\n\n\t请输入该用户的信息:");
printf("姓名:");
scanf("%s",&s->name);
printf("电话号码:");
scanf("%s",&s->tel_no);
printf("单键拨号:");
scanf("%s",&s->sim_no);
printf("E-mail地址:");
scanf("%s",&s->e_addr);
printf("类别:");
scanf("%s",&s->arch);
if(head==NULL)printf("\n\n");
else
{p8=head;
while(p8!=NULL&&strcmp(s->name,p8->name)!=0&&strcmp(s->tel_no,p8->tel_no)!=0)
p8=p8->next;
if(p8!=NULL)
{printf("您添加的用户已存在!");
free(s);}}
if(head==NULL)
{
s->next = 0;
head=s;
r = s;
}
else
{
s->next = 0;
r->next = s;
r = s;
}
}
void Alter()
int main()
{
system("color a");
creat();
do
{
printf("\n\n\t\t请选择操作:");
printf("\n\t\t1.显示通讯录");
printf("\n\t\t2.删除通讯录");
printf("\n\t\t3.添加通讯录");
printf("\n\t\t4.编辑通讯录");
printf("\n\n\n");
printf("\t请选择:");
cin>>ch;
switch(ch)
{ case '1': Show(); /*用单条件多选择语句实现调用与循环*/
break;
case '2': Delete();
break;
case '3': Input();
break;
case '4': Alter();
break;
fclose(fp);
exit(0);
break;
default:
printf("\n\t The num should 1-6!!! \n");
break;
}
}
while(1);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询