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

上传人:b****1 文档编号:5028307 上传时间:2023-05-04 格式:DOCX 页数:28 大小:81.32KB
下载 相关 举报
电话号码簿管理系统课程设计报告Word格式文档下载.docx_第1页
第1页 / 共28页
电话号码簿管理系统课程设计报告Word格式文档下载.docx_第2页
第2页 / 共28页
电话号码簿管理系统课程设计报告Word格式文档下载.docx_第3页
第3页 / 共28页
电话号码簿管理系统课程设计报告Word格式文档下载.docx_第4页
第4页 / 共28页
电话号码簿管理系统课程设计报告Word格式文档下载.docx_第5页
第5页 / 共28页
电话号码簿管理系统课程设计报告Word格式文档下载.docx_第6页
第6页 / 共28页
电话号码簿管理系统课程设计报告Word格式文档下载.docx_第7页
第7页 / 共28页
电话号码簿管理系统课程设计报告Word格式文档下载.docx_第8页
第8页 / 共28页
电话号码簿管理系统课程设计报告Word格式文档下载.docx_第9页
第9页 / 共28页
电话号码簿管理系统课程设计报告Word格式文档下载.docx_第10页
第10页 / 共28页
电话号码簿管理系统课程设计报告Word格式文档下载.docx_第11页
第11页 / 共28页
电话号码簿管理系统课程设计报告Word格式文档下载.docx_第12页
第12页 / 共28页
电话号码簿管理系统课程设计报告Word格式文档下载.docx_第13页
第13页 / 共28页
电话号码簿管理系统课程设计报告Word格式文档下载.docx_第14页
第14页 / 共28页
电话号码簿管理系统课程设计报告Word格式文档下载.docx_第15页
第15页 / 共28页
电话号码簿管理系统课程设计报告Word格式文档下载.docx_第16页
第16页 / 共28页
电话号码簿管理系统课程设计报告Word格式文档下载.docx_第17页
第17页 / 共28页
电话号码簿管理系统课程设计报告Word格式文档下载.docx_第18页
第18页 / 共28页
电话号码簿管理系统课程设计报告Word格式文档下载.docx_第19页
第19页 / 共28页
电话号码簿管理系统课程设计报告Word格式文档下载.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

《电话号码簿管理系统课程设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《电话号码簿管理系统课程设计报告Word格式文档下载.docx(28页珍藏版)》请在冰点文库上搜索。

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

1、create建立新的电话号码簿

2、load读取电话号码簿

3、print打印电话号码簿

4、search查询电话号码

5、delete删除电话号码

6、append添加新的电话号码

7、modify修改电话号码

8、exit退出电话号码簿管理系统

请选择1-8之间的操作

图2电话号码簿管理系统主界面菜单

2.1.2根据所选菜单编写相应代码

定义结构体类型structtel,数据域charname[15];

chartel[12];

