C语言通讯录修改函数的写 c语言通讯录程序设计代码

通讯录代码 C语言 跪求#include stdio.h
#include stdlib.h
#include string.h
#include conio.h
#define N 100 void input();//添加新用户函数
void amend();//修改用户信息函数
void delete_client();//删除用户信息函数
void demand_client();//用户信息查询函数
void collect_telephone();//用户信息汇总函数
void save_client(struct telephone message);//保存函数
void demand_name();//按用户名查询
void demand_telephone();//按电话号码查询
struct telephone
{
char client_name[20];
char client_address[30];
char client_telephone[15];
};//添加新用户函数
void input()
{
struct telephone message;
char reply='y';
char save='y';
while (reply=='y')
{ printf("用户姓名:");
scanf("%s",message.client_name);
printf("电话号码:");
scanf("%s",message.client_telephone); save_client(message);
printf("要继续吗?(y/n):");
scanf(" %c",reply);
}
printf("按任意键返回主菜单……\n");
getchar();
getchar();
} //保存函数
void save_client(struct telephone message)
{
FILE *fp;
fp=fopen("message.dat","a ");
if (fp!=NULL)
{
fwrite(message,sizeof(struct telephone),1,fp);
}
else
{
printf("\n打开文件时出现错误C语言通讯录修改函数的写,按任意键返回……\n");
getchar();
return;
}
fclose(fp);
} //修改用户信息函数
void amend()
{
struct telephone message;
FILE *fp;
char amend_name[20];
char reply='y';
char found='y';
char save='y';
int size=sizeof(struct telephone);
while (reply=='y')
{
found='n';
fp=fopen("message.dat","r w");
if (fp!=NULL)
{
system("cls");
printf("\n请输入要修改的姓名:");
scanf("%s",amend_name);
while ((fread(message,size,1,fp))==1)
{
if ((strcmp(amend_name,message.client_name))==0)
{
found='y';
break;
}
}
if (found=='y')
{ printf("==========================================\n");
printf("\n用户姓名:%s\n",message.client_name);
printf("\n电话号码:%s\n",message.client_telephone);
printf("==========================================\n");
printf("修改用户信息:\n");
printf("\n用户姓名:");
scanf("%s",message.client_name); printf("\n电话号码:");
scanf("%s",message.client_telephone);
printf("\n要保存吗?(y/n):");
scanf(" %c",save);
if (save=='y')
{
fseek(fp,-size,1);
fwrite(message,sizeof(struct telephone),1,fp);
}
}
else
{
printf("无此人信息!\n");
}
}
else
{
printf("打开文件时出现错误C语言通讯录修改函数的写,按任意键返回……\n");
getchar();
return;
}
fclose(fp);
printf("要继续吗?(y/n):");
scanf(" %c",reply);
}
printf("按任意键返回主菜单……\n");
getchar();
getchar();
} //删除用户信息函数
void delete_client()
{
struct telephone message[N];
struct telephone temp_str;
struct telephone delete_str;
int i=0,j=0;
char reply='y';
char found='y';
char confirm='y';
char delete_name[20];
FILE *fp;
while (reply=='y')
{
system("cls");
fp=fopen("message.dat","r");
if (fp!=NULL)
{
i=0;
found='n';
printf("\n请输入姓名:");
scanf("%s",delete_name);
while ((fread(temp_str,sizeof(struct telephone),1,fp))==1)
{
if ((strcmp(delete_name,temp_str.client_name))==0)
{
found='y';
delete_str=temp_str;
}//查找要删除的记录
else
{
message[i]=temp_str;
i;
}//将其它无关记录保存起来
}
}
else
{
printf("打开文件时出现错误 , 按任意键返回……\n");
getchar();
return;
}
fclose(fp);
if (found=='y')
{
printf("==========================================\n");
printf("用户姓名:%s\n",delete_str.client_name);
printf("电话号码:%s\n",delete_str.client_telephone);
printf("==========================================\n");
}
else
{
printf("无此人信息,按任意键返回……\n");
getchar();
break;
}
printf("确定要删除吗?(y/n):");
scanf(" %c",confirm);
if (confirm=='y')
{
fp=fopen("message.dat","w");
if (fp!=NULL)
{
for(j=0;ji;j)
{
fwrite(message[j],sizeof(struct telephone),1,fp);
}
printf("记录已删除!!!\n");
}
else
{
printf("打开文件时出现错误,按任意键返回……\n");
getchar();
return;
}
fclose(fp);
}
printf("要继续吗?(y/n):");
scanf(" %c",reply);
}
printf("按任意键返回主菜单……\n");
getchar();
}
//用户信息查询函数
void demand_client()
{
int choice=1;
while (choice!=3)
{
system("cls");
printf("电话查询菜单\n");
printf(" 1 按联系人姓名查询\n");
printf(" 2 按联系人电话号码查询\n");
printf(" 3 返回主菜单\n");
printf("请选择(1-3):");
scanf("%d%*c",choice);
if (choice3)
{
printf("请输入1-6之间的整数\n");
printf("按任意键返回菜单……\n");
getchar();
continue;
}
if (choice==1)
{
demand_name();
}
else if (choice==2)
{
demand_telephone();
}
}
} //按用户名查询
void demand_name()
{
struct telephone message;
FILE *fp;
char amend_name[20];
char reply='y';
char found='y';
while (reply=='y')
{
found='n';
fp=fopen("message.dat","r w");
if (fp!=NULL)
{
system("cls");
printf("\n请输入姓名:");
scanf("%s",amend_name);
while ((fread(message,sizeof(struct telephone),1,fp))==1)
{
if ((strcmp(amend_name,message.client_name))==0)
{
found='y';
break;
}
}
if (found=='y')
{ printf("==========================================\n");
printf("用户姓名:%s\n",message.client_name); printf("电话号码:%s\n",message.client_telephone);
printf("==========================================\n");
}
else
{
printf("无此人信息!\n");
}
}
else
{
printf("打开文件时出现错误,按任意键返回……\n");
getchar();
return;
}
fclose(fp);
printf("要继续吗?(y/n):");
scanf(" %c",reply);
}
printf("按任意键返回主菜单……\n");
getchar();
getchar();
} //按电话号码查询
void demand_telephone()
{
struct telephone message;
FILE *fp;
char telephone[20];
char reply='y';
char found='y';
while (reply=='y')
{
found='n';
fp=fopen("message.dat","r w");
if (fp!=NULL)
{
system("cls");
printf("\n请输入电话号码:");
scanf("%s",telephone);
while ((fread(message,sizeof(struct telephone),1,fp))==1)
{
if ((strcmp(telephone,message.client_telephone))==0)
{
found='y';
break;
}
}
if (found=='y')
{ printf("==========================================\n");
printf("用户姓名:%s\n",message.client_name); printf("电话号码:%s\n",message.client_telephone);
printf("==========================================\n");
}
else
{
printf("无此电话号码的有关信息!\n");
}
}
else
{
printf("打开文件时出现错误,按任意键返回……\n");
getchar();
return;
}
fclose(fp);
printf("要继续吗?(y/n):");
scanf(" %c",reply);
}
printf("按任意键返回主菜单……\n");
getchar();
getchar();
} //用户信息汇总函数
void collect_telephone()
{
struct telephone message;
FILE *fp;
fp=fopen("message.dat","r");
if (fp!=NULL)
{
system("cls");
printf("\n用户姓名\t\t电话号码\n");
while ((fread(message,sizeof(struct telephone),1,fp))==1)
{
printf("\n%-24s",message.client_name); printf("%-12s\n",message.client_telephone);
}
}
else
{
printf("打开文件时出现错误,按任意键返回……\n");
getchar();
return;
}
fclose(fp);
printf("按任意键返回主菜单……\n");
getch();
} void main()
{
char choice[10]="";
int len=0;
while (choice[0]!='7')
{ printf("\t==========电话本号码查询系统=============\n"); printf("\t\t 1、添加新联系人\n");
printf("\t\t 2、修改联系人信息\n");
printf("\t\t 3、删除联系人信息\n");
printf("\t\t 4、联系人信息查询\n");
printf("\t\t 5、联系人信息汇总\n");
printf("\t\t 7、退出\n");
printf("\t=========================================\n");
printf("请选择(1-7):");
scanf("%s",choice);
len=strlen(choice);
if (len1)
{
printf("请输入1-6之间的整数\n");
printf("按任意键返回主菜单……\n");
getchar();
getchar();
continue;
} switch (choice[0]) {
case '1':
input();
break;
case '2':
amend();
break;
case '3':
delete_client();
break;
case '4':
demand_client();
break;
case '5':
collect_telephone();
break; default:
break;
}
}
}
用c语言编写通讯录管理程序声明C语言通讯录修改函数的写: 非原创
/*个人通讯录*/
#include stdio.h
#include stdlib.h
#include string.h
struct dataWab{
char name[8];
char telephone[16];
char mobile[16];
char address[16];
char unit[16];
struct dataWab *nextPtr;
}; /*自引用结构C语言通讯录修改函数的写,用作通讯录的数据结构*/
typedef struct dataWab DATAWAB;
typedef DATAWAB *DATAWABPTR;
void insertWab(DATAWABPTR*,char[],char[],char[],char[],char[]); /*插入函数*/
void menuWab(void); /*菜单函数*/
void printWab(DATAWABPTR); /*打印所有记录函数*/
void seekWab(DATAWABPTR,char[]); /*查找函数*/
void deleteWab(DATAWABPTR,char[]); /*删除函数*/
void modifyWab(DATAWABPTR,char[]); /*修改函数*/
int test(DATAWABPTR); /*测试函数,测试通讯录内是否有记录*/
void printone(DATAWABPTR); /*打印单条记录函数*/
int controlWab(void); /*程序分支控制函数*/
int main()
{
DATAWABPTR startPtr=NULL;
DATAWABPTR tempPtr;
FILE *fileWab;
char menu; /*菜单操作控制变量*/
char insert; /*插入确认控制变量*/
char modifyName[8]; /*查找时的临时姓名存储*/
char deleteName[8]; /*删除时的临时姓名存储*/
char tempName[8]; /*临时姓名存储*/
char tempTelephone[16]; /*临时电话存储*/
char tempMobile[16]; /*临时手机存储*/
char tempAddress[16]; /*临时地址存储*/
char tempUnit[16]; /*临时单位存储*/
char seekName[8]; /*查找时的临时姓名存储*/
if(!(fileWab=fopen("wab.dat","rb")))
return 0;
tempPtr=(DATAWABPTR)malloc(sizeof(DATAWAB));
while(fread(tempPtr,sizeof(DATAWAB),1,fileWab)==1){
tempPtr-nextPtr=startPtr;
startPtr=tempPtr;
tempPtr=(DATAWABPTR)malloc(sizeof(DATAWAB));
}
fclose(fileWab);
puts("\n\n\t\t欢迎使用个人通讯录1.0\n");
menuWab();
menu=getch();
while(menu!='6'){
switch(menu){
case '1':
printWab(startPtr);
break;
case '2':
while(controlWab()){
printf("\n查找姓名:\n#");
scanf("%s",seekName);
seekWab(startPtr,seekName);
}
break;
case '3':
while(controlWab()){
puts("\n录入个人信息\n");
printf("姓名:");
scanf("%s",tempName);
printf("\n电话:");
scanf("%s",tempTelephone);
printf("\n手机:");
scanf("%s",tempMobile);
printf("\n地址:");
scanf("%s",tempAddress);
printf("\n单位:");
scanf("%s",tempUnit);
printf("录入正确请按 1 \n#");
insert=getch();
if(insert=='1')
insertWab(startPtr,tempName,tempTelephone,tempMobile,
tempAddress,tempUnit);
}
break;
case '4':
while(controlWab()){
printf("\n删除姓名\n#");
scanf("%s",deleteName);
deleteWab(startPtr,deleteName);
}
break;
case '5':
while(controlWab()){
printf("\n修改姓名\n#");
scanf("%s",modifyName);
modifyWab(startPtr,modifyName);
}
break;
default:
puts("\n\n输入选项错误,请重新输入\n");
break;
}
menuWab();
menu=getch();
}
if((fileWab=fopen("wab.dat","wb"))==NULL)
return 0;
while(startPtr!=NULL){
fwrite(startPtr,sizeof(DATAWAB),1,fileWab);
startPtr=startPtr-nextPtr;
}
puts("\n\n\t\t谢谢使用个人通讯录1.0,再见\n");
}
void menuWab(void) /*菜单函数*/
{
puts("\t\t\t主菜单");
puts("**********************************************************");
puts("**********************************************************");
puts("**\t-1-所有记录\t\t-2-查找记录\t\t**");
puts("**\t-3-增加记录\t\t-4-删除记录\t\t**");
puts("**\t-5-修改记录\t\t-6-退出程序\t\t**");
puts("**********************************************************");
puts("**********************************************************");
puts("\n请选择 1-6");
printf("#");
}
void insertWab(DATAWABPTR *tempPtr,char temp2Name[],char temp2Telephone[],
char temp2Mobile[],char temp2Address[],char temp2Unit[])
/*插入函数*/
{
DATAWABPTR newPtr;
newPtr=(DATAWABPTR)malloc(sizeof(DATAWAB));
strcpy(newPtr-name,temp2Name);
strcpy(newPtr-telephone,temp2Telephone);
strcpy(newPtr-mobile,temp2Mobile);
strcpy(newPtr-address,temp2Address);
strcpy(newPtr-unit,temp2Unit);
newPtr-nextPtr=*tempPtr;
*tempPtr=newPtr;
}
void printWab(DATAWABPTR printPtr) /*打印函数*/
{
if(!(test(printPtr))){
printf("\n%8sssss\n","姓名","电话","手机","住址","单位");
while(printPtr!=NULL){
printf("%8sssss\n",printPtr-name,printPtr-telephone,
printPtr-mobile,printPtr-address,printPtr-unit);
printPtr=printPtr-nextPtr;
}
}
}
void seekWab(DATAWABPTR seekPtr,char tempName[])
/*查找函数*/
{
if(!(test(seekPtr))){
while(seekPtr!=NULL){
if(!(strcmp(tempName,seekPtr-name))){
printone(seekPtr);
seekPtr=seekPtr-nextPtr;
}
else
seekPtr=seekPtr-nextPtr;
}
}
}
void deleteWab(DATAWABPTR deletePtr,char deleteName[])
/*删除函数*/
{
DATAWABPTR tempPtr,forePtr;
forePtr=deletePtr;
tempPtr=deletePtr-nextPtr;
while(tempPtr!=NULL){
if(!(strcmp(tempPtr-name,deleteName))){
forePtr-nextPtr=tempPtr-nextPtr;
free(tempPtr);
break;
}
else{
forePtr=tempPtr;
tempPtr=tempPtr-nextPtr;
}
}
}
void modifyWab(DATAWABPTR modifyPtr,char modifyName[])
/*修改函数*/
{
if(!(test(modifyPtr))){
while(modifyPtr!=NULL){
if(!(strcmp(modifyName,modifyPtr-name))){
printf("请输入新姓名:");
scanf("%s",modifyPtr-name);
printf("\n请输入新电话:");
scanf("%s",modifyPtr-telephone);
printf("\n请输入新手机:");
scanf("%s",modifyPtr-mobile);
printf("\n请输入新地址:");
scanf("%s",modifyPtr-address);
printf("\n请输入新单位:");
scanf("%s",modifyPtr-unit);
break;
}
else
modifyPtr=modifyPtr-nextPtr;
}
}
}
int test(DATAWABPTR testPtr)
{
if(testPtr==NULL)
puts("通讯录内没有任何记录");
else
return 0;
return 1;
}
void printone(DATAWABPTR printone)
{
printf("\n%8sssss\n","姓名","电话","手机","住址","单位");
printf("%8s",printone-name);
printf("s",printone-telephone);
printf("s",printone-mobile);
printf("s",printone-address);
printf("s\n",printone-unit);
}
int controlWab(void)
{
puts("继续执行请按 1");
if(getch()=='1')
return 1;
return 0;
}
回答者: 虑而后能得 - 助理 二级2-19 11:36
C语言通讯录修改函数的写我来评论
提问者对于答案的评价:感激不尽~~评价已经被关闭目前有 1 个人评价

