通讯录管理系统.docx
- 文档编号:30690615
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:18
- 大小:104.48KB
通讯录管理系统.docx
《通讯录管理系统.docx》由会员分享,可在线阅读,更多相关《通讯录管理系统.docx(18页珍藏版)》请在冰豆网上搜索。
通讯录管理系统
《程序设计基础(C语言)》课程设计报告
通讯录管理系统
学生姓名
学号
201110720
班级
热能与动力工程
指导教师
日期
2012年6月21日
兰州交通大学新能源与动力工程学院
评分
C语言课程设计报告
一、设计目标
本系统是由xxx,xxx,xxx共同设计的一个集个人通讯信息的添加、删除、查找、输出、系统的退出为一体的一个通讯录系统,其中添加、退出、主函数的调用由xxx设计,删除由xxx设计,查找由xxx设计,输出由xxx设计。
将网络和通讯录管理结合起来,使得管理人员对参考人员的实际情况一目了然,经过详细的系统调查,开发出的操作简单而且方便使用的一个通讯系统。
实现学生信息的动态管理,使得对学生信息的管理更加方便,同时计算机具有手工管理所无法比拟的优点。
这样管理人员在工作起来效率高,可以不用再做大量的记录。
从而大大减轻了工作量。
运用C语言基本知识,编写一个通讯录管理系统。
通过完成本课题,进一步熟悉C语言的基本知识,掌握C语言的文件操作,进一步熟悉指针的用法,数组的建立运用和函数的调用等。
加深对C语言基本知识的理解,锻炼编程的能力用C语言编写一个通讯录管理系统软件,要求能实现通讯录管理系统中增加新记录,删除记录,显示通讯录的所有信息,按名字查询信息,保存通讯录,退出系统。
二、总体设计
1、程序设计组成框图:
2、程序设计流程图:
三、详细设计
1、系统总体结构分析
根据实际情况,我们使用原型法,即以少量代价快速地构造一个可执行的软件系统模型,使用户和开发人员可以较快的确定需求,然后采用循环进化的开发方式,对系统模型作连续的精化,将系统需具备的性质逐渐加上去,直到所有的性质全部满足。
以下为系统逻辑模型图:
系统逻辑图
2、主要功能函
1、功能函数add()
——本函数由xxx设计
函数的功能:
对学生信息的添加
函数的入口:
从main()的switch()开关结构中进入,即choice的值为1时进入该函数,打开。
txt数据文件,然后提示用户通过键盘对学生的信息进行读入。
函数调用关系:
被主函数调用。
由switch()开关结构中进入,并在文中返回值的空值void函数。
函数的出口:
当程序执行提示语“printf("您想要增加几个联系人:
")”的时候,对用户的操作进行提示,如果用户在提示下输入了1-5数值将进行继续操作,则用户选择了结束数据的录入,如果输入错误则提示“printf("无法打开文件,按任意键退出!
!
\n")”将结束该函数,而执行主函数main()中“break;”跳出switch()开关函数,继续执行for循环结构。
2、功能函数printf()——本函数由xxx设计
函数的功能:
对所有学生通讯录信息的显示。
函数的入口:
程序从main()的switch()开关结构中进入,即case的值为2时,开始入该函数,进入函数后,首先用“fopen()”打开文件,
函数调用关系:
被主函数调用。
由switch()开关结构中进入,并在文中无返回值的空值void函数。
函数的出口:
当输出排序结果用printf()标准输出到屏幕上,然后结束该函数,而执行主函数main()中“break;”跳出switch()开关函数,继续执行for循环结构。
3、功能函数dele()——本函数由xxx设计
函数的功能:
:
对所有学生通讯录信息的显示。
函数的入口:
程序从main()的switch()开关结构中进入,即case的值为2时,开始进入该函数,进入函数后,首先用“fopen()”打开文件,然后利用“fread()”读取二进制数据,最终利用选择排序法,按销售员的所选产品的总销售额对销售员进行排序。
函数调用关系:
被主函数调用。
由switch()开关结构中进入,并在文中无返回值的空值void函数。
函数的出口:
当结果用printf()标准输出到屏幕上,然后结束该函数,而行主函数main()中“break;”跳出switch()开关函数,继续执行for循环结构。
4、功能函数chazhao()——本模块由xxx设计
函数的功能:
查找学生信息
函数的入口:
程序从main()的switch()开关结构中进入,即case的值为4时进入该函数,打开txt数据文件,然后根据提示输入学生姓名或学号查找学生信息。
函数调用关系:
被主函数调用。
由switch()开关结构中进入,并在文中无返回值的空值void函数。
函数的出口:
当输出排序结果用printf()标准输出到屏幕上,然后结束该函数,而执行主函数main()中“break;”跳出switch()开关函数,继续执行for循环结构。
5、功能函数主菜单caidan()——本函数由xxx设计函数的功能:
主要作用是提示用户操作,体现模块化思想,主要是显示出
菜单让用户选择要进行的任务。
函数的入口:
从主函数main()中的switch*/caidan*/case/*菜单函数提示用户怎样选择*/进入函数,这是直接被主函数main()调用的。
函数调用关系:
被主函数调用。
并在文中无返回值的空值void函数。
函数的出口:
执行完所有的printf()函数后自动退出该函数。
6、功能函数主函数main()——本函数由xxx设计
函数的功能:
用于联系各个功能函数模块,以及退出程序时的退出画面提示。
函数的入口:
整个程序是从主函数开始的。
函数的出口:
当从main()的switch()开关结构中进入,即case的值为5时通过break;跳出for循环,然后退出main()函数,即:
退出整个程序。
函数调用关系:
该函数不被其它函数调用
(流程图见附录)
四、调试与测试
1、调试方法:
打开MicrosoftVisualC++6.0,先将各个功能函数的的内容清空,只保留主函数main(),然后编译检验main()函数中是否有错,如果没有错误,再连接、运行。
确认main()函数一切无误后,然后加入功能函数menu()函数与f1()函数,由于menu()函数比较简单,所以与add()函数一起进行调试,add()函数中主要注意读取文件,与写入文件,这都是二进制的形式。
若menu()函数与f1()函数编译、连接、运行没问题,继续加入f2()函数,就这样的方法依次检查调试f3()函数、f4()函数。
当所有的功能函数都加上且正确无误时,就可以进入下一个环节—程序的测试。
测试方法:
运行程序,然后进入通讯录管理系统的界面,在这里需要做的就是把自己当成一个使用者,来对该程序进行使用,看该程序有哪些方面用着不够爽,把这些问题依次整理出来,再对源程序进行修改,在这个过程中也需要对程序进行调试,不过不必将各个功能函数的的内容清空再进行如上述的调试方法,而是,改一部份运行一次,看是否有无。
2、在调试中遇到的问题:
在调试过程中,我们遇到诸多小问题,但都在我们共同讨论后解决了。
1)问题:
标点符号在输入的时候,使用的是中文输入法,这种错误一般都难以发现,让修改的时候找不到目标。
解决方法:
用“替换”。
如果程序中的error很多,不管error是什么,先将标点替换成英文的标点。
2)问题:
调试时,有的时候编译后没什么问题,就是在点击连接link时出现了错误。
而且,这种错误让我们不知道怎么修改。
但是我们的程序的确正确。
解决方法:
将源程序保存(save),然后关掉MicrosoftVisualC++6.0,重新启动MicrosoftVisualC++6.0,
3、调试结果截图
五、分析及结论
A、在设计中我们实现了设计目标的所有内容
B、其中遇到了以下问题:
在程序调试过程中,编译没错误,但构建时出现错误,导致程序无法运行
C、该程序的不足:
生成的可执行程序操作界面不太完美,由于基础问题没能完成对程序的向上一级返回程序的设计。
D、实践心得
经过C语言课程设计实践学习,使我对c语言有了更进一步的认识和了解,1通过实践,我也发现我的好多不足之处,首先是在程序输入上还不够熟练,经常按错字母,通过学习也有所改进;再有对c语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对c语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。
熟练地掌握了C语言的基本知识:
数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。
进一步掌握各种函数的应用,以及文件的读写操作等
我认为要学好c语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践才能增强和巩固我的知识。
只有这样我们才能成为合格的计算机人材。
六、程序源代码
#include
#include
#include
structlianxiren//联系人信息;
{
charname[20];
charaddress[50];
charnum[10];
chartele[20];
chare_mail[30];
};
charcaidan();
voidadd();
voidprint(structlianxirena[],int);//输入所有联系人
voiddele(structlianxirena[],int);
voidchazhao(structlianxirena[],int);
voidchazhao_name(structlianxirena[],intn);
voidchazhao_num(structlianxirena[],intn);
voidmain()
{
FILE*fp;
system("cls");
system("color71");
system("cls");
if((fp=fopen("通讯录.txt","a"))==NULL)
{
printf("无法打开文件,按任意键退出!
!
\n");
chara;
scanf("%c",&a);
exit(0);}
fclose(fp);
for(;;)
{
intn=0;charch;
structlianxirentongxunlu[100];
structlianxiren*p;
p=tongxunlu;
FILE*fp;
if((fp=fopen("通讯录.txt","r"))==NULL)
{
printf("无法打开文件,按任意键退出!
!
\n");
chara;
scanf("%c",&a);
exit(0);
}
else
while((ch=fgetc(fp))!
=EOF)
{
fscanf(fp,"%s%s%s%s%s",p->name,p->address,p->num,p->tele,p->e_mail);
p++;
n++;
}
switch(caidan())
{
case'1':
add();break;
case'2':
print(tongxunlu,n);break;
case'3':
dele(tongxunlu,n);break;
case'4':
chazhao(tongxunlu,n);break;
case'5':
exit(0);
}
}
}
charcaidan()
{
charchoose[5];
printf("******************************\n");
printf("☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
printf("*********************************\n");
printf("*=_=*\n");
printf("*=_=欢迎使用通讯录系统=_=*\n");
printf("*****************************************\n");
printf("*▏1,增加联系人信息▏*\n");
printf("**********************************************\n");
printf("*▏2,输出所有联系人▏*\n");
printf("**********************************************\n");
printf("*▏3,删除联系人▏*\n");
printf("**********************************************\n");
printf("*▏4,查找联系人▏*\n");
printf("******************************************\n");
printf("*▏5,退出通讯录▏*\n");
printf("*************************************\n");
printf("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
printf("***********************************\n");
for(;strcmp(choose,"1")&&strcmp(choose,"2")&&strcmp(choose,"3")&&strcmp(choose,"4")&&strcmp(choose,"5");)
{
printf("请输入您的选择(1-5):
");
scanf("%s",choose);}
returnchoose[0];
}
voidadd()//本函数有南东宁设计
{
inti;
FILE*fp;
if((fp=fopen("通讯录.txt","a"))==NULL)
{
printf("无法打开文件,按任意键退出!
!
\n");
chara;
scanf("%c",&a);
exit(0);}
intnum;
printf("您想要增加几个联系人:
");
scanf("%d",&num);
structlianxirent[50];
printf("请输入联系人信息:
\n");
for(i=0;i {printf("名字: "); scanf("%s",t[i].name); printf("\n地址: "); scanf("%s",t[i].address); printf("\n学号: "); scanf("%s",t[i].num); printf("\n电话: "); scanf("%s",t[i].tele); printf("\n电子邮箱: "); scanf("%s",t[i].e_mail);} for(i=0;i { fprintf(fp,"\n"); fprintf(fp,"%s%s%s%s%s",t[i].name,t[i].address,t[i].num,t[i].tele,t[i].e_mail);} printf("******已成功添加%d个联系人******\n",num); fclose(fp);} voiddele(structlianxirena[],intn)//本函数郝林涛所做 { structlianxirentemp[10]; charmingzi[20]; inti,j=0,s=0; printf("输入你要删除人的名字: "); scanf("%s",mingzi); printf("\n"); for(i=0;i { if(strcmp(mingzi,a[i].name)! =0) { strcpy(temp[j].name,a[i].name); strcpy(temp[j].address,a[i].address); strcpy(temp[j].num,a[i].num); strcpy(temp[j].tele,a[i].tele); strcpy(temp[j].e_mail,a[i].e_mail); j++;} else { s++; printf("你要删除的人的信息是: \n"); printf("名字: %-8s\n",a[i].name); printf("地址: %-10s\n",a[i].address); printf("学号: %-8s\n",a[i].num); printf("电话: %-15s\n",a[i].tele); printf("邮箱: %-20s\n",a[i].e_mail);} } FILE*fp; if((fp=fopen("通讯录.txt","w"))==NULL) { printf("无法打开文件,按任意键退出! ! \n"); chara; scanf("%c",&a); exit(0);} for(i=0;i { fprintf(fp,"\n"); fprintf(fp,"%s%s%s%s%s",temp[i].name,temp[i].address,temp[i].num,temp[i].tele,temp[i].e_mail);} if(s! =0)printf("****删除成功! ! ! ****\n"); elseprintf("您所要删除的联系人不存在,请核查拼写及大小写\n"); fclose(fp);} voidprint(structlianxirent[],intn)//本函数杨旭博所做 { if(n==0){printf("*****文件为空! ! ****\n");return;} inti; printf("☆☆☆☆☆☆☆★★★★★★☆☆☆☆☆☆☆☆\n"); printf("☆☆☆★★★★★★☆☆通讯录☆☆★★★★★★☆☆☆\n"); printf("☆☆☆☆☆☆☆★★★★★★☆☆☆☆☆☆☆☆\n"); for(i=0;i { printf("名字: %-8s\n",t[i].name); printf("地址: %-10s\n",t[i].address); printf("学号: %-8s\n",t[i].num); printf("电话: %-15s\n",t[i].tele); printf("邮箱: %-20s\n",t[i].e_mail); printf("\n");} } voidchazhao(structlianxirent[],intn) { inti; printf("输入选择: 1按姓名查找,2按学号查找: \n"); scanf("%d",&i); if(i==1)chazhao_name(t,n); if(i==2)chazhao_num(t,n);} voidchazhao_name(structlianxirena[],intn) { chars[20]; inti,f=0; printf("输入要查找的人的名字: \n"); scanf("%s",s); for(i=0;i { if(strcmp(s,a[i].name)==0) { f++; printf("您要找的人是: \n"); printf("名字: %-8s\n",a[i].name); printf("地址: %-10s\n",a[i].address); printf("学号: %-8s\n",a[i].num); printf("电话: %-15s\n",a[i].tele); printf("邮箱: %-20s\n",a[i].e_mail);} } if(f==0)printf("没有找到符合您要求的联系人,请核查你的输入! ! \n");} voidchazhao_num(structlianxirena[],intn) { inti,f=0; charj[5]; printf("输入要找人的学号: \n"); scanf("%s",j); for(i=0;i if(strcmp(j,a[i].num)==0) { f++; printf("您要找的人是: \n"); printf("名字: %-8s\n",a[i].name); printf("地址: %-10s\n",a[i].address); printf("学号: %-8s\n",a[i].num); printf("电话: %-15s\n",a[i].tele); printf("邮箱: %-20s\n",a[i].e_mail); } if(f==0)printf("没有找到符合您要求的联系人,请检查您的输入! ! \n"); } 七、参考文献 《C语言程序设计(第四版)》谭浩强著] 萨师煊 、王珊编著.数据库系统概论02年第二版(高等教育出版社) 参考网:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通讯录 管理 系统