
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
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)