面向对象课设通讯录管理系统文档格式.docx

上传人:b****3 文档编号:7970944 上传时间:2023-05-09 格式:DOCX 页数:36 大小:379.55KB
下载 相关 举报
面向对象课设通讯录管理系统文档格式.docx_第1页
第1页 / 共36页
面向对象课设通讯录管理系统文档格式.docx_第2页
第2页 / 共36页
面向对象课设通讯录管理系统文档格式.docx_第3页
第3页 / 共36页
面向对象课设通讯录管理系统文档格式.docx_第4页
第4页 / 共36页
面向对象课设通讯录管理系统文档格式.docx_第5页
第5页 / 共36页
面向对象课设通讯录管理系统文档格式.docx_第6页
第6页 / 共36页
面向对象课设通讯录管理系统文档格式.docx_第7页
第7页 / 共36页
面向对象课设通讯录管理系统文档格式.docx_第8页
第8页 / 共36页
面向对象课设通讯录管理系统文档格式.docx_第9页
第9页 / 共36页
面向对象课设通讯录管理系统文档格式.docx_第10页
第10页 / 共36页
面向对象课设通讯录管理系统文档格式.docx_第11页
第11页 / 共36页
面向对象课设通讯录管理系统文档格式.docx_第12页
第12页 / 共36页
面向对象课设通讯录管理系统文档格式.docx_第13页
第13页 / 共36页
面向对象课设通讯录管理系统文档格式.docx_第14页
第14页 / 共36页
面向对象课设通讯录管理系统文档格式.docx_第15页
第15页 / 共36页
面向对象课设通讯录管理系统文档格式.docx_第16页
第16页 / 共36页
面向对象课设通讯录管理系统文档格式.docx_第17页
第17页 / 共36页
面向对象课设通讯录管理系统文档格式.docx_第18页
第18页 / 共36页
面向对象课设通讯录管理系统文档格式.docx_第19页
第19页 / 共36页
面向对象课设通讯录管理系统文档格式.docx_第20页
第20页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

面向对象课设通讯录管理系统文档格式.docx

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

面向对象课设通讯录管理系统文档格式.docx

添加学生信息:

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

修改学生信息:

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

删除学生信息:

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

查询学生信息:

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

查看学生男女比例:

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

查看近期生日的学生:

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

 

正文

1.概要设计

日期结构dateStruct

变量名

数据类型

描述

year

int

month

day

联系方式结构体contactStruct

tel

电话

mail

char

电子邮箱

qq

QQ号

学生信息结构体studentStruct

NO

学号

name

姓名

sex

性别

birth

dateStruct

出生日期

likes

爱好

address

邮政地址

contact

contactStruct

联系方式

1.2系统结构图

2.详细设计

2.1类的编写

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

本系统中创建了两个类:

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

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

2.1.1stuClass类

stuClass类主要用来定义学生基本信息,包含三个结构体,分别是日期、联系方式、学生基本信息结构体;

用这几个结构体分别来实现联系方式、学生信息、日期信息的保存和操作。

2.1.2stuOperate类

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

2.2程序流程图

3.程序测试与分析

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

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

实现思想:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

否则将输出查询条件,1查询所有;

2根据学号查询,查询所有时循环数组,读取每个元素对应的信息即可。

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

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

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

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

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

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

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

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

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

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

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

time_tt=time(NULL);

tm*pt=localtime(&

t);

intyear,month,day;

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)//如果是2月

{

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

{

if(29-thisDay+stuDay<

=7)

{

isFound=1;

print(i);

}

}

else//平年28天

if(28-thisDay+stuDay<

}

else//不是2月则按31天计算

if(31-thisDay+stuDay<

isFound=1;

print(i);

//跨年if((thisMonth==12)&

(stuMonth==1)&

(31-thisDay+stuDay<

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

参考文献

[1]陈维兴,林小茶.c++面向对象程序设计教程.北京:

清华大学出版社,1996.2004.

[2]张国峰.C++程序设计实用教程.北京:

清华大学出版社,1996.

[3]张松梅.C++语言教程.电子科技大学出版社,1993.

[4]阎龙.C程序员的C++指南.北京航空航天大学出版社,1992.

[5]王博.面向对象的建模、设计技术与方法.北京希望电脑公司,1990.

[6]李强贾云霞.VisualC++项目开发实践.中国铁道出版社,2004.

[7]严华峰.VisualC++课程设计案例精编.中国水利水电出版社,2003.

[8]VC++深入详解.孙鑫、余安萍 

.电子工业出版社.2006.

[9]VC++内幕.小克鲁格林斯基.清华大学出版社.2006.

[10]VisualC++程序开发范例宝典.明日科技.2009

总结

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

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

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

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

源程序附件

#include<

iostream.h>

string.h>

conio.h>

stdio.h>

#include<

ctime>

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

{

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<

j;

i++)

{

if(*a==*b)

a++;

b++;

}

else

return0;

}

return1;

}

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<

<

"

******************添加学生信息******************"

endl;

请输入学号:

cin>

>

NO;

while(NO<

1||NO>

99)//判断输入的学号是否正确

{

cout<

您输入的学号不正确!

cin>

}

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

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

请输入姓名:

name;

请输入性别(男/女):

sex;

while(!

checkStr(sex,"

男"

)&

!

女"

))

性别只能是男或女!

//判断性别输入

下面输入出生日期:

请输入年:

;

year;

请输入月:

month;

请输入日:

day;

请输入兴趣爱好:

likes;

请输入邮政地址:

address;

下面输入联系方式:

"

请输入电话:

tel;

请输入QQ:

qq;

请输入电子邮箱:

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);

print(inti)//输出数据

i<

\t"

stu[i].NO<

stu[i].name<

\t\t"

stu[i].sex<

stu[i].birth.year<

-"

stu[i].birth.month<

stu[i].birth.day<

stu[i].likes<

stu[i].address<

stu[i].contact.tel<

stu[i].contact.qq<

stu[i].contact.mail<

searchStu(ints)//查找数据

intNO,p;

while(s==0)

系统中无学生信息,请先输入记录!

break;

if(s!

=0)

请输入您要查找的学号:

while(NO<

cout<

cin>

}

while(s!

=0)//查找是否有符合条件的记录

if(NO==stu[s].NO)

{

cout<

学号\t姓名\t性别\t出生日期\t兴趣爱好\t邮政地址\t电话\tQQ\t电子邮箱"

stu[s].NO<

stu[s].name<

stu[s].sex<

stu[s].birth.year<

stu[s].birth.month<

stu[s].birth.day<

stu[s].likes<

stu[s].address<

stu[s].contact.tel<

stu[s].contact.qq<

stu[s].contact.mail<

getch();

p=1;

break;

}

else

p=0;

s--;

if(p==0)

您输入的学号不存在!

getch();

deleteStu(intn)//删除数据

charkey;

系统中无学生信息,请先输入!

请输入您要删除的学号:

99)

<

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

当前位置:首页 > 小学教育 > 语文

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

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