




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构课程设计报告课题名称:个人通讯录管理系统的设计班 级:11级电子信息工程2班 时 间: 2014年1月7日 指导老师: 目录一. 需求分析1.1开发背景.21.2项目目标.21.3运行环境.21.4项目任务书.2二.技术路线2.1总体设计.32.2源代码及分析.43. 测试分析.184. 问题及解决方案.225. 心得体会.226. 参考文献.24 一、需求分析1.1开发背景在这个科技飞速发展的信息时代,通讯录在人们的日常生活及工作中发挥越来越大的作用,但是其中包含的庞大信息令人头疼,很难处理,根据这一需求,我组开发了一个个人通讯录管理系统,旨在于解决通讯录庞大数据的存储问题,帮助人们减少通讯录数据的丢失所带来的损失,便于对通讯录进行添加、删除、修改等基本操作。1.2 项目目标 本项目的目标是帮助人们处理在通讯录管理上各种棘手问题,便于人们快捷高速地与联系人建立良好的社会人脉关系。 本项目将实现的功能主要有:1、 存储通讯录2、 通讯记录管理系统(添加、删除、修改通讯录)3、 查找记录系统4、 将通讯录存储到磁盘5、 处理磁盘中的通讯录6、 通讯录联系人排序7、 按关系显示通讯录8、 人机工作界面友好1.3运行环境 Windows2000及以上以上版本均可运行,硬件要求较低,一般的个人电脑配置已经足够调试需安装Visual C+6.0或相关软件。1.4项目任务书。 在Vc+6.0中用C语言编写一个可以对通讯录进行管理的系统,以实现上述所期望的8种功能功能:1、存储通讯录:管理人可以通过键盘输入将通讯录写入CPU内存中并存储,可以对其进行各种基本操作;2、通讯记录管理系统:管理人可通过键盘操作对已将建立好的通讯录进行添加、删除、修改等操作使通讯录更完善。3、查找记录系统:管理人可以通过联系人的姓名、电话、编号等基本信息查找目的联系人。4、 磁盘存储通讯录:管理人可通过键盘操作将存储在CPU内存中的联系人信息保存至磁盘中方便下次进行各种操作,也便于查看显示。5、 处理磁盘中的通讯录:管理人可通过键盘操作将存储在磁盘中的通讯录读入CPU内存,便于管理。6、 通讯录联系人排序:管理人可通过键盘操作对通讯录中的联系人进行按生日或编号排序,编号可以根据与此联系人的联系频度、认识时间长短、创建次序等原则自行定义,因此编号排序可用于说明该联系人与管理人的关系深度,而按生日排序可以使管理人更好的了解联系人的出生日期。7、按关系显示通讯录:管理人可通过键盘操作显示对特定关系的联系人的所有信息,便于查看及联系。8、人机工作界面友好:具有较高的稳定性和可用性,使操作输出的信息准确无误,操作简单便捷,并且在内存方面要考虑全面到位,尽量能处理各种突发情况。2、 技术路线2.1 总体设计 我组的设计思路:利用二叉树的静态数组存储方法存储通讯录中的联系人信息,使用按层遍历可对存储的联系人信息进行各种基本操作。以下是我们程序设计的具体内容。1. 结构体的定义:定义二叉树中结点的数据域,其中包含联系人的姓名、编号、电话、地址、生日及与管理人的关系(关系有家人、朋友和同学、同事、重要工作合作伙伴)。2. 主函数内容:菜单选择,其中包括12个功能选择。3. Input子函数:通过键盘输入数据建立通讯录的联系人信息并储存至CPU内存中。4. LEVER_Display子函数:显示储存在CPU内存中的通讯录联系人信息。5. Insert_a_record子函数:往通讯录中添加若干条新的记录。6. Delete_a_record子函数:在已经建立好的通讯录中通过联系人的姓名,编号以及电话等信息查找到目的联系人后对其进行删除操作。7. Find子函数:在已经建立好的通讯录中通过联系人的姓名,编号以及电话等信息进行查找,因此该函数包含了三个查找的子函数。8. AddfromText子函数:将文件中存储的联系人信息添加到CPU内存中保存。9. WritetoText子函数:将CPU内存中存储的联系人信息添加到文件中保存。10. Sort子函数:对CPU内存中存储的联系人进行排序,有按编号排序和按生日排序两种,管理人可选择其中一种排序方法排序即可。11. Deep子函数:对CPU内存中已经建立好的二叉树(其中存储着联系人信息)进行求深度操作。12. Correct子函数:对CPU内存中存储的联系人信息进行修改操作。13. Relative子函数:按联系人与管理人的特定关系查找到目的联系人并显示该联系人的相关信息。整体框图如下所示:2.2 源代码及分析#include /*引用库函数*/#include#include#includetypedef struct /*定义结构体数组*/ char num8; /*编号*/ char name18; /*姓名*/ char addr18; /*地址*/ char phone15; /*电话号码*/ char lei8; /关系 lei为1:家人,2:朋友和同学,3:同事 ,4:重要工作合作伙伴 5:陌生人 char birthday9; /*生日*/ Student;Student stu100; /*结构体数组变量*/int menu_select() /*菜单函数*/ int c; do / system(cls); /*运行前清屏*/ system(color f0); /系统命令,屏幕白底黑字 printf(tt*个人通讯录管理系统* n); printf(tt | 1. Input Records n); printf(tt | 2. Display All Records n); printf(tt | 3. Insert a Record n); printf(tt | 4. Delete a Record n); printf(tt | 5. Find n); printf(tt | 6. Read records from a Text Filen); printf(tt | 7. Write to a Text file n); printf(tt | 8. Sort n); printf(tt | 9. Bitree,s deepth n); printf(tt | 10 Correct a record n); printf(tt | 11 Relative n); printf(tt | 0. Quit n); printf(tt*n); printf(tttGive your Choice(0-11):); scanf(%d,&c); /*读入选择*/ while(c11); return(c); /*返回选择*/int Input(Student stud,int n) /*输入若干条记录*/int i=1;char sign,x10; /*x10为清除多余的数据所用*/ while(sign!=n&sign!=N) /*判断*/ printf(tttpersons num:); /*交互输入*/ scanf(ttt%s,&studn+i.num); printf(tttpersons name:); scanf(ttt%s,&studn+); printf(tttpersons address:); scanf(ttt%s,&studn+i.addr); printf(tttpersons phone:); scanf(ttt%s,&studn+i.phone); printf(tttpersons lei:); scanf(ttt%s,&studn+i.lei); printf(tttpersons birthday(for example:):); scanf(ttt%s,&studn+i.birthday); gets(x); /*清除多余的输入*/ printf(tttany more records?(Y/N); scanf(ttt%c,&sign); /*输入判断*/ i+; printf(ttt共有%d个联系人n,n+i-1); return(n+i-1);void LEVER_Display(Student stud,int n) /*显示所有记录*/ int i; printf(-n); /*格式头*/ printf( num name address phone lei birthdayn); printf(-n); for(i=1;i1&i%10=0) /*每十个暂停*/ printf(t-n); /*格式*/ printf(tt); system(pause); printf(t-n); printf(tt); system(pause);int Insert_a_record(Student stud,int n) /*插入一条记录*/ int i,k,h;char x10; /*清除多余输入所用*/ printf(tt插到末尾请输入1,插到其他位置请输入2);scanf(%d,&h);if(h=1)printf(tttpersons num:); /*交互式输入*/scanf(ttt%s,&studn+1.num);printf(tttpersons name:); scanf(ttt%s,&studn+1.name); printf(tttpersons address:); scanf(ttt%s,&studn+1.addr); printf(tttpersons phone:); scanf(ttt%s,&studn+1.phone); printf(tttpersons lei:); scanf(ttt%s,&studn+1.lei); printf(tttpersons birthday:); scanf(ttt%s,&studn+1.birthday); gets(x); else printf(ttt请输入要插入的位置:n); printf(ttt); scanf(ttt%d,&k); getchar(); for(i=n+1;ik;i-) strcpy(studi.num,studi-1.num); strcpy(,); strcpy(studi.addr,studi-1.addr); strcpy( studi.phone,studi-1.phone); strcpy( studi.lei,studi-1.lei); strcpy( studi.birthday,studi-1.birthday); printf(tttpersons num:); /*交互式输入*/ scanf(ttt%s,&studk.num); printf(tttpersons name:); scanf(ttt%s,&); printf(tttpersons address:); scanf(ttt%s,&studk.addr); printf(tttpersons phone:); scanf(ttt%s,&studk.phone);printf(tttpersons lei:); scanf(ttt%d,&studk.lei);printf(tttpersons birthday:); scanf(ttt%d,&studk.birthday); gets(x);printf(tttInsert Successed!n); /*返回成功信息*/return(n+1);int Delete_a_record_name(Student stud,int n) /*按姓名查找,删除一条记录*/ char s20; int i=1,j; printf(ttttell me his(her) name:); /*交互式问寻*/ scanf(%s,s); while(strcmp(,s)!=0&in+1) i+; /*查找判断*/ if(i=n+1) printf(tttnot find!n); /*返回失败信息*/ return(n); for(j=i;jn;j+) /*删除操作*/ strcpy(studj.num,studj+1.num); strcpy(,studj+1.name); strcpy(studj.addr,studj+1.addr); strcpy( studj.phone,studj+1.phone); strcpy( studj.lei,studj+1.lei); strcpy( studj.birthday,studj+1.birthday); printf(tttDelete Successed!n); /*返回成功信息*/ return(n-1);int Delete_a_record_num(Student stud,int n) /*按编号查找,删除一条记录*/ char s20; int i=1,j;printf(ttttell me his(her) num:); /*交互式问寻*/ scanf(%s,s); while(strcmp(studi.num,s)!=0&in+1) i+; /*查找判断*/ if(i=n+1) printf(tttnot find!n); /*返回失败信息*/ return(n); for(j=i;jn;j+) /*删除操作*/ strcpy(studj.num,studj+1.num); strcpy(,studj+1.name); strcpy(studj.addr,studj+1.addr); strcpy( studj.phone,studj+1.phone); strcpy( studj.lei,studj+1.lei); strcpy( studj.birthday,studj+1.birthday); printf(tttDelete Successed!n); /*返回成功信息*/ return(n-1);int Delete_a_record(Student stud,int n) int k,h;printf(ttt按姓名删除请输入1,按编号删除请输入2n);printf(ttt);scanf(%d,&h);getchar();if(h=1) k=Delete_a_record_name(stu,n);else k=Delete_a_record_num(stu,n);return k;int Find_num(Student stud,int n) /*按编号查找并显示一个记录*/ char s20; int i=1; printf(tttinput his(her) num:); /*交互式输入*/ scanf(ttt%s,s); while(strcmp(studi.num,s)!=0&in) printf(tttnot find!n); /*输入失败信息*/ return 0; printf(ttthis(her) number:%sn,studi.num); /*输出该人的信息*/ printf(ttthis(her) name:%sn,); printf(ttthis(her) address:%sn,studi.addr); printf(ttthis(her) phone:%sn,studi.phone); printf(ttthis(her) lei:%sn,studi.lei); printf(ttthis(her) birthday:%sn,studi.birthday); return i;int Find_name(Student stud,int n) /*按姓名查找并显示一个记录*/ char s20; int i=1; printf(tttinput his(her) name:); /*交互式输入*/ scanf(ttt%s,s); while(strcmp(,s)!=0&in) printf(tttnot find!n); /*输入失败信息*/ return 0; printf(ttthis(her) number:%sn,studi.num); printf(ttthis(her) name:%sn,); printf(ttthis(her) address:%sn,studi.addr); /*输出该人的信息*/ printf(ttthis(her) phone:%sn,studi.phone); printf(ttthis(her) lei:%sn,studi.lei); printf(ttthis(her) birthday:%dn,studi.birthday); return i;int Find_phone(Student stud,int n) /*按电话号码查找并显示一个记录*/ char s20; int i=1; printf(tttinput his(her) phone:); /*交互式输入*/ scanf(ttt%s,s); while(strcmp(studi.phone,s)!=0&in) printf(tttnot find!n); /*输入失败信息*/ return 0; printf(ttthis(her) number:%sn,studi.num); printf(ttthis(her) name:%sn,); printf(ttthis(her) address:%sn,studi.addr); /*输出该人的信息*/ printf(ttthis(her) phone:%sn,studi.phone); printf(ttthis(her) lei:%sn,studi.lei); printf(ttthis(her) birthday:%dn,studi.birthday); return i;void Find(Student stud,int n) int h,k; printf(ttt按姓名查找请输入1,按编号查找请输入2,按电话号码查找请输入3n);printf(ttt);scanf(%d,&h);getchar();if(h=1) k= Find_name(stu,n); if(h=2) k= Find_num(stu,n); if(h=3) k=Find_phone(stu,n);int AddfromText(Student stud,int n) /*从文件中读入数据*/ int i=1,count; FILE *fp; /*定义文件指针*/ char filename20; /*定义文件名*/ printf(tttInput the filename:); scanf(ttt%s,filename); /*输入文件名*/ if(fp=fopen(filename,rb)=NULL) /*打开文件*/ printf(tttcannt open the filen); /*打开失败信息*/ printf(ttt); system(pause); return(n); fscanf(fp,%d,&count); /*读入总记录量*/ while(i=count) /*循环读入数据*/ fscanf(fp,%s%s%s%s%s%s,studn+i.num,studn+,studn+i.addr,studn+i.phone,studn+i.lei,studn+i.birthday); i+; n+=count; fclose(fp); /*关闭文件*/ printf(tttSuccessed!n); printf(ttt); system(pause); return(n);void WritetoText(Student stud,int n) /将所有记录写入文件int i=1;FILE *fp; /*定义文件指针*/char filename20; /*定义文件名*/ printf(tttWrite Records to a Text Filen); /*输入文件名*/ printf(tttInput the filename:); scanf(ttt%s,filename); if(fp=fopen(filename,w)=NULL) /*打开文件*/ printf(tttcannt open the filen); system(pause); return; fprintf(fp,%dn,n); /*循环写入数据*/ while(i=n) fprintf(fp,t%-8s%-18s%-18s%-15s%-8s%-8sn,studi.num,,studi.addr,studi.phone,studi.lei,studi.birthday); i+; fclose(fp); /*关闭文件*/ printf(tttSuccessed!n); /*返回成功信息*/void Deep(Student stud,int n) int h=0,i; i=1; while(i=n) h+; i*=2; printf(ttt该树的深度为%dn,h); system(pause);void Sort_by_num(Student stud,int n) /*按编号排序*/ int i,j; char t10; for(i=1;in;i+) /*冒泡法排序*/ for(j=1;j0) strcpy(t,studj+1.num); strcpy(studj+1.num,studj.num); strcpy(studj.num,t); strcpy(t,studj+1.name); strcpy(studj+1.name,); strcpy(,t); strcpy(t,studj+1.addr); strcpy(studj+1.addr,studj.addr); strcpy(studj.addr,t); strcpy(t,studj+1.phone); strcpy(studj+1.phone,studj.phone); strcpy(studj.phone,t); strcpy(t,studj+1.lei); strcpy(studj+1.lei,studj.lei); strcpy(studj.lei,t); strcpy(t,studj+1.birthday); strcpy(studj+1.birthday,studj.birthday); strcpy(studj.birthday,t); printf(ttt按编号排序成功!n); system(pause);void Sort_by_birthday(Student stud,int n) /*按生日排序*/ int i,j; char t10; for(i=1;in;i+) /*冒泡法排序*/ for(j=1;jstudj+1.birthday) strcpy(t,studj+1.num); strcpy(studj+1.num,studj.num); strcpy(studj.num,t); strcpy(t,studj+1.name); strcpy(studj+1.name,); strcpy(,t); strcpy(t,studj+1.addr); strcpy(studj+1.addr,studj.addr); strcpy(studj.addr,t); strcpy(t,studj+1.phone); strcpy(studj+1.phone,studj.phone); strcpy(studj.phone,t); strcpy(t,studj+1.lei); strcpy(studj+1.lei,studj.lei); strcpy(studj.lei,t); strcpy(t,studj+1.birthday); strcpy(studj+1.birthday,studj.birthday); strcpy(studj.birthday,t); printf(ttt按生日排序成功!n); system(pause);void Sort(Student stud,int n) int h; printf(ttt按编号排序请输入1,按生日排序请输入2n); scanf(ttt%d,&h); if(h=1) Sort_by_num(stu,n); if(h=2) Sort_by_birthday(stu,n);void Correct(Student stud,int n) int k,h,j; printf(ttt按姓名修改选择1,按编号修改选择2n); printf(ttt);scanf(%d,&h);getchar();if(h=1) k=Find_name(stu,n); printf(ttt修改编号请输入1n); printf(ttt修改姓名请输入2n); printf(ttt修改地址请输入3n); printf(ttt修改电话请输入4n); printf(ttt修改关系请输入5n); printf(ttt修改生日请输入6n); printf(ttt);scanf(%d,&j);getchar(); switch(j)case 1:printf(tt请输入修改之后的编号:); scanf(%s,studk.num); break;case 2:printf(tt请输入修改之后的姓名:); scanf(%s,); break;case 3:printf(tt请输入修改之后的地址:); scanf(%s,studk.addr); break;case 4:printf(tt请输入修改之后的电话:); scanf(%s,studk.phone); break;case 5:printf(tt请输入修改之后的关系类型:); scanf(%s,studk.lei); break;case 6:printf(tt请输入修改之后的生日:); scanf(%s,studk.birthday);if(h=2) k=Find_num(stu,n); printf(ttt修改编号请输入1n); printf(ttt修改姓名请输入2n); printf(ttt修改地址请输入3n); printf(ttt修改电话请输入4n); printf(ttt修改请输关系入5n); printf(ttt修改生日请输入6n); printf(ttt);scanf(%d,&j);getchar(); switch(j)case 1:printf(tt请输入修改之后的编号:); scanf(%s,studk.nu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论