C语言程序设计课程设计通讯录管理系统.docx
《C语言程序设计课程设计通讯录管理系统.docx》由会员分享,可在线阅读,更多相关《C语言程序设计课程设计通讯录管理系统.docx(18页珍藏版)》请在冰豆网上搜索。
C语言程序设计课程设计通讯录管理系统
通讯录信息管理系统设计
计算机学院计算机科学与技术专业
1.课程设计的目的
学习了C语言程序设计这门课程之后,使我对程序设计有了一定的了解,为了熟练掌握C语言的语法特点、及其数据结构,提高自身编写程序的能力。
通过课程设计实现理论知识与实际情况的结合,使所学知识能够在现实社会中起到一定的作用,防止所编写的程序脱离实际,让程序可以更好的发挥作用,以便减轻实际工作中所遇到的繁琐步骤,提高现实工作中的效率。
此外通过课程设计提高逻辑思考能力和解决实际问题的能力。
程序设计中,语句的语法和常量变量的定义都有严格的要求,有时输了一个中文标点、打错了一个字母,编译就不通过,程序无法正常运行。
因此,程序设计初学阶段,学生经常会犯这样的错误,可能要通过几次乃至十多次的反复修改、调试,才能成功,但这种现象会随着学习的深入而慢慢改观。
这当中就有一个严谨治学、一丝不苟的科学精神的培养,又有一个不怕失败、百折不挠品格的锻炼。
通讯录信息管理系统是生活中不可缺少的部分编写了一个通讯录信息管理系统是十分必要的。
本程序设计具有通讯信息的录入,进行保存、查找、删除等功能,操作界面简洁美观,易于操作。
程序用了条件、循环、指针、结构体等知识点,综合了文件的打开和保存编写的。
软件运用菜单实现交互式管理,用户轻松的按键既可实现对软件的操作,操作简单易懂,功能丰富,可以很好的满足的需要。
通过对通讯录管理系统的设计,进一步理解和掌握C语言这门课程的知识点,能够熟练的调用各种函数,把各种C语句有机的结合起来,提高自己C语言程序设计的能力,为今后解决实际问题打下良好基础。
2.设计方案论证
2.1设计思路
建立一个函数,用来添加、显示、删除、查询、修改、保存通讯录等信息,完成通讯录的功能。
主函数可以调用六个子函数,分别完成添加记录、显示记录、删除记录、查询记录、修改记录、保存记录、退出系统等功能。
在主函数中可以以1、2、3、4、5、6数字键分别可以执行某个功能模块。
程序设计
2.2.1根据图1定义数据类型建立函数
typedefstruct
{
charNum;2.2.2
2.2.32.2.3.添加通讯录记录流程图:
2.2.3.2.显示通讯录记录流程图:
2.2.3.
3.删除通讯录记录流程图:
2.2.3.4.查询通讯录记录流程图:
2.2.3.5.修改通讯录记录流程图:
源程序
#include<>
#include<>
#include<>
typedefstruct
{
charNum;添加记录│\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");
printf("\t\t请您选择(0-6):
");
c=getchar();
}while(c<'0'||c>'6');
return(c-'0');
}
intInput(Personper[],intn)
{
inti=0;
charsign,x[10];
while(sign!
='n'&&sign!
='N')
{
printf("\t编号:
");
scanf("\t%d",&per[n+i].score);
printf("\t姓名:
");
scanf("\t%s",per[n+i].name);
printf("\t年龄:
");
scanf("\t%s",per[n+i].age);
printf("\t电话号码:
");
scanf("\t%s",per[n+i].num);
printf("\t通讯住址:
");
scanf("\t%s",per[n+i].adds);
printf("\t电子邮箱:
");
scanf("\t%s",per[n+i].email);
printf(“\t关系:
”);
scanf(“\t%s”,per[n+i].relation);
gets(x);
printf("\n\t是否继续添加(Y/N)");
scanf("\t%c",&sign);
i++;
}
return(n+i);
}
voidDisplay(Personper[],intn)
{
inti;
printf("----------------------------------------------------------------------\n");/*格式*/
printf("编号姓名年龄关系电话号码通讯地址电子邮箱\n");
printf("----------------------------------------------------------------------\n");
for(i=1;i{
printf("%-5d%-8s%-6s%-40s%-13s%-15s%-15s\n",per[i-1].score,per[i-1].name,per[i-1].age,per[i-1].relation,per[i-1].num,per[i-1].adds,per[i-1].email);
if(i>1&&i%10==0)
{
printf("\t-----------------------------------\n");
printf("\t");
system("pause");
printf("\t-----------------------------------\n");
}
}
printf("----------------------------------------------------------------------\n");
system("pause");
}
intDelete_a_record(Personper[],intn)
{
chars[20];
inti=0,j;
printf("\t请输入想删除记录中的名字:
");
scanf("%s",s);
while(strcmp(per[i].name,s)!
=0&&iif(i==n)
{
printf("\t通讯录中没有此人!
\n");
return(n);
}
for(j=i;j{
strcpy(per[j].num,per[j+1].num);
strcpy(per[j].name,per[j+1].name);
strcpy(per[j].age,per[j+1].age);
strcpy(per[j].relation,per[j+1].relation);
strcpy(per[j].adds,per[j+1].adds);
strcpy(per[j].email,per[j+1].email);
per[j].score=per[j+1].score;
}
printf("\t\t\t已经成功删除!
\n");
return(n-1);
}
voidQuery_a_record(Personper[],intn)
{
intm;
printf("\t\n请选择查询方式:
\n");
printf("\t┌──────┐\n");
printf("\t│1------姓名│\n");
printf("\t│2------电话│\n");
printf("\t│3------地址│\n");
printf("\t│4------返回│\n");
printf("\t└──────┘\n");
printf("请选择:
");
scanf("%d",&m);
while(m!
=1&&m!
=2&&m!
=3&&m!
=4)
{
printf("输入错误,请重新选择:
");
scanf("%d",&m);
}
if(m==1)
{
chars[20];
inti=0;
printf("\t请输入想查询的姓名:
");
scanf("\t%s",s);
while(strcmp(per[i].name,s)!
=0&&iif(i==n)
{
printf("\t通讯录中没有此人!
\n");
return;
}
printf("\t此人编号:
%d\n",per[i].score);
printf("\t此人年龄:
%s\n",per[i].age);
printf("\t与我的关系:
%s\n",per[i].relation);
printf("\t电话号码:
%s\n",per[i].num);
printf("\t通讯地址:
%s\n",per[i].adds);
printf("\t电子邮箱:
%s\n",per[i].email);
};
if(m==2)
{
chars[20];
inti=0;
printf("\t请输入想查询的电话:
");
scanf("\t%s",s);
while(strcmp(per[i].num,s)!
=0&&iif(i==n)
{
printf("\t通讯录中没有此人!
\n");
return;
}
printf("\t此人编号:
%d\n",per[i].score);
printf("\t此人姓名:
%s\n",per[i].name);
printf("\t此人年龄:
%s\n",per[i].age);
printf("\t与我的关系:
%s\n",per[i].relation);
printf("\t通讯地址:
%s\n",per[i].adds);
printf("\t电子邮箱:
%s\n",per[i].email);
};
if(m==3)
{
chars[20];
inti=0;
printf("\t请输入想查询的地址:
");
scanf("\t%s",s);
while(strcmp(per[i].adds,s)!
=0&&iif(i==n)
{
printf("\t通讯录中没有此人!
\n");
return;
}
printf("\t此人编号:
%d\n",per[i].score);
printf("\t此人姓名:
%s\n",per[i].name);
printf("\t此人年龄:
%s\n",per[i].age);
printf("\t与我的关系:
%s\n",per[i].relation);
printf("\t电话号码:
%s\n",per[i].num);
printf("\t电子邮箱:
%s\n",per[i].email);
};
}
voidChange(Personper[],intn)
{
chars[20];
inti=0;
printf("\t请输入想修改的记录中的名字:
");
scanf("%s",s);
while(strcmp(per[i].name,s)!
=0&&iif(i==n)
{
printf("\t通讯录中没有此人!
\n");
return;
}
printf("\t编号:
");
scanf("\t%d",&per[i].score);
printf("\t姓名:
");
scanf("\t%s",per[i].name);
printf("\t年龄:
");
scanf("\t%s",per[i].age);
scanf("\t%s",per[i].relation);
printf("\t关系:
");
printf("\t电话号码:
");
scanf("\t%s",per[i].num);
printf("\t通讯住址:
");
scanf("\t%s",per[i].adds);
printf("\t电子邮箱:
");
scanf("\t%s",per[i].email);
printf("\t修改成功!
");
}
voidWritetoText(Personper[],intn)
{
inti=0;
FILE*fp;core,per[i].name,per[i].age,per[i].relation,per[i].num,per[i].adds,per[i].email);
i++;
}
fprintf(fp,"------------------------------------------------------------------------------------------\n");
fprintf(fp,"***************************************共有%d条记录****************************************\n",n);
fclose(fp);//关闭文件
printf("保存成功!
\n");
}
voidmain()//主函数
{
intn=0;
for(;;)
{
switch(menu_select())
{
case1:
printf("\n\t添加记录到通讯录\n");//添加记录
n=Input(pe,n);
break;
case2:
printf("\n\t\t\t通讯录记录表\n");//显示记录
Display(pe,n);
break;
case3:
printf("\n\t从通讯录中删除记录\n");
n=Delete_a_record(pe,n);//删除记录
printf("\t");
system("pause");
break;
case4:
printf("\n\t在通讯录中查找记录\n");
Query_a_record(pe,n);//查找记录
printf("\t");
system("pause");
break;
case5:
printf("\n\t修改通讯录中的记录\n");
Change(pe,n);//修改数据
printf("\t");
system("pause");
break;
case6:
printf("\n\t保存功能\n");
WritetoText(pe,n);//保存数据
printf("\t");
system("pause");
break;
case0:
printf("\n\t\t谢谢使用,再见!
\n");//结束程序
printf("\n\t\t");
system("pause");
exit(0);
}
}
}
3.设计结果与分析
将源程序编译、链接后生成可执行文件,运行该文件会看到如图8所示界面。
运行主函数时,首先调用函数menu();,该函数主要是利用输出函数printf进行输出,其结图所示。
增加信息
3.2.1输入1显示添加通讯录界面。
这一函数实现了对字符串赋值的功能[1]。
系统提示通讯录使用者输入相应信息,
然后用scanf函数获取输入数据。
每次输入结束后,系统输出询问是否继续添加的信息,然后执行switch语句,如果返回值是“y”,则继续执行addnewcard()函数添加用户,否则返回主菜单。
3.2.2输入2显示显示通讯录界面。
这一函数实现了对字符串赋值的功能[2]。
系统提示通讯录使用者输入相应信息,然后用scanf函数获取输入数据。
,然后执行switch语句,如果返回值是“y”,则继续执行函数显示,否则返回主菜单。
3.2.3在主菜单输入3显示删除通讯录界面。
在主菜单界面输入数字“3”,执行deletecard()函数删除用户。
当通讯录执行者输入要删除学生的姓名,系统会搜索数据库并将搜索结果输出。
然后征求确认。
每次删除成功后系统会询问是否继续删除,然后执行相应操作。
删除后,通讯录里的显示记录显示:
删除通讯录记录时首先选择出名字,其次在显示删除后程序才真正的删除,再进入显示界面就不会再显示原来所谓信息
3.2.4在主菜单输入4显示查询通讯录界面。
这一函数提示通讯录管理人员可以有姓名、电话、地址三种输入方式,调用scanf函数获取输入信息,然后执行if语句,则会显示查询用户信息信息;此外在此操作过程中选择1、2、3、分别可以按照姓名、电话号码、家庭住址进行快速查询。
3.3.5在主菜单输入5显示修改通讯录界面。
这一函数实现了对字符串赋值的功能[5]。
系统提示通讯录使用者输入相应信息,然后用scanf函数获取输入数据。
每次输入结束后,系统输出询问是否继续修改信息,然后执行if语句,如果返回值是“y”,则继续执行修改信息,否则返回主菜单。
修改后,通讯录里的显示记录:
3.3.6在主菜单输入6显示保存通讯录界面。
进入保存功能后,系统会调用voidWritetoText(Personper[],intn)函数
并且提示通讯录管理者关于保存的信息进行记录自动保存。
从而便于我们直接查询。
保存后打开文件的截图:
往事如观流水,来者如昂高山!
转眼间学习C语言也有半年了。
这次的程序实设计实验是对自己进入大学以来学习C语言结果的一次大检验。
自己动手,自己发现和解决问题。
发现了自己的许多不足。
平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大部分问题,当然还存在一些问题没有解决。
相信在以后的学习能够解决好它们。
但是,收获还是不小的,我不仅对C的操作有了进一步的掌握,还了解到了程序设计的书写风格及其注释的格式。
当我选择通讯录这个题目时,一开始想运用大量链表及指针来完成,但是在慢慢琢磨之后,觉得这个不一定要用链表,于是改变了编程思路。
当然还有不少文件的读写问题,不过还是通过不断测试之后顺利解决了。
另外一点要说的就是这个程序用了很多的循环,因此对于循环的控制要十分小心,有时while和do-while的区别也是十分重要的。
还有一点体会就是,书上和老师教的内容是有限的,我们需要不断地靠自己去学习,向他人请教,了解和掌握更多的知识,这样我们才能编出更好的C程序。
总体来说,这次C语言课程设计还是比较顺利的,虽然最终程序还存在一些不足,但能在有限的时间里完完整整的完成任务我还是比较高兴的。
最后,要感谢学校为我们提供这次课设机会,也要感谢刘伟老师的指导和同学们对我的帮助与支持。