用C语言编写一个通讯录管理系统

用C语言编写一个通讯录管理系统,第1张

C语言编写一个通讯录管理系统的源代码如下:

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

/*定义保存通迅录的信息*/

structfriends

{

charname[20]/*名字*/

charprovince[20]/*省份*/

charcity[20]/*所在城市*/

charnation[20]/*民族*/

charsex[2]/*性别M/F*/

intage/*年龄*/

}

扩展资料

1、在C++中应该使用inline内连函数替代宏调用,这样既可达到宏调用的目的,又避免了宏调用的弊端。

2、在C语言两个函数的名称不能相同,否则会导致编译错误。在C++中,函数名相同而参数不同的两个函数被解释为重载。

3、在大型程序中,使函数名易于管理和使用,不必绞尽脑汁地去处理函数名。

/* HELLO.C -- Hello, world */

#include<stdio.h>

struct person

{

char name[8]

char tel[15]

char addr[50]

}

char filename[20]="E:\\txl.txt"

FILE *fp

void creat()

void output()

void search()

void append()

void modify()

void delete()

main( )

{

int m

creat()

while(1)

{

printf("\n\t\t*********欢迎使用通讯录信息管理系统*********\n\n")

printf("\n\t\t添加,请按1")

printf("\n\t\t查找,请按2")

printf("\n\t\t修改,请按3")

printf("\n\t\t删除,请按4")

printf("\n\t\t输出,请按5")

printf("\n\t\t退出,请按0\n")

printf("\n\t\t********************************************\n\n")

printf("Please select(0--5):")

scanf("%d",&m)

if(m>=0&&m<=5)

{

switch(m)

{

case 1: append()

break

case 2: search()

break

case 3: modify()

break

case 4: delete()

break

case 5: output()

break

case 0: exit()

}

printf("\n\n *** 作完毕,请再次选择!")

}

else

printf("\n\n选择错误,请再次选择!")

}

}

/*输入模块creat( ): 创建通讯录的子函数。*/

void creat()

{

struct person one

long s1

/*printf("\n请输入通讯录文件名:")

scanf("%s",filename)*/

if((fp=fopen(filename,"at+"))==NULL)

{

printf("\n不能建立通讯录!")

exit()

}

fprintf(fp,"%-10s%-20s%-50s\n","姓名","电话号码","住址")

printf("\n请输入姓名、电话号码及住址(以0结束)\n")

scanf("%s",one.name)

while(strcmp(one.name,"0"))

{

scanf("%s%s",one.tel,one.addr)

fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr)

scanf("%s",one.name)

}

fclose(fp)

}

/*输出模块output( ):输出通讯录中联系人通讯信息的子函数*/

void output()

{

struct person one

if((fp=fopen(filename,"r"))==NULL)

{

printf("\n不能打开通讯录!")

exit()

}

printf("\n\n%20s\n","通 讯 录")

while(!feof(fp))

{

fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr)

printf("%-10s%-20s%-50s",one.name,one.tel,one.addr)

}

fclose(fp)

}

/*添加模块append( ):向通讯录中添加某人通讯信息的子函数*/

void append()

{

struct person one

if((fp=fopen(filename,"a"))==NULL)

{

printf("\n不能打开通讯录!")

exit()

}

printf("\n请输入添加的姓名、电话号码及住址\n")

scanf("%s%s%s",one.name,one.tel,one.addr)

fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr)

fclose(fp)

}

/*查找模块search( ):在通讯录中查找某人通讯信息的子函数*/

void search()

{

int k=0

char namekey[8]

struct person one

printf("\n请输入姓名:")

scanf("%s",namekey)

if((fp=fopen(filename,"rb"))==NULL)

{

printf("\n不能打开通讯录!")

exit()

}

while(!feof(fp))

{

fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr)

if(!strcmp(namekey,one.name))

{

printf("\n\n已查到,记录为:")

printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr)

k=1

}

}

if(!k)

printf("\n\n对不起,通讯簿中没有此人的记录。")

fclose(fp)

}

/*修改模块modify( ):在通讯录中修改某人通讯信息的子函数*/

void modify()

{

int m,k=0

long offset

char namekey[8]

struct person one

printf("\n请输入姓名:")

scanf("%s",namekey)

if((fp=fopen(filename,"r+"))==NULL)

{

printf("\n不能打开通讯录!")

exit()

}

while(!feof(fp))

{

offset=ftell(fp)

fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr)

if(!strcmp(namekey,one.name))

{

k=1

break

}

}

if(k)

{

printf("\n已查到,记录为:")

printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr)

printf("\n请输入新姓名、电话号码及住址:")

scanf("%s%s%s",one.name,one.tel,one.addr)

fseek(fp,offset,SEEK_SET)

printf("%ld",ftell(fp))

fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr)

}

else

printf("\n对不起,通讯录中没有此人的记录。")

fclose(fp)

}

/*删除模块delete( ):在通讯录中删除某人通讯信息的子函数*/

void delete()

