海南大学数据结构课程设计报告汇编_第1页
海南大学数据结构课程设计报告汇编_第2页
海南大学数据结构课程设计报告汇编_第3页
海南大学数据结构课程设计报告汇编_第4页
海南大学数据结构课程设计报告汇编_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学习 好资料数据结构课程设计报告课题名称:个人通讯录管理系统的设计 班 级: 11 级电子信息工程 2 班 时 间: 2014 年 1 月 7 日 指导老师:更多精品文档学习 好资料目录一. 需求分析1.1开发背景 21.2项目目标 21.3 运行环境 21.4项目任务书 2二.技术路线2.1总体设计 .32.2 源代码及分析 4三 .测试分析 18 四 .问题及解决方案 22五 .心得体会 22六 .参考文献 24更多精品文档学习 好资料一、需求分析1.1 开发背景在这个科技飞速发展的信息时代, 通讯录在人们的日常生活及工作中发挥越 来越大的作用,但是其中包含的庞大信息令人头疼,很难处理,根

2、据这一需求, 我组开发了一个个人通讯录管理系统,旨在于解决通讯录庞大数据的存储问题, 帮助人们减少通讯录数据的丢失所带来的损失,便于对通讯录进行添加、删除、 修改等基本操作。1.2 项目目标本项目的目标是帮助人们处理在通讯录管理上各种棘手问题, 便于人们快捷 高速地与联系人建立良好的社会人脉关系。本项目将实现的功能主要有:1、存储通讯录2、通讯记录管理系统 (添加、删除、修改通讯录 )3、查找记录系统4、将通讯录存储到磁盘5、处理磁盘中的通讯录6、通讯录联系人排序7、按关系显示通讯录8、人机工作界面友好1.3 运行环境Windows2000及以上以上版本均可运行, 硬件要求较低, 一般的个人电

3、脑配置 已经足够调试需安装 Visual C+6.0 或相关软件。1.4 项目任务书。在 Vc+6.0 中用 C 语言编写一个可以对通讯录进行管理的系统,以实现上 述所期望的 8 种功能功能:1、存储通讯录:管理人可以通过键盘输入将通讯录写入 CPU 内存中并存储,可 以对其进行各种基本操作;2、通讯记录管理系统: 管理人可通过键盘操作对已将建立好的通讯录进行添加、 删除、修改等操作使通讯录更完善。3、查找记录系统:管理人可以通过联系人的姓名、电话、编号等基本信息查找 目的联系人。4、磁盘存储通讯录:管理人可通过键盘操作将存储在 CPU 内存中的联系人信息 保存至磁盘中方便下次进行各种操作,也

4、便于查看显示。5、处理磁盘中的通讯录:管理人可通过键盘操作将存储在磁盘中的通讯录读入 CPU 内存,便于管理。6、通讯录联系人排序:管理人可通过键盘操作对通讯录中的联系人进行按生日 或编号排序,编号可以根据与此联系人的联系频度、 认识时间长短、 创建次序等更多精品文档学习 好资料原则自行定义, 因此编号排序可用于说明该联系人与管理人的关系深度, 而按生 日排序可以使管理人更好的了解联系人的出生日期。7、按关系显示通讯录:管理人可通过键盘操作显示对特定关系的联系人的所有 信息,便于查看及联系。8、人机工作界面友好:具有较高的稳定性和可用性,使操作输出的信息准确无 误,操作简单便捷, 并且在内存方

5、面要考虑全面到位, 尽量能处理各种突发情况。二、技术路线2.1 总体设计 我组的设计思路:利用二叉树的静态数组存储方法存储通讯录中的联系人信 息,使用按层遍历可对存储的联系人信息进行各种基本操作。 以下是我们程序设 计的具体内容。1. 结构体的定义:定义二叉树中结点的数据域,其中包含联系人的姓名、编号、 电话、地址、生日及与管理人的关系(关系有家人、朋友和同学、同事、重要工 作合作伙伴)。2. 主函数内容:菜单选择,其中包括 12 个功能选择。3. Input 子函数:通过键盘输入数据建立通讯录的联系人信息并储存至 CPU 内存 中。4. LEVER_Display 子函数:显示储存在 CPU

6、内存中的通讯录联系人信息。5. Insert_a_record子函数:往通讯录中添加若干条新的记录。6. Delete_a_record子函数: 在已经建立好的通讯录中通过联系人的姓名, 编号以 及电话等信息查找到目的联系人后对其进行删除操作。7. Find子函数:在已经建立好的通讯录中通过联系人的姓名, 编号以及电话等信 息进行查找,因此该函数包含了三个查找的子函数。8. AddfromText子函数:将文件中存储的联系人信息添加到 CPU 内存中保存。9. WritetoText子函数:将 CPU 内存中存储的联系人信息添加到文件中保存。10. Sort子函数:对CPU 内存中存储的联系人

