资源描述
学生考勤管理系统报告2
———————————————————————————————— 作者:
———————————————————————————————— 日期:
2
个人收集整理 勿做商业用途
学生考勤管理系统
目录
1. 绪论 1
1。1 课题背景 1
1.2 课题目的和要求 1
1.3 课题意义 2
2. 系统分析 2
2。1 功能需求 2
2。2 数据需求 3
2。3性能需求 3
3。 总体设计 3
3。1功能模块设计 3
3.2系统设计方案 3
4。 详细设计 4
4。1建立学生缺课记录子模块 4
4。2修改学生缺课记录子模块 5
4.3修改学生缺课记录子模块 6
4。4查看单科旷课记录子模块 7
4。5查看学生旷课记录子模块 8
4.6载入学生旷课记录子模块 9
4.7储存学生旷课记录子模快 9
5。 调试与测试 10
5.1调试 10
5。2测试 11
6. 结论 11
结束语 11
参考文献 11
附录1-用户手册 12
附录2—源程序 17
摘要
20世纪末,随着计算机科学的发展,数据库技术在Internet中的应用越来越广泛,为广大网络用户提供了更加周到和人性化的服务。
学生考勤管理程序是信息管理系统的一个子系统,一个基于单机版的系统。因为随着计算机技术的不断进步与发展,计算机已经深入到人们日常生活的每个角落,例如:政府部门,企事业单位,学校等等。该系统开发功能主要包括:管理员可以通过计算机设置学生考勤管理程序,打印供学校及个人使用。
该程序是使用C语言编写的学生考勤统计程序.
关键词:考勤;姓名;缺课类型;课程名称。
1。 绪论
1。1 课题背景
程序实践是本科生重要教学环节之一。通过程序实践,强化学生的计算机应用技能,使学生验证、巩固和充实所学的理论知识, 加深对相关内容的理解,拓宽知识面,培养学生的创新精神和实践能力
学生考勤管理程序是学校管理工作中一个比较重要的任务,过多的学生考勤管理程序工作给学校管理人员带来了很大麻烦的。虽然原始的记录方法在一定的程度上可以解决问题,可是现在计算机已经走到了我们的生活,它的不足之处就显而易见了. 学生考勤管理程序,是一个对于学生考勤的管理系统, 不仅大大减少了考勤管理人员的大量的工作,而且还方便了班级和学校对学生出课率的查询,只要通计算机登入本系统就能及时修改、更正学生的考勤信息,使信息真实、有效。这样节省了大量人力物力,节省了宝贵的时间,大大提高了工作效率。用C语言进行了该系统的编写。操作上力争实现人性化、合理化,满足学校、老师、非计算机管理人员的使用和查看。
1.2 课题目的和要求
目的:要求实现——-“学生考勤管理程序”记录学生的缺课情况,它包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假及旷课)。
要求:
1.录入学生的缺课记录;
2.修改某个学生的缺课记录;
3.查询某个学生的缺课情况;
4.统计某段时间内,某门课旷课学生姓名及旷课次数,按旷课次数由多到少排序;
5.统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序。
1.3 课题意义
程序实践是本科生重要教学环节之一。通过程序实践,强化学生的计算机应用技能,使学生验证、巩固和充实所学的理论知识, 加深对相关内容的理解,拓宽知识面,培养学生的创新精神和实践能力
学生考勤管理程序可以大大减缓学生考勤人员的工作量, 方便了平时上课学生的出勤率的管理。
2。 系统分析
开发一个好的软件,进行深入细致的可行性研究是极其必要的,而且还必须做大量的,全面的需求分析,需求分析是软件定义时期的最后一个阶段,它更是开发一个好的软件的基础。它的基本任务是准确地回答“需要此软件的人都需要哪些功能?”这个问题。
需求分析的主要任务是确定系统必须完成哪些工作,也就是对目标系统提出完整的﹑准确的﹑具体的﹑清晰的要求,确定系统必须具有的功能和性能,系统要求的运行环境,以及预测系统发展的前景,并仔细分析系统中的数据,以便完善良好的软件环境.在需求分析阶段系统分析员将仔细研究软件所需要完成的具体功能.
2。1 功能需求
本系统主要是学校和老师对学生出课情况的统计系统。
该系统需要有建立,修改,查询,载入,储存,退出功能,利用查询功能分开查看某一门课程或者某一个学生的缺课记录,方便老师与学校统计。
2。2 数据需求
本系统主要涉及的数据有学生缺课信息.学生缺课信息包括缺课时间,学生姓名,课程名称,第几节,学生迟到次数,早退次数,请假次数,旷课次数。
2.3性能需求
要求系统具有可靠性,速度要快。
3。 总体设计
3。1功能模块设计
根据分析整个系统主要划分为7个功能模块,分别执行要求中的功能。数据管理中实现对学生的基本信息、课程的基本信息、学生缺课的查询、添加、删除和修改,以及具体缺课缺课内容,是迟到、早退、请假、旷课。查询管理通过根据学生姓名,课程姓名 时间段儿等信息,查询单个学生的缺课记录,单科课的旷课记录,单个学生的旷课记录.功能模块图如图1所示。、
图1功能模块图
3。2系统设计方案
此程序是过程性语言设计的。运用多种条件语句,主体采用的是链表指针。系统的设计采用了数组语句、选择语句和循环语句,在需要处理大量同类数据时,这样就使程序书写更加简洁。程序使用了布尔函数。选择语句多采用if多分支选择结构与switch语句。首先计算switch表达式,然后在caes子句中寻找值相等的常量表达式,并以此为入口符号,由此开始顺序执行.循环语句采用了for语句等、do-while语句,for语句用于已知循环次数的循环结构,括号中的三个量分别用来表示循环变量初值、循环终值和循环增量。do-while语句先循环后判断, Break语句在switch语句中,保证多分支情况的正确执行,在循环语句中,强制终止本层循环.保存和读取函数是典型的函数功能,一个程序是由若干个函数组成的,保存和读取函数是和其他函数互相调用的.
4. 详细设计
4.1建立学生缺课记录子模块
要建立的学生人数,学生基本信息(包括缺课时间、学生姓名、课程名称、第几节、迟到次数、早退次数、请假次数、旷课次数)可用creat()函数如图1。
图1
4。2修改学生缺课记录子模块
根据要修改的学生姓名以及科目名称找到相应的信息,再选择要修改的项目进行单项修改 如图2
图2
4.3修改学生缺课记录子模块
根据人名可以查出该学生的所有缺课记录 如图3
图3
4。4查看单科旷课记录子模块
根据学科名称和时间范围查出所有在该范围内旷课的学生以及次数 如图4
图4
4.5查看学生旷课记录子模块
根据要查询的学科名称及时间段查出在改时间段内该门课上旷课的人数 如图5
图5
4。6载入学生旷课记录子模块
可以载入实现储存在当前文件夹中txt文件中所储存的数据 如图6
图6
4。7储存学生旷课记录子模快
进入系统界面,顺序的完成各项操作,进行数据的输入,信息的保存调用相应的函数打开相应的地址,查询各项信息。如图7
图7
5. 调试与测试
5.1调试
(1)此程序是用VC程序编写,调试过程中在菜单中选择乍看学生旷课记录,程序不执行。因为没有加入选择的case语句.后在switch后加一个case就可以自动执行了。
5。2测试
(2)由于程序的源代码是在记事本文本中复制到VC中的,有些printf后比较长的语句会被放到下一行,使程序出现多处类似的错误,经过在VC中的修改,程序得以正常的运行
6。 结论
课程设计顺利完成,题目所要求的功能也都一一实现,可以对学生的缺课信息进行添加,修改,删除以及查询的显示。不过这个程序还有些不够完善,例如不能往当前文件夹中的txt文件中添加记录.
结束语
整个系统的设计过程对于我来说算是个学习、探索的过程,通过实践和对比别人开发程序的过程。在整个设计过程中,出现过很多的问题,很多繁琐的东西都需要反复的修改,主要是前期工作不彻底,对系统的需求分析的要求认识不够清楚,使得在后边的工作中不得不经常反复去修改。使我体会到设置中每一步的重要性。所以在分析一个问题时,我们需要站在一个有远见的高度。
通过此次设计,我不但对C语言编程有了更深刻的认识,积累了使用软件工程的思想来开发软件的经验,更重要的是学会了在对待问题时应该考虑到哪些方面和怎么解决问题.
虽然时间紧迫但我学会了很多,也感到自身知识的贫乏,希望在日后的努力中能做出更完善的系统。
参考文献
[1]
谭浩强.C语言程序设计(第三版).清华大学出版社
[2]
林碧英.C语言程序设计教程.中国电力出版社,2006
[3]
美赫伯特.希尔特,王子恢等译。C语言大全.电子工业出版社.2006
[4]
姜灵芝,余健。C语言课程设计案例精选.清华大学出版社,2008
附录1—用户手册
主菜单
图1 主菜单
1.建立学生缺课记录
图2建立学生缺课记录
2。修改学生缺课记录
图3修改学生缺课记录
3.查询学生缺课记录
图4查询学生缺课记录
4。查看单科旷课记录
图5查看单科旷课记录
5。查看学生旷课记录
图6查看学生旷课记录
6。储存学生旷课记录
图7储存学生旷课记录
7.载入学生旷课记录
图8载入学生旷课记录
8。 退出程序
图9退出程序
附录2—源程序
#include<stdio。h〉
#include〈malloc。h>
#include<string。h〉
#define NULL 0
#define LEN sizeof(struct student)
int student_num;
FILE *fp1;
struct xueke
{charunsigned char xueke_name[50];
int people_num;
};
struct xueke a[10];
struct student
{ charunsigned char name[50];
long time;
int lesson_time;
charunsigned char lesson_name[50];
int chidao_num;
int zaotui_num;
int qingjia_num;
int kuangke_num;
struct student *next;
};
void chaxun(struct student *head)
{ int i;
charunsigned char chaxun_name[50];
printf(cout<<"请输入要查询的人名【若没有这个人则不显示】:”)<<endl;
scanf(cin〉>"%s",chaxun_name);
struct student *p;
if(head==NULL)
printf(cout<〈"联系人为空"〈〈endl);
p=head;
for(i=0;i〈student_num;i++)
{if(strcmp(chaxun_name,p—〉name)==0)
printf(cout<<”缺课时间:%ld 学生姓名:%s 课程名称:%s 第%d节 迟到次数:%d 早退次数:%d 请假次数:%d 旷课次 数:%d\n",p—〉time,p-〉name,p—>lesson_name,p-〉lesson_time,p—〉chidao_num,p—〉zaotui_num,p—〉qingjia_num,p->kuangke_num〈<endl);
p=p—>next; }
}
struct student *xiugai(struct student *head)
{charunsigned char xiugai_name[50];
charunsigned char xiugai_xueke_name[50];
int k;
printf(cout<〈"请输入要修改的学生姓名与学科名称【格式:学生姓名(空格)学科名称】:”〈〈endl);
scanf(cin>>”%s%s”,xiugai_name,xiugai_xueke_name);
struct student *p1,*p2;
p2=(struct student *)malloc(LEN);
p1=head;
if(head==NULL)
{printf(cout<〈"没有学生信息\n”〈〈endl);
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(cout<〈"=======================================\n”<<endl);
printf(cout〈<" 1-修改缺课时间 \n”〈〈endl);
printf(cout<<” 2-修改学生姓名 \n”<〈endl);
printf(cout<<” 3-修改课程名称 \n"〈〈endl);
printf(cout〈〈" 4-修改第几节缺课 \n"<<endl);
printf(cout<<" 5—修改迟到次数 \n”〈<endl);
printf(cout〈<" 6—修改早退次数 \n"〈〈endl);
printf(cout〈<” 7-修改请假次数 \n”〈<endl);
printf(cout<〈” 8-修改旷课次数 \n"〈〈endl);
printf(cout〈<”=======================================\n"〈〈endl);
scanf(cin〉〉”%d",&k);
switch(k)
{case 1:
printf(cout〈〈”请输入新的缺课时间”〈〈endl);
scanf(cin>〉"%ld”,&p1—>time);
break;
case 2:
printf(cout<〈”请输入新的学生姓名"〈<endl);
scanf(cin>>”%s",p1—〉name);
break;
case 3:
printf(cout<<"请输入新的课程名称”〈〈endl);
scanf(cin〉〉"%s”,p1-〉lesson_name);;
break;
case 4:
printf(cout<〈"请输入新的第几节缺课”<<endl);
scanf(cin〉〉”%d",&p1-〉lesson_time);
break;
case 5:
printf(cout<<”请输入新的迟到次数"<<endl);
scanf(cin>〉"%d",&p1—〉chidao_num);
break;
case 6:
printf(cout〈<”请输入新的早退次数"〈〈endl);
scanf(cin〉〉"%d",&p1-〉zaotui_num);
break;
case 7:
printf(cout<〈"请输入新的请假次数”〈<endl);
scanf(cin>〉"%d",&p1-〉qingjia_num);
break;
case 8:
printf(cout<<"请输入新的旷课次数”<〈endl);
scanf(cin>〉”%d",&p1—>kuangke_num);
break; }
}
return(head);
}
struct student *creat()
{
int i,b;
struct student *head,*p1,*p2;
printf(cout〈<"请输入要建立资料的学生人数:”〈<endl);
scanf(cin>>"%d",&b);
head=p2=NULL;
p1=(struct student *)malloc(LEN);
printf(cout<<”【输入格式:缺课时间(空格)学生姓名(空格)课程名称(空格)第几节(空格)迟到次数(空格)早退次数(空格)请假次数(空格)旷课次数】\n"<〈endl);
printf(cout<〈”请输入第1名学生信息:" 〈<endl);
scanf(cin>〉”%ld%s%s%d%d%d%d%d”,&p1—〉time,p1—>name,p1->lesson_name,&p1-〉lesson_time,&p1->chidao_num,&p1—〉zaotui_num,&p1—>qingjia_num,&p1—>kuangke_num);
head=p1;
p2=p1;
student_num++;
for(i=1;i<b;i++)
{
p1=(struct student*)malloc(LEN);
printf(cout<<”请输入第%d名学生信息:”,i+1〈<endl);
scanf(cin〉>”%ld%s%s%d%d%d%d%d”,&p1—〉time,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)
printf(cout〈<”没有学生信息\n”<<endl);
while(p!=NULL)
{printf(cout<〈”缺课时间:%ld 学生姓名:%s 课程名称:%s 第%d节 迟到次数:%d 早退次数:%d 请假次数:%d 旷课次数:%d\n”,p—>time,p—>name,p—〉lesson_name,p—>lesson_time,p-〉chidao_num,p-〉zaotui_num,p->qingjia_num,p—〉kuangke_num〈〈endl);
p=p-〉next; }
}
struct student *tongji_lesson(struct student *head)
{ struct student *p1,*p2,*p3;
charunsigned char lesson[50];
long look_time1,look_time2;
int xunhuan_num=0;
p3=(struct student *)malloc(LEN);
if(head==NULL)
{printf(cout〈<"没有学生信息”<〈endl);
return(head); }
p1=head;
p2=p1—〉next;
while(xunhuan_num〈student_num)
{while(p2!=NULL)
{
if(p2—>kuangke_num>p1-〉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—>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_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_num++;
}
printf(cout<<"请输入要查看的学科名称:"〈<endl);
scanf(cin>>”%s”,lesson);
printf(cout〈<"请输入要查看的时间范围【输入格式:时间(空格)时间】"〈〈endl);
scanf(cin>〉"%ld%ld",&look_time1,&look_time2);
p1=head;
while(p1!=NULL)
{if(strcmp(lesson,p1-〉lesson_name)==0&&look_time1<=p1—〉time&&p1-〉time〈=look_time2)
printf(cout〈〈"学生姓名%s 旷课次数%d\n",p1—〉name,p1-〉kuangke_num〈<endl);
p1=p1-〉next; }
return(head);
}
struct student *tongji_student(struct student *head)
{
int n,i,j,zhongjian;
struct student *p1;
charunsigned char zhongjian_name[50];
long look_time1,look_time2;
if(head==NULL)
{printf(cout<〈"没有学生信息”〈<endl);
return(head); }
printf(cout<〈”请输入一共的学科数:"<〈endl);
scanf(cin>〉"%d”,&n);
for(i=0;i<n;i++)
{printf(cout<〈"请输入第%d个学科名称:",i+1<<endl);
scanf(cin>>"%s”,a[i]。xueke_name);
a[i].people_num=0; }
printf(cout〈〈”请输入要查看的时间范围由小到大【输入格式:时间(空格)时间】"<〈endl;);
scanf(cin〉>"%ld%ld",&look_time1,&look_time2);
p1=head;
for(i=0;i<n;i++)
{while(p1!=NULL && look_time1〈=p1-〉time && p1—>time<=look_time2)
{if(strcmp(a[i].xueke_name,p1—>lesson_name)==0)
a[i].people_num+=p1—>kuangke_num;
p1=p1—〉next; }
p1=head; }
for(j=0;j<n—1;j++)
for(i=0;i<n-1—j;i++)
{if(a[i]。people_num〈a[i+1]。people_num)
{ zhongjian=a[i+1]。people_num;
a[i+1]。people_num=a[i]。people_num;
a[i].people_num=zhongjian;
strcpy(zhongjian_name,a[i+1].xueke_name);
strcpy(a[i+1].xueke_name,a[i].xueke_name);
strcpy(a[i]。xueke_name,zhongjian_name); }
}
for(i=0;i〈n;i++)
{printf(cout〈<"学科名称%s 旷课人%d\n",a[i]。xueke_name,a[i]。people_num<<endl);
return(head);}
}
struct student *zairu()
{struct student *p1=NULL,*p2=NULL,*head=NULL;
struct student student_ziliao[100];
int i=0,n=0;
if((fp1=fopen("xueshengziliao。txt”,"rb+”))==NULL)
{ printf(cout<<"cannot open file\n”<<endl);
return(head); }
while(!feof(fp1))
{if(fread(&student_ziliao[i],LEN,1,fp1)!=1)
{if(feof(fp1))
{fclose(fp1);
break; }
printf(cout〈〈"file read error\n"〈<endl);}
i++;
}
n=i;
p1=p2=(struct student *)malloc(LEN);
head=p1;
for(i=0;i<n;i++)
{p1-〉chidao_num=student_ziliao[i].chidao_num;
p1-〉kuangke_num=student_ziliao[i].kuangke_num;
strcpy(p1—〉lesson_name,student_ziliao[i]。lesson_name);
p1->lesson_time=student_ziliao[i]。lesson_time;
strcpy(p1-〉name,student_ziliao[i].name);
p1—>qingjia_num=student_ziliao[i]。qingjia_num;
p1—〉time=student_ziliao[i]。time;
p1—>zaotui_num=student_ziliao[i]。zaotui_num;
p2-〉next=p1;
p2=p1;
p1=(struct 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(cout〈<”储存成功\n"<〈endl);
}
void main()
{
struct student *head;
int m;
do
{
printf(cout<<"***************************************************\n"〈<endl);
printf(cout〈<" 1_建立学生缺课记录\n”〈〈endl);
printf(cout<<" 2_修改学生缺课记录\n"〈<endl);
printf(cout〈〈" 3_查询学生缺课记录\n”<<endl);
printf(cout<〈” 4_查看单科旷课记录\n”<<endl);
printf(cout<<” 5_查看学生旷课记录\n"<<endl);
printf(cout<<” 6_载入学生旷课记录\n"<〈endl);
printf(cout<〈” 7_储存学生旷课记录\n");”<〈endl;
printf(cout〈<" 8_退出考勤管理程序\n”〈<endl);
printf(cout〈〈"***************************************************\n"<〈endl);
scanf(cin>>”%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日
30
- -
展开阅读全文