版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《c语言》课程设计实砌
实训报告
题目:简易通讯录管理系统
院系:
专业:
姓名:
学号:
指导教师:
日期:2009年9月19日
桂林电3科技丈名信息和枝等就
目录
1问题定义............................................................3
2系统设计.......................................................3
2.1总体设计...............................................................3
2.2详细设计...............................................................4
2.2.1数据结构设L................................................4
2.2.2主控流程..........................................................5
2.2.3输入记录模块......................................................6
2.2.4查询记录模块......................................................6
2.2.5管理记录模块.....................................6
2.2.6输出记录模块.....................................................6
3系统实现.........................................................7
3.1编码.........................................................7
3.1.1程序预处理.......................................................7
3.1.2主函数main。...................................................8
3.1.3主菜单界面.....................................................8
3.1.4保存信息并释放内存空间............................................9
3.1.5记录查找(按姓名)................................................10
3.1.6输入记录..........................................................11
3.1.7输出记录..........................................................11
3.1.8删除记录..........................................................12
3.2测试与调试.........................................................12
3.2.1概述.........................................................12
3.2.2程序测试.........................................................13
4系统维护15
5归纳总结16
5.1开发经验.........................................................16
5.2设计中的不足之处.......................................................16
5.3感想和心得体会........................................................16
简易通讯录管理系统
本题目设计目的是训练学生的基本编程能力,了解简易通讯录的开发流程,熟
悉C语言的文件各种基本操作。本程序中涉及很多方面的知识,通过本程序的
训练,使学生能对C语言的文件操作有一个更深刻的了解,掌握对简易通讯录
实现的原理,进一步开发出高质量的通讯录系统打下坚实的基础。
1.问题定义
创建一个简易通讯录管理系统。假设系统中包含输入信息,显示信息,增加信
息,删除信息和保存等信息。程序的运行效果如下图所示,选择任意菜单后,实
现相应功能。
****************这是一个新的通讯录言理系统**M**M*M*M**M*M*M*
硼
一
::::跳
条
一
。
出
蒙
加
苴
询
出
条
目
删
姓
出
并
保
退
胃
请选择:
在问题定义阶段要考虑题目的可行性和需求分析,接下来进入开发阶段,完成
系统设计和系统实现的任务。
2.系统设计
2.1总体设计
采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一
个个较小的任务,然后分别设计各个小任务。需要注意的是划分出来的模块应该
相对独立但又相关,且容易理解。可以用模块化层次结构图(即模块图)来分析
其任务的划分,一般从上到下进行,最上面一层是主模块,下面各层是其上一层
模块的逐步细化描述。
结构体structTelephone用于储存通讯录的基本信息。
结构体
typedefstructTelephoneTEL;
TEL*head=NULL;
voidshowmenu();〃菜单
voidAppenditem();〃添加条目
voidprint();〃输出条目
voidFinditem1();〃查找条目(按姓名)
voidRemoveitem();〃删除信息
voidSaveandfree();//保存到文件
voidOpen();〃打开文件
2.2.2主控main。函数的执行
voidmain()
charch;
Open();〃打开文件
vvhile(l)
{
showmcnu();〃显示菜单
scanf(u%c",&ch);
switch(ch)
(
case'r:Appenditem();〃添加条目
break;
case2:prinl();〃输出条目
break;
case3:Finditeml();〃查找条目1.按姓名
break;
case'4':Removeitem();〃删除信息
print();〃输出删除后的结果
break;
case'O^SaveandfreeO;〃保存并释放内存
exit(O);〃退出
break;
default:
printf("选择错误!,
break;
}
)
)
先打开文件,此文件若不存在,则新件此文件.
223输入记录模块
输入记录模块主要实现将数据存入单链表中.用户选择voidAppenditem。函
数进行对人物记录的输入,即完成在单链表中添加记录的操作.值得一提的是,这
里的字符串和数值的输入分别采用了函数来实现,在函数中完成愉入数据任务,
并对数据进行条件判断,直到满足条件为止,这样一来,大大减少了代码的重复
和冗余,符合模块化程序设计的特点。
2.2.4查询记录模块
查询记录模块主要实现了在单链表中按姓名查找满足相关条件的人物记
录。在查询模块函数voidFindilemlO中,p为指向保存了学生成绩信息的单链表的
首地址的指针变量。为了遵循模块化编程的原则,我们将在单链表中进行的指针
定位操作,设计成了一个单独的函数若找到该记录,则返回指向该节点的指针;
否则,返回一个空指针。
2.2.5管理记录模块
此模块主要实现了对学生记录的删除、添加操作。因为学生记录是以单链表
的结构形式存储的,所以这些操作都在单链表中完成。
(1)删除记录。该操作完成删除指定学号或姓名的学生记录,它也分两步完
成。
第一步,输入要删除的姓名,输入后调用定位函数,在单链表中逐个对节点数据
域中学号或姓名字段的值进行比较,直到找到该学号或姓名的学生记录,则返回
指向该学生记录的节点指针;
第二步,若找到该学生记录,将该学生记录所在节点的前驱节点的指针域,
指向目标节点的后继节点。
(2)添加记录。该操作完成在指定学号的随后位置插入新的学生记录。首先,
要求用户输入某个学生的学号,新的记录将插入在该学生记录之后;然后,提示
用户输入一条新的学生记录的信息,这些信息保存在新节点的数据域中;最后,
将该节点插入在指定位置学号之后.
226输出记录模块
当把记录输出至文件时,调用函数,将p指针所指节点中的各字段值,写入
文件指针fp所指的文件。当把记录输出至屏幕时,调用函数,将单链表中的人
物记录信息以表格的形式在屏幕上打印出来。
开始着手进行系统实现的工作,开始程序代码的编写.
3.系统实现
3.1编码
3.1.1程序预处理
包括加载头文件,定义结构体、常量利变量,并对它们进行初始化工
作。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
structTelephone
(
charname[2()];
charaddrass[201;
charzip[20];
chartelephone[20]:
structTelephone*next:
I;
typedefstructTelephoneTEL;
TEL*head=NULL;
voidshowmenu();〃菜单
voidAppenditem();〃添加条目
voidprinl();〃输出条目
voidFinditem1();〃查找条目(按姓名)
voidRemoveitem();〃删除信息
voidSaveandfree();//保存到文件
voidOpen();〃打开文件
3.1.2主函数main。
main。函数主要实现了对整个程序的运行控制,以及相关功能模块的调用。
voidmain()
(
charch;
Opcn();〃打开文件
while(l)
(
showmenu();〃显示菜单
scanf(n%cn,&ch);
switch(ch)
(
case'r:Appenditem();〃添加条目
break;
case2:print();〃输出条目
break;
case3:Findileml();〃查找条目1.按姓名
break;
case4:Removeitem();//删除信息
print。;〃输出删除后的结果
break;
case'O^SavcandfrccO;〃保存并释放内存
exit(O);//退出
break;
default:
primf("选择错误!)
break;
)
)
3.1.3主菜单界面
用户进入通讯录管理系统时,需要显示主菜单,提示用户进行选择,完
成相应任务。此代码被main。函数调用。
〃菜单
voidshowmenu()
printf("\n*****************通讯录系统****************
printf("\tl.添加条0o\n");
printf("Z输出输出七”);
printf("\t3.按姓名查询\n");
printf("\t4.删除条目\n");
printf("\tO.保存并退出!\n");
printf(”\t请选择:\n");
3.1.4保存信息并释放内存空间
voidSaveandfree()
{
TEL*p=NULL;
PILE*fp;
char*Book=,,books.txtM;
if(head==NULL)
{
printf("\n记录为空!\n");
return;
)
else
p=hcad->ncxt;
if((fp=fopen(Book,"wb+M))==NULL)
(
printf("\n打不开文件!\n”);
return;
)
while(p!=NULL)〃保存信息
(
fwrite(p,sizeof(TEL),IJp);
p=p->next;
)
printf("保存完毕!)
fclose(fp);
〃*****释放链表空间*****
for(;head->next!=NULL;)
(
p=head->next;
head->next=head->next->next;
free(p);
}
free(head);
(
//文件信息输出到链表
voidOpen()
FILE*fp;
TEL*p1=NULU*p2=NULL,*temp=NULL;
if((fp=fopen("books.txt,V,rb+,,))==NULL)
print***************—*个新的通讯录管理系统
******************\n”)・
return;
)
head=(TEL*)malloc(sizeof(TEL));
head->next=NULL;
temp=p2=head;
while(!feof(fp))〃循环读取
pl=(TEL*)malloc(sizeof(TEL));
temp二p2;
p2->next=pl;
p2=pl;
fread(p1,sizeof(TEL),1,fp);
}
tcmp->ncxt=NULL;
fclose(fp);〃关闭文件
)
3.1.5记录查找(按姓名)
需要先输入姓名,找到相应的记录
voidFinditem1()
TEL*p;
charfindname[20];
primf("请输入要查找的姓名:\n't);
scanf("%s",findname);
printf("**************通讯录系统*********************\n"),
printf("姓名\t地址\t邮编\t电话\n");
for(p=head->next;p!=NULL;p=p->next)
if(strcmp(p->name,findname)==O)
printf("%s\t%s\t%s\t%s\n",p->name,p->addrass,p->zip,p->telephone);
}
3.1.6输入记录
voidAppenditem()
(
TEL*pl=NULL,*p2=NULL;
pl=(TEL*)malloc(sizeof(TEL));〃申请结点
printf("输入姓名:\n");〃添加信息
scanf("%s",pl->name);
printf("输入地址:\n");
scanf("%sn,pl->addrass);
printf("输入邮编:\n");
scanf("%s",pl->zip);
printf("输入电话:\nH);
scanf(,'%s,,,p1->telephone);
p1->next=NULL;〃保存到链表
if(head==NULL)
{
head=(TEL*)malloc(sizeof(TEL));〃申请空间
head->nexi=pl;
)
else
1
for(p2=head;p2->nexl!=NULL;p2=p2->next);//找到结点尾
p2->next=pl;
)
printf("此信息已添加!”);
3.L7输出记录
voidprint()
{
TEL*p=NULL;
if(head==NULL)
(
printf("此通讯录中无记录,请输入记录后在使用本功能!\nM);
return;
)
***********通讯录系统*********************\n");〃输出信息
printf("姓名\t地址\t邮编\t电话\n");
for(p=head->next;p!=NULL;p=p->next)
printf(',%s\t%s\t%s\t%s\n',,p->name,p->addrass,p->zip,p->telephone);
)
3.1.8删除记录
voidRemoveitem()
(
charfindname[20];〃先查找后删除
TEL*p=hcad->ncxt,*pr=hcad->ncxt;
printf("请输入要删除的姓名:\n");
scanf(H%s",findname);
if(head->next==NULL)
(
printf("无此节点!\n");
return;
)
while((strcmp(p->name,findname)!=O)&&p->next!=NULL)
(
pr=p;
p=p->next;
I
if(strcmp(findname,p->name)==0)〃输出删除信息
(
printf("%s\t%s\t%s\t%s\n'\p->next->name,p->next->addrass,\
p->ncxt->zip,p->ncxt->tclcphonc);
if(p==head->next)
head->next=p->next;
else
pr->next=p->next;
free(p);
)
printf(”此信息已删除!”);
1
3.2测试与调试
3.2.1概述
一般情况下,为解决一个问题所编写的程序代码较长,可能包括几百条甚至
成千上万条语句。在检查并排除所有语法错误后,还会有不易发现的逻辑错误,
因此要对程序进行认真仔细的测试与调试。
测试是通过运行程序发现错误的过程,常见的错误有数据溢出、数组越界、
进入死循环、语句顺序颠倒、多加或少加“{}”等等。调试则是确定刎试
中找到的错误性质并改正错误的过程。测试与调试通常交替进行,即测试一一调
试一一再测试一一再调试。
能检查出尚未发现的、各种不同类型错误的测试才是成功的测试。测试程序
需要测试用例,测试用例可用如下公式表示:测试用例=测试数据+预期结果。
好的测试用例应该是用尽可能少的测试数据发现尽可能多的错误,即发现错
误的概率要大。要选择合适的测试数据,使系统在运行时尽量能执行到每条语句,
以测试各指令是否正确。还应分别测试输入合法数据与非法数据时,程序的运行
情况,。对于合法数据,还要考虑数据的一般性与特殊性,如求最大值的问题,
应测试最大值在最前面,最后面,中间某一位置的情况。
测试可按模块测试、组装测试和确认测试的步骤进行。
(1)模块测试就是分别对各模块进行测试的过程。在编写一个模块后应立
即对其进行测试,因为这时对模块记忆深刻,而且单个模块相对较小,所以容易
构造测试数据,能方便地检查和改正错误。
(2)组装测试就是把所有模块(应该是通过模块测试的模块)按预先制定
的计划逐步组装和测试的过程。一般情况下,各模块之间要相互传递数据和控制
信息,因此组装测试的主要任务是发现模块接口中的错误。
(3)确认测试是最后一个步骤,一般在将软件交付用户之前,应确认软件
是否确实满足用户的要求,通常使用接近实际的用例进行测试。
3.2.2程序测试
•在主菜单中选择1
当用户输入1并按回车键后,即可进入数据输入界面。其输入记录过程如图
3.1所示,这里输入了1条学生记录。
Efl"C:\DOCUMEHTSANDSETmGS\ADMIMISTRATOR\桌面\qqq\Debug\qqq.exe"X
这是一个新的通讯录管理系统******************
加i
跳
。
出
出
询
西
姓
目
詈
退
出
请选择:
『人姓名:
in
入地址:
uilin
U人邮编:
41200
入电话:
813333
此信息己添加!
**—***********通讯录系统
瑾1.添隹加鲤条目询。
;:盛靠il出!
请选择:
图3.1
•在主菜单中选择2
当用户输入2并按回车键后,即可显示输出界面.如图3.2所示.
i”通讯录系统i***
性名地址邮编电话
guilin5412006813333
即
一飞
一
加
1目
条
2^。
出
出
询
3查
姓
4目
出
詈
0退
图3.2
•在主菜单中选择3
当用户输入3并按回车键后,即可进入记录查找界面。如图3.3所示.
请选择:
3
请输入要查找的姓名:
qin
xxxxxxxxxxxxxxi电讯录系统*******
姓名地址邮编电话
qinguilin5412006813333
通讯录系统•
图3.3
•在主菜单中选择4
当用户输入4并接回车键后,即可进入删除界面。先得添加多个记录草能运
行删除功能。
请选择:
3输入要删除的姓名:
eeeee
gqqqqqqq
此信息已删除!"XXXXXXMXXXXX通讯录系统*
处名地址邮编电话
qinqwqi,qwqviqwqvi
qqqqqqqq
统
通
加条
,
1目
出
2出
雪
姓
询
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026上海金桥经济技术开发区管理委员会文员公开招聘1人考试参考题库及答案解析
- 2026年河南应用技术职业学院单招职业技能考试备考试题带答案解析
- 2026上海爱乐乐团招聘5人考试备考题库及答案解析
- 碳市场系列研究报告之六:转型金融助力高碳企业低碳发展-
- 2026湖北武汉市光谷喻家山学校校聘教师招聘5人(一)考试参考试题及答案解析
- 2026上海宝山区行知科创学院“蓄电池计划”招募考试备考试题及答案解析
- 2026年州市中医院招募第一批青年见习11人考试参考试题及答案解析
- 2026年永安市人民政府办公室(永安市国防动员办公室)关于公开招聘编外聘用人员备考题库及一套参考答案详解
- 2026年长沙市林业局公开招聘中级雇员备考题库有答案详解
- 2026年格尔木市公安局面向社会公开招聘警务辅助人员46人备考题库含答案详解
- 2026年房地产经纪协理考试题库及答案(名师系列)
- 2025年湖北警官学院马克思主义基本原理概论期末考试真题汇编
- 河道工程测量施工方案
- 2025岚图汽车社会招聘参考题库及答案解析(夺冠)
- 2025河南周口临港开发区事业单位招才引智4人考试重点题库及答案解析
- 2025年无人机资格证考试题库+答案
- 南京工装合同范本
- 登高作业监理实施细则
- DB42-T 2462-2025 悬索桥索夹螺杆紧固力超声拉拔法检测技术规程
- 大学生择业观和创业观
- 《经济法学》2025-2025期末试题及答案
评论
0/150
提交评论