C语言程序设计报告.docx
二O一一年九月设计要求题目三通讯录管理系统任务:自学C语言中相关知识,设计出通讯录管理系统。要求如下所述: 建设通讯录信息,信息至少包含编号、姓名、年龄、通讯地址、电子邮箱等;; 能够提供添加、删除和修改通讯录信息的功能,并给出确认是否保存或删除记录的提示信息; 能够提供按姓名或等查询并显示相应记录信息; 将通讯录保存在文件中; 能够按表格方式输出通讯录信息。二、要求为了保证所有的数据可以长期被使用,要求程序能将相关数据存储在外部数据文件中,具体数据格式和文件名、路径等自定;根据所设计的算法,定义相应函数分别实现系统的各子功能模块,同时由主程序提供友好的用户界面,使用户可通过选择主菜单来调用课程设计中要求完成的各个功能模块,子程序执行完后可返回到主菜单,继续选择其他功能执行。源程序要求书写标准,构造清晰。重点函数的重点变量,重点功能局部均要求给出清晰的程序注释。程序编译、链接成功后,自己设计实现程序功能的一组或多组测试数据,并严格按照此测试数据进展测试,然后分析测试结果。如果程序不能正常运行或结果不正确,那么需对程序进展单步调试,在调试过程中认真查找算法实现中存在的问题,并加以分析和修正。程序详解首先,定义构造体structstudentlongnUm;用于存储学号Charname20;姓名intage;年龄longtelephoney/号码charadress40;地址charE_mail30;邮箱intQQ12;/增设的QQ一栏structstudent*next;用于存放下一级指针Jfirst;first为第一个节点,继而在其后动态的开创假设干节点。输入函数显示所有记录删除函数插入函数 按学号查找 按姓名查找查找函数选择函数以下是用于链表处理的各个函数:structstudent*creat(structstudent*p)voidprintall(structstudent*head)structstudent*delet(structstudent*head)structstudent*insert(structstudent*head)structstudent*searchbynum(structstudent*head)structstudent*searchbyname(structstudent*head)structstudent*search(structstudent*head)menu_select()以下是各个函数的详细说明:CreatO函数用于创立链表,其中以n记录节点的个数,并在创立时实现自加,以便于后面函数的处理,其循环输入的实现,依靠库函数mallocO和后面的WhiIe循环。PrintaIl函数用于显示当前的的所有记录,依靠头指针找到链表首地址,有WhiIe循环实现所有记录的输出。DeletO函数用于删除某个记录,删除可以按姓名或学号这两种方式进展的,但本程序中没有这个功能即只可以按学号进展删除(因为学号唯一)。InsertO函数用于插入,同样以头指针找到链表的首地址,并将要插入的学号依次与各个节点中得num比较,然后按顺序将一个节点插入。SearchO函数用于查找,查找函数提供了两种方式,即按姓名查找和按学号查找。在SearCh()函数中可以按提示调用SearChbyname()和SearChbynUmMenu-SelectO函数用于提供函数选项,旨在简化主函数。流程图#include<string.h>#include<malloc.h>#include<conio.h>#include<stdliHl>#define LEN :PrinlalISearch Insert IDelet#defineNULLQ#defineSHU"%dn%sn%5dn%ldn%sn%sn%s"intn;structstudent(longnum;charname20;intage;longtelephone;charadress40J;charE-mail30;intQQ12;structstudent*next;first;structstudent*creat(structstudent*p)创立链表的函数,即输入函数(structstudent*head;structstudent*pl,*p2;n=0;先给n赋值0pl=p2=(structstudent*)malIoc(LEN);强制类型转换Printf("ttt*请输入用户信息*n");printf(',ttt输入学号:n”);scanf(%ld",<fcpl->num);Printfettt输入姓名:n");scanf(',%s"p1->name);printf(',ttt输入年龄An”);scanf(',%d"p1->age);printf(',ttt输入:nn);scanf(',%ld",<fcpl->telephone);printf(',ttt输入地址n");scanf(%s"p1->adress);printf(',ttt输入E-mailn,);scanf(',%s"p1->E_mail);printf(',ttt输入QQn");scanf(,%s"p1->QQ)40head=NULL;while(pl->num!=O)(n=n+l;实现n的自加,记录节点的个数if(n=l)head=pl;elsep2->next=pl;p2=pl;pl=(structstudent*)malloc(LEN);printf(,ttt请输入用户信息*3<cn");printf(',ttt输入学号:W");scanf(',%ld'pl->num);Primf("ttt输入姓名:n");scanf(',%s",p1->name);printf(ttt输入年龄:n");scanf(',%d",pl->age);printf("ttt输入:nn);scanf(',%ld",pl->telephone);printf(ttt输入地址n");scanf(',%s'',p1->adress);printf(',ttt输入E-mail:nH);scanf(',%s",p1->E_mail);printf(,ttt输入QQn");scanf(',%s',p1->QQ);p2->next=NULL;return0;voidprintall(structstudent*head)显示所有记录(structstudent*p;printf(',n全部的记录如下n:");p=head;doprintf(SHU,p->num,p->name,p->age,p->telephone,p->adress,p->E-mail,p->QQ);p=p->next;while(p!=NULL);)/80structstudent*delet(structstudent*head)/删除函数(longnum;PrindC请输入要删除的号码:n,');scanf(',%ld",<fenum);structstudent*pl,*p2;if(head=NULL)(Printf("列表为空!n");returnhead;pl=head;while(num!=p1->num&&pl->next!=NULL)2=pl;pl->next;)if(num=p1->num)(if(pl=head)要删除的节点为首节点head=pl->next;elsep2->next=pl->next;printf(',deletz%dn,num);n=n-l;节点减一1elseprintf(',%d未找到该节点!n,num);returnhead;)structstudent*insert(structstudent*head)插入函数(structstudent*stud;structstudent*p,*pl,*p2;pl=head;=studp指向的是要插入的节点if(head=O)(head=p;p0->next=NULL120)else(while(pO->num>pl->num)&&(pl->next!=NULL)(2=pl;pl=pl->next;1if(p->num<=pl->num)(if(head=pl)head=p,插入到原来第一个节点之前elsep2->next=p;p->next=pl;/插入到p2所指的节点之后n=n+l;returnhead;structstudent*searchbynum(structstudent*head)按学号查找(longnumb;Printf("请输入要删除的号码:n,');scanf(',%ld",<fenumb);structstudent*p;p=head147scanf(%ld",<fcnumb);if(numb!=p->num)p=p->next;elseprintf(SHU,p->num,p->name,p->age,p->telephone,p->adress,p->E-mail,p->QQ);returnhead;)structstudent*searchbyname(structstudent*head)按姓名查找(chara100;PrMf("请输入要查找的姓名:n');scanf(,%s",a);structstudent*p;p=head;scanf(',%s",a);if(strcmp(a,p->name)!=0)p=p->next;elseprintf(SHU,p->num,p->name,p->age,p->telephone,p->adress,p->E-mail,p->QQ);returnhead;)structstudent*search(structstudent*head)(charchoic;PriIHf("tttl-按号码查找2-按姓名查找”);Primfrttt请选择:”);choic=getch();switch(choic)(caserr:searchbynum(&first);break;case2:SearChbyname(&first);break;1returnhead;inimenu_select()chars80J;inta;定义整形变量system("cls);Printf("tt*欢迎进入通讯管理界面*nn");printf("ttt. pr