您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 绩效管理 > 学生考勤管理系统课程设计报告
合肥学院计算机科学与技术系课程设计报告2010~2011学年第二期课程C++程序设计语言课程设计名称学生考勤管理系统学生姓名王兵学号1004032035专业班级网络工程(2)班指导教师何立新、陈艳平2011年7月学生考勤管理系统2目录一.需求分析.............................................31.1功能需求.........................................................................................................31.2数据需求.........................................................................................................31.3性能需求.........................................................................................................3二.算法设计.............................错误!未定义书签。2.1设计思想..........................................................................................................32.2功能实现..........................................................................................................7三.用户手册............................................7四.调试及测试..........................................8五.总结...............................................13六.参考文献...........................................14附录——源程序.........................................14一.需求分析3开发一个好的软件,进行深入细致的可行性研究是极其必要的,而且还必须做大量的,全面的需求分析,需求分析是软件定义时期的最后一个阶段,它更是开发一个好的软件的基础。它的基本任务是准确地回答“需要此软件的人都需要哪些功能?”这个问题。需求分析的主要任务是确定系统必须完成哪些工作,也就是对目标系统提出完整的﹑准确的﹑具体的﹑清晰的要求,确定系统必须具有的功能和性能,系统要求的运行环境,以及预测系统发展的前景,并仔细分析系统中的数据,以便完善良好的软件环境。在需求分析阶段系统分析员将仔细研究软件所需要完成的具体功能。1功能需求:1、录入学生的缺勤记录;2、修改某个学生的缺勤记录;3、查询某个学生的缺勤情况;4、统计某段时间内,缺勤学生学号及缺勤次数,按缺勤权值统计学生的负分值,并能进行排序;5、统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序;6、系统以菜单方式工作2数据需求本系统主要涉及的数据有学生缺课信息类和有关信息排序类。学生缺课信息包括缺课时间,学生姓名,课程名称,第几节,学生迟到次数,早退次数,请假次数,旷课次数。有关信息排序类包括对课程排序和对姓名排序。3性能需求要求系统具有可靠性,速度要快二、算法设计1.设计思想学生考勤系统结构图:基类的数据成员和成员描述recordStringdate,cname,sname;intcno,type;voidset();stringtostr();4类名/函数名描述类名/函数名描述record基类edt()修改学生信息records实现学生旷课情况排序的类del()删除学生信息wt/rd()实现对文件的输入和输出search()查找学生信息input()录入学生的缺课记录search_s()一定范围查找学生信息edt()修改学生信息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型this-type=type;//缺课类型}voidset(recordre){5date.assign(re.date);cname.assign(re.cname);sname.assign(re.sname);this-cno=re.cno;this-type=re.type;}stringdate,cname,sname;intcno,type;};classrecords//实现学生旷课情况排序的类{public: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;in;i++){flag=0;for(j=0;jk;j++)if(r[i].sname==s[j]){c[j]++;flag=1;break;}6if(!flag){s[k]=r[i].sname;c[k++]=1;}}for(i=1;ik;i++)for(j=i;j0;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;ik;i++)couts[i]\t\tc[i]endl;}voidorder_c()//课程排序{inti,j;string*s=newstring[n];int*c=newint[n];s[0].assign(r[0].cname);c[0]=1;intk=1,flag;for(i=1;in;i++){flag=0;for(j=0;jk;j++)if(r[i].cname==s[j]){7c[j]++;flag=1;break;}if(!flag){s[k]=r[i].cname;c[k++]=1;}}for(i=1;ik;i++)for(j=i;j0;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;ik;i++)couts[i]\tc[i]endl;}record*r;intn;};把所有的学生记录都保存到一个文件里面,然后根据需要再将里面需要查找的元素进行查找,相应的排序可能就是将他们尽可能压进关联式容器map,有的部分就压入set里面,这些都是根据模块的功能来选定的。可以这么说,选择好合理的数据结构查找与排序就可以一劳永逸了。这点在后面部分会有详细的说明。还有就是对各功能子函数的编写应用。2.对功能的实现:8(1)、录入学生的缺课记录,函数代码voidinput(records*r){}模块中。首先提示用户按照正确的格式进行学生缺课记录的录入,这个步骤比较简单,只需要不断地将记录的每个数据项存入结构体对应的成员中。(2)、修改某个学生的缺课记录,函数代码voidedt(records*r){}模块中。首先必须查找到你所需要修改的那位的学生全部缺课记录。这个模块不需要定义新的结构体。在修改前当然要检查记录是否为空了,不为空的话,可以设置下面这五个菜单供用户选择:1、缺课日期2、第几节课3、课程名称4、学生姓名5、缺课类型6、退出修改程序并返回系统主菜单。修改很简单,仅需要对该学生的某个部分进行替换即可。采用switch语句很快就解决。最后实现对所选记录的修改,完成后更新原有的学生记录。(3)、查询某个学生的缺课情况,函数代码voidsearch(records*r){}模块中。达到查询结果按照日期升序排序,同一天内按照所缺课程的时间升序排序的目的,(4)、统计,函数代码为voidorder_c(){}和voidorder_s(){}的类模块中。其中实现对课程排序和对学生姓名的排序。三、用户手册使用时根据提示进行选择和输入操作,当输入有误时会出现“输入有误,重新输入!”。首先进入程序是会有提示输入下面序号,序号后面的文字代表选择某序号后的功能。1.显示所有学生的缺课记录2.录入学生的缺课信息记录3.查询某个学生的缺课情况4.修改某个学生的缺课记录5.删除某个学生的缺课记录6.统计某段时间内旷课情况7.退出系统四、调试及测试当用户执行程序时首先会出现如下界面也是主菜单界面:9当输入序号1时会出现所有学生记录:再选择y就会又回到主菜单界面,选n时就会退出。当在主菜单是选择序号2时就会出现如下界面:10按照提示进行输入,如果要继续输入则选择y,否则选n推出并会提示是否保存录入的内容。当在主菜单是选择序号3时会出现界面:11此时就要求输入查询的学生姓名,输入之后如果记录没有就会出现“没有查到该学生的缺课纪录”,如果有的话就会显示次学生的记录。当在主菜单是选择序号4时,就会提示输入需要修改的姓名,如果此学生有会出现:如果没有此学生就会出现:12同样在主菜单选择5时会出现:选择6时则会出现界面:13在统方式选1的话会出现上面的界面,选2的话界面如下:当选择7时:就会退出系统如果想再次使用就必须再次打开程序选择功能使用。14五、小结本次课程设计主要使用到了C++中的一些比较基本的算法,总体上感觉比之前做过的实验综合性比较强。在这里我主要总结一下我设计这个学生考勤管理系统的心得和在编译程序的过程中遇到的问题以及解决的办法。为了使得程序的编写更加有条理,阅读更加明了,在写每个模块的时候都将自己的思路写在每个函数的第一行,告诉自己(读者)我这个函数将要做的是什么事情。这是一个很好的编程规范,值得继续发扬。对于这次的程序的编写,花了不少时间,原因很可能是自己对C++的总体认知还不够,还有在上学期一个月对C++的学习知识量很有限,在编写调试的这个过程中很多新的语法知识都是在网上搜索的。当然错误自然是非常多的,比如bool型的,在网上看过了,感觉用的人比较多,也觉
本文标题:学生考勤管理系统课程设计报告
链接地址:https://www.777doc.com/doc-4105098 .html