100% (1) 不好
0% (0)
相关内容
?救命啊! 哪位高手能帮我用C语言编写一个通讯录管理的...
?3110c 通讯录的问题
?索爱510c的电话本备份?
?6120C的电话本能不能通过什么方式转到6500C来
?关于诺基亚7310c通讯录显示姓名的问题~~~
更多关于c语言编写通讯录管理程序的问题
查看同主题问题:高手 语言 通讯录 救命 管理 程序
其他回答共 4 条
分少?。欢Γ嵝窗?
回答者: 229273121 - 见习魔法师 三级2-19 10:16
本人的C通讯录程序代码
#includeiostream
#includestring
#includeiomanip
#includelist
#includefstream
#includealgorithm
#define SPACE "\t\t\t"
using namespace std;
struct Record{
string name;
string tel;
public:
friend ostream operator(ostream os,const Record *rec){
return osrec-nameSPACErec-telendl;
};
friend istream operator(istream is,Record *rec){
isrec-name;
isrec-tel;
return is;
}
static bool comp(string patten,int type,Record *rec){
switch(type){
case 0: {return rec-name==patten;}break;
case 1: {return rec-tel==patten;}break;
}
return false;
}
static bool isvan(Record *rec){
return (rec-name==""rec-tel=="");
}
};
class RecordList:public listRecord*
{
public:
friend ostream operator(ostream os,const RecordList c_rl){
RecordList::const_iterator it=c_rl.begin();
while(it!=c_rl.end()){
os*it;
it;
}
return os;
}
friend istream operator(istream is,RecordList rl){
RecordList::const_iterator it;
while(!is.eof()){
Record *prec=new Record;
isprec;
if(Record::isvan(prec)) continue;
rl.listRecord*::push_back(prec);
}
return is;
}
void clear();
iterator erase(iterator pos);
~RecordList(){
this-clear();
}
};
void RecordList::clear(){
RecordList::const_iterator it=this-begin();
while(it!=this-end()){
delete(*it);
it;
}
this-listRecord*::clear();
}
RecordList::iterator RecordList::erase(iterator pos){
delete(*pos);
return listRecord*::erase(pos);
}
class AddressList{
protected:
RecordList recList;
public:
typedef RecordList::iterator Iterator;
//从通信录中寻找一个记录
virtual Iterator findRecord(string patten,int type,Iterator from);
virtual void addRecord(Record* rec);
virtual void removeRecord(Iterator it);
virtual void editRecord(Record* rec,Iterator it);
virtual void saveRecords(ostream os);
virtual void loadRecords(istream is);
virtual void addRecords(istream is);
virtual ~AddressList();
const int size() const{return (int)recList.size();}
const void clear(){recList.clear();}
Iterator begin(){return recList.begin();}
Iterator end() {return recList.end();}
};
AddressList::Iterator AddressList::findRecord(string patten,int type,Iterator from){
Iterator it;
it=from;
while(it!=recList.end()){
if(Record::comp(patten,type,*it)){
return it;
}
it;
}
return it;
}
void AddressList::addRecord(Record* rec){
recList.push_back(rec);
}
void AddressList::removeRecord(Iterator it){
recList.erase(it);
}
void AddressList::editRecord(Record* rec,Iterator it){
delete(*it);
*it=rec;
}
void AddressList::saveRecords(ostream os){
osrecList;
}
void AddressList::loadRecords(istream is){
isrecList;
}
void AddressList::addRecords(istream is){
}
AddressList::~AddressList(){
recList.clear();
}
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 saveRecords();
//读取记录
virtual void loadRecords();
//结束程序
virtual void quit();
//清空当前记录信息
virtual void clear();
protected:
//菜单选择函数
char menuSelect();
//显示表头
void dispTable();
};
AddressBook::AddressBook(){
}
AddressBook::~AddressBook(){;}
char AddressBook::menuSelect(){
char a=0;
cina;
if(a=='y'||a=='Y'){a='1';}
if(a=='n'||a=='N'){a='2';}
return a;
}
void AddressBook::start(){
cout"\n\t***** 欢迎使用通讯录管理程序 *****";
handleMenu();
}
void AddressBook::handleMenu(){
cout"\n\n\t\t\t-- 菜单管理 --\n\n";
cout"\tA -- 添加人员纪录 (Add Record)\n"
"\tF -- 查询纪录 (Find Record)\n"
"\tD -- 显示纪录 (Display Records)\n"
"\tL -- 从文本或标准输入流中加载纪录 (Load Records)\n"
"\tC -- 清空当前记录信息\n"
"\tS -- 保存记录 (Save Records)\n"
"\tQ -- 结束程序 (QUIT)\n";
switch(menuSelect()){
case 'A':
case 'a':addRecord();break;
case 'F':
case 'f':queryRecord();break;
case 'D':
case 'd':displayRecords();break;
case 'L':
case 'l':loadRecords();break;
case 'C':
case 'c':clear();break;
case 'S':
case 's':saveRecords();break;
case 'Q':
case 'q':quit();break;
}
handleMenu();
}
void AddressBook::displayRecords(){
cout"姓名"SPACE"电话"endl;
AddressList::saveRecords(cout);
cout"一共找到"size()"个对象 。"endl;
cout"1"SPACE"返回"endl;
cout"2"SPACE"修改"endl;
cout"3"SPACE"删除"endl;
switch(menuSelect()){
case '1':break;
case '2':{
if(!size()){
cout"记录为0,无法修改 。"endl;
break;
}
cout"要修改第几个?""1~"size()endl;
int i;
cini;
if(i1||isize()){
break;
}
Record *prec=new Record;
cout"姓名:"'\n'"电话:"'\n';
【C语言通讯录修改函数的写 c语言通讯录程序设计代码】cinprec;
Iterator it=recList.begin();
while(i!=1){
it;
i--;
}
editRecord(prec,it);
}break;
case'3':{
if(!size()){
cout"记录为0,无法修改 。"endl;
break;
}
cout"要删除第几个?""1~"size()endl;
int i;
cini;
if(i1||isize()){
break;
}
Iterator it=recList.begin();
while(i!=1){
it;
i--;
}
removeRecord(it);
}break;
}
}
void AddressBook::addRecord(){
string name,tel;
cout"\n输入名字: ";
cinname;
cout"输入电话: ";
cintel;
Record* temp=new Record;
temp-name=name;
temp-tel=tel;
AddressList::addRecord(temp);
cout"是否继续(Y/N)"endl;
switch(menuSelect()){
case '1':addRecord();break;
case '2':break;
}
}
void AddressBook::queryRecord(){
cout"1"SPACE"按姓名查找"endl;
cout"2"SPACE"按电话查找"endl;
int type=-1;
string patten;
switch(menuSelect()){
case '1':{
type=0;
cout"请输入姓名"endl;
cinpatten;
}break;
case '2':{
type=1;
cout"请输入电话号码"endl;
cinpatten;
}break;
}
Iterator it=begin();
listIterator li;
cout"姓名"SPACE"电话"endl;
while((it=findRecord(patten,type,it))!=end()){
cout*it;
li.push_back(it);
it;
}
cout"一共找到"li.size()"个对象 。"endl;
cout"1"SPACE"返回"endl;
cout"2"SPACE"修改"endl;
cout"3"SPACE"删除"endl;
switch(menuSelect()){
case'1':break;
case'2':{
if(!li.size()){
cout"记录为0,无法修改 。"endl;
break;
}
cout"要修改第几个?""1~"li.size()endl;
int i;
cini;
Record *prec=new Record;
cout"姓名:"'\n'"电话:"'\n';
cinprec;
listIterator::const_iterator it=li.begin();
while(i!=1){
it;
i--;
}
editRecord(prec,*it);
}break;
case'3':{
if(!li.size()){
cout"记录为0,无法修改 。"endl;
break;
}
cout"要删除第几个?""1~"li.size()endl;
int i;
cini;
listIterator::const_iterator it=li.begin();
while(i!=1){
it;
i--;
}
removeRecord(*it);
}break;
}
}
void AddressBook::saveRecords(){
cout"1"SPACE"使用默认文件名 。"endl;
cout"2"SPACE"使用自定义文件名 。"endl;
cout"3"SPACE"返回"endl;
switch(menuSelect()){
case '1':{
ofstream file("default",ios::app);
AddressList::saveRecords(file);
file.close();
}break;
case '2':{
cout"请输入您定义的文件名:"endl;
string fname;
cinfname;
ofstream file(fname.c_str(),ios::app);
AddressList::saveRecords(file);
file.close();
}break;
case '3':break;
}
}
void AddressBook::loadRecords(){
cout"1"SPACE"使用默认文件 。"endl;
cout"2"SPACE"使用自定义文件 。"endl;
cout"3"SPACE"返回"endl;
switch(menuSelect()){
case '1':{
cout"1"SPACE"覆盖当前内容"endl;
cout"2"SPACE"追加到当前文件"endl;
switch(menuSelect()){
case '1':
AddressList::clear();break;
case '2':break;
}
ifstream file("default");
AddressList::loadRecords(file);
file.close();
}break;
case '2':{
cout"请输入文件名:"endl;
string fname;
cinfname;
ifstream file(fname.c_str());
AddressList::loadRecords(file);
file.close();
}break;
case '3':break;
}
}
void AddressBook::clear(){
cout"是否要清除内存中所有内容?(Y/N)"endl;
switch(menuSelect()){
case '1':AddressList::clear();break;
case '2':break;
}
}
void AddressBook::quit(){
cout"是否要保存文件?(Y/N)"endl;
switch(menuSelect()){
case'1':saveRecords();break;
case'2':break;
}
exit(0);
}
int main(int argc, char *argv[])
{
AddressBook a;
a.start();
system("PAUSE");
return EXIT_SUCCESS;
}
如何用C语言编写通讯录…;
#include string
#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;
}
#includestdlib.h
#includefstream
#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]'1' || 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_castint(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(*it)-name"\t\t"(*it)-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();
coutsize()"条记录已经存入文件,请继续操作 。"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表示欲寻找记录的电?。╰el)与(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)
{
osrecList;
}
//功能:从输入流中读入数据并追加到当前通信录的末尾
//参数:is,指定的输入流
//返回:读入的记录数
int AddressList::loadRecords(istream is)
{
int ori =size();
isrecList;
return size()-ori;
}
#ifndef H_ADDRESSLIST_H_AAA
#define H_ADDRESSLIST_H_AAA
#include iostream
#include string
#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
//通信录是否为空
const bool empty() const
//清除通信录
virtual void clear()
//获得通信录的第一条记录
Iterator first()
//获得通信录超过最后一个记录之后的迭代器
Iterator pastEnd()
};
#endif //H_ADDRESSLIST_H_AAA
c语言编写一个通讯录系统 用简单一点的c??#define N 100
#define SIZE 30
#include stdio.h
#include string.h
#include conio.h
struct student{
char num[SIZE];
char name[SIZE];
char tel[SIZE];
};
/*函数声明*/
void myprint();/*显示菜单*/
int mycreat(struct student*p,int n);/*输入通讯录*/void mydisplay(struct student*p,int n);/*显示通讯录*/void mysearch(struct student*p,int n);/*查找*/
void mymodify(struct student*p,int n);/*修改通讯录*/int myadd(struct student*p,int n);/*增加通讯录*/int mydelete(struct student*p,int n);/*删除*/void mysort(struct student*p,int n);/*排序*/
void sch_num(struct student*p,int n);/*按学号查找*/void sch_name(struct student*p,int n);/*按姓名查找*/
int loadinfo(struct student*p,int n);/*载入通讯录信息*/int saveinfo(struct student*p,int n);/*保存通讯录信息*/void main(){
/*文件定义*/char choose,yes_no;
struct studentrecord[N];/*存放通讯录信息,共100条*/int total=0,flag;/*通讯录总数*/
total=loadinfo(record,N);/*从文件读取记录信息,不超过100条*/do{
myprint();/*显示菜单*/
printf("请选择:");do{
choose=getchar();}
while(choose'0'||choose'9');switch(choose){
case'1':
total=mycreat(record,total);break;case'2':
mydisplay(record,total);break;case'3':
mysearch(record,total);break;case'4':
mymodify(record,total);break;case'5':
total=myadd(record,total);break;case'6':
total=mydelete(record,total);break;case'7':
mysort(record,total);break;case'8':
flag=saveinfo(record,total);if(flag==1)
printf("\n保存成功!\n");else
printf("\n保存失败!\n");break;case'0':
break;default:
printf("\n%c为非法选项!\n",choose);}
if(choose=='0')break;printf("\n要继续选择吗(Y/N)?");do{
yes_no=getchar();}
while(yes_no!='Y'yes_no!='y'yes_no!='N'yes_no!='n');}
while(yes_no!='Y'||yes_no!='y');}
void myprint()/*显示菜单信息*/{
printf("\n\n\n\n\n");printf("\n");printf("请输入选项编号(0--7)\n");printf("1---批量输入通讯录\n");printf("2---显示通讯录\n");printf("3---查询通讯录\n");printf("4---修改通讯录\n");printf("5---添加通讯录\n");printf("6---删除通讯录\n");printf("7---排序通讯录\n");printf("8---保存通讯录\n");printf("0---退出\n");printf("\n");
}
int mycreat(struct student*p,int n)/*批量输入学生信息*/{
int i=0;int m;
printf("添加前的记录,共有%d个:\n",n);printf("\n记录号学号姓名电话号码\n");
i=0;
while((in)(strcmp(p-num,"")!=0)){
printf("%d:sss\n",i 1,p-num,p-name,p-tel);i;p;}
printf("\n请输入要输入的学生人数(%d):",N-n);
scanf("%d",m);i=0;
while(im){
printf("\n");
printf("请输入第%d个记录:\n",i 1);printf("学号:");do{
gets(p-num);}
while(strcmp(p-num,"")==0);printf("姓名:");gets(p-name);
printf("电话号码:");gets(p-tel);p;i;}
return m n;}
void mydisplay(struct student*p,int n)/*显示学生信息*/{
/*clrscr();*/int i=0;
printf("\n记录号学号姓名电话号码\n");while(in){
printf("%d:sss\n",i 1,p-num,p-name,p-tel);p;i;}}
void mymodify(struct student*p,int n)/*修改学生信息*/{
int i;
char nam[10];mydisplay(p,n);
printf("\n请输入要修改记录的姓名:");gets(nam);
for(i=0;in;i,p)
if(strcmp(nam,p-name)==0)break;if(i==n)
printf("无此人!\n");else{
printf("请输入正确的学号:");do{
gets(p-num);}
while(strcmp(p-num,"")==0);printf("请输入正确的姓名:");gets(p-name);
printf("请输入正确的电话号码:");gets(p-tel);}
}
void mysearch(struct student*p,int n)/*查找指定学生*/{
char c;
mydisplay(p,n);
printf("\n按学号查询(h),还是按姓名查询(m)?");c=getchar();
if(c=='h'||c=='H')
sch_num(p,n);else if(c=='m'||c=='M')
sch_name(p,n);else
printf("\n非法字符!\n");}
void sch_num(struct student*p,int n)/*按学号查询*/{
int i,flag=0;char nm[10];
printf("\n请输入要查询记录的学号:");gets(nm);
for(i=0;in;i)
if(strcmp(nm,p[i].num)==0)
{
printf("\n学号姓名电话号码\n");printf("sss\n",p[i].num,p[i].name,p[i].tel);flag=1;
}
if(flag==0)
printf("无此人!\n");}
void sch_name(struct student*p,int n)/*按姓名查询*/{
int i,flag=0;char nam[10];
printf("\n请输入要查询记录的姓名:");gets(nam);
for(i=0;in;i)
if(strcmp(nam,p[i].name)==0){
printf("\n学号姓名电话号码\n");printf("sss\n",p[i].num,p[i].name,p[i].tel);flag=1;}
if(flag==0)
printf("无此人!\n");
}
int myadd(struct student*p,int n)/*增加学生信息*/{
int i=0;char c;
struct studentt,*q;
printf("添加前的记录:\n");printf("\n学号姓名电话号码\n");i=0;q=p;
/*显示原有记录信息*/while(in){
printf("sss\n",q-num,q-name,q-tel);i;q;}do{
printf("请输入新记录的学号:\n");do{
gets(t.num);
}
while(strcmp(t.num,"")==0);/*学号不能为空*/printf("请输入新记录的姓名:");gets(t.name);
printf("请输入新记录的电话号码:");gets(t.tel);
for(i=0;in;i)
if(strcmp(t.num,(p i)-num)==0||strcmp(t.tel,(p i)-tel)==0){
printf("学号或电话号码重,要重新输入吗(Y/N)?");c=getchar();putchar ('\n');break;}
/*找到最后,没有重复*/if(i==n){
*(p i)=t;
printf("添加后的记录:\n");printf("\n学号姓名电话号码\n");for(i=0;in 1;i)
printf("sss\n",(p i)-num,(p i)-name,p[i].tel);break;}
}
while(c=='y'||c=='Y');return n 1;}
int mydelete(struct student*p,int n)/*删除学生信息*/{
int i,x;
char c,nm[10],nam[10];
printf("删除前的记录:\n");printf("\n学号姓名电话号码\n");for(i=0;in;i)
printf("sss\n",p[i].num,p[i].name,p[i].tel);printf("按学号删除(h),还是按姓名删除(m)?");c=getchar();
if(c=='h'||c=='H'){
printf("\n请输入要删除记录的学号:");gets(nm);
for(x=0;xn;x)
{
gets(t.num);
}
while(strcmp(t.num,"")==0);/*学号不能为空*/printf("请输入新记录的姓名:");gets(t.name);
printf("请输入新记录的电话号码:");gets(t.tel);
for(i=0;in;i)
if(strcmp(t.num,(p i)-num)==0||strcmp(t.tel,(p i)-tel)==0){
printf("学号或电话号码重,要重新输入吗(Y/N)?");c=getchar();putchar ('\n');break;}
/*找到最后,没有重复*/if(i==n){
*(p i)=t;
printf("添加后的记录:\n");printf("\n学号姓名电话号码\n");for(i=0;in 1;i)
printf("sss\n",(p i)-num,(p i)-name,p[i].tel);break;}
}
while(c=='y'||c=='Y');return n 1;}
int mydelete(struct student*p,int n)/*删除学生信息*/{
int i,x;
char c,nm[10],nam[10];
printf("删除前的记录:\n");printf("\n学号姓名电话号码\n");for(i=0;in;i)
printf("sss\n",p[i].num,p[i].name,p[i].tel);printf("按学号删除(h),还是按姓名删除(m)?");c=getchar();
if(c=='h'||c=='H'){
printf("\n请输入要删除记录的学号:");gets(nm);
for(x=0;xn;x)
int j,i,k;char c1,c2;
struct studenttemp;
printf("\n排序前的记录:\n");printf("\n学号姓名电话号码\n");for(i=0;in;i)
printf("sss\n",p[i].num,p[i].name,p[i].tel);printf("\n按学号排序(h) , 还是按姓名排序(m)?");c1=getchar();
if(c1=='h'||c1=='H'){
printf("\n按升序排序(s),还是按降序排序(j)?");c2=getchar();/*升序*/
if(c2=='s'||c2=='S'){
for(i=0;in-1;i){
k=i;
for(j=i;jn;j)
if(strcmp(p[k].num,p[j].num)0)
k=j;
temp=p[k];p[k]=p[i];p[i]=temp;
}
printf("\n排序后的记录:\n");printf("\n学号姓名电话号码\n");for(i=0;in;i)
printf("sss\n",p[i].num,p[i].name,p[i].tel);}
else if(c2=='j'||c2=='J')/*降序*/{
for(i=0;in-1;i){
k=i;
for(j=0;jn;j)
if(strcmp(p[k].num,p[j].num)0)
k=j;
temp=p[k];p[k]=p[i];p[i]=temp;
}
printf("排序后的记录:\n");printf("\n学号姓名电话号码\n");for(i=0;in;i)
printf("sss\n",p[i].num,p[i].name,p[i].tel);}
else printf("\n非法字符\n");}
else if(c1=='m'||c1=='M')/*按姓名排序*/{
printf("\n按升序排序(s),还是按降序排序(j)?");c2=getchar();
if(c2=='s'||c2=='S'){
for(i=0;in-1;i){
k=i;
for(j=0;jn;j)
if(strcmp(p[k].name,p[j].name)0)
k=j;
temp=p[k];p[k]=p[i];p[i]=temp;}
printf("排序后的记录:\n");printf("\n学号姓名电话号码\n");for(i=0;in;i)
printf("sss\n",p[i].num,p[i].name,p[i].tel);
}
else if(c2=='j'||c2=='J')/*降序*/{
for(i=0;in-1;i){
k=i;
for(j=i;jn;j)
if(strcmp(p[k].name,p[j].name)0)
k=j;
temp=p[k];p[k]=p[i];p[i]=temp;
}
printf("排序后的记录:\n");printf("\n学号
姓名电话号码\n");
for(i=0;in;i)
printf("sss\n",p[i].num,p[i].name,p[i].tel);}
else printf("\n非法字符!\n");}
else printf("\n非法字符!\n");}
int loadinfo(struct student*p,int n)/*载入通讯录信息*/{
FILE*fp;int i,all=0;
char filename[30]="tongxunlu.txt";fp=fopen(filename,"r");if(fp==NULL){
printf("\n***不能打开文件%s,或%s文件不存在 , 创建一个新文件!
",filename,filename);*/
fp=fopen(filename,"w");}
fscanf(fp,"%d\n",all);
if(allN)/*读取记录总数*/{
printf("文件记录数太多 , 不能读取");return 0;}
for(i=0;iall;i)/*读取记录信息*/{
fscanf(fp,"%s%s%s\n",p[i].num,p[i].name,p[i].tel);}
fclose(fp);/*关闭文件*/return all;}
int saveinfo(struct student*p,int n){
FILE*fp;int i,all=0;
char filename[30]="txl.dat";/*文件可以用记事本打开*/fp=fopen(filename,"w");if(fp==NULL){
printf("\n***不能建立或打开文件%s!***",filename);return 0;}
fprintf(fp,"%d\n",n);for(i=0;in;i)
fprintf(fp,"%s%s%s\n",p[i].num,p[i].name,p[i].tel);fclose(fp);return 1;}
抄来的
C语言通讯录修改函数的写的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言通讯录程序设计代码、C语言通讯录修改函数的写的信息别忘了在本站进行查找喔 。

    推荐阅读