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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(电话号码簿管理系统课程设计报告Word格式文档下载.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

电话号码簿管理系统课程设计报告Word格式文档下载.docx

1、1、 create 建立新的电话号码簿2、 load 读取电话号码簿3、 print 打印电话号码簿4、 search 查询电话号码5、 delete 删除电话号码6、 append添加新的电话号码7、 modify修改电话号码8、 exit 退出电话号码簿管理系统请选择1-8之间的操作图2 电话号码簿管理系统主界面菜单2.1.2根据所选菜单编写相应代码定义结构体类型struct tel,数据域char name15; char tel12;指针域ID *next(ID表示#define ID struct tel )。1、 创建函数create:利用循环输入的方式,将有关信息存入结构体,结构

2、体根据实际的人数,采用动态方式建立单链表存储所有联系人信息,最后返回头指针head。 保存函数save:头指针作形式参数,利用文件函数fopen建立一个文本文件来存放电话号码簿,将单链表中的联系人信息用循环的方式和函数fwrite写入文件,无返回值。2、 读取函数load:无形式参数,利用文件函数fopen打开建立过的文本文件,在循环中利用fread函数依次读出文件中的信息,返回头指针。3、 打印函数print:头指针作形式参数,定义一个临时变量ID *temp,利用此变量遍历单链表,同时输出联系人信息,如果没有联系人信息,则输出提示,无返回值。4、 查询函数search:头指针作形式参数,利

3、用双重循环,并且在内层循环中利用if语句实现查询功能,内层循环用来遍历单链表,外层循环用来实现是否继续查找功能,无返回值。5、 删除函数delete:头指针作形式参数,利用双重循环,并且在内层循环中利用if语句实现查询并删除功能,内层循环用来遍历单链表,外层循环用来实现是否继续删除功能,无返回值。6、 添加函数append:无形式参数,定义一个变量ID *temp,新联系人信息赋值予此变量中,利用fopen函数打开在create函数中建立的文件,在循环中依次输入联系人信息并利用fwrite函数将添加的信息存入文件中,无返回值。7、 修改函数modify:头指针作形式参数,利用双重循环,内层循环

4、用来遍历单链表,同时利用三个if语句分别找到待修改记录、确定是否修改、确定是否保存。外层循环用来实现是否继续修改。2.2 模块图图3 电话号码簿管理系统模块图2.3 部分模块流程图1主模块流程图*haed=NULL1?输出主菜单输入选择(吸收回车) 调用各子函数图4主模块流程图2 create模块流程图*head=*p1=*p2=NULL为p1分配内存空间输入姓名 输入的是#是 否total=0是否返回head退出循环输入电话号码head=NULL head=p1p2=p1p2-next=p1total=total+1next=NULL释放空间输出提示(是否存盘?)(吸收回车)输入选择Save

5、flag=Y|saveflag=y调用save函数返回 head图 5 create模块流程图第3章 程序代码设计3.1 create模块1、函数原形:ID* create()2、功 能:利用while循环语句scanf、getchar、prinf、malloc、free函数完成对单链表的输入,存放n个联系人的信息(姓名、电话号码)。3、变量及类型:int total:记录结点个数,定义为全局变量。ID *head=NULL,*p1,*p2:结构体指针,p1、p2为全局变量,创建单表所需的变量。char saveflag:控制是否保存的变量。4、说明:首先将save模块在外部声明(便于其它模块

6、调用),执行完输入函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数 (其它模块中也有类似情形。)ID使用的是宏定义 #define ID struct tel 。5、代码:见附录。3.2 save模块void save(ID* head)利用文件指针fp及文件函数fopen、fwrite 、fclose将联系人信息存入磁盘。FILE *fp:定义文件指针(外部变量,便于其它函数使用)。ID * t:可以移动的指针,作用:从头到尾遍历一遍单链表,向文件写入。fp=fopen(telephone.

7、txt,w)以只写形式在当前目录下建立文件telephone.txt。fwrite(t,sizeof(ID),1,fp)向文件中写入数据,t表示输出数据的首地址,1表示数据块个数,数据块大小为sizeof(ID),fp是文件指针。 3.3 load模块ID* load()while循环语句fopen、fread、feof、fclose 、malloc函数读取文件telephone.txt中的信息。ID *t1,*t2,*head=NULL:结构体指针,遍历单链表所需的变量。t1=(ID *)malloc(sizeof(ID)申请空间,以便于存放从文件中读取的内容。while(!feof(fp)

8、当文件不处于结束位置时循环,fread(t1,sizeof(ID),1,fp) 读取文件中数据,t表示输出数据的首地址,1表示数据块个数,数据块大小为sizeof(ID),fp是文件指针。3.4 print模块void print(ID* head)利用while循环语句printf函数依次输出联系人信息。ID* temp:临时变量,用来遍历单链表。system(cls)清屏,while(temp!=NULL)当单链表未遍历完时循环。如果head=NULL,则输出提示(当前电话号码簿为空)。3.5 search模块void search(ID *head)利用双重循环查找,内层循环用来查找并输

9、出,外层循环用来确定是否重新查找。int flag,searchflag=1:flag用来确定是否找到待查找记录的变量,searchflag用来确定是否重新查找(循环)的变量,searchflag=1时循环。char c choice:c表示待查姓名的首字母,choice表示用户的选择,是否重新查找。其中用到全局变量p1、p2来遍历单链表,判断语句if(p1-name0 =c)用来确定是否找到待查记录。3.6 delete模块void delete(ID *head)利用双重循环查找,内层循环用来查找并删除,外层循环用来确定是否继续查找。flag用来确定是否找到待删除记录的变量,searchf

10、lag用来确定是否重新查找(循环)的变量,searchflag=1时循环。char c choice d:c表示待查姓名的首字母,choice表示用户的选择,是否继续删除,d表示用户的选择,是否确认删除,确认删除后调用save函数。整体上和search函数类似,先查找到待删除结点,找到后利用 if(p1=head) head=p1-next;else p2-next=p1-语句删除结点,p1指向的是待删结点,p2所指的是p1所指结点的前一个结点。3.7 append模块void append()利用while循环语句malloc、free、fopen、fwrite、fclose函数依次添加联系

11、人信息。int flag=1:控制是否循环(继续添加联系人)的变量,flag为1时继续添加。 ID* temp:临时变量,用来存放新联系人信息。 char choice:用户的选择,控制flag中的值及是否跳出循环。使用文件的方式为”a+”(允许在文件末尾追加数据),在循环中,每添加一次,要为temp分配一次空间,添加过后释放空间。3.8 modify模块void modify(ID *head)2、功能:利用双重循环查找,内层循环用来查找并修改,外层循环用来确定是否继续修改。flag用来确定是否找到待修改记录的变量,searchflag用来是否重新查找(循环)的变量,searchflag=1

12、时循环。char c, choice ,d,s:c表示待查姓名的首字母,choice表示用户的选择,是否继续修改,d表示用户的选择,是否确认修改,s表示用户的选择,是否保存修改后的记录(调用save函数)。整体上和search函数类似,找到待修改信息后直接对该结点数据域重新赋值即可。第4章 C程序设计总结4.1 程序调试本人在程序设计中遇到的困难、收获,如何解决问题以及感想。4.1.1程序调试情况调试方法:每编好几个模块(包括相关模块),调试一次。运行程序,出现如图主界面:图6电话号码簿管理系统主界面输入指令数1后给予提示:请输入姓名,以#作为结束的标志:创建电话号码簿后,保存,打印正常。lo

13、ad、search 模块写好后,根据上一次创建的电话簿读取,然后查找,运行正常。调试delete模块时,出现情况:删除一个记录后,无法继续进行删除。如图:图7 delete模块调试情况如果输入y,按提示操作,输入已有姓名首字母,却迅速显示一些提示后退出该功能。查找原因后,发现在循环末尾少一句getchar()来吸收回车,由于回车作为首字母字符,故所有输入的字符都作为了下一个字符变量的值,从而导致判断失误。加上getchar()后程序运行正常。收获:在循环语句中如果循环末尾和开头都有字符输入,应在末尾吸收回车或在开头输入字符前吸收回车。append模块的调试:添加记录后调用save函数保存,出现

14、提示,错误的内存指令一系列信息。思考:第一次编写此模块源代码时将添加的记录直接调用save函数,而save函数中的文件使用方式是”w”,这种调用不符合添加规则,故无法调用save函数。修改:在此模块中打开已建立的文件,打开方式为”a+”,然后依次将新记录追加写入文件。4.1.2 感想 经此次设计,使我了解了设计一个软件的的大致开发流程,当遇见情况时的处理措施,还有独立解决问题和与他人交流合作的能力。虽然有了点经验,但还是感觉不足,对计算机方面的一些设计思想不是清晰,还没有形成自己的编程风格。我认为有待进一步学习。谢 辞感谢班主任王老师的指导,感谢同学的交流与讨论,感谢父母的资助。参 考 文 献

15、 1 郭有强,C语言程序设计,清华大学出版社。2 谭浩强,C程序设计,清华大学出版社。3 刘振安,孙忱,刘燕君,C程序设计课程设计,机械工业出版社。4 汪诗林,数据结构算法与应用,机械工业出版社。附录 程序清单#include stdio.hstdlib.hstring.hconio.h /*不是C标准的头文件,表示console input/output */#define ID struct tel struct tel char name15; ID * next;void save( );int total=0;ID *p1,*p2;/*创建单链表函数*/ ID *head=NULL,

16、*p1,*p2; char saveflag; head=p1=p2=NULL; /*p1是新开辟的指针,p2的作用是连接链表的尾部和新开辟的结点 */ printf(tttt 欢迎使用n); while(1) p1=(ID*)malloc(sizeof(ID);n scanf(%s,p1-name); if(strcmp(p1-name,#)=0) if(total=0)你输入了0条记录,单链表没有创建.n free(p1); return head; break;请输入电话号码:tel); if(head=NULL)/*第一次执行,以后不执行*/ head=p1; p2=p1; else

17、p2-next=p1; total+;next=NULL;/*收尾工作*/ getchar();/*吸收回车*/新建电话号码簿成功,共有%d个联系人,是否存盘? Y/N t,total);%c,&saveflag); if(saveflag= save(head); /*保存单链表函数*/FILE *fp; /*定义文件指针*/ ID* t; /*定义一个可以移动的指针,作用:从头到尾遍历一遍单链表,向文件中写入*/ if(fp=fopen()=NULL)ttt 打开文件失败!不存在该文件。 getch(); /*从键盘上等待用户输入一个字符*/ exit(1);ttt 正在保存文件,请稍.n

18、 t=head; while(t!=NULL) fwrite(t,sizeof(ID),1,fp); t=t- fclose(fp);ttt 文件保存成功!/*读取单链表函数*/ ID *t1,*t2,*head=NULL;r/*等待用户输入一个字符*/ t1=(ID *)malloc(sizeof(ID); /*申请空间,以便于存放从文件中读取的内容*/ head=t1; while(!feof(fp) if(fread(t1,sizeof(ID),1,fp)!=1)/*如果没有读取的内容,则结束*/ t1-next=(ID *)malloc(sizeof(ID); t2=t1; t1=t1

19、- t2-ttt 文件读取完毕!) ;/*打印单链表函数*/ ID* temp; temp=head; system( /*清屏*/姓名 tt 电话号码n if(head=NULL)tt 当前电话簿为空,请先创建新的号码或加载文件n do printf(%stt %sn,temp-name,temp- temp=temp- while(temp!=NULL);/*创建查找函数*/tt欢迎使用查找功能,请输入待查找姓名的首字母n int flag,searchflag=1; char c,choice; while(searchflag) 请输入待查姓名的首字母:c); p1=head; fla

20、g=0;while(p1! if(p1-name0=c)姓名:%st电话号码:%snname,p1- flag=1; p2=p1; p1=p1- /*p1指针向后移动一位*/ if(flag=0)ttt 对不起,未能找到符合条件的记录。ttt 查找完毕,是否重新查找? Y/Ntchoice);getchar(); if(choice=|choice=) searchflag=1; else /*创建删除函数*/ char c,choice,d;请输入待删除姓名的首字母: while(p1!ttt 是否删除该记录?d); if(d=|d= if(p1=head) head=p1-ttt 完成,是否继续删除?/*创建添加函数*/ int flag=1; char choice;a+ while(flag) temp=(ID*)malloc(sizeof(ID);请输入新联系人姓名:n请输入新联系人的电话号码: fwrite(temp,sizeof(ID),1,fp); free(temp);ttt 添加完毕,是否继续添加? if(ch

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2