c语言电话簿判断姓名,C语言电话本程序(只是简单的姓名和电话号码增删改查),在线等...

满意答案

02ae427d08e371d7e90d5b995e828d6d.png

zzz1961111

2014.11.10

02ae427d08e371d7e90d5b995e828d6d.png

采纳率:48%    等级:9

已帮助:2618人

#include

#include

#include

#defineOK1

#defineERROR0

#defineListNodeLensizeof(ListNode)

structlistNode{/*self-referentialstructure*/

charname[20];

charteleNo[15];

charEmail[35];

structlistNode*nextPtr;

};

typedefstructlistNodeListNode;

typedefListNode*ListNodePtr;

voidinsert(ListNodePtr*,char*,char*,char*);

intdel(ListNodePtr*,char*);

ListNodePtrsearch(ListNodePtr*,char*);

intisEmpty(ListNodePtr);

voidprintList(ListNodePtr);

voidinstructions(void);

ListNodePtrload(void);

voidsave(ListNodePtr);

voidcreatfile(void);

intmain()

{

ListNodePtrstartPtr=NULL,elemPtr;

charjudge,choice;

charitem1[20],item2[15],item3[35];

if((startPtr=load())==NULL)creatfile();/*文件不存在则创建*/

instructions();/*显示菜单*/

printf("

Command>");/*命令提示符*/

scanf("%c",&choice);

if(choice>='A'&&choice<='Z')choice=choice+32;/*大小写转换*/

while(choice!='q'){

switch(choice){

case'a':

printf("请输入要添加的姓名、电话号码和Email:(eg.NameTelNo.Email)

");

scanf("

%s",item1);

scanf("

%s",item2);

scanf("

%s",item3);

insert(&startPtr,item1,item2,item3);

break;

case'd':

if(!isEmpty(startPtr)){

printf("请输入要删除的姓名:");

scanf("

%s",item1);

if(del(&startPtr,item1)){

printf("%s已经被删除.

",item1);

}

else

printf("%s未找到

",item1);

}

else

printf("电话本是空的!

");

break;

case's':

if(!isEmpty(startPtr)){

printf("请输入要查找的姓名:");

scanf("

%s",item1);

if((elemPtr=search(&startPtr,item1))!=NULL){

printf("

%-20s%-15s%-35s

","姓名:","电话号码:","Email:");

printf("%-20s%-15s%-35s

",elemPtr->name,elemPtr->teleNo,elemPtr->Email);

}

else

printf("%s未找到!

",item1);

}

else

printf("电话本是空的!

");

break;

case'p':

printList(startPtr);

break;

default:

printf("无效的选择!

");

instructions();

break;

}

printf("

Command>");

scanf("

%c",&choice);

if(choice>='A'&&choice<='Z')choice=choice+32;/*大小写转换*/

}

printf("是否保存(Y/N)?");

scanf("

%c",&judge);

if(judge=='Y'||judge=='y')

save(startPtr);

printf("结束!

");

returnOK;

}

/*Printtheinstructions*/

voidinstructions(void)

{

printf("q.Quit(退出)"

"a.Add(添加)"

"d.Delete(删除)"

"s.Search(查找)"

"p.Print(打印)

"

"请选择命令:(Q/q、A/a、D/d、S/s、P/p)

");

}

/*Insertanewvalueintothelistinsortedorder*/

voidinsert(ListNodePtr*sPtr,charvalue1[],charvalue2[],charvalue3[])

{

ListNodePtrnewPtr,previousPtr,currentPtr;

newPtr=(ListNodePtr)malloc(ListNodeLen);

if(newPtr!=NULL){/*isspaceavailable*/

strcpy(newPtr->name,value1);

strcpy(newPtr->teleNo,value2);

strcpy(newPtr->Email,value3);

newPtr->nextPtr=NULL;

previousPtr=NULL;

currentPtr=*sPtr;

while(currentPtr!=NULL&&strcmp(value1,currentPtr->name)==1){

previousPtr=currentPtr;/*walkto...*/

currentPtr=currentPtr->nextPtr;/*...nextnode*/

}

if(previousPtr==NULL){

newPtr->nextPtr=*sPtr;

*sPtr=newPtr;

}

else{

previousPtr->nextPtr=newPtr;

newPtr->nextPtr=currentPtr;

}

}

else

printf("%s无法添加,没有可用内存!

",value1);

}

/*Deletealistelement*/

intdel(ListNodePtr*sPtr,charvalue[])

{

ListNodePtrpreviousPtr,currentPtr,tempPtr;

if(!strcmp(value,(*sPtr)->name)){

tempPtr=*sPtr;

*sPtr=(*sPtr)->nextPtr;/*删除头结点*/

free(tempPtr);/*释放头结点*/

returnOK;

}

else{

previousPtr=*sPtr;

currentPtr=(*sPtr)->nextPtr;

while(currentPtr!=NULL&&strcmp(currentPtr->name,value)){

previousPtr=currentPtr;/*移动...*/

currentPtr=currentPtr->nextPtr;/*...下一个结点*/

}

if(currentPtr!=NULL){

tempPtr=currentPtr;

previousPtr->nextPtr=currentPtr->nextPtr;

free(tempPtr);

returnOK;

}

}

returnERROR;

}

/*Searchelementinthelist*/

ListNodePtrsearch(ListNodePtr*sPtr,charvalue[])

{

ListNodePtrcurrentPtr;

if(!strcmp(value,(*sPtr)->name))

return*sPtr;

else{

currentPtr=(*sPtr)->nextPtr;

while(currentPtr!=NULL&&strcmp(currentPtr->name,value)){

currentPtr=currentPtr->nextPtr;/*...下一个结点*/

}

if(currentPtr!=NULL){

returncurrentPtr;

}

}

returnNULL;

}

/*Return1ifthelistisempty,0otherwise*/

intisEmpty(ListNodePtrsPtr)

{

returnsPtr==NULL;

}

/*Printthelist*/

voidprintList(ListNodePtrheadPtr)

{

ListNodePtrcurrentPtr=headPtr;

inti=0;

if(currentPtr==NULL)

printf("电话本是空的.

");

else{

printf("

%31s

","********");

printf("%30s

","电话本");

printf("%31s

","********");

printf("%-20s%-15s%-35s

","姓名:","电话号码:","Email:");

printf("------------------------------------------------------------

");

while(currentPtr!=NULL){

printf("%-20s%-15s%-35s

",currentPtr->name,currentPtr->teleNo,currentPtr->Email);

currentPtr=currentPtr->nextPtr;

i++;

}

printf("------------------------------------------------------------

");

printf("总计%d个.

",i);

}

}

/*Savefile*/

voidsave(ListNodePtrheadPtr)

{

FILE*fp;

ListNodePtrcurrentPtr=headPtr;

if((fp=fopen("tele.dat","wb"))==NULL){

printf("无法打开文件.

");

return;

}

while(currentPtr!=NULL){

if(fwrite(currentPtr,ListNodeLen,1,fp)!=1){

printf("文件写入出错.

");

break;

}

else

currentPtr=currentPtr->nextPtr;

}

fclose(fp);

}

/*Loadfile*/

ListNodePtrload()

{

FILE*fp;

ListNodePtrheadPtr,currentPtr;

headPtr=currentPtr=NULL;

if((fp=fopen("tele.dat","rb"))==NULL)

returnNULL;

while(!feof(fp)){

currentPtr=(ListNodePtr)malloc(ListNodeLen);

if(fread(currentPtr,ListNodeLen,1,fp)!=1){

printf("文件读取失败.

");

free(currentPtr);

break;

}

else

insert(&headPtr,currentPtr->name,currentPtr->teleNo,currentPtr->Email);

}

fclose(fp);

returnheadPtr;

}

/*creatfile*/

voidcreatfile(){

FILE*fp;

if((fp=fopen("tele.dat","wb"))==NULL){

printf("文件创建失败.

");

return;

}

fclose(fp);

}

00分享举报

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值