文档库 最新最全的文档下载
当前位置:文档库 › 数据结构通讯录管理系统

数据结构通讯录管理系统

#include
#include
#include
#include
struct record
{
char name[20];
char street[20];
char city[20];
char eip[20];
char state[20];
}student[500];
struct slnode
{
record date;
struct slnode *next;
struct slnode *prior;
};
typedef slnode * linklist;
linklist l;
int num=0;
FILE *fp;
void mainmenu();
void searchmenu();
void enter();
void search();
void display();
void load();
void save();
void delet();
void listinsert();
void initlist();
void main()
{
initlist();
load();
listinsert();
while (1)
mainmenu();
}
void load()
{
if((fp=fopen("student.bin","rb"))==NULL)
{
printf("\n\t\t通讯录文件不存在");
if ((fp=fopen("student","wb"))==NULL)
{
printf("\n\t\t建立失败");
exit(0);
}
else
{
printf("\n\t\t通讯录文件已建立");
printf("\n\t\t按任意键进入主菜单");
getch();
return;
}
exit(0);
}
fseek(fp,0,2);
if (ftell(fp)>0)
{
rewind(fp);
for (num=0;!feof(fp) && fread(&student[num],sizeof(struct record),1,fp);num++);
printf("\n\t\t文件导入成功");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
printf("\n\t\t文件导入成功");
printf("\n\t\t通讯录文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
void mainmenu()//主菜单
{
char choic;
system("cls");
printf("\n\t\t***************欢迎进入通讯录系统***************");
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************************************************");
printf("\n\t\t请选择:");
choic=getch();
switch (choic)
{
case '1':enter();break;
case '2':searchmenu();break;
case '3':delet();break;
case '4':save();break;
case '5':exit(0);
default:mainmenu();
}
}
void searchmenu()//查询菜单
{
char choic;
system("cls");
printf("\n\t\t******************* 查询菜单 *******************");
printf("\n\t\t**************** 1-显示所有 ********************");
printf("\n\t\t**************** 2-按姓名查询 ******************");
printf("\n\t\t**************** 3-返回主菜单 ******************");
printf("\n\t\t************************************************");
printf("\n\t\t请选择:");
choic=getch();
switch (choic)
{
case '1':display();break;
case '2':search();break;
case '3':mainmenu();break;
}
}
void enter()//添加纪录
{
printf("\n\t\t**************** 请输入学生信息 ****************\n");
printf("\n\t\t姓名:");
scanf("%s",&student[num].name);
printf("\n\t\t

街道:");
scanf("%s",&student[num].street);
printf("\n\t\t城市:");
scanf("%s",&student[num].city);
printf("\n\t\t输入邮编:");
scanf("%s",&student[num].eip);
printf("\n\t\t国家:");
scanf("%s",&student[num].state);
num++;
printf("\n\t\t是否继续添加?(Y/N):");
if (getch()=='y')
enter();
return;
}
void display()//显示所有
{
int i;
system("cls");
if(num!=0)
{
printf("\n\t\t*************** 以下为通讯录所有信息************");
for (i=0;i{
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t街道: %s",student[i].street);
printf("\n\t\t城市: %s",student[i].city);
printf("\n\t\t邮编: %s",student[i].eip);
printf("\n\t\t国家: %s",student[i].state);
printf("\t\t");
if (i+1{
printf("\n\t\t__________________________");
system("pause");
}
}
printf("\n\t\t************************************************");
}
else
printf("\n\t\t通讯录中无任何纪录");
printf("\n\t\t按任意键返回主菜单:");
getch();
return;
}
void save()//写入文件
{
int i;
if ((fp=fopen("student","wb"))==NULL)
{
printf("\n\t\t文件打开失败");
}
for (i=0;i{
if (fwrite(&student[i],sizeof(struct record),1,fp)!=1)
{
printf("\n\t\t写入文件错误!\n");
}
}
fclose(fp);
printf("\n\t\t通讯录文件已保存");
printf("\n\t\t按任意键退出程序\n\t\t");
exit(0);

}
void listinsert()//增加一个结点
{
linklist s,p=l;
for(int i=0;i{
s=new slnode;
strcpy(s->https://www.wendangku.net/doc/c74264239.html,,student[i].name);
strcpy(s->date.city,student[i].city);
strcpy(s->date.street,student[i].street);
strcpy(s->date.eip,student[i].eip);
strcpy(s->date.state,student[i].state);
s->prior=p->prior;
s->next=p;
p->prior->next=s;
p->prior=s;
p=p->next;
}
}
void initlist()
{
l=new slnode;
l->next=l;
l->prior=l;
}
void search()
{
int j=0,a=0;
linklist p=l;
printf("\n\t\t***************** 按姓名查找 *******************");
char name[20];
printf("\n\t\t请输入姓名:");
scanf("%s",name);
for(int i=a;inext)
{
if(strcmp(name,p->next->https://www.wendangku.net/doc/c74264239.html,)==0)
{
printf("查询到的信息:");
printf("\n");
printf("姓名:");
printf("%s",p->next->https://www.wendangku.net/doc/c74264239.html,);
printf("\n");
printf("城市:");
printf("%s",p->next->date.city);
printf("\n");
printf("国家:");
printf("%s",p->next->date.state);
printf("\n");
printf("街道:");
printf("%s",p->next->date.street);
printf("\n");
printf("邮政编码:");
printf("%s",p->next->date.eip);
j++;
}
if(j==0)
printf("\t\t该通讯录没有该人!");
if ((i+1){
printf("\n\t\t是否继续查找相同名字的学生信息:(y/n)");
if (getch()=

='y')
{

a=i;
continue;
}
else
return;
}
else
{
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}

}
void delet()
{
int a=0;
int findmark=0;
int j;
int deletemark=0;
int i;
char name[20];
printf("\n\t\t请输入要删除学生姓名:");
scanf("%s",name);
for (i=a;i{
if (strcmp(student[i].name,name)==NULL)
{
printf("\n\t\t以下是您要删除的学生纪录:");
findmark++;
printf("\n\t\t________________________________");
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t街道: %s",student[i].street);
printf("\n\t\t城市: %s",student[i].city);
printf("\n\t\t邮编: %s",student[i].eip);
printf("\n\t\t国家: %s",student[i].state);
printf("\n\t\t________________________________");
printf("\n\t\t是否删除?(y/n)");
if (getch()=='y')
{
for (j=i;jstudent[j]=student[j+1];
num--;
deletemark++;
printf("\n\t\t删除成功");
if((i+1){
printf("\n\t\t是否继续删除相同姓名的同学信息?(y/n)");
if (getch()=='y')
{
a=i;
continue;
}
}
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
delet();
return;
}

if((i+1){
printf("\n\t\t是否继续删除相同姓名的同学信息?(y/n)");
if (getch()=='y')
{
a=i;
continue;
}
}
}
else
continue;
}
if ((deletemark==0)&&(findmark==0))
{

printf("\n\t\t没有该同学的纪录");
return;
}
else
if (findmark!=0)
{
printf("\n\t\t没有重名信息");
printf("\n\t\t没有该同学的纪录");
return;
}
}


相关文档
相关文档 最新文档