编程 通讯录.docx

上传人:b****5 文档编号:2799230 上传时间:2022-11-15 格式:DOCX 页数:12 大小:110.93KB
下载 相关 举报
编程 通讯录.docx_第1页
第1页 / 共12页
编程 通讯录.docx_第2页
第2页 / 共12页
编程 通讯录.docx_第3页
第3页 / 共12页
编程 通讯录.docx_第4页
第4页 / 共12页
编程 通讯录.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

编程 通讯录.docx

《编程 通讯录.docx》由会员分享,可在线阅读,更多相关《编程 通讯录.docx(12页珍藏版)》请在冰豆网上搜索。

编程 通讯录.docx

编程通讯录

北京邮电大学课程设计报告

班内序号:

联系方式:

邮箱:

1025437263@

课程设计

名称

简单的数据库管理(通讯录系统)

学院

信息与通信工程学院

指导教师

学生姓名

班级

学号

简要介绍课程设计的主要内容,包括课程设计教学目的、基本内容、实验方法和团队分工等

本实验主要是设计出一个带有好界面的通讯录系统,包括各人员的姓名、电话、住址、邮编等信息,浏览这些信息,也可以插入、添加及删除某个人员的信息。

通过MFC来实现界面的编辑和美化。

具体实现的方法:

在MFC应用工程中建立基本对话框,并根据需要添加按键及对话框,在命名的同时,系统在.cpp中自动生成与该按键或对话框相对应的C语言的按键函数程序框架。

通过数据结构,链表,类等语言手段对来对完成函数程序,实现数据库的管理,通过文件的读写来实现信息的输入,输出,修改,添加和删除,使其达到与在MFC工程下建立的各按钮的响应一致的效果。

从而完成整个通讯录的程序设计。

学生

课程设计

报告

(附页)

遵照实践教学大纲并根据以下四方面综合评定成绩:

1、课程设计目的任务明确,选题符合教学要求,份量及难易程度

2、团队分工是否恰当与合理

3、综合运用所学知识,提高分析问题、解决问题及实践动手能力的效果

4、是否认真、独立完成属于自己的课程设计内容,课程设计报告是否思路清晰、文字通顺、书写规范

评语:

 

成绩:

指导教师签名:

年月日

设计报告

需求分析:

设计一个通讯录建立一个通讯录系统,系统中保存着各人员的姓名、电话、住址、邮编等信息,通过该系统的界面可以浏览这些信息,也可以插入、添加及删除某个人员的信息。

总体设计:

一,界面设计:

首先建一个MFC工程,设计好一个通讯录的总体图形框架,设计好版权界面。

将每个按钮的Functionname改为对应功能的名字,便于以后对程序的阅读,此外通过ClassWizard设置7个编辑框,赋予Cstring型的变量。

再设计一个“基本信息”图形框架,用于添加和插入。

再接着定义好要用到的全局变量和函数并初始化全局变量,最后定义好每个按钮的具体功能,一个简易的通讯录就大功告成了。

界面如下图所示:

插入的界面:

二,总体设计部分

将数据存储到文件中,程序在从文件里读取数据保存在结构体数组person中,再利用一个for循环将整个数组值依次赋给双链表变量book中。

定义结构体”Person”,包含的成员为通讯录里的基本信息,“charname[20]”“charphone[20]”“charaddress[50]”“charpostcode[10]”。

定义结构体“Card”,代表双向链表里的每一个结点,包含“structPersonper”,“structCard*prey”——向前指针,“structCard*next”——向后指针。

定义结构体“Book”,代表双项链表,包含“intCount”——结点数

“structCard*head”——头指针“structCard*last”——尾指针

“structCard*curcard”——当前指针

之后再结合指针等C语言类型对Book链表变量进行插入,删除,修改等操作。

主要有以下几个模块:

一,基本信息模块

包含六个编辑框,用于显示通讯录所存信息,并显示当前项和总项数。

为了是显示更为美观和人文化,在显示框的下面显示操作所选中的信息位于总的信息中的第几条及总项数。

二,操作模块

1,OnButtonShow(),显示函数,即对应界面“显示”按键。

创建双向链表,并读取文件”addrlist.txt”中存储的数据,通过数组,依次赋在双向链表,再显示在编辑框中。

2,OnButtonInsert(),插入函数,即对应界面“插入”按键。

弹出“插入对话框”,在弹出的对话框中输入所要添加的信息。

将链表中新输入的值在编辑框中显示出来。

插入对话框“InsertDlg”中

CInsertDlg:

:

OnOK(),即对应界面“确定”按键,确定插入信息。

创建新结点,把新结点插入在当前结点的后面。

CInsertDlg:

:

OnCancel(),即对应界面“取消”按键,退出。

3,OnBAddRecord(),添加函数,即对应界面中“添加”按键。

在弹出的对话框中输入要添加的函数,通过点击“确定”按键将输入的信息添加到定义的双链表最后的位置,从而“基本信息”中读出这些信息。

4,OnBDeleteRecord(),删除函数,即对应界面中的“删除”按键。

