海南大学数据结构课程设计报告.docx
- 文档编号:25163054
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:56
- 大小:663.54KB
海南大学数据结构课程设计报告.docx
《海南大学数据结构课程设计报告.docx》由会员分享,可在线阅读,更多相关《海南大学数据结构课程设计报告.docx(56页珍藏版)》请在冰豆网上搜索。
海南大学数据结构课程设计报告
数据结构课程设计报告
\
课题名称:
个人通讯录管理系统的设计
班级:
11 级电子信息工程 2 班
时间:
2014 年 1 月 7 日
指导老师:
一.需求分析
1.1 开发背景…………………………………………….........2
1.2 项目目标…………………………………………….........2
1.3 运行环境…………………………………………….........2
1.4 项目任务书………………………………………….........2
二.技术路线
2.1 总体设计…………………………………………………..3
2.2 源代码及分析…………………………………….............4
3.测试分析…………………………………………………….....18
4.问题及解决方案........................................................................22
5.心得体会....................................................................................22
6.参考文献....................................................................................24
第 1 页 共 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、通讯录联系人排序:
管理人可通过键盘操作对通讯录中的联系人进行按生日
或编号排序,编号可以根据与此联系人的联系频度、认识时间长短、创建次序
第 2 页 共 24 页
等原则自行定义,因此编号排序可用于说明该联系人与管理人的关系深度,而
按生日排序可以使管理人更好的了解联系人的出生日期。
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
子函数:
按
联系人与管
理人的特定
关系查找到
目的联系人
并显示该联
系人的相关
信息。
整体框图如
下所示:
第 3 页 共 24 页
2.2 源代码及分析
#include
#include
#include
#include
typedef struct/*定义结构体数组*/
{char num[8];/*编号*/
char name[18];/*姓名*/
char addr[18];/*地址*/
char phone[15];/*电话号码*/
char lei[8];//关系 lei 为 1:
家人,2:
朋友和同学,3:
同事 ,4:
重要工
作合作伙伴5:
陌生人
char birthday[9];/*生日*/
}Student;
Student stu[100];/*结构体数组变量*/
int menu_select()/*菜单函数*/
{
int c;
do{
//system("cls");/*运行前清屏*/
system("color f0");//系统命令,屏幕白底黑字
printf("\t\t**************个人通讯录管理系统************* \n");
printf("\t\t| 1. Input Records\n");
printf("\t\t| 2. Display All Records\n");
printf("\t\t| 3. Insert a Record\n");
printf("\t\t| 4. Delete a Record\n");
printf("\t\t| 5. Find\n");
printf("\t\t| 6. Read records from a Text File\n");
printf("\t\t| 7. Write to a Text file\n");
printf("\t\t| 8. Sort\n");
printf("\t\t| 9. Bitree,s deepth\n");
第 4 页 共 24 页
printf("\t\t| 10 Correct a record\n");
printf("\t\t| 11 Relative\n");
printf("\t\t| 0. Quit\n");
printf("\t\t********************************************\n");
printf("\t\t\tGive your Choice(0-11):
");
scanf("%d",&c); /*读入选择*/
}while(c<0||c>11);
return(c); /*返回选择*/
}
int Input(Student stud[],int n) /*输入若干条记录*/
{
int i=1;
char sign,x[10];/*x[10]为清除多余的数据所用*/
while(sign!
='n'&&sign!
='N')/*判断*/
{
printf("\t\t\tperson's num:
");/*交互输入*/
scanf("\t\t\t%s",&stud[n+i].num);
printf("\t\t\tperson's name:
");
scanf("\t\t\t%s",&stud[n+i].name);
printf("\t\t\tperson's address:
");
scanf("\t\t\t%s",&stud[n+i].addr);
printf("\t\t\tperson's phone:
");
scanf("\t\t\t%s",&stud[n+i].phone);
printf("\t\t\tperson's lei:
");
scanf("\t\t\t%s",&stud[n+i].lei);
printf("\t\t\tperson's birthday(for example:
19950607):
");
scanf("\t\t\t%s",&stud[n+i].birthday);
gets(x);/*清除多余的输入*/
printf("\t\t\tany more records?
(Y/N)");
scanf("\t\t\t%c",&sign);/*输入判断*/
i++;
}
printf("\t\t\t 共有%d 个联系人\n",n+i-1);
return(n+i-1);
}
void LEVER_Display(Student stud[],int n)/*显示所有记录*/
{
int i;
printf("---------------------------------------------------------------------------\n");
/*格式头*/
printf("numnameaddressphone
第 5 页 共 24 页
leibirthday\n");
printf("---------------------------------------------------------------------------\n");
for(i=1;i { printf("%-8s%-18s%-18s%-15s%-8s%- 8s\n",stud[i].num,stud[i].name,stud[i].addr,stud[i].phone,stud[i].lei,stud[i].birthday); if(i>1&&i%10==0)/*每十个暂停*/ { printf("\t-----------------------------------------------------------------\n"); /*格式*/ printf("\t\t"); system("pause"); printf("\t-----------------------------------------------------------------\n"); } } printf("\t\t"); system("pause"); } int Insert_a_record(Student stud[],int n)/*插入一条记录*/ { int i,k,h; char x[10]; /*清除多余输入所用*/ printf("\t\t 插到末尾请输入 1,插到其他位置请输入 2"); scanf("%d",&h); if(h==1) { printf("\t\t\tperson's num: ");/*交互式输入*/ scanf("\t\t\t%s",&stud[n+1].num); printf("\t\t\tperson's name: "); scanf("\t\t\t%s",&stud[n+1].name); printf("\t\t\tperson's address: "); scanf("\t\t\t%s",&stud[n+1].addr); printf("\t\t\tperson's phone: "); scanf("\t\t\t%s",&stud[n+1].phone); printf("\t\t\tperson's lei: "); scanf("\t\t\t%s",&stud[n+1].lei); printf("\t\t\tperson's birthday: "); scanf("\t\t\t%s",&stud[n+1].birthday); gets(x); } else { printf("\t\t\t 请输入要插入的位置: \n"); printf("\t\t\t"); 第 6 页 共 24 页 scanf("\t\t\t%d",&k); getchar(); for(i=n+1;i>k;i--) { strcpy(stud[i].num,stud[i-1].num); strcpy(stud[i].name,stud[i-1].name); strcpy(stud[i].addr,stud[i-1].addr); strcpy( stud[i].phone,stud[i-1].phone); strcpy( stud[i].lei,stud[i-1].lei); strcpy( stud[i].birthday,stud[i-1].birthday); } printf("\t\t\tperson's num: ");/*交互式输入*/ scanf("\t\t\t%s",&stud[k].num); printf("\t\t\tperson's name: "); scanf("\t\t\t%s",&stud[k].name); printf("\t\t\tperson's address: "); scanf("\t\t\t%s",&stud[k].addr); printf("\t\t\tperson's phone: "); scanf("\t\t\t%s",&stud[k].phone); printf("\t\t\tperson's lei: "); scanf("\t\t\t%d",&stud[k].lei); printf("\t\t\tperson's birthday: "); scanf("\t\t\t%d",&stud[k].birthday); gets(x); } printf("\t\t\tInsert Successed! \n"); /*返回成功信息*/ return(n+1); } int Delete_a_record_name(Student stud[],int n)/*按姓名查找,删除一 条记录*/ { char s[20]; int i=1,j; printf("\t\t\ttell me his(her) name: ");/*交互式问寻*/ scanf("%s",s); while(strcmp(stud[i].name,s)! =0&&i if(i==n+1) { printf("\t\t\tnot find! \n");/*返回失败信息*/ return(n); 第 7 页 共 24 页 } for(j=i;j { strcpy(stud[j].num,stud[j+1].num); strcpy(stud[j].name,stud[j+1].name); strcpy(stud[j].addr,stud[j+1].addr); strcpy( stud[j].phone,stud[j+1].phone); strcpy( stud[j].lei,stud[j+1].lei); strcpy( stud[j].birthday,stud[j+1].birthday); } printf("\t\t\tDelete Successed! \n");/*返回成功信息*/ return(n-1); } int Delete_a_record_num(Student stud[],int n)/*按编号查找,删除一 条记录*/ { char s[20]; int i=1,j; printf("\t\t\ttell me his(her) num: ");/*交互式问寻*/ scanf("%s",s); while(strcmp(stud[i].num,s)! =0&&i if(i==n+1) { printf("\t\t\tnot find! \n");/*返回失败信息*/ return(n); } for(j=i;j { strcpy(stud[j].num,stud[j+1].num); strcpy(stud[j].name,stud[j+1].name); strcpy(stud[j].addr,stud[j+1].addr); strcpy( stud[j].phone,stud[j+1].phone); strcpy( stud[j].lei,stud[j+1].lei); strcpy( stud[j].birthday,stud[j+1].birthday); } printf("\t\t\tDelete Successed! \n");/*返回成功信息*/ return(n-1); } int Delete_a_record(Student stud[],int n) { int k,h; printf("\t\t\t 按姓名删除请输入 1,按编号删除请输入 2\n"); 第 8 页 共 24 页 printf("\t\t\t"); scanf("%d",&h); getchar(); if(h=1) k=Delete_a_record_name(stu,n); else k=Delete_a_record_num(stu,n); return k; } intFind_num(Student stud[],int n)/*按编号查找并显示一个记录*/ {char s[20]; int i=1; printf("\t\t\tinput his(her) num: ");/*交互式输入*/ scanf("\t\t\t%s",s); while(strcmp(stud[i].num,s)! =0&&i<=n) i++;/*查找判断*/ if(i>n) {printf("\t\t\tnot find! \n");/*输入失败信息*/ return 0; } printf("\t\t\this(her) number: %s\n",stud[i].num);/*输出该人的信息*/ printf("\t\t\this(her) name: %s\n",stud[i].name); printf("\t\t\this(her) address: %s\n",stud[i].addr); printf("\t\t\this(her) phone: %s\n",stud[i].phone); printf("\t\t\this(her) lei: %s\n",stud[i].lei); printf("\t\t\this(her) birthday: %s\n",stud[i].birthday); return i; } int Find_name(Student stud[],int n)/*按姓名查找并显示一个记录*/ {char s[20]; int i=1; printf("\t\t\tinput his(her) name: ");/*交互式输入*/ scanf("\t\t\t%s",s); while(strcmp(stud[i].name,s)! =0&&i<=n) i++;/*查找判断*/ if(i>n) {printf("\t\t\tnot find! \n");/*输入失败信息*/ return 0; } printf("\t\t\this(her) number: %s\n",stud[i].num); printf("\t\t\this(her) name: %s\n",stud[i].name); printf("\t\t\this(her) address: %s\n",stud[i].addr);/*输出该人的 第 9 页 共 24 页 信息*/ printf("\t\t\this(her) phone: %s\n",stud[i].phone); printf("\t\t\this(her) lei: %s\n",stud[i].lei); printf("\t\t\this(her) birthday: %d\n",stud[i].birthday); return i; } int Find_phone(Student stud[],int n)/*按电话号码查找并显示一个记录*/ {char s[20]; int i=1; printf("\t\t\tinput his(her) phone: ");/*交互式输入*/ scanf("\t\t\t%s",s); while(strcmp(stud[i].phone,s)! =0&&i<=n) i++;/*查找判断*/ if(i>n) {printf("\t\t\tnot find! \n");/*输入失败信息*/ return 0; } printf("\t\t\this(her) number: %s\n",stud[i].num); printf("\t\t\this(her) name: %s\n",stud[i].name); printf("\t\t\this(her) address: %s\n",stud[i].addr);/*输出该人的 信息*/ prin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 海南 大学 数据结构 课程设计 报告