学号武汉科技大学城市学院课程设计报告课程名称数据结构课程设计题目学生考勤系统设计与实现学部信息工程学部专业软件工程班级2015级软件3班姓名指导教师林晓丽2016年6月25日编号013数据结构课程设计指导书设计题目:学生考勤系统的设计与实现一、目的与要求:1、目的:(1)通过课程设计加深对数据结构课程基本内容的理解,掌握数据结构与算法的设计方法,学会数据的组织方法和现实世界问题在计算机内部的表示方法;(2)初步掌握软件开发过程的问题分析、系统设计、程序编码等基本方法和技能,针对实际问题选择最佳的数据结构和算法;(3)培养学生应用数据结构处理各种实际问题的能力,能够很好的组织数据,并有效的节省解决问题的存储空间;(4)提高综合运用所学的理论知识和方法独立分析和解决问题的能力。2、基本要求:(1)要求利用C语言完成系统的设计;(2)选择合适的数据结构,并定义数据结构的结构体,程序要加必要的注释;(3)在系统设计中,要求运用数据结构的基本算法分模块实现系统功能;(4)学生要发挥自主学习的能力,按照课程设计的任务要求,按时完成系统的程序代码设计及课程设计报告,上机时带上源程序、数据结构教材、C语言教材。二、设计方法和基本原理:1、功能要求:考勤信息记录了学生的缺课情况,它包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假及旷课)。试设计一考勤管理系统,使之能提供以下功能:(1)录入学生的缺课记录;(2)修改某个学生的缺课记录;(3)查询某个学生的缺课情况;(4)统计某段时间内,旷课学生姓名及旷课次数,按旷课次数由多到少排序;(5)统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序。2、问题的解决方案:根据系统功能要求,可以将问题解决分为以下步骤:(1)分析系统需求,建立系统的功能模块设计;(2)自顶向下分析系统中各功能模块的逻辑结构;(3)根据模块顺序决定模块接口,即模块间的相互关系、模块之间的信息交换问题及界面的组织和设计;(4)详细设计确定每个模块内部的具体算法,包括输入、处理和输出;(5)完成系统各个函数的定义、函数调用及代码实现;(6)功能调试;三、程序设计和调试:四、课程设计报告:包括系统设计要求,设计思路,系统功能模块图,系统流程图,类的层次图(包括类成员列表),调试过程,关键程序代码,总结,参考文献。目录1需求分析....................................................................................11.1需求分析....................................................................................11.2功能需求描述............................................................................12概要设计....................................................................................12.1抽象数据类型定义....................................................................22.2模块结构....................................................................................22.3函数的详细调用处理流程........................................................33详细设计.....................................................................................33.1数据结构存储定义.................................................................183.2算法设计..................................................................................183.3界面设计.................................................................................183.3.1主界面..................................................................................183.3.2初始化..................................................................................194测试分析...................................................................................195小结..........................................................................................21参考文献......................................................................................2111需求分析1.1需求分析中国的学生数量庞大,学校众多,但配套的基础设施却并不完善,特别是数字化技术,计算机技术应用市场很大。该系统能很好的帮助学校进行学生考勤管理,优化学校行政办公水平。1.2功能需求描述学生考勤系统应包含各班学生的全部信息。每个学生是一条记录,包括姓名、性别、学号、日期、节次、出勤情况等信息。本系统可以模拟考勤过程、记录考勤结果,并能在课程结束后按照设定的考勤评分标准自动给出每个学生的考勤分数。2概要设计◎确定界面,使用户可选择操作项目(录入,修改,查询,评分)。◎录入功能:使用结构体,要求用户输入姓名、性别、学号、日期、节次、当前出勤情况等信息,并写入文件。◎修改功能:使用户输入学号,姓名其中一项可以修改考勤其信息。对于修改功能的实现,是先将所有文件内容读入到内存中,然后修改考勤值,最后再重新覆盖写入文件。◎查询模块:使用字符串比较函数,利用循环找到对应结构体数组元素,然后输出需要信息。对于查询功能的实现,同修改,是先将所有文件内容读入到内存中,然后查找到其中某项,最后输出到屏幕。2◎评分模块:系统根据总的应道考勤数按照百分制,求出每个学生的分数,并输出到屏幕。2.1抽象数据类型定义voidmain()//主函数voidinput();//录入数据函数voidchange();//修改数据函数voidsearch();//查询数据函数voidevaluate();//计算总评函数2.2模块结构开始输出界面文件分类录入1修改234查找打分停止结束32.3函数的详细调用处理流程3详细设计1.main()函数voidmain(){voidinput();//录入数据函数voidchange();//修改数据函数voidsearch();//查询数据函数voidevaluate();//计算总评函数charitem;system(color34);printf(★◇★□★◇★□★◇★□★◇★□★◇★□★\n);printf(●●\n);printf(◇学生考勤管理系统◇\n);printf(●开始输出界面switch(item)switch(item)switch(item)record()1amend()234search()goal()break结束4●\n);printf(◇◇\n);printf(●●\n);printf(★◇★□★◇★□★◇★□★◇★□★◇★□★\n);printf(●●\n);printf(◇1.学生信息及考勤情况录入◇\n);printf(●●\n);printf(◇2.学生信息及考勤情况修改◇\n);printf(●●\n);printf(◇3.学生信息及考勤情况查询◇\n);printf(◎◎\n);printf(●4.学生考勤总评分数查询●\n);printf(◇◇\n);printf(★◇★□★◇★□★◇★□★◇★□★◇★□★\n);//用户界面printf(\n);printf(请选择您需要的操作\n);scanf(%c,&item);switch(item){case'1':input();break;case'2':change();break;case'3':search();break;case'4':evaluate();break;}//实现功能选择}5流程图:2.input()函数voidinput(){inti,j=0,jx=1;printf(************************学生基本信息录入*****************************\n);if((fp=fopen(date.txt,w))==NULL){printf(文件打开失败\n);开始输出界面switch(item)switch(item)switch(item)record()1amend()234search()goal()break结束6exit(0);}for(i=0;jx==1;i++)//输入信息循环{for(;j==0;)//输入确认循环{getchar();printf(请输入第%d个学生的姓名,i+1);gets(stu[i].name);printf(请输入第%d个学生的学号,i+1);gets(stu[i].number);printf(请输入第%d个学生的性别(男:m女:f),i+1);stu[i].sex=getchar();printf(请输入第%d个学生的生日(格式:年月日),i+1);scanf(%d%d%d,&stu[i].year,&stu[i].month,&stu[i].day);printf(请输入第%d个学生的当前考勤次数,i+1);scanf(%d,&stu[i].kq);printf(您输入的信息为姓名%s学号%s性别%c生日%d年%d月%d日\n0重输1确认,stu[i].name,stu[i].number,stu[i].sex,stu[i].year,stu[i].month,stu[i].day);scanf(%d,&j);//输入确认}j=0;if(fwrite(&stu[i],sizeof(structstudent),1,fp)!=1)printf(文件写入错误\n);//写入文件printf(是否继续输入下一个学生信息0终止1继续\n);scanf(%d,&jx);//继续输入选择}fclose(fp);printf(0返回主菜单\n);getchar();a=getchar();getchar();if(a=='0')main();//返回主菜单}7流程图:3.change()函数voidchange(){inti=0,j=0,sway,t,x;charname[10],number[10];printf(**********************学生考勤修改**************************\n);if((fp=fopen(date.txt,r))==NULL)//将文件内容读入内存{printf(文件打开失败\n);exit(0);8}for(i=0;feof(fp)==0;i++)fread(&stu[i],sizeof(structstudent)