#include <stdio.h>
#include <stdlib.h>/*与malloc.h差不多*/
#include <string.h>
#include <iostream>
using namespace std
#define maxlen 15
struct persons
{int num/*定义结构体数组用于缓存数据*/
char name[20]
char e_addr[20]
char tel_no[15]
char sim_no
char arch
}persons[maxlen]
typedef struct lnode
{ /*通讯录结构中结点的定义*/
int num
char name[20]
char e_addr[20]
char tel_no[15]
char sim_no
char arch
struct lnode *next
}listnode,*linklist
linklist head=NULL,r=NULL/*定义头指针和尾指针*/
listnode *s,*p0,*p1,*p2,*p3,*p4,*p5,*p6,*p7,*p8,*p9
int i
char name1[10],ch
char tel_no1[15]
char arch1
char sim_no1
char e_addr1[20]
char s1[20]
FILE *fp/*定义文件指针*/
void creat() /*将文件的信息读入结构体数组在转存入链表中*/
{ int j
long k
fp=fopen("数据文件.txt","r t")/*打开文件*/
if(fp!=NULL)
{for(i=0i<=maxleni++ )
{ j=fgetc(fp)
if(j==EOF)
return
k=i
fseek(fp,k*sizeof(struct persons),0)/*读取一个人的信息*/
fread(&persons[i],sizeof(struct persons),1,fp)
s=(linklist)malloc(sizeof(listnode))/*装存入链表中*/
s->num=persons[i].num
strcpy(s->name,persons[i].name)
strcpy(s->e_addr,persons[i].e_addr)
strcpy(s->tel_no,persons[i].tel_no)
s->sim_no=persons[i].sim_no
s->arch=persons[i].arch
if(head==NULL) /*用尾插法将其插入链表中*/
else
{r->next=s
r=sr->next=NULL
}
}fclose(fp)
}
else
{ fp=fopen("数据文件.txt","w")/*不能打开另开辟一个文件*/
i=1
}
}
void Show()
void Delete()
void Input() /*向.通讯录中输入一个人的信息*/
{ s=(linklist)malloc(sizeof(listnode))
printf("\n\n\t请输入该用户的信息:")
printf("姓名:")
scanf("%s",&s->name)
printf("电话号码:")
scanf("%s",&s->tel_no)
printf("单键拨号:")
scanf("%s",&s->sim_no)
printf("E-mail地址:")
scanf("%s",&s->e_addr)
printf("类别:")
scanf("%s",&s->arch)
if(head==NULL)printf("\n\n")
else
{p8=head
while(p8!=NULL&&strcmp(s->name,p8->name)!=0&&strcmp(s->tel_no,p8->tel_no)!=0)
p8=p8->next
if(p8!=NULL)
{printf("您添加的用户已存在!")
free(s)}}
if(head==NULL)
{
s->next = 0
head=s
r = s
}
else
{
s->next = 0
r->next = s
r = s
}
}
void Alter()
int main()
{
system("color a")
creat()
do
{
printf("\n\n\t\t请选择操作:")
printf("\n\t\t1.显示通讯录")
printf("\n\t\t2.删除通讯录")
printf("\n\t\t3.添加通讯录")
printf("\n\t\t4.编辑通讯录")
printf("\n\n\n")
printf("\t请选择:")
cin>>ch
switch(ch)
{ case '1': Show()/*用单条件多选择语句实现调用与循环*/
break
case '2': Delete()
break
case '3': Input()
break
case '4': Alter()
break
fclose(fp)
exit(0)
break
default:
printf("\n\t The num should 1-6!!! \n")
break
}
}
while(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、在大型程序中,使函数名易于管理和使用,不必绞尽脑汁地去处理函数名。