海南大学数据结构课程设计报告.doc
- 文档编号:2132231
- 上传时间:2023-05-02
- 格式:DOC
- 页数:24
- 大小:349KB
海南大学数据结构课程设计报告.doc
《海南大学数据结构课程设计报告.doc》由会员分享,可在线阅读,更多相关《海南大学数据结构课程设计报告.doc(24页珍藏版)》请在冰点文库上搜索。
数据结构课程设计报告
\
课题名称:
个人通讯录管理系统的设计
班级:
11级电子信息工程2班
时间:
2014年1月7日
指导老师:
目录
一.需求分析
1.1开发背景……………………………………………..........2
1.2项目目标……………………………………………..........2
1.3运行环境……………………………………………..........2
1.4项目任务书…………………………………………..........2
二.技术路线
2.1总体设计…………………………………………………..3
2.2源代码及分析……………………………………..............4
三.测试分析…………………………………………………….....18
四.问题及解决方案.........................................................................22
五.心得体会.....................................................................................22
六.参考文献.....................................................................................24
一、需求分析
1.1开发背景
在这个科技飞速发展的信息时代,通讯录在人们的日常生活及工作中发挥越来越大的作用,但是其中包含的庞大信息令人头疼,很难处理,根据这一需求,我组开发了一个个人通讯录管理系统,旨在于解决通讯录庞大数据的存储问题,帮助人们减少通讯录数据的丢失所带来的损失,便于对通讯录进行添加、删除、修改等基本操作。
1.2项目目标
本项目的目标是帮助人们处理在通讯录管理上各种棘手问题,便于人们快捷高速地与联系人建立良好的社会人脉关系。
本项目将实现的功能主要有:
1、存储通讯录
2、通讯记录管理系统(添加、删除、修改通讯录)
3、查找记录系统
4、将通讯录存储到磁盘
5、处理磁盘中的通讯录
6、通讯录联系人排序
7、按关系显示通讯录
8、人机工作界面友好
1.3运行环境
Windows2000及以上以上版本均可运行,硬件要求较低,一般的个人电脑配置已经足够调试需安装VisualC++6.0或相关软件。
1.4项目任务书。
在Vc++6.0中用C语言编写一个可以对通讯录进行管理的系统,以实现上述所期望的8种功能功能:
1、存储通讯录:
管理人可以通过键盘输入将通讯录写入CPU内存中并存储,可以对其进行各种基本操作;
2、通讯记录管理系统:
管理人可通过键盘操作对已将建立好的通讯录进行添加、删除、修改等操作使通讯录更完善。
3、查找记录系统:
管理人可以通过联系人的姓名、电话、编号等基本信息查找目的联系人。
4、磁盘存储通讯录:
管理人可通过键盘操作将存储在CPU内存中的联系人信息保存至磁盘中方便下次进行各种操作,也便于查看显示。
5、处理磁盘中的通讯录:
管理人可通过键盘操作将存储在磁盘中的通讯录读入CPU内存,便于管理。
6、通讯录联系人排序:
管理人可通过键盘操作对通讯录中的联系人进行按生日或编号排序,编号可以根据与此联系人的联系频度、认识时间长短、创建次序等原则自行定义,因此编号排序可用于说明该联系人与管理人的关系深度,而按生日排序可以使管理人更好的了解联系人的出生日期。
7、按关系显示通讯录:
管理人可通过键盘操作显示对特定关系的联系人的所有信息,便于查看及联系。
8、人机工作界面友好:
具有较高的稳定性和可用性,使操作输出的信息准确无误,操作简单便捷,并且在内存方面要考虑全面到位,尽量能处理各种突发情况。
二、技术路线
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
#include
typedefstruct/*定义结构体数组*/
{charnum[8];/*编号*/
charname[18];/*姓名*/
charaddr[18];/*地址*/
charphone[15];/*电话号码*/
charlei[8];//关系lei为1:
家人,2:
朋友和同学,3:
同事,4:
重要工作合作伙伴5:
陌生人
charbirthday[9];/*生日*/
}Student;
Studentstu[100];/*结构体数组变量*/
intmenu_select()/*菜单函数*/
{
intc;
do{
//system("cls");/*运行前清屏*/
system("colorf0");//系统命令,屏幕白底黑字
printf("\t\t**************个人通讯录管理系统*************\n");
printf("\t\t|1.InputRecords\n");
printf("\t\t|2.DisplayAllRecords\n");
printf("\t\t|3.InsertaRecord\n");
printf("\t\t|4.DeleteaRecord\n");
printf("\t\t|5.Find\n");
printf("\t\t|6.ReadrecordsfromaTextFile\n");
printf("\t\t|7.WritetoaTextfile\n");
printf("\t\t|8.Sort\n");
printf("\t\t|9.Bitree,sdeepth\n");
printf("\t\t|10Correctarecord\n");
printf("\t\t|11Relative\n");
printf("\t\t|0.Quit\n");
printf("\t\t********************************************\n");
printf("\t\t\tGiveyourChoice(0-11):
");
scanf("%d",&c);/*读入选择*/
}while(c<0||c>11);
return(c);/*返回选择*/
}
intInput(Studentstud[],intn)/*输入若干条记录*/
{
inti=1;
charsign,x[10];/*x[10]为清除多余的数据所用*/
while(sign!
='n'&&sign!
='N')/*判断*/
{
printf("\t\t\tperson'snum:
");/*交互输入*/
scanf("\t\t\t%s",&stud[n+i].num);
printf("\t\t\tperson'sname:
");
scanf("\t\t\t%s",&stud[n+i].name);
printf("\t\t\tperson'saddress:
");
scanf("\t\t\t%s",&stud[n+i].addr);
printf("\t\t\tperson'sphone:
");
scanf("\t\t\t%s",&stud[n+i].phone);
printf("\t\t\tperson'slei:
");
scanf("\t\t\t%s",&stud[n+i].lei);
printf("\t\t\tperson'sbirthday(forexample:
19950607):
");
scanf("\t\t\t%s",&stud[n+i].birthday);
gets(x);/*清除多余的输入*/
printf("\t\t\tanymorerecords?
(Y/N)");
scanf("\t\t\t%c",&sign);/*输入判断*/
i++;
}
printf("\t\t\t共有%d个联系人\n",n+i-1);
return(n+i-1);
}
voidLEVER_Display(Studentstud[],intn)/*显示所有记录*/
{
inti;
printf("---------------------------------------------------------------------------\n");/*格式头*/
printf("numnameaddressphoneleibirthday\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"); } intInsert_a_record(Studentstud[],intn)/*插入一条记录*/ { inti,k,h; charx[10];/*清除多余输入所用*/ printf("\t\t插到末尾请输入1,插到其他位置请输入2"); scanf("%d",&h); if(h==1) { printf("\t\t\tperson'snum: ");/*交互式输入*/ scanf("\t\t\t%s",&stud[n+1].num); printf("\t\t\tperson'sname: "); scanf("\t\t\t%s",&stud[n+1].name); printf("\t\t\tperson'saddress: "); scanf("\t\t\t%s",&stud[n+1].addr); printf("\t\t\tperson'sphone: "); scanf("\t\t\t%s",&stud[n+1].phone); printf("\t\t\tperson'slei: "); scanf("\t\t\t%s",&stud[n+1].lei); printf("\t\t\tperson'sbirthday: "); scanf("\t\t\t%s",&stud[n+1].birthday); gets(x); } else { printf("\t\t\t请输入要插入的位置: \n"); printf("\t\t\t"); 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'snum: ");/*交互式输入*/ scanf("\t\t\t%s",&stud[k].num); printf("\t\t\tperson'sname: "); scanf("\t\t\t%s",&stud[k].name); printf("\t\t\tperson'saddress: "); scanf("\t\t\t%s",&stud[k].addr); printf("\t\t\tperson'sphone: "); scanf("\t\t\t%s",&stud[k].phone); printf("\t\t\tperson'slei: "); scanf("\t\t\t%d",&stud[k].lei); printf("\t\t\tperson'sbirthday: "); scanf("\t\t\t%d",&stud[k].birthday); gets(x); } printf("\t\t\tInsertSuccessed! \n");/*返回成功信息*/ return(n+1); } intDelete_a_record_name(Studentstud[],intn)/*按姓名查找,删除一条记录*/ { chars[20]; inti=1,j; printf("\t\t\ttellmehis(her)name: ");/*交互式问寻*/ scanf("%s",s); while(strcmp(stud[i].name,s)! =0&&i if(i==n+1) { printf("\t\t\tnotfind! \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\tDeleteSuccessed! \n");/*返回成功信息*/ return(n-1); } intDelete_a_record_num(Studentstud[],intn)/*按编号查找,删除一条记录*/ { chars[20]; inti=1,j; printf("\t\t\ttellmehis(her)num: ");/*交互式问寻*/ scanf("%s",s); while(strcmp(stud[i].num,s)! =0&&i if(i==n+1) { printf("\t\t\tnotfind! \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\tDeleteSuccessed! \n");/*返回成功信息*/ return(n-1); } intDelete_a_record(Studentstud[],intn) { intk,h; printf("\t\t\t按姓名删除请输入1,按编号删除请输入2\n"); 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); returnk; } intFind_num(Studentstud[],intn)/*按编号查找并显示一个记录*/ {chars[20]; inti=1; printf("\t\t\tinputhis(her)num: ");/*交互式输入*/ scanf("\t\t\t%s",s); while(strcmp(stud[i].num,s)! =0&&i<=n)i++;/*查找判断*/ if(i>n) {printf("\t\t\tnotfind! \n");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 海南 大学 数据结构 课程设计 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)