指针域ID*next(ID表示#defineIDstructtel)。

1、创建函数create:

利用循环输入的方式,将有关信息存入结构体,结构体根据实际的人数,采用动态方式建立单链表存储所有联系人信息,最后返回头指针head。

保存函数save:

头指针作形式参数,利用文件函数fopen建立一个文本文件来存放电话号码簿,将单链表中的联系人信息用循环的方式和函数fwrite写入文件,无返回值。

2、读取函数load:

无形式参数,利用文件函数fopen打开建立过的文本文件,在循环中利用fread函数依次读出文件中的信息,返回头指针。

3、打印函数print:

头指针作形式参数,定义一个临时变量ID*temp,利用此变量遍历单链表,同时输出联系人信息,如果没有联系人信息,则输出提示,无返回值。

4、查询函数search:

头指针作形式参数,利用双重循环,并且在内层循环中利用if语句实现查询功能,内层循环用来遍历单链表,外层循环用来实现是否继续查找功能,无返回值。

5、删除函数delete:

头指针作形式参数,利用双重循环,并且在内层循环中利用if语句实现查询并删除功能,内层循环用来遍历单链表,外层循环用来实现是否继续删除功能,无返回值。

6、添加函数append:

无形式参数,定义一个变量ID*temp,新联系人信息赋值予此变量中,利用fopen函数打开在create函数中建立的文件,在循环中依次输入联系人信息并利用fwrite函数将添加的信息存入文件中,无返回值。

7、修改函数modify:

头指针作形式参数,利用双重循环,内层循环用来遍历单链表,同时利用三个if语句分别找到待修改记录、确定是否修改、确定是否保存。

外层循环用来实现是否继续修改。

2.2模块图

图3电话号码簿管理系统模块图

2.3部分模块流程图

1主模块流程图

*haed=NULL

1?

输出主菜单

输入选择

(吸收回车)调用各子函数

图4主模块流程图

2create模块流程图

*head=*p1=*p2=NULL

为p1分配内存空间

输入姓名

输入的是‘#’

是否

total==0

返回head

退出循环

输入电话号码

head==NULL

head=p1

p2=p1

p2->

next=p1

total=total+1

next=NULL

释放空间

输出提示(是否存盘?

(吸收回车)输入选择

Saveflag=='

Y'

||saveflag=='

y'

调用save函数

返回head

图5create模块流程图

第3章程序代码设计

3.1create模块

1、函数原形:

ID*create()

2、功能:

利用while循环语句scanf、getchar、prinf、malloc、free函数完成对单链表的输入,存放n个联系人的信息(姓名、电话号码)。

3、变量及类型:

inttotal:

记录结点个数,定义为全局变量。

ID*head=NULL,*p1,*p2:

结构体指针,p1、p2为全局变量,创建单表所需的变量。

charsaveflag:

控制是否保存的变量。

4、说明:

首先将save模块在外部声明(便于其它模块调用),执行完输入函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数(其它模块中也有类似情形。

)ID使用的是宏定义#defineIDstructtel。

5、代码:

见附录。

3.2save模块

voidsave(ID*head)

利用文件指针fp及文件函数fopen、fwrite、fclose将联系人信息存入磁盘。

FILE*fp:

定义文件指针(外部变量,便于其它函数使用)。

ID*t:

可以移动的指针,作用:

从头到尾遍历一遍单链表,向文件写入。

fp=fopen("

telephone.txt"

"

w"

)以只写形式在当前目录下建立文件telephone.txt。

fwrite(t,sizeof(ID),1,fp)向文件中写入数据,t表示输出数据的首地址,1表示数据块个数,数据块大小为sizeof(ID),fp是文件指针。

3.3load模块

ID*load()

while循环语句fopen、fread、feof、fclose、malloc函数读取文件telephone.txt中的信息。

ID*t1,*t2,*head=NULL:

结构体指针,遍历单链表所需的变量。

t1=(ID*)malloc(sizeof(ID))申请空间,以便于存放从文件中读取的内容。

while(!

feof(fp))当文件不处于结束位置时循环,fread(t1,sizeof(ID),1,fp)读取文件中数据,t表示输出数据的首地址,1表示数据块个数,数据块大小为sizeof(ID),fp是文件指针。

3.4print模块

voidprint(ID*head)

利用while循环语句printf函数依次输出联系人信息。

ID*temp:

临时变量,用来遍历单链表。

system("

cls"

)清屏,while(temp!

=NULL)当单链表未遍历完时循环。

如果head==NULL,则输出提示(当前电话号码簿为空)。

3.5search模块

voidsearch(ID*head)

利用双重循环查找,内层循环用来查找并输出,外层循环用来确定是否重新查找。

intflag,searchflag=1:

flag用来确定是否找到待查找记录的变量,searchflag用来确定是否重新查找(循环)的变量,searchflag==1时循环。

charcchoice:

c表示待查姓名的首字母,choice表示用户的选择,是否重新查找。

其中用到全局变量p1、p2来遍历单链表,判断语句if(p1->

name[0]==c)用来确定是否找到待查记录。

3.6delete模块

voiddelete(ID*head)

利用双重循环查找,内层循环用来查找并删除,外层循环用来确定是否继续查找。

flag用来确定是否找到待删除记录的变量,searchflag用来确定是否重新查找(循环)的变量,searchflag==1时循环。

charcchoiced:

c表示待查姓名的首字母,choice表示用户的选择,是否继续删除,d表示用户的选择,是否确认删除,确认删除后调用save函数。

整体上和search函数类似,先查找到待删除结点,找到后利用

if(p1==head)head=p1->

next;

elsep2->

next=p1->

语句删除结点,p1指向的是待删结点,p2所指的是p1所指结点的前一个结点。

3.7append模块

voidappend()

利用while循环语句malloc、free、fopen、fwrite、fclose函数依次添加联系人信息。

intflag=1:

控制是否循环(继续添加联系人)的变量,flag为1时继续添加。

ID*temp:

临时变量,用来存放新联系人信息。

charchoice:

用户的选择,控制flag中的值及是否跳出循环。

使用文件的方式为”a+”(允许在文件末尾追加数据),在循环中,每添加一次,要为temp分配一次空间,添加过后释放空间。

3.8modify模块

voidmodify(ID*head)

2、功能:

利用双重循环查找,内层循环用来查找并修改,外层循环用来确定是否继续修改。

flag用来确定是否找到待修改记录的变量,searchflag用来是否重新查找(循环)的变量,searchflag==1时循环。

charc,choice,d,s:

c表示待查姓名的首字母,choice表示用户的选择,是否继续修改,d表示用户的选择,是否确认修改,s表示用户的选择,是否保存修改后的记录(调用save函数)。

整体上和search函数类似,找到待修改信息后直接对该结点数据域重新赋值即可。

第4章C程序设计总结

4.1程序调试

本人在程序设计中遇到的困难、收获,如何解决问题以及感想。

4.1.1程序调试情况

调试方法:

每编好几个模块(包括相关模块),调试一次。

运行程序,出现如图主界面:

图6电话号码簿管理系统主界面

输入指令数‘1’后给予提示:

请输入姓名,以#作为结束的标志:

创建电话号码簿后,保存,打印正常。

load、search模块写好后,根据上一次创建的电话簿读取,然后查找,运行正常。

调试delete模块时,出现情况:

删除一个记录后,无法继续进行删除。

如图:

图7delete模块调试情况

如果输入‘y’,按提示操作,输入已有姓名首字母,却迅速显示一些提示后退出该功能。

查找原因后,发现在循环末尾少一句getchar()来吸收回车,由于回车作为首字母字符,故所有输入的字符都作为了下一个字符变量的值,从而导致判断失误。

加上getchar()后程序运行正常。

收获:

在循环语句中如果循环末尾和开头都有字符输入,应在末尾吸收回车或在开头输入字符前吸收回车。

append模块的调试:

添加记录后调用save函数保存,出现提示,错误的内存指令一系列信息。

思考:

第一次编写此模块源代码时将添加的记录直接调用save函数,而save函数中的文件使用方式是”w”,这种调用不符合添加规则,故无法调用save函数。

修改:

在此模块中打开已建立的文件,打开方式为”a+”,然后依次将新记录追加写入文件。

4.1.2感想

经此次设计,使我了解了设计一个软件的的大致开发流程,当遇见情况时的处理措施,还有独立解决问题和与他人交流合作的能力。

虽然有了点经验,但还是感觉不足,对计算机方面的一些设计思想不是清晰,还没有形成自己的编程风格。

我认为有待进一步学习。

谢辞

感谢班主任王老师的指导,感谢同学的交流与讨论,感谢父母的资助。

参考文献

[1]郭有强,《C语言程序设计》,清华大学出版社。

[2]谭浩强,《C程序设计》,清华大学出版社。

[3]刘振安,孙忱,刘燕君,《C程序设计课程设计》,机械工业出版社。

[4]汪诗林,《数据结构算法与应用》,机械工业出版社。

附录程序清单

#include"

stdio.h"

stdlib.h"

string.h"

conio.h"

/*不是C标准的头文件,表示consoleinput/output*/

#defineIDstructtel

structtel

{

charname[15];

ID*next;

};

voidsave();

inttotal=0;

ID*p1,*p2;

/*创建单链表函数*/

ID*head=NULL,*p1,*p2;

charsaveflag;

head=p1=p2=NULL;

/*p1是新开辟的指针,p2的作用是连接链表的尾部和新开辟的结点*/

printf("

\t\t\t\t欢迎使用\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);

returnhead;

}

break;

请输入电话号码:

tel);

