您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 数据结构课程设计报告-学生通讯录管理系统-城市链表
数据结构课程设计报告1l井冈山大学电子与信息工程学院数据结构课程设计报告(2012——2013年度第一学期)课程名称:数据结构课程设计题目一:2.2学生通讯录管理系统题目二:2.4.3城市链表院系:计算机科学系班级:10级软件本(一)姓名:学号:指导教师:孙凌宇老师成绩:2012年月日数据结构课程设计报告2成绩评定一、指导教师评语二、成绩成绩备注指导教师:日期:年月日数据结构课程设计报告3设计题目一:2.2学生通讯录管理系统一、设计要求1.问题描述纸质的通讯录系统已经不能满足大家的要求,容易丢失、查找困难等问题是纸质通讯录所不能克服的缺点。“学生通讯管理系统”是为了帮助老师、同学,或者其他一些需要使用通讯录的人员进行管理和分析的一种应用程序。2.需求分析(1)输入数据建立通讯录(2)查询通讯录系统中满足要求的信息(3)插入新的通讯录信息(4)删除不需要的通讯录信息(5)查看所有通讯录信息二、概要设计为了实现需求分析的功能,可以从三个方面着手设计。1.主界面设计为了实现学生通讯录管理系统各功能的管理,设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能,方便用户使用本系统。本系统主控菜单运行界面如图2-3所示。图2-3“学生通讯录管理系统”主菜单2.存储结构设计本系统主要采用链表结构类型来表示存储在“学生通讯录管理系统”中的信息。其中,链表结点由四个分量构成:通讯录成员学号、通讯录成员姓名、通讯录成员电话号码、指向该结构体的指针。此外,本系统还设置了一个全局变量seat,表示通讯录中成员的序号。数据结构课程设计报告43.系统功能设计本系统设置了5个子功能菜单,5个子功能的设计描述如下。(1)建立通讯录系统。可以一次输入多个成员通讯录的信息,建立通讯录。该功能由creatIncreLink()函数实现。(2)插入通讯记录。每次可以插入一个成员通讯录的信息。如果要连续插入多个成员通讯录信息必须多次选择该功能。该功能有insertYouXu()函数实现。(3)查询通讯记录。可以按两种方式查询所需要的通讯录成员记录,一是按学号查询,二是按姓名查询。分别由seartNum()和seartName()函数实现。(4)删除通讯记录。可以对通讯录中不再需要的信息进行删除。有三种删除方式:按序号进行删除,按学号进行删除和按姓名进行删除。分别由deleteElem()函数,delNum()函数和delName()函数实现。(5)显示通讯录系统。可以查看通讯录中所有的通讯录成员记录。该功能由printList()函数实现。三、模块设计1.模块设计本程序包含两个模块:主程序模块和链表操作模块。其调用关系如图2-4所示。图2-4模块调用示意图2.系统子程序及功能设计本系统共设置10个子程序,各程序的函数名及功能说明如下,其中大部分函数都是链表的基本操作函数。(1)LinkListcreatIncreLink()//链表的创建(2)deleteElem(LinkListL,inti)//从通讯录中按序号删除第i个元素(3)delName(LinkListL,charn[])//按姓名删除通讯录记录(4)delNum(LinkListL,intn)//按学号删除通讯录记录(5)voidinsertYouXu(LinkListL,LinkListElem)//插入一条通讯录(6)printList(LinkListL)//打印指针地址为L的通讯录(7)prior(LinkListL,LinkListp)//查找位于当前地址元素的前一元素的地址主程序模块链表操作模块数据结构课程设计报告5(8)searchName(LinkListL,intn)//按姓名查找通讯录记录(9)intsearchNum(LinkListL,intn)//按学号查找查找通讯录记录(10)voidmain()//主函数。设定界面的颜色和大小,调用链表操作模块3.函数主要调用关系图本系统10个子程序之间的主要调用关系如图2-5所示。图中数字是各函数的编号。图2-5系统函数调用关系图如下所示:四、详细设计1.数据类型定义本系统采用链式结构存储通讯录结点。结点定义如下:typedefstructLNode{intnumber;doubletelenum;charname[20];structLNode*next;}LNode,*Linklist;2.系统主要子程序详细设计(1)建立链表的函数,主要用来建立通讯录。LinklistcreateIncreLink(){//创建一个存放通讯录成员的非递减有序表,返回头结点地址LinklistL=(Linklist)malloc(LEN);L-next=NULL;数据结构课程设计报告6Linklistp;intnum=1,number;doubletelenum;charname[20];printf(请输入学生学号、姓名和电话号码,建立通讯录,以'-1'为输入结束标志\n);printf(请输入学号%d:,num);scanf(%d,&number);printf(请输入姓名%d:,num);chartemp=getchar();gets(name);printf(请输入电话号码%d:,num);scanf(%1f,&telenum);while(number=0){p=(Linklist)malloc(LEN);p-number=number;p-telenum=telenum;strcpy(p-name,name);insertYouXu(L,P);num++;printf(请输入学号%d:,num);scanf(%d,&number);printf(请输入姓名%d:,num);temp=getchar();gets(name);printf(请输入电话号码%d:,num);scanf(%1f,&telenum);}return(L);}(2)显示链表中所有结点的信息,用查看通讯录所有的记录。数据结构课程设计报告7voidprintList(LinkListL){//打印头结点地址为L的通讯录printf(\n----------------\n);printf(学号姓名电话号码\n);printf(----------------\n);LinkListp=L;intn=1;if(L==NULL||L-next==NULL)printf(该通讯录中没有元素\n);//判断通讯录是否为空elsewhile(p-next!=NULL){printf(%2d%-9d,n,p-next-number);printf(%-5s%.0f\n,p-next-name,p-next-telenum);p=p-next;n++;}printf(--------------------\n);return;}五、测试分析系统运行主界面如图2-3所示。各子功能测试运行结果如下。1.通讯录的建立在主菜单下,用户输入1并回车,然后按照提示建立通讯录,分别输入通讯录成员的学号,姓名,电话号码,运行结果如图2-6所示。数据结构课程设计报告8图2-6通讯录的建立2.插入通讯录记录在主菜单下,用户输入2并回车,可以插入一个新的通讯录成员的信息,依次输入学号,姓名和电话号码,运行结果如图2-7所示。图2-7插入通讯录3.查询通讯录记录在主菜单下,用户输入3并回车,可以按照两种方式查询通讯录。一种是按学号查询,另一种方式是按姓名查询。可按照提示操作,运行结果如图2-8所示。数据结构课程设计报告9图2-8查询通讯记录4.删除通讯录记录在主菜单下,用户输入4并回车,进行通讯录记录的删除。可以按三种方式进行删除操作:按序号、按学号和按姓名。图2-9是按学号删除的运行结果。图2-9删除通讯记录5.显示通讯录信息在主菜单下,用户输入5并回车,可以查看通讯录中的所有成员信息。运行结果如图2-10所示。数据结构课程设计报告10图2-10显示通讯录信息六、用户手册(1)本程序执行文件为“学生通讯录管理系统.exe”。(2)进入本系统之后,随即显示系统主菜单界面,用户可在该界面下输入各子菜单前对应的数字并按回车键,执行相应子菜单命令。(3)本系统没有提供直接修改通讯录信息的功能,可通过删除和插入操作完成修改功能。七、调试报告调试过程中insertYouXucreateIncreLink未声明变量。后来把对函数定义提到程序初始定义。发现直接将数值在调用的函数里定义、输入、输出,避免在主函数里传输数据,其这样就不易出现错误。查找算法,运行结果由于字母出错出现死循环。通过这次课程设计使自己深刻认识到自身的不足。对线性表的插入、删除、查找等算法的实现有了更深一步的理解,受益多多。八、程序清单#includestdio.h#includestdlib.h#includestring.h#defineNULL0#defineLENsizeof(LNode)intseat;//通讯录成员的序号typedefstructLNode{//用于通讯录结点intnumber;doubletelenum;charname[20];数据结构课程设计报告11structLNode*next;}LNode,*LinkList;//1.创建链表voidinsertYouXu(LNode*pn,LinkListp);LinkListcreateIncreLink(){//创建一个存放通讯录成员的非递减有序表,返回头结点地址LinkListL=(LinkList)malloc(LEN);//头结点L-next=NULL;LinkListp;intnum=1,number;doubletelenum;charname[20];printf(请输入学生学号、姓名和电话号码,建立通讯录,以'-1'为输入结束标志\n);printf(请输入学号%d:,num);scanf(%d,&number);printf(请输入姓名%d:,num);chartemp=getchar();gets(name);printf(请输入电话号码%d:,num);scanf(%1f,&telenum);while(number=0){p=(LinkList)malloc(LEN);//新结点p-number=number;p-telenum=telenum;strcpy(p-name,name);insertYouXu(L,p);//有序地插入新结点num++;printf(请输入学号%d:,num);scanf(%d,&number);printf(请输入姓名%d:,num);数据结构课程设计报告12temp=getchar();gets(name);printf(请输入电话号码%d:,num);scanf(%1f,&telenum);}return(L);}//2.从通讯录中删除第i个元素voiddeleteElem(LinkListL,inti){LinkListp=L;intj=0;while(p-next&&ji-1){p=p-next;j++;}if(!(p-next))//判断i是否合法,i不能大于元素的个数,也不能小于等于0{printf(第%d个元素删除失败\n,i);return;}LinkListq=p-next;p-next=q-next;free(q);//释放删除的结点}//3.按姓名删除通讯者intdelName(LinkListL,charn[]){intflag=0;//判断要删除的通讯者和通讯录中的姓名是否匹配LinkListp=L-next;seat=1;if(L-next==NULL)printf(该链表中没有元素,查找失败\n);数据结构课程设计报告13else{while(p!=NULL){if(!strcmp(p-name,n))//比较输入的姓名和通讯录中的姓名{flag=1;//输入姓名匹配printf(%s,p-
本文标题:数据结构课程设计报告-学生通讯录管理系统-城市链表
链接地址:https://www.777doc.com/doc-4630823 .html