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

本文主要是介绍c语言字母转电话号码,C语言电话本程序(只是简单的姓名和电话号码增删改查),在线等...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

满意答案

00e27ab806e4881f8254fe7ae8741834.png

a897567003

2014.11.10

00e27ab806e4881f8254fe7ae8741834.png

采纳率:49%    等级:12

已帮助:8297人

#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("\nCommand>");/*命令提示符*/

scanf("%c",&choice);

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

while(choice!='q'){

switch(choice){

case'a':

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

scanf("\n%s",item1);

scanf("\n%s",item2);

scanf("\n%s",item3);

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

break;

case'd':

if(!isEmpty(startPtr)){

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

scanf("\n%s",item1);

if(del(&startPtr,item1)){

printf("%s已经被删除.\n",item1);

}

else

printf("%s未找到\n\n",item1);

}

else

printf("电话本是空的!\n\n");

break;

case's':

if(!isEmpty(startPtr)){

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

scanf("\n%s",item1);

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

printf("\n%-20s%-15s%-35s\n","姓名:","电话号码:","Email:");

printf("%-20s%-15s%-35s\n",elemPtr->name,elemPtr->teleNo,elemPtr->Email);

}

else

printf("%s未找到!\n\n",item1);

}

else

printf("电话本是空的!\n\n");

break;

case'p':

printList(startPtr);

break;

default:

printf("无效的选择!\n\n");

instructions();

break;

}

printf("\nCommand>");

scanf("\n%c",&choice);

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

}

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

scanf("\n%c",&judge);

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

save(startPtr);

printf("结束!\n");

returnOK;

}

/*Printtheinstructions*/

voidinstructions(void)

{

printf("q.Quit(退出)"

"\ta.Add(添加)"

"\td.Delete(删除)"

"\ts.Search(查找)"

"\tp.Print(打印)\n"

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

}

/*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无法添加,没有可用内存!\n",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("电话本是空的.\n\n");

else{

printf("\n%31s\n","********");

printf("%30s\n","电话本");

printf("%31s\n","********");

printf("%-20s%-15s%-35s\n","姓名:","电话号码:","Email:");

printf("------------------------------------------------------------\n");

while(currentPtr!=NULL){

printf("%-20s%-15s%-35s\n",currentPtr->name,currentPtr->teleNo,currentPtr->Email);

currentPtr=currentPtr->nextPtr;

i++;

}

printf("------------------------------------------------------------\n");

printf("总计%d个.\n",i);

}

}

/*Savefile*/

voidsave(ListNodePtrheadPtr)

{

FILE*fp;

ListNodePtrcurrentPtr=headPtr;

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

printf("无法打开文件.\n");

return;

}

while(currentPtr!=NULL){

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

printf("文件写入出错.\n");

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("文件读取失败.\n");

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("文件创建失败.\n");

return;

}

fclose(fp);

}

00分享举报

这篇关于c语言字母转电话号码,C语言电话本程序(只是简单的姓名和电话号码增删改查),在线等...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/227867

相关文章

C语言中%zu的用法解读

《C语言中%zu的用法解读》size_t是无符号整数类型,用于表示对象大小或内存操作结果,%zu是C99标准中专为size_t设计的printf占位符,避免因类型不匹配导致错误,使用%u或%d可能引发... 目录size_t 类型与 %zu 占位符%zu 的用途替代占位符的风险兼容性说明其他相关占位符验证示

kkFileView在线预览office的常见问题以及解决方案

《kkFileView在线预览office的常见问题以及解决方案》kkFileView在线预览Office常见问题包括base64编码配置、Office组件安装、乱码处理及水印添加,解决方案涉及版本适... 目录kkFileView在线预览office的常见问题1.base642.提示找不到OFFICE组件

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态