{

int m,k=0,flag

long offset1,offset2

char namekey[8], valid[4]

struct person one

printf("\n请输入姓名:")

scanf("%s",namekey)

if((fp=fopen(filename,"r+"))==NULL)

{

printf("\n不能打开通讯录!")

exit()

}

while(!feof(fp))

{

offset1=ftell(fp)

fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr)

if(!strcmp(namekey,one.name))

{

k=1

break

if(k)

{

printf("\n已查到,记录为")

printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr)

printf("\n确实要删除,按1;不删除,按0:")

scanf("%d",&m)

if(m)

{

fseek(fp,offset1,SEEK_SET)

fprintf(fp,"%-10s%-20s%-50s\n","","","")

}

else

printf("\n对不起,通讯录中没有此人的记录。")

fclose(fp)

}

}

}

}

<PIXTEL_MMI_EBOOK_2005>1###########################################################</PIXTEL_MMI_EBOOK_2005>

可以的话请采纳。

#include <string.h>

#include <stdio.h>

#include<stdlib.h>

int cntAddr=0,i,j

char in[12]

const char * strFmt="\n%d\t%s\t%s\t%s\t%s\n"

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=0i<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=0i<cntAddr++i)addrTmp[i]=addr[i]

for(i=0i<cntAddr-1++i)for(j=i+1j<cntAddr++j)if(addrTmp[i].ID>addrTmp[j].ID){adTmp=addrTmp[i]addrTmp[i]=addrTmp[j]addrTmp[j]=adTmp}

for(i=0i<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=0i<length++i)addrTmp[i]=addr[i]

for(i=0i<length-1++i)for(j=i+1j<length++j)if(strcmp(addrTmp[i].name,addrTmp[j].name)>0){adTmp=addrTmp[i]addrTmp[i]=addrTmp[j]addrTmp[j]=adTmp}

for(i=0i<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=0i<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=0i<length++i)addrTmp[i]=addr[i]

for(i=0i<length-1++i)for(j=i+1j<length++j)if(strcmp(addrTmp[i].workPlace,addrTmp[j].workPlace)>0){adTmp=addrTmp[i]addrTmp[i]=addrTmp[j]addrTmp[j]=adTmp}

