学生考勤管理系统设计文档格式.docx
《学生考勤管理系统设计文档格式.docx》由会员分享,可在线阅读,更多相关《学生考勤管理系统设计文档格式.docx(45页珍藏版)》请在冰点文库上搜索。
![学生考勤管理系统设计文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-4/29/58808c21-e2bc-4ee9-ba61-2f2573028bc6/58808c21-e2bc-4ee9-ba61-2f2573028bc61.gif)
3.1.1类设计 8
3.1.2类之间的关系 9
3.1.3函数设计 10
3.2结构设计 11
3.2.1系统流程图(如图3-2) 11
3.2.2界面设计 12
第四章 系统实现 13
4.1类实现 13
4.2函数实现 14
4.3主函数实现 39
第五章 系统测试 40
5.1模块测试 40
5.2课程设计过程中遇到的问题 43
总 结 44
致 谢 44
参考文献 44
第一章 绪论
1.1课程设计的目的
此次课程设计的目的是以《c++程序设计基础》为基础,针对具有一定难度的综合性题目,进行分析、编程、调试和运行,进一步掌握面向对象和面向过程程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实践相结合,提高分析问题、解决问题的能力。
要求学生达到熟练掌握c++语言的基本知识和技能。
1.2课程设计的背景和意义
1.2.1课程设计的背景
1.理论研究基础
《c++面向对象程序设计》是计算机专业的基础课程,本课程按照软件程序设计所需能力进行教学设计,提出以项目模块方式带动相关知识点、实践项目和理论并行的思路,将案例贯穿于课程始终,对原有的教学体系、教学内容进行重新编排,按照从易到难的原则,将其巧妙地融入到项目开发过程中,降低学习难度,提高学生学习的信心,有效培养学生的应用能力和学习能力。
2.技术层面的支持
本系统运用到:
类与对象在c++中的实现、静态数据成员、运算符重载、有缘函数继承与派生的基本知识、单继承和多继承、虚基类的作用与使用、虚函数的定义和使用、纯虚函数和抽象类的定义和使用、输入输出流的概念、输入输出流操作、文件的创建、打开、读写、关闭等操作。
1.2.2课程设计的意义
本课程按照软件程序设计所需能力进行教学设计,提出以项目模块方式带动相关知识点、实践项目和理论并行的思路,将案例贯穿于课程始终,对原有的教学体系、教学内容进行重新编排,按照从易到难的原则,将其巧妙地融入到项目开发过程中,降低学习难度,提高学生学习的信心,有效培养学生的应用能力和学习能力。
1.3课程设计环境
硬件平台:
CPU:
15。
2.67GHz。
RAM:
512MB以上。
软件平台:
操作系统:
Windowsxp/Windows7
编辑环境:
Visualc++6.0
第二章 需求分析
2.1、问题描述
学生信息包括:
学号、姓名、性别、年龄、班级等信息。
考勤信息包括:
缺课日期、第几节课、课程名称、学生姓名、缺课类型
(迟到、早退、请假和旷课)。
2.2、功能要求
(1)添加功能:
程序能够添加学生的记录和缺课记录,提供选择界面供用户选择所要添加的类别。
添加学生记录时,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。
(2)查询功能:
可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。
还可以按课程名、学生姓名对缺课记录进行查询。
(3)显示功能:
可显示当前系统中所有学生的记录和缺课记录,每条记录占据一行。
(4)编辑功能:
可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。
(5)删除功能:
主要实现对已添加的学生记录进行删除。
如果当前系统中没有相应的记录,则提示“记录为空!
”并返回操作。
(6)统计功能:
能根据多种参数进行统计。
能按课程名统计出学生旷课的信息、还可以按姓名统计出任一学生的旷课情况。
需要排序。
(7)保存功能:
可将当前系统中各类记录存入文件中,存入方式任意。
(8)读取功能:
可将保存在文件中的信息读入到当前系统中,供用户进行使用。
2.3、问题的解决方案
根据系统功能要求,可以将问题解决分为以下步骤:
(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
(2)分析系统中的各个实体及它们之间的关系;
(3)根据问题描述,设计系统的类层次;
(4)完成类层次中各个类的描述;
(5)完成类中各个成员函数的定义;
(6)完成系统的应用模块;
(7)功能调试;
(8)完成系统总结报告。
第三章 系统设计
3.1数据设计
3.1.1类设计
学生类:
数据成员:
Number-学号,Name1-姓名,Sex-性别,Class-班级成员函数:
voidSetstu()-输入学生信息
voidDisplaystu()-输出学生信息
voidInquiryS1(Student*)-以学号的形式查询学生信息voidInquiryS2(Student*)-以姓名的形式查询学生信息voidShuchuS(Student*)-显示所有信息
voidFileS(Student*)-保存学生信息voidDuquS(Student*)-读取学生信息voidShuruS()-间接输出学生信息
缺课日期类:
year-年,month-月,day-日
成员函数:
voidSetDa()-输入日期,voidDisplayDa()-输出日期
缺课类型类:
AT-缺课类型
voidSetAT()-输入缺课类型,voidDisplayAT()-输出缺课类型
考勤管理类:
intNumClass-第几节课,CName-课程名称成员函数:
voidSetAM(Student*-输入考勤信息
voidDisplayAM()-输出考勤信息
voidInquiryAM(Att_Man*)-查询学生考勤信息voidShuchuAM(Att_Man*)-显示学生考勤信息
voidTongjiAM1(Att_Man*)-以课程名统计学生考勤信息voidTongjiAM2(Att_Man*)-以姓名统计学生考勤信息voidFileAM(Att_Man*)-保存学生考勤信息
voidDuquAM(Att_Man*)-读取学生考勤信息期
3.1.2类之间的关系
基类:
Date-缺课日期类 Student-学生信息类 AFCT-缺课类型类三个基类。
派生类:
Att_Man-考勤管理类 Guanli管理信息类
包含上述3个基类的信息
管理信息类:
包括类3个基类和一个考勤管理类定义成这种关系,便于考勤信息的管理。
一个Att_Man派生
AFCT:
SetAT()
DisplayAT();
Student:
Setstu()Displaystu()FileS() DuquS()
Date:
SetDa()DisplayDa()
(如图3-1)
Guanli:
voidInquiryS1(Student*)voidInquiryS2(Student*)voidShuchuS(Student*)voidInquiryAM(Att_Man*)voidShuchuAM(Att_Man*)voidTongjiAM1(Att_Man*)voidTongjiAM2(Att_Man*)voidMain();
voidDuquAM(Att_Man*)
voidFileAM(Att_Man*)
voidDisplayAM()
Att_Man
voidSetAM(Student*)
Att_Man(){}
Public
19
图3-1
3.1.3函数设计
voidSetstu()-输入学生信息voidDisplaystu()-输出学生信息
voidFileS(Student*)-保存学生信息voidDuquS(Student*)-读取学生信息voidShuruS()-间接输出学生信息voidSetDa()-输入日期
voidDisplayDa()-输出日期voidSetAT()-输入缺课类型voidDisplayAT()-输出缺课类型
voidSetAM(Student*-输入考勤信息voidDisplayAM()-输出考勤信息
*************************************************
3.2结构设计
3.2.1系统流程图(如图3-2)
开始
添加
查看
显示
统计学生信息
统计学生考勤信息
保存学生考勤信息
保存学生信息
删除查询信息
修改查询信息
显示查询信息
读取学生信息
读取学生考勤信息
添加考勤信息
添加学生信息
读取
保存
统计
结束
显示学生考勤信息
显示学生信息
如图3-2
3.2.2界面设计
程序主菜单 (如图3-2)
图3-2主界面
子菜单 (如图3-3)
图3-3子菜单
第四章 系统实现
4.1类实现
1.学生类的实现classStudent
{
public:
Student(){}
Student(intNu,stringNa,charSe,intAg,stringCl)
Number=Nu;
Name1=Na;
Sex=Se;
Age=Ag;
Class=Cl;
}
staticintT;
staticintW;
intNumber;
//学号
stringName1;
//名字charSex;
//性别
intAge;
//年龄stringClass;
//班级
voidSetstu();
//输入学生信息voidDisplaystu();
//输出学生信息
voidFileS(Student*);
//保存学生信息voidDuquS(Student*);
//读取学生信息
};
classDate
intyear;
intmonth;
intday;
Date(inty=0,intm=0,intd=0){year=y;
month=m;
day=d;
}voidSetDa();
//输入日期
voidDisplayDa();
//输出日期
classAFCT
AFCT(){}
stringAT;
//缺课类型
voidSetAT();
//输入缺课类型voidDisplayAT();
//输出缺课类型
classAtt_Man:
publicDate,publicStudent,publicAFCT
Att_Man(){};
intNumClass;
//第几节课stringCName;
//课程名称staticintT1;
staticintW1;
voidSetAM(Student*);
//输入考勤信息voidDisplayAM();
//输出考勤信息
voidFileAM(Att_Man*);
//保存学生考勤信息voidDuquAM(Att_Man*);
//读取学生考勤信息
4.2函数实现
voidStudent:
:
Setstu()
for(h=0;
h<
100;
h++)
cout<
<
"
学号:
"
;
cin>
>
Number;
a[j]=Number;
if(Number==0)
学号不能为0!
请重新输入"
endl;
continue;
else
break;
T++;
for(i=0;
i<
j;
i++)//学生学号是否重复判断
if(a[i]==a[j])
输入学号重复,已取消此次输入,请重新输入!
for(h=0;
if(Number==0)
i=0;
姓名:
Name1;
f[j]=Name1;
性别(morf):
cin>
Sex;
if(Sex=='
m'
||Sex=='
f'
)
性别输入不正确,请重新输入!
年龄(10-30):
Age;
if(Age>
30||Age<
10)
年龄输入不正确,请重新输入!
班级:
Class;
j++;
i--;
Displaystu()
**************************"
显示此学生的信息:
Number<
姓名:
Name1<
性别:
Sex<
年龄:
Age<
Class<
InquiryS1(Student*s)
intI=0;
intNumber1;
请输入学生的学号进行查询:
Number1;
for(j=0;
j<
T;
j++)//判断是否有相同学号
if(Number1==s[j].Number)
I++;
s[j].Displaystu();
break;
if(I==0)
没有相同的学号!
①.进行修改!
②.进行删除!
③.继续查询或返回!
i++)
请输入编号:
x;
if(x>
3||x==0)
编号输入错误,请重新输入!
if(x==1)
cout<
①.学号 ②.名字 ③.性别 ④.年龄 ⑤.班级
请输入编号进行修改:
h;
if(h>
5||h==0)
if(h==1)
intNumber2;
for(w=0;
w<
w++)
输入修改的学号:
Number2;
s[j].Number=Number2;
if(Number2==0)
修改成功!
elseif(h==2)
stringName3;
输入修改的姓名:
Name3;
s[j].Name1=Name3;
elseif(h==3)
charSex2;
23
输入修改的性别(morf):
Sex2;
s[j].Sex=Sex2;
if(Sex2=='
||Sex2=='
elseif(h==4)
intAge1;
输入修改的年龄(10-30):
Age1;
s[j].Age=Age1;
if(Age1>
30||Age1<
elseif(h==5)
stringClass1;
输入修改的班级:
Class1;
s[j].Class=Class1;
elseif(x==2)//删除信息
W++;
for(w=0;
10;
if((j+w+1)<
T)
s[j+w]=s[j+w+1];
elseif((j+w+1)==T)
删除成功!
elseif(x==3)
*************************"
InquiryS2(Student*s)
intU=0;
stringName2;
请输入学生的姓名进行查询:
Name2;
j++)//判断是否有相同姓名
if(Name2==s[j].Name1)
U++;
if(U==0)
没有相同姓名!
①.进行修改!
②.进行删除!
③.继续查询或返回!
29
charSex1;
Sex1;
s[j].Sex=Sex1;
if(Sex1=='
||Sex1=='
int