面向对象课设通讯录管理系统文档格式.docx
《面向对象课设通讯录管理系统文档格式.docx》由会员分享,可在线阅读,更多相关《面向对象课设通讯录管理系统文档格式.docx(36页珍藏版)》请在冰点文库上搜索。
添加学生信息:
录入学生的基本信息如学号、姓名、性别、出生日期、兴趣爱好、联系方式(电话、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)
<