通讯录管理系统数据结构课程设计_第1页
通讯录管理系统数据结构课程设计_第2页
通讯录管理系统数据结构课程设计_第3页
通讯录管理系统数据结构课程设计_第4页
通讯录管理系统数据结构课程设计_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C

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

录-1

-概要设计………2详细设计………3上机操作………14实习心得………19一、

需求分析………2二、三、四、五、六、源程序

………20一、需求分析具有数据的插入、修改、删除、显示和查询功能的电话簿管理程序。数据包括:人名、工作单位、电话号码和E-MAIL

地址。可对记录中的姓名和电话号码进行修改。可增加和删除记录。可显示所有的保存记录。可按人名或电话号码进行查询。[提示]建议采用结构体数组和文件系统实现。结构体成员包括人名、工作单位、电话号码和E-MAIL

地址。根据题目的要求程序应该采用结构体数组和文件系统实现。应该有文件的操作功能;在程序中应该包括输入、显示、删除、查询、添加、修改、保存、加载和退出的功能。二、概要设计根据上面的分析,可以将程序系统的设计分为如下几个模块:插入、显示、删除、查询、修改、保存和退出。-2

-通讯录管理系统插入显示删除查询保存修改退出三、详细设计1、

主函数;主函数一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。流程图开始显示一系列功能选项N//主函数【程序】int

main(){输入

n,判断是否是

0~6Y根据n

的值调用各功能模块函数结束-3

-//窗口初始化-4

-Manman[500],*pman=man;;char

control;intsize;printf("\t\t**********************************************\n");printf("\t\t**********

欢迎使用通讯录管理系统!***********\n");printf("\t\t*--------------------------------------------*\n");printf("\t\t* 请按回车键继续! *\n");printf("\t\t**********************************************\n");scanf("%c",&control);if(control){//判断文件是否存在//菜单生成size=Scan(pman);printf("\t\t\t

请输入相应操作数操作\n");for(;;){printf("\t\t**********************************************\n");printf("\t\t*1--插入信息*\n");printf("\t\t*2--按姓名查找*\n");printf("\t\t*3--按电话查找*\n");printf("\t\t*4--删除信息*\n");printf("\t\t*5--显示信息*\n");printf("\t\t*6--修改信息*\n");printf("\t\t*0--退出系统*\n");printf("\t\t**********************************************\n");scanf("%s",&control);switch(control){case

'1':size=Insert(pman,size);break;//插入新的通讯录case

'2':S_asname(pman,size);break;//按姓名查找case

'3':S_astel(pman,size);break;//按电话查找case

'4':Delete(pman,size);break;//删除信息case

'5':Display(pman,size);break;//显示所有信息case

'6':Modify(pman,size);break;//修改信息case

'0':printf("**************谢谢使用!再见!**************\n");

//退出系统return

0;default:printf("**********输入数字有误,请重新输入**********\n");break;}}}return

0;}2、 插入模块此模块为插入信息模块,插入后再调用保存函数来保存所插入的数据,支持多条信息的插入。流程图开始输入要插入的记录个数

ni

0

n-1

调用

Insert

函数i!=0

吗?返回主菜单保存调用

Save

函数结束NY-5

-//插入模块【程序】intInsert(Man*pMan,intSize){int

i,n;printf("\t\t***********请输入要插入数据的个数.************\n");printf("\t\t**********************************************\n");scanf("%d",&n);for(i=0;i<n;i++) //从键盘输入数据再写入文件{ printf("您将要录入第%d

条记录(共有%d

条)\n",i+1,n);printf("请输入姓名:\n");scanf("%s",&pMan[Size+i].Name);printf("请输入工作单位:\n");scanf("%s",&pMan[Size+i].Depart);printf("请输入电话号码:\n");scanf("%s",&pMan[Size+i].TEL);printf("请输入

Email

