通讯录管理系统源代码(c语言)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include "time.h"
#include
#include
#include
#include
struct Telephone
{
char name[20];
char addrass[20];
char zip[20];
char telephone[20];
char QQ[20];
char email[30];
char tean[5];
struct Telephone *next;
};
typedef struct Telephone TEL;
struct passwd
{
char usename[18];
char password[18];
struct passwd *next;
};
struct passwd *head1=NULL;
TEL *head=NULL;
void showmenu(); //主菜单
void Appenditem(); //添加信息
void print(); //输出信息
void Finditem1(); //查找信息( 按姓名 )
void Removeitem(); //删除信息
void modify(); //删除信息
void Save(); //保存到文件
void Open(); //打开文件
void dljm(); //产品信息
void open(); //选择
void jssm(); //统计总数和各分组的人数
void time1(); //获取系统时间
void flcx(); //查找信息(按分组)
void czjm(); //查找菜单
void xgmm(); //密码文件
void denglujm(); //登录界面
void login(); //注册密码账号
void menu() ; //菜单
void Savepwd(); //保存密码账号
void modifypasswd();
void denglujm()//登录界面
{
int i,k,j=0;struct passwd *p;
char username1[15],pwd[28],ch;system("color 0f");
for(i=0;i<3;i++)
{
printf("\n\t\t\t\t ====================================== \n\n");
printf("\t\t\t\t ╭⌒╮¤ 今後天氣多雲閒晴`` \n");
printf("\t\t\t\t ╭╭ ⌒╮ ●╭○╮ 守的雲開閒見日月. \n");
printf("\t\t\t\t ╰ ----╯/█\\∨█\\ 緣在天意. \n");
printf("\t\t\t\t ~~~~~~~~~~∏~~∏~~~~~~~~~~~.份在人爲 \n");
printf("\t\t\t\t ====================================== \n");
printf("\n\n 管理员登陆");
printf("\n\n 请输入账号:");
scanf("%s",username1);
printf("\n 请输入密码:");
k=0;ch='0';
while(ch!='\r')
{
ch=getch();
if(ch=='\r') break;
printf("*");
pwd[k]=ch;
k++;
}
pwd[k]='\0';
for(p=head1->next;p!=NULL;p=p->next)
{
if((strcmp(p->usename,username1)==0)&&(strcmp(p->password,pwd)==0))
{
j=1;
dljm();
break;
}}
if(p==NULL&&j==0)
{
system("cls");
printf("\a");
printf("\n\t用户名密码错误!\n\t请重新输入账号密码!");
denglujm();
}}
}
main()
{
menu();
}
void menu() //主函数
{
char c
h;xgmm();system("color ec");
printf("\t\t 温馨提示:\n");
printf("\t\t 第一次使用请先注册 \n");
printf("\t\t \n");
printf("\t\t=============================================\n");
printf("\t\t \n");
printf("\t\t 1.登录 \n");
printf("\t\t \n");
printf("\t\t 2.注册 \n");
printf("\t\t \n");
printf("\t\t 0.退出 \n");
printf("\t\t \n");
printf("\t\t=============================================\n");
printf("请选择0-2:\n");
ch=getchar();
switch(ch)
{
case '1':system("cls");denglujm();
case '2':login();menu();
case '0':exit(0);
default:system("cls");printf("\n输入错误,请重新选择......\n\n");menu();
break;
}
}
void dljm()//个人资料界面
{
int k,M=80000000,u,o;
char ch;
system("cls");
printf("\n\n 产品信息");
printf("\n ╔———————————————————————————————╗");
printf("\n ‖ 软件名称: 通讯录管理系统 ‖");
printf("\n ‖ ‖");
printf("\n ‖ 执行坏境: VC++6.0 ‖");
printf("\n ‖ ‖");
printf("\n ‖ 产家地址: 华山23--104 ‖");
printf("\n ‖ ‖");
printf("\n ‖ 生产公司: 10级计机1班 ‖");
printf("\n ‖ ‖");
printf("\n ‖ 版权所属: 陈志强 ‖");
printf("\n ╚———————————————————————————————╝");
printf("\n\n ");
time1();
printf(" \n\n\n 请按任意键进入系统...");
ch=getch();
getchar();
if(ch)
{
system("cls");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
system("cls");
printf("\n\n\n ");
printf("\t\t _ / _,\\ /,_ \\ _,\n");
printf("\t\t| \\ \\( \\| |/ )/ / |\n");
printf("\t\t| \\_ \\\\ // _/ |\n");
printf("\t\t(_ \\_) \\ / ( / _)\n");
printf("\t\t(\\_ ` \\ / ` _/)\n");
printf("\t\t,\\ -=~ / \\ ~=- /,\n");
printf("\t\t~^~^~^~^~
^~^~^~^~^~^~^~^~^~^~\n");
printf("\n\n\n\n\n\n\n\n\n\n\n 〓程序加载中");
for(o=0;o<3;o++)
{
for(u=0;u<4;u++)
{
printf(">");
for(k=0;k<10000000;k++) ;
}
system("cls");
printf("\n\n\n\n\n\n\n\n\n\n\n 〓程序加载中");
}
system("cls");
for(k=1;k
system("cls");
printf("【hello】");
open();
}
}
void open()
{
int k;int u,o;
char ch;
Open(); //打开文件
while(1)
{
showmenu(); //显示菜单
scanf("%c",&ch);
switch(ch)
{
case '1':Appenditem();Save();//添加条目
printf("\n\n\n\n\n\n\n\n正在返回主菜单");
for(o=0;o<3;o++)
{
for(u=0;u<4;u++)
{
printf("》");
for(k=0;k<10000000;k++) ;
}
system("cls");
printf("\n\n\n\n\n\n\n\n正在返回主菜单");
}
system("cls");
break;
case '2':print();getchar(); //输出条目
break;
case '3':czjm();getchar(); //查找
break;
case '4': Removeitem(); Save();getchar(); //删除信息
break;
case'5':modify();Save();getchar();
break;
case'6': jssm();getchar();break;//输出成员数
case '7':modifypasswd();getchar();
break;
case '0':
system("cls");
printf("\n\n\n");
printf("\t\t============================\n");
printf("\t\t \n");
printf("\t\t 多谢使用!!!! \n");
printf("\t\t \n");
printf("\t\t============================\n");
exit(0);//退出
break;
default:
{
system("cls");
printf("\a");}
printf("\n选择错误!请重新选择0-7 !\n");
break;
}
}
}
//菜单
void showmenu()
{
printf(" ");
time1();
printf("\t\t\t\t ﹎ ┈ ┈ .o┈ ﹎ ﹎.. ○\n");
printf("\t\t\t\t ﹎┈﹎ ● ○ .﹎ ﹎o▂▃▅▆\n");
printf("\t\t\t\t ┈ ┈ /█\\/▓\\ ﹎ ┈ ﹎﹎ ┈ ﹎\n");
printf("\t\t\t\t ▅▆▇█████▇▆▅▃▂┈﹎\n");
system("color 0f");
printf("\t\t ***************通讯录系统*******************\n");
printf("\t\t|============================================|\n");
printf("\t\t| |\n");
printf("\t\t| 1.添加成员信息 |\n");
printf("\t\t| |\n");
printf("\t\t| 2.输出成员信息 |\n");
printf("\t\t| |\n");
printf("\t\t| 3.查询成员信息 |\n"
);
printf("\t\t| |\n");
printf("\t\t| 4.删除成员信息 |\n");
printf("\t\t| |\n");
printf("\t\t| 5.修改成员信息 |\n");
printf("\t\t| |\n");
printf("\t\t| 6.查看成员数目 |\n");
printf("\t\t| |\n");
printf("\t\t| 7.修改个人密码 |\n");
printf("\t\t| |\n");
printf("\t\t| 0.退出! |\n");
printf("\t\t| |\n");
printf("\t\t|============================================|\n");
printf("\t\t请选择0-7:");
}
//添加条目
void Appenditem()
{
char ch;int o,u,k,i=0;
TEL *p1=NULL,*p2=NULL;
p1=(TEL *)malloc(sizeof(TEL)); //申请结点
printf("输入姓名:\n"); //添加信息
scanf("%s",p1->name);
printf("输入地址:\n");
scanf("%s",p1->addrass);
printf("输入邮编:\n");
scanf("%s",p1->zip);
printf("输入电话:\n");
scanf("%s",p1->telephone);
printf("输入Q号:\n");
scanf("%s",p1->QQ);
printf("输入邮箱:\n");
scanf("%s",p1->email);
getchar();
re:
printf("请选择分组...");
printf("1.同学 ");
printf("2.好友 ");
printf("3.亲人 ");
printf("4.其他 ");
ch=getchar();getchar();
if(ch=='1')
{
i=1;
strcpy(p1->tean,"同学");
}
if(ch=='2')
{
i=1;
strcpy(p1->tean,"好友");
}
if(ch=='3')
{
i=1;
strcpy(p1->tean,"亲人");
}
if(ch=='4')
{
strcpy(p1->tean,"其他");
i=1;
}
if(i==0)
{
printf("\n输入错误!请重新选择\n");
goto re;
}
p1->next=NULL; //保存到链表
if(head==NULL)
{
head=(TEL *)malloc(sizeof(TEL)); //申请空间
head->next=p1;
}
else
{
for(p2=head;p2->next!=NULL;p2=p2->next); //找到结点尾
p2->next=p1;
}
system("cls");
for(o=0;o<3;o++)
{
for(u=0;u<4;u++)
{
printf("》");
for(k=0;k<10000000;k++) ;
}
system("cls");
printf("\n\n此信息已添加成功!!!\n");
}
system("cls");
}
//输出学生信息
void print()
{
TEL *p=NULL;int i=0;
system("color ec");
if(head->next==NULL)
{
i=1;
system("cls");
printf("\a\a");
printf(" \n\n 通讯录中没有成员信息!请重新选择\n\n");
system("pause");return;
}
system("cls");
if(i==0)
{
printf("\t******************************通讯录系统**********************\n"); //输出信息
printf("\t姓名 地址 邮编 电话
QQ 邮箱 分组 \n\n");
}
for(p=head->next;p!=NULL;p=p->next)
printf("\t%s %s %s %s %s %s %s\n\n",p->name,p->addrass,p->zip,p->telephone,p->QQ,p->email,p->tean);
printf("\n\n\n\t\t\t");
system("pause");
system("cls");
}
//查找菜单
void czjm()
{
char ch;
system("cls");
printf(" 请输入你想查找的方式:0-2 \n");
rett:printf("\t\t==================================================\n");
printf(" \n");
printf("\t\t&& 1.按姓名查找 &&\n");
printf(" \n");
printf("\t\t&& 2.按分组查找 &&\n");
printf(" \n");
printf("\t\t&& 0.返回 &&\n");
printf(" \n");
printf("\t\t==================================================\n");
getchar();
ch=getchar();
switch(ch)
{
case '1':Finditem1(); break;
case '2':flcx();break;
case '0':system("cls");break;
default:
system("cls");
printf("\t\t%c\n",ch);
printf("\t\t输入错误,请重新选择....\n\t\t");
system("pause");
system("cls");
goto rett;
break;
}
}
//查找信息1.按姓名
void Finditem1()
{
TEL *p;int i=0;
char findname[20];
printf("请输入要查找的人员的姓名:\n");
scanf("%s",findname);
for(p=head->next;p!=NULL;p=p->next)
{
if(strcmp(p->name,findname)==0)
{
if(i==0)
{
system("cls");
printf("\n\n");
printf("\t*****************************通讯录系统****************************\n"); //输出信息
printf("\t姓名 地址 邮编 电话 QQ 邮箱 分组 \n\n");
}
i=1;
printf("\t%s %s %s %s %s %s %s\n\n",p->name,p->addrass,p->zip,p->telephone,p->QQ,p->email,p->tean);
}
}
printf("\t\t");
system("pause");
system("cls");
if(!p&&i==0)
{
system("cls");
printf("\n\n\n\n\t\t\t通讯录中没有此成员信息\n\n\n");
printf("\n\t\t\t");
system("pause");
system("cls");
}
}
//根据分组查询
void flcx()
{
TEL *p;int i=0;
char fz[12];
printf("\t\t请输入要查找的分组名:\n\n");
hhh:
printf("\t\t同学 or 好友 or 亲人 or 其他\n");getchar();
scanf("%s",fz);
if(strcmp(fz,"同学")!=0&&strcmp(fz,"好友")!=0&&strcmp(fz,"亲人")!=0&&strcmp(fz,"其他")!=0)
{
printf("\t\t输入错误,请重新选择...\n");
goto hhh;
}
for(p=head->next;p!=NULL;p=p->next)
{
if(strcmp(p->tean,fz)==0)
{
if(i==0)
{
system("cls");
printf("\n\n");
printf("\t*****************************通讯录系统*******
*********************\n"); //输出信息
printf("\t姓名 地址 邮编 电话 QQ 邮箱 分组 \n\n");
}
i=1;
printf("\t%s %s %s %s %s %s %s\n\n",p->name,p->addrass,p->zip,p->telephone,p->QQ,p->email,p->tean);
}
}
printf("\t\t");
system("pause");
system("cls");
if(!p&&i==0)
{
system("cls");
printf("\n\n\n\n\t\t\t通讯录中没有此分组的信息\n\n\n");
printf("\n\t\t\t");
system("pause");
system("cls");
}
}
//删除信息
void Removeitem()
{
char findname[20],ch; //先查找 后删除
TEL *p=NULL, *pr=NULL ;int k,o,u,j=0;
p=head->next;
pr=head;
printf("请输入要删除的姓名:\n");
scanf("%s",findname);system("cls");
if (p==NULL)
{
printf("无信息!\n");
return ;
}
while(p)
{
if((strcmp(p->name,findname))==0)
{
printf("\t所删除的成员信息\n");
printf("\t姓名 地址 邮编 电话 QQ 邮箱 分组 \n\n");
printf("\t%s %s %s %s %s %s %s\n\n",p->name,p->addrass,p->zip,p->telephone,p->QQ,p->email,p->tean); //输出删除信息
printf("\n\n这是你想删除成员吗?(当存在同名的人时,选择否将显示下一个同名的人的信息)\n");
rep:
printf("是:(Y/y) 否:(N/n)\n");getchar();
ch=getchar();
if(ch=='y'||ch=='Y')
{
j=1;
pr->next=p->next;
free(p);
system("cls");
for(o=0;o<3;o++)
{
for(u=0;u<4;u++)
{
printf("》");
for(k=0;k<10000000;k++) ;
}
system("cls");
printf("删除成功!!!\n");
}
system("cls");
for(o=0;o<3;o++)
{
for(u=0;u<4;u++)
{
printf("》");
for(k=0;k<10000000;k++) ;
}
system("cls");printf("\n\n\n\n\n\n\n\n正在返回主菜单...");
}
system("cls");
break;
}
if (ch=='n'||ch=='N')
{ j=1;
system("cls");
goto qwqw;
}
if(j==0)
{
printf("\a");
printf("输入错误,请重新选择!\n");
goto rep;
}}
qwqw: pr=p;
p=p->next;
}
if(!p)
{
printf("\n\n\a通讯录中没有此成员信息!\n");
printf("\n\t\t\t");
system("pause");
system("cls");
return; }
}
//修改信息
void modify()
{
TEL *p;int u,o,k, i=0;char ch,ch1;
char findname[20];
printf("请输入要修改的人员的姓名:\n");
scanf("%s",findname);
for(p=head->next;p!=NULL;p=p->next)
{
if(strcmp(p->name,findname)==0)
{
i=1;
system("cls");
printf("\t******************通讯录系统*************************\n"); //输出信息
printf("\t姓名 地址
邮编 电话 QQ 邮箱 分组 \n\n");
printf("\t%s %s %s %s %s %s %s\n\n",p->name,p->addrass,p->zip,p->telephone,p->QQ,p->email,p->tean);
printf("\n\n这是你想修改成员吗?\n");
repeat:
printf("是:(Y/y) 否:(N/n)\n");getchar();
ch=getchar();
if(ch=='y'||ch=='Y')
{
printf("输入姓名:\n"); //修改信息
scanf("%s",p->name);
printf("输入地址:\n");
scanf("%s",p->addrass);
printf("输入邮编:\n");
scanf("%s",p->zip);
printf("输入电话:\n");
scanf("%s",p->telephone);
printf("输入Q号:\n");
scanf("%s",p->QQ);
printf("输入邮箱:\n");
scanf("%s",p->email);
getchar();
printf("请选择分组...");
printf("1.同学 ");
printf("2.好友 ");
printf("3.亲人 ");
printf("4.其他 ");
ch1=getchar();
if(ch1=='1')
strcpy(p->tean,"同学");
if(ch1=='2')
strcpy(p->tean,"好友");
if(ch1=='3')
strcpy(p->tean,"亲人");
if(ch1=='4')
strcpy(p->tean,"其他");
system("cls");
for(o=0;o<3;o++)
{
for(u=0;u<4;u++)
{
printf("》");
for(k=0;k<10000000;k++) ;
}
system("cls");
printf("该成员已修改成功!!\n");
} for(o=0;o<3;o++)
{
for(u=0;u<4;u++)
{
printf("》");
for(k=0;k<10000000;k++) ;
}
system("cls");printf("\n\n\n\n\n\n\n\n正在返回主菜单");
}
system("cls"); break;
}
if (ch=='n'||ch=='N')
{printf("你取消了此处操作\n\n");
system("pause");system("cls");
continue;}
else
{
printf("\a");printf("输入错误,请重新选择!\n");
goto repeat;
}
}
}
if(!p&&i==0)
{
system("cls");
printf("\a");
printf("\n\n通讯录中没有此成员信息存在!\n你可以选择1进行添加\n\n");
system("pause");
}
}
//保存信息到文件中并释放内存空间
void Save()
{
TEL *p=NULL;
FILE *fp;
if(head==NULL)
{
printf("\n记录为空!\n");
return;
}
else
p=head->next;
if((fp=fopen("通讯录.txt","wb+"))==NULL)
{
printf("\n打不开文件!\n");
return;
}
while(p!=NULL) //保存信息
{
fwrite(p,sizeof(TEL),1,fp);
p=p->next;
}
fclose(fp);
}
//把文件信息输出到链表
void Open()
{
FILE *fp;
TEL *p=NULL,*p2=NULL,*temp=NULL;
if((fp=fopen("通讯录.txt","rb+"))==NULL)
{
printf("\n这是一个空的通讯录,\n请先添加信息再实行其他功能...");
return;
}
head=(TEL *)malloc(sizeof(TEL));
head->next=NULL;
temp=p2=head;
while(!feof(fp)) //循环读取
{
p=(TEL *)malloc(sizeof(TEL));
temp=p2;
p2->next=p;
p2=p;
fread(p,sizeof(TEL),1,fp);
}
temp->next=NULL;
fclose(fp); //关闭文件
}
//统
计总数和各分类的人数
void jssm()
{
int i=0, t=0,h=0,qr=0,qt=0;
TEL *p=NULL;
if(head==NULL)
{
printf("此通讯录中无记录,请输入记录后在使用本功能!\n");
return;
}
for(p=head->next;p!=NULL;p=p->next)
{
i++;
if(strcmp(p->tean,"同学")==0)
t++;
if(strcmp(p->tean,"好友")==0)
h++;
if(strcmp(p->tean,"亲人")==0)
qr++;
if(strcmp(p->tean,"其他")==0)
qt++;
}
system("cls");
printf("\n\n\n\n");
printf("各类分组的人数为:\n");
printf("==== 总数: ");
printf("%d\n",i);
printf("==== 同学: ");
printf("%d\n",t);
printf("==== 好友: ");
printf("%d\n",h);
printf("==== 亲人: ");
printf("%d\n",qr);
printf("==== 其他: ");
printf("%d\n",qt);
printf("\n\n\t");
system("pause");
system("cls");
}
void time1()
{
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf ( "现在北京时间是: %s", asctime (timeinfo) );
}
//密码文件
void xgmm()
{
FILE *fp1;
struct passwd *p1=NULL,*p2=NULL,*temp=NULL;
if((fp1=fopen("password.txt","rb+"))==NULL)
{
printf("\n请先注册!!\n");
return;
}
head1=(struct passwd *)malloc(sizeof(struct passwd));
head1->next=NULL;
temp=p2=head1;
while(!feof(fp1)) //循环读取
{
p1=(struct passwd *)malloc(sizeof(struct passwd));
temp=p2;
p2->next=p1;
p2=p1;
fread(p1,sizeof(struct passwd),1,fp1);
}
temp->next=NULL;
fclose(fp1); //关闭文件
}
//注册账号密码
void login()
{
struct passwd *p1=NULL,*p2=NULL;
p1=(struct passwd *)malloc(sizeof(struct passwd)); //申请结点
printf("输入账号:\n");
scanf("%s",p1->usename);
printf("输入密码:\n");
scanf("%s",p1->password);
p1->next=NULL; //保存到链表
if(head1==NULL)
{
head1=(struct passwd *)malloc(sizeof(struct passwd)); //申请空间
head1->next=p1;
}
else
{
for(p2=head1;p2->next!=NULL;p2=p2->next); //找到结点尾
p2->next=p1;
}Savepwd();
printf("注册成功!!\n");
system("pause");
getchar();
system("cls");
menu();
}
//保存密码账号
void Savepwd()
{
struct passwd *p=NULL;
FILE *fp1;
if(head1==NULL)
{
printf("\n记录为空!\n");
return;
}
else
p=head1->next;
if((fp1=fopen("password.txt","wb+"))==NULL)
{
printf("\n打不开文件!\n");
return;
}
while(p!=NULL) //保存信息
{
fwrite(p,sizeof(struct passwd),1,fp1);
p=p->next;
}
fclose(fp1);
}
//修改个人资料
void modifypasswd()
{
char usename2[20],ch;
int i=0;
syst
em("cls");
printf("你的原密码为:\n");
printf("\t%s\n",head1->next->password);
printf("\n\n你想修改该密码吗?\n");
repeat:
printf("是:(Y/y) 否:(N/n)\n");
getchar();
ch=getchar();
if(ch=='y'||ch=='Y')
{
i=1;
printf("请输入新密码:\n");
scanf("%s",usename2);
strcpy(head1->next->password,usename2);Savepwd();
printf("\n修改成功...\n");
system("pause");
system("cls");
}
if (ch=='n'||ch=='N')
{
i=1;
system("cls");
printf("你取消了修改密码\n\n");
system("pause");system("cls");
}
if(i==0)
{
printf("\a");printf("输入错误,请重新选择!\n");
goto repeat;
}
Savepwd();
}