if(head==NULL)/*第一次执行,以后不执行*/

head=p1;

p2=p1;

}

else

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)

\t\t\t打开文件失败!

不存在该文件。

getch();

/*从键盘上等待用户输入一个字符*/

exit

(1);

\t\t\t正在保存文件,请稍...\n"

t=head;

while(t!

=NULL)

fwrite(t,sizeof(ID),1,fp);

t=t->

fclose(fp);

\t\t\t文件保存成功!

}

/*读取单链表函数*/

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->

t2->

\t\t\t文件读取完毕!

);

/*打印单链表函数*/

ID*temp;

temp=head;

system("

/*清屏*/

姓名\t\t电话号码\n"

if(head==NULL)

\t\t当前电话簿为空,请先创建新的号码或加载文件\n"

do{

printf("

%s\t\t%s\n"

temp->

name,temp->

temp=temp->

}while(temp!

=NULL);

/*创建查找函数*/

\t\t欢迎使用查找功能,请输入待查找姓名的首字母\n"

intflag,searchflag=1;

charc,choice;

while(searchflag)

{

请输入待查姓名的首字母:

"

c);

p1=head;

flag=0;

while(p1!

if(p1->

name[0]==c)

姓名:

%s\t电话号码:

%s\n"

name,p1->

flag=1;

p2=p1;

p1=p1->

/*p1指针向后移动一位*/

if(flag==0)

\t\t\t对不起,未能找到符合条件的记录。

\t\t\t查找完毕,是否重新查找?

Y/N\t"

choice);

getchar();

if(choice=='

||choice=='

)searchflag=1;

else

/*创建删除函数*/

charc,choice,d;

请输入待删除姓名的首字母:

while(p1!

\t\t\t是否删除该记录?

d);

if(d=='

||d=='

if(p1==head)head=p1->

\t\t\t完成,是否继续删除?

/*创建添加函数*/

intflag=1;

charchoice;

a+"

while(flag)

temp=(ID*)malloc(sizeof(ID));

请输入新联系人姓名:

\n请输入新联系人的电话号码:

fwrite(temp,sizeof(ID),1,fp);

free(temp);

\t\t\t添加完毕,是否继续添加?

if(ch

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

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

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