7、进行排序, 有按编号排序和按生日 排序两种,管理人可选择其中一种排序方法排序即可。11. Deep子函数:对 CPU 内存中已经建立好的二叉树(其中存储着联系人信息 ) 进行求深度操作。12. Correct子函数:对 CPU 内存中存储的联系人信息进行修改操作。13. Relative子函数:按联系人与管理人的特定关系查找到目的联系人并显示该联系人的相关 信息。整体框图如 下所示:更多精品文档学习 好资料2.2 源代码及分析#include /* 引用库函数 */ #include#include#includetypedef struct char num8;char name18;cha

8、r 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(t

9、t| 1.Input Recordsn);printf(tt| 2.Display All Recordsn);printf(tt| 3.Insert a Recordn);printf(tt| 4.Delete a Recordn);printf(tt| 5.Find n);printf(tt| 6.Read records from a Text Filen);printf(tt| 7.Write to a Text filen);printf(tt| 8.Sort n);printf(tt| 9.Bitree,s deepth n);printf(tt| 10 Correct a rec

10、ord n);printf(tt| 11Relative 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(tttperso

11、ns 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 exampl

12、e:19950607):);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);

13、printf(n);for(i=1;i1&i%10=0)/* 每十个暂停 */*格式 */printf(tn);printf(tt);system(pause);printf(tn); 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:); /* 交互式输入 */ sca

14、nf(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.birthda

15、y); 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,s

16、tudi-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(tttperso

17、ns birthday:);scanf(ttt%d,&studk.birthday);gets(x);printf(tttInsert Successed!n); /* 返回成功信息 */ return(n+1);int Delete_a_record_name(Students tud,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)/* 交互式问寻 */*查找判断

18、*/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(tttDelet

19、e 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+) /*删除

20、操作 */ 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,i

21、nt n)int k,h;printf(ttt 按姓名删除请输入 1,按编号删除请输入 2n); printf(ttt);scanf(%d,&h); getchar();if(h=1)k=Delete_a_record_name(stu,n);更多精品文档学习 好资料elsek=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

22、,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);p

23、rintf(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.n

24、um);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)/* 按电话号码查找并显示一个记录

25、*/ 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);/* 输出该人的信息*/print

26、f(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(

27、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);

28、 /* 打开失败信息 */ 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);

29、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);

30、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(t

31、tt 该树的深度为 %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.add

32、r);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);

33、更多精品文档学习 好资料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,studj.na

34、me); 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(s

35、tudj+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);更多精品文档学习 好资料1,按编号修改选择 2n);1n);2n);3n);4n);5n);6n);void Corr

36、ect(Student stud,int n) int k,h,j;printf(ttt 按姓名修改选择 printf(ttt); scanf(%d,&h);getchar();if(h=1)k=Find_name(stu,n);printf(ttt 修改编号请输入 printf(ttt 修改姓名请输入 printf(ttt 修改地址请输入 printf(ttt 修改电话请输入 printf(ttt 修改关系请输入 printf(ttt 修改生日请输入 printf(ttt);scanf(%d,&j);getchar();switch(j)case 1:printf(tt 请输入修改之后的编号

37、 :); 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 请输入修改之后的生日 :);

38、 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.num); br

39、eak;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);

40、void Relative(Student stud,int n) /显示特定关系的人 1:家人, 2:朋友和同学, 3:同事 ,4:重要工作合作伙伴 5:陌生人int i,k=0;char x,c2;printf(ttt 显示家人请输入 1n);printf(ttt 显示朋友和同学请输入 2n);printf(ttt 显示同事请输入 3n);printf(ttt 显示重要工作合作伙伴请输入 4n );printf(ttt 显示陌生人请输入 5n);printf(ttt);scanf(%s,c);x=getchar();更多精品文档学习 好资料printf(n);/*格式头 */printf(

41、 num name address phone lei birthdayn);printf(n);for(i=1;i1&i%10=0)/* 每十个暂停 */ printf(n); /*格式*/ printf(tt); system(pause); printf(n); printf(tt); printf(ttt 共有%d 个此类联系人 n,k); system(pause);void main()/*主函数 */int n=0;for(;) switch(menu_select()/* 选择判断 */ case 1:printf(tttInput Recordsn);/* 输入若干条记录 *

42、/n=Input(stu,n);break;case 2:printf(tttDisplay All Recordsn);/* 显示所有记录 */LEVER_Display(stu,n);break; case 3: printf(tttInsert a Recordn);更多精品文档学习 好资料n=Insert_a_record(stu,n);/* 插入一条记录 */printf(ttt);system(pause); break;case 4: printf(tttDelete a Recordn); n=Delete_a_record(stu,n); /* 按姓名查找,删除一条记录 */

43、 printf(ttt); system(pause);break;case 5: printf(tttFindn); Find(stu,n); /*查找并显示一个记录 */ printf(ttt); system(pause); break;case 6: printf(tttAdd Records from a Text Filen); n=AddfromText(stu,n); /* 输出统计信息 */ break;case 7:printf(tttWrite to a Text filen);WritetoText(stu,n); /* 循环写入数据 */ printf(ttt);system(pause);break;/* 排序*/* 求二叉树的深度 */* 修改*/* 按特定关系显示 */Luck,Bye-bye!n); /* 结束程序 */case 8: Sort(stu,n); break;case 9: Deep(stu,n); break;case 10: Correct(stu,n); break;case 11: R

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论