简易通讯录系统 C语言程序设计报告.docx
- 文档编号:30230713
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:22
- 大小:116.28KB
简易通讯录系统 C语言程序设计报告.docx
《简易通讯录系统 C语言程序设计报告.docx》由会员分享,可在线阅读,更多相关《简易通讯录系统 C语言程序设计报告.docx(22页珍藏版)》请在冰豆网上搜索。
简易通讯录系统C语言程序设计报告
程序设计报告
(2012/2013学年第2学期)
题目:
简易通讯录管理系统
专业应用物理
学生姓名于浩
班级学号B12080507
指导教师 骆健
指导单位计算机学院计算机科学与技术系
日期2013.3.27
评分细则
评分项
优秀
良好
中等
差
遵守机房规章制度
上机时的表现
学习态度
程序准备情况
程序设计能力
团队合作精神
课题功能实现情况
算法设计合理性
用户界面设计
报告书写认真程度
内容详实程度
文字表达熟练程度
回答问题准确度
简短评语
教师签名:
年月日
评分等级
备注
评分等级有五种:
优秀、良好、中等、及格、不及格
简易通讯录管理系统程序设计报告
一、课题内容和要求
本课题设计是对基础课《面向对象程序设计》课程知识的进一步巩固并加强解决实际问题的能力。
目的是通过实习,一方面使学生加深对课内所学的有关面向对象概念的理解;另一方面,在具体的程序设计中掌握基于C语言的程序设计方法。
通过进行计算机实践,更加系统地理解和掌握C语言的基本概念、语言特点和编程技巧。
利用系统提供的标准函数和自定义函数进行程序设计,培养利用C语言设计综合程序的能力。
通过该课程设计使学生掌握一种程序设计开发环境,提高同学们自己学习、查阅资料、独立分析问题和解决问题的能力。
二、需求分析
设计通讯录系统,其信息中包括姓名、电话、地址等数据项。
所设计的系统要有简单的DOS界面,方便用户进行操作,显示以下功能:
(1)建立通讯录。
(2)插入、删除、修改通讯录记录
(3)查询通讯录记录,要求可按姓名和电话号码查询
(4)可按姓名或电话号码对通讯录进行排序
(5)信息记录要存放在文件中,因而要实现文件的输入/输出功能
三、概要设计
系统功能模块图:
建立:
可以一次性输入多个人的相应信息
显示:
可以输出通讯录里所有的记录
查询:
可以选择用姓名、电话两种方式查询信息
修改:
输入欲修改的那个人的名字后,再依次输入姓名、电话号码、地址即可完成修改
添加:
可以添加通讯录记录,依次输入姓名、电话号码、地址即可完成
删除:
输入欲删除的那个人的名字后,会自动删除其相应的记录内容
排序:
可以按姓名或电话号码对通讯录进行排序
保存:
将通讯录信息保存到文件
四、源程序代码
#defineN100
#defineSIZE30
#include
#include
#include
#include
structstudent
{
charname[SIZE];
chartel[SIZE];
charadress[SIZE];
};//函数声明
voidmyprint();//显示菜单
intmycreat(structstudent*p,intn);//输入通讯录
voidmydisplay(structstudent*p,intn);//显示通讯录
voidmysearch(structstudent*p,intn);//查找
voidmymodify(structstudent*p,intn);//修改通讯录
intmyadd(structstudent*p,intn);//增加通讯录
intmydelete(structstudent*p,intn);//删除
voidmysort(structstudent*p,intn);//排序
voidsch_tel(structstudent*p,intn);//按电话号码查找
voidsch_name(structstudent*p,intn);//按姓名查找
intloadinfo(structstudent*p,intn);//载入通讯录信息
intsaveinfo(structstudent*p,intn);//保存通讯录信息
voidmain()
{//文件定义
charyes_no;
intchoose;//定义choose为整形
structstudentrecord[N];//存放通讯录信息,共100条
inttotal=0,flag;//通讯录总数
total=loadinfo(record,N);//从文件读取记录信息,不超过100条
do
{
myprint();//显示菜单
printf("请选择:
");
scanf("%d",&choose);//输入数据
switch(choose)
{
case1:
total=mycreat(record,total);
break;
case2:
mydisplay(record,total);
break;
case3:
mysearch(record,total);
break;
case4:
mymodify(record,total);
break;
case5:
total=myadd(record,total);
break;
case6:
total=mydelete(record,total);
break;
case7:
mysort(record,total);
break;
case8:
flag=saveinfo(record,total);
if(flag==1)
printf("\n保存失败!
\n");
else
printf("\n保存成功!
\n");
break;
case0:
exit(0);
break;
default:
printf("\n%c为非法选项!
\n",choose);
}
if(choose==0)break;
printf("\n要继续选择吗(Y/N)?
");
do
{
yes_no=getchar();
}while(yes_no!
='Y'&&yes_no!
='y'&&yes_no!
='N'&&yes_no!
='n');
}while(yes_no!
='N'&&yes_no!
='n');
}
voidmyprint()//显示菜单信息
{
printf("\n");
printf("请输入选项编号(0--7)\n");
printf("1---建立通讯录\n");
printf("2---显示通讯录\n");
printf("3---查询通讯录\n");
printf("4---修改通讯录\n");
printf("5---添加通讯录\n");
printf("6---删除通讯录\n");
printf("7---排序通讯录\n");
printf("8---保存通讯录\n");
printf("0---退出\n");
printf("\n");
}
intmycreat(structstudent*p,intn)//批量输入学生信息
{
inti=0;
intm;
printf("添加前的记录,共有<%d>个:
\n",n);
printf("\n记录号姓名电话号码地址\n");
i=0;
while((i
=0))
{
printf("%d:
%15s%15s%15s\n",i+1,p->name,p->tel,p->adress);
i++;
p++;
}
printf("\n请输入要输入的学生人数(<%d):
",N-n);
scanf("%d",&m);
i=0;
while(i { printf("\n"); printf("请输入第%d个记录: \n",i+1); printf("姓名: "); do { gets(p->name); }while(strcmp(p->name,"")==0); printf("电话号码: "); gets(p->tel); printf("地址: "); gets(p->adress); p++; i++; } returnm+n; } voidmydisplay(structstudent*p,intn)//显示学生信息 { //clrscr(); inti=0; printf("\n记录号姓名电话号码地址\n"); while(i { printf("%d: %15s%15s%15s\n",i+1,p->name,p->tel,p->adress); p++; i++; } } voidmymodify(structstudent*p,intn)//修改学生信息 { charc; inti; charnam[10]; mydisplay(p,n); printf("\n请输入要修改记录的姓名: "); c=getchar(); gets(nam); for(i=0;i if(strcmp(nam,p->name)==0)break; if(i==n) printf("无此人! \n"); else { printf("请输入正确的电话号码: "); do { gets(p->tel); }while(strcmp(p->tel,"")==0); printf("请输入正确的姓名: "); gets(p->name); printf("请输入正确的地址: "); gets(p->adress); } } voidmysearch(structstudent*p,intn)//查找指定学生 { charc; mydisplay(p,n); printf("\n按电话号码查询(h),还是按姓名查询(m)? "); c=getchar(); c=getchar(); if(c=='h'||c=='H') sch_tel(p,n); elseif(c=='m'||c=='M') sch_name(p,n); else printf("\n非法字符! \n"); } voidsch_tel(structstudent*p,intn)//按电话号码查询 { charc; inti,flag=0; chartel[10]; printf("\n请输入要查询记录的电话号码: "); c=getchar(); gets(tel); for(i=0;i if(strcmp(tel,p[i].tel)==0) { printf("\n姓名电话号码地址\n"); printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress); flag=1; } if(flag==0) printf("无此人! \n"); } voidsch_name(structstudent*p,intn)//按姓名查询 { charc; inti,flag=0; charnam[10]; printf("\n请输入要查询记录的姓名: "); c=getchar(); gets(nam); for(i=0;i if(strcmp(nam,p[i].name)==0) { printf("\n姓名电话号码地址\n"); printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress); flag=1; } if(flag==0) printf("无此人! \n"); } intmyadd(structstudent*p,intn)//增加学生信息 { inti=0; charc; structstudentt,*q; printf("添加前的记录: \n"); printf("\n姓名电话号码地址\n"); i=0; q=p;//显示原有记录信息 while(i { printf("%15s%15s%15s\n",q->name,q->tel,q->adress); i++; q++; } do { printf("请输入新记录的姓名: \n"); do { gets(t.name); }while(strcmp(t.name,"")==0);//姓名不能为空 printf("请输入新记录的电话号码: "); gets(t.tel); printf("请输入新记录的地址: "); gets(t.adress); { *(p+i)=t; printf("添加后的记录: \n"); printf("\n姓名电话号码地址\n"); for(i=0;i printf("%15s%15s%15s\n",(p+i)->name,(p+i)->tel,(p+i)->adress); break; } } while(c=='y'||c=='Y'); returnn+1; } intmydelete(structstudent*p,intn)//删除学生信息 { inti,x; charc,tel[10],nam[10]; printf("删除前的记录: \n"); printf("\n姓名电话号码地址\n"); for(i=0;i printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress); printf("按电话号码删除(h),还是按姓名删除(m)? "); c=getchar(); c=getchar(); if(c=='h'||c=='H') { printf("\n请输入要删除记录的电话号码: "); c=getchar(); gets(tel); for(x=0;x if(strcmp(tel,p[x].tel)==0) break;//说明提前结束循环,找到人 if(x { for(i=x;i { p[i]=p[i+1]; } printf("删除后的记录: \n"); printf("姓名电话号码地址\n"); for(i=0;i printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress); } else printf("无此人\n"); } else if(c=='m'||c=='M') { printf("\n请输入要删除记录的姓名: "); c=getchar(); gets(nam); for(x=0;x if(strcmp(nam,p[x].name)==0) break; if(x { for(i=x;i { p[i]=p[i+1]; } printf("删除后的记录: \n"); printf("姓名电话号码地址\n"); for(i=0;i printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress); } else printf("无此人\n"); } else printf("\n非法字符\n"); returnn-1; } voidmysort(structstudent*p,intn)//排序函数 { charc; intj,i,k; charc1; structstudenttemp; printf("\n排序前的记录: \n"); printf("\n姓名电话号码地址\n"); for(i=0;i printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress); printf("\n按电话号码排序(h),还是按姓名排序(m)? "); c=getchar(); c1=getchar(); if(c1=='h'||c1=='H')//按号码排序 { for(i=0;i { k=i; for(j=i+1;j if(strcmp(p[k].tel,p[j].tel)>0) k=j; if(k! =i) { temp=p[k]; p[k]=p[i]; p[i]=temp; } } printf("\n排序后的记录: \n"); printf("\n姓名电话号码地址\n"); for(i=0;i printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress); } elseif(c1=='m'||c1=='M')//按姓名排序 { for(i=0;i { k=i; for(j=i+1;j if(strcmp(p[k].name,p[j].name)>0) k=j; if(k! =i) { temp=p[k]; p[k]=p[i]; p[i]=temp; } } printf("排序后的记录: \n"); printf("\n姓名电话号码地址\n"); for(i=0;i printf("%15s%15s%15s\n",p[i].name,p[i].tel,p[i].adress); } } intloadinfo(structstudent*p,intn)//载入通讯录信息 { FILE*fp; inti,all=0; charfilename[30]="txl.txt"; fp=fopen(filename,"rb"); if(fp==NULL) { printf("\n***不能打开文件%s,或%s文件不存在! ***",filename,filename); return0; } fscanf(fp,"%d\n",&all); if(all>N)//读取记录总数 { printf("文件记录数太多,不能读取"); return0; } for(i=0;i { fscanf(fp,"%s%s%s\n",p[i].name,p[i].tel,p[i].adress); } fclose(fp);//关闭文件 returnall; } intsaveinfo(structstudent*p,intn)//保存 { FILE*fp; inti,all=0; charfilename[30]="txl.txt";//文件可以用记事本打开 fp=fopen(filename,"w"); if(fp==NULL) { printf("\n***不能建立或打开文件%s! ***",filename); return0; } fprintf(fp,"%d\n",n); for(i=0;i fprintf(fp,"%s%s%s\n",p[i].name,p[i].tel,p[i].adress); fclose(fp); return0; } 五、测试数据及其结果分析 测试数据时,刚开始都比较顺利,如图: 开始不久就出现问题,我发现当号码位数不一致时,排序就乱了,如下图: 后来我与同学讨论调试后,发现原因是排序函数是按号码从左到右的顺序依次比较各个数字进行排序。 不过因为电话号码位数相同,此问题对程序影响不大。 六、调试过程中的问题 1.首先在程序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易通讯录系统 C语言程序设计报告 简易 通讯录 系统 语言程序设计 报告