1问题定义
根需求该系统应包含信息
通讯录基信息:
姓名手机号码电话家庭住址
根需求该系统应实现功:
种基数录入:通讯录基信息录入
种基数修改:允许已录入数重新进行编辑修改例修改通讯录中张三电话信息
种基数删例张三信息通讯录中删
基种数查询例输入张三姓名查询张三手机号码电话址
显示全部记录功查通讯录中全部记录
模糊查找功例输入张分条显示全部姓张信息直户确认显示信息户找信息者提示:通讯录中没该信息
模糊删功:模糊查找类似知道信息某部分进查找删信息户确认否删
模糊修改功:模糊功类似知道信息某部分进查找修改信息户确认否修改
图11 通讯录功需求
2系统设计
2.1 总体设计
采模块化程序设计方法较务定原分较务然分设计务需注意划分出模块应该相独立相关容易理解模块化层次结构图(模块图)分析务划分般进行面层模块面层层模块逐步细化描述
图21 通讯录系统功模块图
2.2 详细设计
221数结构设计
变量定义
变量间关系更明采结构体定义变量
struct phone
{
char name[20] *姓名*
char mobile[15] *手机号码*
char phone[15] *家庭电话*
char address[50] *家庭住址*
struct phone *next
}
定义函数
void showmenu() *显示功菜单*
void creatnew() *添加纪录函数*
void save() *数写入文件函数*
void add( ) *控制添加记录函数*
void openfile() *输出文件链表函数*
void show() *显示全部记录函数*
void searchshow() *显示查找选项函数*
tel* searchname() *姓名查找记录函数*
tel* searchmobile() *手机号码查找记录函数*
tel* searchphone() *家庭电话查找记录函数*
tel* searchaddress() *址查找记录函数*
tel * search() *查找记录函数*
tel* dimsearch() *模糊查找记录函数*
void modify() *修改记录函数*
void del() *删记录函数*
void fre() * 释放链表空间函数*
void openfile() *读取文件链表*
222 控main()函数执行流程
开始
读方式开数文件
文件容读出
存入结构体中关闭文件
进入while(1)循环
调函数showmenu()输出菜单
输入[0~6]中数值
选择相应操作
输入否0 ?
否
调fre()函数
判断键值调相应函数
完成相应功
结束
通讯录执行流程图22示先读方式开数文件文件默认txltxt该文件存出提示开文件操作成功文件中读出全部记录添加结构体中然执行进入循环显示菜单操作输入(0~6)进行键判断输入0时系统会退出通讯录系统操作
选择1调void add()函数执行增加记录操作选择2调void modify()函数执行修改记录操作选择3调tel * search()函数执行查询记录操作选择4调void del()函数执行删记录操作选择5调void show()函数执行显示全部记录操作选择6调tel* dimsearch()函数执行模糊查找操作选择0调void save()void fre()函数执行保存记录释放链表空间操作输入0~6外值出选择错误提示
223 添加记录模块
程序开始默认文件调fsanf()函数读入记录(文件存记录)结构体中
添加条信息时均提示框显示相关提示户选择 0 退出添加记录时系统会清屏返回菜单供户次选择操作
224 查询记录模块
模块包括精确查询模糊查询两功通调tel * search()tel* dimsearch()实现查询记录模块实现显示结构体中成员信息通调tel * search()函数实现系统默认精确查找精确查找没匹配会提示户否进行模糊查找模糊查找系统会根户输入相关信息通调tel * dimsearch()函数分条显示该信息相关记录直户确认程序条记录
225 修改记录模块
模块通调tel * search()tel* dimsearch()实现查询记录模块实现显示结构体中成员信息通调tel * search()函数实现系统默认精确查找精确查找没匹配会提示户否进行模糊查找模糊查找系统会根户输入相关信息通调tel * dimsearch()函数分条显示该信息相关记录直户确认进行修改程序条记录
226 删模块
模块通调tel * search()tel* dimsearch()实现查询记录模块实现显示结构体中成员信息通调tel * search()函数实现系统默认精确查找精确查找没匹配会提示户否进行模糊查找模糊查找系统会根户输入相关信息通调tel * dimsearch()函数分条显示该信息相关记录直户确认进行删程序条记录
227 显示全部记录模块
模块通调show()函数记录(果记录)全部输入屏幕面否出相应提示
228 模糊查询模块
通调tel * dimsearch()函数实现模糊查找系统会根户输入相关信息通调tel * dimsearch()函数分条显示该信息相关记录直户确认该信息条记录
3系统实现
31编码
311 程序预处理
#include
#include
#include
#include
struct phone *定义结构体变量*
{
char name[20] *存放姓名*
char mobile[15] *存放手机号码*
char phone[15] *存放家庭电话*
char address[50] *存放家庭住址*
struct phone *next *存放节点址*
}
void showmenu() *显示功菜单*
void creatnew() *添加纪录函数*
void save() *数写入文件函数*
void add( ) *控制添加记录函数*
void openfile() *输出文件链表函数*
void show() *显示全部记录函数*
void searchshow() *显示查找选项函数*
tel* searchname() *姓名查找记录函数*
tel* searchmobile() *手机号码查找记录函数*
tel* searchphone() *家庭电话查找记录函数*
tel* searchaddress() *址查找记录函数*
tel * search() *查找记录函数*
tel* dimsearch() *模糊查找记录函数*
void modify() *修改记录函数*
void del() *删记录函数*
void fre() * 释放链表空间函数*
void openfile() *读取文件链表*
312函数main()
main()
{
int xm
openfile() *读取文件链表*
system(color 9a) *设置背景颜色字体颜色*
while(1) *设置循环条件真*
{
showmenu() *显示功*
fflush(stdin) *刷新缓存区*
printf(请作出您选择)
scanf(d&x)
if(x>0&&x<6)
{
switch(x)
{
system(cls)
case 1add()break *添加记录函数*
case 2modify()break *修改记录函数*
case 3search()break *查找记录函数*
case 4del()break *删记录函数*
case 5show()break *显示全部记录*
case 6dimsearch()break *模糊查找*
case 0fre()printf(\n\t\t欢迎次通讯录理系统见\n\n)exit(0)
}
}
else
printf(\n\n选择错误请次选择\n)
}
getch()
}
313 输出菜单
void showmenu()
{ int i
for(i0i<80i++)
printf(c16)
printf(\n)
printf(\t\t\t\t1添加记录\n)
printf(\n)
printf(\t\t\t\t2修改记录\n)
printf(\n)
printf(\t\t\t\t3查找记录\n)
printf(\n)
printf(\t\t\t\t4删记录\n)
printf(\n)
printf(\t\t\t\t5显示全部录\n)
printf(\n)
printf(\t\t\t\t6模糊查找\n)
printf(\n)
printf(\t\t\t\t0退出程序\n)
printf(请06选择:\n)
for(i0i<80i++)
printf(c17)
}
314添加功
添加入新记录(结构体成员包括: 姓名手机号码家庭电话家庭住址)
void creatnew() *添加记录姓名排序*
{
int n
tel *new*p1*p2
new(tel *)malloc(sizeof(tel)) *变量申请空间*
aa printf(\t\t\t请输入姓名)
scanf(snew>name)
printf(\t\t\t请输入手机号码)
scanf(snew>mobile)
printf(\t\t\t请输入家庭电话)
scanf(snew>phone)
printf(\t\t\t请输入家庭住址)
scanf(snew>address)
p1head *头指针次赋变量p1*
if(headNULL) *先判断否记录*
do
{
if((strcmp(p1>mobilenew>mobile))0||
(strcmp(p1>phonenew>phone))0) *判断记录否已存*
{
printf(记录已存\n)
printf(\n20s15s15s50s\n
p1>namep1>mobilep1>phonep1>address) *输出已存记录*
printf(否继续添加?1 继续添加\t数字键重新输入\n)
scanf(d&n)*确认否添加记录*
if(n1) *确认添加*
break
else *确认重新输入*
goto aa
}
p1p1>next
}while(p1NULL) *判断记录否存*
p1head *头指针次赋变量p1*
if(headNULL) *检测否空链表*
{
headnew *链表空插入结点作第结点*
new>nextNULL
}
else
{
while((p1>nextNULL)&&
(strcmp(p1>namenew>name)<0)) *新节点找插入位置*
{
p2p1
p1p1>next
}
if((strcmp(p1>namenew>name)>0))
{
if(headp1)
{
new>nexthead
headnew
}
else
{
p2>nextnew
new>nextp1
}
}
else
{
p1>nextnew
new>nextNULL
}
}
}
315修改功
void modify() *修改记录函数*
{
tel *newsearch() *调查找函数*
if(z0)
else
if(x0)
else if(z0&&x0) *根表计量判断指针*
else
{ if(newNULL) *修改头结点数*
{
printf(请输入新纪录:\n)
printf(\t\t\t请输入姓名)
scanf(shead>name)
printf(\t\t\t请输入手机号码)
scanf(shead>mobile)
printf(\t\t\t请输入家庭电话)
scanf(shead>phone)
printf(\t\t\t请输入家庭住址)
scanf(shead>address)
save()
}
else *修改结点数*
{
printf(请输入新纪录:\n)
printf(\t\t\t请输入姓名)
scanf(snew>next>name)
printf(\t\t\t请输入手机号码)
scanf(snew>next>mobile)
printf(\t\t\t请输入家庭电话)
scanf(snew>next>phone)
printf(\t\t\t请输入家庭住址)
scanf(snew>next>address)
save()
}
}
printf(\n\n)
printf(\t\t\t意键继续)
getch()
system(cls)
}
316查找功
tel * search()
{ int ij0
tel *p1NULL*p2NULL*pNULL
loop searchshow()
scanf(d&i)
if(i>1&&i<4)
switch(i)
{
case 1p2searchname()break
case 2p2searchmobile()break
case 3p2searchphone()break
case 4p2searchaddress()break
}
else
{
printf(选择错误请重新选择\n\n)
goto loop
}
p1head
while(p1NULL)
{
if((strcmp(p1>namep2>name))0||(strcmp(p1>mobilep2>mobile))0||
(strcmp(p1>phonep2>phone))0||(strcmp(p1>addressp2>address))0)
{
printf(找记录:\n)
printf(20s15s15s50s\n姓名手机号码电话号码家庭住址)
printf(\n20s15s15s50sp1>namep1>mobilep1>phonep1>address)
break
}
pp1
p1p1>next
}
if(p1NULL)
{
printf(\t\t\t电话中记录\n\n)
printf(\t\t否重新进行?1 继续\t数字键模糊查找\n\n)
scanf(d&i)
if(i1)
{
free(p2) *释放p2存储空间*
goto loop
}
else
{
system(cls) * 精确查找没记录进行模糊找找*
pdimsearch()
}
}
return p
}
317删功
void del() *删记录函数*
{
tel * p2search() *查找删结点*
int i
if(z0)
else
if(x0)
else if(z0&&x0) *根标记量判断删否头点*
else
if(p2NULL)
{
printf(\n\n\n确实删?\t1 删\t数字保留\n)
scanf(d&i)
if(i1)
headhead>next*修改删头结点指针*
save()
printf(\t\t\t意键返回)
getch()
system(cls)
}
else
{
printf(\n\n\n确实删?\t1 删\t数字保留\n)
scanf(d&i)
if(i1)
{
p2>nextp2>next>next*修改删头结点指针*
save()
}
printf(\t\t\t意键返回)
getch()
system(cls)
}
}
318显示全部记录
void show() *显示全部记录*
{
tel *p1head
if(headNULL) *判断否空链表*
{
printf(\n\t\t\t电话簿中没记录请输入纪录\n)
printf(\t\t\t意键返回)
getch()
system(cls)
return
}
printf(20s15s15s50s\n姓名手机号码电话号码家庭住址)
do
{ printf(\n20s15s15s50sp1>namep1>mobilep1>phonep1>address)
p1p1>next
}while(p1NULL)
printf(\t\t\t意键返回)
getch()
system(cls)
}
319模糊查找功
tel* dimsearch() *模糊查找*
{ int ij0m
tel *p1NULL*p2NULL*pNULL
searchshow()
lp
scanf(d&i)
if(i>1&&i<4)
switch(i)
{
case 1p2searchname()break
case 2p2searchmobile()break
case 3p2searchphone()break
case 4p2searchaddress()break
}
else
{
printf(选择错误请重新选择\n\n)
goto lp
}
p1head
while(p1NULL)
{
if((strstr(p1>namep2>name))||(strstr(p1>mobilep2>mobile))||
(strstr(p1>phonep2>phone))||
r(p1>addressp2>address)))*判断否相关信息*
{
printf(20s15s15s50s\n姓名手机号码
电话号码家庭住址)
printf(20s15s15s50s\np1>namep1>mobilep1>phonep1>address)
j1
printf(否条记录?确定条记录\t数字键继续)
scanf(d&m)
if(m1)
break
}
pp1
p1p1>next
}
printf(\n)
if(j0||p1NULL)
{if(j0&&p1NULL)
{printf(\t\t\t没找相关记录)
z0
}
if(j0&&p1NULL)
{
printf(\t\t\t没找相关记录)
x0
}
if(j0&&p1NULL)
{
printf(\t\t\t没找相关记录)
z0x0
}
}
printf(\n\n)
printf(\t\t\t意键返回)
getch()
system(cls)
return p
}
3.2 测试调试
321 概述
般情况解决问题编写程序代码较长包括百条甚成千万条语句检查排语法错误会易发现逻辑错误程序进行认真仔细测试调试
测试通运行程序发现错误程常见错误数溢出越界进入死循环语句序颠倒加少加{}等等调试确定测试中找错误性质改正错误程测试调试通常交进行测试——调试——测试——调试
检查出尚未发现种类型错误测试成功测试测试程序需测试例测试例公式表示:测试例=测试数+预期结果
测试例应该少测试数发现错误发现错误概率选择合适测试数系统运行时量执行条语句测试指令否正确应分测试输入合法数非法数时程序运行情况合法数考虑数般性特殊性求值问题应测试值前面面中间某位置情况
测试模块测试组装测试确认测试步骤进行
(1)模块测试分模块进行测试程编写模块应立进行测试时模块记忆深刻单模块相较容易构造测试数方便检查改正错误
(2)组装测试模块(应该通模块测试模块)预先制定计划逐步组装测试程般情况模块间相互传递数控制信息组装测试务发现模块接口中错误
(3)确认测试步骤般软件交付户前应确认软件否确实满足户求通常接实际例进行测试
VS2008环境 C序方法
● 时加印语句观察数显示屏幕
● F10F11分逐程逐语句执行程序
● Ctrl+B组合键新建断点
● 综合方法
测试程序时监视窗口时查变量表达式值时部分程序代码注释符暂时括起缩短程序便压缩出错代码范围
322 程序测试
·选择1 输入 asd 654 345 654
· 数字键
0
·选择2
选择1
·选择5
·选择3
1 输入 王五
·选择4
2 输入789
1
选择5
·选择6
2 输入 4
数字键
1
·选择0
·选择5
选择2 2输入4
数字键
数字键
1
意键 选择5
·选择5
意键选择42输入4
数字键2输入4
数字键
1
意键
1
意键
选择 5
4系统维护
测试调试确认软件错时开发告段落时交付软件供户软件程中会面更加漫长工作软件维护般维护工作:更改中发现错误适应实际环境程序进行修改满足新需求程序作必改进等等
5纳总结
5.1 开发验
通题目开发体会掌握点容
l 程序设计风格顶逐步细化模块化方法进行程序设计
l 编写函数进行测试调试调函数需调函数时遵循逐步细化原C语言提供丰富库函数编程序时善库函数避免必劳动
l 定义函数时应选参数数数类型
l 文件方法文件完毕应时关闭
5.2 实训中遇问题解决方法
进行文件操作通书网找例题解析终初步完成文件读写
输出图形黑白配知道色通百度知道通system(color XX)XX指代颜色颜色属性两十六进制数字指定 第背景第二前景
删第结点时会误删第二节点通增加标记解决问题
显示全部数时会显示屯字通调试知文件读取数时结尾少回车
.3 设计中尚存足处
关次程序足方
⑴没添加更特色功
⑵实现程序中查询界面够简洁
⑶程序代码写够规范
⑷操作界面够美观
5.4 感想心体会
通次实训感触甚深学理知识运解决实际问题仅付出艰辛劳动科学方法坚持懈努力次实训进步理解编程什编程编程目什……发现知识竟贫乏顿时感压力存激发学热情会成断进取永懈怠动力
实训程中良锻炼首先兴趣方面通编写通讯录理系统更加喜欢编程前迷茫状态中解脱出解编程真正意义想生着帮助次通编写通讯录理系统写程序定思路前手理解算法意义懂模块化思想处
通编写代码书知识更深理解甚懂问题程中然然理解刘欣老师悉心指导C语言更深刻理解程序算法数定义程序改错等方面力提高身注意力耐心编程兴趣增长获益匪浅
6参考资料
谭浩强C语言程序设计(第三版) 清华学出版社
7附源代码
#include
#include
#include
#include
char filename[20]E\\tx123txt
struct phone
{
char name[20]
char mobile[15]
char phone[15]
char address[50]
struct phone *next
}
typedef struct phone tel
tel *headNULL
int z1x1 *标记量XZ*
void showmenu()
{ int i
printf(\n)
for(i0i<80i++)
printf(c16)
printf(\n)
printf(\t\t\t\t1添加记录\n)
printf(\n)
printf(\t\t\t\t2修改记录\n)
printf(\n)
printf(\t\t\t\t3查找记录\n)
printf(\n)
printf(\t\t\t\t4删记录\n)
printf(\n)
printf(\t\t\t\t5显示全部录\n)
printf(\n)
printf(\t\t\t\t6模糊查找\n)
printf(\n)
printf(\t\t\t\t0退出程序\n)
printf(请6选择:\n)
for(i0i<80i++)
printf(c17)
}
void creatnew() *添加记录姓名排序*
{
int n
tel *new*p1*p2
new(tel *)malloc(sizeof(tel))
aa printf(\t\t\t请输入姓名)
scanf(snew>name)
printf(\t\t\t请输入手机号码)
scanf(snew>mobile)
printf(\t\t\t请输入家庭电话)
scanf(snew>phone)
printf(\t\t\t请输入家庭住址)
scanf(snew>address)
p1head
if(headNULL) *先判断否记录*
do
{
if((strcmp(p1>mobilenew>mobile))0||
(strcmp(p1>phonenew>phone))0)
{
printf(记录已存\n)
printf(\n20s15s15s50s\np1>namep1>mobilep1>phonep1>address)
printf(否继续添加?1 继续添加\t数字键重新输入\n)
scanf(d&n)
if(n1)
break
else
goto aa
}
p1p1>next
}while(p1NULL)
p1head
if(headNULL) *检测否空链表*
{
headnew *链表空插入结点作第结点*
new>nextNULL
}
else
{
while((p1>nextNULL)&&(strcmp(p1>namenew>name)<0))
{
p2p1
p1p1>next
}
if((strcmp(p1>namenew>name)>0))
{
if(headp1)
{
new>nexthead
headnew
}
else
{
p2>nextnew
new>nextp1
}
}
else
{
p1>nextnew
new>nextNULL
}
}
}
void save() *数写入文件*
{
tel *p1NULL
FILE *fp
if((fpfopen(filenamew))NULL)
{
printf(开文件\n)
return
}
p1head
for(p1NULLp1p1>next)
{
fprintf(fps\t\ts\t\ts\t\ts\n
p1>name
p1>mobile
p1>phone
p1>address)
}
printf(操作完毕\n)
fclose(fp)
}
void add( ) *控制添加记录*
{
int x1
printf(开始添加纪录添加记录程中0 停止添加\n)
while(x0)
{
do
{ creatnew()
printf(操作完成\n)
break
}while(1)
printf(结束添加 数字键继续添加\n)
scanf(d&x)
if(x0)
{
save()
system(cls)
}
}
}
void openfile() *输出文件链表*
{
FILE *fp
tel *p1NULL*p2NULL
headNULL
if((fpfopen(filenamer))NULL) *开文件*
{ *文件存表明第次电话簿*
printf(\n\t\t\t********新电话簿*********\n)
return
}
while(feof(fp) ) *循环读取文件数*
{
p1(tel*)malloc (sizeof(tel))
fscanf(fpssss\np1>namep1>mobilep1>phonep1>address)
if(headNULL)
{
headp1
p1>nextNULL
p2p1
}
else
{
p2>nextp1
p1>nextNULL
p2p1
}
}
fclose(fp)
}
void show() *显示全部记录*
{
tel *p1NULL
if(headNULL) *判断否空链表*
{
printf(\n\t\t\t电话簿中没记录请输入纪录\n)
printf(\t\t\t意键返回)
getch()
system(cls)
return
}
p1head
printf(20s15s15s50s\n姓名手机号码电话号码家庭住址)
do
{ * system(color 04)*
printf(\n20s15s15s50sp1>namep1>mobilep1>phonep1>address)
p1p1>next
}while(p1NULL)
printf(\t\t\t意键返回)
getch()
system(cls)
}
tel* searchname()*姓名查找*
{
tel *p2NULL
printf(\t\t请输入姓名)
p2(tel *)malloc(sizeof(tel))
scanf(sp2>name)
return p2
}
tel* searchmobile()*手机号码查找*
{
tel *p2NULL
printf(\t\t请输入手机号码)
p2(tel *)malloc(sizeof(tel))
scanf(sp2>mobile)
return p2
}
tel* searchphone()*家庭电话查找*
{
tel *p2NULL
printf(\t\t请输入家庭电话)
p2(tel *)malloc(sizeof(tel))
scanf(sp2>phone)
return p2
}
tel* searchaddress() *址查找*
{
tel *p2NULL
printf(\t\t请输入址)
p2(tel *)malloc(sizeof(tel))
scanf(sp2>address)
return p2
}
void searchshow() *显示查找选项*
{
system(cls)
printf(\t\t\t1 姓名\n)
printf(\t\t\t2 手机号码\n)
printf(\t\t\t3 家庭电话\n)
printf(\t\t\t4 家庭住址\n)
}
tel* dimsearch() *模糊查找*
{ int ij0m
tel *p1NULL*p2NULL*pNULL
searchshow()
lp
scanf(d&i)
if(i>1&&i<4)
switch(i)
{
case 1p2searchname()break
case 2p2searchmobile()break
case 3p2searchphone()break
case 4p2searchaddress()break
}
else
{
printf(选择错误请重新选择\n\n)
goto lp
}
p1head
while(p1NULL)
{
if((strstr(p1>namep2>name))||(strstr(p1>mobilep2>mobile))||
(strstr(p1>phonep2>phone))||(strstr(p1>addressp2>address)))
{
printf(20s15s15s50s\n姓名手机号码电话号码家庭住址)
printf(20s15s15s50s\np1>namep1>mobilep1>phonep1>address)
j1
printf(否条记录?确定条记录\t数字键继续\n)
scanf(d&m)
if(m1)
break
}
pp1
p1p1>next
}
printf(\n)
if(j0||p1NULL)
{if(j0&&p1NULL)
{printf(\t\t\t没找相关记录)
z0
}
if(j0&&p1NULL)
{
printf(\t\t\t没找相关记录)
x0
}
if(j0&&p1NULL)
{
printf(\t\t\t没找相关记录)
z0x0
}
}
printf(\n\n)
printf(\t\t\t意键返回)
getch()
system(cls)
return p
}
tel * search()
{ int ij0
tel *p1NULL*p2NULL*pNULL
loop searchshow()
scanf(d&i)
if(i>1&&i<4)
switch(i)
{
case 1p2searchname()break
case 2p2searchmobile()break
case 3p2searchphone()break
case 4p2searchaddress()break
}
else
{
printf(选择错误请重新选择\n\n)
goto loop
}
p1head
while(p1NULL)
{
if((strcmp(p1>namep2>name))0||(strcmp(p1>mobilep2>mobile))0||
(strcmp(p1>phonep2>phone))0||(strcmp(p1>addressp2>address))0)
{
printf(找记录:\n)
printf(20s15s15s50s\n姓名手机号码电话号码家庭住址)
printf(\n20s15s15s50sp1>namep1>mobilep1>phonep1>address)
break
}
pp1
p1p1>next
}
if(p1NULL)
{
printf(\t\t\t电话中记录\n\n)
printf(\t\t否重新进行?1 继续\t数字键模糊查找\n\n)
scanf(d&i)
if(i1)
{
free(p2)
goto loop
}
else
{
system(cls) * 精确查找没记录进行模糊找找*
pdimsearch()
}
}
return p
}
void modify() *修改记录函数*
{
tel *newsearch()
if(z0)
else
if(x0)
else if(z0&&x0)
else
{ if(newNULL)
{
printf(请输入新纪录:\n)
printf(\t\t\t请输入姓名)
scanf(shead>name)
printf(\t\t\t请输入手机号码)
scanf(shead>mobile)
printf(\t\t\t请输入家庭电话)
scanf(shead>phone)
printf(\t\t\t请输入家庭住址)
scanf(shead>address)
save()
}
else
{
printf(请输入新纪录:\n)
printf(\t\t\t请输入姓名)
scanf(snew>next>name)
printf(\t\t\t请输入手机号码)
scanf(snew>next>mobile)
printf(\t\t\t请输入家庭电话)
scanf(snew>next>phone)
printf(\t\t\t请输入家庭住址)
scanf(snew>next>address)
save()
}
}
printf(\n\n)
printf(\t\t\t意键继续)
getch()
system(cls)
}
void del() *删记录函数*
{
tel * p2search()
int i
if(z0)
else
if(x0)
else if(z0&&x0)
else
if(p2NULL)
{
printf(\n\n\n确实删?\t1 删\t数字保留\n)
scanf(d&i)
if(i1)
headhead>next
save()
printf(\t\t\t意键返回)
getch()
system(cls)
}
else
{
printf(\n\n\n确实删?\t1 删\t数字保留\n)
scanf(d&i)
if(i1)
{
p2>nextp2>next>next
save()
}
printf(\t\t\t意键返回)
getch()
system(cls)
}
}
void fre() * 释放链表空间*
{
tel *phead
while(headNULL)
{
headhead>next
free(p)
phead
}
free(head)
}
main()
{
int xm
openfile()
system(color 9a)
while(1)
{
showmenu()
fflush(stdin)
printf(请作出您选择)
scanf(d&x)
if(x>0&&x<6)
{
switch(x)
{
system(cls)
case 1add()break *添加记录函数*
case 2modify()break *修改记录函数*
case 3search()break *查找记录函数*
case 4del()break *删记录函数*
case 5show()break *显示全部记录*
case 6dimsearch()break *模糊查找*
case 0fre()printf(\n\t\t欢迎次通讯录理系统见\n\n)exit(0)
}
}
else
printf(\n\n选择错误请次选择\n)
}
getch()
}
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档