C语言实训报告(手机通讯录)


    通讯录
    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)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 2 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    计算机专业c语言实训报告

    计算机专业c语言实训报告  通过c语言实训,让我加深了对c语言的了解,而不只是单单的在课本中学到的那些理论,平时乏味的课程,通过自己动手亲自编写,变的生动有趣,而在自己动手的过程中,出现的问题...

    12年前   
    577    0

    c语言实验报告

    c语言实验报告  学号:__________    姓名:__________    班级:__________    日期:__________   指导教师:__________    成...

    11年前   
    792    0

    C语言实验报告《指针》

    C语言实验报告《指针》  学号:__________    姓名:__________    班级:__________    日期:__________   指导教师:__________ ...

    11年前   
    953    0

    C语言实验报告《数组》

    C语言实验报告《数组》  学号:__________    姓名:__________    班级:__________    日期:__________  指导教师:__________  ...

    11年前   
    881    0

    2021年C语言实训学习心得总结

     2021年C语言实训学习心得总结撰写人:___________日 期:___________2021年C语言实训学习心得总结在初学C语言的一个学期后,我们进行了C语言实训阶段,尝试编写一个...

    3年前   
    495    0

    C语言通讯录报告及源代码

    XX学院《C语言程序设计》课程设计报告 学 院:_电气与信息工程学院_ 专业班级: 计科班 学生姓名: 学 号: ...

    3年前   
    354    0

    C语言实验报告《函数》

    C语言实验报告《函数》  学号:__________    姓名:__________    班级:__________    日期:__________  指导教师:__________  ...

    12年前   
    1357    0

    C语言实验报告《综合实验》

    C语言实验报告《综合实验》  学号:__________    姓名:__________    班级:__________    日期:__________  指导教师:__________...

    10年前   
    866    0

    C语言作业:学通讯录

    学生通讯录一、 语言和环境1. 实现语言:C语言。2. 环境要求:devC++。二、 实现功能开发一套学生通讯录C语言系统,具体实现如下功能:1. 打开系统显示欢迎界面,以及功能菜单,用户输入...

    3年前   
    719    0

    QQ手机通讯录产品体验

    QQ手机通讯录体验优点1. 操作界面简洁明了,易于新上手的人使用2. 颜色搭配好看3. 选中某个联系人后,有拨打电话、拨打IP电话、发送信息、发送名片,联系人管理(编辑、删除、加入分组)五个选...

    10年前   
    514    0

    C语言课程设计通讯录管理系统

     课程设计报告书 课程名称: C语言课程设计 班 级: 学 号: ...

    5年前   
    2398    0

    2021年c语言实验报告分析总结

     2021年c语言实验报告分析总结撰写人:___________日 期:___________2021年c语言实验报告分析总结在科技高度发展的今天,计算机在人们之中的作用越来越突出。而c语言...

    3年前   
    555    0

    操作系统实验报告C语言实现银行家算法

    实 验 报 告题 目名 称C语言实现银行家算法院 系信息科学与工程学院班 级完成时间指导老师本次实验成绩组长联系电话邮件地址组员(姓名,学号)主要任务程序算法的编写、实现、运行调...

    3年前   
    467    0

    C语言实验报告《逻辑结构程序设计》

    C语言实验报告《逻辑结构程序设计》  学号:__________    姓名:__________    班级:__________    日期:__________   指导教师:_____...

    12年前   
    740    0

    C语言课程设计学生通讯录管理系统设计

    C语言课程设计学生通讯录管理系统设计一、题目内容的描述学生通讯录管理系统设计设计一个学生通信录,学生通迅录数据信息构成内容可自行设计(如:姓名、家庭地址、邮政编码、电话号码等等),通信录数据类...

    4年前   
    720    0

    高考文言实词训练题

    高考文言实词训练题总分:500分 限时:40分钟 答对一题得5分,答错倒扣2分,不答不得不扣分。1.选出与“向使三国各爱其地”的“爱”意义相同的一项是( ) A.秦爱纷奢...

    12年前   
    403    0

    C语言实践实习工作个人心得体会汇编

    C语言实践实习工作个人心得体会 在科技高度发展的今天,计算机在人们之中的作用越来越突出。而c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语...

    5年前   
    1011    0

    10干事通讯录

    电子信息学院第九届干事通讯录 部门 姓名 班级 长号 短号 QQ号 寝室号 办公室 董立华 电信班 15072505868 619225 598373308 A1-...

    5年前   
    1349    0

    工作人员通讯录

    工作人员通讯录张亮 62761361李沁陶晓琨 1275773383(传呼)宫巧荣 13911272466李志芳 6...

    10年前   
    727    0

    2014春节手机问候语

    2014春节手机问候语  2014春节手机问候语&马年祝福语  玉马年,喜连连,快快乐乐贴春联;金虎去,玉兔来,东西南北换新颜;年丰收,吉祥言,春夏秋冬好运连;中国年,福连连,玉兔给力贺新年。...

    10年前   
    338    0

    文档贡献者

    文***享

    贡献于2021-07-28

    下载需要 2 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档