数据结构课程设计报告2010年01月03日目录1、需求分析 (3)问题描述 (3)基本要求 (3)2、概要设计 (3)数据结构 (3)程序模块 (3)3、详细设计 (4)4、测试与分析 (8)5、总结 (8)6、附录(原程序清单) (10)1.需求分析数据结构课程主要是研究非数值计算的程序设计中所出现的计算机操作对象以及它们之间的关系和操作的学科。
学习数据结构是为了将实际问题中所涉及的对象在计算机表示出来并对它们进行处理。
通过课程设计可以提高思维能力、促进综合应用能力和专业素质的提高。
1.1问题描述现代人社会交往越来越多,人们随身携带有通讯录,对通讯录进行必要的管理,对人们实现快速查询记录提供了极大的方便。
考虑到要对通讯录进行快速检索,所以采用C语言来实现通讯录查找系统。
要求的模块包括:插入、查找、删除、修改、保存。
人机界面友好,使用图形化界面,菜单的选择用动画显示。
1.2基本要求(1)输入的形式与输入值的范围name 字符phone 字符ad 字符(2)输出的形式姓名、电话号码及住址以字符输出(3)程序所能达到的功能1)记录姓名、地址、电话项2)查找并显示给定电话号码的记录2.概要设计1)数据结构依据给定的通讯录信息和数据格式,链表结点必须用结构实现。
结构类型的层次结构:typedef struct node{char name[20];char ad[50];char phone[20];struct node *next;}slink;2)程序模块主函数Main()建立通讯录slink * creslink(int n)通讯者的插入int insert(slink *head,char n[],slink *x)通讯者的删除int delete(slink *head,char n[])通讯者的查询int search(slink *head,char n[])通讯录表的输出int output(slink *head)3.详细设计通讯录的建立slink * creslink(int n){slink *head,*p,*s;int i;if(n<1) return NULL;p=head=(slink *)malloc(sizeof(slink));printf("请依次输入联系人的姓名、地址和电话:\n"); for(i=1;i<=n;i++){s=(slink *)malloc(sizeof(slink));fflush(stdin);scanf("%s%s%s",&s->name,&s->ad,&s->phone);p->next=s;p=s;}p->next=NULL;printf("通讯录已保存\n");printf("按任意键继续...\n");getch();return head;}通讯者的插入int insert(slink *head,char n[],slink *x) {slink *p,*q;p=head;while(p->next!=NULL){p=p->next;if(strcmp(p->name,n)==0){q=(slink *)malloc(sizeof(slink)); strcpy(q->name,x->name);strcpy(q->ad,x->ad);strcpy(q->phone,x->phone);q->next=p->next;p->next=q;printf("插入成功\n");printf("按任意键继续...\n");getch();return 1;}}printf("所要插入的位置不存在\n"); printf("按任意键继续...\n");getch();return 0;}通讯者的删除int delete(slink *head,char n[]) {slink *p,*q;p=head;while(p->next!=NULL){q=p;p=p->next;if(strcmp(p->name,n)==0){q->next=q->next->next;printf("删除成功!\n");printf("按任意键继续...\n");getch();return 1;}}return 0;}通讯者的查询int search(slink *head,char n[]){slink *p;p=head;while(p->next!=NULL){p=p->next;if(strcmp(p->name,n)==0){printf("姓名地址电话\n");printf("%-20s%-30s%-20s \n",p->name,p->ad,p->phone); printf("查询成功\n");printf("按任意键继续...\n");getch();return 1;}}printf("通讯录中没有此联系人!\n");printf("按任意键继续...\n");getch();return 0;}通讯录表的输出int output(slink *head){slink *p;if(head->next==NULL){printf("通讯录空!\n");printf("按任意键继续...\n");getch();return 0;}p=head->next;printf("姓名地址电话\n");while(p!=NULL){printf("%-20s%-30s%-20s\n",p->name,p->ad,p->phone); p=p->next;}printf("输出成功\n");printf("按任意键继续...\n");getch();return 1;}主函数int main(){int c,n;char s[50];slink *head,p;loop:{printf("-----****************-----\n");printf("-----****************-----\n");printf("1 通讯录的建立\n2 通讯者的插入\n3 通讯者的删除\n4 通讯者的查询\n5 通讯录表的输出\n6 退出\n");printf("请选择操作(1~6):\n");fflush(stdin);c=7;scanf("%d",&c);switch(c){case 1:printf("请输入联系人的个数:\n");fflush(stdin);scanf("%d",&n);head=creslink(n);goto loop;case 2:printf("请输入原位置处联系人的姓名:\n");fflush(stdin);scanf("%s",s);printf("请依次输入要插入联系人的姓名、地址和电话:\n");fflush(stdin);scanf("%s%s%s",,p.ad,p.phone);insert(head,s,&p);goto loop;case 3:printf("请依次输入要删除联系人的姓名:\n");fflush(stdin);scanf("%s",s);delete(head,s);goto loop;case 4:printf("请依次输入要查询联系人的姓名:\n");fflush(stdin);scanf("%s",s);search(head,s);goto loop;case 5:output(head);goto loop;case 6:return 1;default:printf("输入有误!\n");printf("按任意键继续...\n");getch();goto loop;}}return 0;}用户界面loop:{printf("-----****************-----\n");printf("-----****************-----\n");printf("1 通讯录的建立\n2 通讯者的插入\n3 通讯者的删除\n4 通讯者的查询\n5 通讯录表的输出\n6 退出\n");printf("请选择操作(1~6):\n");4.测试与分析输入1 进入通讯录建立,输入联系人个数,输入3,依次输入联系人的姓名、地址、电话,显示通讯录已保存,按任意键继续,按任意键返回主界面,输入2输入联系人姓名,修改资料,返回主界面。
输入3,输入联系人姓名,显示联系人资料已删除,返回主界面。
输入4,输入联系人姓名,显示出联系人列表,返回主界面。
输入5,显示所有联系人列表资料,返回主界面。
输入6,正常退出。
测试完成,无错误信息。
5.总结课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。
回顾起此次课程设计,至今我们仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整半个学期的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。