欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    优秀毕业论文——基于c语言实现电话簿管理系统.doc

    • 资源ID:10119630       资源大小:517.49KB        全文页数:26页
    • 资源格式: DOC        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    优秀毕业论文——基于c语言实现电话簿管理系统.doc

    课程设计(论文)电话簿管理系统VER1.0报告书系 别 :计算机科学与技术系专业(班级):计算机科学与技术10级1班作者(学号):汪雨生(51002011037)指导教师:王磊(硕士)完成日期: 2011年6月15日蚌埠学院教务处制目 录摘要3第一章前言4第二章 电话簿管理系统介绍52.1 流程图52.2 程序编写概要6第三章 主要功能实现73.1 删除功能设计73.2 添加功能设计7第四章源程序9第五章系统测试20第六章结语25致谢26参考文献26摘要 电话簿管理系统是利用单链表实现电话簿管理,进而掌握C语言中的结构体、链表,指针、函数(系统函数,自定义函数)等C语言知识。 本文通过利用模块化程序设计思想,使用单链表和结构体等编写出的可以实现存储、打印、删除等功能的电话簿管理系统。通过完成这个课程设计让我们熟悉并掌握在c语言中使用结构体、单链表,指针,函数,和模块化设计思想。关键词 结构体,链表,指针,函数第一章 前言 在前面我们学习了c语言的一些基础知识对c语言有了初步的认识和了解,为了让我们更加全面地了解c语言程序设计的步骤和方法,在老师的指导下 我们进行了一次综合实训。设计一个简单的电话簿管理系统,可以存储,删除等电话号码。为了方便使用DEV-C+来编写程序,可以添加汉字备注方便理解程序。根据前面所学的单链表、指针、函数、结构体等知识在使用模块化设计思想去编写。设计“通讯录管理系统”使其具有数据插入、修改、删除、显示和查询等功能。使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。使学生掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力。使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。其功能包括以下各项:1)数据包括:人名、电话号码。2)可对记录中的姓名和电话号码进行修改。3)可增加或删除记录。4)可显示所有保存的记录。第二章 电话簿管理系统介绍2.1 流程图电话簿管理系统因具备以下功能有流程图表示,如下图2.10电话簿管理系统新建一个电话簿插入新的记录打印所有记录读取文件保存当前输入的内容退出系统查找功能添加新记录图2.102.2程序编写概要1 主函数 main()主函数使用户进入电话簿管理系统主界面用户选择界面,用户可以选择要使用的功能并选择相应的选项进入该功能。使用printf函数和switch case结构来编写主函数。2 creat()函数creat函数用来建立新的电话号码簿,用户可以通过它来向系统输入数据。为下面的操作提供数据。3 delete函数delete函数用来删除不需要的数据,可以用单链表来实现,并要记住用free函数来释放被删除链表的空间,避免浪费空间。4 save函数当需要保存已输入的数据时就需要用到save函数,该函数可以将数据存储到指定的地方为以后使用。5 load函数顾名思义load函数是将所存的数据从文件所在位置读取出来以便做打印等处理。6 search函数当存入很多文件时候,再用普通的方法打印输出所有数据再查找文件中的目标文件就会很麻烦,这时你需要从已存文件中快速找出你所想要的用户的电话号码就要选择此功能,他可以快速找出你所输入用户名的电话号码,简单方便。7 append函数Append函数用来像已有的文件中添加新的电话号码文件。8 modify函数在你无意中或心急的时候很有可能将数据输入错误,所以你还需要具有修改数据的功能,将错误的数据重新输入在进行保存工作,确保数据的正确性,modify函数具有该功能。第三章 主要功能实现3.1 删除功能设计 单链表中的元素是可以删除的,要想删除指定的元素逻辑上是把它从单链表中分离出来,并调用free函数释放其储存空间。 算法如下: 删除链表中的第i个结点,就是要让其前驱的指针绕过该结点,指向该结点的后续结点。假设指针P已经指向链表中的第i-1个结点,如图3.10所示。则删除ai结点最基本的操作可以用一条语句实现:p->next=p->next->next。ai+1NULLa1aiai-1 head p图3.10这样操作会浪费掉所有删除的结点空间。如果被删除的结点不再使用了,则释放其存储空间,因此需要按如下方式实现:temp=p->next;p->next=temp->next;free(temp);3.2 添加功能设计 链表的插入是指将一个结点插入到一个已有的链表中去。 算法如下: 首先产生新结点,并放入数据,然后搜索要插入的位置,再将结点连入到已有链表中。设指针p已经指向了ai-1结点,且要插入结点(值为data)由s指向,如图3.20所示,则插入的操作由下面两个语句来实现。 s->next=p->next; p->next=s; 上面的两条插入语句顺序不可颠倒。 P ai-1 ai X data S 图3.20第四章 源程序 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> /*不是c标准的文件。*/ #define ID struct tel struct tel char name10; char tel11; ID * next; ; int total=0; ID* create() ID *head,*p1,*p2; void save(ID *head); char saveflag; head=p1=p2=NULL; printf("欢迎使用电话簿管理系统VER1.0n"); while(1) p1= (ID*)malloc(sizeof(ID); printf("请输入姓名,以#作为结尾n"); scanf("%s",p1->name); if(strcmp(p1->name,"#")=0) if(total=0) printf("你输入了0条记录,单链表没有创建.n"); free(p1); return (head); else break; printf("请输入电话号码: n"); scanf("%s",p1->tel); if(head=NULL) head=p1; p2=p1; else p2->next=p1; p2=p1; total+; p2->next=NULL; free(p1); printf("n新建电话号码簿成功,共有%d个联系人,是否保存?Y/N n ",total); getchar(); scanf("%c",&saveflag); if(saveflag=y|saveflag=Y) save (head); else printf("n请在退出程序之前,保存当前的编辑工作!n"); return head; void print(ID *head) ID* temp; temp=head; system("cls");/*清屏*/ printf("姓名: t电话号码:n"); if(head=NULL) printf("当前链表为空,请先创建新的链表或者加载文件n"); else do printf("%st%sn",temp->name,temp->tel); temp=temp->next; while(temp!=NULL); void save(ID *head) FILE *fp; ID* t ; /*定义一个可以移动的指针,作用:从头到尾遍历一遍单链表,向文件中写入*/ if (fp=fopen("telephone.txt","w")=NULL) printf("打开文件失败!n"); getch(); exit(1); printf("正在保存文件,请稍候.n"); t=head; while(t!=NULL) fwrite(t,sizeof(ID),1,fp); t=t->next; fclose(fp); printf("文件保存成功n"); ID * load() FILE *fp; ID *t1,*t2,*head=NULL; char ch; if(fp=fopen("telephone.txt","r")=NULL) /*判断文件是否存在*/ printf("打开文件失败!没有该文件n"); getch(); exit(1); ch=fgetc(fp); /*判断文件是否为空*/ if(ch=EOF) printf("文件为空,请重新建立一个电话簿n"); return (head); else printf("文件正在读取中.n");rewind(fp); t1=(ID *) malloc(sizeof(ID); head=t1; while(!feof(fp) if(fread(t1,sizeof(ID),1,fp)!=1) break; /*如果没有读取的内容,则结束*/ t1->next=(ID *)malloc(sizeof(ID); t2=t1; t1=t1->next; t2->next=NULL; fclose(fp); printf("文件读取完毕n"); return head; void search(ID* head) printf("欢迎使用查找功能,只需要输入待查找者姓名的首字母: n"); ID* p; int flag,searchflag=1; char c,choice; while(searchflag) flag=0; printf("n请输入待查找者姓名的首字母: n"); scanf("%c",&c); getchar(); p=head; while(p!=NULL) if(p->name0=c) printf("姓名: %st电话号码: %sn",p->name,p->tel); flag=1; p=p->next; /*p1指针向后移动一位*/ if(flag=0) printf("n对不起,未能找到符合条件的记录n"); printf("n查找完毕,是否需要重新查询? Y/N"); scanf("%c",&choice); getchar(); if(choice=y|choice=Y) searchflag=1; else searchflag=0; system("cls"); ID* delete_(ID *head) ID *p1,*p2; char saveflag; p1=p2=head; char s10;/*存放查找姓名*/ system("cls"); printf("请输入要删除的姓名: "); scanf("%s",s); while(strcmp(p1->name,s)&&p1!=NULL) p2=p1; p1=p1->next; if(p1=NULL) printf("对不起,没有找到要删除的姓名记录,请检查你要删除的姓名是否正确"); else printf("你要删除的电话记录为:n"); printf("姓名 %st电话号码 %sn",p1->name,p1->tel); printf("请确定是否要删除该记录?Y/N?n"); getchar(); scanf("%c",&saveflag); if(saveflag=y|saveflag=Y) getchar(); if(p1=head) head=p1->next; else p2->next=p1->next; free(p1); printf("正在删除记录,请稍后.n"); printf("该电话记录已删除成功,是否存盘?Y/N?n"); getchar();/*吸收回车*/ scanf("%c",&saveflag); if(saveflag=y|saveflag=Y) save(head); else printf("请在退出之前保存当前的编辑工作!n"); else printf("该电话记录没有被删除 n"); return(head); /*添加单链表*/ID* append(ID* head) char saveflag; ID *p1,*p2,*info; p1=p2=head; info=(ID*)malloc(sizeof(ID); system("cls"); while(p1!=NULL) p2=p1; p1=p1->next; printf("请输入添加的姓名:"); scanf("%s",info->name); printf("请输入添加的号码:"); scanf("%s",info->tel); info->next=NULL; if(p1=head) head=info; else p2->next=info; printf("新添加电话号码成功,是否存盘?Y/N?n"); getchar();/*吸收回车*/ scanf("%c",&saveflag); if(saveflag=y|saveflag=Y) save(head); else printf("请在退出之前保存当前的编辑工作!n"); return(head);/*修改单链表*/ID* modify(ID* head) ID *p1;ID *p2; char saveflag; p1=p2=head; char s10;/*存放查找姓名*/ system("cls"); printf("请输入要修改的姓名: "); scanf("%s",s); while(strcmp(p1->name,s)&&p1!=NULL) p2=p1; p1=p1->next; if(p1=NULL) printf("对不起,没有找到要修改的姓名记录n"); else printf("你要修改的电话记录为:n"); printf("姓名 %st电话号码 %sn",p1->name,p1->tel); printf("请输入修改后的号码: "); scanf("%s",p1->tel); printf("该电话记录已修改成功n"); printf("新建电话号码成功,是否存盘?Y/N?n"); getchar();/*吸收回车*/ scanf("%c",&saveflag); if(saveflag=y|saveflag=Y) save(head); else printf("请在退出之前保存当前的编辑工作!n"); return(head); int main() ID *head=NULL; /*struct tel * head;*/ int choice; /*代表用户的选择*/ while(1) /*死循环*/ printf("n"); printf("n"); printf("n"); printf("tt * n "); printf("tt * 欢迎使用 * n "); printf("tt * n "); printf("tt *电话簿管理系统VER1.0*n"); printf("tt * 1 create 建立新的电话号码簿 *n"); printf("tt * 2 delete 删除新的电话号码 *n"); printf("tt * 3 print 打印电话号码 *n"); printf("tt * 4 save 保存电话号码簿 *n"); printf("tt * 5 load 读取电话号码簿文件 *n"); printf("tt * 6 search 查找电话号码 *n"); printf("tt * 7 append 添加新的电话号码 *n"); printf("tt * 8 modify 修改电话号码 *n"); printf("tt * 9 exit 退出电话号码簿系统 *n"); printf("tt *电话簿管理系统VER1.0*n"); scanf("%d",&choice); getchar(); /*吸收回车*/ switch(choice) case 1: head=create(); break; case 2: head=delete_(head); break; case 3: print(head); break; case 4: save(head); break; case 5: head=load(); break; case 6: search(head); break; case 7: head=append(head); break; case 8: head=modify(head); break; case 9: exit(0);break; default:printf("选择错误,请在1-9之间选择n"); return 0; 第五章 系统测试1主界面2输入内容3打印内容4删除说明删除成功,程序基本成功5查找6增加7修改第五章 结语这次的程序实设计实验是对我们进入大学以来学习程序设计语言结果的一次大检验。自己动手,自己发现和解决问题。发现了自己的许多不足。平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大部分问题,当然还存在一些问题没有解决。我相信在以后的学习能够解决好它们。但是,收获还是不小的,我不仅对C的操作有了进一步的掌握,还了解到了程序设计的书写风格及其注释的格式。当我选择通讯录这个题目时,一开始想运用大量链表及指针来完成,但是在慢慢琢磨之后,觉得这个不一定要用链表,于是改变了编程思路。当然还有不少文件的读写问题,不过还是通过不断测试之后顺利解决了。还有一点体会就是,书上和老师教的内容是有限的,我们需要不断地靠自己去学习,向他人请教,了解和掌握更多的知识,这样我们才能编出更好的C程序。总体来说,这次C语言程序设计实验还是比较成功的,虽然最终程序还存在一些不足,但能取得这样的成绩我还是比较高兴的。致谢 在整个程序设计的过程中,王老师给了我们很大的帮助,从论文的排版到程序的设计在到上机得调试老师不怕麻烦一一为我们指导,感谢王老师的重要帮助。参考文献1郭有强,C语言程序设计,清华大学出版社2谭浩强,C程序设计,清华大学出版社3刘振安,孙忱,刘燕君,C程序设计课程设计,机械工业出版社4汪诗林,数据结构算法与应用,机械工业出版社5李云清,杨庆红,揭安全.数据结构(C语言版)M. 北京:人民邮电出版社6李春葆. 数据结构(C语言版)习题与解析M.北京:清华大学出版社25

    注意事项

    本文(优秀毕业论文——基于c语言实现电话簿管理系统.doc)为本站会员(数据九部)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开