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、在大型程序中,使函数名易于管理和使用,不必绞尽脑汁地去处理函数名。
int main(){
LinkQueue Q
initAddressBook(Q)
int flag=0
while(flag!=8)
{
printf("※※※※※主※※※※※菜※※※※※单※※※※※\n")
printf("※1、增加联系人 2、删除联系人 ※\n")
printf("※3、修改联系人 4、清空通讯录 ※\n")
printf("※5、查找联系人 6、按组显示 ※\n")
printf("※7、显示全部联系人 8、退出 ※\n")
printf("※※※※※※※※※※※※※※※※※※※※※※※\n")
printf("请输入编号(1-8):\n")
scanf("%d",&flag)
if(flag<1||flag>8)
{
printf("输入错误请重新输入!\n")
continue
}
else
{
switch(flag){
case 1:
if(enAddressBook(Q))
printf("增加联系人成功!\n")
else
printf("增加联系人失败!\n")
break
case 2:
if(delPerson(Q))
printf("删除联系人成功!\n")
else
printf("联系人删除失败!\n")
break
case 3:
if(update(Q))
printf("修改联系人成功!\n")
else
printf("修改联系人失败!\n")
break
case 4:
if(clearAddressBook(Q))
printf("通讯录已清空!\n")
else
printf("通讯录清空失败!\n")
break
case 5:
findByName(Q)
break
case 6:
findByGroup(Q)
break
case 7:
disAll(Q)
break
case 8:
system("cls")
break
}
}
}
printf("※※※※※感谢您使用本系统!※※※※※※\n")
return 0
}
//初始化通讯录
void initAddressBook(LinkQueue &Q)
{
Q.front=Q.rear=(QNode *)malloc(sizeof(QNode))
if(!Q.front)
exit(1)
else
Q.front->next=NULL
}
//清空通讯录
bool clearAddressBook(LinkQueue &Q)
{
system("cls")
while(addressBookLength(Q)!=0)
{
QNode *p
p=Q.front->next
Q.front->next=p->next
if(p==Q.rear)
Q.rear=Q.front
free(p)
}
return true
}
//通讯录当前人数
int addressBookLength(LinkQueue &Q)
{
int i=0
QNode *p
p=Q.front
if(Q.front==Q.rear)
i=0
else
{
while(p!=Q.rear)
{
p=p->next
i++
}
}
return i
}
//删除联系人
bool delPerson(LinkQueue &Q)
{
char _name[20]
system("cls")
printf("请输入要删除的联系人的姓名:\n")
scanf("%s",_name)
QNode *p,*q
if(Q.front==Q.rear)
{
printf("通讯录为空!\n")
return false
}
else
{
p=Q.front
q=Q.front->next
while(q!=Q.rear){
if(strcmp(q->name,_name)==0)
{
p->next=q->next
free(q)//删除节点
return true
}
else
{
p=p->next
q=q->next
}
}
if((strcmp(q->name,_name)==0))
{
free(q)
Q.front=Q.rear
return true
}
else
{
printf("无此联系人!\n")
return false
}
}
}
//查找联系人
bool findByName(LinkQueue &Q)
{
system("cls")
if(Q.front==Q.rear)
{
printf("手机中无联系人!\n")
return false
}
else
{
char _name[20]
printf("请输入要查询的联系人姓名:\n")
scanf("%s",_name)
QNode *p
p=Q.front->next
while(p->next!=NULL)
{
if(strcmp(p->name,_name)==0)
{
printf("姓名:%s 号码:%s 分组:%s\n",p->name,p->tel,p->group)
return true
}
p=p->next
}
if(strcmp(p->name,_name)==0){
printf("姓名:%s 号码:%s 分组:%s\n",p->name,p->tel,p->group)
return true
}
else
{
printf("查无此人!\n")
return false
}
}
}
//按组显示联系人
bool findByGroup(LinkQueue &Q)
{
system("cls")
if(Q.front==Q.rear)
{
printf("手机中无联系人!\n")
return false
}
else
{
char _group[20]
printf("请输入要查询的分组:\n")
scanf("%s",_group)
QNode *p
p=Q.front->next
while(p->next!=NULL)
{
if(strcmp(p->group,_group)==0)
{
printf("姓名:%s 号码:%s \n",p->name,p->tel)
}
p=p->next
}
if(strcmp(p->group,_group)==0){
printf("姓名:%s 号码:%s \n",p->name,p->tel)
return true
}
else
{
printf("无此分组!\n")
return false
}
}
}
//增加联系人
bool enAddressBook(LinkQueue &Q)
{
system("cls")
QNode *p
p=(QNode *)malloc(sizeof(QNode))
if(!p)
return false
else
{
printf("请输入联系人姓名:\n")
scanf("%s",p->name)
printf("请输入联系人号码:\n")
scanf("%s",&p->tel)
printf("请输入联系人分组:\n")
scanf("%s",p->group)
if(Q.front->next==NULL)
{
Q.front->next=p
Q.rear=p
Q.rear->next=NULL
}
else
{
p->next=NULL
Q.rear->next=p
Q.rear=p
}
return true
}
}
//修改联系人
bool update(LinkQueue &Q)
{
system("cls")
if(Q.front==Q.rear)
{
printf("手机中无联系人!\n")
return false
}
else
{
char _name[20]
printf("请输入要修改的联系人姓名:\n")
scanf("%s",_name)
QNode *p
p=Q.front->next
while(p->next!=NULL)
{
if(strcmp(p->name,_name)==0)
{
printf("请输入新联系人姓名:\n")
scanf("%s",p->name)
printf("请输入新联系人号码:\n")
scanf("%s",&p->tel)
printf("请输入新联系人分组:\n")
scanf("%s",p->group)
return true
}
p=p->next
}
if(strcmp(p->name,_name)==0){
printf("请输入新联系人姓名:\n")
scanf("%s",p->name)
printf("请输入新联系人号码:\n")
scanf("%s",&p->tel)
printf("请输入新联系人分组:\n")
scanf("%s",p->group)
return true
}
else
{
printf("查无此人!\n")
return false
}
}
}
//显示所有联系人
void disAll(LinkQueue &Q)
{
system("cls")
int i=0
QNode *p
p=Q.front->next
if(Q.front==Q.rear)
printf("无联系人!\n")
else
{
printf(" 姓名 号码 分组\n")
while(p!=NULL){
printf("%15s %15s %15s\n",p->name,p->tel,p->group)
p=p->next
}
}
}
class student //学生类{
public:
char no[13]
char name[20]
char address[100]
char tel_no[12]
char post_code[7]
char e_mail[40]
}
class TXL //通讯录类
{
private:
student st[37]
public:
void add(char no[13],char name[20],char address[100],char tel_no[12],char post_code[7],char e_mail[40])
void del(char name[20])
void find1(char no[13])
void find2(char name[20])
void list1()
void list2()
int correct(char name[20])
void read()
void write()
void format()
int back()
{
cout<<"返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写): "
char back
cin>>back
if(back=='R'||back=='r')
return 1
else
return 0
}
void print(int i)
{
cout<<"学号:"<<st[i].no<<endl
cout<<"姓名:"<<st[i].name<<endl
cout<<"地址:"<<st[i].address<<endl
cout<<"电话号码:"<<st[i].tel_no<<endl
cout<<"邮编:"<<st[i].post_code<<endl
cout<<"E_MAIL:"<<st[i].e_mail<<endl
}
}
这是一部分,你自己看看吧。。。