c语言做通讯录
㈠ 用c语言编写通讯录程序
这个属于基本的结构体数组和文件读写操作。
㈡ 用C语言编写手机通讯录程序
以前写了一个简单的:
#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);
}
㈢ 用C语言编写一个通讯录管理系统
C语言编写一个通讯录管理系统的源代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
/*定义保存通迅录的信息*/
structfriends
{
charname[20];/*名字*/
charprovince[20];/*省份*/
charcity[20];/*所在城市*/
charnation[20];/*民族*/
charsex[2];/*性别M/F*/
intage;/*年龄*/
}
(3)c语言做通讯录扩展阅读
1、在C++中应该使用inline内连函数替代宏调用,这样既可达到宏调用的目的,又避免了宏调用的弊端。
2、在C语言两个函数的名称不能相同,否则会导致编译错误。在C++中,函数名相同而参数不同的两个函数被解释为重载。
3、在大型程序中,使函数名易于管理和使用,不必绞尽脑汁地去处理函数名。
㈣ 如何用C语言做通讯录
通讯录至少应该有以下数据项:姓名,地址,手机,邮编,E-mail。
对通讯录应该包含有以下操作:向通讯录中添加信息,在通讯录中按姓名查找个人信息,删除通讯录中的个人信息,按不同数据项排序后列表输出通讯录中所有人的信息。通讯录中记录的数量可以是有限制的。
程序的主界面如下:
通讯录
1. 添加
2. 查询
3. 删除
4. 排序
5. 全部输出
0. 退出
#include
#include
#include "address.h"
#include "addressList.h"
#include "addressBook.h"
using namespace std;
int main()
{
new AddressBook; //开启通信录
return 0;
}
ostream& operator<<(ostream& os, const RecordList& c_rl)
{
RecordList::const_iterator it;
RecordList::const_iterator it_end =c_rl.end();
for (it=c_rl.begin();it!=it_end; it++)
{
os < (*it)->name << '\n' < (*it)->tel << '\n';
}
return os;
}
istream& operator>> (istream& is, RecordList& rl)
{
Record* rec;
string name;
while (true)
{
//注意这里使用的是全局的getline()函数,而不是istream的成员函
//数.全局的getling()函数将从istream中取出最后一个分隔符,
//而istream的成员函数getline则不会
getline(is,name);
if (name =="")
break;
rec = new Record;
rec->name=name;
getline(is,rec->tel );
rl.push_back(rec);
}
return is;
}
#include
#include
#include "addressBook.h"
using namespace std;
AddressBook::AddressBook()
{
isModified = false;
start();
}
AddressBook::~AddressBook()
{
}
//功能:显示欢迎画面,并开始进行用户交互处理
void AddressBook::start()
{
cout<<"\n"
<<"\t******************************\n"
<<"\t* 这是一个 *\n"
<<"\t* 简单的通信录程序 *\n"
<<"\t* 可以对通信录进行简单管理 *\n"
<<"\t* 欢迎使用通信录 *\n"
<<"\t******************************\n"
<<"\n";
handleMenu();
}
//功能:显示通信录菜单,返回用户选择的选项
//返回:用户选择的选项,是1-9之间的一个字符
char AddressBook::menuSelect()
{
cout<<"\n"
<<"1.显示记录\n"
<<"2.查询记录\n"
<<"3.增加记录\n"
<<"4.删除记录\n"
<<"5.保存记录\n"
<<"6.读取记录\n"
<<"7.新建记录\n"
<<"8.结束运行\n"
<<"\n左边数字对应功能选择,请选1-8:";
char choice[2];
while(true)
{
cin.getline(choice,2);
if(choice[0]'8')
cout<<"\n输入错误,重选1-8:";
else
break;
}
return choice[0];
}
//功能:根据用户选择的项目调用相应的处理函数
void AddressBook::handleMenu()
{
while(true)
{
switch(menuSelect())
{
case '1':
displayRecords();
break;
case '2':
queryRecord();
break;
.......
//功能:打印用于显示记录信息时的表头
void AddressBook::dispTable()
{
}
//功能:显示通信录中的所有记录
void AddressBook::displayRecords()
{
}
//功能:首先检查通信录是否已保存,然后清空当前通信录中所有记录
//注意:该函数覆盖了基类中的函数
void AddressBook::clear()
{
}
//功能:查询指定记录
void AddressBook::queryRecord()
{
//功能:向当前通信录追加新的记录
//注意:该函数重载了基类中的函数
void AddressBook::addRecord()
{
}
/*
//说明:如果使用string 类,效果更好。下面是实现本功能的程序代码:
while(true)
{
//输入新记录
string name;
cout<<"姓名:";
getline(cin,name);
//如果输入的姓名为“0”,则结束添加记录的操作
if(name=="0")
break;
Record* rec=new Record;
rec->name=name;
cout<<"电话:";
getline(cin,rec->tel);
//将新记录加入链表
AddressList::addRecord(rec);
}
//同理,下面的成员函数removeRecord()中的判断,可以使用如下替代方法:
string str;
getline(cin,str);
while(true)
{
if(str[0]!='1' && str[0]!='2')
{
cout<<"输入错误,重选1-2:";
getline(cin,str);
}
else
break;
}
*/
//功能:从当前通信录移除指定的记录
//注意:该函数重载了基类中的函数
void AddressBook::removeRecord()
{
if(empty())
{
cout<<"通信录已空,退出删除操作!"<<endl;
return;
}
//选择获取需要删除的记录的方式
cout<<"可以通过姓名或电话删除记录\n"
<<"1.通过姓名\n"
<<"2.通过电话\n";
char choice[2];
cin.getline(choice,2);
while(true)
{
if(choice[0]!='1' && choice[0]!='2')
{
cout<<"输入错误,重选1-2:";
cin.getline(choice,2);
}
else
break;
}
int type=static_cast(choice[0])-48;
//输入需要匹配的字符串
if(type==1)
cout<<"请输入姓名:"<<flush;
else
cout<<"请输入电话:"<<flush;
char pattern[20];
cin.getline(pattern,20);
int deletedCount=0;
/到匹配的记录
Iterator it=findRecord(pattern,type,first());
Iterator it_end=pastEnd();
while(it!=it_end)
{
cout<<"找到一条匹配的记录:\n";
dispTable();
cout<name<<"\t\t"<tel<<"\n";
cout<<"确定要删除这条记录吗?[Y/N]";
cin.getline(choice,2);
//删除这条记录
if(choice[0]!='n' && choice[0]!='N')
{
it=AddressList::removeRecord(it);
deletedCount++;
}
//取下一条匹配的记录
if(it!=it_end)
it=findRecord(pattern,type,++it);
}
cout<<"一共删除了"<<deletedCount<<"条记录\n"
<<"现在还有"<<size()<<"条记录"<<endl;
if(deletedCount!=0)
isModified=false;
}
//功能:将通信录保存至指定文件
//注意:该函数重载了基类中的函数
void AddressBook::saveRecords()
{
if(empty())
{
cout<<"没有记录可存!"<<endl;
return;
}
//因为下面的程序中使用string类的成员函数,所以需要进行一次转换
string fname;
char name[16];
cout<<"请输入要存在的文件名(直接回车选择文件sname):";
cin.getline(name,16);
fname=name;
if(fname.empty())
fname="sname";
ofstream of(fname.c_str(),ios_base::out);
if(!of)
{
cout<<"不能存入文件!"<<endl;
return;
}
AddressList::saveRecords(of);
of.close();
cout<<size()<<"条记录已经存入文件,请继续操作。"<<endl;
isModified=false;
}
//功能:从指定文件读取记录追加到当前通信录末尾
//注意:该函数重载了基类中的函数
void AddressBook::loadRecords()
{
}
void AddressBook::quit()
{
}
#ifndef H_ADDRESSBOOK_H_NNN
#define H_ADDRESSBOOK_H_NNN
#include "addressList.h"
//处理通信录操作的面向用户使用的类,包含所有功能的用户界面及用户交互的实现
class AddressBook :public AddressList
{
protected:
bool isModified; //通信录是否已被修改还未保存
public:
AddressBook();
virtual ~AddressBook();
//开始通信录的用户界面操作
virtual void start();
//菜单处理函数
virtual void handleMenu();
//显示记录
virtual void displayRecords();
//查询记录
virtual void queryRecord();
//增加记录
virtual void addRecord();
//删除记录
virtual void removeRecord();
//保存记录
virtual void saveRecords();
//读取记录
virtual void loadRecords();
//结束程序
virtual void quit();
//清空当前通信录
virtual void clear();
protected:
//菜单选择函数
char menuSelect();
//显示表头
void dispTable();
};
#endif //H_ADDRESSBOOK_HZ-NNN
#include "addressList.h"
AddressList::~AddressList()
{
recList.clear();
}
//功能:向通信录中添加新的记录
//参数:rec,指向新记录的指针
void AddressList::addRecord (Record* rec)
{
if (rec !=NULL)
{
recList.push_back(rec);
}
}
//功能:从通讯录中删除一个记录
//参数:it,指向欲删除记录的迭代器
//注意:it,应是可提领的迭代器,可以通过findRecord()获得
AddressList::Iterator AddressList::removeRecord(AddressList::Iterator it)
{
return recList.erase(it);
}
//功能:从通信录中寻找一个记录
//参数:pattern,欲寻找的记录的指定域与pattern相等
// type,为1表示欲寻找记录的名称(name)与pattern相等;
// 为2表示欲寻找记录的电弧(tel)与(pattern)相等。
// from,从from开始寻找匹配的记录。
//返回:若找到了则返回的迭代器指向第一个匹配记录的迭代器,
// 若找不到则返回的迭代器等于pastEnd()的返回值。
//注意:from应是可提领的迭代器。
// 第一次调用可以用first(),之后使用上一次findRecord()的返回值增1,
// 直到返回pastEnd(),便可以获得所有匹配的记录。
AddressList::Iterator AddressList::findRecord(string pattern,int type,AddressList::Iterator from)
{
Iterator it;
Iterator it_end=recList.end();
for (it=from; it!=it_end; it++)
{
if ((type==1 && (*it)->name==pattern)||(type==2 && (*it)->tel==pattern))
break;
}
return it;
}
//功能:将通信录保存到输出流中
//参数:os.指定的输出流
void AddressList::saveRecords(ostream &os)
{
os << recList;
}
//功能:从输入流中读入数据并追加到当前通信录的末尾
//参数:is,指定的输入流
//返回:读入的记录数
int AddressList::loadRecords(istream &is)
{
int ori =size();
is >> recList;
return size()-ori;
}
#ifndef H_ADDRESSLIST_H_AAA
#define H_ADDRESSLIST_H_AAA
#include
#include
#include "address.h"
using namespace std;
//处理通信录操作的底层类,包括增加记录、删
//除记录、查询记录以及保存和读取记录的函数,
//该类不涉及任何关于用户界面的操作
class AddressList
{
protected:
RecordList recList;// 使用对象成员作为数据成员
public:
typedef RecordList::iterator Iterator;
//向通信录中添加新的记录
virtual void addRecord(Record* rec);
//从通信录中删除一个记录
virtual Iterator removeRecord(Iterator it);
//从通讯录中寻找一个记录
virtual Iterator findRecord(string pattern,int type,Iterator from);
//将通信录保存到输出流中
virtual void saveRecords(ostream& os);
//从输入流中读入数据并追加到当前通信录的末尾
virtual int loadRecords(istream& is);
virtual ~AddressList();
//获得通信录中存储的记录数
const int size() const {return (int)recList.size();}
//通信录是否为空
const bool empty() const {return recList.empty();}
//清除通信录
virtual void clear() {recList.clear();}
//获得通信录的第一条记录
Iterator first(){return recList.begin();}
//获得通信录超过最后一个记录之后的迭代器
Iterator pastEnd() {return recList.end();}
};
#endif //H_ADDRESSLIST_H_AAA
㈤ C语言,编写一个简单的通讯录管理系统
#include <string.h>
#include <stdio.h>
#include<stdlib.h>
int cntAddr=0,i,j;
char in[12];
const char * strFmt=" %d %s %s %s %s ";
typedef struct ADDRESSD {
int ID;
char name[12];
char workPlace[12];
char teleOff[12];
char teleHome[12];
}ADDRESS;
ADDRESS addrTmp[100],adTmp;
int load(ADDRESS adr[]){
FILE *fp;
if((fp=fopen("c:\txl.txt","r"))!=NULL){
cntAddr=0;
while(!feof(fp)){
fscanf(fp,"%d %s %s %s %s ",&(adr[cntAddr].ID),adr[cntAddr].name,adr[cntAddr].workPlace,adr[cntAddr].teleOff,adr[cntAddr].teleHome);
++cntAddr;
}
}
fclose(fp);
return cntAddr;
};
void list(ADDRESS addr[],int length){
for(i=0;i<length;++i)printf(strFmt,addr[i].ID,addr[i].name,addr[i].workPlace,addr[i].teleOff,addr[i].teleHome);
}
void display(ADDRESS addr[]){
for(i=0;i<cntAddr;++i)addrTmp[i]=addr[i];
for(i=0;i<cntAddr-1;++i)for(j=i+1;j<cntAddr;++j)if(addrTmp[i].ID>addrTmp[j].ID){adTmp=addrTmp[i];addrTmp[i]=addrTmp[j];addrTmp[j]=adTmp;}
for(i=0;i<cntAddr;++i)printf(strFmt,addrTmp[i].ID,addrTmp[i].name,addrTmp[i].workPlace,addrTmp[i].teleOff,addrTmp[i].teleHome);
}
void namesort(ADDRESS addr[],int length){
for(i=0;i<length;++i)addrTmp[i]=addr[i];
for(i=0;i<length-1;++i)for(j=i+1;j<length;++j)if(strcmp(addrTmp[i].name,addrTmp[j].name)>0){adTmp=addrTmp[i];addrTmp[i]=addrTmp[j];addrTmp[j]=adTmp;}
for(i=0;i<length;++i)printf(strFmt,addrTmp[i].ID,addrTmp[i].name,addrTmp[i].workPlace,addrTmp[i].teleOff,addrTmp[i].teleHome);
};
void save(ADDRESS adr[],int length){
FILE *fp;
fp=fopen("c:\txl.txt","w");
for(i=0;i<cntAddr;++i)fprintf(fp,"%d %s %s %s %s ",adr[i].ID,adr[i].name,adr[i].workPlace,adr[i].teleOff,adr[i].teleHome);
fclose(fp);
};
void unitssort(ADDRESS addr[],int length){
for(i=0;i<length;++i)addrTmp[i]=addr[i];
for(i=0;i<length-1;++i)for(j=i+1;j<length;++j)if(strcmp(addrTmp[i].workPlace,addrTmp[j].workPlace)>0){adTmp=addrTmp[i];addrTmp[i]=addrTmp[j];addrTmp[j]=adTmp;}
for(i=0;i<length;++i)printf(strFmt,addrTmp[i].ID,addrTmp[i].name,addrTmp[i].workPlace,addrTmp[i].teleOff,addrTmp[i].teleHome);
};
void namesearch(ADDRESS addr[],int length){
printf("请输入姓名: ");
scanf("%s",&in);
for(i=0;i<length;++i)if(strcmp(addr[i].name,in)==0)printf(strFmt,addr[i].ID,addr[i].name,addr[i].workPlace,addr[i].teleOff,addr[i].teleHome);
};
void unitssearch(ADDRESS adr[],int length){
printf("请输入工作单位: ");
scanf("%s",&in);
for(i=0;i<length;++i)if(strcmp(adr[i].workPlace,in)==0)printf(strFmt,adr[i].ID,adr[i].name,adr[i].workPlace,adr[i].teleOff,adr[i].teleHome);
};
void officenumbersearch(ADDRESS adr[],int length){
printf("请输入办公电话: ");
scanf("%s",&in);
for(i=0;i<length;++i)if(strcmp(adr[i].teleOff,in)==0)printf(strFmt,adr[i].ID,adr[i].name,adr[i].workPlace,adr[i].teleOff,adr[i].teleHome);
};
void homenumbersearch(ADDRESS adr[],int length){
printf("请输入家庭电话: ");
scanf("%s",&in);
for(i=0;i<length;++i)if(strcmp(adr[i].teleHome,in)==0)printf(strFmt,adr[i].ID,adr[i].name,adr[i].workPlace,adr[i].teleOff,adr[i].teleHome);
};
int delet(ADDRESS adr[],int length){
printf("要修改第几条记录: ");
scanf("%d",&j);
for(i=j;i<length-1;++i)adr[i]=adr[i+1];
return --length;
};
void rewrite(ADDRESS adr[],int length){
printf("要修改第几条记录: ");
scanf("%d",&j);
printf("请输入ID: ");
scanf("%d",&i);
adr[j].ID=i;
printf("请输入姓名: ");
scanf("%s",in);
strcpy(adr[j].name,in);
printf("请输入工作单位: ");
scanf("%s",in);
strcpy(adr[j].workPlace,in);
printf("请输入办公电话: ");
scanf("%s",in);
strcpy(adr[j].teleOff,in);
printf("请输入家庭电话: ");
scanf("%s",in);
strcpy(adr[j].teleHome,in);
};
int add(ADDRESS adr[],int length){
printf("请输入ID: ");
scanf("%d",&i);
adr[length].ID=i;
printf("请输入姓名: ");
scanf("%s",in);
strcpy(adr[length].name,in);
printf("请输入工作单位: ");
scanf("%s",in);
strcpy(adr[length].workPlace,in);
printf("请输入办公电话: ");
scanf("%s",in);
strcpy(adr[length].teleOff,in);
printf("请输入家庭电话: ");
scanf("%s",in);
strcpy(adr[length].teleHome,in);
return ++cntAddr;
};
void (){
FILE *fp,*fc;
printf("请输入新文件名(路径中的反斜杠用\表示) ");
scanf("%s",&in);
if((fp=fopen("c:\txl.txt","r"))!=NULL){
fc=fopen(in,"w");
while(!feof(fp)){
fscanf(fp,"%d %s %s %s %s ",&(adTmp.ID),adTmp.name,adTmp.workPlace,adTmp.teleOff,adTmp.teleHome);
fprintf(fc,"%d %s %s %s %s ",adTmp.ID,adTmp.name,adTmp.workPlace,adTmp.teleOff,adTmp.teleHome);
}
fclose(fc);
}
fclose(fp);
};
int enter(ADDRESS adr[]){
cntAddr=0;
printf("请按次序输入数据,结束按CTRL+z: ");
while(1){
printf("请输入ID: ");
if(scanf("%d",&i)==EOF)break;
adr[cntAddr].ID=i;
printf("请输入姓名: ");
if(scanf("%s",in)==EOF)break;
strcpy(adr[cntAddr].name,in);
printf("请输入工作单位: ");
if(scanf("%s",in)==EOF)break;
strcpy(adr[cntAddr].workPlace,in);
printf("请输入办公电话: ");
if(scanf("%s",in)==EOF)break;
strcpy(adr[cntAddr].teleOff,in);
printf("请输入家庭电话: ");
if(scanf("%s",in)==EOF)break;
strcpy(adr[cntAddr].teleHome,in);
++cntAddr;
}
return cntAddr;
};
void showpaixu(ADDRESS adr[],int length)
{
int choice;
menu1:
system("cls");
printf(" *************************通讯录信息管理系统************************* ");
printf(" 1. 全部显示通讯录信息 ");
printf(" 2. 按序号显示通讯录信息 ");
printf(" 3. 按姓名排序 ");
printf(" 4. 按工作单位排序 ");
printf(" 0. 返回上一级菜单 ");
printf(" ******************************************************************** ");
printf(" 请选择(0~4) ");
scanf("%d",&choice);
switch(choice)
{
case 1:
list(adr,length);
printf(" 请按任意键返回... ");
system("pause");
break; /*显示全部记录*/
case 2:
display(adr);
printf(" 请按任意键返回... ");
system("pause");break; /*按序号显示记录*/
case 3:
namesort(adr,length);
printf(" 请按任意键返回... ");
system("pause");
break; /*按姓名排序*/
case 4:
unitssort(adr,length);
printf(" 请按任意键返回... ");
system("pause");
break; /*按工作单位排序*/
case 0: return;
}
goto menu1;
}
/*通讯录信息查找功能*/
void chazhao(ADDRESS adr[],int length)
{
int choice;
menu2:
system("cls");
printf(" *************************通讯录信息管理系统************************* ");
printf(" 1. 通过姓名查找 ");
printf(" 2. 通过工作单位查找 ");
printf(" 3. 通过办公电话查找 ");
printf(" 4. 通过家庭电话查找 ");
printf(" 0. 返回上一级菜单 ");
printf(" ******************************************************************** ");
printf(" 请选择(0~4) ");
scanf("%d",&choice);
switch(choice)
{
case 1:
namesearch(adr,length);
printf(" 请按任意键返回... ");
system("pause");
break; /*按姓名查找记录*/
case 2:
unitssearch(adr,length);
printf(" 请按任意键返回... ");
system("pause");
break; /*按工作单位查找记录*/
case 3:
officenumbersearch(adr,length);
printf(" 请按任意键返回... ");
system("pause");
break; /*按办公电话查找记录*/
case 4:
homenumbersearch(adr,length);
printf(" 请按任意键返回... ");
system("pause");
break; /*按住宅电话查找记录*/
case 0: return;
}
goto menu2;
}
/*通讯录信息变更功能*/
void biangeng(ADDRESS adr[],int length)
{
int choice;
menu3:
system("cls");
printf(" *************************通讯录信息管理系统************************* ");
printf(" 1. 删除记录 ");
printf(" 2. 修改记录 ");
printf(" 3. 添加记录 ");
printf(" 0. 返回上一级菜单 ");
printf(" ******************************************************************** ");
printf(" 请选择(0~3) ");
scanf("%d",&choice);
switch(choice)
{
case 1:
length=delet(adr,length);
save(adr,length);
printf(" 请按任意键返回... ");
getchar();
break; /*删除记录*/
case 2:
rewrite(adr,length);
save(adr,length);
printf(" 请按任意键返回... ");
getchar();
break; /*修改记录*/
case 3:
length=add(adr,length);
save(adr,length);
printf(" 请按任意键返回... ");
getchar();
break; /*插入记录*/
case 0: return;
}
goto menu3;
}
int wenjian(ADDRESS adr[],int length)
{
int choice;
menu4:
system("cls");
printf(" *************************通讯录信息管理系统************************* ");
printf(" 1. 导入文件到通讯录 ");
printf(" 2. 把当前文件复制到新文件上 ");
printf(" 0. 返回上一级菜单 ");
printf(" ******************************************************************** ");
printf(" 请选择(0~2) ");
scanf("%d",&choice);
switch(choice)
{
case 1: length=load(adr);
printf("您已经成功的导入文件到通讯录! ");
printf(" 请按任意键返回... ");
system("pause");break;
case 2: ();
printf("复制成功! ");
printf(" 请按任意键返回... ");
system("pause");break;
case 0: return length;
}
goto menu4;
}
/*关于*/
void about()
{
system("color 87");
system("cls");
printf(" 《通讯录信息管理系统》 ");
printf(" ***************************************** ");
printf(" 版权所有(C) 2009-2010 DIY软件 ");
printf(" 制作人:西北民族大学计算机科学与信息09级计算机3班 王元波 ");
printf(" ***************************************** ");
printf(" 请按任意键返回主菜单...");
system("pause");
}
/******主函数开始*******/
void main()
{
int choice;
int length; /*保存记录长度*/
ADDRESS adr[100] ; /*定义结构体数组*/
menu:
system("color f9");
system("cls");
printf(" *************************通讯录信息管理系统************************* ");
printf(" 请选择以下通讯录管理功能: ");
printf(" 1. 通讯录信息输入 ");
printf(" 2. 通讯录信息浏览及排序 ");
printf(" 3. 通讯录信息查询 ");
printf(" 4. 通讯录信息更改 ");
printf(" 5. 通讯录及文件操作 ");
printf(" 6. 关于通讯录信息管理系统 ");
printf(" 0. 退出通讯录管理系统 ");
printf(" ******************************************************************** ");
printf(" 请选择(0~6) ");
scanf("%d",&choice);
switch(choice)
{
case 1: length=enter(adr);
save(adr,length);
printf(" 请按任意键返回... ");
system("pause");break;/*输入记录*/
case 2: showpaixu(adr,length);break;
case 3: chazhao(adr,length);break;
case 4: biangeng(adr,length);break;
case 5: length=wenjian(adr,length);break;
case 6: about();break;/*关于*/
case 0: return; /*如返回值为则程序结束*/
}
goto menu;
}
拓展资料
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
㈥ c语言中做一个通讯录,能够添加、删除、修改、查找
# include<stdio.h>
# include<string.h>
struct tongxun
{char name[20];
char number[20];
struct tongxun *next;
};
int all=0;
struct tongxun* tj() /*创建链表并添加成员*//**/
{
struct tongxun *head=NULL;
struct tongxun *p,*q;
system("CLS");
p=q=(struct tongxun *)malloc(sizeof(struct tongxun));
for(;;)
{printf("请输入姓名:(如果输入0则退出添加)\n");
scanf("%s",p->name);
if(!(strcmp(p->name,"0"))){ free(p);return head;}
else {printf("请输入电话号码:\n");
scanf("%s",p->number);
all++;
if(all==1)
{p->next=head;
q=p;
head=q;}
else
{p->next=NULL;
q->next=p;
q=p;
}
p=(struct tongxun *)malloc(sizeof(struct tongxun));
}
}
}
cz(struct tongxun *head) /*查找函数*/
{char name1[20],*a;
struct tongxun *p;
p=head;a=name1;
system("CLS");
printf("请输入要查找的姓名:\n");
scanf("%s",a);
while(p!=NULL)
{if((strcmp(p->name,a))==0) {printf("姓名:%s\n电话号码:%s\n",p->name,p->number);return;}
else p=p->next;
}
printf("没有此人\n");
return;
}
insert(struct tongxun *head) /*插入新成员*/
{struct tongxun* pnew;
pnew=(struct tongxun *)malloc(sizeof(struct tongxun));
while(1)
{printf("请输入姓名:(如果输入0则退出添加)\n");
scanf("%s",pnew->name);
if(!(strcmp(pnew->name,"0"))){ free(pnew);return head;}
else {printf("请输入电话号码:\n");
scanf("%s",pnew->number);
all++;
pnew->next=head;
head=pnew;
pnew=(struct tongxun *)malloc(sizeof(struct tongxun));
}
}
}
shuchu(struct tongxun *head) /*输出成员*/
{struct tongxun *p;
p=head;
printf("这里一共有%d个成员\n",all);
while(p!=NULL)
{printf("姓名:%s\n电话号码:%s\n",p->name,p->number);
p=p->next;
}
}
xg(struct tongxun *head) /*修改成员*/
{char name1[20],*a;
struct tongxun *p;
p=head;a=name1;
system("CLS");
printf("请输入要修改的姓名:\n");
scanf("%s",a);
while(p!=NULL)
{if((strcmp(p->name,a))==0) {printf("请重新输入姓名:\n");
scanf("%s",p->name);
printf("请重新输入电话号码:\n");
scanf("%s",p->number);return;}
else p=p->next;
}
printf("没有此人\n");
return;
}
sc(struct tongxun *head) /*删除成员*/
{char name1[20],*a;
struct tongxun *p,*q;
p=q=head;a=name1;
system("CLS");
printf("请输入要删除的姓名:\n");
scanf("%s",a);
while(p!=NULL)
{
if((strcmp(p->name,a))==0) {all--;q->next=p->next;return;}
else {q=p;p=p->next;}
}
printf("没有此人\n");
return;
}
void main()
{struct tongxun *head;int i;
while(1)
{printf("请选择:\n");
printf("1.添加 2.查找 3.修改 4.删除 5.插入 6.输出\n");scanf("%d",&i);
switch(i)
{case 1:head=tj();break;
case 2:cz(head);break;
case 3:xg(head);break;
case 4:sc(head);break;
case 5:insert(head);break;
case 6:shuchu(head);break;
default:printf("输入有误,请重新输入:\n");break;
}
}
}
㈦ C语言编写通讯录
#include<string.h>
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>//包含system函数头文件
#defineLENsizeof(structstudent)
structstudent
{
charnum[20];//ID号码
charname[100];//用户姓名
charphone[20];//电话号码
charhome[100];//通讯地址
charbirthday[20];//出生日期
structstudent*next;
};
voidface(void)//功能选择面板
{
printf("********************************************************************");
printf(" ☆★☆★☆★~_~~_~~_~☆★☆★☆★ ");
printf(" ☆★欢迎使用阿冬子通讯录☆★");
printf(" ☆★选择你需要操作的功能:☆★(现无记录,建议先填加记录)★☆ ");
printf(" ");
printf(" 1.【增加通讯录信息〗 ");
printf(" 2.〖显示通讯录中所有记录】 ");
printf(" 3.【删除需要删除的信息〗 ");
printf(" 4.〖以名字查询所需的信息】 ");
printf(" 5.【保存通讯录中的所有记录到指定文件中〗 ");
printf(" 6.〖退出不保存!!】 ");
printf(" ");
printf(" ☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★");
printf(" ******************************************************************** ");
}
voidprint(structstudent*head)
{
structstudent*p;
p=head;
system("CLS");//调用DOS命令CLS能够清屏
printf("************************************************************* ");
printf("====================→用户信息记录表←=================== ");
printf("************************************************************* ");
if(head!=NULL)
do
{
printf("联系人ID号码:%s ",p->num);
printf("联系人姓名:%s ",p->name);
printf("联系人电话号码:%s ",p->phone);
printf("学生地址:%s ",p->home);
printf("联系人出生日期:%s ",p->birthday);
printf("******************************************************** ");
p=p->next;
}while(p!=NULL);
else
{
printf("对不起!!没有任何联系人记录!! ");
printf("============================================================= ");
}
}
//增添电子通讯录中的内容,即创建连表过程
structstudent*append(structstudent*head)
{
structstudent*p0=NULL,*p1,*p2;//p0为要插入的新节点
p1=head;
p2=head;
system("CLS");
printf(" *********************************************************** ");
printf(" 你能在此目录下创建并添加联系人信息");
printf(" *********************************************************** ");
p0=(structstudent*)malloc(LEN);
printf("请输入联系人ID号码:");
gets(p0->num);
printf("请输入联系人姓名:");
gets(p0->name);
printf("请输入联系人电话号码:");
gets(p0->phone);
printf("请输入联系人地址:");
gets(p0->home);
printf("请输入联系人出生日期:");
gets(p0->birthday);
//对插入的节点排序,按姓名的拼音顺序
if(head==NULL)
{head=p0;p0->next=NULL;}
else
{
while((strcmp(p0->name,p1->name)>0)&&(p1->next!=NULL))
{p2=p1;p1=p1->next;}
if((strcmp(p0->name,p1->name))<=0)
{
if(head==p1)
head=p0;
else
p2->next=p0;
p0->next=p1;
}
else
{p1->next=p0;p0->next=NULL;}
printf("恭喜你!!成功添加了联系人信息!!");
printf(" ************************************************************ ");
printf(" ");
}
return(head);
}
//电子通讯录的维护(删除),通过输入联系人ID号码删除联系人数据
structstudent*del(structstudent*head)
{
structstudent*p1,*p2;
charnum[12];
system("CLS");
printf(" ************************************************************ ");
printf("=================→用户信息记录删除功能←=============== ");
printf("************************************************************ ");
printf("输入要删除的联系人ID号码:");
gets(num);
p1=head;
if(head==NULL)
{
printf("很抱歉!!没有任何联系人纪录!! ");
printf(" ******************************************************* ");
return(head);
}
while(p1!=NULL)
{
if(strcmp(p1->num,num)==0)
{
if(p1==head)
head=p1->next;
elsep2->next=p1->next;
free(p1);
printf("删除记录成功!! ");
return(head);
}
p2=p1;
p1=p1->next;
}
printf("对不起!!没有要删除的联系人纪录!! ");
return(head);
}
//电子通讯录的查找,关键字为用户姓名;
voidsearch(structstudent*head)
{
structstudent*p1,*p2;
charname[20];
p1=head;
p2=p1;
system("CLS");
printf(" ************************************************************** ");
printf("================→用户信息记录查询功能←================== ");
printf("************************************************************** ");
printf("输入要查找联系人的姓名:");
gets(name);
while(p1!=NULL)
{
if(strcmp(p1->name,name)==0)
{
printf("联系人ID号码:");
puts(p1->num);
printf("联系人姓名:");
puts(p1->name);
printf("联系人电话号码:");
puts(p1->phone);
printf("联系人地址:");
puts(p1->home);
printf("联系人出生日期:");
puts(p1->birthday);
printf(" ============================================================= ");
break;
}
p2=p1;
p1=p1->next;
}
if(p1==NULL)
printf("对不起!!没有该联系人的纪录!! ");
}
//电子通讯录的记录存盘操作,使用文件指针;
voidsave(structstudent*head)
{
FILE*fp,*fp1;
structstudent*p;
p=head;
fp=fopen("record.txt","w");
fp1=fopen("record1.txt","w");
fprintf(fp1,"===============→用户信息记录表←================= ");
while(p!=NULL)
{
//首先把数据保存在record.txt中,这是提供给load函数用的数据
//fprintf(fp,"%s%s%s%s%s%s",p->num,p->name,p->phone,p->email,p->home,p->birthday);
//然后把数据保存在record1.txt中,这是能提供直接查询看的,有比较友好的画面
fprintf(fp1,"==================================================== ");
fprintf(fp1,"联系人ID号码:%s ",p->num);
fprintf(fp1,"联系人姓名:%s ",p->name);
fprintf(fp1,"联系人电话:%s ",p->phone);
fprintf(fp1,"联系人家庭地址:%s ",p->home);
fprintf(fp1,"联系人出生日期:%s ",p->birthday);
p=p->next;
}
fprintf(fp1,"************************************************************* ");
fclose(fp1);
fclose(fp);
printf(" 恭喜你!!成功储存,你能在record1.txt找到相应纪录 ");
printf("************************************************************** ");
printf("PRESSANYKEYTOEXIT. ");
getchar();
exit(1);
}
//电子通讯录的记录读盘操作,使用文件指针;
structstudent*load(void)
{
FILE*fp;
structstudent*head=NULL,*p1=NULL,*p2=NULL;
charc;
inti;
fp=fopen("record.txt","r");
for(i=1;(c=fgetc(fp))!=-1;i++)
{
p1=(structstudent*)malloc(LEN);
//fscanf(fp,"%s%s%s%s%s%s",p1->num,p1->name,p1->phone,p1->email,p1->home,p1->birthday);
if(i==1)
{head=p1;p2=p1;}
else
{p2->next=p1;p2=p1;}
}
if(p1==NULL)
{fclose(fp);return(head);}
p2->next=NULL;
fclose(fp);
return(head);
}
main()
{
FILE*fp1,*fp2;
intc;//功能选择需要的号码
system("cls");
system("color2f");
system("cls");
structstudent*head=NULL;
if((fp1=fopen("record.txt","r"))==NULL)
{
fp2=fopen("record.txt","w");//如果不存在record.txt就创建一个
fclose(fp2);
}
head=load();
while(1)
{
face();
printf("选择你需要操作的功能号码:");
scanf("%d",&c);
getchar();
switch(c)
{
case1:head=append(head);break;
case2:print(head);break;
case3:head=del(head);break;
case4:search(head);break;
case5:save(head);break;
case6:exit(0);break;
default:printf("Entererror!! ");
}
//printf("***************** ");
printf("◇◆请按ENTER返回功能操作菜单◇◆ ");
//printf("***************** ");
getchar();
system("CLS");
}
}
㈧ 编写C语言一个通讯录程序
这是我以前写的课程设计,
电子通讯录功能如下:
Function choose
1.Read
2.Append
3.Delete
4.Search
5.Save and exit
6.Quit
说明:上图是电子通讯录的主菜单,利用它,将能够轻松地录入一个朋友的电话号
码,通讯地址和出生日期,而且它还提供了检索和删除功能。在后面还将提供按生
日先后排序的功能,这些都有助于该通讯录的管理。
电子通讯录是采用线性表作为程序的基本结构的。
设计思想:
1。用顺序表设计电子通讯录的结构
为了表示较为复杂的数据内容,一般用结构这种数据类型,第一步就是在结构中定
义所需要的各项信息。
一般的通讯录都包括姓名,性别,出生年月,通讯地址和联系电话这几项,而
在这几项中,出生年月又包括年份,月份和日期三项,通讯地址包括邮编和家庭地
址二项,我们把这些联系较为紧密的内容又用单独的结构表示,这样就产生了电子
通讯录的基本结构:
struct addr /*通讯地址结构定义*/
{ char post_num[10]; /*邮编*/
char addr[40]; /*家庭地址*/
};
struct birth /*出生年月结构定义*/
{ int year; /*年份*/
int month; /*月份*/
int day; /*日期*/
};
struct friend /*电子通讯录结构定义*/
{ int number; /*序号*/
char name[20] /*姓名*/
char sex; /*性别*/
struct birth birth; /*出生年月*/
struct addr addr; /*通信地址*/
char telephone[13]; /*联系电话*/
};
定义的主结构friend包含了前述的五项内容 name,sex,和telephone分别代表
了姓名,性别和联系电话。为了让结构中的各项组分更加清晰,定义了二个
小结构birth 和addr分别代表出生年月和通讯地址,因此实际上friend包含了
8项内容。
有了结构定义后,我们可以很轻松地构造出电子通讯录的主体:
stryct friend friends[50];
采用一维数组 friends[50],正是用到了顺序表这种最简单的数据结构来表示
问题。
2.增添电子通讯录中的内容
对于电子通讯录这样一张顺序表来说,内容的录入是必不可少的操作。由
于采用的是顺序存储结构。这项工作很简单,只需要在把输入的信息按顺序放
在空的friends数组元素中即可。函数Data_Input完成了信息的录入工作:
void Data_input(int j)
{
friends[j].number=j;
printf("\n\n\n\tNo %d record",j);
printf("\n\n\tName:"); /*读入姓名*/
scanf("%s",friends[j].name);
printf("\n\tSex(m/f):"); /*读入姓别*/
scanf("%c",&friends[j].sex);
printf("\n\tbirthday:"); /*读入出生年月*/
printf("\n\t\tyear:");
scanf("%d",&friends[j].birth.year);
printf("\n\t\tmonth");
scanf("%d",&friends[j].birth.month);
printf("\n\t\tday");
scanf("%d",&friends[j].birth.day);
printf("\n\tPost number:"); /*读入邮编*/
scanf("%s",friends[j].addr.post_num);
printf("\n\tAddress:"); /*读入家庭地址*/
scanf("%s",friends[j].addr.addr);
printf("\n\ttelephone:"); /*读入联系电话*/
scanf("%s",friends[j].telephone);
}
㈨ 用C语言写一个通讯录
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
typedef struct { //通讯录结点类型
char num[5]; //编号
char name[9]; //姓名
char sex[3]; //性别
char phone[13]; //电话
char addr[31]; //地址
} DataType;
typedef struct node { //结点类型定义
DataType data; //结点数据域
struct node *next; //结点指针域
} ListNode;
typedef ListNode *LinkList;
LinkList head;
ListNode *p;
//函数说明
int menu_select();
LinkList CreateList(void);
void InsertNode(LinkList head,ListNode *p);
ListNode *ListFind(LinkList head);
void DelNode(LinkList head);
void printList(LinkList head);
//主函数
void main()
{
for( ; ; ){
switch(menu_select( ) )
{
case 1:
printf("**********************************\n");
printf("* 通 讯 录 链 表 的 建 立 *\n");
printf("**********************************\n");
head=CreateList( );
break;
case 2:
printf("**********************************\n");
printf("* 通 讯 者 信 息 的 添 加 *\n");
printf("**********************************\n");
printf("编号(4) 姓名(8) 性别(3) 电话(11) 地址(31)\n");
printf("************************************* \n");
p=(ListNode *)malloc(sizeof(ListNode)); //申请新结点
scanf("%s%s%s%s%s",p->data.num,p->data.name,p->data.sex,
p->data.phone,p->data.addr);
InsertNode(head,p);
break;
case 3:
printf("***********************************\n");
printf("* 通 讯 录 信 息 的 查 询 *\n");
printf("***********************************\n");
p=ListFind(head);
if (p!=NULL) {
printf("编号 姓 名 性别 联系电话 地址 \n");
printf("--------------------------------------------------\n");
printf("%s,%s,%s,%s,%s\n",p->data.num,p->data.name,
p->data.sex,p->data.phone,p->data.addr);
printf("---------------------------------------------------\n");
}
else
printf("没有查到要查询的通讯者!\n");
break;
case 4:
printf("***********************************\n");
printf("* 通 讯 录 信 息 的 删 除 *\n");
printf("***********************************\n");
DelNode(head); //删除结点
break;
case 5:
printf("************************************\n");
printf("* 通 讯 录 链 表 的 输 出 *\n");
printf("************************************\n");
printList(head);
break;
case 0:
printf("\t 再 见! \n");
return;
}
}
}
/*******************/
/* 菜单选择函数程序 */
/***************************/
int menu_select( )
{
int sn;
printf(" 通讯录管理系统 \n");
printf("===================\n");
printf(" 1.通讯链表的建立\n");
printf(" 2.通讯者结点的插入\n");
printf(" 3.通讯者结点的查询\n");
printf(" 4.通讯者结点的删除\n");
printf(" 5.通讯录链表的输出\n");
printf(" 0.退出管理系统\n");
printf("==========================\n");
printf(" 请 选 择 0-5: ");
for( ; ; )
{
scanf("%d",&sn);
if (sn<0||sn>5)
printf("\n\t输入错误,重选0-5:");
else
break;
}
return sn;
}
/**************************/
/*用尾插法建立通讯录链表函数 */
/**************************/
LinkList CreateList(void)
{//尾插法建立带头结点的通讯录链表算法
LinkList head=(ListNode *)malloc(sizeof(ListNode)); //申请头结点
ListNode *p,*rear;
int flag=0; //结束标志置0
rear=head; //尾指针初始指向头结点
while (flag==0)
{ p=(ListNode *)malloc(sizeof(ListNode)); //申新结点
printf("编号(4) 姓名(8) 性别 电话(11) 地址(31)\n");
printf("--------------------------------------------------------------------------------------\n");
scanf("%s%s%s%s%s",p->data.num,p->data.name,p->data.sex,p->data.phone,
p->data.addr);
rear->next=p; //新结点连接到尾结点之后
rear=p; //尾指针指向新结点
printf("结束建表吗?(1/0):");
scanf("%d",&flag);
}
rear->next=NULL; //终端结点指针置空
return head; //返回链表头指针
}
/******************************/
/*在通讯录链表head中插入结点 */
/******************************/
void InsertNode(LinkList head,ListNode *p)
{
ListNode *p1,*p2;
p1=head;
p2=p1->next;
while(p2!=NULL && strcmp(p2->data.num,p->data.num)<0)
{
p1=p2; //p1指向刚访问过的结点
p2=p2->next; //p2指向表的下一个结点
}
p1->next=p; //插入p所指向的结点
p->next=p2; //连接表中剩余的结点
}
/******************************************/
/* 有序通讯录链表的查找 */
/******************************************/
ListNode *ListFind(LinkList head)
{// 有序通讯录链表上的查找
ListNode *p;
char num[5];
char name[9];
int xz;
printf("==================\n");
printf(" 1. 按编号查询 \n");
printf(" 2. 按姓名查询 \n");
printf("==================\n");
printf(" 请 选 择: ");
p=head->next; //假定通讯 录表带头结点
scanf("%d",&xz);
if (xz==1) {
printf("请输入要查找者的编号:");
scanf("%s",num);
while (p&&strcmp(p->data.num,num)<0)
p=p->next;
if ((p==NULL)||strcmp(p->data.num,num))0;
p=NULL; //没有查到要查找的通讯者
}
else
if (xz==2) {
printf(" 请输入要查找者的姓名:");
scanf("%s",name);
while(p&&strcmp(p->data.name,name)!=0)
p=p->next;
}
return p;
}
/*******************************/
/* 通讯录链表上的结点删除 */
/*********************************/
void DelNode(LinkList head)
{
char jx;
ListNode *p,*q;
p=ListFind(head); //调用查找函数
if (p==NULL) {
printf("没有查到要删除的通讯者!\n");
return;
}
printf("真的要删除该结点吗?(y/n):");
scanf("%c",&jx);
if (jx=='y'||jx=='Y') {
q=head;
while ((q!=NULL) &&(q->next!=p))
q=q->next;
q->next=p->next; //删除结点
free(p); //释放被删结点空间
printf("通讯者已被删除!\n");
}
}
/**********************************/
/* 通讯录链表的输出函数 */
/**********************************/
void printList(LinkList head)
{
ListNode *p;
p=head->next;
printf("编号 姓 名 性别 联系电话 地址 \n");
printf("--------------------------------------------------------------------------------\n");
while (p!=NULL)
{ printf("%s,%s,%s,%s,%s\n",p->data.num,p->data.name,p->data.sex,
p->data.phone,p->data.addr);
printf("---------------------------------------------------------------------------------\n");
p=p->next; //后移一个结点
}
}
㈩ 用C语言如何做通讯录
因为不知道你要实现什么功能,给个程序仅供参考 编译环境:vc++6.0 #include<iostream> #include<windows.h> using namespace std; typedef struct { char name[25];//姓名 char number[50];//电话号码 int a;//序号 char cls;//分类 char mail[50];//邮箱 }BOOK; typedef struct node { BOOK data; struct node *next; }Node,*Link; void Menu() { cout<<" |------------------------------------|"<<endl; cout<<" | 1.查看通讯录; 2.查找联系人; |"<<endl; cout<<" | 3.删除联系人; 4.添加联系人; |"<<endl; cout<<" | 0.退出系统; |"<<endl; cout<<" |------------------------------------|"<<endl; } void Ordination(Link L)//通讯录进行排序 { Node *p; int i=1; p=L->next; while(p) { p->data.a=i++; p=p->next; } } int Ordination1(Link L)//通讯录进行排序 { Node *p; int i=1; p=L->next; while(p) { p->data.a=i++; p=p->next; } if(i==16) cout<<"\t\t\t通讯录已满!\n"; return(i-1); } Node *Locate(Link L,char nam[],char num[]) { Node *p; p=L->next; while(p) { if(strcmp(p->data.name,nam)==0||strcmp(p->data.number,num)==0) return p; p=p->next; } return p; } void Fincls(Link L)//按类查找 { Node *p; char str; int count=0; cout<<"请输入分类(A,B,C):"; cin>>str; p=L->next; if(!p) {cout<<"\t\t\t通讯录中没有联系人.\n";return;} while(p) { if(str==p->data.cls) {cout<<"姓名:"<<p->data.name<<";号码:"<<p->data.number<<endl; count++;} p=p->next; } if(count==0) cout<<"\t\t\t没有"<<str<<"类联系人.\n"; } void Add(Link L)//添加联系人 { Node *p,*r; char nam[25]; char num[50]; int flag=0; flag=Ordination1(L); if(flag==15) return; cout<<"姓名:"; scanf("%s",nam); cout<<"号码:"; scanf("%s",num); p=Locate(L,nam,num); if(p!=NULL) {cout<<"\t\t\t该人信息已存在!\n"; return; } r=L; while(r->next!=NULL) r=r->next; p=(Node*)malloc(sizeof(Node)); p->next=NULL; strcpy(p->data.name,nam); strcpy(p->data.number,num); cout<<"分类(选A,B或C):"; p->data.cls=getchar(); p->data.cls=getchar(); cout<<"邮件:"; scanf("%s",p->data.mail); r->next=p; Ordination(L); } void Bohao(Node *p)//自动拨号功能 { int i,j; system("cls"); for(i=0;i<50;i++) { if(p->data.number[i]=='\0') break; } for(j=0;j<i;j++) { printf("\a%c",p->data.number[j]); Sleep(300); } cout<<endl; } void Book(Link L)//通讯录 { Node *p; char str[25],ch; p=L->next; if(p==NULL) {cout<<"\t\t\t没有联系人.\n";return;} cout<<"通讯录:\n"; while(p!=NULL) { cout<<p->data.a<<".";//显示序号 cout<<p->data.name<<endl; p=p->next; } cout<<"请输入姓名查看联系方式(0退出通讯录):"; scanf("%s",str); if(strcmp(str,"0")==0) return; p=L->next; while(p) { if(strcmp(p->data.name,str)==0) break; p=p->next; } cout<<"姓名:"<<p->data.name<<";号码:"<<p->data.number<<endl; cout<<"是否拨号?(y/n):"; ch=getchar(); ch=getchar(); if(ch=='y'||ch=='Y') Bohao(p); } void Delet(Link L)//删除联系人 { Node *p,*r; char nam[25]; p=L->next; if(p==NULL) {cout<<"\t\t\t通讯录为空,无联系人可删!\n";} cout<<"需删除联系人的姓名:"; scanf("%s",nam); while(p) { if(strcmp(p->data.name,nam)==0) break; p=p->next; } if(p==NULL) {cout<<"\t\t\t没有此人!\n";return;} r=L; while(r->next) { if(r->next==p) break; r=r->next; } r->next=p->next; Ordination(L); } void main() { Link L; int menu=1; L=(Node*)malloc(sizeof(Node)); L->next=NULL; Menu(); while(menu) { cout<<"请选择操作(5显示菜单):"; cin>>menu; switch(menu) { case 1:Book(L);break; case 2:Fincls(L);break; case 3:Delet(L);break; case 4:Add(L);break; case 5:Menu();break; } } }
麻烦采纳,谢谢!