《数据结构课程设计(通讯录制作).》由会员分享,可在线阅读,更多相关《数据结构课程设计(通讯录制作).(27页珍藏版)》请在金锄头文库上搜索。
1、东华理工大学数据结构(通讯录制作)一 设计内容(通讯录)本系统应完成一下几方面的功能:1)输入信息enter();2)显示信息display( );3)查找以姓名作为关键字 search( );4)删除信息delete( );5)存盘save ( );6)装入load( ) ;设计要求:1)每条信息至包含 :姓名(NAME )街道(STREET)城市(CITY)邮编(EIP)国家(STATE)几项2)作为一个完整的系统,应具有友好的界面和较强的容错能力二设计思路通过visual c+6.0(用的是C语言)编写一个dos界面的控制台程序,该程序通过链表的操作,文件存储来实现通讯录的基本功能str
2、uct address /*定义结构*/ char name10; /*姓名*/ char street50; /*街道*/ char city10; /*城市*/ char state15; /*国家*/ char eip7; /*邮编*/ struct address *next; /*后继指针*/ struct address *prior; /*前驱指针*/链表的插入,删除来实现通讯录里的内容的插入删除当操作完成通过文件件来存储链表的信息,下次打开程序时,读取文件里的内容到内存中,放在链表,然后又可以对链表进行操作;存储查找删除插入内存链表导入文件在这里面,文件内容不可以在外部更改,只
3、能通过读取到内存链表中,通过程序进行更改,然后再写入到文件,写入过程会覆盖上次的内容。struct address *start; /*首结点*/struct address *last; /*尾结点*/struct address *find(char *); /*声明查找函数*/void enter(); /*函数声明*/void search(); /*查找,查找过程中调用find函数*/void save(); /*存盘,将链表信息保存到文件中*/void load(); /*导入,将文件内容导入到内存链表中*/void list(); /*显示当前链表中信息*/void ddelet
4、e(struct address *,struct address *);void insert(struct address *i,struct address *start, struct address *last);void inputs(char *,char *,int);void display(struct address *);int menu_select(void);三详细设计1.主界面设计通过switch语句调用各种函数,实现各种操作。然后把switch嵌套到无限的for循环(for(;))中,使完成每一步操作都回到到选择操作的主界面mainmenu_selectent
5、erddeletelistsearchsavesaveloadexitinputs insertfinddisplay 文件函数之间的相互调用void main() start = last = NULL; for(;) /*无限循环*/ switch(menu_select() /*调用主界面的选择函数,带回返回值*/ case 1:enter(); continue; case 2:ddelete(&start,&last); continue; case 3:list(); continue; case 4:search(); continue; case 5:save(); conti
6、nue; case 6:load(); continue; case 7:exit(0); int menu_select(void) /*主目录*/ char s80; int c;printf(欢迎使用DOS通讯录系统n);printf(*请在做其它操作前先导入*n);printf(*n); printf(* 1.输入信息 *n); printf(* 2.删除信息 *n); printf(* 3.显示信息 *n); printf(* 4.查找 *n); printf(* 5.存盘 *n); printf(* 6.导入 *n); printf(* 7.退出 *n); printf(*n);
7、do printf(nPlease enter your choice:n); gets(s); c = atoi(s); /*将获取的字符串转换成整型*/while(c7); return c; /*返回输入值*/2.输入信息函数输入函数:struct address *info; /*定义当前结点*/for(;) info=(struct address *)malloc(sizeof(struct address); /*为当前结点分配空间*/ if(!info) printf(n Out of memory); exit(0); /*如果分配空间失败,退出程序*/ printf(输入空
8、姓名结束:n); inputs(请输入 姓名:,info-name,10); if(!info-name0)break; /*如果输入姓名为空,结束循环*/ inputs(请输入 街道:,info-street,50); inputs(请输入 城市:,info-city,15); inputs(请输入 国家:,info-state,15); inputs(请输入 邮编:,info-eip,7);insert(info,&start,&last); /*调用结点插入函数*/输入函数调用到另外两个函数,inputs和insert其中inputs中还用到fgets(str,n,fp),把键盘的输入信
9、息传到字符串中char p255; do printf(prompt); fgets(p,254,stdin);/*stdin,标准输入缓存,获取键盘输入信息*/ if(strlen(p)count) printf(nToo Longn); while(strlen(p)count); pstrlen(p)-1=0; strcpy(s,p);insert是关键函数,每当输入完一条信息都会调用到insert函数,将信息插入到链表中if(*last=NULL) /*如果尾结点为空,意味着当前链表为空*/ /*则将该结点赋给头尾结点*/ i-next=NULL; i-prior=NULL; *last=i; *start=i; return; else /*如果链表不为空,则将信息插入到链表尾,作为尾结点*/ (*last)-next=i; i-prior=*last; i-next=NULL; *last=(*last)-next; *last (*last)-nexti i-nextNULLNULL插入信息会显示在链表最后3.删除查找显示函数删除函数调用find函数,通过姓名,查找到该节点,然后删除该节点信息,这其中涉及到头尾节点,及其变化;先判断是否为头结点,如果