编写一个通讯录的程序 200

RT... RT 展开
 我来答
cgiggle
2009-12-16 · TA获得超过1957个赞
知道大有可为答主
回答量:1996
采纳率:0%
帮助的人:1247万
展开全部
#include <stdio.h>//通讯录
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define N 100
int M=5;
struct student
{ char num[10];char name[10];char tel[10];};
void myprint()
{
system("cls");
printf(" |-----------------------------------------------|\n");
printf(" | :-)请输入选项编号(0-7): |\n");
printf(" |-----------------------------------------------|\n");
printf(" |--------------1--创建通讯录--------------------|\n");
printf(" |--------------2--显示通讯录--------------------|\n");
printf(" |--------------3--查询通讯录--------------------|\n");
printf(" |--------------4--修改通讯录--------------------|\n");
printf(" |--------------5--添加通讯录--------------------|\n");
printf(" |--------------6--删除通讯录--------------------|\n");
printf(" |--------------7--排序通讯录--------------------|\n");
printf(" |--------------0--退出--------------------------|\n");
printf(" |-----------------------------------------------|\n");
}
void mycreat(struct student *p,int n)
{
struct student *q=p;
FILE *fp=NULL;
fp=fopen("d:\\jilu.dat","w");
if(fp==NULL){printf("error"); return;}
for(p=q;p-q<n;p++)
{
printf("\n");
printf("第%d条记录:\n",p-q+1);
printf("学号:");
do
{gets(p->num);}
while(strcmp(p->num,"")==0);
printf("姓名:");
gets(p->name);
printf("电话:");
gets(p->tel);
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
}
}
void mydisplay(struct student *p,int n)
{
FILE *fp=NULL;
fp=fopen("d:\\jilu.dat","r");
if(fp==NULL){printf("error"); return;}
system("cls");
printf(" 学号 姓名 电话\n");
while(n>0)
{
fscanf(fp,"%23s%15s%15s",p->num,p->name,p->tel);
printf("%23s%15s%15s\n",p->num,p->name,p->tel);
p++;n--;
}
}
void mysearch(struct student *p,int n)
{
struct student *q=p;
int flag=0;
char c='\0',nm[10]="",nam[10]="";
printf("\n按照学号查询(h)或姓名查询(m):\n");
c=getche();
if(c=='h'||c=='H')
{
printf("请输入要查询记录的学号:");gets(nm);
for(p=q;p-q<n;p++)
if(strcmp(nm,p->num)==0)
{
printf(" 学号 姓名 电话\n");
printf("%23s%15s%15s\n",p->num,p->name,p->tel);
flag=1;
}
if(flag==0) printf("wrong...\n");
}
else if(c=='m'||c=='M')
{
printf("请输入要查询记录的姓名:");gets(nam);
for(p=q;p-q<n;p++)
if(strcmp(nam,p->name)==0)
{
printf(" 学号 姓名 电话\n");
printf("%23s%15s%15s\n",p->num,p->name,p->tel);
flag=1;
}
if(flag==0) printf("wrong...\n");
}
else printf("wrong...\n");
}
void mymodify(struct student *p,int n)
{
struct student *q=p;
FILE *fp=NULL;
char nam[10]="";
mydisplay(p,n);
printf("请输入您想要修改记录的姓名:\n");gets(nam);
for(p=q;p-q<n;p++)
if(strcmp(nam,p->name)==0) break;
if(p-q==n)
printf("wrong...");
else
{
printf("请输入正确的学号:");
do
gets(p->num);
while(strcmp(p->num,"")==0);
printf("请输入正确的姓名:");
gets(p->name);
printf("请输入正确的电话:");
gets(p->tel);
}
fp=fopen("d:\\jilu.dat","w");
if(fp==NULL){printf("error"); exit(0);}
for(p=q;p-q<n;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
fclose(fp);
}
void myadd(struct student *p,int n)
{
FILE *fp=NULL;
struct student *q=p;
char c='\n',tempnum[10]="",tempname[10]="",temptel[10]="";
printf("\n");
while(strcmp(p->num,"")!=0)
{
printf("%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
}
n=p-q;
do
{
printf("请输入新纪录的学号:");
do
gets(tempnum);
while(strcmp(tempnum,"")==0);
printf("请输入新纪录的姓名:");
gets(tempname);
printf("请输入新纪录的电话:");
gets(temptel);
for(p=q;p-q<n;p++)
if(strcmp(tempnum,p->num)==0||strcmp(temptel,p->tel)==0)
{
printf("学号或电话号码需要重新输入吗(Y/N)?");
c=getche();
putchar('\n');
break;
}
if(p-q==n)
{
strcpy(p->num,tempnum);
strcpy(p->name,tempname);
strcpy(p->tel,temptel);
break;
}
}while(c=='y'||c=='Y');
fp=fopen("d:\\jilu.dat","w");
if(fp==NULL){printf("error"); return;}
for(p=q;p-q<=n;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
fclose(fp);
M++;
}
void mydelete(struct student *p,int n)
{
FILE *fp=NULL;
struct student *q=p;
char c[10]="",tempnum[10]="",tempname[10]="",temptel[10]="",choose='\0';
mydisplay(p,n);
printf("选择删除记录的方式:学号(h)姓名(m)");
choose=getche();
printf("\n");
if(choose=='m'||choose=='M')
{
printf("删除的记录:");
gets(c);
for(;p-q<n;p++)
if(strcmp(c,p->name)==0) break;
if(p-q<n)
for(;p-q<n-1;p++)
{
strcpy(p->num,(p+1)->num);
strcpy(p->name,(p+1)->name);
strcpy(p->tel,(p+1)->tel);
}
else printf("no\n");

}
else if(choose=='h'||choose=='H')
{
printf("删除的记录:");
gets(c);
for(;p-q<n;p++)
if(strcmp(c,p->num)==0) break;
if(p-q<n)
for(;p-q<n-1;p++)
{
strcpy(p->num,(p+1)->num);
strcpy(p->name,(p+1)->name);
strcpy(p->tel,(p+1)->tel);
}
else printf("no");
}
else printf("wrong\n");
fp=fopen("d:\\jilu.dat","w");
if(fp==NULL){printf("error"); return;}
for(p=q;p-q<n-1;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
fclose(fp);
M--;
}

void mysort(struct student *p,int n)
{
FILE *fp=NULL;
struct student *q=p,*w=p,*a=p;
char temp[10]="",c1='\0',c2='\0';
mydisplay(p,n);
printf("选择按照学号(h)或姓名(m)排序:\n");
c1=getche();
if(c1=='h'||c1=='H')
{
printf("升序(s)或者降序(j)排列:");
c2=getche();
if(c2=='s'||c2=='S')
for(;p-a<n;p++)
{
w=p;
for(q=p+1;q-a<n;q++)
if(strcmp(w->num,q->num)>0) w=q;
strcpy(temp,w->num);
strcpy(w->num,p->num);
strcpy(p->num,temp);
strcpy(temp,w->name);
strcpy(w->name,p->name);
strcpy(p->name,temp);
strcpy(temp,w->tel);
strcpy(w->tel,p->tel);
strcpy(p->tel,temp);
}
else if(c2=='j'||c2=='J')
for(;p-a<n;p++)
{
w=p;
for(q=p+1;q-a<n;q++)
if(strcmp(w->num,q->num)<0) w=q;
strcpy(temp,w->num);
strcpy(w->num,p->num);
strcpy(p->num,temp);
strcpy(temp,w->name);
strcpy(w->name,p->name);
strcpy(p->name,temp);
strcpy(temp,w->tel);
strcpy(w->tel,p->tel);
strcpy(p->tel,temp);
}
else printf("555wrong...\n");
}
else if(c1=='m'||c1=='M')
{
printf("升序(s)或者降序(j)排列:");
c2=getche();
if(c2=='s'||c2=='S')
for(;p-a<n;p++)
{
w=p;
for(q=p+1;q-a<n;q++)
if(strcmp(w->name,q->name)>0) w=q;
strcpy(temp,w->num);
strcpy(w->num,p->num);
strcpy(p->num,temp);
strcpy(temp,w->name);
strcpy(w->name,p->name);
strcpy(p->name,temp);
strcpy(temp,w->tel);
strcpy(w->tel,p->tel);
strcpy(p->tel,temp);
}
else if(c2=='j'||c2=='J')
for(;p-a<n;p++)
{
w=p;
for(q=p+1;q-a<n;q++)
if(strcmp(w->name,q->name)<0) w=q;
strcpy(temp,w->num);
strcpy(w->num,p->num);
strcpy(p->num,temp);
strcpy(temp,w->name);
strcpy(w->name,p->name);
strcpy(p->name,temp);
strcpy(temp,w->tel);
strcpy(w->tel,p->tel);
strcpy(p->tel,temp);
}
else printf("555wrong...\n");
}
else printf("555wrong...\n");
fp=fopen("d:\\jilu.dat","w");
if(fp==NULL){printf("error"); return;}
for(p=a;p-a<=n;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
fclose(fp);
}
main()
{
char choose='\0',yes_no='\0';
struct student record[N]={0};
do
{
myprint();
printf(" :-)请选择(0-7):");
choose=getche();
switch(choose)
{
case '1':mycreat(record,M);break;
case '2':mydisplay(record,M);break;
case '3':mysearch(record,M);break;
case '4':mymodify(record,M);break;
case '5':myadd(record,M);break;
case '6':mydelete(record,M);break;
case '7':mysort(record,M);break;
case '0':exit(0);
default :printf("\nerror...\n");
}
printf("\n :-)继续选择吗(y/n)?\n");
do
{yes_no=getch();}
while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
}while(yes_no=='Y'||yes_no=='y');
}
//这个是我一年前写的 其中有部分功能可以改进 您可以进行改写
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xeepsoft
2009-12-24
知道答主
回答量:7
采纳率:0%
帮助的人:0
展开全部
晕死!怎么现在的人,遇到问题不先思考一下,上来就要代码啊?!
我建议楼主先试着自己写,遇到问题在搜索答案,最后在提问,不然你是不会提高的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
缅甸笑笑
2009-12-16 · TA获得超过648个赞
知道小有建树答主
回答量:485
采纳率:0%
帮助的人:227万
展开全部
QQ上也可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
aaronzhanglun
2009-12-14 · TA获得超过123个赞
知道答主
回答量:67
采纳率:0%
帮助的人:65.9万
展开全部
你用google的gmail的通讯录吧,还可以和手机里的通讯录联机。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式