2024年2月4日发(作者:)
C语言课程设计:
通讯录管理系统
C语言课程设计
目录
一、
需求分析………………………………………………………2
二、
概要设计………………………………………………………2
三、
详细设计………………………………………………………3
四、
上机操作………………………………………………………14
五、
实习心得………………………………………………………19
六、
源程序 ………………………………………………………20
- 1 -
C语言课程设计
一、需求分析
具有数据的插入、修改、删除、显示和查询功能的电话簿管理程序。
(1) 数据包括:人名、工作单位、电话号码和E-MAIL地址。
(2) 可对记录中的姓名和电话号码进行修改。
(3) 可增加和删除记录。
(4) 可显示所有的保存记录。
(5) 可按人名或电话号码进行查询。
[提示]
建议采用结构体数组和文件系统实现。结构体成员包括人名、工作单位、电话号码和E-MAIL地址。
根据题目的要求程序应该采用结构体数组和文件系统实现。应该有文件的操作功能;在程序中应该包括输入、显示、删除、查询、添加、修改、保存、加载和退出的功能。
二、概要设计
根据上面的分析,可以将程序系统的设计分为如下几个模块:插入、显示、删除、查询、修改、保存和退出。
通讯录管理系统
插入 显示 删除 查询 修改 保存 退出
- 2 -
C语言课程设计
三、详细设计
1、 主函数;
主函数一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。
流程图
开始
显示一系列功能选项
输入n,判断是否是0~6
N
Y
根据n的值调用各功能模块函数
【程序】
结束
int main() //主函数
{
Man man[500],*pman=man;;
char control;
int size;
printf("tt**********************************************n"); //窗口初始化
printf("tt********** 欢迎使用通讯录管理系统! ***********n");
printf("tt*--------------------------------------------*n");
printf("tt* 请按回车键继续! *n");
printf("tt**********************************************n");
- 3 -
C语言课程设计
scanf("%c",&control);
if(control)
{
size=Scan(pman); //判断文件是否存在
printf("ttt请输入相应操作数操作n");
for(;;) //菜单生成
{
printf("tt**********************************************n");
printf("tt* 1--插入信息 *n");
printf("tt* 2--按姓名查找 *n");
printf("tt* 3--按电话查找 *n");
printf("tt* 4--删除信息 *n");
printf("tt* 5--显示信息 *n");
printf("tt* 6--修改信息 *n");
printf("tt* 0--退出系统 *n");
printf("tt**********************************************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、 插入模块
此模块为插入信息模块,插入后再调用保存函数来保存所插入的数据,支持多条信息的插入。
流程图
- 4 -
C语言课程设计
开始
输入要插入的记录个数n
i从0到n-1调用Insert函数
Y保存调用Save函数
i!=0吗?
N
返回主菜单
结束
【程序】
int Insert(Man * pMan,int Size) //插入模块
{
int i,n;
printf("tt***********请输入要插入数据的个数.************n");
printf("tt**********************************************n");
scanf("%d",&n);
for(i=0;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); } if(Save(pMan,Size+n)) { printf("tt*********** 恭喜!数据插入成功! ***********n"); } else { printf("tt*********** 操作失败,请稍后再试 !***********n"); - 5 - C语言课程设计 } } return Size+n; 3、 显示模块 此模块为显示所有记录,流程图如下: 选择显示功能 显示所有记录 自动返回主菜 【程序】 void Display(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%stt%st%st%sn",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email); printf("t-----------------------------------------------------------n"); } } 4、 查找模块 - 6 - C语言课程设计 本模块分为按姓名查找和按电话查找两个子模块。 4.1按姓名查找模块,流程图如下: 开始 输入姓名 Y 显示找到的记录 是否找到此姓名 N 提示没有找到 结束,返回主菜单 【程序】 void S_asname(Man * pMan,int Size) //查找信息 { int i=0; char name[8]; printf("tt***********请输入要查询信息的姓名:***********n"); printf("tt**********************************************n"); scanf("%s",name); while(i { pMan++; i++; } if(!strcmp(pMan->Name,name))//找到后输出 { printf("tt***************查到的信息为: ***************n"); printf("t*************************************************************n"); printf("t人名t 工作单位t 电话号码t E-mail地址n"); printf("t*************************************************************n"); printf("t%stt%st%st%sn",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email); printf("t*************************************************************n"); } - 7 - C语言课程设计 else { printf("tt***********抱歉,没有找到相关数据 ************n"); printf("tt**********************************************n"); } } 4.2按电话查找模块,此模块与按姓名查找模块相似,流程图略。 【程序】 void S_astel(Man * pMan,int Size) //按电话查找模块 { int i=0; char tel[12]; printf("tt***********请输入要查询信息的电话:************n"); printf("tt**********************************************n"); scanf("%s",tel); while(i { pMan++; i++; } if(!strcmp(pMan->TEL,tel)) //输出找到的信息 { printf("tt****************查到的信息为: ****************n"); printf("t*******************************************************n"); printf("t人名t 工作单位t 电话号码t E-mail地址n"); printf("t*******************************************************n"); printf("t%stt%st%st%sn",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email); printf("t*******************************************************n"); } else { printf("tt************抱歉,没有找到相关数据 ************n"); printf("tt**********************************************n"); } } 5、 删除模块 此模块先利用查找模块找到所要删除的信息,然后根据用户的选择来确定是否删除信息,此种调用到Save函数。其流程图如下: - 8 - C语言课程设计 开始 输入要修改信息的姓名 Y 显示找到的信息 是否找到信息 N 提示没有找到信息 Y 提示删除成功 提示是否删除 N 提示未删除 结束 【程序】 void Delete(Man * pMan,int Size)//删除信息 { char name[8],control; int i=0; printf("tt***********请输入要删除信息的姓名: ***********n"); printf("tt**********************************************n"); scanf("%s",name); while(i { pMan++; i++; } if(!strcmp(pMan->Name,name)) //找到了,删除信息!做出判断. { printf("您要删除的信息为:n"); printf("%stt%st%st%sn",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'; - 9 - C语言课程设计 } if(Save(pMan,Size))//将新信息写入文件 { printf("tt**************恭喜!信息删除成功!**************n");; printf("tt**********************************************n");break; } else { printf("tt************操作失败,请稍后再试! *************n"); printf("tt**********************************************n");break; } case 'n':printf("信息未删除!n");break; default:printf("选择有误!n");break; } } else { printf("tt*********抱歉,没有找到相关信息! *********n"); printf("tt******************************************n"); } 6、 修改模块 此模块先调用查找函数查找到所要修改的信息,然后用户根据需要来修改信息。流程图如下: 开始 输入要修改记录的姓名 Y 显示要修改的信息 是否找到信息 N 提示未找到信息 修改需要修改的条目,并保存 结束 - 10 - C语言课程设计 【程序】 void Modify(Man * pMan,int Size) //修改模块 { void Display(); int i=0; char name[8]; char depart[20]; char tel[12]; char email[30]; printf("tt************输入要修改信息的姓名:************n"); printf("tt**********************************************n"); scanf("%s",name); while(i { 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("tt**************恭喜!信息修改成功!**************n");; printf("tt**********************************************n"); } else { printf("tt*************操作失败,请稍后再试!*************n"); printf("tt**********************************************n"); } } else - 11 - C语言课程设计 } { printf("tt************抱歉,没有找到相关信息!************n"); printf("tt**********************************************n"); } 7、 其他模块 7.1结构体定义 【程序】 struct Man //定义结构体 { char Name[8]; //名字 char Depart[20]; //工作单位 char TEL[12]; //电话号码 char Email[30]; //邮箱 }; 7.2保存模块 【程序】 int Save(Man * pMan,int Size) //把数据写入文件 { int i; FILE * out; out=fopen("","w"); if(out==NULL)//判断文件打开成功与否 { printf("tt************文件打开失败 !************n"); printf("tt**********************************************n"); return 0; } for(i=0;i { fprintf(out,"%st%st%st%sn",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email); } fclose(out); return 1; } 7.3浏览模块 【程序】 - 12 - C语言课程设计 int Scan(Man * pMan) //从文本中读取数据 { printf("tt**********正在读取文件信息,请稍后! ***********n"); int i; FILE * in=fopen("","r"); if(in==NULL) //判断文件是否打开成功 { printf("tt*********** 文件打开失败 ! ***********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("tt************* 文件数据读入成功 !*************n"); return (i-1); } 7.4 getch()函数 【程序】 void getch() { char stop; printf("n确认?(按任意键并回车返回!)n"); getchar(); scanf("%c",&stop); return; } 四、上机操作 1、已有文件信息 () name depart phone email kongcug71092152****************** gong cug71092159******************2、要插入的信息 - 13 - C语言课程设计 name depart phone email lijicug71091138******************chencug71091139******************3、各模块功能的实现 (1)窗口的初始化 (2)主菜单 (3)显示所有信息 (4)插入信息 第一条 - 14 - C语言课程设计 第二条 (6) 按姓名查找模块 - 15 - C语言课程设计 (7) 按电话查找模块 (8) 删除没有的信息 删除已有信息 - 16 - C语言课程设计 取消删除 确认删除 - 17 - C语言课程设计 (9)退出系统 五、实习心得 在老师的带领下进行了C语言程序实践学习。在短短一周的实习期间使我获取了不少新知识也巩固了许多老知识。在这之前,我们已经对C语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在学习了解的范围,对里面的好多东西还是很陌生,并不是很熟练,有着许多欠缺,更多的在运用起来的时候还是感到很不好动手。 C语言是需要有一定基础、而且动手能力强的学科。上机实验是学习程 - 18 - C语言课程设计 序设计语言必不可少的实践环节,特别是C语言灵活、简洁,更需要通过编程的实践来真正掌握它。对于程序设计语言的学习目的,可以概括为学习语法规定、巩固贯穿系统知识、掌握程序设计方法、提高程序设计能力,这些都必须通过充分的实际上机操作才能完成。 课堂上许多关于C语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用C语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握C语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,更加巩固了学过的知识,而且在设计的时候学要系统的知识,也是一个较大的挑战,某一方面知识的欠缺都将影响到整个程序的设计。 这次上机实习让我学到了很多有用的东西,巩固了之前的学习,让我学到了在教室和做题中学不到的一些知识,通过这个程序的学习,使我进一步理解和运用结构化程序设计的思想和方法。相信对以后初步掌握开发一个小型实用系统的基本方法,学会调试一个比较长程序的基本方法,学会利用流程图表示算法,进一步掌握和提高利用C语言进行程序设计的能力。 我认为,这次实习对于我是非常有意义的,对我个人的影响比较大,对我的动手能力有了很大的提高。在体会到程序成功后的快乐后,发现自己也逐步喜欢上了这门语言,对以后的专业知识的学习也会很有帮助。最后感谢在实习过程中帮助过我的老师和同学,正是你们的帮助才有了这次实习的成功! - 19 - C语言课程设计 #include #include struct Man { char Name[8]; char Depart[20]; char TEL[12]; char Email[30]; }; void getch() { 六、源程序 //定义结构体 //名字 //工作单位 //电话号码 //邮箱 - 20 - C语言课程设计 char stop; printf("n确认?(按任意键并回车返回!)n"); getchar(); scanf("%c",&stop); return; } int Scan(Man * pMan) //从文本中读取数据 { printf("tt**********正在读取文件信息,请稍后! ***********n"); int i; FILE * in=fopen("","r"); if(in==NULL) //判断文件是否打开成功 { printf("tt*********** 文件打开失败 ! ***********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("tt************* 文件数据读入成功 !*************n"); return (i-1); } int Save(Man * pMan,int Size) //把数据写入文件 { int i; FILE * out; out=fopen("","w"); if(out==NULL)//判断文件打开成功与否 { printf("tt************文件打开失败 !************n"); printf("tt**********************************************n"); return 0; } for(i=0;i { fprintf(out,"%st%st%st%sn",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email); } fclose(out); return 1; } - 21 - C语言课程设计 int Insert(Man * pMan,int Size) //插入模块 { int i,n; printf("tt***********请输入要插入数据的个数.************n"); printf("tt**********************************************n"); scanf("%d",&n); for(i=0;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); } if(Save(pMan,Size+n)) { printf("tt*********** 恭喜!数据插入成功! ***********n"); } else { printf("tt*********** 操作失败,请稍后再试 !***********n"); } return Size+n; } void Modify(Man * pMan,int Size) //修改模块 { void Display(); int i=0; char name[8]; char depart[20]; char tel[12]; char email[30]; printf("tt************输入要修改信息的姓名:************n"); printf("tt**********************************************n"); scanf("%s",name); while(i { - 22 - C语言课程设计 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("tt**************恭喜!信息修改成功!**************n");; printf("tt**********************************************n"); } else { printf("tt*************操作失败,请稍后再试!*************n"); printf("tt**********************************************n"); } } else { printf("tt************抱歉,没有找到相关信息!************n"); printf("tt**********************************************n"); } } void Delete(Man * pMan,int Size)//删除信息 { char name[8],control; int i=0; printf("tt***********请输入要删除信息的姓名: ***********n"); printf("tt**********************************************n"); scanf("%s",name); while(i - 23 - C语言课程设计 { pMan++; i++; } if(!strcmp(pMan->Name,name)) //找到了,删除信息!做出判断. { printf("您要删除的信息为:n"); printf("%stt%st%st%sn",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("tt**************恭喜!信息删除成功!**************n");; printf("tt**********************************************n");break; } else { printf("tt************操作失败,请稍后再试! *************n"); printf("tt**********************************************n");break; } case 'n':printf("信息未删除!n");break; default:printf("选择有误!n");break; } } else { printf("tt*********抱歉,没有找到相关信息! *********n"); printf("tt******************************************n"); } } void Display(Man * pMan,int Size) //显示所有记录 { int i; printf("t人名t 工作单位t 电话号码t E-mail地址n"); printf("t************************************************************n"); - 24 - C语言课程设计 for(i=0;i<=Size;i++,pMan++)//依次输出文件中的信息 { printf("t%stt%st%st%sn",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email); printf("t-----------------------------------------------------------n"); } } void S_asname(Man * pMan,int Size) //查找信息 { int i=0; char name[8]; printf("tt***********请输入要查询信息的姓名:***********n"); printf("tt**********************************************n"); scanf("%s",name); while(i { pMan++; i++; } if(!strcmp(pMan->Name,name))//找到后输出 { printf("tt***************查到的信息为: ***************n"); printf("t*************************************************************n"); printf("t人名t 工作单位t 电话号码t E-mail地址n"); printf("t*************************************************************n"); printf("t%stt%st%st%sn",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email); printf("t*************************************************************n"); } else { printf("tt***********抱歉,没有找到相关数据 ************n"); printf("tt**********************************************n"); } } void S_astel(Man * pMan,int Size) //按电话查找模块 { int i=0; char tel[12]; printf("tt***********请输入要查询信息的电话:************n"); printf("tt**********************************************n"); scanf("%s",tel); - 25 - C语言课程设计 while(i { pMan++; i++; } if(!strcmp(pMan->TEL,tel)) //输出找到的信息 { printf("tt****************查到的信息为: ****************n"); printf("t*******************************************************n"); printf("t人名t 工作单位t 电话号码t E-mail地址n"); printf("t*******************************************************n"); printf("t%stt%st%st%sn",pMan->Name,pMan->Depart,pMan->TEL,pMan->Email); printf("t*******************************************************n"); } else { printf("tt************抱歉,没有找到相关数据 ************n"); printf("tt**********************************************n"); } } int main() //主函数 { Man man[500],*pman=man;; char control; int size; printf("tt**********************************************n"); //窗口初始化 printf("tt********** 欢迎使用通讯录管理系统! ***********n"); printf("tt*--------------------------------------------*n"); printf("tt* 请按回车键继续! *n"); printf("tt**********************************************n"); scanf("%c",&control); if(control) { size=Scan(pman); //判断文件是否存在 printf("ttt请输入相应操作数操作n"); for(;;) //菜单生成 { printf("tt**********************************************n"); printf("tt* 1--插入信息 *n"); printf("tt* 2--按姓名查找 *n"); printf("tt* 3--按电话查找 *n"); - 26 - C语言课程设计 printf("tt* 4--删除信息 *n"); printf("tt* 5--显示信息 *n"); printf("tt* 6--修改信息 *n"); printf("tt* 0--退出系统 *n"); printf("tt**********************************************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; } - 27 -
本文发布于:2024-02-04 09:36:40,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170701060153124.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |