面向对象课设通讯录管理系统.docx

上传人:b****6 文档编号:5639758 上传时间:2022-12-29 格式:DOCX 页数:42 大小:315.84KB
下载 相关 举报
面向对象课设通讯录管理系统.docx_第1页
第1页 / 共42页
面向对象课设通讯录管理系统.docx_第2页
第2页 / 共42页
面向对象课设通讯录管理系统.docx_第3页
第3页 / 共42页
面向对象课设通讯录管理系统.docx_第4页
第4页 / 共42页
面向对象课设通讯录管理系统.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

面向对象课设通讯录管理系统.docx

《面向对象课设通讯录管理系统.docx》由会员分享,可在线阅读,更多相关《面向对象课设通讯录管理系统.docx(42页珍藏版)》请在冰豆网上搜索。

面向对象课设通讯录管理系统.docx

面向对象课设通讯录管理系统

中原工学院计算机学院

课程设计报告

 

课程名称:

C++课程设计

专业:

计算机科学与技术

班级:

计科111

姓名:

***

辅导老师:

强****

题目:

学生通讯管理系统

 

2012年6月

摘要

通讯录管理系统的主要功能有:

添加学生信息、修改学生信息删除学生信息、查询学生信息、查看学生男女比例、查看近期过生日的学生。

采用面向对象的思想建立两个类,一个类封装学生信息;另一个类封装对数据进行操作的一些函数;从而实现对系统的操作。

做这个系统主要用到了微软公司的:

VisualC++6.0开发环境,班级通讯录管理系统是一个专门针对储存学生联系方式以及一些简单个人信息的实用管理系统,它方便了教师对众多学生信息的储存和快速查阅的功能,大大减少了查找过程的时间。

关键词通讯录,查找,删除,添加,统计。

前言

班级通讯录管理系统主要功能分为六个模块:

添加学生信息、查询学生信息、查看学生男女比例、查看近期过生日的学生。

修改学生信息、删除学生信息、

添加学生信息:

录入学生的基本信息如学号、姓名、性别、出生日期、兴趣爱好、联系方式(电话、QQ、电子邮箱)地址等。

修改学生信息:

可对系统中已录入的信息进行修改,如要修改学号为2011008141406的信息,这时需选择修改学生信息菜单,然后输入要修改的学生的学号,即可进行修改。

删除学生信息:

可对系统中已存在的信息按学号进行删除。

查询学生信息:

每个学生都可以查询通讯录的全部记录,或按条件进行查询

查看学生男女比例:

系统会根据系统中已录入的学生自动计算出百分比。

查看近期生日的学生:

自动列出近7日内要过生日的学生的信息。

任务

计算机学院所开设的C++课程设计是教学实践环节中一项重要内容,进行此课程设计的旨在:

1.提高和加强学生的计算机应用与软件开发能力,使学生由初学者向专业的程序员过渡。

2.培养学生独立分析问题、解决问题、查阅资料以及自学能力,以适应计算机产业日新月异发展的形势。

3.学习和掌握C++程序设计方法以及上机调试技巧,为今后学习其它专业课程打好基础。

本次课程设计是以学生独立思考解决问题为主,教师指导为辅,结合上机操作,完成指定的任务,作出设计报告。

正文

1概要设计

1.1信息结构体

日期结构dateStruct

变量名

数据类型

描述

year

Int

Month

Int

Day

Int

联系方式结构体ContactStruct

变量名

数据类型

描述

tel

int

电话

mail

char

电子邮箱

qq

int

QQ号

学生信息结构体

变量名

数据类型

描述

NO

int

学号

name

char

姓名

sex

char

性别

birth

dateStruct

出生日期

likes

char

爱好

address

char

邮政地址

contact

contactStruct

联系方式

1.2系统结构图

主菜单

退

根据学号删除

查看所有

根据学号查询

根据学号修改

2

2.详细设计

2.1类的编写

开发项目时,以类的形式来组织、封装一些常用的方法,以便提高代码的重用率,大大方便了代码的管理。

本系统中创建了两个类:

stuClass和stuOperate。

其中stuClass主要用来定义学生基本信息,stuOperate类是操作类,用来执行添加、修改、删除、查询、统计等功能。

程序开发时只需要调用相应方法即可。

2.1.1stuClass类

stuClass类主要用来定义学生基本信息,包含三个结构体,分别是日期、联系方式、学生基本信息结构体;用这几个结构体分别来实现联系方式、学生信息、日期信息的保存和操作。

classstuClass

{

public:

structdateStruct//定义一个日期结构体

{

intyear;

intmonth;

intday;

};

structcontactStruct//定义一个联系方式结构体

{

inttel;

charmail[30];

intqq;

};

structstudentStruct//定义一个学生基本信息结构体

{

intNO;

charname[10];

charsex[4];

dateStructbirth;

charlikes[100];

charaddress[100];

contactStructcontact;

};

};

2.1.2stuOperate类

stuOperate类是操作类,用来执行添加、修改、删除、查询、统计等功能。

程序开发时只需要调用相应方法即可。

classstuOperate

{

public:

stuClass:

:

studentStructstu[100];

voidinsertStu();//增加

voidprint(int);//打印信息

boolcheckStuNO(int);//判断学号是否重复

boolcheckStr(char*,char*);//判断两字符串是否相等

voidsearchStu(int);//查询

voiddeleteStu(int);//删除

voideditStu(int);//修改

voidstuPercent();//百分比

voidstuBirth();//近期生日

voiddisplay();//显示菜单项

};

2.2程序流程图

stuClass类

dateStruct日期结构体

contactStruct联系方式结构体

studentStruct基本信息结构体

成员:

intyear

intmonth

intday

成员:

inttel

charmail[30]

intqq

成员:

intNO

charname[10]

charsex[4]

dateStructbirth

charlikes[100]

charaddress[100]

contactStructcontact

stuOperate类

VoidinsertStu()

voidprint(int)

boolcheckStuNO(int)

stuClass:

:

studentStructstu[100]

voidstuBirth()

voiddeleteStu(int)

voideditStu(int)

boolcheckStr(char*,char*)

voidstuPercent()

voidsearchStu(int)

voiddisplay()

3.程序测试与分析

3.1增加学生信息:

增加学生信息运行结果如图所示:

录入完一条信息后,会提示输入完毕,是否继续输入,Y继续输入,N便是回主菜单。

实现思想:

先申明学生信息的相关的变量,然后输出提示输入相关信息,由于考虑到班级人数一般不超过30,因此在输入时判断小于1或大于30的均是不合法学号,需重新输入,判断学号的合法外还对学号是否重复进行了判断,由于是通过数组存储,则决断学号重复时需要循环组与输入的学号进行对比,由于此系统中有了功能模块是统计学生的男女比例因此在输入性别时也作了限定,只能输入男女或者boygirl,信息输入完毕后,将学生记录数加1,然后将信息存储到对应的数组中,如stu[].NO=NO则是将输入的学号对应的数组(s是学生的记录数,每增一条信息s会加1,删除一条信息s会减1)。

具体实现代码请看源程序附件中的inserStu()函数。

3.2查询学生信息:

查询学生信息运行结果如图所示:

此时会提示您是查询所有学生信息还是根据学号查询,1查询所有,2根据学号查询,若查询所有,将会把系统中所有学生信息列出来,如下图所示:

若根据学号查询,则会提示您输入学号,输入学号后,便可查询该生如下图:

实现思想:

在查询数据时,需要先判断此系统中有无记录,若无记录则提示系统中无学生信息,请先输入,此时程序将不向下执行。

否则将输出查询条件,1查询所有;2根据学号查询,查询所有时循环数组,读取每个元素对应的信息即可。

根据学号查询需要先判断学号是否合法,然后判断系统中有无此学号。

实现方式是循环读数组,将每个索引对应的学号与输入的学号进行比较,若相等,则输出此数组索引对应的信息。

具体实现代码请看源程序附件中的searchStu(ints)函数。

3.3查看学生男女比例:

查看学生男女比例运行结果如下图:

实现思想:

在查看学生男女比例时,需要先判断此系统中有无记录,若无记录则提示系统中无学生信息,请先输入,此时程序将不向下执行。

否则将循环读取数组,判段数组索引对应的SEX值为男还是女,统计出男女生人数,如果其中一个性别为0,则此性别的百分比为0,另一个的百分比为100%。

否则将一个性别,如男的人数除以总人数,再乘100,就得到男生的百分比了,用100减去男的百分比既可得女生的百分比。

具体实现代码请看源程序附件中的stuPercent()函数。

3.4查看近期过生日的学生:

查看近期过生日的学生运行结果如下图:

实现思想:

在查看近7天过生日的学生时,需要先判断此系统中有无记录,若无记录则提示系统中无学生信息,请先输入,此时程序将不向下执行。

否则将引用ctime文件,通time获取当前时间,如下代码:

time_tt=time(NULL);

tm*pt=localtime(&t);

intstuYear,stuMonth,stuDay;

intthisYear,thisMonth,thisDay;

thisYear=1900+pt->tm_year;//获取当前年

thisMonth=pt->tm_mon+1;//获取当前月

thisDay=pt->tm_mday;//获取当前日

获取时间的年月日后,循环读取学生数组,循环时获取每个学生的年月日,与当前时间的年月日进行比较,此时要考虑3种情况。

(1)、当前日加上7天后还是本月的情况,此时学生的月与当前月相等,并且学生出生日期的日减去当前日大于0并且小于等于7,就是近7天内过生日的学生。

(2)、当前日加上7天已经跨月的情况,此时还需要判断是否是2月是平年还是润年。

如果是润年的2月,用29(润年的2月是29天)减去当前日再加上学生出生日期的日,就得到与生日的差距了。

如果是平年的2月,则应用28(平年的2月是28天)减当前日加学生出生日期的日。

否则则用31(由于不知如何判断每月的天数,有的月30天,有的月31天,这里都采用31计算)减当前的日再加学生出生日期的日,能得出距生日的差距,得出差距判断小于或等于7就是近7天过生日的学生。

(3)、当前日加上7天已经跨年的情况,这种情况是当前月为12月,而学生的出生日期是1月的情况下才产生。

此时判断当前月等于12,学生的学生日期是1月,再用31(由于不知如何判断每月的天数,有的月30天,有的月31天,这里都采用31计算)减当前的日再加学生出生日期的日,如果小于或等于7那么就是近7天过生日的学生。

以下是生日判断的算法(thisYear、thisMonth、thisDay为当前的年月日,stuYear、stuMonth、stuDay为某学生出生日期的年月日):

//本月

if((thisMonth==stuMonth)&&(stuDay-thisDay>0)&&(stuDay-thisDay<=7))

{

isFound=1;

print(i);//调用打印函数

}

//跨月

if(stuMonth==thisMonth+1)

{

if(thisMonth==2)//如果是月

{

if(isRunYear==1)//如果是润年天

{

if(29-thisDay+stuDay<=7)

{

isFound=1;

print(i);//调用打印函数

}

}

else//平年天

{

if(28-thisDay+stuDay<=7)

{

isFound=1;

print(i);//调用打印函数

}

}

}

else//不是月则按天计算

{

if(31-thisDay+stuDay<=7)

{

isFound=1;

print(i);//调用打印函数

}

}

}

//跨年

if((thisMonth==12)&&(stuMonth==1)&&(31-thisDay+stuDay<=7))

{

isFound=1;

print(i);//调用打印函数

}

}

if(isFound==0)

{

cout<<"在最近天中,没有学生过生日!

"<

}

}

具体实现代码请看源程序附件中的stuBirth()函数。

3.5修改学生信息:

修改学生信息运行如图所示:

当选择修改学生信息菜单时,会提示您输入要修改学生的学号,如果您输入错误,则提示学号不存在,如下图:

此时,只需重新输入正确的学号即可,如下图

根据您输入的学号,系统将会显示您要修改的学生的信息,会提示您是否确定要修改该学生的信息,Y执行修改,会提示您重新输入该学生的信息(注:

此系统中学号是关键字段,不可修改,其他信息均修改),按N取消修改。

实现思想:

在修改数据时先判断系统中有无记录,若无记录则提示系统中无学生信息,请先输入,此时就没必要再往下执行了。

若有记录,则提示要修改的学生的学号,此时先判断学号是否合法,再判断学号是否存在,若存在,则显示该生的信息,然后输出确实修改的信息,若确定修改,则提示重新输入该生的姓名、性别等信息。

具体实现代码请看源程序附件中的editStu(intn)函数。

3.6删除学生信息:

删除学生信息运行结果如图所示:

此时,输入您要删除的学生的学号即可,出现如下图所示:

系统会提示您是否确认删除,Y执行删除,N取消删除。

实现思想:

在删除数据时,需要先判断此系统中有无记录,若无记录则提示系统中无学生信息,请先输入,此时程序将不向下执行。

否则提示输入要删除的学生的学号,在输入学号后,先判断学号是否合法,再判断系统中有无此学号,若无则提示系统中无此记录。

否则将显示要删除的学生的信息,然后提示确实是否删除,确认后便执行删除。

由于采用的是数组存储,删除则是循环读取信息,然后将数组索引对应的信息前移,如stu[j].NO=stu[j+1].NO(J是数组的索引),然后再将学生人数S减1。

具体实现代码请看源程序附件中的deleteStu(intn)函数。

参考文献:

总结

通过这次课程设计,使我们学到了一些以前没有学过的知识,使我们对C++程序设计有了更深层次的认识和理解,懂得了灵活运用C++。

