通讯录管理、八皇后问题、约瑟夫环、表达式求值课程设计报告.doc
《通讯录管理、八皇后问题、约瑟夫环、表达式求值课程设计报告.doc》由会员分享,可在线阅读,更多相关《通讯录管理、八皇后问题、约瑟夫环、表达式求值课程设计报告.doc(28页珍藏版)》请在三一办公上搜索。
1、 数据结构 课程设计报告 选题名称: 通讯录管理、八皇后问题、 约瑟夫环、表达式求值 系(院): 计算机学院 专 业: 计算机科学与技术 班 级: 111-3 姓 名: 孙鹏程 学 号: 201158501320 指导教师: 武秀川 2013 年 9月 1目录1 通讯录31.1功能需求分析:31.2 系统功能模块图41.3 设计思想:41.4 设计原理41.5 主要代码描述52 八皇后问题122.1 问题简介122.2 存储结构122.3 关键算法分析122.4 源代码133 约瑟夫环163.1 问题简介163.2 数据结构描述163.3 程序源代码174 表达式求值184.1 需求分析184
2、.2 设计概要194.3 源程序195心得体会271 通讯录1.1功能需求分析:通讯录主要有一下模块:通讯录界面设计、添加联系人、删除联系人、显示所有联系人、修改信息、查询联系人,其中姓名可以由字符和数字混合编码,电话号码可由字符和数字组成。1.11通讯录界面设计主要功能是设计通讯录的界面,能够提示用户的实际操作等。我采用的是按照序号来实现相应的操作的,其中:1添加联系人2删除联系人3显示所有联系人4修改信息5查询联系人6 关闭通讯录1.12通讯录添加联系人模块主要功能是添加联系人模块,添加操作是根据用户的要求实现的。包括添加联系人的姓名、电话、QQ、邮编、地址等,最后输入完成后,将提示新联系
3、人信息已经保存好!1.13通讯录删除联系人模块主要功能是删除不再需要的联系人。其中包括输入你要删除输入电话或电话号码如果没有的话,将提示:对不起!联系人中没你要找的人!如果找到,则提示删除联系人的所有信息和这个人的信息已经从你的通讯录中删除的信息!1.14通讯录显示所有联系人模块显示所有的联系人的信息,包括姓名、电话、QQ、邮编、地址并提示所有联系人已经全部显示出来!1.15通讯录修改联系人模块主要是修改联系人的信息,界面提示要输入需要修改的姓名或者电话号码,如果不正确,显示对不起,联系人中没有你找的人。如果正确,则显示出改联系人的所有信息,并提示根据下面提示修改信息,姓名、电话号、QQ、邮编
4、、地址等1.16通讯录关闭通讯录模块1.2 系统功能模块图通讯录系 统 信息的初始化 添加联系人删除联系人显示所有联系人修改信息查询联系人关闭通讯录1.3 设计思想:通讯录系统是用面向对象的方法设计,在类中定义了一下方法:add_person(),del_person(),show_all(),alter(),select(),save_new()等方法和name, address, number, post,qq属性来实现通讯录的各种操作。1.4 设计原理 通讯录管理系统以菜单选择,通过调用各个函数,通过使用各种循环语句如while和dowhile,实现不同的功能.不同函数处理后返回的只是一
5、个头结点,但是通过头结点可以找到所有链表中的信息,只要有函数,找到头指针就能进行相应的操作,所以模块化的程序方便以后添加或者删除某些功能,程序中通过system(“cls”)清屏函数实现界面的转换,主函数中的循环保证程序不会退出,一个循环和一个清屏函数实现了主菜单和各子画面的切换(子函数)。这样的话各个子函数都可以调用一开始输入的数据,这样就实现了各个不同函数调用时都能使用整个系统连续起来了。作为一个通讯录管理系统,增加了文件的读入和写出功能,增加了程序的实用性。1.5 主要代码描述#include#include#include#define N 20typedef struct Perso
6、nchar TelN; char NameN;char Address2*N;struct Person *next;Person,*Linklist;/输入函数void InPut(Linklist p)printf(n请输入通讯者姓名:n); scanf(%s,p-Name);printf(n请输入通讯者联系电话:n);scanf(%s,p-Tel);printf(n请输入通讯者地址:n);scanf(%s,p-Address);/输出单个联系人的信息void PutNode(Linklist p) printf(n通讯者姓名:n%s,p-Name); printf(n通讯者联系电话:n%
7、s,p-Tel);printf(n通讯者地址:n%snn,p-Address);/回收内存函数void Release(Linklist L)Linklist z,p;p=L; while(p!=NULL)z=p-next;free(p);p=z;/建立链表的函数Linklist CreatList()int tem1;Linklist s,p,L; printf(n输入通讯者信息:n输入非零整数开始;或者输入0退出:n);scanf(%d,&tem1);L=(Linklist)malloc(sizeof(Person);L-next=NULL;s=L;while(tem1!=0)p=(Lin
8、klist)malloc(sizeof(Person);InPut(p);p-next=s-next;s-next=p;s=p; printf(n输入学生信息:n输入非零整数继续;或者输入0退出:n);scanf(%d,&tem1);return L;/向通讯录中第i个位置前插入一个联系人的函数void ListInsert(Linklist L,int i)int j=0;Linklist s,p;p=L;while(p&jnext;+j;if(!p|ji-1) exit(0);s=(Linklist)malloc(sizeof(Person);InPut(s);s-next=p-next;
9、p-next=s;/删除通讯录中第i个联系人的函数void ListDelete(Linklist L,int i)int j=0;Linklist p,q; p=L; while(p-next&jnext;+j;if(!(p-next)|ji-1) exit(0); q=p-next;p-next=q-next; printf(您将删除的联系人信息为:n); PutNode(q);free(q);/输出通讯录中的所有联系人信息void OutPut(Linklist L)Linklist p;p=L-next;printf(输出所有联系人信息:n);while(p!=NULL)PutNode
10、(p);p=p-next;/按姓名查找的函数Linklist FindName(Linklist p)char temN;printf(n请输入要查找同学的姓名:n);scanf(%s,tem); while(p!=NULL)if(!strcmp(p-Name,tem)return p;elsep=p-next;return NULL;/按联系电话查找的函数Linklist FindTel(Linklist p)char temN;printf(n请输入要查找同学的联系电话:n);scanf(%s,tem);while(p!=NULL)if(!strcmp(p-Tel,tem)return p
11、;elsep=p-next;return NULL;/按住址查找的函数Linklist FindAddress(Linklist p)char tem2*N;printf(n请输入要查找同学的住址:n);scanf(%s,tem);while(p!=NULL)if(!strcmp(p-Address,tem)return p;elsep=p-next;return NULL;/查找函数 void ListFind(Linklist stu) Linklist p; int b; printf(n请输入对应功能号,实现不同方式查找:n);printf(n1:按姓名查找;2:按联系电话查找;3:按
12、住址查找;其他:退出n);scanf(%d,&b);while(b0)&(bnext-next;q-next-next=NULL;while(p) while(q-next &(strcmp(p-Name,q-next-Name)0)q=q-next;s=p-next;p-next=q-next;q-next=p;p=s;q=L;/按照联系人地址排序void SortAddress(Linklist L) Linklist p,q,s;q=L;p=q-next-next;q-next-next=NULL;while(p) while(q-next &(strcmp(p-Address,q-ne
13、xt-Address)0)q=q-next;s=p-next;p-next=q-next;q-next=p;p=s;q=L;/按照联系人电话号码排序void SortTel(Linklist L) Linklist p,q,s;q=L;p=q-next-next;q-next-next=NULL;while(p) while(q-next&(strcmp(p-Tel,q-next-Tel)0)q=q-next;s=p-next;p-next=q-next;q-next=p;p=s;q=L;/排序函数void Sort(Linklist L)Linklist p;p=L;int i;printf
14、(请选择通讯录的几种排序方式:n);printf(1:按姓名排序;2:按电话号码排序;3:按地址排序;其他整数:退出n);scanf(%d,&i);switch(i)case 1:SortName(p);break;case 2:SortTel(p);break;case 3:SortAddress(p);break;default:break;/主函数void main()int i,j,t;Linklist L;while(1) printf(通讯录功能如下:n1通讯录链表的建立;n2通讯者结点的插入;n3通讯者结点的查询;n4通讯者结点的删除;n5通讯录链表的输出;n0退出管理系统:n请
15、选择0-5n);scanf(%d,&t);if(t5) break;switch(t)case 1:L=CreatList();Sort(L);break;case 2:printf(在第i个联系人前插入,请输入i值n);scanf(%d,&i);ListInsert(L,i);break;case 3:ListFind(L);break;case 4:printf(删除第j个联系人的信息,请输入j值n);scanf(%d,&j);ListDelete(L,j);break;case 5:OutPut(L);break;printf(开始回收内存!); Release(L); printf(回
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通讯录 管理 皇后 问题 约瑟夫 表达式 求值 课程设计 报告
链接地址:https://www.31ppt.com/p-3994463.html