下面只是一个通讯录管理系统,不过增删改查功能都是齐全的,这个只是当做一个模板使用,可以在这个上面作出修改,改成别的什么什么系统,仅做参考
密码:123456
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define LEN sizeof(struct xinxi)
struct xinxi
{
char xingming[30];
char chengshi[10];
char dianhau[15];
char youbian[10];
struct xinxi *next;
};
struct xinxi *chuangjian()
{
int n=0;
struct xinxi *head,*p1,*p2;
char a[99]="123";
while(strcmp(a,"0")){
if(n==0){
p1=(struct xinxi *)malloc(LEN);
head=p1;
}else{
p2->next=p1;
}
printf("请输入姓名:");
scanf("%s",&p1->xingming);
printf("请输入城市:");
scanf("%s",&p1->chengshi);
printf("请输入电话:");
scanf("%s",&p1->dianhau);
printf("请输入邮政编码:");
scanf("%s",&p1->youbian);
p2=p1;
p1=(struct xinxi *)malloc(LEN);
n++;
printf("是否要继续输入?继续请输入非零的数据,结束请输入0\n");
scanf("%s",a);
}
printf("*******************************************\n");
printf("结束输入\n结束时别忘了保存到文件哟!!!\n");
p2->next=NULL;
return head;
}
void chazhao(struct xinxi *p2)
{
if(p2==NULL)
{
printf("无数据 请创建或导入后查询\n");
}
else
{
printf("按名字查找请输入1,按城市查找请输入2,按邮政编码查找请输入3\n\n");
char ch[30];
scanf("%s",ch);
if(strcmp(ch,"1")==0)
{
struct xinxi *a;
a=p2;//保留头指针
printf("请输入你要查找的姓名:");
char xingming1[30];
scanf("%s",xingming1);
while(1)
{
if(strcmp(p2->xingming,xingming1)==0)
{
printf("姓名是:%s\n城市是:%s\n电话是:%s\n邮政编码是:%s\n",p2->xingming,p2->chengshi,p2->dianhau,p2->youbian);
printf("**********************\n");
break;
}
else if(p2->next==NULL)
{
printf("查无此人,是否重新输入?是 请输入不为0的数据 否 请输入0\n");
char ch[30];
scanf("%s",ch);
if(strcmp(ch,"0")!=0)
{
chazhao(a);
}
else
{
break;
}
break;//跳出后来调用的chazhao(a)的while循环
}
else
{
p2=p2->next;
}
}
}
else if(strcmp(ch,"2")==0)
{
char chengshi[30];
printf("输入你想查找的城市");
scanf("%s",chengshi);
while(p2!=NULL)
{
if(strcmp(p2->chengshi,chengshi)==0)
{
printf("姓名是:%s\n城市是:%s\n电话是:%s\n邮政编码是:%s\n",p2->xingming,p2->chengshi,p2->dianhau,p2->youbian);
printf("**********************\n");
p2=p2->next;
}
else
{
p2=p2->next;
}
}
}
else if(strcmp(ch,"3")==0)
{
char youbian[30];
printf("输入你想查找的邮政编码");
scanf("%s",youbian);
while(p2!=NULL)
{
if(strcmp(p2->youbian,youbian)==0)
{
printf("姓名是:%s\n城市是:%s\n电话是:%s\n邮政编码是:%s\n",p2->xingming,p2->chengshi,p2->dianhau,p2->youbian);
printf("**********************\n");
p2=p2->next;
}
else
{
p2=p2->next;
}
}
}
else
{
printf("输入错误");
}
}
}
void zengjia(struct xinxi *p3)
{
if(p3==NULL)
{
printf("请创建或导入后再增加\n");
}
else
{
struct xinxi *p;
while(p3->next!=NULL)
{
p3=p3->next;
}
char ch[30];
while(strcmp(ch,"0")!=0)
{
p=(struct xinxi *)malloc(sizeof(struct xinxi));
printf("请输入姓名:");
scanf("%s",&p->xingming);
printf("请输入城市:");
scanf("%s",&p->chengshi);
printf("请输入电话:");
scanf("%s",&p->dianhau);
printf("请输入邮政编码:");
scanf("%s",&p->youbian);
p3->next=p;
p3=p;
printf("是否继续增加 是请输入不为0的数据 否请输入0\n");
scanf("%s",ch);
}
printf("结束时别忘了保存到文件中哟!!!\n");
p3->next=NULL;
}
}
struct xinxi *shanchu(struct xinxi *p2)
{
if(p2==NULL)
{
printf("无数据 请创建或导入后再选择删除\n");
}
else
{
struct xinxi *a,*p;
p=(struct xinxi *)malloc(sizeof(struct xinxi));
a=p2;//保留头指针
printf("请输入你要删除的姓名:");
char xingming1[30];
scanf("%s",xingming1);
if(strcmp(p2->xingming,xingming1)==0)
{
printf("删除成功\n");
return p2->next;
free(p2);
}
else
{
while(1)
{
if(p2->next==NULL)
{
printf("查无此人,是否重新选择删除?是 请输入不为0的数据 否 请输入0\n");
char ch[30];
scanf("%s",ch);
if(strcmp(ch,"0")!=0)
{
shanchu(a);
}
else
{
break;
}
break;//跳出后来调用的chazhao(a)的while循环
}
else if(strcmp(p2->next->xingming,xingming1)==0)
{
p=p2;
free(p2->next);
p->next=p->next->next;
printf("删除成功\n");
return a;
break;
}
else
{
p2=p2->next;
}
}
}
}
}
void xiugai(struct xinxi *p2)
{
if(p2==NULL)
{
printf("无数据 请创建或导入后修改\n");
}
else
{
struct xinxi *a;
a=p2;//保留头指针
printf("请输入你要修改的姓名:");
char xingming1[30];
scanf("%s",xingming1);
char n[30],m[30];
while(1)
{
if(strcmp(p2->xingming,xingming1)==0)
{
while(strcmp(m,"0")!=0)
{
printf("姓名是:%s\n城市是:%s\n电话是:%s\n邮政编码是:%s\n",p2->xingming,p2->chengshi,p2->dianhau,p2->youbian);
printf("\n");
printf("修改姓名输入1\n修改城市输入2\n修改电话输入3\n修改邮政编码输入4\n");
scanf("%s",n);
if(strcmp(n,"1")==0)
{
printf("输入新的名字:");
scanf("%s",&p2->xingming);
printf("\n");
printf("姓名是:%s\n城市是:%s\n电话是:%s\n邮政编码是:%s\n",p2->xingming,p2->chengshi,p2->dianhau,p2->youbian);
printf("\n");
printf("是否继续修改?是请输入不为0的数据,否请输入0\n");
scanf("%s",m);
break;
}
else if(strcmp(n,"2")==0)
{
printf("输入新的城市:");
scanf("%s",&p2->chengshi);
printf("\n");
printf("新的数据是:\n姓名是:%s\n城市是:%s\n电话是:%s\n邮政编码是:%s\n",p2->xingming,p2->chengshi,p2->dianhau,p2->youbian);
printf("\n");
printf("是否继续修改?是请输入不为0的数据,否请输入0\n");
scanf("%s",m);
break;
}
else if(strcmp(n,"3")==0)
{
printf("输入新的电话:");
scanf("%s",&p2->dianhau);
printf("\n");
printf("新的数据是:\n姓名是:%s\n城市是:%s\n电话是:%s\n邮政编码是:%s\n",p2->xingming,p2->chengshi,p2->dianhau,p2->youbian);
printf("\n");
printf("是否继续修改?是请输入不为0的数据,否请输入0\n");
scanf("%s",m);
break;
}
else if(strcmp(n,"4")==0)
{
printf("输入新的邮政编码:");
scanf("%s",&p2->youbian);
printf("\n");
printf("新的数据是:\n姓名是:%s\n城市是:%s\n电话是:%s\n邮政编码是:%s\n",p2->xingming,p2->chengshi,p2->dianhau,p2->youbian);
printf("\n");
printf("是否继续修改?是请输入不为0的数据,否请输入0\n");
scanf("%d",m);
break;
}
else
{
printf("请重新输入\n");
break;
}
}
break;
}
else if(p2->next==NULL)
{
printf("查无此人,是否重新输入?是 请输入不为0的数据 否 请输入0\n");
char ch[30];
scanf("%s",ch);
if(strcmp(ch,"0")!=0)
{
chazhao(a);
}
else
{
break;
}
break;//跳出后来调用的chazhao(a)的while循环
}
else
{
p2=p2->next;
}
}
}
}
void paixu(struct xinxi *p2)
{
if(p2==NULL)
{
printf("无数据 请创建或者导入后输出\n");
}
else
{
struct xinxi *p,*p1,*p3;
p1=(struct xinxi*)malloc(sizeof(struct xinxi));
for(p3=p2;p3!=NULL;p3=p3->next)
{
for(p=p2;p->next!=NULL;p=p->next)
{
if(strcmp(p->dianhau,p->next->dianhau)>0)
{
strcpy(p1->xingming,p->xingming);
strcpy(p->xingming,p->next->xingming);
strcpy(p->next->xingming,p1->xingming);
strcpy(p1->dianhau,p->dianhau);
strcpy(p->dianhau,p->next->dianhau);
strcpy(p->next->dianhau,p1->dianhau);
strcpy(p1->chengshi,p->chengshi);
strcpy(p->chengshi,p->next->chengshi);
strcpy(p->next->chengshi,p1->chengshi);
strcpy(p1->youbian,p->youbian);
strcpy(p->youbian,p->next->youbian);
strcpy(p->next->youbian,p1->youbian);
}
}
}
}
while(p2!=NULL)
{
printf("%s的信息如下:\n城市:%s\n电话:%s\n邮政编码:%s\n",p2->xingming,p2->chengshi,p2->dianhau,p2->youbian);
printf("**********************\n");
p2=p2->next;
}
}
struct xinxi *daoru()
{
struct xinxi *p2,*p1,*head,*p,*p3;
int i=0;
FILE *fp;
if((fp=fopen("D:\\通讯录.txt","rb"))==NULL)
{
printf("无法打开文件\n");
exit(0);
}
p3=(struct xinxi *)malloc(sizeof (struct xinxi));
if(fscanf(fp,"%s\t%s\t%s\t%s\n",p3->xingming,p3->chengshi,p3->dianhau,p3->youbian)!=EOF&&fscanf(fp,"%s\t%s\t%s\t%s\n",p3->xingming,p3->chengshi,p3->dianhau,p3->youbian)==EOF)
{
printf("无数据 请创建后导入");
fclose(fp);
}
else
{
p2=p1=(struct xinxi *)malloc(sizeof (struct xinxi));
head=NULL;
strcpy(p1->xingming,p3->xingming);
strcpy(p1->chengshi,p3->chengshi);
strcpy(p1->dianhau,p3->dianhau);
strcpy(p1->youbian,p3->youbian);
head=p1;
do
{
p1=(struct xinxi *)malloc(sizeof (struct xinxi));
p=p2;
p2->next=p1;
p2=p1;
}while(fscanf(fp,"%s\t%s\t%s\t%s\n",p1->xingming,p1->chengshi,p1->dianhau,p1->youbian)!=EOF);
// p3=head;
// head=head->next;
// free(p3);
free(p1);
p->next=NULL;
fclose(fp);
printf("导入成功\n");
return head;
}
}
void baocun(struct xinxi *p2)
{
FILE *fp;
if(!(fp=fopen("D:\\通讯录.txt","wt+")))
{
printf("不能打开文件\n");
exit(0);
}
fputs("姓名\t城市\t电话\t邮政编码\n",fp);
while(p2!=NULL)
{
fputs(p2->xingming,fp);
fputs("\t",fp);
fputs(p2->chengshi,fp);
fputs("\t",fp);
fputs(p2->dianhau,fp);
fputs("\t",fp);
fputs(p2->youbian,fp);
fputs("\n",fp);
p2=p2->next;
}
fclose(fp);
printf("保存成功!");
}
int main()
{
printf("请输入密码,共三次机会\n");
int i=1;
char mima[30];
char ch[30];
struct xinxi *p=NULL;
for(i=1;i<=3;i++)
{
scanf("%s",mima);
if(strcmp(mima,"123456")==0)
{
printf("输入正确!\n");
printf("***********************\n");
system("cls");
printf("\t\t欢迎来到通讯录!\t\t\n");
break;
}
else
{
printf("输入错误 已错误%d次\n",i);
if(i==3)
{
printf("错误3次 系统退出");
exit(0);
}
}
}
while(1)
{
printf("\t\t\n请输入选择的功能:\n");
printf("\t\t创建请输入1(覆盖原有文件创建新的通讯录请谨慎选择)\n");
printf("\t\t导入请输入2(把原有文件数据导入到程序中并对其进行操作)\n");
printf("\t\t保存请输入3(要想保存对文件的操作 请操作完成后进行保存)\n");
printf("\t\t查找请输入4\n");
printf("\t\t增加请输入5\n");
printf("\t\t删除请输入6\n");
printf("\t\t修改请输入7\n");
printf("\t\t排序并输出请输入8\n");
printf("\t\t退出请输入9\n");
printf("**********************\n");
scanf("%s",ch);
if(strcmp(ch,"1")==0)
{
p=chuangjian();
printf("**********************\n");
}
else if(strcmp(ch,"4")==0)
{
chazhao(p);
printf("**********************\n");
}
else if(strcmp(ch,"5")==0)
{
zengjia(p);
printf("**********************\n");
}
else if(strcmp(ch,"6")==0)
{
p=shanchu(p);
printf("**********************\n");
}
else if(strcmp(ch,"7")==0)
{
xiugai(p);
printf("**********************\n");
}
else if(strcmp(ch,"8")==0)
{
paixu(p);
printf("**********************\n");
}
else if(strcmp(ch,"2")==0)
{
p=daoru();
}
else if(strcmp(ch,"3")==0)
{
baocun(p);
}
else if(strcmp(ch,"9")==0)
{
exit(0);
}
else
{
printf("输入错误,请重新输入");
}
}
}