在计算机飞速发展的今天,懂得一门计算机语言技术是非常必要的。

同时,我们也清醒的认识到,只有自己肯努力,愿意去付出劳动,就能够得到属于我们自己所想要的东西。

最后,在此由深切的向我的指导老师表示衷心的感谢,是她的悉心的指导和严格要求,才合我的课程设计有了较为皮完善的一面,才有了我能力的提高,得到了充分的锻炼。

源程序代码

#include

#include

#include

#include

#include

ints=0;//申明全局变量S,用于存放记录数

classstuClass

{

public:

structdateStruct//定义一个日期结构体

{

intyear;

intmonth;

intday;

};

structcontactStruct//定义一个联系方式结构体

{

inttel;

charmail[30];

intqq;

};

structstudentStruct//定义一个学生基本信息结构体

{

intNO;

charname[10];

charsex[4];

dateStructbirth;

charlikes[100];

charaddress[100];

contactStructcontact;

};

};

classstuOperate

{

public:

stuClass:

:

studentStructstu[100];

voidinsertStu();//增加

voidprint(int);//打印信息

boolcheckStuNO(int);//判断学号是否重复

boolcheckStr(char*,char*);//判断两字符串是否相等

voidsearchStu(int);//查询

voiddeleteStu(int);//删除

voideditStu(int);//修改

voidstuPercent();//百分比

voidstuBirth();//近期生日

voiddisplay();//显示菜单项

};

boolstuOperate:

:

checkStr(char*a,char*b)//判断两个字符串是否相等

{

inti;

intj=strlen(b);

for(i=0;i

{

if(*a==*b)

{

a++;

b++;

}

else

return0;

}

return1;

}

boolstuOperate:

:

checkStuNO(intstuNO)//判断学号是否重复函数

{

intm=1,repeat=0;

while(m<=s)

{

if(stuNO==stu[m].NO)

{

repeat=1;

break;

}

m++;

}

returnrepeat;

}

voidstuOperate:

:

insertStu()//输入数据

{

charname[10];

charsex[4];

intNO;

intyear,month,day;

charlikes[100];

charaddress[100];

inttel,qq;

charmail[30];

cout<<"******************添加计科111班学生信息******************"<

cout<<"请输入学号后三位(101~130):

"<

cout<<"201100814";

cin>>NO;

while(NO<101||NO>130)//判断输入的学号是否正确

{

cout<<"您输入的学号不正确!

请重新输入:

"<

cout<<"201100814";

cin>>NO;

}

while(checkStuNO(NO))//调用checkStuNO函数判断学号是否重复

{

cout<<"该学号已存在,请重新输入!

"<

cin>>NO;

}

cout<<"请输入姓名:

"<

cin>>name;

cout<<"请输入性别(男/女):

"<

cin>>sex;

while(!

checkStr(sex,"男")&&!

checkStr(sex,"boy")&&!

checkStr(sex,"girl")&&!

checkStr(sex,"女"))

{

cout<<"性别只能是男(boy)或女(girl)!

"<

cin>>sex;

}

cout<<"下面输入出生日期:

"<

cout<<"请输入出生年:

";

cin>>year;

while(year<1800||year>2999)//判断输入的出生年是否正确

{

cout<<"您输入的出生年不正确!

请重新输入:

"<

cin>>year;

}

cout<<"请输入出生月:

";

cin>>month;

while(month<0||month>12)//判断输入的出生月是否正确

{

cout<<"您输入的出生月不正确!

请重新输入:

"<

cin>>month;

}

cout<<"请输入出生日:

";

cin>>day;

while(day<0||day>31)//判断输入的出生日是否正确

{

cout<<"您输入的出生日不正确!

请重新输入:

"<

cin>>day;

}

cout<<"请输入兴趣爱好:

"<

cin>>likes;

cout<<"请输入地址:

"<

cin>>address;

cout<<"下面输入联系方式:

"<

cout<<"请输入电话:

"<

cin>>tel;

cout<<"请输入QQ号:

"<

cin>>qq;

cout<<"请输入电子邮箱:

"<

cin>>mail;

s=s+1;//学生人数加1

stu[s].NO=NO;

strcpy(stu[s].name,name);

strcpy(stu[s].sex,sex);

stu[s].birth.year=year;

stu[s].birth.month=month;

stu[s].birth.day=day;

strcpy(stu[s].likes,likes);

strcpy(stu[s].address,address);

stu[s].contact.tel=tel;

stu[s].contact.qq=qq;

strcpy(stu[s].contact.mail,mail);

}

voidstuOperate:

:

print(int

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

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1