点击“删除”按键删除当前结点,从双链表中删除所选中的信息。

全部删除之后,出现messagebox“列表为空”。

“基本信息”内,不再显示该条信息。

5,OnBSaveRecord(),保存函数,即对应界面中的“保存”按键。

将“添加”“插入”“删除”“修改”等操作所形成的新的信息读入到文件中去,保存下来。

使得以上的操作生效。

6,OnSearch(),查找函数,即对应界面中的“查找”按键。

在“姓名”编辑框中输入所需要查询的联系人的姓名,通过指针查找到双链表中与之相同的姓名,然后将这个姓名所在的结构体元素全部在编辑框中输出。

7,OnMOdify(),修改函数,即对应界面中的“修改”按键。

这项功能是查找到当前结点,在编辑框中出入新的信息,点击“修改”按键产生相应,使新的信息插入双链表中,覆盖原来信息位置

8,OnBFirstPage(),OnBPrevPage(),OnBNextPage(),OnBLastPage(),即“第一页”,“前一页”,“后一页”,“最后一页”函数,分别对应界面相应的按键,在信息较多的时候信息按页显示,以上按键分别可以实现显示第一页,回到前一页,向后翻页,回到最后一页的功能。

9,OnCancel(),退出函数,即对应界面中的“退出”按键。

三,各模块的详细设计及代码:

一,显示模块

1、OnInitDialog(),初始化函数。

对显示框的表头进行初始化使得显示更清晰。

对应联系人的信息内容应包含“姓名”“电话”“地址”和“邮编”四列。

在显示的时候相应的信息显示在相应的列下面。

二,操作模块

1,OnButtonShow(),显示函数

创建链表。

先读取文件,利用一个for循环逐条地把文件里的信息赋在数组中。

先创立头结点,利用for循环移动指针,创建链表,并将数组中的信息赋在链表中。

要逐条的显示双链表中所储存的信息,最好的选择莫过于用指针了。

首先将双链表的首元素的地址赋予指针,然后在将首元素的内容读出,再将第二个元素的地址赋予指针……使得指针所指向的元素地址逐渐下移,达到将各个元素逐个读出的目的。

部分源程序代码及相关注解如下:

双向链表的建立:

tempcard->next=newnode;//

newnode->prey=tempcard;

newnode->next=book.head;

book.head->prey=newnode;

book.last=newnode;//新结点指定为链表的表尾

tempcard=tempcard->next;//当前指针指向下一个

链表不为空时的显示:

if(book.head!

=NULL)

{

num=1;//将代码运行结果赋给对话框内的编辑框

m_name=book.head->per.name;

m_phone=book.head->per.phone;

m_address=book.head->per.address;

m_postcode=book.head->per.postcode;

m_number=1;

m_total=book.Count;

UpdateData(false);

book.curcard=book.head;

}

2,OnButtonAdd(),添加函数

将当前指针指向链表末尾,再调用“InsertDlg”,将信息添加到链表末尾

OnBInsertRecord(),插入函数

CinsertDlg中

OnOK(),确定函数

在编辑框中输入要插入的信息,自动生成了结构体元素。

创建新结点,将要插入的信息赋给新结点中的person结构体。

通过全局变量Book,用book.curcard指针指向添加的位置,读出链表信息。

当插入位置分别为头结点,尾结点和中间结点时,分别进行。

流程图如下:

具体程序源代码及注解如下:

if(book.head==NULL)//当链表为空时,插入节点即为头结点

{

newnode->next=newnode;

newnode->prey=newnode;

book.last=newnode;

book.head=newnode;

book.Count=1;

book.curcard=book.head;当前指针指向头指针

}

if(book.curcard==book.last)//当插入节点为尾结点时,新结点的下一结点即为头结点

{

book.last->next=newnode;

newnode->prey=book.last;

newnode->next=book.head;

book.head->prey=newnode;

book.last=newnode;

book.curcard=book.curcard->next;当前指针向后移一位

}

else{插入在中间

book.curcard->next->prey=newnode;

newnode->prey=book.curcard;

newnode->next=book.curcard->next;

book.curcard->next=newnode;

book.curcard=book.curcard->next;

}

book.Count++;总结点数增加

3,OnBDeleteRecord(),删除函数

用book.curcard指针指向要删除的位置,直接将被删除结点两侧的结点的前指针和后指针改一下就行。

流程图如下:

具体源程序及注解如下:

if(book.Count==0)MessageBox("列表为空!

");

elseif(book.Count==1)元素只剩一个的时候

{

free(book.head);所有的值都赋NULL

book.head=NULL;book.curcard=NULL;book.last=NULL;book.Count=0;

UpdateData();

m_name=m_phone=m_address=m_postcode="";m_number=m_total=0;

UpdateData(false);

}

else

{

Card*q;

q=book.curcard;

if(q==book.head)//删除第一个

{

book.head=q->next;

book.head->prey=book.last;

book.last->next=book.head;

book.curcard=book.head;

}

elseif(q==book.last)//删除最后一个

{

book.last=q->prey;

book.head->prey=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1