这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 高校专区 » 岭南EE码农港 » C语言课程设计作业--简易通讯录

共6条 1/1 1 跳转至

C语言课程设计作业--简易通讯录

菜鸟
2014-11-20 18:50:32     打赏
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
typedef struct person  /*通讯录结构中结点的定义*/
{
 char name[10];
 char addr[30];
 char offphnum[15];
 char hmphnum[15];
 char mbphnum[15];
 struct person *next;

}listnode,*listlink;
struct add_person   /*通讯录记录结构*/
{
 char name[10];
 char addr[30];
 char offphnum[15];
 char hmphnum[15];
 char mbphnum[15];

};
listlink readfp()      /*将文件信息读出并存入链表*/
{
  FILE *fp;
  struct add_person persons;
  listnode *s;
  listlink head=NULL,end=NULL;
  fp=fopen("people.txt","rb");/*打开文件*/
  if(fp==NULL)
  {
   printf("不能打开文件\n");
   return head;
  }
  fread(&persons,sizeof(struct add_person),1,fp);
  while(!feof(fp))
  {
    s=(listnode*)malloc(sizeof(listnode));/*存入链表*/
    strcpy(s->name,persons.name);
    strcpy(s->addr,persons.addr);
    strcpy(s->offphnum,persons.offphnum);
    strcpy(s->hmphnum,persons.hmphnum);
    strcpy(s->mbphnum,persons.mbphnum);
    s->next=NULL;
    if(head==NULL)
    head=end=s;
    else
    {
      end->next=s;
      end=s;
    }
    fread(&persons,sizeof(struct add_person),1,fp);
    }
    return head;
}
listlink create()  /* 建立通讯录函数 */
{
   listlink s;
   listlink head=NULL,end=NULL;
   while(1)
   {
   s=(listlink)malloc(sizeof(listnode));
   printf("\n\t 创建一个addr-book\n");
   printf("\n\n\t 姓名:('#' 结束)\n 姓名:");
   scanf("%s",s->name);
   if(strcmp(s->name,"#")==0)
     break;
   printf("\n地址:");
   scanf("%s",s->addr);
   printf("\n办公号码:");
   scanf("%s",s->offphnum);
   printf("\n家庭号码:");
   scanf("%s",s->hmphnum);
   printf("\n移动号码:");
   scanf("%s",s->mbphnum);
   s->next=NULL;
   if(head==NULL)
   head=end=s;
   else
   {
   end->next=s;
   end=s;

   }

   }
return(head);

}
void save(listlink head)/*保存所有信息*/
{
  FILE *fp;
  static struct add_person persons;
  listlink p1;
  fp=fopen("people.txt","wb");
  for(p1=head;p1!=NULL;p1=p1->next)
  {
    strcpy(persons.name,p1->name);
    strcpy(persons.addr,p1->addr);
    strcpy(persons.offphnum,p1->offphnum);
    strcpy(persons.hmphnum,p1->hmphnum);
    strcpy(persons.mbphnum,p1->mbphnum);
    fwrite(&persons,sizeof(struct add_person),1,fp);

  }
  fclose(fp);
}
void show(listlink head)/* 显示所有的信息 */
{
  listnode *p1;
  p1=head;
  while(p1!=NULL)
  { 
    printf("\n名字:");
    printf("%s\n",p1->name);
	printf("地址:");
    printf("%s\n",p1->addr);
	printf("办公号码:");
    printf("%s\n",p1->offphnum);
	printf("家庭号码:");
    printf("%s\n",p1->hmphnum);
	printf("移动号码:");
    printf("%s\n",p1->mbphnum);
    p1=p1->next;
  }


}
void deleted(listlink head)/* 删除信息 */
{
  listlink p1,p2;
  char name1[10];
  p1=p2=head;
  if(p1==NULL)
  {
  printf("没有记录\n");
  return;

  }
printf("\n\n删除-----请输入要删除的名字:");
scanf("%s",name1);
while(strcmp(p1->name,name1)!=0&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(strcmp(p1->name,name1)==0)
{
  if(p1==head)
   p1=p1->next;
   else
   p2->next=p1->next;
   free(p1);
}
else
   printf("它不存在于 addr-book!\n");
}
void input(listlink head)/*向通讯录添加一个人信息 */
{
	listlink s,end;
	s=(listlink)malloc(sizeof(listnode));
	do
	{
		printf("\n\n\t输入---请输入个人名字
\t('#'结束输入) \n\t名字:");
		scanf("%s",s->name);
		if(strcmp(s->name,"#")==0)
		   return;
		end=head;
		if(end==NULL)break;
		while((strcmp(end->name,s->name)!=0)&&end->next!=NULL)
			end=end->next;
	}while(strcmp(end->name,s->name)==0);
    printf("\n地址:");
   scanf("%s",s->addr);
   printf("\n办公号码:");
   scanf("%s",s->offphnum);
   printf("\n家庭号码:");
   scanf("%s",s->hmphnum);
   printf("\n移动号码:");
   scanf("%s",s->mbphnum);
	s->next=NULL;
	end->next=s;



}
void alter(listlink head)/*修改一个人信息*/
{
	listlink p1;
	char name1[10],phnum1[15],phnum2[15],phnum3[15],add1[30];
	printf("\n\n\t修改----请输入修改的名字");
	scanf("%s",name1);
	p1=head;
	while(strcmp(name1,p1->name)!=0&&p1->next!=NULL)
		p1=p1->next;
	if(strcmp(name1,p1->name)!=0)
	{
		printf("\n\n\t它不存在于 addr-book!");
		return;
	}
	else
	{ printf("请输入要修改的信息");
	 printf("\n地址:");
   scanf("%s",add1);
   printf("\n办公号码:");
   scanf("%s",phnum1);
   printf("\n家庭号码:");
   scanf("%s",phnum2);
   printf("\n移动号码:");
   scanf("%s",phnum3);
	  strcpy(p1->name,name1);
	  strcpy(p1->addr,add1);
	  strcpy(p1->offphnum,phnum1);
	  strcpy(p1->hmphnum,phnum2);
      strcpy(p1->mbphnum,phnum3);
	}




}

void find(listlink head)
{
  listlink p1;
  char name1[10];
  while(1)
  {
   p1=head;
   printf("\n\n\tfind---请输入名字:('#'is end)\n名字:");
   scanf("%s",name1);
   if(strcmp(name1,"#")==0)return;
   while(strcmp(name1,p1->name )!=0&&p1->next!=NULL)
	   p1=p1->next;
   if(strcmp(name1,p1->name)!=0)
	   printf("\n\n\t 它不存在于 addr-book!");
   else
   {
	   printf("\n名字:%s",p1->name);
	   printf("\n地址:%s",p1->addr);
	   printf("\n电话1:%s",p1->offphnum);
	   printf("\n电话2:%s",p1->hmphnum);
	   printf("\n电话3:%s",p1->mbphnum);
   
   
   }
  
  
  }


}
void main()
{ printf("\n\n\n\n\n\t\t\t\t简易通讯录");
  printf("\n\t\t\t  我的学号:2013914204");
  printf("\n\t\t\t\t按任何键开始");
  getch();
  system("CLS");
  listlink head=NULL;
  int sel;
  head=readfp();
  if(head==NULL)head=create();
  do
  {
	  
  printf("\n 欢迎使用 ADDRESS BOOK");
  printf("\n 1.显示所有信息      2.删除一个信息");
  printf("\n 3.寻找一个信息      4.插入一个信息");
  printf("\n 5.修改一个信息      0.保存和退出");
    
  printf("\n 输入你的选择(0-5):");
  scanf("%d",&sel);
  switch(sel)
  {

  case 1:show(head);
  printf("请输入任何键返回 \n");
  getch();
  system("CLS");
  break;
  case 2:deleted(head);
  break;
  case 3:find(head);
  break;
  printf("请输入任何键返回 \n");
  getchar();
  break;
  case 4:input(head);
  break;
  case 5:alter(head);
  break;
  case 0:save(head);return;
  }

 }
  while(1);


 

  getch();


}

1234 

总结:

   1.编程过程要不断调试,才能发现错误

   2.这个程序核心是用链表知识和文件知识

  




关键词: 作业    

菜鸟
2014-11-21 09:39:57     打赏
2楼

注意排版与对齐,有些地方没对齐


做的可以,继续努力。


院士
2014-11-21 11:27:32     打赏
3楼
这个程序有点长,还是一人三号的。楼主可能花了不少心血,赞一个。

院士
2014-11-22 16:50:29     打赏
4楼
这个真棒啊!大学阶段熟练使用链表与文件已经很棒的了

专家
2014-11-22 17:25:52     打赏
5楼
做成界面就更棒了

菜鸟
2014-11-26 19:32:43     打赏
6楼
这个做得比较完整了

共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]