地址:\n");scanf("%s",&pMan[Size+i].Email);}***********\n");if(Save(pMan,Size+n)){printf("\t\t***********

恭喜!数据插入成功!}else{printf("\t\t*********** 操作失败,请稍后再试

!***********\n");}return

Size+n;}3、 显示模块此模块为显示所有记录,流程图如下:选择显示功能显示所有记录自动返回主菜-6

-【程序】void

Display(Man

*

pMan,intSize)

//显示所有记录{int

i;printf("\t

人名\t 工作单位\t 电话号码\tE-mail

地址\n");printf("\t************************************************************\n");for(i=0;i<=Size;i++,pMan++)//依次输出文件中的信息{printf("\t%s\t\t%s\t%s\t%s\n",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email);printf("\t-----------------------------------------------------------\n");}}4、 查找模块本模块分为按姓名查找和按电话查找两个子模块。4.1按姓名查找模块,流程图如下:提示没有找到显示找到的记录结束,返回主菜单NY//查找信息【程序】voidS_asname(Man*pMan,int

Size){int

i=0;char

name[8];printf("\t\t***********请输入要查询信息的姓名:***********\n");printf("\t\t**********************************************\n");scanf("%s",name);while(i<Size&&strcmp(pMan->Name,name))//查找{pMan++;i++;}if(!strcmp(pMan->Name,name))//找到后输出{开始输入姓名是否找到此姓名-7

-printf("\t\t***************查到的信息为: ***************\n");printf("\t*************************************************************\n");printf("\t

人名\t 工作单位\t 电话号码\t E-mail地址\n");printf("\t*************************************************************\n");printf("\t%s\t\t%s\t%s\t%s\n",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email);printf("\t*************************************************************\n");}else{printf("\t\t***********抱歉,没有找到相关数据 ************\n");printf("\t\t**********************************************\n");}}4.2

按电话查找模块,此模块与按姓名查找模块相似,流程图略。【程序】-8

-//按电话查找模块voidS_astel(Man*pMan,intSize){int

i=0;char

tel[12];printf("\t\t***********请输入要查询信息的电话:************\n");printf("\t\t**********************************************\n");scanf("%s",tel);//查找信息//输出找到的信息while(i<Size&&strcmp(pMan->TEL,tel)){pMan++;i++;}if(!strcmp(pMan->TEL,tel)){printf("\t\t****************查到的信息为:****************\n");printf("\t*******************************************************\n");printf("\t

人名\t 工作单位\t 电话号码\t E-mail地址\n");printf("\t*******************************************************\n");printf("\t%s\t\t%s\t%s\t%s\n",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email);printf("\t*******************************************************\n");}else{printf("\t\t************抱歉,没有找到相关数据

************\n");printf("\t\t**********************************************\n");}}5、

删除模块此模块先利用查找模块找到所要删除的信息,然后根据用户的选择来确定是否删除信息,此种调用到

Save

函数。其流程图如下:开始输入要修改信息的姓名是否找到信息提示没有找到信息NY显示找到的信息提示是否删除N提示未删除Y提示删除成功结束【程序】void

Delete(Man

*pMan,intSize)//删除信息{char

name[8],control;int

i=0;printf("\t\t***********请输入要删除信息的姓名:***********\n");printf("\t\t**********************************************\n");scanf("%s",name);while(i<Size&&strcmp(pMan->Name,name))//同查找,找到后跳出{pMan++;i++;}if(!strcmp(pMan->Name,name))//找到了,删除信息!做出判断.{printf("您要删除的信息为:\n");printf("%s\t\t%s\t%s\t%s\n",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email);printf("是否确认删除?(Y/N)\n");-9

-scanf("%s",&control);switch(control){case

'y':pMan->Name[0]='\0';pMan->Depart[0]='\0';pMan->TEL[0]='\0';pMan->Email[0]='\0';if(Save(pMan,Size))//将新信息写入文件{printf("\t\t**************恭喜!信息删除成功!**************\n");;printf("\t\t**********************************************\n");break;}else{printf("\t\t************操作失败,请稍后再试!

*************\n");printf("\t\t**********************************************\n");break;}case

'n':printf("信息未删除!\n");break;default:printf("选择有误!\n");break;}}else{printf("\t\t*********抱歉,没有找到相关信息!

*********\n");printf("\t\t******************************************\n");}}6、 修改模块此模块先调用查找函数查找到所要修改的信息,然后用户根据需要来修改信息。流程图如下:-10

-开始输入要修改记录的姓名是否找到信息提示未找到信息显示要修改的信息修改需要修改的条目,并保存结束NY//修改模块-11

-【程序】voidModify(Man*pMan,int

Size){void

Display();int

i=0;charname[8];char

depart[20];chartel[12];char

email[30];printf("\t\t************输入要修改信息的姓名:************\n");printf("\t\t**********************************************\n");scanf("%s",name);while(i<Size&&strcmp(pMan->Name,name))//遍历数组,查找数据,若查到跳出循环{pMan++;i++;}if(!strcmp(pMan->Name,name))//如果找到,则开始修改{printf("请输入修改后的姓名:\n");scanf("%s",name);strcpy(pMan->Name,name);printf("请输入修改后的工作单位:\n");scanf("%s",depart);strcpy(pMan->Depart,depart);printf("请输入修改后的电话号码:\n");scanf("%s",tel);strcpy(pMan->TEL,tel);printf("请输入修改后的

E-mail

地址:\n");scanf("%s",email);strcpy(pMan->Email,email);if(Save(pMan,Size)) //将修改信息写入文件,并判断是否写入成功{printf("\t\t**************恭喜!信息修改成功!**************\n");;printf("\t\t**********************************************\n");}else{printf("\t\t*************操作失败,请稍后再试!*************\n");printf("\t\t**********************************************\n");}}else{printf("\t\t************抱歉,没有找到相关信息!************\n");printf("\t\t**********************************************\n");}}7、

其他模块7.1

结构体定义-12

-//定义结构体//名字//工作单位//电话号码//邮箱【程序】structMan{charName[8];char

Depart[20];charTEL[12];char

Email[30];};7.2

保存模块//把数据写入文件【程序】intSave(Man*pMan,int

Size){int

i;FILE*

out;out=fopen("info.txt","w");if(out==NULL)//判断文件打开成功与否{printf("\t\t************文件

info.txt

打开失败

!************\n");printf("\t\t**********************************************\n");return

0;}for(i=0;i<Size;i++,pMan++) //打开成功,依次写入文件{fprintf(out,"%s\t%s\t%s\t%s\n",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email);}fclose(out);return

1;}浏览模块【程序】intScan(Man

*

pMan) //从文本中读取数据{printf("\t\t**********正在读取文件信息,请稍后!

***********\n");int

i;FILE*in=fopen("info.txt","r");if(in==NULL) //判断文件是否打开成功{printf("\t\t***********

文件

info.txt

打开失败

!

***********\n");return

0;}for(i=0;!feof(in);i++,pMan++)//打开成功后一一读取,直到读完为止fscanf(in,"%s%s%s%s",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email);fclose(in);printf("\t\t************* 文件数据读入成功

!*************\n");return

(i-1);}getch()函数【程序】void

getch(){char

stop;printf("\n

确认?(按任意键并回车返回!)\n");getchar();-13

-scanf("%c",&stop);return;}四、上机操作1、已有文件信息(info.txt)namedepart phoneemailkongcug71092kk@gong2、要插入的信息cug71092gg@namedepartphoneemaillijicug71091lllcc@chen cug710913、各模块功能的实现(1)窗口的初始化(2)主菜单-14

-(3)显示所有信息(4)插入信息第一条第二条-15

-(6)

按姓名查找模块(7)

按电话查找模块(8)

删除没有的信息-16

-删除已有信息取消删除确认删除-17

-(9)退出系统-18

-五、实习心得在老师的带领下进行了C

语言程序实践学习。在短短一周的实习期间使我获取了不少新知识也巩固了许多老知识。在这之前,我们已经对

C

语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在学习了解的范围,对里面的好多东西还是很陌生,并不是很熟练,有着许多欠缺,更多的在运用起来的时候还是感到很不好动手。C

语言是需要有一定基础、而且动手能力强的学科。上机实验是学习程序设计语言必不可少的实践环节,特别是

C

语言灵活、简洁,更需要通过编程的实践来真正掌握它。对于程序设计语言的学习目的,可以概括为学习语法规定、巩固贯穿系统知识、掌握程序设计方法、提高程序设计能力,这些都必须通过充分的实际上机操作才能完成。-19

-课堂上许多关于

C语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用

C

语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握

C

语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,更加巩固了学过的知识,而且在设计的时候学要系统的知识,也是一个较大的挑战,某一方面知识的欠缺都将影响到整个程序的设计。这次上机实习让我学到了很多有用的东西,巩固了之前的学习,让我学到了在教室和做题中学不到的一些知识,通过这个程序的学习,使我进一步理解和运用结构化程序设计的思想和方法。相信对以后初步掌握开发一个小型实用系统的基本方法,学会调试一个比较长程序的基本方法,学会利用流程图表示算法,进一步掌握和提高利用C语言进行程序设计的能力。我认为,这次实习对于我是非常有意义的,对我个人的影响比较大,对我的动手能力有了很大的提高。在体会到程序成功后的快乐后,发现自己也逐步喜欢上了这门语言,对以后的专业知识的学习也会很有帮助。最后感谢在实习过程中帮助过我的老师和同学,正是你们的帮助才有了这次实习的成功!-20

-六、源程序#include<stdio.h>#include<string.h>-21

-//定义结构体//名字//工作单位//电话号码//邮箱structMan{charName[8];char

Depart[20];charTEL[12];char

Email[30];};void

getch(){char

stop;printf("\n

确认?(按任意键并回车返回!)\n");getchar();scanf("%c",&stop);return;}intScan(Man

*

pMan) //从文本中读取数据{printf("\t\t**********正在读取文件信息,请稍后!***********\n");int

i;FILE*

in=fopen("info.txt","r");if(in==NULL) //判断文件是否打开成功{printf("\t\t***********

文件

info.txt

打开失败

!

***********\n");return

0;}for(i=0;!feof(in);i++,pMan++)//打开成功后一一读取,直到读完为止fscanf(in,"%s%s%s%s",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email);fclose(in);printf("\t\t************* 文件数据读入成功

!*************\n");return

(i-1);}//把数据写入文件intSave(Man*pMan,int

