电话薄C++课设.docx

上传人:b****1 文档编号:1728462 上传时间:2023-05-01 格式:DOCX 页数:35 大小:22.58KB
下载 相关 举报
电话薄C++课设.docx_第1页
第1页 / 共35页
电话薄C++课设.docx_第2页
第2页 / 共35页
电话薄C++课设.docx_第3页
第3页 / 共35页
电话薄C++课设.docx_第4页
第4页 / 共35页
电话薄C++课设.docx_第5页
第5页 / 共35页
电话薄C++课设.docx_第6页
第6页 / 共35页
电话薄C++课设.docx_第7页
第7页 / 共35页
电话薄C++课设.docx_第8页
第8页 / 共35页
电话薄C++课设.docx_第9页
第9页 / 共35页
电话薄C++课设.docx_第10页
第10页 / 共35页
电话薄C++课设.docx_第11页
第11页 / 共35页
电话薄C++课设.docx_第12页
第12页 / 共35页
电话薄C++课设.docx_第13页
第13页 / 共35页
电话薄C++课设.docx_第14页
第14页 / 共35页
电话薄C++课设.docx_第15页
第15页 / 共35页
电话薄C++课设.docx_第16页
第16页 / 共35页
电话薄C++课设.docx_第17页
第17页 / 共35页
电话薄C++课设.docx_第18页
第18页 / 共35页
电话薄C++课设.docx_第19页
第19页 / 共35页
电话薄C++课设.docx_第20页
第20页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

电话薄C++课设.docx

《电话薄C++课设.docx》由会员分享,可在线阅读,更多相关《电话薄C++课设.docx(35页珍藏版)》请在冰点文库上搜索。

电话薄C++课设.docx

电话薄C++课设

2013年C++课程设计

电话薄管理系统

-------南京理工大学

指导老师:

蔡骅

制作人:

李垒

电气1班

第一部分:

程序功能简介及程序设计要求

该程序为一简单的电话薄管理系统,即实现电话联系人数据的管理,包括添加联系人信息,修改联系人信息,显示查找联系人等代码简单易于实现,功能明确,思路清晰。

程序设计要求:

(1)将电话薄数据和相应的函数封装在类中,改写程序使之结构化。

(2)添加记录修改功能,能选择修改用户的姓名,电话。

(3)增加录入时间的显示及存储。

(4)增加缺省的查询方式,即查询时只输入姓名的首字母,所有符合这一条件的电话资料均在屏幕上显示。

第二部分:

程序设计详细介绍

一:

构思阶段

(1)本着用户使用的人性化要求,程序首先要有个整齐美观实用的交互界面,下面即为进入系统后的用户界面。

////////////////////////////////////////////////////////////////////////////////////////////////

当前登录时间:

SunApr1402:

43:

502013

****************************

1--添加联系人;

2--显示记录;

3--根据姓名查询;

4--智能查询(根据姓氏);

5--删除联系人;

6--删除所有联系人;

7--修改密码;

8--修改联系人号码;

9--退出程序;

****************************

输入对应编号:

//////////////////////////////////////////////////////////////////////////////////////////////

(2)考虑到实际情况,使用者的隐私要求该程序在设计阶段选择了设置一个安全模式,即密码登陆系统。

(3)考虑到程序的高效简洁性及代码的精炼之美,以及清晰地结构要求和保持良好的封装性,设计者详细周划了要设计哪些类,个各类实现什么功能,各类间关系及类之间的独立性要如何协调,最终敲定定义了时间类,密码类,节点类,记录管理类,文件操作类,各类之间功能结构清晰明了。

二:

实现阶段

具体写代码是一个艰难而快乐的过程,整个过程充满了探究性质,因为有些功能看似很简单,但实现起来却很困难,经常有很多小问题,这时候是最考验个人能力的关键,比如说文件操作类,

没去真正接触的时候觉得很简单都会得,但是做起来却遇到了问题,比如说,刚开始我一直以为输出到文件里东西都是以字符类型存在的,那我就疑惑,如果对一个整型数据进行操作该怎么办,是需要进行相关的转换吗,后来我发现并非如此,我针对这个问题专门做了一个小程序,来测试,测试后我发现,原来整形数据也是可以直接操作的,整形数据输出保持性质,但从文件中读入的时候,仍然可以用一个整型数据来接收其值,这令我有点欣喜地感觉,而且后来我发现这种方法来测试确实是一个百试不爽的方法。

当然有时候的情况是,你要接触一个你完全不懂的东西,这在刚开始会让你觉得很难下手,但当我们开始真正动手去查书,翻阅资料,请教老师,请教QQ群里的大神,以至于XX,常常为一个问题冥思苦想,编程熬夜到深夜,

到最终眉目一点点清晰,知道如何下手,再到后来知道如解决问题,这种探究的过程确确实实让我们收获了知识的喜悦。

以下主要把程序中的类以及函数功能简单介绍一下:

structNode//节点结构体定义

classCipher//密码类定义

{

voidEditCipher();

}

classStart

{

voidstart()//进入界面类,;包括:

界面显示,文件读取,当//前时间,上次登录时间,菜单显示,系统登录

}

