手机通讯录设计xiugaiban.docx
《手机通讯录设计xiugaiban.docx》由会员分享,可在线阅读,更多相关《手机通讯录设计xiugaiban.docx(25页珍藏版)》请在冰豆网上搜索。
手机通讯录设计xiugaiban
程序设计报告
(2008/2009学年第二学期)
题目:
手机信息管理系统
专业微电子
学生姓名
班级学号B08040122
指导教师吴敏
指导单位计算机学院软件基础教学中心
日期2008.6.04
评分细则
评分项
优秀
良好
中等
差
遵守机房规章制度
上机时的表现
学习态度
程序准备情况
程序设计能力
团队合作精神
课题功能实现情况
算法设计合理性
用户界面设计
报告书写认真程度
内容详实程度
文字表达熟练程度
回答问题准确度
简短评语
教师签名:
年月日
评分等级
备注
评分等级有五种:
优秀、良好、中等、及格、不及格
手机信息管理系统
一、课题内容和要求
手机信息管理系统是手机通讯的重要功能模块,主要负责对通讯录的录入,修改,删除,查找等功能。
通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些算法思想的应用,实现一个简单的手机管理系统。
二、需求分析
通讯录包括:
(1)通讯录中的每一条信息包括:
姓名、电话号码、分类(可能选项有:
A为办公类B为个人类C为商务类)、电子邮件。
(2)通话情况的每一条信息包括:
来电号码、去电号码、通话分类(可能选项有:
A为已拨、B为已接、C为未接)、来去电时刻、通话时间(调用时间函数)
(3)将通讯录和通话情况分别用两个文件存储,文件类型可以是文本文件或是二进制文件。
功能需求:
1)提供可操作的主菜单:
输出个菜单,用于显示以从文件中加载的通讯录信息和若干个可选的功能选项。
根据输入的选项来运行不同的功能,运行不同的函数。
2)进行文本信息的载入与输出:
将信息录入指定的文件实现添加等功能,再从指定的文件中加载通讯录信息实现数据输出。
3)查找通讯信息:
可以通过查找姓名,通话记录等等进行查找对应的通讯录信息并将它们输出。
4)添加通讯录:
将希望添加的通讯信息添加到通讯录,注意利用文件进行添加。
5)删除通讯录:
将希望删除的某个通讯信息删除。
会有菜单选项提示,主要也是文件方面的读取并作出处理。
6)修改通讯录:
输入修改的对象,到文件中查找,由一系列读写函数实现修改过程。
7)对现有信息的保存:
利用文件把信息保存到文本文档,可对其进行调用,修改等过程。
三、概要设计
(1)主要结构体:
voidmenu();//主菜单的实现函数
voidmenu_1();
voidmenu_1_2();
voidmenu_2();
voiddatein();//对数据的处理函数
voiddateout();
voidrewrite();
voiddeletedate();
classCalldate;//通话类结构
classPeopledate//通讯录结构
{
charname[10];//姓名
charnum[20];//号码
chartype;//所属类别
charemail[20];//邮箱
}
(2)主要流程图
菜单函数:
其间用到指针分配内存,文件的读取,循环的算法。
四、源程序代码
#include"iostream.h"
#include"string.h"
#include"fstream.h"
#include"windows.h"
#include"conio.h"
voidmenu();//菜单的目录实现函数
voidmenu_1();
voidmenu_1_2();
voidmenu_2();
intcheck(char*,char*);//通过指针进行检查
voiddatein();//输入数据
voiddateout();//输出数据
voidrewrite();//修改数据
voiddeletedate();//删除数据
classCalldate;//定义通话类
classPeopledate//用类实现对通讯录某个体的信息录入
{
charname[10];
charnum[20];
chartype;
charemail[20];
public:
Peopledate(charna[10]="",charnu[20]="",chart='A',charem[20]="")
{
strcpy(name,na);
strcpy(num,nu);
type=t;
strcpy(email,em);
}
char*Getnum(){returnnum;};
char*Getname(){returnname;};
charGettype(){returntype;};
friendistream&operator>>(istream&,Peopledate&);
friendostream&operator<<(ostream&,constPeopledate&);
friendvoidrewrite();
};
ostream&operator<<(ostream&out,constPeopledate&obj)//重载函数输出信息
{
if(obj.type=='A')
out<<"姓名:
"<"<"<<<"类别:
"<<"办公类"<elseif(obj.type=='B')
out<<"姓名:
"<"<"<<<"类别:
"<<"个人类"<elseif(obj.type=='C')
out<<"姓名:
"<"<"<<<"类别:
"<<"商务类"<else
out<<"姓名:
"<"<"<<<"类别:
"<<"不明"<returnout;
}
istream&operator>>(istream&in,Peopledate&obj)//重载函数
{
cout<<"请依次输入:
姓名,号码,类别,邮箱。
"<cout<<"姓名:
";
in>>obj.name;
cout<<"号码:
";
in>>obj.num;
cout<<"类别:
";
in>>obj.type;
cout<<"邮箱:
";
in>>obj.email;
returnin;
}
classCalldate//定义通话类,用于记录通话的详细内容。
{//函数体内由指针,文件,重载实现
intcalltype;
charnum[20];
inttimecost;
inttime_h;
inttime_m;
inttime_s;
chartype;
public:
Calldate(intct=0,charnu[20]="",ints=0,intth=0,inttm=0,intts=0,charty='A')
{
calltype=ct;
strcpy(num,nu);
timecost=s;
time_h=th;
time_m=tm;
time_s=ts;
type=ty;
}
friendostream&operator<<(ostream&,constCalldate&);
};
ostream&operator<<(ostream&out,constCalldate&obj)
{
intf=0;
if(obj.calltype==1)
out<<"去电"<elseif(obj.calltype==2)
out<<"来电"<inti=0;
Peopledate*date=newPeopledate[1000];//用指针存放信息
ifstreaminf("people.dat");//打开文件
while(!
inf.eof())
inf.read((char*)&date[i++],sizeof(Peopledate));
inf.close();
for(intj=0;j{
if(strcmp(obj.num,date[j].Getnum())==0)
{
out<f=1;
}
}
if(f==0)
out<out<<"通话开始时间:
"<out<<"通话持续时间:
"<if(obj.type=='A')
out<<"已拨"<elseif(obj.type=='B')
out<<"已接"<elseif(obj.type=='C')
out<<"未接"<else
out<<"不明"<returnout;
}
voidmain()
{
intchoice;
menu();
cin>>choice;
while(choice!
=5)
{
switch(choice)
{
case1:
dateout();
break;
case2:
datein();
break;
case3:
rewrite();
break;
case4:
deletedate();
break;
}
menu();
cin>>choice;
}
}
voidmenu()//显示通讯录菜单
{
cout<<"1.查看通讯录"<cout<<"2.添加通讯录"<cout<<"3.修改通讯录"<cout<<"4.删除通讯录"<cout<<"5.退出信息管理系统"<}
voidmenu_1()
{
cout<<"1.查看某类全部信息"<cout<<"2.查看某人全部信息"<cout<<"3.查看通讯记录"<cout<<"4.返回上级菜单"<}
voidmenu_1_2()
{
cout<<"1.查看办公类信息"<cout<<"2.查看个人类信息"<cout<<"3.查看商务类信息"<cout<<"4.返回上级菜单"<voidmenu_2()
{
cout<<"1.输入联系人"<cout<<"2.输入通话记录"<cout<<"3.返回上级菜单"<}
voiddateout()//数据输出
{
intchoice1;
menu_1();
cin>>choice1;
if(choice1==1)
{
intchoice12;
menu_1_2();
cin>>choice12;
if(choice12==1)
{
inti=0;
Peopledate*date=newPeopledate[1000];
ifstreaminf("people.dat");
if(!
inf)
{
cout<<"联系人信息文件无法查询"<return;
}
while(!
inf.eof())
inf.read((char*)&date[i++],sizeof(Peopledate));
for(intj=0;j{
if(date[j].Gettype()=='A')
cout<}
inf.close();
}
elseif(choice12==2)
{
inti=0;
Peopledate*date=newPeopledate[1000];
ifstreaminf("people.dat");
if(!
inf)
{
cout<<"联系人信息文件无法查询"<return;
}
while(!
inf.eof())
inf.read((char*)&date[i++],sizeof(Peopledate));
for(intj=0;j{
if(date[j].Gettype()=='B')
cout<}
inf.close();
}
elseif(choice12==1)
{
inti=0;
Peopledate*date=newPeopledate[1000];
ifstreaminf("people.dat");
if(!
inf)
{
cout<<"联系人信息文件无法查询"<return;
}
while(!
inf.eof())
inf.read((char*)&date[i++],sizeof(Peopledate));
for(intj=0;j{
if(date[j].Gettype()=='C')
cout<}
inf.close();
}
else
return;
}
elseif(choice1==2)
{
charna[10];
cout<<"输入要查找的姓名:
";
cin>>na;
inti=0;
Peopledate*date=newPeopledate[1000];
ifstreaminf("people.dat");
if(!
inf)
{
cout<<"联系人信息文件无法查询"<return;
}
while(!
inf.eof())
inf.read((char*)&date[i++],sizeof(Peopledate));
for(intj=0;j{
if(strcmp(date[j].Getname(),na)==0)
cout<}
inf.close();
}
elseif(choice1==3)
{
inti=0;
Calldate*date=newCalldate[1000];
ifstreaminf("call.dat");
if(!
inf)
{
cout<<"联系人信息文件无法查询"<return;
}
while(!
inf.eof())
inf.read((char*)&date[i++],sizeof(Calldate));
for(intj=0;jcout<inf.close();
}
else
return;
}
voiddatein()//输入数据
{
menu_2();
intchoice2;
cin>>choice2;
inti,n;
cout<<"请输入信息条数:
";
cin>>n;
if(choice2==1)
{
intj=0;
Peopledate*date=newPeopledate[1000];
ifstreaminf("people.dat");
if(!
inf)
{
cout<<"联系人信息文件无法查询"<return;
}
while(!
inf.eof())
inf.read((char*)&date[j++],sizeof(Peopledate));
if(j+n>=15)//这里j用于记忆,对于再次添加数据会考虑原有数据的数量。
cout<<"内存已满,不得超过15条"<else
{
ofstreamifile("people.dat",ios:
:
ate);
if(!
ifile)
{
cout<<"通讯记录文件无法查询"<return;
}
for(i=0;i{
intflag=0;
Peopledate*p=newPeopledate[1];
cin>>p[0];
for(intt=0;t{
if(strcmp(p[0].Getname(),date[t].Getname())!
=0)
{
flag=1;
break;
}
}
if(flag==1)
ifile.write((char*)p,sizeof(Peopledate));
else
cout<<"已存在"<}
ifile.close();
}
}
elseif(choice2==2)
{
Calldate*p=newCalldate[n];
ofstreamifile("call.dat",ios:
:
ate);
if(!
ifile)
{
cout<<"无通讯记录文件"<return;
}
for(i=0;i{
intcty;
charnum[20];
SYSTEMTIMEt1,t2;
ints;
charty;
cout<<"选择通话类型(来电为1,去电为2)"<cin>>cty;
cout<<"请输入电话号码:
"<cin>>num;
cout<<"现在按任意键开始通话,再按任意键结束通话"<cout<<"按任意键开始通话";
getch();
GetLocalTime(&t1);
cout<getch();
GetLocalTime(&t2);
s=(t2.wMinute-t1.wMinute)*60;
s+=t2.wSecond-t1.wSecond;
cout<<"选择通话类型(选项:
A已拨、B已接、C未接)"<cin>>ty;
Calldateq(cty,num,s,t1.wHour,t1.wMinute,t1.wSecond,ty);
p[i]=q;
}
ifile.write((char*)p,sizeof(Calldate)*n);
ifile.close();
}
else
return;
}
voidrewrite()//修改数据信息
{
charna[10];
cout<<"输入被修改人姓名:
";
cin>>na;
intj=0;
Peopledate*date=newPeopledate[1000];
ifstreaminf("people.dat");
if(!
inf)
{
cout<<"联系人信息文件无法查询"<return;
}
while(!
inf.eof())
inf.read((char*)&date[j++],sizeof(Peopledate));
for(inti=0;iif(strcmp(date[i].Getname(),na)==0)
{
Peopledatenewdate;
cout<<"输入被修改人信息:
"<cin>>newdate;
date[i]=newdate;
}
ofstreamifile("people.dat");
if(!
ifile)
{
cout<<"通讯记录文件无法查询"<return;
}
ifile.write((char*)date,sizeof(Peopledate)*j);
ifile.close();
}
voiddeletedate()//删除数据信息
{
intm=0;
charna[10];
cout<<"输入被删除人姓名:
";
cin>>na;
intj=0;
Peopledate*date=newPeopledate[1000];
Peopledate*date1=newPeopledate[100];
ifstreaminf("people.dat");
if(!
inf)
{
cout<<"联系人信息文件无法查询"<return;
}
while(!
inf.eof())
inf.read((char*)&date[j++],sizeof(Peopledate));
for(inti=0;i{
if(strcmp(date[i].Getname(),na)==0)
m++;
date1[i]=date[i+m];
}
ofstreamifile("people.dat");
if(!
ifi