您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > c语言简易电话簿实践报告
简易电话薄管理系统设计实践报告1摘要简易电话薄管理系统是以C语言为编程基础,用TC去实现的软件。它一共有四个记录模块,为输入记录模块;查询记录模块;更新记录模块;输出记录模块,和13个函数体,可以存储100条电话记录,每条电话记录可以输入序号;姓名;电话号码;住址四个项目。它可以显示;删除;查询;修改;排序;原有的电话记录,可以插入新的电话记录。2系统设计一设计目的1.进一步熟悉TC2.0的开发环境(也可以用VC6.0),掌握基本的编程方法,熟悉用C语言完成一个应用程序的设计过程,掌握有关编辑和调试程序的方法和技巧。2.主要掌握C语言中的结构体,指针及文件操作等内容。3.了解开发简单应用程序的全过程,包括:分析,设计,编程,调试和编写实验报告。二设计任务系统名称:简易电话簿管理系统的设计与实现。背景:随着科技的进步和信息产业的飞快发展,电话簿成为了现代生活中一个重要的工具。本电话簿管理系统利用计算机对通讯录进行统一的管理,包括添加,修改,查询记录等功能,实现通讯录管理工作的系统化,规范化和自动化,为人们的工作和生活提供便利。训练内容:本开发任务旨在训练学生的基本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和结构数组的各种基本操作。本设计中设计结构体,数组,文件等方面的知识。通过本程序的训练,是读者能对C语言的文件操作有一个更深刻的了解,掌握利用数组存储结构实现电话簿的管理,为进一步开发出高质量的信息管理系统打下坚实的基础。需求分析:如系统功能模块框图所示,电话簿管理系统主要利用数组来实现,其数组元素是结构体的类型,整个系统由如下几大功能模块组成。(1)输入记录模块输入记录模块主要完成将数据存入数组中的工作。在此电话簿管理系统中,记录可以从以文件形式存储的数据文件中读入,也可以从键盘逐个输入记录。记录由与联系人有关的基本信息字段构成。当从数据文件总读入记录时,它就是以记录为单位存储的数据文件中,将记录逐条复制到结构体类型的数组元素中。(2)查询记录模块查询记录模块主要完成在数组中查询满足相关条件记录。在此电话簿管理信息系统中,用户可以按照联系人的姓名或联系人的电话号码在数组中进行查找。若找到该记录,则以表格形式打印出此记录的信息;否则,返回一个-1的值,并打印出未找到该记录的提升信息。(3)更新记录模块观念更新记录模块主要完成对记录的维护。在此电话簿管理系统中,它实现对记录的修改,删除,插入和排序操作。一般而言,系统进行了这些操作之后,需要将修改的数据存入源数据文件。(4)输出记录模块输出记录模块主要完成两个任务。第一,它实现对记录的存盘操作,即将数组中个元素中存储的记录信息写入数据文件中。第二,它实现将数组中存储的记录信息以表格的形式在屏幕上打印显示出来。系统功能模块框图电话簿管理系统三总体设计(1)主控main()函数执行流程电话簿管理系统执行主流程序如下图所示。它先以可读写的方式打开文本类型的数据文件,此文件默认为“c:\telephone”,若该文件不存在,则新建此数据文件。当打开文件操作成功后,从文件中一次读出一条记录,添加到新建的数组中,然后执行显示主菜单和进入主循环操作,进行按键判断。值得一提的是,文本类型文件与二进制类型文件不同,它可以使用windows自带的记事本打开并查看到存储的文件内容。在判断键值时,有效的输入为0~8之间的任意数值,其他输入都视为错误按键。若输入为0(即变量select=0),则会继续判断是否在对记录进行了更新操作之后进行了存盘操作,若未存盘,则全局变量saveflag=1,系统会提示用户是否需要进行数据存盘操作,用户输入Y或y,系统会进行存盘操作。最后,系统执行退出电话簿管理系统的操作。若选择1,则调用ADD()函数,执行增加记录操作;若选择2,则调用Disp()函数,执行将记录表格形式打印输出至屏幕的操作;若选择3,则调用Del()函数,执行删除记录操作;若选择4,则调用Qur()函数,执行查询记录操作;若选择5,则调用Modify()函数,执行修改记录操作;若选择6,则调用Insert()函数,执行插入记录操作;若选择7,则调用SelectSort()函数,执行按升序排序记录的操作;若选输入记录模块从文件读入从键盘读入查询记录模块按姓名查询按电话查询更新记录模块修改记录删除记录插入文字排序记录输出记录模块输出至文件输出至屏幕择8,则调用Save()函数,执行将记录存入磁盘中的数据文件的操作;若选择0~8之外的值,则调用Wrong()函数,给按键错误的提示。(2)输入记录模块输入记录模块主要实现将数据存入数组中。当从数据文件中读出记录时,它调用fread(&tele[count],sizeof(TELEBOOK),1,fp)文件读取函数,执行一次文件中读取一条电话簿记录信息存入某个数组元素的操作,并且这个操作在main()中调用执行,即在电话簿管理系统进入显示菜单界面时,该操作已经执行了。若该文件中没有数否否是是可读写的方式打开一个数据文件开始将次文件的内容读出,并存入一个新的结构体类型的数组中输入0~8中的一个数值,选择相应操作调用menu()菜单函数是否对以修改进行存盘判断键值,调用相应函数完成相应功能调用save()函数进行写数据文件操作结束进入while主循环输入是否为0据,则系统会提示数组为空,没有任何记录可操作,此时,用户选择1,调用ADD()函数,进行记录的输入,即完成在数组中添加元素的操作。(3)查询记录模块查询记录模块主要实现在数组中按联系人姓名或电话查找满足条件的记录。在查询函数Qur()中,为了遵循模块化编程的原则,我们对在数组中进行的记录定位操作设计了一个单独的函数intlocate(TELEBOOKtemp[],intn,charfindmess[],charnameorphonenum[]),参数findmess[]保存要查找的集体内容,nameorphonenum[]保存要查询的字段(值为字符串类型的name或phonenum),若找到该记录,则返回指向该记录的数组元素的下标;否则,返回一个-1的值。(4)更新记录模块(5)输出记录模块当把记录输出至文件时,调用fwrite(&temp[i],size(TELEBOOK),1,fp)函数,将数组元素temp[i]中各字段的值,写入文件指针fp所指的文件;当把记录输出至屏幕时,调用voidDisp()函数,将数组中存储的记录信息以表格的形式在屏幕上打印出来。数绝结构说明本设计定义了结构体telebook,用于存放联系人的基本信息。这里仅有3个与联系人有关的字段。typedefstructtelebook{charnum[4];charname[10];charphonenum[15];charaddress[20];}TELEBOOK;各字段的值的含义如下:charnum[4];保存记录编号charname[10];保存联系人姓名charphonenum[15];保存联系人电话号码charaddress[20];保存联系人地址输入界面为本程序用TC成功运行后自动生成的应用程序。成功运行后会出现菜单结构图具体使用方法会在使用说明中介绍。菜单结构图3系统实现(1)voidmenu()主菜单函数用gotoxy显示光标位置用于是主菜单左对齐。Textcolor用于选择输出语句的颜色,cprintf使输出语句加上选择的颜色(2)voidpritdata()格式化输出表中数据用指针的方式传送并赋值,然后输出数据。(3)voidDisp()显示电话薄记录使用if语句判断有无记录,然后用while循环语句逐条输出(4)voidWrong()输出按键错误信息并返回主菜单。(5)voidNofind()输出未找到此记录信息。(7)intLocate用于定位数组中符合要求的记录,并返回保持该记录的数组元素下标值参数:findmess[]保存要查找的具体内容;nameorphone[]保存按什么在数组中查找。首先用if语句判断是按姓名或是按电话查找,然后用while循环语句逐个查找若找到把数值回传到i中若找不到返回一个整数-1。开始是否按电话查找While(in)是否找到否i++否While(in)真是否找到输出至ii++假输出至i结束按姓名查找假真是是是否(9)输入Add()函数执行流程输入记录函数可以从键盘逐个输入记录,用while语句实现一次可输入多条记录。使用while嵌套if语句如果输入时出现编号相同程序会提醒用户是否重新输入。使用if语句(if(strcmp(num,0)==0)输入编号为0时退出添加操作,返回主界面。流程图为(图2)图2开始显示原有电话记录While(1)While(1)格式化输入编号判断编号是否为0否进入while判断in判断编号是否相同Flag=1判断fiag=1是否重新输入判断是否输入为y增加成功记录数加111结束是否i++是否假真、真否是否是(10)voidQur()是用于按编号或姓名,查询电话记录的函数。首先(charsearchinput[20];)保存用户输入的查询内容,然后它使用if判断语句选择按编号或姓名查找。在查找中调用locate()函数在数组temp中查找编号为searchinput值的元素,并返回该数组元素的下(p=Locate(temp,n,searchinput,name);)若找到该记录(if(p!=-1))则逐条输出记录内容。若没找到则提示没有找到此记录,回到主菜单。(12)Del()删除电话薄记录,前面的查找方法和Qur()函数一样当删除成功后,使用for循环是后面记录前移.(13)Modify()修改电话薄记录,先输入姓名用stringinput()函数校验再调用locate()函数查询此记录(p=Locate(temp,n,findmess,name);)查询到该数组元素,并返回下标值(if(p!=-1))若p!=-1,表明已经找到该数组元素并进行修改。开始判断数组是否为空输出1按姓名找2按电话找判断(1,2)输入姓名调用locate查找输入电话调用locate查找是否找到是否找到显示记录显示记录调用nofind函数调用nofind函数结束是否12否否是是(14)Insert()为插入记录函数,按编号查询到要找的记录在该记录后面插入一个新纪录。首先用while循环找到此编号,在查找中(while(in))查询该编号是否存在,flag=1表示该编号存在。if(flag==1)若编号存在,使用(break)进行插入之前的新记录输入操作。操作方法与Add()函数相同,输入成功后从最后一个组织元素开始往后移一个元素位置。流程图为图3开始判断数组是否为空清屏显示原有数据输入姓名并校验是否找到调用locae()查找进行修改,修改成功并储存结束是否否是图3(15)SelectSort()此函数是排序函数,首先先查询是否有记录(if(n=0))有的话清屏显示记录用if判断可以按姓名升序排序或按记录编号排序,再用for循环的选择排序法排序。用(strcpy(newinfo.num,temp[i].num);)结构变量newinfo实现数组元素的交换。流程图为图4.开始清屏显示原有电话记录While(1)输入你要在哪个号后插入新的记录While(in)查询该编号是否存在i++判断是否Flag=1判断y输出是否重新输入使用Add()函数的输入方法结束成功插入后最后一个组织元素向后移,并显示所有记录否是是否否是图4(16)Save()为保存函数以只写方式打开文本文件(fp=fopen(c:\\telephon,w))。使用if(fwrite(&temp[i],sizeof(TELEBOOK),1,fp)==1)语句,每次写一条记录或一个结构数组元素文件并在你退出程序时,提醒你是否需要保存。流程图为图5开始判断数组是否为空清屏显示原有电话记录输入1为按编号排序输入2为按姓名升序排判断是否为1For循环选择排序显示排序后记录判断是否为2For循环选择排
本文标题:c语言简易电话簿实践报告
链接地址:https://www.777doc.com/doc-3358388 .html