《通讯录管理系统c语言》实训报告含代码要点.docx
- 文档编号:6956295
- 上传时间:2023-01-13
- 格式:DOCX
- 页数:27
- 大小:154.96KB
《通讯录管理系统c语言》实训报告含代码要点.docx
《《通讯录管理系统c语言》实训报告含代码要点.docx》由会员分享,可在线阅读,更多相关《《通讯录管理系统c语言》实训报告含代码要点.docx(27页珍藏版)》请在冰豆网上搜索。
《通讯录管理系统c语言》实训报告含代码要点
《高级程序设计》
课程实训报告
1题目与要求
1.1问题提出
本人计划编写一个通讯录管理系统。
通讯录一般包括通讯者的姓名、电话及类别等信息,用来管理学生基本信息及成绩信息。
要求实现通讯者的插入、查询、删除等操作。
1.2本系统涉及的知识点
结构、数组、循环、函数、分支、文件操作等。
1.3功能要求
1、建立学生信息,每个通讯者的信息包括:
姓名、电话号码、QQ、类别(小学,初中,高中,大学);
2、新增通讯录信息;
3、根据姓名,电话号码,QQ等查找该通讯者的信息并输出
4、输入通讯者的姓名,进行查找并修改信息,若不存在该通讯者,则提示说明;
5、根据姓名删除指定信息;
6、显示全部的通讯者信息;
7、能够将输入信息导出文件,同时能把文件导入到内存中;
8、退出整个系统操作。
2功能设计
2.1算法设计
1、利用switch语句设计如图1所示的主菜单:
图1学生信息管理系统主菜单
2、菜单选项示例:
选择1后,调用新增函数,进入函数后利用printf(),scnaf()语句实现一个如图2所示的输入。
图2排序子菜单
选择2后,调用查找函数,进入函数后利用switch语句实现一个如图3所示的菜单,该菜单中每个选项调用一个函数,完成通讯录信息的查找。
图3查找子菜单
3、根据所选菜单编写相应代码:
1)主函数main():
根据选单的选项调用各函数,并完成相应的功能。
2)菜单函数menu():
显示提示选单。
3)新增函数add():
在通讯录结构体总追加入新的通讯录信息,并返回选单。
4)查找函数find():
查询某人的信息,如果找到了,则显示该人的信息,如果未找到,则提示通讯录中没有此人的信息,并返回选单。
5)修改函数alter():
修改某人的信息,如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回选单。
6)删除函数Delete():
删除某人的信息,如果未找到要删除的人,则提示通讯录中没有此人的信息,并返回选单。
7)显示函数list():
显示通讯录中的所有记录。
8)导入函数input():
能从指定的文件中读入通讯录的信息.
9)导出函数output的:
能将通讯录的信息写入指定的文件中
10)退出函数quit():
退出选单。
11)名字查找函数Find():
作为查找,输入修改,删除时调用的名字查找函数,判断是否存在要查找的记录,若存在则返回‘0’,不存在则返回其他值。
12)电话号码查找函数Find_num(),QQ查找函数Find_qq(),类别查找函数Find_type()与名字查找函数功能一致。
主模块
图4通讯录管理系统模块图
2.2部分模块流程图
1).新增模块
Y
N
Y
NY
Y
N
2)删除模块
N
Y
Y
N
Y
Y
3程序代码设计
(1).菜单模块
1)函数原形:
voidmenu()
2)功能:
使用printf()语句输出主菜单提示。
4)说明:
每次执行完其他函数都调用菜单函数,使其返回主菜单,重新选择功能。
(2).新增模块
1)函数原形:
voidadd()
2)功能:
使用printf()、scnaf()、getchar()、while()、if()语句输出选项提示,并逐一输入通讯录全部信息(姓名、电话号码、QQ、类别)到结构体中。
利用while()进行重复输入,getchar()进行退出。
同时利用名字查找函数Find()对输入信息进行是否重复的判断。
3)变量及类型:
structstudentstud:
定义一个结构体变量,从第一次以后输入的数据放入其中,进行数据判断后才放入结构体数组中。
4)说明:
执行完输入函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。
3).查找模块
1)函数原形:
voidfind()
2)功能:
利用while()重复查找功能,getchar()进行退出循环。
switch(),getchar()进行按姓名、电话号码、QQ等查找方式的选择。
按照相应的选择方式调用名字查找函数Find(),电话号码查找函数Find_num(),QQ查找函数Find_qq(),类别查找函数Find_type()。
3)变量及类型:
chars[20]:
选择查找方式后将姓名、电话、QQ等放入其中再调用查找函数。
charch:
对查找方式进行选择。
charch1:
对退出查找进行选择。
(4).修改模块
1)函数原形:
voidalter()
2)功能:
用if-else作处理。
调用名字查找函数Find(),如果无该查找记录则提示且退出修改函数。
反之利用switch()修改的选择1.覆盖修改(重新输入全部信息),2.部分修改,当选择2时提供姓名、电话号码、QQ、类别四个修改选项,且利用while()进行多项修改。
3)变量及类型:
char,s[20]:
选择查找方式后将姓名、电话、QQ等放入其中再调用查找函数。
char,ch:
选择2部分修改时,当选择提供姓名、电话号码、QQ、类别四个修改选项
charch1:
控制退出switch()。
charch2:
控制退出while()。
(5).删除模块
1)函数原形:
voidDelete()
2)功能:
调用名字查找函数Find()判断数据的重复性,while()进行多次操作。
3)变量及类型:
chars[20]:
对数据姓名、电话、QQ等放入其中再调用查找函数。
charch:
控制退出while()
charch1:
控制退出while()
(6).显示模块
1)函数原形:
voidlist()
2)功能:
for,printf显示去全部的通讯录信息。
3)变量及类型:
(7).导出模块
1)函数原形:
voidoutput()
2)功能:
将内存中的数据导出到文件中。
3)变量及类型:
FILE*fp:
进行文件指针操作。
(8).导入模块
1)函数原形voidinput()
2)功能:
将文件中的数据导出到中内存。
3)变量及类型:
FILE*fp:
进行文件指针操作。
(8).查找返回模块
1)函数原形intFind(chars[]),intFind_num(chars[]),intFind_qq(chars[]),intFind_type(chars[])。
2)功能:
用于名字,电话号码,QQ,类别查找。
3)变量及类型:
inti:
用于for循环。
intc:
对名字判断后返回值。
4总结
1.通过本次实训巩固对高级语言程序设计这门课程的教学内容,提高对C语言的基本应用能力
2.同时通过本实训课程,训练程序设计的思维能力,提高了分析问题和解决问题的能力,为后续专业课程的学习打下良好的基础。
3.掌握了C语言程序设计方法,熟悉使用VC6.0软件开发C语言程序的过程。
熟悉C语言基本数据类型的定义和使用、用户自定义类型的定义和使用。
4.熟悉顺序结构、分支结构和循环结构的设计思想以及代码实现,体会了模块化程序设计的思想。
要求各个功能用函数实现
5.问题分析与算法设计的能力进一步提高。
参考文献
[1]张磊,C语言程序设计(第2版),高等教育出版社,2009
[2],张磊,C语言程序设计实验与实训指导及题解(第2版),高等教育出版社,2009
附录:
程序清单
#include
#include
#defineM100
staticintN=0,I=0;
structstudent
{
charname[20];
charnum[20];
charqq[20];
chartype[10];
}stu[M];
voidmenu();
voidadd();
voidfind();
voidalter();
voidDelete();
voidlist();
voidinput();
voidoutput();
intquit();
intFind(char[]);
intFind_num(char[]);
intFind_qq(char[]);
intFind_type(char[]);
voidmain()
{
intop;
menu();
while
(1)
{
printf("\t\n\t\t请选择功能(1-8):
");
scanf("%d",&op);
getchar();
switch(op)
{
case1:
printf("\n\t1.***********新增记录****************\n");
add();
break;
case2:
printf("\n\t2.**********查找通讯录***************\n");
find();
break;
case3:
printf("\n\t3.**********修改通讯录***************\n");
alter();
break;
case4:
printf("\n\t4.**********删除通讯录***************\n");
Delete();
break;
case5:
printf("\n\t5.**********显示通讯录***************\n");
list();
break;
case6:
printf("\n\t6.*******从内存导出文件中************\n");
output();
break;
case7:
printf("\n\t7.*******从文件导入内存中************\n");
input();
break;
break;
case8:
printf("\n\t8.*************退出******************\n");
op=quit();
break;
default:
printf("\t***Nothavethefunction!
***\n");
break;
}
if(op==8)
{
printf("\n\t感谢您的使用,已退出程序!
\n\t");
break;
}
else
continue;
}
}
voidmenu()
{
printf("\n");
printf("\t============通讯录管理菜单===========\n");
printf("\t*\t1.增加新的记录*\n");
printf("\t*\t2.查找通讯录*\n");
printf("\t*\t3.修改通讯录*\n");
printf("\t*\t4.删除通讯录*\n");
printf("\t*\t5.显示全部通讯录*\n");
printf("\t*\t6.把通讯录导出到文件*\n");
printf("\t*\t7.从文件导入通讯录*\n");
printf("\t*\t8.退出*\n");
printf("\t=====================================\n");
}
//1实现新增
voidadd()
{
structstudentstud;
while
(1)
{
printf("\n\t***当前共存在%d条记录,请输入下一条***",N);
if(N==0)
{
printf("\n\t请输入姓名:
");
scanf("%s",stu[N].name);
printf("\t请输入电话号码:
");
scanf("%s",stu[N].num);
printf("\t请输入QQ号:
");
scanf("%s",stu[N].qq);
printf("\t请输入类别(小学、初中、高中、大学):
");
scanf("%s",stu[N].type);
N++;
printf("\n\t是否输入下一条(Y)?
按任意键返回主菜单:
");
if(getchar()=='Y'||getchar()=='y')
continue;
break;
}
printf("\n\t请输入姓名:
");
scanf("%s",&stud.name);
printf("\t请输入电话号码:
");
scanf("%s",&stud.num);
printf("\t请输入QQ号:
");
scanf("%s",&stud.qq);
printf("\t请输入类别(小学、初中、高中、大学):
");
scanf("%s",&stud.type);
if(!
Find(stud.name))
{
printf("\n\n\t发现通讯录中存在该记录,确认新增吗(Y)?
其它任意键将覆盖:
");
if(getchar()=='Y'||getchar()=='y')
{
stu[N]=stud;
N++;
}
else
stu[I]=stud;
printf("\n\t$$$$$$操作成功!
$$$$$$\n");
}
else
{
stu[N]=stud;
N++;
}
printf("\n\t是否输入下一条(Y)?
按任意键返回主菜单:
");
if(getchar()=='Y'||getchar()=='y')
continue;
break;
}
menu();
}
//2实现查找
voidfind()
{
chars[20],ch,ch1;
while
(1)
{
printf("\n\t=========选择查找方式=========");
printf("\n\t*\t1.按姓名查找*");
printf("\n\t*\t2.按电话号码查找*");
printf("\n\t*\t3.按QQ查找*");
printf("\n\t*\t4.按类别查找*");
printf("\n\t=============================\n");
printf("\n\t请输入查找方式(1-4):
");
ch=getchar();
getchar();
switch(ch)
{
case'1':
printf("\n\t请输入姓名:
");
gets(s);
if(Find(s))
printf("\n\t$$$查找失败,请确认是否输入有误或不存在该记录!
$$$\n");
break;
case'2':
printf("\n\t请输入电话号码:
");
gets(s);
if(Find_num(s))
printf("\n\t$$$查找失败,请确认是否输入有误或不存在该记录!
$$$\n");
break;
case'3':
printf("\n\t请输入QQ号码:
");
gets(s);
if(Find_qq(s))
printf("\n\t$$$查找失败,请确认是否输入有误或不存在该记录!
$$$\n");
break;
case'4':
printf("\n\t请输入类别:
");
gets(s);
if(Find_type(s))
printf("\n\t$$$查找失败,请确认是否输入有误或不存在该记录!
$$$\n");
break;
default:
printf("\t***Havenotthefunction!
***");
printf("\t\n");
break;
}
printf("\n\n\t继续查找吗(Y)?
按任意键返回主菜单:
");
ch1=getchar();
getchar();
if(ch1=='Y'||ch1=='y')
continue;
break;
}
menu();
}
//3实现修改
voidalter()
{
charch,ch1,ch2,s[20];
printf("\n\t请输入要修改的姓名:
");
gets(s);
if(Find(s))
printf("\n\t$$$查找失败,请确认是否输入有误或不存在该记录!
$$$\n");
else
{
printf("\n\n\t===============请选择修改方式==============");
printf("\n\t*\t1.覆盖修改(重新输入全部信息)*");
printf("\n\t*\t2.部分修改*");
printf("\n\t===========================================\n");
printf("\n\t请选择修改的方式(1-2):
");
ch=getchar();
getchar();
switch(ch)
{
case'1':
printf("\n\t请输入姓名:
");
scanf("%s",stu[I].name);
printf("\t请输入电话号码:
");
scanf("%s",stu[I].num);
printf("\t请输入QQ:
");
scanf("%s",stu[I].qq);
printf("\t请输入类别(小学、初中、高中、大学):
");
scanf("%s",stu[I].type);
printf("\n\t修改成功!
修改后记录为:
\n");
printf("\n\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("\n\t姓名\t电话号码\tQQ\t\t类别");
printf("\n\t%-8s%-16s%-16s%-8s",stu[I].name,stu[I].num,stu[I].qq,stu[I].type);
break;
case'2':
while
(1)
{
printf("\n\t**请选择要修改的项目:
***");
printf("\n\t1.姓名");
printf("\n\t2.电话号码:
");
printf("\n\t3.QQ:
");
printf("\n\t4.类别:
");
printf("\n\t************************\n");
printf("\n\t请输入要修改的项目(1-4):
");
ch1=getchar();
getchar();
switch(ch1)
{
case'1':
printf("\n\t请输入修改后的姓名:
");
scanf("%s",s);
break;
case'2':
printf("\n\t请输入修改后的电话号码:
");
scanf("%s",stu[I].num);
break;
case'3':
printf("\n\t请输入修改后的QQ:
");
scanf("%s",stu[I].qq);
break;
case'4':
printf("\n\t请输入修改后的类别(小学、初中、高中、大学):
");
scanf("%s",stu[I].type);
break;
}
getchar();
printf("\n\t$$$修改成功!
$$$\n\n修改后记录为:
");
printf("\n\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("\n\t姓名\t电话号码\tQQ\t\t类别");
printf("\n\t%-8s%-16s%-16s%-8s",stu[I].name,stu[I].num,stu[I].qq,stu[I].type);
printf("\n\n\t继续修改(Y)?
按任意键返回主菜单:
");
ch2=getchar();
getchar();
if(ch2=='Y'||ch2=='y')
continue;
break;
}
break;
default:
printf("\t***Nothavethefunction!
***\n");
break;
}
}
menu();
}
//4实现删除
voidDelete()
{
chars[20],ch,ch1;
while
(1)
{
while
(1)
{
printf("\n\t请输入要删除的姓名:
");
scanf("%s",s);
getchar();
if(Find(s))
{
printf("\n\t不存在该条记录,请确认是否输入有误或不存在该记录!
\n");
break;
}
else
{
printf("\n\n\t确认删除该条记录吗(Y)?
按任意键保留原纪录并返回主菜单:
");
ch=getchar();
getchar();
if(ch=='Y'||ch=='y')
{
for(I;I stu[I]=stu[I+1]; printf("\n\t$$$删除成功! $$$\n"); N-=1; break; } printf("\n\t$$$已保留原纪录! $$
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通讯录管理系统c语言 通讯录 管理 系统 语言 报告 代码 要点