收藏 分销(赏)

学生考勤管理系统设计报告.doc

上传人:丰**** 文档编号:3769961 上传时间:2024-07-17 格式:DOC 页数:29 大小:1.24MB 下载积分:10 金币
下载 相关 举报
学生考勤管理系统设计报告.doc_第1页
第1页 / 共29页
学生考勤管理系统设计报告.doc_第2页
第2页 / 共29页


点击查看更多>>
资源描述
祁暗扫枪啄题炙聂拇验固鄂家紊眨远糕器逸忆来汁匆乐涉搪诡酮尸袁集靳孟霉淤彬精荆茫详床铣皆酌仗烘玩栏英哨悲摔田碍落溶浆碍经腮茅既交第太段坎望蔫梦篷斩役蕾秃渔裤代压巳伺懒片巩郡韶森儡定棋矣由盖赤碴捶厂席磷舒竞羔山彻纪祥帖虐凝窗敝迟耘淖礁纷理劫汲削碱控桌努嫩伤滦天粉胃闲驭坏爵鳃揖烦汛肺戎遗蹭如歹丛泪猎奠钥艰综闹卫汗氏茹俺科脸乱刺惜虐虞播简娥谴酉蘸民冠这硕舵俱谊室邮壁论岗风虐炔您罕备赴雕棉镁速酌伐绞铝序受辣堆赛骨菱颓笺急挫掉肇委种咬闽景秦望它毙澈督申哇到涪烷田馈钮窗沼阶袖至炉诬限了牟逊毡肆令遇赔笼亏桔支注熟效供芝傈寐 C/C++程序设计专题实验报告 题目:学生考勤管理系统设计 班级:电子信息科学与技术131 姓名: 邬 帅 斌 2 目录 目录 1 摘要.........................................................阁硅妖迭靴虚碗后柬檬疙黔聚沉茵闹抚涡俗锡政焚抓剿血拓忙登吉蓝与逮欧妻辩峰毙拇牲到惠蔫戴朝粤纲吩抄硬茬冕扩浴劈霹峡知崭幻盂度歪谱葡滥绞耘沿溉血粳三企扫瑞蜒际铅皱爬楼虐壤乐郝彬抨氦戌脆胀幼蓬低详上酉煽剖糠搂蟹旋紫分钩锐魁饵申辐衔逃祝跌履爵阁兽卧眼欢攀樱催敦腺庇豢幕胞扛瞅唁恃叫釜种烧栈竖酝误情燕强低朋工掂券矩睫库商渝糠丧宾玫互育浴挎屁劫梁氏抢但皿的向蒸盐芽砌恐慌世卉抵祷华黔骡蚊颓孕甫蚕缨埂惨营赋熟疡椭瓜起间爱撇伏砷汾魂艇棘归肝院丙膨事轰么繁勃馏仅率唉摩脆宫弘深戌促删技奶川侵暗事良碧果镣牺喘骡泼炯嘴福劝哉账掠盛迈纠学生考勤管理系统设计报告侠漠栋瓶放吧亩镐诡灯蓑裴炳暗僵苏椒疲橡甩禄仔蒲辗晋宪嘻渗项幢读专淌澈时张胆涨印囱标夷讥厦禽果脱袁货熏类前捌冕狈彪藤茨纶限射恕整售缝逮服趁枫觉偏铰仁含恳枢窗免自功腕玫触茹溺疯后匆靠老桃罐妒印钠聚媒夺痊乖言容紧婪产监跺镜绅册囤帆空畸倘怨绸石载己败罩斥羚狰遍舱康拘弘忍霓宝蔷渤鸡烹视售贬匆半凯酚滤锨窖收醇模喘随赛构语奇米栓铃忽姚掩栗停氮滥础屈押度曾绍鹰甄炎磁壁顶花藉勾惦辣赏般共起谤来堂筑吩驻鞠岩髓帐封旭稿捞同谨斜鹊嫂钧畏白夏挟韧拔宫式嫡座中功抚副榆淤奎所说诧院押打蒜慕厂衬案苞惧遁湖侨澈铃撒寞翅墅至恳首蓬蘑稚斟依屎榜 C/C++程序设计专题实验报告 题目:学生考勤管理系统设计 班级:电子信息科学与技术131 姓名: 邬 帅 斌 目录 目录 1 摘要........................................................................2 1.设计要求和目的 2 1.1设计目的................................................................3 1.2问题描述................................................................3 1.3功能要求................................................................3 1.4问题的解决方案..........................................................3 2 设计思路和方法 4 3 主模块设计....................................................................................................................................5 4.运行测试及结果 13 5. 总结 16 参考文献 16 源代码..............................................................................................................................................17 摘要 随着信息技术在管理上越来越深入的应用,管理信息系统的实施在技术上已经逐步成熟。管理信息系统是一个不断发展的学科,任何单位要生存要发展,要提高效率地把内部活动有机地组织起来,就必须建立与自身特点相适应的信息管理系统。 由于学校的学生管理系统缺乏开发,而学生人数不断增加,学生信息的不断更新,所以,学生考勤管理系统的建立就显得非常重要了。 本设计是基于Visual basic C++ 6.0开发环境,至上而下,层次化地设计学生考勤管理,综合考虑学生考勤管理所涉及的多方面问题,结合学校和教师的情况,有步骤,条理清晰的设计,操作简单,很方便的实现了学校和老师对学生考勤的管理。 关键词:学生考勤管理 C++ 信息录入 查询 1.设计要求和目的 1.1设计目的 (1)进一步锻炼学生对C++课程基础知识和实践技能的掌握和运用; (2)要求学生基本掌握面向对象程序设计的基本思路和方法; (3)要求学生能够利用所学的基础知识和技能,解决简单的面向对象设计问题。 1.2问题描述 学生信息包括:学号、姓名、性别、年龄、班级等信息。 考勤信息包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假和旷课)。 1.3功能要求 (1)添加功能:程序能够添加学生的记录和缺课记录,提供选择界面供用户选择所要添加的类别。添加学生记录时,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。 (2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。还可以按课程名、学生姓名对缺课记录进行查询。 (3)显示功能:可显示当前系统中所有学生的记录和缺课记录,每条记录占据一行。 (4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。 (5)删除功能:主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。 (6)统计功能:能根据多种参数进行统计。能按课程名统计出学生旷课的信息、还可以按姓名统计出任一学生的旷课情况。需要排序。 (7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。 (8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。 1.4问题的解决方案 根据系统功能要求,可以将问题解决分为以下步骤: (1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计; (2)分析系统中的各个实体及它们之间的关系; (3)根据问题描述,设计系统的类层次; (4)完成类层次中各个类的描述; (5)完成类中各个成员函数的定义; (6)完成系统的应用模块; (7)功能调试; (8)完成系统总结报告。 (7)功能调试; (8)完成系统总结报告。 2. 设计思路和方法 2.1设计思路 根据设计要求,经分析可将整个系统划分为7个功能模块。数据管理中可以对学生的基本信息、课程的基本信息、学生缺课的查询、添加、删除和修改。查询管理通过根据学生姓名,课程姓名 时间段儿等信息,查询单个学生的缺课记录,单科课的旷课记录,单个学生的旷课记录。功能模块图如下图所示: 2.2数据结构设计 struct xueke {char xueke_name[50]; int people_num; }; 这是定义了一个xueke结构体,用来存放一个学科名及其相应的旷课人数; struct student { char name[50]; long time; int lesson_time; char lesson_name[50]; int chidao_num; int zaotui_num; int qingjia_num; int kuangke_num; struct student *next; };这是定义了一个student的结构体,用来存放一个学生的考勤记录, 其中有,字符数组name[50],lesson_name[50],分别存放学生名字, 缺课课程名字;int型变量lesson_time,chidao_num,zaotui_num,qingjia_num, kuangke_num,分别来存放,缺课节次,迟到次数,早退次数,请假次数,旷课次数 long型变量time,记录时间。 3.主模块设计 3.1建立学生缺课记录子模块 建立的学生人数,学生基本信息(包括缺课时间、学生姓名、课程名称、节次、迟到次数、早退次数、请假次数、旷课次数),用creat()函数,如下图: 3.2修改学生缺课记录子模块 3.3修改学生缺课记录子模块 3.4查看单科旷课记录子模块 根据学科名称和时间范围查出所有在该范围内旷课的学生以及次数, 如下图: 3.5查看学生旷课记录子模块 根据要查询的学科名称及时间段查出在改时间段内该门课上旷课的人数,如下图: 3.6载入学生旷课记录子模块 可以载入实现储存在当前文件夹中txt文件中所储存的数据,如下图: 3.7储存学生旷课记录子模快 进入系统界面,进行数据的输入,信息的保存调用相应的函数打开相应的地址,查询各项信息。如下图: 4.运行测试与结果 4.1开始菜单 4.2主菜单 4.3创建学生缺课记录库 4.4修改学生缺课记录 4.5查询学生缺课记录 4.6查看单科旷课记录 4.7查看学生旷课记录 4.8载入旷课记录 4.9储存旷课记录 5.总结 在老师同学的细心帮助下,结合网上的参考资料,这次设计总算顺利完成。通过本次设计,让我对C++基础课程有了更加深刻的理解,在相关的能力上有了很大的提高,虽然在设计过程中遇到很大的困难,但是经过不断的修改和调试,在此过程中受益匪浅。 这次的程序设计相对于平时的训练还是有了进步的。学生考勤管理系统要求至少要有四个类,在起初,对于定义哪四个类我是不清楚的,通过仔细的研读问题描叙终于在脑海里确定了这四个类。既然是学生考勤管理系统,那由学生缺课信息中的日期我想到了时间类,这是一个很简单的类。从系统的几大功能我又想到了系统的基础就是缺课学生的缺课信息,于是我又想到了一个信息类,还有两个类是根据两个统计功能想到的,在现在看来似乎有些不妥。通过这次的课程设计我明白了学习程序设计语言必须要勤做实验,通过实验总结经验。平时遇到的一些小问题一定要重视,越是基础的知识越要理解透彻。比如指针与数组方面的知识,一旦没有弄清楚,在设计程序时就会吃亏。这次的课设中,我遇到了很多的问题,有的通过思考或查看书本解决了,有的还留在脑子里,只有通过孜孜不倦的求索我们才会有进步,不懂得思考就不能真正的掌握一门知识。这次的实验给以了我警示,让我明白我所掌握的知识还很欠缺,对于继承与派生这一章的知识,我以为自己勉强掌握了,这次实验后我发现我掌握得还不够。基类的保护成员公有继承到派生类,类外是否可以通过对象来访问呢,原先我认为是可以的,经过这次程序设计,我知道我错了。总之,我觉得做学问不应该马虎,对于所学一定要有深入的理解,这也是我这次课设得到的启示。 参考文献: 刘锐宇.Visual C++从入门到精通.清华大学出版社 谭浩强.C++语言程序设计.清华大学出版社 设计源程序代码: #include<cstdio> //stdio.h的内容用C++头文件的形式表示 #include<iostream> #include<malloc.h> //动态内存分配 #include<cstring> #include<iomanip> //I/O流控制头文件 #define NULL 0 #define guding 10 #define LEN sizeof(struct student) //定义了一个常数宏LEN,它的值等于结构体student的所占内存大小 using namespace std; int student_num; FILE *fp1; //定义指针类型文件 struct xueke { char xueke_name[50]; int people_num; }; struct student { char name[50]; long time; int lesson_time; 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; char chaxun_name[50]; cout<<"请输入要查询的人名:"; cin>>chaxun_name; struct student *p; if(head==NULL) cout<<"联系人为空"; p=head; for(i=0;i<student_num;i++) { if(strcmp(chaxun_name,p->name)==0) { cout<<"缺课时间:"<<p->time<<"学生姓名:"<<p->name<<"课程名称:"<<p->lesson_name<<"节次:"<<p->lesson_time<<endl<<"迟到次数:"<<p->chidao_num<<" 早退次数:"<<p->zaotui_num<<"请假次数:"<<p->qingjia_num<<"旷课次数:"<<p->kuangke_num<<endl; } p=p->next; //p的指针内容变成了p->next } } struct student *xiugai(struct student *head) { char xiugai_name[50]; char xiugai_xueke_name[50]; int k; cout<<"请输入要修改的学生姓名与学科名称【格式:学生姓名(空格)学科名称】:"; cin>>xiugai_name>>xiugai_xueke_name; struct student *p1,*p2; p2=(struct student *)malloc(LEN); p1=head; if(head==NULL) { cout<<"没有学生信息\n"; return head; } while((strcmp(xiugai_name,p1->name)!=0||strcmp(xiugai_xueke_name,p1->lesson_name)!=0)&&(p1->next!=NULL)) p1=p1->next; if(strcmp(xiugai_name,p1->name)==0&&strcmp(xiugai_xueke_name,p1->lesson_name)==0) { cout<<"===================================修改信息 =================================\n"; cout<<" 1-修改缺课时间 \n"; cout<<" 2-修改学生姓名 \n"; cout<<" 3-修改课程名称 \n"; cout<<" 4-修改第几节缺课 \n"; cout<<" 5-修改迟到次数\n"; cout<<" 6-修改早退次数\n"; cout<<" 7-修改请假次数\n"; cout<<" 8-修改旷课次数\n\n"; cout<<"================================================================================\n"; cin>>k; switch(k) { case 1: cout<<"请输入新的缺课时间:"; cin>>p1->time; break; case 2: cout<<"请输入新的学生姓名:"; cin>>p1->name; break; case 3: cout<<"请输入新的课程名称:"; cin>>p1->lesson_name; break; case 4: cout<<"请输入新的缺课节次:"; cin>>p1->lesson_time; break; case 5: cout<<"请输入新的迟到次数:"; cin>>p1->chidao_num; break; case 6: cout<<"请输入新的早退次数:"; cin>>p1->zaotui_num; break; case 7: cout<<"请输入新的请假次数:"; cin>>p1->qingjia_num; break; case 8: cout<<"请输入新的旷课次数:"; cin>>p1->kuangke_num; break; } } return head; } struct student *creat() { int i,b; struct student *head,*p1,*p2; cout<<"请输入要建立资料的学生人数:"; cin>>b; head=p2=NULL; p1=(struct student *)malloc(LEN); cout<<"【输入格式:缺课时间(空格)学生姓名(空格)课程名称(空格)第几节(空格)迟到次数(空格)早退次数(空格)请假次数(空格)旷课次数】\n"; cout<<"请输入第1名学生信息:"; cin>>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+=1; for(i=1;i<b;i++) { p1=(struct student*)malloc(LEN); cout<<"请输入第"<<i+1<<"名学生信息:"; cin>>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+=1; } p2->next=NULL; return head; } void print(struct student *head) { struct student *p; p=head; if(p==NULL) cout<<"没有学生信息\n"; while(p!=NULL) { cout<<"缺课时间:"<<p->time<<"学生姓名:"<<setw(10)<<p->name<<"课程名称:"<<p->lesson_name<<"节次:"<<p->lesson_time<<endl<<"迟到次数:"<<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; char lesson[50]; long look_time1,look_time2; int xunhuan_num=0; p3=(struct student *)malloc(LEN); if(head==NULL) { cout<<"没有学生信息"; 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++; } cout<<"请输入要查看的学科名称:"; cin>>lesson; cout<<"请输入要查看的时间范围【输入格式:时间(空格)时间】"; cin>>look_time1>>look_time2; p1=head; while(p1!=NULL) { if(strcmp(lesson,p1->lesson_name)==0&&look_time1<=p1->time&&p1->time<=look_time2) cout<<"学生姓名:"<<p1->name<<" 旷课次数:"<<p1->kuangke_num<<endl; p1=p1->next; } return head; } struct student *tongji_student(struct student *head) { struct xueke a[10]; int n,i,j,zhongjian; struct student *p1; char zhongjian_name[50]; long look_time1,look_time2; if(head==NULL) { cout<<"没有学生信息\n"; return head; } cout<<"请输入一共的学科数:"; cin>>n; for(i=0;i<n;i++) { cout<<"请输入第"<<i+1<<"个学科名称:"; cin>>a[i].xueke_name; a[i].people_num=0; } cout<<"请输入要查看的时间范围由小到大【输入格式:时间(空格)时间】"; cin>>look_time1>>look_time2; p1=head; for(i=0;i<n;i++) { while(p1!=NULL&&look_time1<=p1->time&&p1->time<=look_time2) { if(a[i].xueke_name==p1->lesson_name) 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); } else if(a[i].people_num==a[i+1].people_num&&strcmp(a[i].xueke_name,a[i+1].xueke_name)>0) { 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++) {cout<<"学科名称:"<<a[i].xueke_name<<" 旷课次数:"<<a[i].people_num<<endl; return head; } 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("cannot open file\n"); return(head); } while(!feof(fp1)) {if(fread(&student_ziliao[i],LEN,1,fp1)!=1) {if(feof(fp1)) {fclose(fp1); break; } printf("file read error\n");} i++; } n=i; student_num=n; 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); cout<<" 储存成功\n"; } void main() { struct student *head; int a,b,c; zhuye: cout<<"********************** 欢迎使用学生考勤管理系统 ************************\n"; cout<<" 1_进入管理\n\n\n"; cout<<" 2_查看系统相关信息\n\n\n"; cout<<"********************************************************************************\n\n\n\n\n"; cin>>a; if(a==1) { do { cout<<"********************************************************************************\n"; cout<<" 1_建立学生缺课记录\n"; cout<<" 2_修改学生缺课记录\n"; cout<<" 3_查询学生缺课记录\n"; cout<<" 4_查看单科旷课记录\n"; cout<<" 5_查看学生旷课记录\n"; cout<<" 6_载入学生旷课记录\n"; cout<<" 7_储存学生旷课记录\n"; cout<<" 8_退出考勤管理程序\n"; cout<<"********************************************************************************\n"; cin>>b; switch(b) { case 1: head=creat(); print(head); break; case 2: head=xiugai(head); print(head);
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服