通信录管理系统报告.docx
- 文档编号:29655873
- 上传时间:2023-07-25
- 格式:DOCX
- 页数:29
- 大小:417.27KB
通信录管理系统报告.docx
《通信录管理系统报告.docx》由会员分享,可在线阅读,更多相关《通信录管理系统报告.docx(29页珍藏版)》请在冰豆网上搜索。
通信录管理系统报告
程序设计报告
题目:
通
信录管理系统告的设计
评分细则
评分项
优秀
良好
中等
差
遵守机房规章制度
上机时的表现
学习态度
程序准备情况
程序设计能力
团队合作精神
课题功能实现情况
算法设计合理性
用户界面设计
报告书写认真程度
内容详实程度
文字表达熟练程度
回答问题准确度
简短评语
评分等级
备注
评分等级有五种:
优秀、良好、中等、及格、不及格
通讯录管理系统
一、课题内容和要求
本课题是设计通信录管理系统。
从通信录的数据信息构成上,假设其有四项信息,数据类型均以字符串类型存储。
数据项:
姓名、地址、邮政编码、电话号码
数据类型:
均为String类
数据存储结构:
单链表结合文本文件
实现功能:
数据项存取、显示、删除记录、查询记录等功能。
功能细则:
增加功能:
通讯录文件中,当录入了重复的姓名和电话号码时,则提示数据录入重复并取消录入;
显示功能:
可显示通讯录中所有联系人;
查询功能:
输入某个人的姓名时,可以查询联系人相关信息;
修改功能:
输入某个人的姓名时,可对此人在通讯录中的相应数据进行修改;
删除功能:
输入某个人的姓名时,可对此人在通讯录中的相应数据进行删除。
主界面提供菜单选择的方法选择实现某一功能,一次运行程序能进行多次选择执行不同的功能。
二、需求分析
本程序设计在Javaproject(H10000724)内共有两个类。
Linklist类:
实现了单链表的存储结构。
Fileimport类:
实现了主方法,以及各个功能的方法。
(对于主方法起名Fileimport表示抱歉,初衷只是想创建Import导入方法从文本文件向链表导入信息,后来思路改变,逐渐发展成主方法所在类)
主方法(publicstaticvoidmain(String[]args))为Switch-Case选择语句与do-while循环构成的菜单。
添加方法对应Addperson(),可以将新增联系人添加到链表的最后,当联系人重复则取消添加。
显示方法对应Display(),可以打印出所有联系人的信息。
搜索方法对应Search(),当输入联系人姓名时可以搜索相关信息。
修改方法对应Update(),当输入联系人姓名时,可以根据操作提示修改联系人信息。
删除方法对应Delete(),输入联系人姓名可以删除此人相关信息。
导入方法Import(),将源文件所在目录下文本文件中的信息导入到链表中。
导出方法Export(),将链表中的信息导出,存储在源文件所在目录下的文本文件中。
清空方法Clear(),将链表中的内容清空,便于下一次导入Import()。
三、概要设计
Linklist类
//此类构造链表类,数据域由Group类构成,包含Name,Number,Mailcode,和Address四个成员.
//地址域由Linknode类构成.
publicclassLinklist{
publicstaticclassGroup{
)
Group类中包含四种联系人信息
//以下为Group的构造方法
publicGroup(Stringnewname,Stringnewnumber,Stringnewmail,Stringnewadress){
}
publicstaticclassLinknode{
}
//以下为Linknode的构造方法
publicLinknode(Groupnewperson,Linknodenewlink){
}
//四种对Linknode的数据域和地址域的操作方法定义
publicvoidsetGroup(Groupnewperson){
}
publicGroupgetGroup(){
}
publicvoidsetlink(Linknodenewlink){
}
publicLinknodegetlink(){
}
Fileimport类(流程图如上图)
此类包含程序运行各种方法和主函数入
Fileimport类各方法算法设计:
首先,要创建数据存储对象---单链表,这里声明了Start和Last两个节点,分别指向链表的头和尾。
主方法采用了循环和Switch-case语句的形式,采用菜单方式工作。
Export()方法
程序创建了一个源文件所在路径的TXT文件,user1.txt。
但是因为每次链表操作后数据都有变化,所以我们先写入一个空字符串,清空原来的文本信息,然后使用File类和BufferedWriter类从链表中向文件写入信息,以姓名,号码,邮编,地址的顺序各占一行写入,一个联系人信息完成后录入一个“*”字符作为结尾,录入原因在Import()中解释。
Import()方法
该方法就是从Export()创建的user1.txt中读取数据导入链表中。
由于文本文件中每四行存储一个联系人信息,且每行都是不同信息,所以在对Group类中的变量进行初始化时使用了循环和Switch-Case语句保证录入顺序不会错乱,并且为保证录入信息和所存储的节点一致,每个联系人结束后有一个“*”字符,它并不录入,而是起到调节循环的作用。
Clear()方法
因为每次菜单都会循环,上一次的链表中的信息会阻碍Import方法的导入,导致信息重复,所以定义清空链表的方法。
Addperson()方法
增加联系人在链表最后,先比较姓名如果姓名重复,在比较后会取消增加。
Searchperson()方法
就是查找所输入的联系人姓名,打印其所有信息。
如果不存在联系人,输出不存在。
Display()方法
对已经初始化好的链表进行遍历,并打印出所有信息。
Delete()方法
单链表的基本操作,如果不存在联系人,输出不存在。
Update()方法
在定位所要操作的联系人后,采用Switch-case语句选择所要修改的项目,用Group类所提供的方法给所要修改的信息赋值。
四、源程序代码
Linklist类
//此类构造链表类,数据域由Group类构成,包含Name,Number,Mailcode,和Address四个成员.
//地址域由Linknode类构成.
publicclassLinklist{
publicstaticclassGroup{
publicStringName=null;
publicStringNumber=null;
publicStringMailcode=null;
publicStringAddress=null;
//以下为Group的构造方法
publicGroup(Stringnewname,Stringnewnumber,Stringnewmail,Stringnewadress){
Name=newname;
Number=newnumber;
Mailcode=newmail;
Address=newadress;
}
}
publicstaticclassLinknode{
publicGroupperson=null;
publicLinknodelink=null;
//以下为Linknode的构造方法
publicLinknode(Groupnewperson,Linknodenewlink){
person=newperson;
link=newlink;
}
//四种对Linknode的数据域和地址域的操作方法定义
publicvoidsetGroup(Groupnewperson){
person=newperson;
}
publicGroupgetGroup(){
returnperson;
}
publicvoidsetlink(Linknodenewlink){
link=newlink;
}
publicLinknodegetlink(){
returnlink;
}
}
}
Fileimport类
importjava.io.BufferedReader;
publicclassFileimport{
staticLinklist.Groupstartperson=newLinklist.Group(null,null,null,null);
staticLinklist.LinknodeStart=newLinklist.Linknode(startperson,null);
staticLinklist.Grouplastperson=newLinklist.Group(null,null,null,null);
staticLinklist.LinknodeLast=newLinklist.Linknode(lastperson,null);
publicstaticvoidmain(String[]args){
inti;
do{
System.out.println("欢迎使用H10000724通讯录系统");
System.out.println("==========================");
System.out.println("1---------------------添加");
System.out.println("2---------------------修改");
System.out.println("3---------------------搜索");
System.out.println("4---------------------显示");
System.out.println("5---------------------删除");
System.out.println("0---------------------退出");
FileimportDemo=newFileimport();
Scannerkeyboard=newScanner(System.in);
i=keyboard.nextInt();
switch(i){
case1:
{Demo.Import();
Demo.Addperson();
Demo.Export();
break;
}
case2:
{Demo.Import();
Demo.Update();
Demo.Export();
break;
}
case3:
{Demo.Import();
Demo.Searchperson();
break;
}
case4:
{Demo.Import();
Demo.Display();
break;
}
case5:
{Demo.Import();
Demo.Delete();
Demo.Export();
break;
}
case0:
{
System.out.println("欢迎使用,谢谢~");
System.exit(0);
}
}
}
while(i!
=0);
}
//增加新联系人
publicvoidAddperson(){
if(Start.getlink()==null){
System.out.println("通讯录现在为空,准备添加");
System.out.println("请以姓名空格电话空格邮编空格地址回车键入方式录入。
");
Stringnewname1;
Stringnewnumber1;
Stringnewcode1;
Stringnewaddress1;
Scannerkeyboard=newScanner(System.in);
newname1=keyboard.next();
newnumber1=keyboard.next();
newcode1=keyboard.next();
newaddress1=keyboard.next();
Linklist.Groupnewperson1=newLinklist.Group(newname1,newnumber1,newcode1,newaddress1);
Linklist.Linknodenewnode1=newLinklist.Linknode(newperson1,null);
Start.setlink(newnode1);
Last=newnode1;
Last.setlink(null);
System.out.println("新增联系人录入成功!
");
}
else{
System.out.println("请以姓名空格电话空格邮编空格地址回车键入方式录入。
");
Stringnewname1;
Stringnewnumber1;
Stringnewcode1;
Stringnewaddress1;
Scannerkeyboard=newScanner(System.in);
newname1=keyboard.next();
newnumber1=keyboard.next();
newcode1=keyboard.next();
newaddress1=keyboard.next();
Linklist.Groupnewperson1=newLinklist.Group(newname1,newnumber1,newcode1,newaddress1);
Linklist.Linknodenewnode1=newLinklist.Linknode(newperson1,null);
Linklist.Linknodecurrentnode=Start.getlink();
do{
if((currentnode.getGroup().Name.equalsIgnoreCase(newname1))==true){
System.out.println("所添加的联系人已经存在,您可以使用修改功能更新原有信息");
break;
}
else{
currentnode=currentnode.getlink();
}
}
while(currentnode!
=null);
if(currentnode==null){
Last.setlink(newnode1);
Last=newnode1;
Last.setlink(null);
System.out.println("新增联系人录入成功!
");
}
}
}
//显示所有联系人
publicvoidDisplay(){
System.out.println("现在将联系人显示如下:
");
System.out.println("姓名电话邮编地址");
if(Start.getlink()==null){
Start=null;
System.out.println("通讯录为空,请选择添加,系统退出。
");
System.exit(0);}
Linklist.Linknodecurrentnode=Start.getlink();
while(currentnode!
=null){
System.out.print(currentnode.getGroup().Name+"");
System.out.print(currentnode.getGroup().Number+"");
System.out.print(currentnode.getGroup().Mailcode+"");
System.out.println(currentnode.getGroup().Address);
currentnode=currentnode.getlink();
}
}
//搜索联系人信息
publicvoidSearchperson(){
if(Start.getlink()==null){
Start=null;
System.out.println("通讯录为空,请选择添加,系统退出。
");
System.exit(0);}
System.out.println("请录入待查找人姓名,回车键结束");
Stringtarget;
Scannerkeyboard=newScanner(System.in);
target=keyboard.next();
Linklist.Linknodecurrentnode=Start.getlink();
do{
if((currentnode.getGroup().Name.equalsIgnoreCase(target))==true){
System.out.println("姓名电话邮编地址");
System.out.print(currentnode.getGroup().Name+"");
System.out.print((currentnode.getGroup().Number)+"");
System.out.print(currentnode.getGroup().Mailcode+"");
System.out.println(currentnode.getGroup().Address);
break;
}
else{
currentnode=currentnode.getlink();
}
}
while(currentnode!
=null);
if(currentnode==null){
System.out.println("联系人还未被存储,使用添加功能添加新联系人");
}
}
//修改联系人信息
publicvoidUpdate(){
if(Start.getlink()==null){
Start=null;
System.out.println("通讯录为空,请选择添加,系统退出。
");
System.exit(0);}
System.out.println("请输入要更新联系人姓名,以回车结束");
Stringtarget;
Scannerkeyboard=newScanner(System.in);
target=keyboard.next();
Linklist.Linknodecurrentnode=Start.getlink();
do{
if((currentnode.getGroup().Name.equalsIgnoreCase(target))==true){
System.out.println("更新联系人确定,准备接收更新信息");
System.out.println("1-----姓名");
System.out.println("2-----电话");
System.out.println("3-----邮编");
System.out.println("4-----地址");
inti;
i=keyboard.nextInt();
switch(i){
case1:
{
Stringnewname;
System.out.println("请输入新姓名,回车键结束");
newname=keyboard.next();
currentnode.getGroup().Name=newname;
System.out.println("修改成功!
");
break;}
case2:
{
Stringnewnumber;
System.out.println("请输入新号码,回车键结束");
newnumber=keyboard.next();
currentnode.getGroup().Number=newnumber;
System.out.println("修改成功!
");
break;
}
case3:
{
Stringnewmail;
System.out.println("请输入新邮编,回车键结束");
newmail=keyboard.next();
currentnode.getGroup().Mailcode=newmail;
System.out.println("修改成功!
");
break;
}
case4:
{
Stringnewadress;
System.out.println("请输入新地址,回车键结束");
newadress=keyboard.next();
currentnode.getGroup().Address=newadress;
System.out.println("修改成功!
");
break;
}
}
break;
}
else
currentnode=currentnode.getlink();
}
while(currentnode!
=null);
if(currentnode==null){
System.out.println("更新联系人还未被存储,请使用添加功能添加");
}
}
//删除联系人信息
publicvoidDelete(){
if(Start.getlink()==null){
Start=null;
System.out.println("通讯录为空,请选择添加,系统退出。
");
System.exit(0);
}
else{
System.out.println("请输入你要删除联系人姓名,回车键结束");
Scannerkeyboard=newScanner(System.in);
Stringtarget;
target=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通信 管理 系统 报告