《学生考勤管理系统报告[1].doc》由会员分享,可在线阅读,更多相关《学生考勤管理系统报告[1].doc(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、学生考勤管理系统学生考勤管理系统目录1. 绪论11.1 课题背景11.2 课题目的和要求11.3 课题意义22. 系统分析22.1 功能需求22.2 数据需求32.3性能需求33. 总体设计33.1功能模块设计33.2系统设计方案34. 详细设计44.1建立学生缺课记录子模块44.2修改学生缺课记录子模块54.3修改学生缺课记录子模块64.4查看单科旷课记录子模块74.5查看学生旷课记录子模块84.6载入学生旷课记录子模块94.7储存学生旷课记录子模快95. 调试与测试105.1调试105.2测试116. 结论11结束语11参考文献11附录1用户手册12附录2源程序17摘要20世纪末,随着计算
2、机科学的发展,数据库技术在Internet中的应用越来越广泛,为广大网络用户提供了更加周到和人性化的服务。学生考勤管理程序是信息管理系统的一个子系统,一个基于单机版的系统。因为随着计算机技术的不断进步与发展,计算机已经深入到人们日常生活的每个角落,例如:政府部门,企事业单位,学校等等。该系统开发功能主要包括:管理员可以通过计算机设置学生考勤管理程序,打印供学校及个人使用。该程序是使用C语言编写的学生考勤统计程序。关键词:考勤;姓名;缺课类型;课程名称。1. 绪论1.1 课题背景程序实践是本科生重要教学环节之一。通过程序实践,强化学生的计算机应用技能,使学生验证、巩固和充实所学的理论知识, 加深
3、对相关内容的理解,拓宽知识面,培养学生的创新精神和实践能力学生考勤管理程序是学校管理工作中一个比较重要的任务,过多的学生考勤管理程序工作给学校管理人员带来了很大麻烦的。虽然原始的记录方法在一定的程度上可以解决问题,可是现在计算机已经走到了我们的生活,它的不足之处就显而易见了。 学生考勤管理程序,是一个对于学生考勤的管理系统, 不仅大大减少了考勤管理人员的大量的工作,而且还方便了班级和学校对学生出课率的查询,只要通计算机登入本系统就能及时修改、更正学生的考勤信息,使信息真实、有效。这样节省了大量人力物力,节省了宝贵的时间,大大提高了工作效率.用C语言进行了该系统的编写。操作上力争实现人性化、合理
4、化,满足学校、老师、非计算机管理人员的使用和查看。1.2 课题目的和要求目的:要求实现-“学生考勤管理程序”记录学生的缺课情况,它包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假及旷课)。要求: 1.录入学生的缺课记录;2修改某个学生的缺课记录;3查询某个学生的缺课情况;4统计某段时间内,某门课旷课学生姓名及旷课次数,按旷课次数由多到少排序; 5统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序。1.3 课题意义程序实践是本科生重要教学环节之一。通过程序实践,强化学生的计算机应用技能,使学生验证、巩固和充实所学的理论知识, 加深对相关内容的理解,拓宽知识
5、面,培养学生的创新精神和实践能力学生考勤管理程序可以大大减缓学生考勤人员的工作量, 方便了平时上课学生的出勤率的管理。2. 系统分析开发一个好的软件,进行深入细致的可行性研究是极其必要的,而且还必须做大量的,全面的需求分析,需求分析是软件定义时期的最后一个阶段,它更是开发一个好的软件的基础。它的基本任务是准确地回答“需要此软件的人都需要哪些功能?”这个问题。需求分析的主要任务是确定系统必须完成哪些工作,也就是对目标系统提出完整的准确的具体的清晰的要求,确定系统必须具有的功能和性能,系统要求的运行环境,以及预测系统发展的前景,并仔细分析系统中的数据,以便完善良好的软件环境。在需求分析阶段系统分析
6、员将仔细研究软件所需要完成的具体功能。2.1 功能需求本系统主要是学校和老师对学生出课情况的统计系统。该系统需要有建立,修改,查询,载入,储存,退出功能,利用查询功能分开查看某一门课程或者某一个学生的缺课记录,方便老师与学校统计。2.2 数据需求本系统主要涉及的数据有学生缺课信息。学生缺课信息包括缺课时间,学生姓名,课程名称,第几节,学生迟到次数,早退次数,请假次数,旷课次数。2.3性能需求 要求系统具有可靠性,速度要快。3. 总体设计3.1功能模块设计根据分析整个系统主要划分为7个功能模块,分别执行要求中的功能。数据管理中实现对学生的基本信息、课程的基本信息、学生缺课的查询、添加、删除和修改
7、,以及具体缺课缺课内容,是迟到、早退、请假、旷课。查询管理通过根据学生姓名,课程姓名 时间段儿等信息,查询单个学生的缺课记录,单科课的旷课记录,单个学生的旷课记录。功能模块图如图1所示。、图1功能模块图3.2系统设计方案 此程序是过程性语言设计的。运用多种条件语句,主体采用的是链表指针。系统的设计采用了数组语句、选择语句和循环语句,在需要处理大量同类数据时,这样就使程序书写更加简洁。程序使用了布尔函数。选择语句多采用if多分支选择结构与switch语句。首先计算switch表达式,然后在caes子句中寻找值相等的常量表达式,并以此为入口符号,由此开始顺序执行。循环语句采用了for语句等、do-
8、while语句,for语句用于已知循环次数的循环结构,括号中的三个量分别用来表示循环变量初值、循环终值和循环增量。do-while语句先循环后判断, Break语句在switch语句中,保证多分支情况的正确执行,在循环语句中,强制终止本层循环。保存和读取函数是典型的函数功能,一个程序是由若干个函数组成的,保存和读取函数是和其他函数互相调用的。 4. 详细设计4.1建立学生缺课记录子模块要建立的学生人数,学生基本信息(包括缺课时间、学生姓名、课程名称、第几节、迟到次数、早退次数、请假次数、旷课次数)可用creat()函数如图1. 图14.2修改学生缺课记录子模块根据要修改的学生姓名以及科目名称找
9、到相应的信息,再选择要修改的项目进行单项修改 如图2 图24.3修改学生缺课记录子模块根据人名可以查出该学生的所有缺课记录 如图3 图34.4查看单科旷课记录子模块根据学科名称和时间范围查出所有在该范围内旷课的学生以及次数 如图4 图44.5查看学生旷课记录子模块根据要查询的学科名称及时间段查出在改时间段内该门课上旷课的人数 如图5 图54.6载入学生旷课记录子模块可以载入实现储存在当前文件夹中txt文件中所储存的数据 如图6 图64.7储存学生旷课记录子模快进入系统界面,顺序的完成各项操作,进行数据的输入,信息的保存调用相应的函数打开相应的地址,查询各项信息。如图7 图75. 调试与测试5.
10、1调试(1)此程序是用VC程序编写,调试过程中在菜单中选择乍看学生旷课记录,程序不执行。因为没有加入选择的case语句。后在switch后加一个case就可以自动执行了。5.2测试(2)由于程序的源代码是在记事本文本中复制到VC中的,有些printf后比较长的语句会被放到下一行,使程序出现多处类似的错误,经过在VC中的修改,程序得以正常的运行6. 结论课程设计顺利完成,题目所要求的功能也都一一实现,可以对学生的缺课信息进行添加,修改,删除以及查询的显示。不过这个程序还有些不够完善,例如不能往当前文件夹中的txt文件中添加记录。结束语整个系统的设计过程对于我来说算是个学习、探索的过程,通过实践和
11、对比别人开发程序的过程。在整个设计过程中,出现过很多的问题,很多繁琐的东西都需要反复的修改,主要是前期工作不彻底,对系统的需求分析的要求认识不够清楚,使得在后边的工作中不得不经常反复去修改。使我体会到设置中每一步的重要性。所以在分析一个问题时,我们需要站在一个有远见的高度。通过此次设计,我不但对C语言编程有了更深刻的认识,积累了使用软件工程的思想来开发软件的经验,更重要的是学会了在对待问题时应该考虑到哪些方面和怎么解决问题。虽然时间紧迫但我学会了很多,也感到自身知识的贫乏,希望在日后的努力中能做出更完善的系统。参考文献1谭浩强.C语言程序设计(第三版).清华大学出版社2林碧英.C语言程序设计教
12、程.中国电力出版社,20063美赫伯特.希尔特,王子恢等译.C语言大全.电子工业出版社.20064姜灵芝,余健.C语言课程设计案例精选.清华大学出版社,2008附录1用户手册主菜单图1 主菜单1.建立学生缺课记录图2建立学生缺课记录2.修改学生缺课记录图3修改学生缺课记录3.查询学生缺课记录图4查询学生缺课记录4.查看单科旷课记录图5查看单科旷课记录5.查看学生旷课记录图6查看学生旷课记录6.储存学生旷课记录图7储存学生旷课记录7.载入学生旷课记录图8载入学生旷课记录8. 退出程序图9退出程序附录2源程序#include#include#include#define NULL 0#define
13、 LEN sizeof(struct student)int student_num;FILE *fp1;struct xuekechar xueke_name50;int people_num;struct xueke a10;struct studentchar name50;long time;int lesson_time;char lesson_name50;int chidao_num;int zaotui_num;int qingjia_num;int kuangke_num;struct student *next;void chaxun(struct student *hea
14、d)int i;char chaxun_name50;printf(请输入要查询的人名【若没有这个人则不显示】:); scanf(%s,chaxun_name);struct student *p;if(head=NULL)printf(联系人为空);p=head;for(i=0;iname)=0)printf(缺课时间:%ld 学生姓名:%s 课程名称:%s 第%d节 迟到次数:%d 早退次数:%d 请假次数:%d 旷课次 数:%dn,p-time,p-name,p-lesson_name,p-lesson_time,p-chidao_num,p-zaotui_num,p-qingjia_n
15、um,p-kuangke_num);p=p-next; struct student *xiugai(struct student *head)char xiugai_name50;char xiugai_xueke_name50;int k;printf(请输入要修改的学生姓名与学科名称【格式:学生姓名(空格)学科名称】:);scanf(%s%s,xiugai_name,xiugai_xueke_name);struct student *p1,*p2; p2=(struct student *)malloc(LEN);p1=head;if(head=NULL)printf(没有学生信息n)
16、;return(head); while(strcmp(xiugai_name,p1-name)!=0&(p1-next!=NULL)&strcmp(xiugai_xueke_name,p1-lesson_name)!=0)p1=p1-next; if(strcmp(xiugai_name,p1-name)=0&strcmp(xiugai_xueke_name,p1-lesson_name)=0)printf(=n);printf( 1-修改缺课时间 n);printf( 2-修改学生姓名 n);printf( 3-修改课程名称 n);printf( 4-修改第几节缺课 n);printf(
17、5-修改迟到次数 n);printf( 6-修改早退次数 n);printf( 7-修改请假次数 n);printf( 8-修改旷课次数 n);printf(=n);scanf(%d,&k);switch(k)case 1:printf(请输入新的缺课时间);scanf(%ld,&p1-time);break;case 2:printf(请输入新的学生姓名);scanf(%s,p1-name);break;case 3:printf(请输入新的课程名称);scanf(%s,p1-lesson_name);break;case 4:printf(请输入新的第几节缺课);scanf(%d,&p1-
18、lesson_time);break;case 5:printf(请输入新的迟到次数);scanf(%d,&p1-chidao_num);break;case 6:printf(请输入新的早退次数);scanf(%d,&p1-zaotui_num);break;case 7:printf(请输入新的请假次数);scanf(%d,&p1-qingjia_num);break;case 8:printf(请输入新的旷课次数);scanf(%d,&p1-kuangke_num);break; return(head);struct student *creat()int i,b;struct stu
19、dent *head,*p1,*p2; printf(请输入要建立资料的学生人数:);scanf(%d,&b);head=p2=NULL;p1=(struct student *)malloc(LEN);printf(【输入格式:缺课时间(空格)学生姓名(空格)课程名称(空格)第几节(空格)迟到次数(空格)早退次数(空格)请假次数(空格)旷课次数】n);printf(请输入第1名学生信息:);scanf(%ld%s%s%d%d%d%d%d,&p1-time,p1-name,p1-lesson_name,&p1-lesson_time,&p1-chidao_num,&p1-zaotui_num,
20、&p1-qingjia_num,&p1-kuangke_num);head=p1;p2=p1;student_num+;for(i=1;itime,p1-name,p1-lesson_name,&p1-lesson_time,&p1-chidao_num,&p1-zaotui_num,&p1-qingjia_num,&p1-kuangke_num);p2-next=p1;p2=p1;student_num+; p2-next=NULL; return(head);void print(struct student *head)struct student *p;p=head;if(p=NULL
21、)printf(没有学生信息n);while(p!=NULL)printf(缺课时间:%ld 学生姓名:%s 课程名称:%s 第%d节 迟到次数:%d 早退次数:%d 请假次数:%d 旷课次数:%dn,p-time,p-name,p-lesson_name,p-lesson_time,p-chidao_num,p-zaotui_num,p-qingjia_num,p-kuangke_num);p=p-next; struct student *tongji_lesson(struct student *head)struct student *p1,*p2,*p3;char lesson50;
22、long look_time1,look_time2;int xunhuan_num=0;p3=(struct student *)malloc(LEN);if(head=NULL)printf(没有学生信息);return(head); p1=head;p2=p1-next;while(xunhuan_numkuangke_nump1-kuangke_num)p3-chidao_num=p2-chidao_num;p3-kuangke_num=p2-kuangke_num;p3-qingjia_num=p2-qingjia_num;p3-zaotui_num=p2-zaotui_num;p3
23、-lesson_time=p2-lesson_time;p3-time=p2-time;strcpy(p3-lesson_name,p2-lesson_name);strcpy(p3-name,p2-name);p2-chidao_num=p1-chidao_num;p2-kuangke_num=p1-kuangke_num;p2-qingjia_num=p1-qingjia_num;p2-zaotui_num=p1-zaotui_num;p2-lesson_time=p1-lesson_time;p2-time=p1-time;strcpy(p2-lesson_name,p1-lesson_
24、name);strcpy(p2-name,p1-name);p1-chidao_num=p3-chidao_num;p1-kuangke_num=p3-kuangke_num;p1-qingjia_num=p3-qingjia_num;p1-zaotui_num=p3-zaotui_num;p1-lesson_time=p3-lesson_time;p1-time=p3-time;strcpy(p1-lesson_name,p3-lesson_name);strcpy(p1-name,p3-name);p1=p2;p2=p2-next;p1=head;p2=p1-next;xunhuan_nu
25、m+;printf(请输入要查看的学科名称:);scanf(%s,lesson);printf(请输入要查看的时间范围【输入格式:时间(空格)时间】);scanf(%ld%ld,&look_time1,&look_time2);p1=head;while(p1!=NULL)if(strcmp(lesson,p1-lesson_name)=0&look_time1time&p1-timename,p1-kuangke_num);p1=p1-next; return(head);struct student *tongji_student(struct student *head)int n,i,
26、j,zhongjian;struct student *p1;char zhongjian_name50;long look_time1,look_time2;if(head=NULL)printf(没有学生信息);return(head); printf(请输入一共的学科数:);scanf(%d,&n);for(i=0;in;i+)printf(请输入第%d个学科名称:,i+1);scanf(%s,ai.xueke_name);ai.people_num=0; printf(请输入要查看的时间范围由小到大【输入格式:时间(空格)时间】);scanf(%ld%ld,&look_time1,&l
27、ook_time2);p1=head;for(i=0;in;i+)while(p1!=NULL & look_time1time & p1-timelesson_name)=0)ai.people_num+=p1-kuangke_num;p1=p1-next; p1=head; for(j=0;jn-1;j+) for(i=0;in-1-j;i+)if(ai.people_numai+1.people_num)zhongjian=ai+1.people_num;ai+1.people_num=ai.people_num;ai.people_num=zhongjian;strcpy(zhongj
28、ian_name,ai+1.xueke_name);strcpy(ai+1.xueke_name,ai.xueke_name);strcpy(ai.xueke_name,zhongjian_name); for(i=0;in;i+)printf(学科名称%s 旷课人%dn,ai.xueke_name,ai.people_num);return(head);struct student *zairu()struct student *p1=NULL,*p2=NULL,*head=NULL;struct student student_ziliao100;int i=0,n=0;if(fp1=fo
29、pen(xueshengziliao.txt,rb+)=NULL) printf(cannot open filen);return(head); while(!feof(fp1)if(fread(&student_ziliaoi,LEN,1,fp1)!=1)if(feof(fp1)fclose(fp1); break; printf(file read errorn);i+;n=i;p1=p2=(struct student *)malloc(LEN);head=p1;for(i=0;ichidao_num=student_ziliaoi.chidao_num;p1-kuangke_num=
30、student_ziliaoi.kuangke_num;strcpy(p1-lesson_name,student_ziliaoi.lesson_name);p1-lesson_time=student_ziliaoi.lesson_time;strcpy(p1-name,student_ziliaoi.name);p1-qingjia_num=student_ziliaoi.qingjia_num;p1-time=student_ziliaoi.time;p1-zaotui_num=student_ziliaoi.zaotui_num;p2-next=p1;p2=p1;p1=(struct
31、student*)malloc(LEN); p2-next=NULL;return(head);void chucun(struct student *head)struct student *p1;p1=head;fp1=fopen(xueshengziliao.txt,wb+);while(p1!=NULL)fwrite(p1,LEN,1,fp1);p1=p1-next; fclose(fp1);printf(储存成功n);void main()struct student *head;int m;doprintf(*n);printf( 1_建立学生缺课记录n);printf( 2_修改
32、学生缺课记录n);printf( 3_查询学生缺课记录n);printf( 4_查看单科旷课记录n);printf( 5_查看学生旷课记录n);printf( 6_载入学生旷课记录n);printf( 7_储存学生旷课记录n);printf( 8_退出考勤管理程序n);printf(*n);scanf(%d,&m);switch(m)case 1:head=creat();print(head);break;case 2:head=xiugai(head);print(head);break;case 3:chaxun(head);break;case 4:head=tongji_lesson(head);break;case 5:head=tongji_student(head);break;case 6:head=zairu();print(head);break;case 7:chucun(head);break;while(m!=8); 完成日期:2010年7月15日 29- -