Size){int

i;FILE*

out;out=fopen("info.txt","w");if(out==NULL)//判断文件打开成功与否{printf("\t\t************文件

info.txt

打开失败

!************\n");printf("\t\t**********************************************\n");return

0;}for(i=0;i<Size;i++,pMan++) //打开成功,依次写入文件{fprintf(out,"%s\t%s\t%s\t%s\n",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email);}fclose(out);return

1;}-22

-//插入模块intInsert(Man*pMan,intSize){int

i,n;printf("\t\t***********请输入要插入数据的个数.************\n");printf("\t\t**********************************************\n");scanf("%d",&n);for(i=0;i<n;i++) //从键盘输入数据再写入文件{ printf("您将要录入第%d

条记录(共有%d

条)\n",i+1,n);printf("请输入姓名:\n");scanf("%s",&pMan[Size+i].Name);printf("请输入工作单位:\n");scanf("%s",&pMan[Size+i].Depart);printf("请输入电话号码:\n");scanf("%s",&pMan[Size+i].TEL);printf("请输入

Email

地址:\n");scanf("%s",&pMan[Size+i].Email);***********\n");}if(Save(pMan,Size+n)){printf("\t\t***********

恭喜!数据插入成功!}else{printf("\t\t*********** 操作失败,请稍后再试

!***********\n");}return

Size+n;}//修改模块-23

-voidModify(Man*pMan,int

Size){void

Display();int

i=0;charname[8];char

depart[20];chartel[12];char

email[30];printf("\t\t************输入要修改信息的姓名:************\n");printf("\t\t**********************************************\n");scanf("%s",name);while(i<Size&&strcmp(pMan->Name,name))//遍历数组,查找数据,若查到跳出循环{pMan++;i++;}if(!strcmp(pMan->Name,name))//如果找到,则开始修改{printf("请输入修改后的姓名:\n");scanf("%s",name);strcpy(pMan->Name,name);printf("请输入修改后的工作单位:\n");scanf("%s",depart);strcpy(pMan->Depart,depart);printf("请输入修改后的电话号码:\n");scanf("%s",tel);strcpy(pMan->TEL,tel);printf("请输入修改后的

E-mail

地址:\n");scanf("%s",email);strcpy(pMan->Email,email);if(Save(pMan,Size)) //将修改信息写入文件,并判断是否写入成功{printf("\t\t**************恭喜!信息修改成功!**************\n");;printf("\t\t**********************************************\n");}else{printf("\t\t*************操作失败,请稍后再试!*************\n");printf("\t\t**********************************************\n");}}else{printf("\t\t************抱歉,没有找到相关信息!************\n");printf("\t\t**********************************************\n");}}void

Delete(Man

*pMan,intSize)//删除信息{char

name[8],control;int

i=0;printf("\t\t***********请输入要删除信息的姓名:***********\n");printf("\t\t**********************************************\n");scanf("%s",name);while(i<Size&&strcmp(pMan->Name,name))//同查找,找到后跳出{pMan++;i++;}if(!strcmp(pMan->Name,name))//找到了,删除信息!做出判断.{printf("您要删除的信息为:\n");printf("%s\t\t%s\t%s\t%s\n",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email);printf("是否确认删除?(Y/N)\n");scanf("%s",&control);switch(control){case

'y':pMan->Name[0]='\0';pMan->Depart[0]='\0';pMan->TEL[0]='\0';pMan->Email[0]='\0';if(Save(pMan,Size))//将新信息写入文件{printf("\t\t**************恭喜!信息删除成功!**************\n");;printf("\t\t**********************************************\n");break;}else{printf("\t\t************操作失败,请稍后再试!

*************\n");printf("\t\t**********************************************\n");break;}case

'n':printf("信息未删除!\n");break;default:printf("选择有误!\n");break;}-24

-}else{printf("\t\t*********抱歉,没有找到相关信息!

*********\n");printf("\t\t******************************************\n");}}voidDisplay(Man*

pMan,int

Size) //显示所有记录{int

i;printf("\t

人名\t 工作单位\t 电话号码\t E-mail地址\n");printf("\t************************************************************\n");for(i=0;i<=Size;i++,pMan++)//依次输出文件中的信息{printf("\t%s\t\t%s\t%s\t%s\n",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email);printf("\t-----------------------------------------------------------\n");}}-25

-//查找信息voidS_asname(Man*pMan,int

Size){int

i=0;char

name[8];printf("\t\t***********请输入要查询信息的姓名:***********\n");printf("\t\t**********************************************\n");scanf("%s",name);while(i<Size&&strcmp(pMan->Name,name))//查找{pMan++;i++;}if(!strcmp(pMan->Name,name))//找到后输出{printf("\t\t***************查到的信息为: ***************\n");printf("\t*************************************************************\n");printf("\t

人名\t 工作单位\t 电话号码\t E-mail地址\n");printf("\t*************************************************************\n");printf("\t%s\t\t%s\t%s\t%s\n",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email);printf("\t*************************************************************\n");}else{printf("\t\t***********抱歉,没有找到相关数据 ************\n");printf("\t\t**********************************************\n");}}-26

-//按电话查找模块voidS_astel(Man*pMan,intSize){int

i=0;char

tel[12];printf("\t\t***********请输入要查询信息的电话:************\n");printf("\t\t**********************************************\n");scanf("%s",tel);//查找信息//输出找到的信息while(i<Size&&strcmp(pMan->TEL,tel)){pMan++;i++;}if(!strcmp(pMan->TEL,tel)){printf("\t\t***************

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论