通讯录课程设计.docx
- 文档编号:10122073
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:21
- 大小:137.65KB
通讯录课程设计.docx
《通讯录课程设计.docx》由会员分享,可在线阅读,更多相关《通讯录课程设计.docx(21页珍藏版)》请在冰豆网上搜索。
通讯录课程设计
《应用程序设计
课程设计》报告
班级:
学号:
姓名:
指导教师:
成绩评定:
通讯通管理
目录
一、设计方案简介…………………………………………………………………………(01)
二、设计题目实现…………………………………………………………………………(01)
1)需求分析…………………………………………………………………………(01)
2)概要设计…………………………………………………………………………(01)
3)详细设计…………………………………………………………………………(03)
4)测试分析…………………………………………………………………………(03)
5)使用说明…………………………………………………………………………(04)
6)测试结果…………………………………………………………………………(05)
三、设计附录部分…………………………………………………………………………(07)
1)参考资料…………………………………………………………………………(07)
2)源程序……………………………………………………………………………(07)
一、设计方案简介:
生活中我们常常需要跟同学、老师、同事等各类人员联系,为此,可以设计一个简易通讯录。
方便管理各位联系人的信息,读入导出保存的联系人信息。
此通讯录至少可以按姓名、电话号码查询联系人,实现诸如添加、修改、删除、查询、保存并记录等简易功能。
通讯录是最常用的应用程序,各种电子产品中均附有。
而且目前所设计的通讯录最为简化,还处于DOS界面运行。
C++都可以做出效果比较好的面向对象程序。
不过,这次的设计至少检验了我们的数据结构学习情况。
让我们的理论知识通过实践得到了一次质的飞跃,值得肯定。
由简入难,相信通过此类练习,编程能力将会不断提高。
二、设计题目实现:
1)需求分析
本题旨在建立一个通讯录系统,其中保存着个人员的姓名、电话、Email以及与本人的关系等信息,通过该系统的简单界面可以对通讯录进行新建、浏览、查找、更新、删除等操作。
本程序的能够提供添加、删除和修改通讯录信息的功能。
能够提供按按照不同方式查询的功能,如按照姓名或电话等。
测试数据:
(附后)。
2)概要设计
1.抽象数据类型的定义:
ADTSTUDENT{
数据对象V:
数据关系R:
基本操作P:
intinput(STUDENTstu[],intn,i)
//添加通讯录记录;
voidshow(STUDENTstu[],intn,i)
//显示通讯录记录;
intdel(STUDENTstu[],intn,s[])
//删除通讯录记录;
voidsearch(STUDENTstu[],intm,n)
//查询通讯录记录,m初始化,根据给定值分别返回各函数;
voidmodify(STUDENTstu[],intn,s[])
//修改通讯录记录;
voidsave(STUDENTstu[],intn)
//保存通讯录记录,生成文件;
}ADTSTUDENT
2.主程序
voidmain()
{
初始化;
for(;;)
{
接受命令;
处理命令;
退出;
}
}
3.程序模块
3)详细设计
1.类型定义:
typedefstruct
{
charscore;/*编号*/
charname[10];/*姓名*/
charnum[15];/*号码*/
charemail[20];/*邮箱*/
charrelate[8];/*年龄*/
charadds[20];/*住址*/
}STUDENT;
2.函数调用关系:
4)测试分析
本程序参考网络资料编写而成,其中的调用函数、框架设计、编译运行等部分均亲自完成。
期间或自我摸索,或查找资料,或请教同学,最终实现了该系统的DOS环境实现。
编程过程不断出现各种BUG,均能设法将其化解,算是在实践中学得编译运行调试之法。
以下是编写过程中出现过的几个较大漏洞,直接导致程序的BUG,在此记录下来作为之后自省。
a.起初在命令1第二步完成之后,直接显示出之后的内容。
检查发现scanf中存在错误,先是格式符用错成%d,继而stu[n+i]中i误写为1。
均是粗心所致,使得这两部分无法输入。
改正之后才算通过;
b.源程序并没有保存即save调用函数,在另外一个运行错误的源程序找到。
然后参照之,在本程序中写出,资源合理利用,变废为宝;
c.曾试图加入“打开文件”函数,无奈另一源程序用C++语言写成。
自己摸索改成C语言嵌入本程序,出现无法预知的错误。
最后只好不舍删掉,以后有机会定要将其重新搞定。
d.在编排主界面框架时终于明白了格式符的运用,比如%之后的+/-符号以及数字代表的含义。
之前学习的理论知识在此得到验证,并且立刻掌握。
这次源程序是在XX文库下载的,之后又给同学传阅。
结果传阅广泛使得程序代码相似度几乎80%,连忙更改部分程序以及主界面框架。
希望答辩及之后的审阅不要产生雷同程序,此程序经过亲自改动、修饰,以及调试更正,是真正付出汗水的结果。
通讯录系统设计可以说是对数据结构、C语言课程学习的一次实践,通过亲自编写编译调试程序,逐步掌握了编程方法。
也印证了一个深刻道理:
知识只有在实践中才能充分理解并运用。
从传统的被动接受变为主动探索,转换思维,主动去获取知识,这点值得肯定。
设计过程查找的各种资料,是在XX等搜索引擎的帮助下找到想要资源。
但并非原版照抄,在自己理解的基础上参照方法写出属于自己的程序。
编写过程中多次出现程序报错,在自己摸索、同学的导和帮助下顺利完成,也算是一个小小的成功。
其中编程过程中显露出来的问题也必须引起高度重视,在今后的学习中必当万分注意绝不再犯。
编程过程中,发现程序的排版格式也很重要。
一个良好的编程风格能使人一目了然,成竹在胸。
在今后的编程中,必须养成严谨的思维习惯,良好的编程风格和知难而进的态度。
这样才能一步步接近目标,实现最初的梦想。
最后感谢在编程过程中给予充分帮助的老师和同学们,团队力量的强大作用不可忽视。
加强团队协作也是作为今后程序设计道路上的必备能力。
5)使用说明
1.本程序的运行环境为DOS操作环境,执行文件为:
PhoneText.exe;
2.进入演示程序之后如下图所示:
3.之后可选择按键1、2、3、4、5、6、0选择各项目,分别进入添加、显示、删除、查询、修改、保存等项目。
6)测试结果
1.操作命令“1”,进入“添加记录”模块。
此处任意输入某人姓名、号码等各项信息,其结果如下图所示:
2.操作命令“2”,进入“显示记录”模块,其输出如下图所示:
3.操作命令“3”,进入“删除记录”模块,如下图所示:
4.选择命令“4”,进入“查询记录”模块,输出结果如下:
5.选择命令“5”,进入“修改记录”模块,输出结果如下:
6.选择命令“6”,进入“保存记录”模块,输出结果如下:
附录一:
参考资料
1.太原理工大学卓越专业应用程序课程设计指导书;
2.XX文库《排序算法》;
3.道客巴巴《通讯录系统》源代码;
4.数据结构题集实习报告模版;
5.数据结构(C语言版)课本《排序算法》;
附录二:
源程序
#include
#include
#include
typedefstruct
{
charscore;/*编号*/
charname[10];/*姓名*/
charnum[15];/*号码*/
charemail[20];/*邮箱*/
charrelate[8];/*年龄*/
charadds[20];/*住址*/
}STUDENT;
STUDENTst[80];
intmenu()
{
charc;
do{
system("cls");
printf("*******************欢迎使用通讯录*********************\n");
printf("*┏━━━━━━━━━━┓*\n");
printf("*┃==>>1.添加记录┃*\n");
printf("*┃==>>2.显示记录┃*\n");
printf("*┃==>>3.删除记录┃*\n");
printf("*┃==>>4.查询记录┃*\n");
printf("*┃==>>5.修改记录┃*\n");
printf("*┃==>>6.保存记录┃*\n");
printf("*┃==>>0.退出程序┃*\n");
printf("*┗━━━━━━━━━━┛*\n");
printf("******************************************************\n");
printf("\n\n\t\t请您选择(0-6):
");
c=getchar();
}while(c<'0'||c>'6');
return(c-'0');
}
intinput(STUDENTstu[],intn)
{
inti=0;
charsign,x[10];
while(sign!
='n'&&sign!
='N')
{
printf("\t编号:
");
scanf("\t%d",&stu[n+i].score);
printf("\t姓名:
");
scanf("\t%s",stu[n+i].name);
printf("\t电话号码:
");
scanf("\t%s",stu[n+i].num);
printf("\t关系:
");
scanf("\t%s",stu[n+i].relate);
printf("\t通讯住址:
");
scanf("\t%s",stu[n+i].adds);
printf("\t电子邮箱:
");
scanf("\t%s",stu[n+i].email);
gets(x);
printf("\n\t是否继续添加?
(Y/N)");
scanf("\t%c",&sign);
i++;
}
return(n+i);
}
voiddisplay(STUDENTstu[],intn)
{
inti;
printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");/*格式*/
printf("编号姓名电话号码关系通讯地址电子邮箱\n");
printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");
for(i=1;i { printf("%-6d%-8s%-13s%-8s%-20s%-20s\n",stu[i-1].score,stu[i-1].name,stu[i-1].num,stu[i-1].relate,stu[i-1].adds,stu[i-1].email); if(i>1&&i%10==0) { printf("\t━━━━━━━━━━━━━━━━━━\n"); printf("\t"); system("pause"); printf("\t━━━━━━━━━━━━━━━━━━\n"); } } printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"); system("pause"); } intdel(STUDENTstu[],intn) { chars[20]; inti=0,j; printf("\t请输入想删除记录中的名字: "); scanf("%s",s); while(strcmp(stu[i].name,s)! =0&&i if(i==n) { printf("\t通讯录中没有此人! \n"); return(n); } for(j=i;j { strcpy(stu[j].num,stu[j+1].num); strcpy(stu[j].name,stu[j+1].name); strcpy(stu[j].adds,stu[j+1].adds); strcpy(stu[j].relate,stu[j+1].relate); strcpy(stu[j].email,stu[j+1].email); stu[j].score=stu[j+1].score; } printf("\t\t\t已经成功删除! \n"); return(n-1); } voidsearch(STUDENTstu[],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(stu[i].name,s)! =0&&i if(i==n) { printf("\t通讯录中没有此人! \n"); return; } printf("\t编号: %d\n",stu[i].score); printf("\t电话号码: %s\n",stu[i].num); printf("\t关系: %s\n",stu[i].relate); printf("\t通讯地址: %s\n",stu[i].adds); printf("\t电子邮箱: %s\n",stu[i].email); }; if(m==2) { chars[20]; inti=0; printf("\t请输入想查询的电话: "); scanf("\t%s",s); while(strcmp(stu[i].num,s)! =0&&i if(i==n) { printf("\t通讯录中没有此人! \n"); return; } printf("\t编号: %d\n",stu[i].score); printf("\t姓名: %s\n",stu[i].name); printf("\t通讯地址: %s\n",stu[i].adds); printf("\t关系: %s\n",stu[i].relate); printf("\t电子邮箱: %s\n",stu[i].email); }; if(m==3) { chars[20]; inti=0; printf("\t请输入想查询的地址: "); scanf("\t%s",s); while(strcmp(stu[i].adds,s)! =0&&i if(i==n) { printf("\t通讯录中没有此人! \n"); return; } printf("\t编号: %d\n",stu[i].score); printf("\t姓名: %s\n",stu[i].name); printf("\t电话号码: %s\n",stu[i].num); printf("\t关系: %s\n",stu[i].relate); printf("\t电子邮箱: %s\n",stu[i].email); }; } voidmodify(STUDENTstu[],intn) { chars[20]; inti=0; printf("\t请输入想修改的记录中的名字: "); scanf("%s",s); while(strcmp(stu[i].name,s)! =0&&i if(i==n) { printf("\t通讯录中没有此人! \n"); return; } printf("\t编号: "); scanf("\t%d",&stu[i].score); printf("\t姓名: "); scanf("\t%s",stu[i].name); printf("\t电话号码: "); scanf("\t%s",stu[i].num); printf("\t关系: "); scanf("\t%s",stu[i].relate); printf("\t通讯住址: "); scanf("\t%s",stu[i].adds); printf("\t电子邮箱: "); scanf("\t%s",stu[i].email); printf("\t修改成功! "); } voidsave(STUDENTstu[],intn) { inti=0; FILE*fp;/*定义文件指针*/ charfilename[20];/*定义文件名*/ printf("\t保存到文件\n");/*输入文件名*/ printf("\t请输入所保存的文件名: "); scanf("\t%s",filename); if((fp=fopen(filename,"w"))==NULL) { printf("\t无法打开文件\n"); system("pause"); return; } fprintf(fp,"******************************************通讯录********************************\n"); fprintf(fp,"编号姓名电话号码关系通讯地址电子邮箱\n"); fprintf(fp,"--------------------------------------------------------------------------------\n"); while(i { fprintf(fp,"%-6d%-8s%-13s%-8s%-20s%-20s\n",stu[i].score,stu[i].name,stu[i].num,stu[i].relate,stu[i].adds,stu[i].email); i++; } fprintf(fp,"---------------------------------------------------------------------------------\n"); fprintf(fp,"***************************************共有%d条记录******************************\n",n); fclose(fp);/*关闭文件*/ printf("保存成功! \n"); } intmain()/*主函数*/ { intn=0; for(;;) { switch(menu()) { case1: printf("\n\t添加记录到通讯录\n");/*添加记录*/ n=input(st,n); break; case2: printf("\n\t\t通讯录记录表\n");/*显示记录*/ display(st,n); break; case3: printf("\n\t从通讯录中删除记录\n"); n=del(st,n);/*删除记录*/ printf("\t"); system("pause"); break; case4: printf("\n\t在通讯录中查找记录\n"); search(st,n);/*查找记录*/ printf("\t"); system("pause"); break; case5: printf("\n\t修改通讯录中的记录\n"); modify(st,n);/*修改数据*/ printf("\t"); system("pause"); break; case6: printf("\n\t保存功能\n"); save(st,n);/*保存数据*/ printf("\t"); system("pause"); break; case0: printf("\n\t\t谢谢使用,再见! \n");/*结束程序*/ printf("\n\t\t"); system("pause"); exit(0); } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通讯录 课程设计