1、信息科学和技术学院程序设计基础课程设计汇报题目名称: 学生考勤管理系统 学生姓名: 郭晨晨 学 号: 508093 专业班级: 13级计科(3)班指导老师: 郭理 6月6日目录目录11. 课程设计题目和要求21.1 课题目标和要求21.3 课题意义22 总体设计32.1功效模块设计32.2系统设计方案33 具体设计43.1 数据结构设计43.2 主模块设计43.2.1建立学生缺课统计子模块43.2.2修改学生缺课统计子模块53.2.3修改学生缺课统计子模块63.2.4查看单科旷课统计子模块73.2.5查看学生旷课统计子模块83.2.6载入学生旷课统计子模块93.2.7储存学生旷课统计子模快10
2、4. 运行结果124.1运行125. 课程设计总结14结束语14参考文件15附录:源代码15 1. 课程设计题目和要求1.1 课题目标和要求设计目标:要求实现-“学生考勤管理程序”统计学生缺课情况,它包含:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假及旷课)。1.2 设计要求: 1.录入学生缺课统计;2修改某个学生缺课统计;3查询某个学生缺课情况;4统计某段时间内,某门课旷课学生姓名及旷课次数,按旷课次数由多到少排序; 5统计某段时间内,有学生旷课课程及旷课人次,按旷课人次由多到少排序;6.系统以菜单方法工作。1.3 课题意义程序实践是本科生关键教学步骤之一。经过程序实践
3、,强化学生计算机应用技能,使学生验证、巩固和充实所学理论知识, 加深对相关内容了解,拓宽知识面,培养学生创新精神和实践能力学生考勤管理程序能够大大减缓学生考勤人员工作量, 方便了平时上课学生出勤率管理。 2 总体设计2.1功效模块设计依据分析整个系统关键划分为7个功效模块,分别实施要求中功效。数据管理中能够对学生基础信息、课程基础信息、学生缺课查询、添加、删除和修改。查询管理经过依据学生姓名,课程姓名 时间段儿等信息,查询单个学生缺课统计,单科课旷课统计,单个学生旷课统计。功效模块图图1所表示:图1功效模块图2.2系统设计方案这个程序是过程性语言设计。利用多个条件语句,主体采取是链表指针。系统
4、设计采取了数组语句、选择语句和循环语句,在需要处理大量同类数据时,这么就使程序书写愈加简练。程序使用了布尔函数。选择语句多采取if多分支选择结构和switch语句。首先计算switch表示式,然后在caes子句中寻求值相等常量表示式,并以此为入口符号,由此开始次序实施。循环语句采取了for语句等、do-while语句,for语句用于已知循环次数循环结构,括号中三个量分别用来表示循环变量初值、循环终值和循环增量。do-while语句先循环后判定, Break语句在switch语句中,确保多分支情况正确实施,在循环语句中,强制终止本层循环。保留和读取函数是经典函数功效,一个程序是由若干个函数组成,
5、保留和读取函数是和其它函数相互调用。 3 具体设计3.1 数据结构设计 struct xuekechar xueke_name50;int people_num;这是定义了一个xueke结构体,用来存放一个学科名及其对应旷课人数;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;这是定义了一个student结构体,用来存放一个学生考勤统计,
6、其中有,字符数组name50,lesson_name50,分别存放学生名字,缺课课程名字;int型变量lesson_time,chidao_num,zaotui_num,qingjia_num, kuangke_num,分别来存放,缺课节次,迟到次数,早退次数,请假次数,旷课次数 long型变量time,统计时间。 3.2 主模块设计3.2.1建立学生缺课统计子模块要建立学生人数,学生基础信息(包含缺课时间、学生姓名、课程名称、节次、迟到次数、早退次数、请假次数、旷课次数)可用creat()函数图1. 图13.2.2修改学生缺课统计子模块依据要修改学生姓名和科目名称找到对应信息,再选择要修改项
7、目进行单项修改 图2 图23.2.3修改学生缺课统计子模块依据人名能够查出该学生全部缺课统计 图3 图33.2.4查看单科旷课统计子模块依据学科名称和时间范围查出全部在该范围内旷课学生和次数 图4 图43.2.5查看学生旷课统计子模块依据要查询学科名称立即间段查出在改时间段内该门课上旷课人数 图5 图53.2.6载入学生旷课统计子模块能够载入实现储存在目前文件夹中txt文件中所储存数据 图6 图63.2.7储存学生旷课统计子模快进入系统界面,次序完成各项操作,进行数据输入,信息保留调用对应函数打开对应地址,查询各项信息。图7 图7 4. 运行结果4.1运行开始菜单图1 开始菜单主菜单 图2 主
8、菜单建立学生缺课统计图2建立学生缺课统计储存学生旷课统计图3储存学生旷课统计 5. 课程设计总结课程设计顺利完成,题目所要求功效基础实现,能够对学生缺课信息进行添加,修改,删除和查询显示。不过这个程序还不够完善,比如不能往目前文件夹中txt文件中添加统计。结束语整个系统设计过程对于我来说是个学习、探索过程,经过借鉴她人,学习设计程序,在整个设计过程中,出现过很多问题,很多繁琐东西全部需要反复修改,关键是因为前期学习不认真,对系统需求分析要求认识不清楚,使得在后边工作中不得不常常反复请教她人去修改。使我体会到设置中每一步关键性。所以在分析一个问题时,我们需要站在一个有远见高度。经过此次设计,我对
9、C+语言编程有了深刻认识,积累了使用软件工程思想来开发软件经验,更关键是学会了在对待问题时应该考虑到哪些方面和怎么处理问题。即使时间紧迫但我学会了不少,感到本身知识贫乏,期望在以后主动学习并尝试努力中能做出完善系统。参考文件1谭浩强.C+语言程序设计.清华大学出版社2求是科技.Visual C+ 6.0信息系统开发.人民邮电出版社附录:源代码 #include /cstdio是将stdio.h内容用C+头文件形式表示出来#include #include /malloc全称是memory allocation,汉字叫动态内存分配,当无法知道内存具体位置时候,想要绑定真正内存空间,就需要用到动态
10、分配内存。#include /当调用库函数,用户程序提供是string类型参数,而库函数内部实现用是c-串,所以需要将string对象,转化为char*对象,而c_str()提供了这么一个方法,它返回一个用户程序可读不可改指向字符数组指针。#include /I/O流控制头文件#define NULL 0#define guding 10#define LEN sizeof(struct student)using namespace std;int student_num;FILE *fp1;struct xuekechar xueke_name50;int people_num;struc
11、t 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 *head)int i;char chaxun_name50;coutchaxun_name;struct student *p;if(head=NULL)cout联络人为空;p=head;for(i=0;iname)=0)cout缺课时间:tim
12、e 学生姓名:name 课程名称:lesson_name 节次:lesson_timeendl 迟到次数:chidao_num 早退次数:zaotui_num 请假次数:qingjia_num 旷课次数:kuangke_numnext; struct student *xiugai(struct student *head)char xiugai_name50;char xiugai_xueke_name50;int k;coutxiugai_namexiugai_xueke_name;struct student *p1,*p2; p2=(struct student *)malloc(LE
13、N);p1=head;if(head=NULL)coutname)!=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;co
14、ut 7-修改请假次数 n;cout 8-修改旷课次数 nn;coutk;switch(k)case 1:coutp1-time;break;case 2:coutp1-name;break;case 3:coutp1-lesson_name;break;case 4:coutp1-lesson_time;break;case 5:coutp1-chidao_num;break;case 6:coutp1-zaotui_num;break;case 7:coutp1-qingjia_num;break;case 8:coutp1-kuangke_num;break; return head;s
15、truct student *creat()int i,b;struct student *head,*p1,*p2; coutb;head=p2=NULL;p1=(struct student *)malloc(LEN);cout【输入格式:缺课时间(空格)学生姓名(空格)课程名称(空格)第几节(空格)迟到次数(空格)早退次数(空格)请假次数(空格)旷课次数】n;coutp1-timep1-namep1-lesson_namep1-lesson_timep1-chidao_nump1-zaotui_nump1-qingjia_nump1-kuangke_num;head=p1;p2=p1;s
16、tudent_num+=1;for(i=1;ib;i+)p1=(struct student*)malloc(LEN);cout请输入第i+1p1-timep1-namep1-lesson_namep1-lesson_timep1-chidao_nump1-zaotui_nump1-qingjia_nump1-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没有
17、学生信息n;while(p!=NULL) cout缺课时间:time 学生姓名:setw(10)name 课程名称:lesson_name 节次:lesson_timeendl 迟到次数:chidao_num 早退次数:zaotui_num 请假次数:qingjia_num 旷课次数:kuangke_numnext;struct student *tongji_lesson(struct student *head)struct student *p1,*p2,*p3;char lesson50;long look_time1,look_time2;int xunhuan_num=0;p3=(
18、struct student *)malloc(LEN);if(head=NULL)coutnext;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-lesson_time=p2-lesson_time;p3-time=p2-time;strcpy(p3-lesson_name,p2-lesson_name);strcpy
19、(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;
20、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+;coutlesson;coutlook_time1look_time2;p1=head; while(p1!=NULL)if(strcmp(lesson,p1-less
21、on_name)=0&look_time1time&p1-time=look_time2)cout学生姓名:name 旷课次数:kuangke_numnext; return head;struct student *tongji_student(struct student *head) struct xueke a10;int n,i,j,zhongjian;struct student *p1;char zhongjian_name50;long look_time1,look_time2;if(head=NULL)cout没有学生信息n;return head; coutn;for(i
22、=0;in;i+)cout请输入第i+1ai.xueke_name;ai.people_num=0; coutlook_time1look_time2;p1=head;for(i=0;in;i+)while(p1!=NULL&look_time1time&p1-timelesson_name)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_num0) zhongjian=ai+1.people_num;ai+1.people_num=ai.peo
23、ple_num;ai.people_num=zhongjian;strcpy(zhongjian_name,ai+1.xueke_name);strcpy(ai+1.xueke_name,ai.xueke_name);strcpy(ai.xueke_name,zhongjian_name);for(i=0;in;i+)cout学科名称:ai.xueke_name 旷课次数:ai.people_numendl;return head;return head;struct student *zairu()struct student *p1=NULL,*p2=NULL,*head=NULL;str
24、uct student student_ziliao100;int i=0,n=0;if(fp1=fopen(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;student_num=n;p1=p2=(struct student *)malloc(LEN);head=
25、p1;for(i=0;ichidao_num=student_ziliaoi.chidao_num;p1-kuangke_num=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-z
26、aotui_num=student_ziliaoi.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 stud
27、ent *head;int a,b,c;zhuye: cout$ 欢迎使用学生考勤管理系统 V1.0.0 $n; cout 1_进入管理nnn;cout 2_查看系统相关信息nnn;couta;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;coutb;switch(b)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(b!=8);else cout*欢迎使用本系统 *n; coutc; if(c=1) goto zhuye;