详细通讯录课程设计报告Word文件下载.docx
《详细通讯录课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《详细通讯录课程设计报告Word文件下载.docx(32页珍藏版)》请在冰豆网上搜索。
3.2.2删除21
3.3.3添加21
3.3.4查询界面22
4遇到的问题和解决方法1
5课程设计小结2
1总体设计与算法分析
1.1课程需求分析
学生通过课程设计加深理解课堂教学内容,要求学生在设计中逐步提高程序设计和调试能力,培养学生解决实际问题的能力,算法分析能力和学生的科技论文写作能力。
本程序——通讯录的制作,为了实现数据的输入、输出、追加、删除、排序查询、输出、存、取功能。
程序的基本功能为:
建立通讯者信息,包括姓名、国家、城市、街道、邮编、电话;
添加新的通讯者信息;
按姓名查询某个通讯者的信息;
按姓名删除某个通讯者的信息;
输出显示通讯录的所有信息;
将数据以文件的形式存储在磁盘上;
在下次操作时课从磁盘中读取原保存数据。
1.2数据结构设计
该系统用下面六个功能模块编写,每个模块执行不同的功能,体现了模块化设计的思想。
下面六个模块都是利用C语言文件,向文件中追加数据、修改数据、查询数据和删除数据。
创建:
用fopen()建立一个文本文件,然后向其中输入数据(例如,向文件中输入“姓名”,“地址”等),并对文件进行命名。
添加:
可以添加通讯录记录,利用C语言文件,向文件中按顺序输入姓名、住址、单位、固定电话、手机号码、分类(如同事、朋友、同学、家人等)、E-mail、QQ,再用fclose()函数关闭并保存文件。
删除:
输入你要删除的人的姓名或学号后,系统会自动删除他(她)的记录,在删除通过switch语句满足提示你确认删除的功能,只有等你确认删除后才会删除。
查找:
为了满足用户的实际需求,设计了三种查询方式,可以用姓名、学号、电话三种方式查找通讯录记录。
这里用到strcmp()函数,通过比较字符串是否相同来判别是否找到相关信息,找到后,就把文件中的数据赋给对应的变量,再把变量所带的值输出到屏幕上。
排序:
可以选择按姓名或者学号对通讯录进行排序,用strcmp()函数通过比较字符串从左到右的ASCII码大小来实现。
保存:
用到fclose()函数,每次操作成功后会自动保存到指定的文件中。
1.3关键算法分析与设计
1.3.1总体设计
本系统首先设计出了主函数,然后根据去要实现的功能分别设计拉,显示、删除、查找、修改、添加功能的子函数。
在显示的函数设计过程中首先运用拉文件的读取等必要的知识通过把文件的内容读取到内存然后打印出来。
删除函数的设计是首先从文件内找到要删除的人,然后通过写一个实现删除目的的FOR循环将该人从内存里删除,然后再用写的方式打开文件,将内存内的信息写入文件,实现删除。
查找也是先打开文件,用一个字符串对比的方法找出用户要查找的人,然后打印出来。
修改也大体和删除相同,添加函数在设计时通过申请一片空间,然后通过指针将需要添加的信息添加进去,从而实现添加功能。
1.3.2关键算法分析
查找模块:
该查找功能分3种方式查找,姓名查找(按1),电话查找(按2),学号查找(按3)。
这是通过switch语句来实现,case1后面是按姓名查找函数,case2后面是按电话查找函数,case3后面是按学号查找函数。
如果用户要选择一种方式查找通讯录记录,只需输入对应的数字就可以。
三种方法大同小异,下面就说明姓名查找吧!
查找用户,进入查找界面后并且键入“1”后,就执行姓名查找方式,此时界面上会显示“请输入姓名”,然后系统将用户输入的姓名赋给对应的变量,然后用循环(if(strcmp(student[i].name,name)==0))这条语句来完成)来找出这个人的所有记录,并将其输出到屏幕上。
如果没有此人的记录,那就会输出“没有相同姓名的学生纪录”,或‘没有改学生的信息‘这里输出视查找方式而定。
执行查找功能后会返回主菜单,并提示用户再次选择。
2程序流程图和与函数说明
2.1主函数流程图
2.2函数说明
2.2.1主函数
voidmain()
{
readfromfile();
while
(1)
mainmenu();
}
}
2.2.2主菜单
voidmainmenu()//主菜单
charchoic;
system("
cls"
);
printf("
\n\t\t********************主菜单********************"
\n\t\t***********1-新添纪录2-查询************"
\n\t\t***********3-删除4-记录排序************"
\n\t\t***********5-导出6-退出***********"
\n\t\t************************************************"
\n\t\t请选择:
"
choic=getch();
switch(choic)
case'
1'
:
newrecord();
break;
2'
searchmenu();
3'
deletemenu();
4'
listmenu();
5'
writetofile();
6'
exit(0);
default:
2.2.3查询菜单
查询菜单
voidsearchmenu()//查询
\n\t\t*******************查询菜单*******************"
\n\t\t**********1-显示所有2-按学号查询************"
\n\t\t**********3-按姓名查询4-按电话查询************"
\n\t\t**********5-返回主菜单************"
showall();
searchbyid();
searchbyname();
searchbyphone();
\n\t\t按任意键返回主菜单:
mark++;
getch();
return;
if(mark==0)
\n\t\t没有该学生的信息"
\n\t\t按任意键返回主菜单"
按电话查询
voidsearchbyphone()//按电话查询
{//按电话查询
intmark=0;
inti;
inta=0;
\n\t\t******************按电话查找******************"
charphone[10];
\n\t\t请输入学号:
scanf("
%s"
phone);
for(i=0;
i<
num;
i++)
if(strcmp(student[i].phone,phone)==0)
\n\t\t**************以下是您查找的学生信息**********"
\n\t\t学号:
%s"
student[i].id);
\n\t\t姓名:
student[i].name);
\n\t\t电话:
student[i].phone);
\n\t\t地址:
student[i].adress);
\n\t\te-mail:
student[i].e_mail);
按姓名查询
voidsearchbyname()//按姓名查询
\n\t\t*****************按姓名查找*******************"
charname[20];
\n\t\t请输入姓名:
name);
for(i=a;
if(strcmp(student[i].name,name)==0)
\n\t\t*************以下是您查找的学生信息***********"
if((i+1)<
num)
\n\t\t是否继续查找相同名字的学生信息:
(y/n)"
if(getch()=='
y'
)
a=i;
continue;
else
if(mark!
=0)
\n\t\t没有相同姓名的学生纪录"
按学号查询
voidsearchbyid()//按学号查询
\n\t\t******************按学号查找******************\n"
charid[10];
id);
if(strcmp(student[i].id,id)==0)
2.2.4删除
删除菜单
voiddeletemenu()//删除菜单
if(num==0)
\n\t\t对不起,文件中无任何纪录"
\n\t\t*******************删除菜单*******************"
\n\t\t***********1-删除所有2-删除单个***********"
\n\t\t***********3-返回主菜单***********"
deleteall();
deleteone();
删除所有
voiddeleteall()//删除所有
\n\t\t确认删除?
fclose(fp);
if((fp=fopen("
student.txt"
"
wb"
))==NULL)
\n\t\t不能打开文件,删除失败"
num=0;
\n\t\t纪录已删除,按任意键返回主菜单"
删除单个
voiddeleteone()//删除单个
\n\t\t1-按学号删除2-按姓名删除"
deletebyid();
deletebyname();
按姓名删除
voiddeletebyname()//按姓名删除
intfindmark=0;
intj;
intdeletemark=0;
\n\t\t请输入要删除学生姓名:
for(i=a;
if(strcmp(student[i].name,name)==NULL)
\n\t\t以下是您要删除的学生纪录:
findmark++;
\n\t\t________________________________"
\n\t\t是否删除?
for(j=i;
j<
num-1;
j++)/*纪录移动,从stud数组中删除之*/
student[j]=student[j+1];
num--;
deletemark++;
\n\t\t删除成功"
if((i+1)<
\n\t\t是否继续删除相同姓名的同学信息?
\n\t\t是否继续删除?
if((deletemark==0)&
&
(findmark==0))
\n\t\t没有该同学的纪录"
elseif(findmark!
\n\t\t没有重名信息"
按学号删除
voiddeletebyid()//按学号删除
inti,j;
charid[20];
\n\t\t请输入要删除学生学号:
for(i=0;
if(strcmp(student[i].id,id)==NULL)
if(deletemark==0)
2.2.5排序
按姓名排序
voidlistbyname()//按姓名排序
structrecordtmp;
for(i=1