885191310数据结构课程设计——通讯录管理系统.doc

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

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

1、信息与计算科学学院课程设计报告书课程名称: 数据结构课程设计 班 级: 学 号: 姓 名: 指导老师: 1,设计项目名称:通讯录管理系统 2,课程设计目的: 通过设计一个通讯录管理系统,进一步熟悉C中类的概念、基本知识和技利用所学的基本知识和技能解决简单的面向对象的程序设计问题。了解系统开发的需求分析、类层次设计、模块分解、编码测试、模块组装与整体调试的全过程,加深对C的理解与Visual C+环境的使用:逐步熟悉程序设计的方法,并养成良好的编程习惯。3,内容及设计要求:编写一个通讯录管理系统。以把所学数据结构知识应用到实际软件开发中去。设计内容:本系统应完成一下几方面的功能:1)输入信息en

2、ter();2)显示信息display( );3)查找以姓名作为关键字 search( );4)删除信息delete( );5)存盘save ( );6)装入load( ) ;设计要求:1)每条信息至包含 :姓名(NAME )街道(STREET)城市(CITY)邮编(EIP)国家(STATE)几项2)作为一个完整的系统,应具有友好的界面和较强的容错能力3)上机能正常运行,并写出课程设计报告.3.12 详细功能如下:A,添加:系统将提示用户输入新添加人员信息,输入到文件中,人员信息数据包括姓名(name),街道(street),城市(city),邮编(eip),国家(state).B,删除: 首

3、先由用户输入要删除的人员的姓名,然后调用删除函数,删除该人员的所有相关资料.C,显示所有人员信息: 该功能将显示已经保存的所有人员的姓名,街道,城市,邮编及国家.D,查询: 可由用户输入要查找的人员姓名,然后系统用查找函数查找,接着系统使用相关文件命令输出所查找的人员的全部信息.E,退出系统 关闭通讯录管理系统.3.2,规格说明:4,详细设计:4.1,通讯录管理系统功能说明图:通讯录管理系统删除联系人不保存退出保存退出新添联系人查询菜单 4.2,数据结构及各模块分析:4.21:设计类,对象及基本数据类型:4.211创建一个record类,它有五个数据成员:char name20; 姓名 cha

4、r street20; 街道 char city20; 城市 char eip20; 邮编 char state20; 国家包含函数: 功能如下:void mainmenu(); 主菜单void searchmenu(); 查找菜单void enter(); 新添纪录 void search(); 按姓名查询 void display(); 显示所有 void load(); 读取文件 void save(); 写入文件 void delete(); 按姓名删除 4.212,结构体:struct record char street20; char name20; char city20; c

5、har state20; char eip20;student500;struct slnoderecord date;struct slnode *next;struct slnode *prior; 4.3,设计流程图 6,调试分析及心得体会:6.1,调试分析:void load()/从文件导入 if(fp=fopen(student,rb)=NULL) /打开文件进行读的操作 printf(ntt通讯录文件不存在); if (fp=fopen(student,wb)=NULL)/打开文件进行读的操作 printf(ntt建立失败); exit(0); else printf(ntt通讯录

6、文件已建立); printf(ntt按任意键进入主菜单); getch(); /从键盘接收一个字符 return; /返回主函数的主菜单 exit(0); fseek(fp,0,2); /*文件位置指针移动到文件末尾*/ if (ftell(fp)0) /*文件不为空*/ rewind(fp); /*文件位置指针移动到文件开始位置*/ for (num=0;!feof(fp) & fread(&studentnum,sizeof(struct record),1,fp);num+); .getch(); return; 6.11void search()/查找人 int j=0,a=0;/j用

7、来记录查找. scanf(%s,name); for(int i=a;inext)/num用来表示联系人的个数if(strcmp(name,p-next-date.name)=0)/查找是否有该人,有则输出该点所有信息,并往下查找。 printf(查询到的信息:); printf(n); printf(姓名:); printf(%s,p-next-date.name); . j+;if(j=0)printf(tt该通讯录没有该人!);if (i+1)num) /确保扫描到所有的联系人 printf(ntt是否继续查找相同名字的学生信息:(y/n); .else printf(ntt按任意键返回

8、主菜单); .6.2,心得体会: 1),程序的编写应是:三分编写,七分调试; 2)程序编写之前需求分析,至关重要,将关系这整个项目的成败. 3)一名优秀程序员的成长,需要付出很多很多,编程是每天必做 4)熟能生巧,这次在用指针处理双向链表时,以前对这块内容并不十分清楚,这次感觉 很吃力,所以在今后的编程之中,尽可能把基本技能练习熟练. 5)做软件最终是满足用户的需求,所以做软件时应一切应以用记为导向.7,使用说明及操作展示:7.1运行环境: Microsoft Visual C+6.07.2在此,把软件使用过程写出,并对此程序的一些细节和具体的操作方法加以说明,说明如下:7.21将软件进行初始

