通讯录

来源:互联网 发布:如何替换软件文件 编辑:程序博客网 时间:2024/05/01 00:38

一. 实验目的及实验环境

   1、实验目的:理解和掌握C语言中函数的定义,参数的使用,函数调用的方法;学习通过功能分解来设计和编写较复杂程序的方法。

 

   2、实验环境:Windows 8.1,Visual C++6.0

 

实验内容

  设计并建立一个通讯录,要能够输入个人信息,并且对信息进行统计,实现增、删、改、查的功能。

 

三.方案设计

该程序具有一些特点:

1.程序有简洁、美观的界面,界面间可以相互切换。

2.界面菜单中的项目直接按键选择进入,程序有多种功能可供选择,增强了可操作性。

3.该通讯录能够对数据进行处理,并且用户可以根据自己的喜好对数据进行选择性的输出。

四.数据测试

1.开始界面:

 

用户需要先对通讯录录入数据。

2.功能选项:

 

  用户可以根据选项模式进入功能,以实现通讯录的显示,以及增、删、改、查这些功能。

(1).增加数据:

 

(2).删除数据

 

(3).修改数据:

 

(4).查找数据:

 

3. BUG:  

(1).在删除第一个时没有将结点分配好,导致程序崩溃


(2).增加数据时使用尾插,没有将新申请的空间与原空间正确的连接起来,致使程序崩溃。

 

 

五.总结

1.实验中遇到的主要问题。

    (1).在增加数据是一定要注意把新的内存空间与原空间正确适当的链接起来,还有在插入数据时使用尾插法能够更加清楚的把数据显示出来。

 (2).删除数据时要给删除函数一个返回值,并且将该返回值赋给原空间的头结点,不然程序会出现很严重的错误。

2.对设计及调试过程的心得体会

(1).当程序过长,或需要多个功能时,可以针对每个功能自定义函数,最后需要时,只要主函数直接调用即可,很方便,而且易于读写,容易修改,并且大大减少了变量的数据,程序易于控制.

(2)体会到了各种头文件的用处,以及全局变量和局部变量在程序中的作用。

六.核心源代码

struct person *creat()

{

struct person *Head=NULL,*New,*End;

New=End=(struct person *)malloc(sizeof(struct person));

printf("ID\tName\tSex\tNumber\n");

scanf("%d",&New->ID);

if(New->ID==0)

return 0;

scanf("%s",New->name);

scanf("%s",New->sex);

scanf("%s",New->number);

while(1)

{

a++;

if(a==1)

{

New->next=Head;

End=New;

Head=New;

}

else

{

New->next=NULL;

End->next=New;

End=New;

}

New=(struct person *)malloc(sizeof(struct person));

scanf("%d",&New->ID);

if(New->ID==0)

break;

scanf("%s",New->name);

scanf("%s",New->sex);

scanf("%s",New->number);

}

free(New);

return Head;

}

printf1(struct person *Head)

{

struct person *p;

printf("*******本通讯录共有%d个联系人*******\n",a);

p=Head;

printf("ID\tName\tSex\tNumber\n");

while(p!=NULL)

{

printf("%d\t",p->ID);

printf("%s\t",p->name);

printf("%s\t",p->sex);

printf("%s\n",p->number);

p=p->next;

}

}

struct person *Insert(struct person *Head)

{

struct person *p1;

struct person *p2;

//p1=Head;

while(p1->next!=NULL)

   p1=p1->next;

   p2=p1;

printf("ID\tName\tSex\tNumber(when input 0 end)\n");

while(1)

{

p1=(struct person *)malloc(sizeof(struct person));

scanf("%d",&p1->ID);

if(p1->ID==0)

break;

scanf("%s",p1->name);

scanf("%s",p1->sex);

scanf("%s",p1->number);

p2->next=p1;

p1->next=NULL;

p2=p1;

a++;

}

return Head;

}

struct person *Delete(struct person *Head)

{

int i,n;

struct person *p1;

struct person *p2;

p1=Head;

p2=p1;

printf("\tDelete NO.");

scanf("%d",&n);

if(n==1)

{

p1=p1->next;

Head=p1;

free(p2);

}

else

{

for(i=0;i<n-1;i++)

p2=p1;

p1=p1->next;

p2->next=p1->next;

free(p1);

}

a--;

return Head;

}

Change(struct person *Head)

{

int i,n;

struct person *p1;

struct person *p2;

p1=Head;

p2=p1;

printf("\tChange (when input '0' end) NO.");

scanf("%d",&n);

while(n!=0)

for(i=1;i<n;i++)

p2=p1;

p1=p1->next;

printf("ID\tName\tSex\tNumber\n");

scanf("%d",&p1->ID);

scanf("%s",p1->name);

scanf("%s",p1->sex);

scanf("%s",p1->number);

printf("Please input continue,when input '0' end\n");

scanf("%d",&n);

if(n==0)

break;

else 

continue;

}

struct person *Search(struct person *Head)

{

struct person *p;

int  k,j=0;

char n;

char s[30];

p=Head;

printf("Please choose the types\n");

printf("1.Search by ID\n");

printf("2.Search by name\n");

printf("3.Search by number\n");

n=getch();

switch(n-48)

{

case 1 :printf("Please input the ID:");

scanf("%d",&k);

system("cls");

printf("ID\tname\tsex\tnumber\n");

while(p!=NULL)

if(p->ID==k)

{

printf("%d\t",p->ID);

printf("%s\t",p->name);

printf("%s\t",p->sex);

printf("%s\n",p->number);

}

else

j++;

p=p->next;

if(a==j)

printf("Sorry,there is not this contact\n");

break;

case 2:printf("Please input the key words:");

fflush(stdin);

gets(s);

system("cls");

printf("ID\tname\tsex\tnumber\n");

while(p!=NULL)

if(strcmp(p->name,s)==0)

同case 1.

case 3 :printf("Please input the number:");

fflush(stdin);

gets(s);

system("cls");

printf("ID\tname\tsex\tnumber\n");

while(p!=NULL)

if(strcmp(p->number,s)==0)

同case 1.

}

return Head;

}

0 0
原创粉丝点击