数据结构课程设计通讯录操作系统.doc

上传人:仙人指路1688 文档编号:2396790 上传时间:2023-02-17 格式:DOC 页数:18 大小:784KB
返回 下载 相关 举报
数据结构课程设计通讯录操作系统.doc_第1页
第1页 / 共18页
数据结构课程设计通讯录操作系统.doc_第2页
第2页 / 共18页
数据结构课程设计通讯录操作系统.doc_第3页
第3页 / 共18页
数据结构课程设计通讯录操作系统.doc_第4页
第4页 / 共18页
数据结构课程设计通讯录操作系统.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《数据结构课程设计通讯录操作系统.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计通讯录操作系统.doc(18页珍藏版)》请在三一办公上搜索。

1、通讯录操作系统一.需求分析当今时代是飞速发展的信息时代。在各行各业中离不开信息管理以及处理,这正是计算机被广泛应用于管理系统的原因。计算机管理的好处在于利用它能够进行信息储存以及信息编辑。用计算机储存和控制,大大提高了工作效率也减少了好多人的工作量。 通讯录信息系统不仅仅帮助了人们记忆,同时也为不少管理者提供了方便。 其设计理念较简单,将传统的纸张与笔录方式改为计算机自动化进行通讯录信息管理,既省时间又提高工作效率。用c语言构建的通讯录系统设计,通过课上学到一些关于结构体、数组、指针、函数以及循环函数的运用和字符串的处理等基本知识可以初步的实现通讯录的输入、显示、查找、删除等简单实用功能,给人

2、们带来更多的方便。通讯录信息系统的主要功能清单如下: 1) 建立通讯录链表; 2) 通讯者结点的插入(按编号的次序插入有序通讯录表); 3) 通讯者信息的查询(按编号或姓名查找通讯者信息); 4) 通讯者信息的删除 (按编号或姓名删除通讯者信息); 5) 通讯录的显示 (显示所有通讯者信息列表); 6) 通讯录信息系统的退出测试数据见调试分析。二.详细设计算法分析:主菜单 创建通讯录显示通讯录查找通讯录删除通讯录退出通讯录插入通讯录主函数流程图:int mm6返回 m结束开始输入选项06666真假主函数流程图创建函数流程图:开辟一个新结点,并使p1,p2指向它读入一个通讯者信息给p1所指的结点

3、 head=NULL,n=0当读入的p1-num不是零n=n+1yesIf(n=1)nohead=p1(把p1所指的结点作为第一个结点)P2-next=p1(把p1所指的结点连接到表尾)P2=p1(p2移到表尾)再开辟一个新结点,使p1指向它读入一个学生数据给p1所指结点表尾结点的指针变量置NULL显示通讯录流程图:p=head,使p指向第一个结点 P指向的不是尾真结点 假输出p所指向的结点P指向下一个结点当p指向的不是尾结点查找函数流程图(1) find函数:i=0in-1?没有找到是否继续调用查找函数Search函数流程图开始结束假真删除操作流程图: 链表真是一个空表 假输出“空表”p1=

4、head当num!=p-num以及p1所指的结点不是表尾结点p2=p1(p2后移一个位置)p1=p1-next(p1后移一个位置) P1是要删除是的结点 否 P1所指是是头结点 否输出“找不到”的信息head=p1-next(删除头结点)p2-next=p1-next(删除一个结点)插入函数流程图:p1=head,p0=stud 原来的是链表是空表 否将p0所指的结点作为唯一结点当p0-nump1-num以及p1所指的不是表尾结点p2指向p1的位置p1向后移一个结点 p0-numnum 假 p1指向是头结点 否p1-next=p0p0-next=NULL(插入到表尾之后)head=p0p0-n

5、ext=p1(插到表头之前)p2-next=p0p0-next=p1(插到表中间)n=n+1退出函数流程图:n=-1输出谢谢使用结束开始图11退出函数流程图返回n3)调试分析及测试结果进入系统后,系统会出现图所示菜单:在主菜单中输入1后,系统会给出提示,如图所示:在主菜单中输入3后,输入要找的姓名。在系统没有要找信息时或链表为空时,系统会给出提示,确认用户是否继续查找,如图所示:(链表为空时的查找)若要继续查找则按1 ,不是则按0,如图所示: (链表非空的查找) 在主菜单中输入0后,系统会给出提示,提示用户输入相关信息,如图所示:依次输入提示信息输入信息:1wuyifeinv139710869

6、21Wuhan2wwnv13245678987Wuhan00000再在主菜单输入1后,程序显示如图所示: 在主菜单中输入2后输入要删除的编号,系统便自动删除要删除的通讯录信息,如图15所示:按1显示查看是否删除如图:输入4进行插入操作,如图所示:插入信息如下2wyfnv12345678912wuhan按1进行显示如下图:现在如果没有其他的操作则可按5退出,操作如图所示:实验心得: 通过这次课程设计,我熟练的掌握了结构体、数组、指针、函数以及循环函数的运用和字符串的处理,了解代码中出现错误寻找错误的方法,初步了解到了一个完整的应用程序,应该如何处理美观与实用之间的关系,如何处理实际需求与操作难度

