通讯录管理系统的设计与实现.docx
- 文档编号:24500029
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:89
- 大小:214.71KB
通讯录管理系统的设计与实现.docx
《通讯录管理系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《通讯录管理系统的设计与实现.docx(89页珍藏版)》请在冰豆网上搜索。
通讯录管理系统的设计与实现
.专业整理.
课程设计报告
通讯录管理系的设计与实现
姓名:
钟婷英
班级:
计122
学号:
1213023039
时间:
2014
年1月10日
1,问题描述
通讯录是用来记载和查询联系人通讯信息的工具,电子通讯录已经为手机,电
子词典等设备中不可缺少的工具软件,请设计一个能够满足这种需求的软件,
基本功能模块如下图所示。
主程序
输显查插删保读排修移退
入示找入除存入序改动出
输入:
记录的录入。
显示:
通讯录的显示。
查找:
按指定方式,输入关键字,查找指定记录。
插入:
实现记录的添加或在指定位置插入记录。
保存:
将内存中正在被操作的通讯录以文件形式保存到磁盘。
读入:
保存的逆操作,讲存在磁盘中的通讯录文件读到内存中。
排序:
按指定关键字对通讯录数据进行排序。
.学习帮手.
.专业整理.
修改:
提供修改某条记录的功能。
移动:
移动记录在通讯录中的存储位子,使其被查找或显示时的位序前移或后
移。
退出:
结束程序运行。
2,设计要求
(1)设计通讯录数据的逻辑结构和物理结构。
(2)通讯录至少包括下列数据信息:
姓名,电话,单位等。
(3)完成图示基本功能。
(4)软件易用,操作简单。
(5)根据自己使用通讯录体会扩充其他功能,如按姓名查找,按号码查找,按序号删除等。
(6)设计足够多的测试用例
(7)数据输入有效性检验:
如姓名不能为空,号码中不能有非法字符等。
(8)提供分组管理的相关功能,如:
分组显示,加入组,组创建,组查询等。
(9)可视化的界面设计。
3,概要设计
1,使用structdatastructaddressList定义结构体类型,structdata结构体
中包括年月日的定义,strcutaddressList中包括联系人ID账号,名字,性别,
名族,生日,手机号码,QQ号码和家庭地址等。
structdate
{
.学习帮手.
.专业整理.
intyear;
intmonth;
intday;
};
structaddressList
{
charID[10];
charname[10];
chargender[4];
charminzu[2];
datebirthday;
charshoujihao[14];
charQQ[11];
charaddress[40];
};
2,程序设计过程中用到的函数有:
intzhujiemian();
voidtianjia(fstream&);
voidxiugai(fstream&);
voidshanchu(fstream&);
voidchazhao(fstream&);
voidliulan(fstream&);
.学习帮手.
.专业整理.
intfindRecord(fstream&,constchar*);
intgetAmount(fstream&);
3,整个程序用的是面向对象的方法,在主函数中调用各种函数,来实现通讯录
的功能。
在主函数中,使用的是c++语言中的开关语句(switch)用来选择通
讯录的各种功能。
开始
菜单开始
1,2,删除联3,修改4,查询5,浏览6,退
添加联系系人联系人联系人联系人出
人
结束
4,在各个函数的编译过程中使用了system(“cls)命令,进项清屏工作,在利用各种输出命
令。
.学习帮手.
.专业整理.
5,主界面设计为
************************************************
※通讯录※
************************************************
1、添加联系人信息
2、删除联系人信息
3、修改联系人信息
4、查询联系人信息
5、浏览联系人信息
6、退出
************************************************
请选择:
采用了单链表形式,使得选择更加方便,快速。
程序段为:
intzhujiemian()
{
system("cls");
.学习帮手.
.专业整理.
intselection=0;
cout<<"***********************************************"< cout<<"※通讯录※"< cout<<"***********************************************"< cout< cout<<"1、添加联系人信息"< cout< cout<<"2、删除联系人信息"< cout< cout<<"3、修改联系人信息"< cout< cout<<"4、查询联系人信息"< cout< cout<<"5、浏览联系人信息"< cout< cout<<"6、退出"< cout<<"**********************************************"< cout<<"请选择: "; cin>>selection; return(selection); } .学习帮手. .专业整理. 6,下面开始写各个函数,在函数中,采用了边做边存的思想,减少了工作量。 提供了是否正确打开通讯录的程序 7,调用函数voidtianjia(fstream&listFile)当打开方式正确时,输入联系人的 信息ID账号,姓名,性别(男/女)民族,出生年月,手机号,QQ号,家庭住 址等。 以防信息的重复添加,还提供了添加提醒,当添加好一个联系人之后会 提醒是否继续添加,或者是回到主界面,运用了while,if,选择语句,进行操作。 程序代码如下: voidtianjia(fstream&listFile) { system("cls"); cout<<"*********************************************"< .学习帮手. .专业整理. cout<<"※添加界面※"< cout<<"*********************************************"< addressLista; charb,c; do { listFile.open("tongxunlu.dat",ios: : out|ios: : app|ios: : binary); if(listFile.fail()) { cout<<"打开通讯录失败! "< exit(0); } cout<<"请输入以下信息: "< cout<<"学号: "< cin>>a.xuehao; cout<<”姓名: "< cin>>a.name; cout<<"性别(男/女): "< cin>>a.gender; cout<<"民族: "< cin>>a.minzu; cout<<"出生年-月-日: "< .学习帮手. .专业整理. cin>>a.birthday.year>>a.birthday.month>>a.birthday.day; cout<<"手机号: "< cin>>a.shoujihao; cout<<"QQ号: "< cin>>a.QQ; cout<<"家庭住址: "< cin>>a.address; cout<<"此信息已经添加! "< listFile.write((char*)&a,sizeof(a)); listFile.flush(); cout<<"是否继续添加? (Y/N)"< cin>>b; cin.ignore(); listFile.close(); } while(toupper(b)=='Y'); cout<<"***************************************"< cout<<"是否返回到主界面? (Y/N)"< cin>>c; if(toupper(c)=='Y') main(); else .学习帮手. .专业整理. exit(0); } 8,调用voidxiugai(fstream&listFile)函数进行对通讯录的修改。 用了ifelse语 句判断输入的联系人信息是否正确,嵌套while语句,再用switch语句选择要 修改的信息。 程序片段如下: voidxiugai(fstream&listFile) { system("cls"); cout<<"************************************************"< cout<<"※修改界面※"< cout<<"***********************************************"< boolisExit=false; charmodifyName[10]; .学习帮手. .专业整理. cout<<"\n请输入要修改的联系人的姓名: "; cin>>modifyName; listFile.open("tongxunlu.dat",ios: : out|ios: : in|ios: : binary); if(listFile.fail()) { cout<<"打开通讯录失败! "< exit(0); } intpos=findRecord(listFile,modifyName); if(-1==pos) cout<<"对不起,没有"< "< else { addressListtemp; listFile.seekg((long)(sizeof(addressList)*pos),ios: : beg); listFile.read((char*)&temp,sizeof(addressList)); while(! isExit) { intselection=0; cout<<"***********************************"< cout<<"1、ID"< cout<<"2、姓名"< .学习帮手. .专业整理. cout<<" 3 、性别"< cout<<" 4 、民族"< cout<<" 5、出生年-月-日"< cout<<" 6 、手机号"< cout<<" 7、QQ"< cout<<" 8 、家庭住址"< cout<<" 9、返回上一层"< cout<<"***********************************"< cout<<"\n请输入要修改的选项: "; cin>>selection; cout< switch(selection) { case1: cout<<"原ID: "< cout<<"新ID: "; cin>>temp.ID; cin.ignore(); cout<<"修改成功! "< break; case2: .学习帮手. .专业整理. cout<<"原姓名: "< "; cin>>temp.name; cin.ignore(); cout<<"修改成功! "< break; case3: cout<<"原性别: "< cout<<"新性别: "; cin>>temp.gender; cin.ignore(); cout<<"修改成功! "< break; case4: cout<<"原民族: "< "; cin>>temp.minzu; cin.ignore(); cout<<"修改成功! "< break; case5: cout<<"原出生年-月-日: "< < < .学习帮手. .专业整理. < cout<<"新出生年-月-日: "; cin>>temp.birthday.year>>temp.birthday.month >>temp.birthday.day; cout<<"修改成功! "< break; case6: cout<<"原手机号: "< cout<<"新手机号: "; cin>>temp.shoujihao; cin.ignore(); cout<<"修改成功! "< break; case7: cout<<"原QQ: "< cout<<"新QQ: "; cin>>temp.QQ; cin.ignore(); cout<<"修改成功! "< break; case8: cout<<"原地址: "< .学习帮手. .专业整理. cout<<"新地址: "; cin>>temp.address; cin.ignore(); cout<<"修改成功! "< break; case0: isExit=true; break; } } listFile.seekp((long)(sizeof(addressList) pos),ios: : beg); listFile.write((char*)&temp,sizeof(addressList)); listFile.flush(); listFile.close(); } cout< } .学习帮手. .专业整理. 9,调用用函数voidshanchu(fstream&listFile)进行对联系人的删除,整个函数使 用while,ifelse语句进行操作,未免误删,还要进行提示,是否确认删除并确定是否删除成功,用到语句仍是选择和循环语句。 程序片段如下; 、 .学习帮手. .专业整理. 开始 y 是否删除 n 已删除 结束 10,调用函数voidchazhao(fstream&listFile)来查询联系人信息,程序通过联 系人的姓名来查找。 程序片段如下: voidchazhao(fstream&listFile) { system("cls"); .学习帮手. .专业整理. cout<<"***********************************************"< cout<<"※查询界面※"< cout<<"***********************************************"< charfindName[21]={'\0'},c; listFile.open("tongxunlu.dat",ios: : out|ios: : in|ios: : binary); if(listFile.fail()) { cout<<"打开通讯录失败! "< exit(0); } cout<<"\n请输入要查找的同学的姓名: "; cin>>findName; intpos=findRecord(listFile,findName); if(-1==pos) cout<<"对不起,没有"< "< else { addressListtemp; listFile.seekg((long)(sizeof(addressList)*pos),ios: : beg); listFile.read((char*)&temp,sizeof(addressList)); cout<<"***************************************"< cout<<"学号: "< .学习帮手. .专业整理. cout<<"姓名: "< cout<<"性别(男/女): "< cout<<"民族: "< cout<<"出生年-月-日: " < < < cout<<"手机号: "< cout<<"QQ: "< cout<<"家庭住址: "< } listFile.close(); cout<<"***************************************"< cout<<"是否返回到主界面? (Y/N)"< cin>>c; if(toupper(c)=='Y') main(); else exit(0); } .学习帮手. .专业整理. 11,调用函数voidliulan(fstream&listFile)来浏览之前添加并保存过的联系 人。 程序片段如下: voidliulan(fstream&listFile) { system("cls"); cout<<"***********************************************"< cout<<"※浏览界面※"< cout<<"***********************************************"< addressLista; charb; intcount=0; listFile.open("tongxunlu.dat",ios: : in); if(listFile.fail()) .学习帮手. .专业整理. { cout<<"打开通讯录失败! /n"; exit(0); } while(! listFile.eof()) { listFile.read((char*)&a,sizeof(a)); if(listFile.fail()) break; cout<<"********************************************"< cout<<"学号: "< cout<<"姓名: "< cout<<"性别(男/女): "< cout<<"民族:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通讯录 管理 系统 设计 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)