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、在大型程序中,使函数名易于管理和使用,不必绞尽脑汁地去处理函数名。
#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
}
拓展资料
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。