for(i=0i<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("请输入姓名:\n")

scanf("%s",&in)

for(i=0i<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("请输入工作单位:\n")

scanf("%s",&in)

for(i=0i<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("请输入办公电话:\n")

scanf("%s",&in)

for(i=0i<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("请输入家庭电话:\n")

scanf("%s",&in)

for(i=0i<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("要修改第几条记录:\n")

scanf("%d",&j)

for(i=ji<length-1++i)adr[i]=adr[i+1]

return --length

}

void rewrite(ADDRESS adr[],int length){

printf("要修改第几条记录:\n")

scanf("%d",&j)

printf("请输入ID:\n")

scanf("%d",&i)

adr[j].ID=i

printf("请输入姓名:\n")

scanf("%s",in)

strcpy(adr[j].name,in)

printf("请输入工作单位:\n")

scanf("%s",in)

strcpy(adr[j].workPlace,in)

printf("请输入办公电话:\n")

scanf("%s",in)

strcpy(adr[j].teleOff,in)

printf("请输入家庭电话:\n")

scanf("%s",in)

strcpy(adr[j].teleHome,in)

}

int add(ADDRESS adr[],int length){

printf("请输入ID:\n")

scanf("%d",&i)

adr[length].ID=i

printf("请输入姓名:\n")

scanf("%s",in)

strcpy(adr[length].name,in)

printf("请输入工作单位:\n")

scanf("%s",in)

strcpy(adr[length].workPlace,in)

printf("请输入办公电话:\n")

scanf("%s",in)

strcpy(adr[length].teleOff,in)

printf("请输入家庭电话:\n")

scanf("%s",in)

strcpy(adr[length].teleHome,in)

return ++cntAddr

}

void copy(){

FILE *fp,*fc

printf("请输入新文件名(路径中的反斜杠用\\表示)\n")

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:\n")

while(1){

printf("请输入ID:\n")

if(scanf("%d",&i)==EOF)break

adr[cntAddr].ID=i

printf("请输入姓名:\n")

if(scanf("%s",in)==EOF)break

strcpy(adr[cntAddr].name,in)

printf("请输入工作单位:\n")

if(scanf("%s",in)==EOF)break

strcpy(adr[cntAddr].workPlace,in)

printf("请输入办公电话:\n")

if(scanf("%s",in)==EOF)break

strcpy(adr[cntAddr].teleOff,in)

printf("请输入家庭电话:\n")

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("\n\n\n\n *************************通讯录信息管理系统*************************\n\n")

printf(" 1. 全部显示通讯录信息\n\n")

printf(" 2. 按序号显示通讯录信息\n\n")

printf(" 3. 按姓名排序\n\n")

printf(" 4. 按工作单位排序\n\n")

printf(" 0. 返回上一级菜单\n\n")

printf(" ********************************************************************\n")

printf(" 请选择(0~4)\n ")

scanf("%d",&choice)

switch(choice)

{

case 1:

list(adr,length)

printf(" 请按任意键返回...\n")

system("pause")

break/*显示全部记录*/

case 2:

display(adr)

printf(" 请按任意键返回...\n")

system("pause")break/*按序号显示记录*/

case 3:

namesort(adr,length)

printf(" 请按任意键返回...\n")

system("pause")

break/*按姓名排序*/

case 4:

unitssort(adr,length)

printf(" 请按任意键返回...\n")

system("pause")

break/*按工作单位排序*/

case 0: return

}

goto menu1

}

/*通讯录信息查找功能*/

void chazhao(ADDRESS adr[],int length)

{

int choice

menu2:

system("cls")

printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n")

printf(" 1. 通过姓名查找\n\n")

printf(" 2. 通过工作单位查找\n\n")

printf(" 3. 通过办公电话查找\n\n")

printf(" 4. 通过家庭电话查找\n\n")

printf(" 0. 返回上一级菜单\n\n")

printf(" ********************************************************************\n")

printf(" 请选择(0~4)\n ")

scanf("%d",&choice)

switch(choice)

{

case 1:

namesearch(adr,length)

printf(" 请按任意键返回...\n")

system("pause")

break/*按姓名查找记录*/

case 2:

unitssearch(adr,length)

printf(" 请按任意键返回...\n")

system("pause")

break/*按工作单位查找记录*/

case 3:

officenumbersearch(adr,length)

printf(" 请按任意键返回...\n")

system("pause")

break/*按办公电话查找记录*/

case 4:

homenumbersearch(adr,length)

printf(" 请按任意键返回...\n")

system("pause")

break/*按住宅电话查找记录*/

case 0: return

}

goto menu2

}

/*通讯录信息变更功能*/

void biangeng(ADDRESS adr[],int length)

{

int choice

menu3:

system("cls")

printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n")

printf(" 1. 删除记录\n\n")

printf(" 2. 修改记录\n\n")

printf(" 3. 添加记录\n\n")

printf(" 0. 返回上一级菜单\n\n")

printf(" ********************************************************************\n")

printf(" 请选择(0~3)\n ")

scanf("%d",&choice)

switch(choice)

{

case 1:

length=delet(adr,length)

save(adr,length)

printf(" 请按任意键返回...\n")

getchar()

break/*删除记录*/

case 2:

rewrite(adr,length)

save(adr,length)

printf(" 请按任意键返回...\n")

getchar()

break/*修改记录*/

case 3:

length=add(adr,length)

save(adr,length)

printf(" 请按任意键返回...\n")

getchar()

break/*插入记录*/

case 0: return

}

goto menu3

}

int wenjian(ADDRESS adr[],int length)

{

int choice

menu4:

system("cls")

printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n")

printf(" 1. 导入文件到通讯录\n\n")

printf(" 2. 把当前文件复制到新文件上\n\n")

printf(" 0. 返回上一级菜单\n\n")

printf(" ********************************************************************\n")

printf(" 请选择(0~2)\n ")

scanf("%d",&choice)

switch(choice)

{

case 1: length=load(adr)

printf("您已经成功的导入文件到通讯录!\n")

printf(" 请按任意键返回...\n")

system("pause")break

case 2: copy()

printf("复制成功!\n")

printf(" 请按任意键返回...\n")

system("pause")break

case 0: return length

}

goto menu4

}

/*关于*/

void about()

{

system("color 87")

system("cls")

printf("\n\n\n\n 《通讯录信息管理系统》\n\n\n")

printf(" *****************************************\n\n\n")

printf(" 版权所有(C) 2009-2010 DIY软件\n\n\n")

printf(" 制作人:西北民族大学计算机科学与信息09级计算机3班 王元波\n\n\n")

printf(" *****************************************\n\n\n")

printf(" 请按任意键返回主菜单...")

system("pause")

}

/******主函数开始*******/

void main()

{

int choice

int length/*保存记录长度*/

ADDRESS adr[100] /*定义结构体数组*/

menu:

system("color f9")

system("cls")

printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n")

printf(" 请选择以下通讯录管理功能:\n\n")

printf(" 1. 通讯录信息输入\n\n")

printf(" 2. 通讯录信息浏览及排序\n\n")

printf(" 3. 通讯录信息查询\n\n")

printf(" 4. 通讯录信息更改\n\n")

printf(" 5. 通讯录及文件 *** 作\n\n")

printf(" 6. 关于通讯录信息管理系统\n\n")

printf(" 0. 退出通讯录管理系统\n\n")

printf(" ********************************************************************\n")

printf(" 请选择(0~6)\n ")

scanf("%d",&choice)

switch(choice)

{

case 1: length=enter(adr)

save(adr,length)

printf("\n 请按任意键返回...\n")

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

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7755948.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-09
下一篇2023-04-09

发表评论

登录后才能评论

评论列表(0条)

    保存