classTime//定义时间类,在类将关于时间的内操作封装

{

voidshowtime()//显示当前时间

structtm*gettime()//返回时间节点指针,用于节点类中得到时间信息

classRecord_Manage//定义记录管理类,包含:

插入节点信息方法

{//输出所有节点信息方法,删除链表方法等

voidPrint_List()//输出所有信息

voidLookupOne(charname[])//根据姓名查询

voidClever_lookup(charFirstName[])//智能查找

voidAdd_node()//添加节点

voidDeleteNode()//删除指定节点

voidDeleteList()//删除所有的联系人

voidEditdata()//修该联系人信息

}

classFileStream

{

voidSaveFile(void)//保存数据到文件

voidLoadFile()/从文件中读取数据

 

}

classmenu//菜单类

{

showmenu()//显示菜单

voidhandle_choice()//选择进入的功能界面

}

 

三:

完善程序

在程序做好之后,我没有就此结束,而是开始和其他同学讨论交流方案,互相借鉴欣赏,在这个过程中,我发现自己的程序功能还是不够完善,使用不够人性化,于是我又进行了相关的修改。

比如添加通配符查询等,直到相对满意为止。

 

四:

源程序附录

 

#include

#include

#include//结构体类型tm在其中定义

#include

#include

#include

#include

#include

#include

 

structNode//节点结构体定义

{

charFirstName[20];

charName[40];

charptel_number[20];

intsec;

intmin;

inthour;

intmday;

intmon;

intyear;

intwday;

Node*next;

}*head=NULL;//全局节点型指针变量

longintold_cipher;

classCipher//密码类定义

{

public:

//longintold_cipher;

voidEditCipher()

{

longintnew_cipher1;

longintnew_cipher2;

loop:

cout<<"请输入新密码:

\n";

cin>>new_cipher1;

cout<<"请再次输入新密码确认:

\n";

cin>>new_cipher2;

if(new_cipher1==new_cipher2)

{

old_cipher=new_cipher1;

}

else

{

cout<<"两次密码不同,请重试\n";

gotoloop;

}

cout<<"密码修改成功!

\n";

 

}

 

};

 

classStart

{

intcipher_times;

public:

voidstart()//进入界面类,;包括:

界面显示,文件读取,当前时间,上次登录时间,菜单显示,系统登录

{

charenter;

cipher_times=0;//定义输入密码次数变量,超过3,程序退出

//Ciphercipher;//实例化密码对象

longinttemp_cipher;

cout<<"——————————欢迎进入电话薄管理系统————————————"<

cout<<"_________指导老师:

"<

cout<<"————————制作人:

"<

cout<<"请输入5位登录密码:

(初始密码为12345;)\n";

cin>>temp_cipher;

while

(1)

{

if(temp_cipher==old_cipher)

break;

else

{

if(cipher_times>=2)

{

cout<<"您输入错误三次,程序将退出\n";

exit(0);

}

else

{

cipher_times++;

cout<<"密码错误,请重试!

\n";

cout<<"请输入5位登录密码:

(忘记密码请查看cipher.txt文件)\n";//cipher文档要事先建立并输入初始密码

cin>>temp_cipher;

}

}

}

cout<<"按回车键进入"<

cin.get(enter);

system("cls");//执行系统命令,cls——清屏

 

}

 

};

 

classTime//定义时间类,在类将关于时间的内操作封装

{

public:

voidshowtime()//显示当前时间

{

time_ttimer;

timer=time(NULL);

cout<

 

}

structtm*gettime()//返回时间节点指针,用于节点类中得到时间信息

{

tm*ptime_node=NULL;

time_ttimer;

timer=time(NULL);

ptime_node=localtime(&timer);

returnptime_node;

}

};

 

classRecord_Manage//定义记录管理类,包含:

插入节点信息方法

{//输出所有节点信息方法,删除链表方法等

 

public:

voidPrint_List()//输出所有信息

{

Node*p_print=head;

if(head==NULL)

{

cout<<"目前无任何信息记录!

\n";

return;

}

while(p_print)

{

cout<<"姓名:

"<Name<

cout<<"电话:

"<ptel_number<

cout<<"录入时间:

"<

cout<year<<"年"<mon<<"月"<mday<<"日"<hour<<"时"<min<<"分"<sec<<"秒"<

cout<<"星期:

"<wday<

cout<<"****************************************"<

p_print=p_print->next;

}

}

 

voidLookupOne(charname[])//根据姓名查询

{

Node*p_lookup=head;

intflag=0;

if(head==NULL)

{

cout<<"目前无任何信息记录!

";

return;

}

while(p_lookup)

{

if(!

strcmp(p_lookup->Name,name))

{

cout<<"姓名:

"<Name<

cout<<"电话:

"<ptel_number<

cout<<"录入时间:

"<

cout<year<<"年"<mon<<"月"<mday<<"日"<hour<<"时"<min<<"分"<sec<<"秒"<

cout<<"星期:

"<wday<

cout<<"****************************************"<

flag=1;

}

p_lookup=p_lookup->next;

}

if(p_lookup==NULL&&flag==0)

{

cout<<"对不起,无此联系人信息!

\n";

}

}

voidprint_by_firstL()

{

charfirstL;

intk=0;

intflag=0;

cout<<"请输入姓氏首字母:

\n";

cin>>firstL;

Node*p_lookup=head;

if(head==NULL)

{

cout<<"目前无任何信息记录!

\n";

return;

}

while(p_lookup)

{

if(firstL==*p_lookup->FirstName)

{

k++;

cout<<"这是为您找到的第"<

\n";

cout<<"********************************\n";

cout<<"姓名:

"<Name<

cout<<"电话:

"<ptel_number<

cout<<"录入时间:

"<

cout<year<<"年"<mon<<"月"<mday<<"日"<hour<<"时"<min<<"分"<sec<<"秒"<

cout<<"星期"<wday<

cout<<"****************************************"<

flag=1;

}

p_lookup=p_lookup->next;

}

 

if(p_lookup==NULL&&flag==0)

{

cout<<"对不起,无此联系人信息!

\n";

}

 

}

 

voidClever_lookup(charFirstName[])//智能查找

{

intflag=0;//标志变量,标明是否找到联系人

Node*p_lookup=head;

if(head==NULL)

{

cout<<"目前无任何信息记录!

\n";

return;

}

while(p_lookup)

{

if(!

strcmp(p_lookup->FirstName,FirstName))

{

cout<<"姓名:

"<Name<

cout<<"电话:

"<ptel_number<

cout<<"录入时间:

"<

cout<year<<"年"<mon<<"月"<mday<<"日"<hour<<"时"<min<<"分"<sec<<"秒"<

cout<<"星期"<wday<

cout<<"****************************************"<

flag=1;

}

p_lookup=p_lookup->next;

}

 

if(p_lookup==NULL&&flag==0)

{

cout<<"对不起,无此联系人信息!

\n";

}

 

}

intwildcard_match(constchar*wildcard,constchar*str)//通配符查询法

{

if(*wildcard=='\0')

return*str=='\0';

if(*wildcard=='?

')

returnwildcard_match(++wildcard,++str);

elseif(*wildcard=='*')

{

for(++wildcard;*str;++str)

if(wildcard_match(wildcard,str))

return1;

return*wildcard=='\0';

}

else

return*wildcard==*str&&wildcard_match(++wildcard,++str);

 

}

 

voidwild_lookup(char*wildcard)

{

Node*p_lookup=head;

intflag=0;

if(head==NULL)

{

cout<<"暂无任何联系人!

\n";

return;

}

while(p_lookup)

{

if(wildcard_match(wildcard,p_lookup->Name))

{

cout<<"姓名:

"<Name<

cout<<"电话:

"<ptel_number<

cout<<"录入时间:

"<

cout<year<<"年"<mon<<"月"<mday<<"日"<hour<<"时"<min<<"分"<sec<<"秒"<

cout<<"星期"<wday<

cout<<"****************************************"<

flag=1;

}

p_lookup=p_lookup->next;

}

if(p_lookup==NULL&&flag==0)

{

cout<<"对不起,没有找到你要的联系人!

如果确认联系人存在,请检查通配符是否正确,并确认是姓名通配!

\n";

}

}

voidAdd_node()//添加节点

{

charp_firstname[20];

charp_name[40];

charp_telnum[20];

Node*p_add1=head;

Node*p_add2=p_add1;//节点型指针1,2用于添加节点时遍历

Node*p_node=newNode;

tm*p_tm=NULL;

Timetimer;//时间类的实例化,获取当时时间

p_tm=timer.gettime();

cout<<"请输入联系人姓氏:

\n";

cin>>p_firstname;

cout<<"请输入联系人姓名:

\n";

cin>>p_name;

cout<<"请输入联系人电话号码:

\n";

cin>>p_telnum;

strcpy(p_node->FirstName,p_firstname);

strcpy(p_node->Name,p_name);

strcpy(p_node->ptel_number,p_telnum);

p_node->year=p_tm->tm_year+1900;

p_node->mon=p_tm->tm_mon+1;

p_node->mday=p_tm->tm_mday;

p_node->hour=p_tm->tm_hour;

p_node->min=p_tm->tm_min;

p_node->sec=p_tm->tm_sec;

p_node->wday=p_tm->tm_wday;//完善节点成员信息

p_add1=p_node;

if(head==NULL)

{

head=p_add1;

p_add1->next=NULL;

return;

}

while(p_add2->next)

p_add2=p_add2->next;

p_add2->next=p_add1;

p_add1->next=NULL;

}

 

voidDeleteNode()//删除指定节点

{

Node*p_delete1=NULL;

Node*p_delete2=NULL;

charp_getname[40];

if(head==NULL)

{

cout<<"链表为空,不能删除!

\n";

return;

}

cout<<"请输入要删除联系人的姓名:

\n";

cin>>p_getname;

p_delete1=head;

while(p_delete1)

{

if(!

strcmp(head->Name,p_getname))

{

head=head->next;

deletep_delet

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2