ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:95.73KB ,
资源ID:10656506      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10656506.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言实训通讯录.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言实训通讯录.docx

1、C语言实训通讯录实训报告题 目: 简易通讯录管理系统院 系: 专 业: 姓 名: 学 号: 指导教师: 日 期: 2009年 9 月 19 日 桂林电子科技大学信息科技学院目 录1 问题定义 .32 系统设计 321 总体设计322 详细设计42.2.1 数据结构设计 42.2.2 主控流程 52.2.3 输入记录模块 62.2.4 查询记录模块 .62.2.5 管理记录模块 62.2.6 输出记录模块 .63 系统实现 73.1 编码 73.1.1 程序预处理 .73.1.2 主函数main() .83.1.3 主菜单界面 . 83.1.4 保存信息并释放内存空间. 93.1.5 记录查找(

2、按姓名) .103.1.6 输入记录 .113.1.7 输出记录 .113.1.8 删除记录 .123.2 测试与调试 123.2.1 概述 .123.2.2 程序测试 .134 系统维护 155 归纳总结 165.1 开发经验 165.2 设计中的不足之处165.3 感想和心得体会 16简易通讯录管理系统本题目设计目的是训练学生的基本编程能力,了解简易通讯录的开发流程,熟悉C语言的文件各种基本操作。本程序中涉及很多方面的知识,通过本程序的训练,使学生能对C语言的文件操作有一个更深刻的了解,掌握对简易通讯录实现的原理,进一步开发出高质量的通讯录系统打下坚实的基础。1 问题定义创建一个简易通讯录

3、管理系统。假设系统中包含输入信息,显示信息,增加信息,删除信息和保存等信息。程序的运行效果如下图所示,选择任意菜单后,实现相应功能。在问题定义阶段要考虑题目的可行性和需求分析,接下来进入开发阶段,完成系统设计和系统实现的任务。2 系统设计21总体设计 采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。需要注意的是划分出来的模块应该相对独立但又相关,且容易理解。可以用模块化层次结构图(即模块图)来分析其任务的划分,一般从上到下进行,最上面一层是主模块,下面各层是其上一层模块的逐步细化描述。 图2.1本成绩管理系统要求采用单链表实现,如图2.1所示

4、,它由如下四大功能模块组成:输入记录模块。完成将数据存入单链表的工作。从键盘上逐个输入数据。当从数据文件中读入记录时,也就是把在以记录为单位存储的数据文件中,将记录逐条复制到单链表中。查询记录模块。完成在单链表中查找满足相关条件的记录。在此通讯录系统中,用户可以按照姓名在单链表中进行查找。若找到该人物的记录,则返回指向该人物的记录的指针。否则返回一个值为NULL的空指针,并打印出未找到该人物记录的提示信息。 管理记录模块。完成在单链表中删除满足相关条件的人物记录。按照姓名先查找,再删除此记录。完成在单链表中继续添加人物信息的记录。与输入记录模块一样。输出记录模块。一是实现对人物记录的存盘,即将

5、记录写入数据文件中;二是实现将记录信息以表格的形式在屏幕上打印出来。 2.2详细设计2.2.1数据结构设计通讯录结构体struct Telephone char name20; char addrass20; char zip20; char telephone20; struct Telephone *next;结构体struct Telephone用于储存通讯录的基本信息。结构体typedef struct Telephone TEL;TEL *head=NULL;void showmenu(); /菜单void Appenditem(); /添加条目void print(); /输出条目

6、void Finditem1(); /查找条目( 按姓名 )void Removeitem(); /删除信息 void Saveandfree(); /保存到文件void Open(); /打开文件2.2.2主控main()函数的执行void main() char ch; Open(); /打开文件 while(1) showmenu(); /显示菜单 scanf( %c,&ch); switch(ch) case 1:Appenditem(); /添加条目 break; case 2:print(); /输出条目 break; case 3:Finditem1(); /查找条目1.按姓名