9、化,即在VC+6.0中运行该程序,进入程序主界面,首次运行会建立文件,提示文件是否成功建立。然后按任意键后进入主菜单。界面面显示的是“主菜单”,主菜单有五个方面: 1,新添记录2,查询菜单3,删除联系人4,保存退出5,不保存退出查询菜单包裹三个方面 1,显示所有 2,按姓名查询 3,返回主菜单 7.22,输入和存取人员信息,选择菜单界面的第1个选择进入此选择界面,根据提示,输入信息相关信息。7.23 按2显示查询的菜单。7.24按“3”删除指定联系人。7.25按“4”将输入的联系人信息保存到文件中并退出通讯录。7.26,按“5”退出通讯录,不保存输入的联系人信息。8,全部源代码:#includ

10、e #include #include #include struct record char name20; char street20; char city20; char eip20; char state20; student500;struct slnoderecord date;struct slnode *next;struct slnode *prior;typedef slnode * linklist;linklist l;int num=0;FILE *fp; void mainmenu();void searchmenu();void enter();void sear

11、ch();void display();void load();void save();void delet();void listinsert();void initlist();void main() initlist();load();listinsert(); while (1)mainmenu(); void load() if(fp=fopen(student.bin,rb)=NULL) printf(ntt通讯录文件不存在); if (fp=fopen(student,wb)=NULL) printf(ntt建立失败); exit(0); else printf(ntt通讯录文件

12、已建立); printf(ntt按任意键进入主菜单); getch(); return; exit(0); fseek(fp,0,2); if (ftell(fp)0) rewind(fp); for (num=0;!feof(fp) & fread(&studentnum,sizeof(struct record),1,fp);num+); printf(ntt文件导入成功); printf(ntt按任意键返回主菜单); getch(); return; printf(ntt文件导入成功); printf(ntt通讯录文件中无任何纪录); printf(ntt按任意键返回主菜单); getc

13、h(); return; void mainmenu()/主菜单 char choic; system(cls); printf(ntt*欢迎进入通讯录系统*); printf(ntt*1新添纪录 *); printf(ntt*2查找联系人 *); printf(ntt*3删除联系人 *); printf(ntt*4保存退出 *); printf(ntt*5不保存退出 *); printf(ntt*); printf(ntt请选择:); choic=getch(); switch (choic) case 1:enter();break; case 2:searchmenu();break;

14、case 3:delet();break; case 4:save();break;case 5:exit(0); default:mainmenu(); void searchmenu()/查询菜单 char choic; system(cls); printf(ntt* 查询菜单 *); printf(ntt* 1-显示所有 *); printf(ntt* 2-按姓名查询 *); printf(ntt* 3-返回主菜单 *); printf(ntt*); printf(ntt请选择:); choic=getch(); switch (choic) case 1:display();brea

15、k; case 2:search();break; case 3:mainmenu();break; void enter()/添加纪录 printf(ntt* 请输入学生信息 *n); printf(ntt姓名:); scanf(%s,&studentnum.name); printf(ntt街道:); scanf(%s,&studentnum.street); printf(ntt城市:); scanf(%s,&studentnum.city); printf(ntt输入邮编:); scanf(%s,&studentnum.eip); printf(ntt国家:); scanf(%s,&s

16、tudentnum.state); num+; printf(ntt是否继续添加?(Y/N):); if (getch()=y) enter(); return; void display()/显示所有 int i; system(cls); if(num!=0) printf(ntt* 以下为通讯录所有信息*); for (i=0;inum;i+) printf(ntt姓名: %s,studenti.name); printf(ntt街道: %s,studenti.street); printf(ntt城市: %s,studenti.city); printf(ntt邮编: %s,stude

17、nti.eip); printf(ntt国家: %s,studenti.state); printf(tt); if (i+1num) printf(ntt_); system(pause); printf(ntt*); else printf(ntt通讯录中无任何纪录); printf(ntt按任意键返回主菜单:); getch(); return; void save()/写入文件 int i; if (fp=fopen(student,wb)=NULL) printf(ntt文件打开失败); for (i=0;inum;i+) if (fwrite(&studenti,sizeof(st

18、ruct record),1,fp)!=1) printf(ntt写入文件错误!n); fclose(fp); printf(ntt通讯录文件已保存); printf(ntt按任意键退出程序ntt); exit(0); void listinsert()/增加一个结点 linklist s,p=l;for(int i=0;idate.name,studenti.name); strcpy(s-date.city,studenti.city); strcpy(s-date.street,studenti.street); strcpy(s-date.eip,studenti.eip); strc

