手机通讯录设计.docx
- 文档编号:5162487
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:22
- 大小:38.97KB
手机通讯录设计.docx
《手机通讯录设计.docx》由会员分享,可在线阅读,更多相关《手机通讯录设计.docx(22页珍藏版)》请在冰豆网上搜索。
手机通讯录设计
程序设计报告
(2008/2009学年第二学期)
题目:
手机信息管理系统
专业微电子
学生姓名
班级学号B********
指导教师吴敏
指导单位计算机学院软件基础教学中心
日期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<<"************************************************"< cout<<"1.查看通讯录信息"< cout<<"2.添加通讯录信息"< cout<<"3.修改通讯录信息"< cout<<"4.删除通讯录信息"< cout<<"5.退出信息管理系统"< cout<<"************************************************"< } voidmenu_1() { cout<<"************************************************"< cout<<"1.查看某类全部信息"< cout<<"2.查看某人全部信息"< cout<<"3.查看通讯记录"< cout<<"4.返回上级菜单"< cout<<"************************************************"< } voidmenu_1_2() { cout<<"********************************************"< cout<<"1.查看办公类信息"< cout<<"2.查看个人类信息"< cout<<"3.查看商务类信息"< cout<<"4.返回上级菜单"< cout<<"********************************************"< } voidmenu_2() { cout<<"***********************************************"< cout<<"1.输入联系人信息"< cout<<"2.输入通话记录信息"< cout<<"3.返回上级菜单"< cout<<"***********************************************"< } 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;j cout< 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;i if(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);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 手机 通讯录 设计