7、break; case 4: Removeitem(); /删除信息 print(); /输出删除后的结果 break; case 0:Saveandfree(); /保存并释放内存 exit(0); /退出 break; default: printf(选择错误!); break; 先打开文件,此文件若不存在,则新件此文件.2.2.3输入记录模块 输入记录模块主要实现将数据存入单链表中. 用户选择void Appenditem()函数进行对人物记录的输入,即完成在单链表中添加记录的操作.值得一提的是,这里的字符串和数值的输入分别采用了函数来实现,在函数中完成输入数据任务,并对数据进行条件判断

8、,直到满足条件为止,这样一来,大大减少了代码的重复和冗余,符合模块化程序设计的特点。2.2.4查询记录模块 查询记录模块主要实现了在单链表中按姓名查找满足相关条件的人物记录。在查询模块函数void Finditem1()中,p为指向保存了学生成绩信息的单链表的首地址的指针变量。为了遵循模块化编程的原则,我们将在单链表中进行的指针定位操作,设计成了一个单独的函数若找到该记录,则返回指向该节点的指针;否则,返回一个空指针。2.2.5 管理记录模块 此模块主要实现了对学生记录的删除、添加操作。因为学生记录是以单链表的结构形式存储的,所以这些操作都在单链表中完成。 (1)删除记录。该操作完成删除指定学

9、号或姓名的学生记录,它也分两步完成。第一步,输入要删除的姓名,输入后调用定位函数,在单链表中逐个对节点数据域中学号或姓名字段的值进行比较,直到找到该学号或姓名的学生记录,则返回指向该学生记录的节点指针;第二步,若找到该学生记录,将该学生记录所在节点的前驱节点的指针域,指向目标节点的后继节点。(2)添加记录。该操作完成在指定学号的随后位置插入新的学生记录。首先,要求用户输入某个学生的学号,新的记录将插入在该学生记录之后;然后,提示用户输入一条新的学生记录的信息,这些信息保存在新节点的数据域中;最后,将该节点插入在指定位置学号之后.2.2.6输出记录模块当把记录输出至文件时,调用函数,将p指针所指

10、节点中的各字段值,写入文件指针fp所指的文件。当把记录输出至屏幕时,调用函数,将单链表中 的人物记录信息以表格的形式在屏幕上打印出来。开始着手进行系统实现的工作,开始程序代码的编写.3.系统实现3.1编码3.1.1 程序预处理 包括加载头文件,定义结构体、常量和变量,并对它们进行初始化工作。#include#include#includestruct Telephone char name20; char addrass20; char zip20; char telephone20; struct Telephone *next;typedef struct Telephone TEL;TE

11、L *head=NULL;void showmenu(); /菜单void Appenditem(); /添加条目void print(); /输出条目void Finditem1(); /查找条目( 按姓名 )void Removeitem(); /删除信息 void Saveandfree(); /保存到文件void Open(); /打开文件3.1.2 主函数main()main()函数主要实现了对整个程序的运行控制,以及相关功能模块的调用。void main() char ch; Open(); /打开文件 while(1) showmenu(); /显示菜单 scanf( %c,&c

12、h); switch(ch) case 1:Appenditem(); /添加条目 break; case 2:print(); /输出条目 break; case 3:Finditem1(); /查找条目1.按姓名 break; case 4: Removeitem(); /删除信息 print(); /输出删除后的结果 break; case 0:Saveandfree(); /保存并释放内存 exit(0); /退出 break; default: printf(选择错误!); break; 3.1.3 主菜单界面 用户进入通讯录管理系统时,需要显示主菜单,提示用户进行选择,完成相应任务