19、py(s-date.state,studenti.state); s-prior=p-prior; s-next=p; p-prior-next=s; p-prior=s;p=p-next;void initlist()l=new slnode;l-next=l;l-prior=l;void search() int j=0,a=0;linklist p=l;printf(ntt* 按姓名查找 *); char name20; printf(ntt请输入姓名:); scanf(%s,name); for(int i=a;inext)if(strcmp(name,p-next-date.name

20、)=0) printf(查询到的信息:); printf(n); printf(姓名:); printf(%s,p-next-date.name); printf(n); printf(城市:); printf(%s,p-next-date.city); printf(n); printf(国家:); printf(%s,p-next-date.state); printf(n); printf(街道:); printf(%s,p-next-date.street); printf(n); printf(邮政编码:); printf(%s,p-next-date.eip); j+;if(j=0

21、)printf(tt该通讯录没有该人!);if (i+1)num) printf(ntt是否继续查找相同名字的学生信息:(y/n); if (getch()=y) a=i;continue; else return; else printf(ntt按任意键返回主菜单); getch(); return; void delet() int a=0; int findmark=0; int j; int deletemark=0; int i; char name20; printf(ntt请输入要删除学生姓名:); scanf(%s,name); for (i=a;inum;i+) if (st

22、rcmp(studenti.name,name)=NULL) printf(ntt以下是您要删除的学生纪录:); findmark+; printf(ntt_); printf(ntt姓名: %s,studenti.name); printf(ntt街道: %s,studenti.street); printf(ntt城市: %s,studenti.city); printf(ntt邮编: %s,studenti.eip); printf(ntt国家: %s,studenti.state); printf(ntt_); printf(ntt是否删除?(y/n); if (getch()=y)

23、for (j=i;jnum-1;j+) studentj=studentj+1; num-; deletemark+; printf(ntt删除成功); if(i+1)num) printf(ntt是否继续删除相同姓名的同学信息?(y/n); if (getch()=y) a=i; continue; printf(ntt是否继续删除?(y/n); if (getch()=y) delet(); return; if(i+1)num) printf(ntt是否继续删除相同姓名的同学信息?(y/n); if (getch()=y) a=i; continue; else continue; if

24、 (deletemark=0)&(findmark=0) printf(ntt没有该同学的纪录); return; else if (findmark!=0) printf(ntt没有重名信息); printf(ntt没有该同学的纪录); return; 顺序栈的进栈,退栈,取栈顶:typedef int datatype;/*栈元素的数据类型*/#define M 64 /*栈可能达到的容量,此处设定为64*/typedef structdatatype dataM;int top;seqstack; /*顺序栈类型定义*/seqstack *s;/*s是顺序栈类型指针*/#include#

25、includeint main(void) seqstack *CREAT();/*创建栈*/seqstack *PUSH(seqstack *s,datatype x);/*入栈*/datatype POP(seqstack *s);/*退栈*/ datatype TOP(seqstack *s);/*取栈顶*/ seqstack *SETNULL(seqstack *s);/*置栈空*/ datatype EMPTY(seqstack *s);/*判栈空*/int i;seqstack *t,k;t=CREAT();printf(显示栈内元素:); for(i=0;itop;i+)prin

26、tf(%4d,t-datai);int x;printf(n输入待插元素 x:);scanf(%d,&x); s=PUSH(t,x);if(s!=NULL)printf(n插入后的栈内元素:); for(i=0;itop;i+) printf(%4d,s-datai);TOP(t);printf(取栈顶:);printf(%4d,s-datas-top); printf(n退栈后:); if(POP(t)!=-1) printf(%d,POP(t); if(SETNULL(s)-top=-1) printf(n顺序栈已置空); if(EMPTY(s)=-1) printf(n顺序栈是空的);

27、else printf(n顺序栈非空:); return 0;seqstack *CREAT()seqstack *t;int x;t=(seqstack *)malloc(sizeof(seqstack);t-top=-1;int i=0;printf(n输入栈内元素 x:);scanf(%d,&x);while(x!=0)t-datai=x;i+;t-top+;printf(n 输入栈内元素 x:);scanf(%d,&x);return (t);seqstack *PUSH(seqstack *s,datatype x)/*将元素x插入顺序栈s的顶部*/if(s-top=M-1)prin

28、tf(noverfiow:);return (NULL);/*上溢*/s-top+;/*栈顶指针加1*/ s-datas-top=x;/*将x插入当前栈顶*/return (s);datatype POP(seqstack *s)/*若栈非空,取出栈顶元素删除之*/if(s-top=-1)printf(n栈是空的:);return(-1);int x;x=s-datas-top;s-top-;/*删去栈顶元素*/return (x);seqstack * SETNULL(seqstack *s)s-top=-1;return(s);datatype EMPTY(seqstack *s)if(s-top=-1)return(-1);return 0;datatype TOP(seqstack *s)if(EMPTY(s)printf(空栈); return NULL;elsereturn(s-datas-top);

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号