通讯录实训实验报告.docx
《通讯录实训实验报告.docx》由会员分享,可在线阅读,更多相关《通讯录实训实验报告.docx(25页珍藏版)》请在冰点文库上搜索。
通讯录实训实验报告
实训报告
面向对象程序设计
题目:
通讯录
院系:
信息科技学院
专业:
计算机科学与技术
姓名:
***
学号:
****
指导教师:
******
日期:
2012年1月7日
桂林电子科技大学信息科技学院
1问题定义………………………………………………………………………………………4
2系统设计………………………………………………………………………………………4
2.1总体设计…………………………………………………………………………………4
2.2详细设计………………………………………………………………………………6
2.2.3输入记录模块……………………………………………………………………7
2.2.4查询记录模块………………………………………………………………………8
2.2.5更新记录模块………………………………………………………………………8
2.2.6统计记录模块………………………………………………………………………8
3系统实现…………………………………………………………………………………9
3.1编码………………………………………………………………………………………9
3.1.1程序预处理………………………………………………………………………9
3.1.2主函数main()………………………………………………………………9
3.1.3主菜单界面……………………………………………………………………9
3.1.4表格形式显示记录……………………………………………………………10
3.1.5记录查找定位……………………………………………………………………10
3.1.6格式化输入数据…………………………………………………………………10
3.1.7增加记录……………………………………………………………………10
3.1.8查询记录……………………………………………………………………10…
3.1.9删除学生记录……………………………………………………………………11
3.1.10修改记录………………………………………………………………………11
3.1.11插入记录………………………………………………………………………12
3.1.12统计记录……………………………………………………………….…12
3.1.13排序记录………………………………………………………………………13
3.1.14存储记录………………………………………………………………………13
3.1.15截图……………………………………………………….……………17
前言
课程设计环节是应用型本科院校非常重要的一个教学环节,是学完一门课后应用本课知识及以前的知识积累而进行的综合性、开放性的训练。
通过课程设计,不仅能够使学生得到系统的技能训练,巩固和加强所学得专业理论知识,而且能够培养学生工程意识、创新能力、团队精神等综合素质,培养学生的设计能力和解决实际问题的能力。
C语言由于其强大的功能,丰富的表达能力,高效的代码,良好的移植性和灵活性,自1972年问世以来,经久不衰,即使现在出现了面向对象的程序设计方法和开发工具,但它仍然是人们学习程序设计的首选语言,用它训练和提高编程技术,以及开发应用程序等。
我们通过《C语言程序设计》这门课程的学习,已经能编写解决小问题的程序,对程序的开发也有了初步的认识,还掌握了C语言的基本语法,这一过程确确实实令我们感到欣喜,有点计算机可以完成自我任务的成就感。
但是,对于程序设计而言,学习C的步伐不应该停留于此。
我们最终的目的应该是掌握开发大型综合程序的方法,即遵循软件工程的开发步骤和结构化程序设计思想,用C语言开发出解决复杂问题的大型综合程序。
可是对于多数学生来说,学习了C语言后,除了应付各种考试之外,别无它用,对TurboC语言丰富的函数知之甚少,加上DOS环境所限,因而对C语言兴趣不大,也感到C语言比较难以掌握。
本实训就是为了让学生在学完C语言后进一步了解C语言的知识,掌握C语言在软件开发方面的使用方法,希望通过此次实训,不仅能提高学生学习C语言的兴趣,更为今后学习其它专业知识及开发程序打下坚实的基础。
本指导书中有些内容借鉴了互联网上相关程序的设计思想,在此对相关者表示衷心的感谢。
由于时间、经验及水平的原因,不当、不足之处,请大家提出宝贵意见。
编者
通讯录系统
本题目设计目的是训练学生的基本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和单链表的各种基本操作。
本程序中涉及结构体、单链表、文件等方面的知识。
通过本程序的训练,使学生能对C语言的文件操作有一个更深刻的了解,掌握利用单链表存储结构实现对学生成绩管理的原理,为进一步开发出高质量的管理信息系统打下坚实的基础。
1、问题定义
创建一个通讯录管理系统。
假设系统中每个人录只包括姓名、电话号码,如下图所示,选择任意菜单后,实现相应功能。
在问题定义阶段要考虑题目的可行性和需求分析,接下来进入开发阶段,完成系统设计和系统实现的任务。
2、系统设计
2.1总体设计
采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。
需要注意的是划分出来的模块应该相对独立但又相关,且容易理解。
可以用模块化层次结构图(即模块图)来分析其任务的划分,一般从上到下进行,最上面一层是主模块,下面各层是其上一层模块的逐步细化描述。
本通讯录系统要求采用数组实现,它由如下五大功能模块组成:
●输入记录模块:
完成将数据存入文件的工作。
记录可以从以二进制形式存储的数据文件中读入,也可从键盘逐个输入学生记录。
学生记录由学生的基本信息和成绩信息字段构成。
当从数据文件中读入记录时,也就是把在以记录为单位存储的数据文件中,将记录逐条复制到数组中。
●查询记录模块:
逐一查找文件名对应文件,打开读数。
●更新记录模块:
打开相应文件,对其中数据更改。
●输出记录模块:
重文件中读出数据,转出存入数组中,再由数组输出。
2.2详细设计
2.2.1数据结构设计
●通讯录结构体
直接由外部文件分隔储存,进行文件建立,结合外部搜索完成基本结构。
2.2.2定义数组函数执行流程
//通讯录Dlg.h:
headerfile
//
#if!
defined(AFX_DLG_H__37C8ABEA_DB2A_4346_9B9E_B2B26BE0014A__INCLUDED_)
#defineAFX_DLG_H__37C8ABEA_DB2A_4346_9B9E_B2B26BE0014A__INCLUDED_
#if_MSC_VER>1000
#pragmaonce
#endif//_MSC_VER>1000
/////////////////////////////////////////////////////////////////////////////
//CMyDlgdialog
classCMyDlg:
publicCDialog
{
//Construction
public:
structstudent
{
CStringcsCode;//学号
CStringcsName;//姓名
}structStudent[20];
intnStudentNum;
intnAccordNum;
intnAccordItem[20];
intnumber;
CMyDlg(CWnd*pParent=NULL);//standardconstructor
//DialogData
//{{AFX_DATA(CMyDlg)
enum{IDD=IDD_MY_DIALOG};
CStringm_csCode;
CStringm_csName;
CStringm_csSearchCode;
CStringm_csSearchName;
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CMyDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
HICONm_hIcon;
//Generatedmessagemapfunctions
//{{AFX_MSG(CMyDlg)
virtualBOOLOnInitDialog();
afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);
afx_msgvoidOnPaint();
afx_msgHCURSOROnQueryDragIcon();
afx_msgvoidOnButton1();
afx_msgvoidOnButton2();
afx_msgvoidOnButton3();
afx_msgvoidOnButton4();
afx_msgvoidOnButton5();
virtualvoidOnOK();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
//MicrosoftVisualC++willinsertadditionaldeclarationsimmediatelybeforethepreviousline.
#endif//!
defined(AFX_DLG_H__37C8ABEA_DB2A_4346_9B9E_B2B26BE0014A__INCLUDED_)
public:
structstudent
{
CStringcsCode;//定义号码
CStringcsName;//定义姓名以结构体完成
}structStudent[10];
intnStudentNum;//定义数组的位置标记的,用于录入时移动数组
intnAccordNum;//查询时,用于找到数组位置
intnAccordItem[10];
intnumber;
将其都定义在主界面PUBLIC之中。
2.2.3输入记录模块
voidCMyDlg:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(TRUE);//刷新提取数据
structStudent[nStudentNum].csCode=m_csCode;//录入数据
structStudent[nStudentNum].csName=m_csName;
nStudentNum++;
m_csCode="";//将输入栏变空
m_csName="";
UpdateData(FALSE);//刷新录入数据
}
2.2.4查询记录模块
2.2.5BOOLbAccordCode=FALSE;//用于判断对错
2.2.6BOOLbAccordName=FALSE;
2.2.7CStringcsBuffer;
2.2.8nAccordNum=0;//附初值
2.2.9UpdateData(TRUE);
2.2.10for(inti=0;i2.2.11{
2.2.12if(m_csSearchCode==""||m_csSearchCode==structStudent[i].csCode)//判断是否符合,查询数据。
2.2.13{bAccordCode=TRUE;}
2.2.14else{bAccordCode=FALSE;}
2.2.15if(m_csSearchName==""||m_csSearchName==structStudent[i].csName)
2.2.16{bAccordName=TRUE;}
2.2.17else{bAccordName=FALSE;}
2.2.18if(bAccordCode==TRUE&&bAccordName==TRUE)
2.2.19{nAccordItem[nAccordNum]=i;nAccordNum++;}
2.2.20}
2.2.21if(nAccordNum>0)//确定存在时进行输出
2.2.22{m_csSearchCode=structStudent[nAccordItem[0]].csCode;
2.2.23m_csSearchName=structStudent[nAccordItem[0]].csName;
2.2.24UpdateData(FALSE);
2.2.25}
2.2.26}
2.2.27
2.2.28
2.2.29}更新记录模块
2.2.30voidCMyDlg:
:
OnButton3()
2.2.31{UpdateData(TRUE);
2.2.32//TODO:
Addyourcontrolnotificationhandlercodehere
2.2.33number=0;
2.2.34for(inti=0;i2.2.35{
2.2.36if(m_csSearchName==""||m_csSearchName==structStudent[i].csName)
2.2.37number=i;
2.2.38structStudent[number].csCode=m_csSearchCode;//重新赋值
2.2.39structStudent[number].csName=m_csSearchName;
2.2.40
2.2.41}
2.2.42m_csSearchCode="";
2.2.43m_csSearchName="";
2.2.44UpdateData(FALSE);
2.2.45函数功能描述
voidCMyDlg:
:
OnButton1()录入
voidCMyDlg:
:
OnButton2()查询
voidCMyDlg:
:
OnButton3()修改
voidCMyDlg:
:
OnButton4()删除
voidCMyDlg:
:
OnButton5()对话框转接
完成在上述系统设计后,即可着手进行系统实现的工作,开始程序代码的编写。
3、系统实现
3.1编码
classCMyDlg:
publicCDialog
{
//Construction
public:
structstudent
{
CStringcsCode;//定义号码
CStringcsName;//定义姓名以结构体完成
}structStudent[10];
intnStudentNum;//定义数组的位置标记的,用于录入时移动数组
intnAccordNum;//查询时,用于找到数组位置
intnAccordItem[10];
intnumber;
voidCMyDlg:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(TRUE);
structStudent[nStudentNum].csCode=m_csCode;
structStudent[nStudentNum].csName=m_csName;
nStudentNum++;
m_csCode="";
m_csName="";
UpdateData(FALSE);
}
voidCMyDlg:
:
OnButton2()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
BOOLbAccordCode=FALSE;
BOOLbAccordName=FALSE;
CStringcsBuffer;
nAccordNum=0;
UpdateData(TRUE);
for(inti=0;i{
if(m_csSearchCode==""||m_csSearchCode==structStudent[i].csCode)
{bAccordCode=TRUE;}
else{bAccordCode=FALSE;}
if(m_csSearchName==""||m_csSearchName==structStudent[i].csName)
{bAccordName=TRUE;}
else{bAccordName=FALSE;}
if(bAccordCode==TRUE&&bAccordName==TRUE)
{nAccordItem[nAccordNum]=i;nAccordNum++;}
}
csBuffer.Format("你查询的信息在左边显示,如过没有显示信息既则没此人记录。
",nAccordNum);
MessageBox(csBuffer,"Attention",MB_OK|MB_ICONINFORMATION);
if(nAccordNum>0)
{m_csSearchCode=structStudent[nAccordItem[0]].csCode;
m_csSearchName=structStudent[nAccordItem[0]].csName;
UpdateData(FALSE);
}
}
voidCMyDlg:
:
OnButton3()
{UpdateData(TRUE);
//TODO:
Addyourcontrolnotificationhandlercodehere
number=0;
for(inti=0;i{
if(m_csSearchName==""||m_csSearchName==structStudent[i].csName)
number=i;
structStudent[number].csCode=m_csSearchCode;
structStudent[number].csName=m_csSearchName;
}
m_csSearchCode="";
m_csSearchName="";
UpdateData(FALSE);
}
voidCMyDlg:
:
OnButton4()
{
UpdateData(TRUE);
//TODO:
Addyourcontrolnotificationhandlercodehere
number=0;
for(inti=0;i{
if(m_csSearchName==""||m_csSearchName==structStudent[i].csName)
number=i;
structStudent[number].csCode="";
structStudent[number].csName="";
}
m_csSearchCode="";
m_csSearchName="";
UpdateData(FALSE);
}
voidCMyDlg:
:
OnButton5()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
jja;
a.DoModal();
}
//通讯录Dlg.cpp:
implementationfile
//
#include"stdafx.h"
#include"通讯录.h"
#include"通讯录Dlg.h"
#include"jj.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CAboutDlgdialogusedforAppAbout
classCAboutDlg:
publicCDialog
{
public:
CAboutDlg();
//DialogData
//{{AFX_DATA(CAboutDlg)
enum{IDD=IDD_ABOUTBOX};
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg:
:
CAboutDlg():
CDialog(CAboutDlg:
:
IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
voidCAboutDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//Nomessagehandlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////