7、之间的关系,并让我深刻了解到数据结构这门课的重要性和实用性,在以后的学习中,我将更加努力的学习并动手实践这门课程。4)用户手册该设计主要运用C语言中的结构体、数组、链表、等数据结构,设计一个简单的管理系统应用程序。本程序仅设计出了通讯录管理系统的基本功能以及简单的界面,使用的是数组的相关操作,包括结构体数组的输入、输出、查找、删除等。用户仅需根据主菜单的提示操作进行创建新纪录、插入新记录、删除记录、显示记录信息、按姓名查找信息和退出系统等功能便可、操作较为简单,易于了解和操作。5)附录程序源代码:#include#include#include#define maxsize 100#defin

8、e NULL 0#define LEN sizeof(struct record)#define S %ld %s %s %s %s struct record/*定义通讯链表的结构体类型*/long num;char name20;char sex3;char tel12;char address40;struct record *next;int n;/*-建立通讯链表-*/struct record *creat(void)/*定义create函数,作用:带回一个指向链表表头的指针*/struct record *head;struct record *p1,*p2;n=0;p1=p2=

9、(struct record*)malloc(LEN);printf(请依次输入编号,姓名,性别,电话,住址n);scanf(S,&p1-num,p1-name,p1-sex,p1-tel,p1-address);head=NULL;while(p1-num!=0)n=n+1;if(n=1)head=p1;else p2-next=p1;p2=p1;p1=(struct record*)malloc(LEN);scanf(S,&p1-num,&p1-name,&p1-sex,&p1-tel,&p1-address);p2-next=NULL;return(head);/*-通讯链表的插入-*/

10、struct record *insert(struct record *head,struct record *rec)struct record *p0,*p1,*p2;p1=head;/*p1指向第一个结点*/p0=rec;/*p0指向待插入结点*/printf(请输入要插入人员的编号,姓名,性别,电话,地址:n);scanf(S,&rec-num,rec-name,rec-sex,rec-tel,rec-address);if(head=0)/*原来链表为空则p0指向结点作为头结点*/head=p0;p0-next=NULL;return head;else/*原链表不为空则进行比较插

11、入*/while (p0-nump1-num)&(p1-next!=NULL)p2=p1;p1=p1-next;if(p0-numnum)if(head=p1)head=p0;elsep2-next=p0;p0-next=p1;elsep1-next=p0;p0-next=NULL;n=n+1;return (head);/*-通讯链表的删除-*/struct record *del(struct record *head,long num)struct record *p1,*p2;if(head=NULL)/*查看通讯链表是否为空*/printf(n list null! n);p1=he

12、ad;while(num!=p1-num&p1-next!=NULL)/*p1指向的不是所要找的结点,并且后面还有结点*/p2=p1;/*p1后移一个结点*/p1=p1-next;if(num=p1-num)/*当所查结点找到时*/if(p1=head)/*情况1:p1指向首结点,则把第二个结点地址给head*/head=p1-next;else p2-next=p1-next;/*情况2:将下一结点地址赋给前一结点地址中*/printf(delete:%ldn,num);n=n-1;elseprintf(%ld notbeen found!n,num);return (head);/*-通讯

13、录的显示-*/void print(struct record *head)struct record *p;printf(nNow,these %d records are :n,n);p=head;if(head!=NULL)doprintf(编号:%ld,姓名:%s,性别%s,电话号码:%s,家庭住址:%sn,p-num,p-name,p-sex,p-tel,p-address);p=p-next;while(p!=NULL);printf(n);/*-通讯链表信息查询-*/int find(struct record rec,int n) int i;char s20; printf(

14、请输入的姓名n); scanf(%s,s); for(i=0;in;i+) if(strcmp(s,reci.name)=0)/*查看输入姓名和通讯录中姓名是否相同*/return i; else return -1; void search(struct record rec,int n) int i,ch; i=find(rec,n); if(i=-1) printf(没有找到要查找的记录,是否重新输入,是按1,否按0n); scanf(%d,&ch);if(ch=1)search(rec,n); else printf(编号:%ld,姓名:%s,性别%s,电话号码:%s,家庭住址:%s,

15、reci.num,reci.name,reci.sex,reci.tel,reci.address);/*-通讯录的退出-*/int exit()int n;n=-1;printf(谢谢使用n);return n; /*主菜单*/int menu()int m;printf(欢迎使用通讯录管理系统n);printf(主菜单n);printf(t 0.创建通讯录n);printf(t 1.显示通讯录n);printf(t 2.删除通讯录n);printf(t 3.查找通讯录n);printf(t 4.插入通讯录n);printf(t 5.退出通讯录n);do printf(ttt 请输入选项0-

16、5n);scanf(%d,&m);while(m5);return m;/*主函数*/int main()struct record *creat(void);struct record *insert(struct record *head,struct record *rec);struct record *del(struct record *head,long num);void print(struct record *head);int find(struct record rec,int n);void search(struct record rec,int n);int nu

17、m,m=0; struct record *rec,*head=NULL;while(m=0)switch (menu()case 0:head=creat();break;case 1:print(head);break;case 2:printf(请输入num值:n);scanf(%d,&num);head=del(head,num);break;case 3:search(head,n);break;case 4:rec=(struct record*)malloc(LEN);head=insert(head,rec);break;case 5:m=exit();break;default:printf(输入错误,请重新输入n);return 0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号