通讯录管理C语言.docx
- 文档编号:18602972
- 上传时间:2023-08-20
- 格式:DOCX
- 页数:18
- 大小:17.39KB
通讯录管理C语言.docx
《通讯录管理C语言.docx》由会员分享,可在线阅读,更多相关《通讯录管理C语言.docx(18页珍藏版)》请在冰点文库上搜索。
通讯录管理C语言
/*******************************************************************
Copyright(C),2012,CDTU.
Filename:
Author:
Version:
beta1.0Date:
2012
Description:
Others:
FunctionList:
1.intItemCheck(intItem)
2.intChineseCharsCmp(char*a,char*b)
3.voidDisplay(structContacts*ListHead)
4.structContacts*DataEnter()
5.voidWriteDataToFile(FILE*fp,structContacts*ListHead)
6.structContacts*ReadFileTo(FILE*fp)
7.FILE*OpenListFile(FILE*fp)
8.voidNewCreat(FILE*fp)
9.voidAddAddress(FILE*fp)
10.voidDelAddress(FILE*fp)
11.Query(FILE*fp)
12.intExitApp()
*******************************************************************/
#include
#include
#include
#include
#defineENTER1//进入程序标志
#defineEXIT0//退出标志
#defineERROR-1//错误标志
#defineNULL0
#defineContactLengthsizeof(structContacts)//名片大小
constchar*Items[6]={"1.打开文件",
"2.新建文件",
"3.添加",
"4.删除",
"5.查询",
"6.退出"};
//名片结构
structContacts
{
charname[20];
chartel[20];
charaddress[40];
structContacts*next;
};
//输入的选项检测
intItemCheck(intItem)//输入Item变量地址
{
inti;
for(i=1;i<=6;i++)
{
if(Item==i)
{
return1;
}
}
returnERROR;
}
//中文字符串比较
intChineseCharsCmp(char*a,char*b)
{
unsignedi=0,j=0;
for(i=0;(i ='\0');i++) { if(*(a+i)==*(b+i)) { j++; } } if((i==j)&&(i! =0)) { return1; } return0; } //显示AddList voidDisplay(structContacts*ListHead) { printf("-----------------------------------------------------------------------\n"); while(ListHead! =NULL) { printf("%s\n%s\n%s\n",ListHead->name,ListHead->tel,ListHead->address); printf("-----------------------------------------------------------------------\n"); ListHead=ListHead->next; } printf("\n"); } //录入数据 structContacts*DataEnter() { structContacts*ListHead,*List_a,*List_b; //为新名片分配空间 ListHead=(structContacts*)malloc(ContactLength); List_a=ListHead; List_b=ListHead; printf("请分别输入姓名、电话号码、住址\n"); printf("-----------------------------------------------------------------------\n"); getchar(); gets(List_a->name); gets(List_a->tel); gets(List_a->address); while(List_a->name[0]! ='\0') { //为新名片分配空间 List_a=(structContacts*)malloc(ContactLength); printf("-----------------------------------------------------------------------\n"); gets(List_a->name); gets(List_a->tel); gets(List_a->address); if(List_a->name[0]! ='\0') { List_a->next=NULL; List_b->next=List_a; List_b=List_a; } }//while return(ListHead); } //写入文件 voidWriteDataToFile(FILE*fp,structContacts*ListHead) { //判断有无数据 while(ListHead! =NULL) { //分别写入 fwrite(&ListHead->name,sizeof(ListHead->name),1,fp); fwrite(&ListHead->tel,sizeof(ListHead->tel),1,fp); fwrite(&ListHead->address,sizeof(ListHead->address),1,fp); ListHead=ListHead->next; } } //读取文件内容 structContacts*ReadFileTo(FILE*fp) { structContactsTemp;//读取出来数据缓冲区 structContacts*ListHead,*List_a,*List_b; ListHead=NULL; if(fread(&Temp.name,sizeof(Temp.name),1,fp)! =NULL) { fread(&Temp.tel,sizeof(Temp.tel),1,fp); fread(&Temp.address,sizeof(Temp.address),1,fp); //为读出的数据分配存储空间 ListHead=(structContacts*)malloc(ContactLength); *ListHead=Temp; ListHead->next=NULL; List_a=ListHead; List_b=ListHead; } while(fread(&Temp.name,sizeof(Temp.name),1,fp)! =NULL) { fread(&Temp.tel,sizeof(Temp.tel),1,fp); fread(&Temp.address,sizeof(Temp.address),1,fp); List_a=(structContacts*)malloc(ContactLength); *List_a=Temp; List_a->next=NULL; List_b->next=List_a; List_b=List_a; } return(ListHead); } //打开通讯录 FILE*OpenListFile(FILE*fp) { structContacts*ListHead; charfilename[256];//文件名缓存 if(fp! =NULL)//若已打开文件,先关闭 { fclose(fp); } system("cls"); system("dir"); printf("请输入要打开的文件名: "); scanf("%s",filename); if((fp=fopen(filename,"rb+"))==NULL)//打开文件名为(filename)的二进制文件 { printf("\n"); printf("文件无法打开,输入有误或文件不存在,请重新输入文件名: "); } //读入将文件数据 if(ListHead=ReadFileTo(fp)) { system("cls"); //显示 Display(ListHead); } else { printf("文件为空\n"); } return(fp); } voidNewCreat(FILE*fp) { charfilename[256];//文件名缓存 structContacts*ListHead; if(fp! =NULL)//若已打开文件,先关闭 { fclose(fp); } system("cls"); printf("请输入新文件名: "); do { scanf("%s",filename); if((fp=fopen(filename,"wb+"))==NULL)//创建一个文件名为(filename)的二进制文件 { printf("\n"); printf("输入有误或文件无法创建,请重新输入文件名: "); } }while(fp==NULL); printf("\n"); //接下来录入数据 ListHead=DataEnter(); //写入文件 WriteDataToFile(fp,ListHead); //关闭文件 fclose(fp); system("cls"); } //添加名片 voidAddAddress(FILE*fp) { structContacts*ListHead; if(fp! =NULL) { //接下来录入数据 ListHead=DataEnter(); //写入文件 WriteDataToFile(fp,ListHead); } else { printf("未打开文件\n"); } } //删除名片 voidDelAddress(FILE*fp) { structContacts*ListHead,*List_a,*List_b; charnametemp[20]; charclear='\0'; charfilename[256]; if(fp! =NULL) { rewind(fp); ListHead=ReadFileTo(fp); List_a=ListHead; List_b=ListHead; printf("请输入要删除的名片: "); scanf("%s",nametemp); //头结点 if(ChineseCharsCmp(List_a->name,nametemp)==1) { List_a=ListHead; ListHead=ListHead->next; free(List_a); List_a=ListHead; } //除头和尾,若只有头,则不进入 while((List_a->next! =NULL)&&(List_a->next->next! =NULL)) { //指向下一结点 List_a=List_a->next; if(ChineseCharsCmp(List_a->name,nametemp)==1) { List_b->next=List_a->next; List_a->next=NULL; } else { List_b=List_a; } } //尾结点,当只有两个结点,此时该判断是必要的 if(List_a->next! =NULL) { List_a=List_a->next; if(ChineseCharsCmp(List_a->name,nametemp)==1) { List_b->next=NULL; free(List_a); List_a=NULL; } } else { if(List_b->next! =List_a) { free(List_a); List_a=NULL; } } //关闭文件 fclose(fp); //打开文件名为(filename)的二进制文件 do { printf("\n"); printf("另存为: "); scanf("%s",filename); }while((fp=fopen(filename,"wb+"))==NULL); //写入文件 WriteDataToFile(fp,ListHead); } else { printf("未打开文件\n"); } } //查询功能 voidQuery(FILE*fp) { structContacts*ListHead,*List_a,*List_b; charnametemp[20]; intclear=0; if(fp! =NULL) { rewind(fp); //读文件内容 ListHead=ReadFileTo(fp); List_a=ListHead; List_b=ListHead; printf("请输入要查看的名片的人名: "); scanf("%s",nametemp); //打印 while(List_a! =NULL) { if(ChineseCharsCmp(List_a->name,nametemp)==1) { printf("-----------------------------------------------------------------------\n"); printf("%s\n%s\n%s\n",List_a->name,List_a->tel,List_a->address); printf("-----------------------------------------------------------------------\n"); List_a=NULL; } else { List_b=List_a; List_a=List_a->next; } } } else { printf("未打开文件\n"); } } //退出程序 intExitApp(FILE*fp) { charflag; system("cls"); printf("是否退出程序(y/n): "); getchar(); flag=getchar(); if(flag=='y') { if(fp! =NULL) { fclose(fp); } return(EXIT); } system("cls"); return(ENTER); } intmain() { intItem,AppStatus;//选项号 FILE*fp;//只存在一个文件指针,若已打开一个文件,要创建新文件应先关闭, fp=NULL; Item=0; AppStatus=ENTER; printf("/*************************************************************\n"); printf("Copyright(C),2012,CDTU.\n"); printf("Appname: \n"); printf("Author: Version: beta1.0Date: 2012\n"); printf("**************************************************************/\n\n"); //判断程序状态 while(AppStatus==ENTER) { //显示菜单项 for(Item=0;Item<6;Item++) { printf("%s\n",Items[Item]); } Item=0; printf("请输入选项编号: "); do { scanf("%d",&Item); if(ItemCheck(Item)==ERROR) { printf("\n"); printf("输入错误! 请重新输入选项编号: "); Item=0; } }while(ItemCheck(Item)==ERROR); while(Item! =0) { switch(Item-1) { case0: fp=OpenListFile(fp); break; case1: NewCreat(fp); break; case2: AddAddress(fp); break; case3: DelAddress(fp); break; case4: Query(fp); break; case5: AppStatus=ExitApp(fp); break; default: break; } //选项号重置为0 Item=0; }//while(Item! =0) printf("\n"); }//while(AppStatus=ENTER) system("EXIT"); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通讯录 管理 语言