毕业论文学生考勤管理系统的设计文档格式.docx
- 文档编号:17593248
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:42
- 大小:103.65KB
毕业论文学生考勤管理系统的设计文档格式.docx
《毕业论文学生考勤管理系统的设计文档格式.docx》由会员分享,可在线阅读,更多相关《毕业论文学生考勤管理系统的设计文档格式.docx(42页珍藏版)》请在冰豆网上搜索。
(1)、录入学生的缺课记录,函数代码voidinput(records*r){}模块中。
首先提示用户按照正确的格式进行学生缺课记录的录入,这个步骤比较简单,只需要不断地将记录的每个数据项存入结构体对应的成员中。
(2)、修改某个学生的缺课记录,函数代码voidedt(records*r){}模块中。
首先必须查找到你所需要修改的那位的学生全部缺课记录。
这个模块不需要定义新的结构体。
在修改前当然要检查记录是否为空了,不为空的话,可以设置下面这五个菜单供用户选择:
1、缺课日期2、第几节课3、课程名称4、学生姓名5、缺课类型6、退出修改程序并返回系统主菜单。
修改很简单,仅需要对该学生的某个部分进行替换即可。
采用switch语句很快就解决。
最后实现对所选记录的修改,完成后更新原有的学生记录。
(3)、查询某个学生的缺课情况,函数代码voidsearch(records*r){}模块中。
达到查询结果按照日期升序排序,同一天内按照所缺课程的时间升序排序的目的,
(4)、统计,函数代码为voidorder_c(){}和voidorder_s(){}的类模块中。
其中实现对课程排序和对学生姓名的排序。
三、流程图
学生考勤系统结构图:
基类的数据成员和成员描述
record
Stringdate,cname,sname;
intcno,type;
voidset();
stringtostr();
类名/函数名
描述
描述
record
基类
edt()
修改学生信息
records
实现学生旷课情况排序的类
del()
删除学生信息
wt/rd()
实现对文件的输入和输出
search()
查找学生信息
input()
录入学生的缺课记录
search_s()
一定范围查找学生信息
main()
主函数
四、数据结构设计
此程序运用多种条件语句,主体采用的是动态数组、指针。
系统的设计采用了数组语句、选择语句和循环语句,在需要处理大量同类数据时,这样就使程序书写更加简洁。
程序使用了布尔函数。
选择语句多采用if多分支选择结构与switch语句。
首先计算switch表达式,然后在caes子句中寻找值相等的常量表达式,并以此为入口符号,由此开始顺序执行。
循环语句采用了for语句等、do-while语句,for语句用于已知循环次数的循环结构,括号中的三个量分别用来表示循环变量初值、循环终值和循环增量。
do-while语句先循环后判断,Break语句在switch语句中,保证多分支情况的正确执行,在循环语句中,强制终止本层循环。
保存和读取函数是典型的函数功能,一个程序是由若干个函数组成的,保存和读取函数是和其他函数互相调用的
再有使用有关类的设计,学生缺课信息类和有关信息排序类,如下:
classrecord//学生缺课信息类
{
public:
voidset(stringd,intcno,stringc,strings,inttype)
{
date.assign(d);
//日期
cname.assign(c);
//课程名字
sname.assign(s);
//学生姓名
this->
cno=cno;
//对缺课类型的选择为int型
type=type;
//缺课类型
}
voidset(recordre)
date.assign(re.date);
cname.assign(ame);
sname.assign(re.sname);
cno=o;
type=re.type;
stringdate,cname,sname;
intcno,type;
};
classrecords//实现学生旷课情况排序的类
records()//构造函数
r=newrecord[100];
n=0;
voidorder_s()//姓名的排序
inti;
intj;
string*s=newstring[n];
int*c=newint[n];
s[0].assign(r[0].sname);
c[0]=1;
intk=1,flag;
for(i=1;
i<
n;
i++)
{
flag=0;
for(j=0;
j<
k;
j++)
if(r[i].sname==s[j])
{
c[j]++;
flag=1;
break;
}
if(!
flag)
{
s[k]=r[i].sname;
c[k++]=1;
}
}
for(i=1;
for(j=i;
j>
0;
j--)
if(c[j]>
c[j-1])
inttmp=c[j];
c[j]=c[j-1];
c[j-1]=tmp;
stringstmp=s[j];
s[j]=s[j-1];
s[j-1]=stmp;
cout<
<
"
旷课学生姓名\t旷课次数"
endl;
for(i=0;
cout<
s[i]<
\t\t"
c[i]<
voidorder_c()//课程排序
inti,j;
s[0].assign(r[0].cname);
for(j=0;
if(r[i].cname==s[j])
s[k]=r[i].cname;
课程名\t旷课人次"
\t"
record*r;
intn;
五、类设计
系统中主要涉及了两个类:
一个是classrecord//关于学生考勤基本信息类
另一个是classrecords//实现学生旷课情况排序的类
六、主要算法设计
关键算法:
旷课情况的排序:
classrecords//实现学生旷课情况排序的类
旷课记录的修改:
cout<
请输入要修改缺课记录的学生姓名:
"
flush;
stringt1,t3,t4;
chartmp[30];
intt2,t5,flag=0;
cin>
>
tmp;
t1.assign(tmp);
for(i=0;
r->
if(r->
r[i].sname==t1)
flag=7;
break;
if(!
查无此学生!
return;
t1=r->
r[i].date;
t2=r->
r[i].cno;
t3=r->
r[i].cname;
t4=r->
r[i].sname;
t5=r->
r[i].type;
旷课项目的修改!
请输入要修改的项目:
\n(1.缺课日期2.缺课节次3.缺课名称4.学生姓名5.缺课类型6.全部)"
e0:
flag;
switch(flag)
case1:
gotoe1;
case2:
gotoe2;
case3:
gotoe3;
case4:
gotoe4;
case5:
gotoe5;
case6:
default:
gotoe0;
用到的知识点有:
函数的作用域、函数的调用、数组赋值、函数循环、以及类的定义,另外还用到了for函数、getch函数、switch函数、case函数、default函数等等。
七、主要代码
第一部分:
学生考勤管理系统
#include"
stdlib.h"
hanshushixian.h"
record.h"
#include<
string>
iostream>
iomanip>
fstream>
usingnamespacestd;
intmain()
c1:
//主菜单实现
system("
cls"
);
{
*************************************************************"
***★欢迎访问学生考勤管理系统★***"
***系统主菜单:
1.显示所有学生的缺课记录***"
***2.录入学生的缺课信息记录***"
***3.查询某个学生的缺课情况***"
***4.修改某个学生的缺课记录***"
***5.删除某个学生的缺课记录***"
***6.统计某段时间内旷课情况***"
***7.退出系统***"
O(∩_∩)O请选择你所需要的操作O(∩_∩)O:
intchose;
c2:
cin>
chose;
if(chose==7)exit(0);
records*r=newrecords();
rd(r);
switch(chose)
case1:
pri(r);
break;
case2:
input(r);
case3:
search(r);
case4:
edt(r);
case5:
del(r);
case6:
search_s(r);
default:
gotoc2;
是否返回主菜单?
(y/n)——你的选择:
charyn;
c3:
yn;
if(yn=='
y'
)gotoc1;
elseif(yn=='
n'
)exit(0);
elsegotoc3;
return0;
}
第二部分:
record.h(类的设计部分)
#ifndefrecord_class
#definerecord_class
classrecord//关于学生考勤基本信息类
voidset(record&
re)
//assign可以避免不必要的内存分配,可以提高效率
stringtostr()
strings;
chartmp[3];
s.assign(date);
itoa(cno,tmp,10);
s.append("
#"
s.append(tmp);
//直接添加另一个完整的字符串
s.append(cname);
s.append(sname);
itoa(type,tmp,10);
returns;
stringdate;
stringcname;
stringsname;
intcno;
inttype;
#endifrecord_class
#ifndefrecords_class
#definerecords_class
#endifrecords_class
第三部分:
hanshushixian.h(功能子函数的实现部分)
voidwt(records*r)//实现对文件的输出
ofstreamoutf("
data.txt"
for(inti=0;
outf<
r[i].tostr()<
outf<
!
voidrd(records*r)//实现对文件的输入
ifstreaminf("
if(inf.eof())
记录为空!
intt2,t5;
r->
n=0;
while(true)
inf.getline(tmp,10,'
#'
if(tmp[0]=='
'
)break;
t1.assign(tmp);
inf.getline(tmp,3,'
t2=atoi(tmp);
inf.getline(tmp,30,'
t3.assign(tmp);
t4.assign(tmp);
inf.getline(tmp,3);
t5=atoi(tmp);
r->
r[r->
n++].set(t1,t2,t3,t4,t5);
booltimechk(stringt1)
intyear=atoi(t1.substr(0,2).c_str());
intmonth=atoi(t1.substr(2,2).c_str());
intday=atoi(t1.substr(4,2).c_str());
(t1.length()==6&
&
year>
0&
year<
99&
month>
month<
13&
day>
day<
32))
日期录入有误!
请重新录入:
returnfalse;
elsereturntrue;
voidinput(records*r)//录入学生的缺课记录
intt2,t5,flag=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业论文 学生 考勤 管理 系统 设计