欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    毕业论文学生考勤管理系统的设计.doc

    • 资源ID:3972550       资源大小:294KB        全文页数:37页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    毕业论文学生考勤管理系统的设计.doc

    张家界航空工业职业技术学院毕 业 设 计 论 文学生考勤管理系统的设计学生姓名: 专 业:应用电子技术 班 级: 093331 负责教师: 龙治红 2012 年 5 月一、学生考勤打卡机分析.3二、系统的主要功能.3三、流程图.4四、数据结构设计.4-7五、类设计.7六、主要算法设计.8-9七、主要代码.9-21八、AT89S52单片机简介.22-31九、调试.32-34十、总结.35一、学生考勤打卡机分析1.1需求分析功能需求: 1、录入学生的缺勤记录; 2、修改某个学生的缺勤记录; 3、查询某个学生的缺勤情况; 4、统计某段时间内,缺勤学生学号及缺勤次数,按缺勤权值统计学生的负分值,并能进行排序; 5、统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序;  6、系统以菜单方式工作数据需求 本系统主要涉及的数据有学生缺课信息类和有关信息排序类。学生缺课信息包括缺课时间,学生姓名,课程名称,第几节,学生迟到次数,早退次数,请假次数,旷课次数。有关信息排序类包括对课程排序和对姓名排序。性能需求 要求系统具有可靠性,速度要快二、系统的主要功能 (1)、录入学生的缺课记录,函数代码void input(records *r)模块中。首先提示用户按照正确的格式进行学生缺课记录的录入,这个步骤比较简单,只需要不断地将记录的每个数据项存入结构体对应的成员中。 (2)、修改某个学生的缺课记录,函数代码void edt(records *r)模块中。首先必须查找到你所需要修改的那位的学生全部缺课记录。这个模块不需要定义新的结构体。在修改前当然要检查记录是否为空了,不为空的话,可以设置下面这五个菜单供用户选择:1、缺课日期2、第几节课3、课程名称4、学生姓名5、缺课类型6、退出修改程序并返回系统主菜单。修改很简单,仅需要对该学生的某个部分进行替换即可。采用switch语句很快就解决。最后实现对所选记录的修改,完成后更新原有的学生记录。 (3)、查询某个学生的缺课情况,函数代码void search(records *r)模块中。达到查询结果按照日期升序排序,同一天内按照所缺课程的时间升序排序的目的, (4)、统计,函数代码为void order_c()和void order_s()的类模块中。其中实现对课程排序和对学生姓名的排序。三、流程图学生考勤系统结构图:基类的数据成员和成员描述 recordString date,cname,sname;int cno,type;void set();string tostr();类名/函数名描述 类名/函数名描述record 基类edt()修改学生信息records实现学生旷课情况排序的类del()删除学生信息wt/rd()实现对文件的输入和输出search()查找学生信息input()录入学生的缺课记录search_s()一定范围查找学生信息edt()修改学生信息main()主函数四、数据结构设计 此程序运用多种条件语句,主体采用的是动态数组、指针。系统的设计采用了数组语句、选择语句和循环语句,在需要处理大量同类数据时,这样就使程序书写更加简洁。程序使用了布尔函数。选择语句多采用if多分支选择结构与switch语句。首先计算switch表达式,然后在caes子句中寻找值相等的常量表达式,并以此为入口符号,由此开始顺序执行。循环语句采用了for语句等、do-while语句,for语句用于已知循环次数的循环结构,括号中的三个量分别用来表示循环变量初值、循环终值和循环增量。do-while语句先循环后判断, Break语句在switch语句中,保证多分支情况的正确执行,在循环语句中,强制终止本层循环。保存和读取函数是典型的函数功能,一个程序是由若干个函数组成的,保存和读取函数是和其他函数互相调用的再有使用有关类的设计,学生缺课信息类和有关信息排序类,如下:class record /学生缺课信息类public:void set(string d,int cno,string c,string s,int type)date.assign(d);/日期cname.assign(c);/课程名字sname.assign(s);/学生姓名this->cno=cno;/对缺课类型的选择 为int型this->type=type;/缺课类型void set(record re)date.assign(re.date);cname.assign(ame);sname.assign(re.sname);this->cno=o;this->type=re.type;string date,cname,sname;int cno,type;class records /实现学生旷课情况排序的类public:records() /构造函数r=new record100;n=0;void order_s() /姓名的排序int i; int j;string *s=new stringn;int *c=new int n;s0.assign(r0.sname);c0=1;int k=1,flag;for( i=1;i<n;i+)flag=0;for( j=0;j<k;j+)if(ri.sname=sj)cj+;flag=1;break;if(!flag)sk=ri.sname;ck+=1;for(i=1;i<k;i+)for( j=i;j>0;j-)if(cj>cj-1)int tmp=cj;cj=cj-1;cj-1=tmp;string stmp=sj;sj=sj-1;sj-1=stmp;cout<<"旷课学生姓名t旷课次数"<<endl;for(i=0;i<k;i+)cout<<si<<"tt"<<ci<<endl;void order_c() /课程排序int i,j;string *s=new stringn;int *c=new int n;s0.assign(r0.cname);c0=1;int k=1,flag;for( i=1;i<n;i+)flag=0;for(j=0;j<k;j+)if(ri.cname=sj)cj+;flag=1;break;if(!flag)sk=ri.cname;ck+=1;for(i=1;i<k;i+)for( j=i;j>0;j-)if(cj>cj-1)int tmp=cj;cj=cj-1;cj-1=tmp;string stmp=sj;sj=sj-1;sj-1=stmp;cout<<"课程名t旷课人次"<<endl;for(i=0;i<k;i+)cout<<si<<"t"<<ci<<endl;record *r;int n; 五、类设计系统中主要涉及了两个类: 一个是class record /关于学生考勤基本信息类 另一个是class records/实现学生旷课情况排序的类六、主要算法设计 关键算法:旷课情况的排序:class records/实现学生旷课情况排序的类public:records() /构造函数r=new record100;n=0;旷课记录的修改:cout<<"请输入要修改缺课记录的学生姓名: "<<flush;string t1,t3,t4;char tmp30;int t2,t5,flag=0;cin>>tmp;t1.assign(tmp);for(i=0;i<r->n;i+)if(r->ri.sname=t1)flag=7;break;if(!flag)cout<<"查无此学生!"<<endl;return;t1=r->ri.date;t2=r->ri.cno;t3=r->ri.cname;t4=r->ri.sname;t5=r->ri.type;旷课项目的修改! cout<<"请输入要修改的项目:n(1.缺课日期 2.缺课节次 3.缺课名称 4.学生姓名 5.缺课类型 6.全部) "<<flush;e0:cin>>flag;switch(flag)case 1:goto e1;case 2:goto e2;case 3:goto e3;case 4:goto e4;case 5:goto e5;case 6:goto e1;default:goto e0; 用到的知识点有:函数的作用域、函数的调用、数组赋值、函数循环、以及类的定义,另外还用到了for函数、getch函数、switch函数、case函数、default函数等等。七、主要代码第一部分:学生考勤管理系统#include "stdlib.h"#include "hanshushixian.h"#include "record.h"#include <string>#include <iostream>#include <iomanip>#include <fstream>using namespace std;#include "record.h"int main()c1: /主菜单实现 system("cls"); cout<<" *"<<endl; cout<<" * 欢迎访问学生考勤管理系统 *"<<endl; cout<<" *"<<endl; cout<<" * 系统主菜单: 1.显示所有学生的缺课记录 *"<<endl;cout<<" * 2.录入学生的缺课信息记录 *"<<endl; cout<<" * 3.查询某个学生的缺课情况 *"<<endl; cout<<" * 4.修改某个学生的缺课记录 *"<<endl; cout<<" * 5.删除某个学生的缺课记录 *"<<endl; cout<<" * 6.统计某段时间内旷课情况 *"<<endl; cout<<" * 7. 退出系统 *"<<endl; cout<<" *"<<endl; cout<<"O(_)O 请选择你所需要的操作 O(_)O: "<<flush;int chose;c2:cin>>chose;if(chose=7)exit(0);records *r=new records();rd(r);switch(chose)case 1:pri(r);break;case 2:input(r);break;case 3:search(r);break;case 4:edt(r);break;case 5:del(r);break;case 6:search_s(r);break;default:goto c2;cout<<"是否返回主菜单? (y/n)你的选择: "<<flush;char yn;c3:cin>>yn;if(yn='y')goto c1;else if(yn='n')exit(0);else goto c3;return 0;第二部分:record.h (类的设计部分)#include <iostream>#include <string>using namespace std;#ifndef record_class#define record_classclass record /关于学生考勤基本信息类public:void set(string d,int cno,string c,string s,int type)date.assign(d);cname.assign(c);sname.assign(s);this->cno=cno;this->type=type;void set(record & re)date.assign(re.date);/assign可以避免不必要的内存分配,可以提高效率cname.assign(ame);sname.assign(re.sname);this->cno=o;this->type=re.type;string tostr()string s;char tmp3;s.assign(date);itoa(cno,tmp,10);s.append("#");s.append(tmp);/直接添加另一个完整的字符串s.append("#");s.append(cname);s.append("#");s.append(sname);itoa(type,tmp,10);s.append("#");s.append(tmp);return s;string date;string cname;string sname;int cno;int type;#endif record_class#ifndef records_class#define records_classclass records/实现学生旷课情况排序的类public:records() /构造函数r=new record100;n=0;void order_s() /姓名的排序int i; int j;string *s=new stringn;int *c=new int n;s0.assign(r0.sname);c0=1;int k=1,flag;for( i=1;i<n;i+)flag=0;for( j=0;j<k;j+)if(ri.sname=sj)cj+;flag=1;break;if(!flag)sk=ri.sname;ck+=1;for(i=1;i<k;i+)for( j=i;j>0;j-)if(cj>cj-1)int tmp=cj;cj=cj-1;cj-1=tmp;string stmp=sj;sj=sj-1;sj-1=stmp;cout<<"旷课学生姓名t旷课次数"<<endl;for(i=0;i<k;i+)cout<<si<<"tt"<<ci<<endl;void order_c() /课程排序int i,j;string *s=new stringn;int *c=new int n;s0.assign(r0.cname);c0=1;int k=1,flag;for( i=1;i<n;i+)flag=0;for(j=0;j<k;j+)if(ri.cname=sj)cj+;flag=1;break;if(!flag)sk=ri.cname;ck+=1;for(i=1;i<k;i+)for( j=i;j>0;j-)if(cj>cj-1)int tmp=cj;cj=cj-1;cj-1=tmp;string stmp=sj;sj=sj-1;sj-1=stmp;cout<<"课程名t旷课人次"<<endl;for(i=0;i<k;i+)cout<<si<<"t"<<ci<<endl;record *r;int n;#endif records_class第三部分:hanshushixian.h (功能子函数的实现部分)#include "record.h"#include <string>#include <iostream>#include <fstream>#include "stdlib.h"#include <iomanip>using namespace std;void wt(records *r)/实现对文件的输出ofstream outf("data.txt");for(int i=0;i<r->n;i+)outf<<r->ri.tostr()<<endl;outf<<"!"<<endl;void rd(records *r)/实现对文件的输入ifstream inf("data.txt");if(inf.eof()cout<<"记录为空!"<<endl;return;string t1,t3,t4;char tmp30;int t2,t5;r->n=0;while(true)inf.getline(tmp,10,'#');if(tmp0='!')break;t1.assign(tmp);inf.getline(tmp,3,'#');t2=atoi(tmp);inf.getline(tmp,30,'#');t3.assign(tmp);inf.getline(tmp,30,'#');t4.assign(tmp);inf.getline(tmp,3);t5=atoi(tmp);r->rr->n+.set(t1,t2,t3,t4,t5);bool timechk(string t1)int year=atoi(t1.substr(0,2).c_str();int month=atoi(t1.substr(2,2).c_str();int day=atoi(t1.substr(4,2).c_str();if(!(t1.length()=6&&year>0&&year<99&&month>0&&month<13&&day>0&&day<32)cout<<"日期录入有误! 请重新录入: "<<endl;return false;else return true;void input(records *r)/录入学生的缺课记录string t1,t3,t4;int t2,t5,flag=0;char yn;cout<<"录入一条学生缺课记录:"<<endl;/endl表示终止一行并刷新缓冲区m1:cout<<"请输入缺课日期: (例如110627) "<<flush;/flush表示刷新缓冲区cin>>t1;if(!(timechk(t1)goto m1;m2:cout<<"请输入缺第几节课: "<<flush;cin>>t2;if(t2<1|t2>10)cout<<"节次录入有误! 请重新录入: "<<endl;goto m2;cout<<"请输入缺课名称: "<<flush;cin>>t3;cout<<"请输入缺课学生姓名: "<<flush;cin>>t4;m3:cout<<"请输入缺课类型: (1.迟到 2.早退 3.请假 4.旷课) "<<flush;cin>>t5;if(t5<1|t5>4)cout<<"类型输入有误! 请重新录入: "<<endl;goto m3;for(int i=0;i<r->n;i+)if(r->ri.date=t1&&r->ri.cno=t2&&r->ri.cname=t3&&r->ri.sname=t4&&r->ri.type=t5)cout<<"该条记录已存在,是否添加为新记录? (y/n) "<<flush;n1:cin>>yn;if(yn='y')break;else if(yn='n')goto n2;else goto n1;r->rr->n+.set(t1,t2,t3,t4,t5);n2:cout<<"是否继续输入? (y/n) "<<flush;n3:cin>>yn;if(yn='y')goto m1;else if(yn='n')cout<<"保存修改? (y/n) "<<flush;cin>>yn;if(yn='y')wt(r);else return;else goto n3;void prione(record r)cout<<r.date<<"tt"<<o<<"t"<<ame<<"tt"<<r.sname<<"tt"<<flush;switch(r.type)case 1:cout<<"迟到"<<endl;break;case 2:cout<<"早退"<<endl;break;case 3:cout<<"请假"<<endl;break;case 4:cout<<"旷课"<<endl;break;default:;void pri(records *r)/修改学生信息if(r->n=0)cout<<"记录为空!"<<endl;return;cout<<"n序号t缺课日期 节次t课程名称t学生姓名t缺课类型"<<endl;for(int i=0;i<r->n;i+)cout<<i<<"t"<<flush;prione(r->ri);void edt(records *r)/修改学生信息int i;if(r->n=0)cout<<"记录为空!"<<endl;return;cout<<"请输入要修改缺课记录的学生姓名: "<<flush;string t1,t3,t4;char tmp30;int t2,t5,flag=0;cin>>tmp;t1.assign(tmp);for(i=0;i<r->n;i+)if(r->ri.sname=t1)flag=7;break;if(!flag)cout<<"查无此学生!"<<endl;return;t1=r->ri.date;t2=r->ri.cno;t3=r->ri.cname;t4=r->ri.sname;t5=r->ri.type;cout<<"请输入要修改的项目:n(1.缺课日期 2.缺课节次 3.缺课名称 4.学生姓名 5.缺课类型 6.全部) "<<flush;e0:cin>>flag;switch(flag)case 1:goto e1;case 2:goto e2;case 3:goto e3;case 4:goto e4;case 5:goto e5;case 6:goto e1;default:goto e0;e1:cout<<"请输入缺课日期: (例如080612) "<<flush;cin>>t1;if(flag!=6)goto e6;e2:cout<<"请输入缺第几节课: "<<flush;cin>>t2;if(flag!=6)goto e6;e3:cout<<"请输入缺课名称: "<<flush;cin>>t3;if(flag!=6)goto e6;e4:cout<<"请输入缺课学生姓名: "<<flush;cin>>t4;if(flag!=6)goto e6;e5:cout<<"请输入缺课类型: (1.迟到 2.早退 3.请假 4.旷课) "<<flush;cin>>t5;e6:r->ri.set(t1,t2,t3,t4,t5);char yn;cout<<"保存修改? (y/n) "<<flush;cin>>yn;if(yn='y')wt(r);else return;void del(records *r)/删除学生信息if(r->n=0)cout<<"记录为空!"<<endl;return;cout<<"请输入要删除的记录的序号: (输入-1删除全部) "<<flush;int flag;cin>>flag;.if(flag>r->n-1&&flag<-1)cout<<"不存在所要删除的记录!"<<endl;return;else if(flag=-1)r->n=0;elsefor(int i=flag;i<r->n-1;i+)r->ri.set(r->ri+1);r->n-;char yn;cout<<"保存修改? (y/n) "<<flush;cin>>yn;if(yn='y')wt(r);else return;void search(records *r)/查找学生信息if(r->n=0)cout<<"记录为空!"<<endl;return;cout<<"请输入要查询的学生姓名: "<<flush;string str;int j=0,flag=0;cin>>str;for(int i=0;i<r->n;i+)if(r->ri.sname=str)if(!flag)cout<<"n序号t缺课日期 节次t课程名称t学生姓名t缺课类型"<<endl;cout<<j+<<"t"<<flush;prione(r->ri);flag=1;if(!flag)cout<<"没有查到该学生的缺课记录!"<<endl;void search_s(records *r)/一定范围查找学生信息int i;if(r->n=0)cout<<"记录为空!"<<endl;return;records *r1=new records();g1:cout<<"请输入要检索的时间范围: (例如110610-110612) "<<flush;string tmp,ld,hd;cin>>tmp;ld.assign(tmp.substr(0,6);hd.assign(tmp.substr(7,6);if(!timechk(ld)|!timechk(hd)goto g1;for(i=0;i<r->n;i+)if(r->ripare(ld)>=0&&r->ripare(hd)<=0&&r->ri.type=4)r1->rr1->n+.set(r->ri);cout<<"请选择统计方式: (1.学生旷课情况降序显示 2.课程旷课情况降序显示)"<<flush;g2:cin>>i;switch(i)case 1:cout<<"n在"<<ld<<"到"<<hd<<"期间学生旷课情况如下:"<<endl;r1->order_s();break;case 2:cout<<"n在"<<ld<<"到"<<hd<<"期间课程旷课情况如下:"<<endl;r1->order_c();break;default:goto g2;单片机是考勤打卡机的核心部分,在单片机的控制下,外部硬件电路实现其各个功能,通过K4射频模块实现对ID卡的识别与读取,外部硬件电路还包括存储器模块、显示模块、时钟模块、串口通讯模块等。本章着重介绍AT89S52单片机的相关知识、各模块电路的设计等。八、AT89S52单片机简介AT89S52单片机的主要性能:l 8k可反复擦写(>1000次)ISP Flash ROMl 4

    注意事项

    本文(毕业论文学生考勤管理系统的设计.doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开