13、。此代码被main()函数调用。/菜单void showmenu() printf(n*通讯录系统*n); printf(t1.添加条目。n); printf(t2.输出输出n); printf(t3.按姓名查询n); printf(t4.删除条目n); printf(t0.保存并退出!n); printf(*n); printf(t请选择:n);3.1.4 保存信息并释放内存空间void Saveandfree() TEL *p=NULL; FILE *fp; char *Book=books.txt; if(head=NULL) printf(n记录为空!n); return; else

14、p=head-next; if(fp=fopen(Book,wb+)=NULL) printf(n打不开文件!n); return; while(p!=NULL) /保存信息 fwrite(p,sizeof(TEL),1,fp); p=p-next; printf(保存完毕!); fclose(fp);/*释放链表空间* for(;head-next!=NULL;) p=head-next; head-next=head-next-next; free(p); free(head);/文件信息输出到链表void Open() FILE *fp; TEL *p1=NULL,*p2=NULL,*t

15、emp=NULL; if(fp=fopen(books.txt,rb+)=NULL) printf(n*这是一个新的通讯录管理系统*n); return; head=(TEL *)malloc(sizeof(TEL); head-next=NULL; temp=p2=head; while(! feof(fp) /循环读取 p1=(TEL *)malloc(sizeof(TEL); temp=p2; p2-next=p1; p2=p1; fread(p1,sizeof(TEL),1,fp); temp-next=NULL; fclose(fp); /关闭文件3.1.5记录查找(按姓名)需要先输

16、入姓名,找到相应的记录void Finditem1() TEL *p; char findname20; printf(请输入要查找的姓名:n); scanf(%s,findname); printf(*通讯录系统*n); printf(姓名t地址t邮编t电话n); for(p=head-next;p!=NULL;p=p-next) if(strcmp(p-name,findname)=0) printf(%st%st%st%sn,p-name,p-addrass,p-zip,p-telephone); 3.1.6输入记录void Appenditem() TEL *p1=NULL,*p2=N

17、ULL; p1=(TEL *)malloc(sizeof(TEL); /申请结点 printf(输入姓名:n); /添加信息 scanf(%s,p1-name); printf(输入地址:n); scanf(%s,p1-addrass); printf(输入邮编:n); scanf(%s,p1-zip); printf(输入电话:n); scanf(%s,p1-telephone); p1-next=NULL; /保存到链表 if(head=NULL) head=(TEL *)malloc(sizeof(TEL); /申请空间 head-next=p1; else for(p2=head;p2

18、-next!=NULL;p2=p2-next); /找到结点尾 p2-next=p1; printf(此信息已添加!);3.1.7输出记录void print() TEL *p=NULL; if(head=NULL) printf(此通讯录中无记录,请输入记录后在使用本功能!n); return; printf(*通讯录系统*n); /输出信息 printf(姓名t地址t邮编t电话n); for(p=head-next;p!=NULL;p=p-next) printf(%st%st%st%sn,p-name,p-addrass,p-zip,p-telephone); 3.1.8删除记录void

19、 Removeitem() char findname20; /先查找 后删除 TEL *p = head-next, *pr = head-next; printf(请输入要删除的姓名:n); scanf( %s,findname); if (head-next = NULL) printf(无此节点!n); return; while (strcmp(p-name,findname)!=0 )& p-next != NULL) pr =p; p =p-next; if (strcmp(findname, p-name)=0) /输出删除信息 printf(%st%st%st%sn,p-ne

20、xt-name,p-next-addrass, p-next-zip,p-next-telephone); if (p = head-next) head-next = p-next; else pr-next = p-next; free(p); printf(此信息已删除!); 3.2测试与调试3.2.1 概述一般情况下,为解决一个问题所编写的程序代码较长,可能包括几百条甚至成千上万条语句。在检查并排除所有语法错误后,还会有不易发现的逻辑错误,因此要对程序进行认真仔细的测试与调试。测试是通过运行程序发现错误的过程,常见的错误有数据溢出、数组越界、进入死循环、语句顺序颠倒、多加“;”或少加“

21、”等等。调试则是确定测试中找到的错误性质并改正错误的过程。测试与调试通常交替进行,即测试调试再测试再调试。能检查出尚未发现的、各种不同类型错误的测试才是成功的测试。测试程序需要测试用例,测试用例可用如下公式表示:测试用例测试数据预期结果。好的测试用例应该是用尽可能少的测试数据发现尽可能多的错误,即发现错误的概率要大。要选择合适的测试数据,使系统在运行时尽量能执行到每条语句,以测试各指令是否正确。还应分别测试输入合法数据与非法数据时,程序的运行情况,。对于合法数据,还要考虑数据的一般性与特殊性,如求最大值的问题,应测试最大值在最前面、最后面、中间某一位置的情况。测试可按模块测试、组装测试和确认测

22、试的步骤进行。(1)模块测试就是分别对各模块进行测试的过程。在编写一个模块后应立即对其进行测试,因为这时对模块记忆深刻,而且单个模块相对较小,所以容易构造测试数据,能方便地检查和改正错误。(2)组装测试就是把所有模块(应该是通过模块测试的模块)按预先制定的计划逐步组装和测试的过程。一般情况下,各模块之间要相互传递数据和控制信息,因此组装测试的主要任务是发现模块接口中的错误。(3)确认测试是最后一个步骤,一般在将软件交付用户之前,应确认软件是否确实满足用户的要求,通常使用接近实际的用例进行测试。3.2.2程序测试 在主菜单中选择1当用户输入1并按回车键后,即可进入数据输入界面。其输入记录过程如图

23、3.1所示,这里输入了1条学生记录。 图3.1 在主菜单中选择2当用户输入2并按回车键后,即可显示输出界面.如图3.2所示. 图3.2 在主菜单中选择3 当用户输入3并按回车键后,即可进入记录查找界面。如图3.3所示. 图3.3 在主菜单中选择4当用户输入4并按回车键后,即可进入删除界面。先得添加多个记录草能运行删除功能。 图3.4 在主菜单中选择5当用户输入5并按回车键后,即可进入记录保存并退出界面。如图3.5所示。 图3.54、系统维护经测试与调试确认软件无错时,开发就告一段落,这时可以交付软件供用户使用,但是在软件的使用过程中还会面临更加漫长的工作,即软件维护。一般维护的工作有:更改使用

24、中发现的错误;为适应实际环境而对程序进行修改;为满足新的需求而对程序作必要的改进等等。5、归纳总结51 开发经验通过对本题目的开发,体会到要掌握以下几点内容。 大程序的设计风格。按“自顶向下,逐步细化,模块化”的方法进行程序设计。 编写主函数,并进行测试与调试。当被调函数又需要调用其他函数时,也要遵循逐步细化的原则。C语言提供丰富的库函数,编程序时要善于使用库函数,避免不必要的劳动。 定义函数时,应选好参数的个数和数据类型。 文件使用方法。文件使用完毕后应及时关闭。52 设计中尚存的不足之处关于这次的程序,也有挺多不足的地方。首先,我觉得程序还不够完善,有些功能并没有完全写出来.最后,就是该程序界面不够美观大方。53感想和心得体会通过这次实验,我感觉到自己学到的知识还不够完善,有些内容还不能完全理解,导致编写代码的时候,遇到了很多困难.突然觉得自己要把所学的理论知识运用于解决实际问题不仅要付出艰辛的劳动,还得要有科学的方法和坚持不懈的努力。10天的时间,很快过去,在一步步学习和解决问题中,我学到了很多东西,不断请教,不断修改,不断沟通,使得我有了大量的知识积累和提高.从而激发了我进一步学习C语言的热情,一点一滴到心血,都会换来美好到回报。还要感谢老师的辛苦解答,才能改善我到能力。虽然这次程序编写得不够理想,可是,我会努力的,努力编写更多更好到程序!

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

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