c++课程设计学生考勤管理系统报告.docx
《c++课程设计学生考勤管理系统报告.docx》由会员分享,可在线阅读,更多相关《c++课程设计学生考勤管理系统报告.docx(19页珍藏版)》请在冰豆网上搜索。
c++课程设计学生考勤管理系统报告
信息科学与技术学院
程序设计基础课程设计报告
题目名称:
学生考勤管理系统
学生姓名:
郭晨晨
学号:
2
专业班级:
13级计科(3)班
指导教师:
郭理
2013年6月6日
目录1
1.课程设计题目与要求2
1.1课题目的和要求2
1.3课题意义2
2总体设计3
2.1功能模块设计3
2.2系统设计方案3
3详细设计4
3.1数据结构设计4
3.2主模块设计4
3.2.1建立学生缺课记录子模块4
3.2.2修改学生缺课记录子模块5
3.2.3修改学生缺课记录子模块6
3.2.4查看单科旷课记录子模块7
3.2.5查看学生旷课记录子模块8
3.2.6载入学生旷课记录子模块9
3.2.7储存学生旷课记录子模快10
4.运行结果12
4.1运行12
5.课程设计总结14
结束语14
参考文献15
附录:
源代码15
1.课程设计题目与要求
1.1课题目的和要求
设计目的:
要求实现---“学生考勤管理程序”记录学生的缺课情况,它包括:
缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假及旷课)。
1.2设计要求:
1.录入学生的缺课记录;
2.修改某个学生的缺课记录;
3.查询某个学生的缺课情况;
4.统计某段时间内,某门课旷课学生姓名及旷课次数,按旷课次数由多到少排序;
5.统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序;
6.系统以菜单方式工作。
1.3课题意义
程序实践是本科生重要教学环节之一。
通过程序实践,强化学生的计算机应用技能,使学生验证、巩固和充实所学的理论知识,加深对相关内容的理解,拓宽知识面,培养学生的创新精神和实践能力
学生考勤管理程序可以大大减缓学生考勤人员的工作量,方便了平时上课学生的出勤率的管理。
2总体设计
2.1功能模块设计
根据分析整个系统主要划分为7个功能模块,分别执行要求中的功能。
数据管理中可以对学生的基本信息、课程的基本信息、学生缺课的查询、添加、删除和修改。
查询管理通过根据学生姓名,课程姓名时间段儿等信息,查询单个学生的缺课记录,单科课的旷课记录,单个学生的旷课记录。
功能模块图如图1所示:
图1功能模块图
2.2系统设计方案
这个程序是过程性语言设计的。
运用多种条件语句,主体采用的是链表指针。
系统的设计采用了数组语句、选择语句和循环语句,在需要处理大量同类数据时,这样就使程序书写更加简洁。
程序使用了布尔函数。
选择语句多采用if多分支选择结构与switch语句。
首先计算switch表达式,然后在caes子句中寻找值相等的常量表达式,并以此为入口符号,由此开始顺序执行。
循环语句采用了for语句等、do-while语句,for语句用于已知循环次数的循环结构,括号中的三个量分别用来表示循环变量初值、循环终值和循环增量。
do-while语句先循环后判断,Break语句在switch语句中,保证多分支情况的正确执行,在循环语句中,强制终止本层循环。
保存和读取函数是典型的函数功能,一个程序是由若干个函数组成的,保存和读取函数是和其他函数互相调用的。
3详细设计
3.1数据结构设计
structxueke
{charxueke_name[50];
intpeople_num;
};
这是定义了一个xueke结构体,用来存放一个学科名及其相应的旷课人数;
structstudent
{charname[50];
longtime;
intlesson_time;
charlesson_name[50];
intchidao_num;
intzaotui_num;
intqingjia_num;
intkuangke_num;
structstudent*next;
};这是定义了一个student的结构体,用来存放一个学生的考勤记录,
其中有,字符数组name[50],lesson_name[50],分别存放学生名字,
缺课课程名字;int型变量lesson_time,chidao_num,zaotui_num,qingjia_num,kuangke_num,分别来存放,缺课节次,迟到次数,早退次数,请假次数,旷课次数long型变量time,记录时间。
3.2主模块设计
要建立的学生人数,学生基本信息(包括缺课时间、学生姓名、课程名称、节次、迟到次数、早退次数、请假次数、旷课次数)可用creat()函数如图1.
图1
根据要修改的学生姓名以及科目名称找到相应的信息,再选择要修改的项目进行单项修改如
图2
图2
根据人名可以查出该学生的所有缺课记录如图3
图3
根据学科名称和时间范围查出所有在该范围内旷课的学生以及次数如图4
图4
根据要查询的学科名称及时间段查出在改时间段内该门课上旷课的人数如图5
图5
可以载入实现储存在当前文件夹中txt文件中所储存的数据如图6
图6
进入系统界面,顺序的完成各项操作,进行数据的输入,信息的保存调用相应的函数打开相应的地址,查询各项信息。
如图7
图7
4.运行结果
4.1运行
开始菜单
图1开始菜单
主菜单
图2主菜单
建立学生缺课记录
图2建立学生缺课记录
储存学生旷课记录
图3储存学生旷课记录
5.课程设计总结
课程设计顺利完成,题目所要求的功能基本实现,可以对学生的缺课信息进行添加,修改,删除以及查询的显示。
不过这个程序还不够完善,例如不能往当前文件夹中的txt文件中添加记录。
结束语
整个系统的设计过程对于我来说是个学习、探索的过程,通过借鉴别人,学习设计程序,在整个设计过程中,出现过很多的问题,很多繁琐的东西都需要反复的修改,主要是因为前期的学习不认真,对系统的需求分析的要求认识不清楚,使得在后边的工作中不得不经常反复请教别人去修改。
使我体会到设置中每一步的重要性。
所以在分析一个问题时,我们需要站在一个有远见的高度。
通过此次设计,我对C++语言编程有了深刻的认识,积累了使用软件工程的思想来开发软件的经验,更重要的是学会了在对待问题时应该考虑到哪些方面和怎么解决问题。
虽然时间紧迫但我学会了不少,感到自身知识的贫乏,希望在日后积极学习并尝试努力中能做出完善的系统。
参考文献
谭浩强.C++语言程序设计.清华大学出版社
求是科技.VisualC++6.0信息系统开发.人民邮电出版社
附录:
源代码
#include//cstdio是将stdio.h的内容用C++头文件的形式表示出来
#include
#include//malloc的全称是memoryallocation,中文叫动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。
#include//当调用库函数,客户程序提供的是string类型参数,而库函数内部实现用的是c-串,因此需要将string对象,转化为char*对象,而c_str()提供了这样一种方法,它返回一个客户程序可读不可改的指向字符数组的指针。
#include//I/O流控制头文件
#defineNULL0
#defineguding10
#defineLENsizeof(structstudent)
usingnamespacestd;
intstudent_num;
FILE*fp1;
structxueke
{charxueke_name[50];
intpeople_num;
};
structstudent
{charname[50];
longtime;
intlesson_time;
charlesson_name[50];
intchidao_num;
intzaotui_num;
intqingjia_num;
intkuangke_num;
structstudent*next;
};
voidchaxun(structstudent*head)
{inti;
charchaxun_name[50];
cout<<"请输入要查询的人名:
";
cin>>chaxun_name;
structstudent*p;
if(head==NULL)
cout<<"联系人为空";
p=head;
for(i=0;i{if(strcmp(chaxun_name,p->name)==0)
{cout<<"缺课时间:
"<time<<"学生姓名:
"<name<<"课程名称:
"<lesson_name<<"节次:
"<lesson_time<<<"迟到次数:
"<chidao_num<<"早退次数:
"<zaotui_num<<"请假次数:
"<qingjia_num<<"旷课次数:
"<kuangke_num<}
p=p->next;}
}
structstudent*xiugai(structstudent*head)
{charxiugai_name[50];
charxiugai_xueke_name[50];
intk;
cout<<"请输入要修改的学生姓名与学科名称【格式:
学生姓名(空格)学科名称】:
";
cin>>xiugai_name>>xiugai_xueke_name;
structstudent*p1,*p2;
p2=(structstudent*)malloc(LEN);
p1=head;
if(head==NULL)
{cout<<"没有学生信息\n";
returnhead;}
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)
{case1:
cout<<"请输入新的缺课时间:
";
cin>>p1->time;
break;
case2:
cout<<"请输入新的学生姓名:
";
cin>>p1->name;
break;
case3:
cout<<"请输入新的课程名称:
";
cin>>p1->lesson_name;
break;
case4:
cout<<"请输入新的缺课节次:
";
cin>>p1->lesson_time;
break;
case5:
cout<<"请输入新的迟到次数:
";
cin>>p1->chidao_num;
break;
case6:
cout<<"请输入新的早退次数:
";
cin>>p1->zaotui_num;
break;
case7:
cout<<"请输入新的请假次数:
";
cin>>p1->qingjia_num;
break;
case8:
cout<<"请输入新的旷课次数:
";
cin>>p1->kuangke_num;
break;}
}
returnhead;
}
structstudent*creat()
{
inti,b;
structstudent*head,*p1,*p2;
cout<<"请输入要建立资料的学生人数:
";
cin>>b;
head=p2=NULL;
p1=(structstudent*)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
{
p1=(structstudent*)malloc(LEN);
cout<<"请输入第"<
";
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;
returnhead;
}
voidprint(structstudent*head)
{structstudent*p;
p=head;
if(p==NULL)
cout<<"没有学生信息\n";
while(p!
=NULL)
{cout<<"缺课时间:
"<time<<"学生姓名:
"<name<<"课程名称:
"<lesson_name<<"节次:
"<lesson_time<<<"迟到次数:
"<chidao_num<<"早退次数:
"<zaotui_num<<"请假次数:
"<qingjia_num<<"旷课次数:
"<kuangke_num<p=p->next;}
}
structstudent*tongji_lesson(structstudent*head)
{structstudent*p1,*p2,*p3;
charlesson[50];
longlook_time1,look_time2;
intxunhuan_num=0;
p3=(structstudent*)malloc(LEN);
if(head==NULL)
{cout<<"没有学生信息";
return(head);}
p1=head;
p2=p1->next;
while(xunhuan_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<<"学生姓名:
"<name<<"旷课次数:
"<kuangke_num<p1=p1->next;}
returnhead;
}
structstudent*tongji_student(structstudent*head)
{structxuekea[10];
intn,i,j,zhongjian;
structstudent*p1;
charzhongjian_name[50];
longlook_time1,look_time2;
if(head==NULL)
{cout<<"没有学生信息\n";
returnhead;
}
cout<<"请输入一共的学科数:
";
cin>>n;
for(i=0;i{cout<<"请输入第"<
";
cin>>a[i].xueke_name;
a[i].people_num=0;
}
cout<<"请输入要查看的时间范围由小到大【输入格式:
时间(空格)时间】";
cin>>look_time1>>look_time2;
p1=head;
for(i=0;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;jfor(i=0;i{if(a[i].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);}
elseif(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{cout<<"学科名称:
"<"<returnhead;}
returnhead;
}
structstudent*zairu()
{structstudent*p1=NULL,*p2=NULL,*head=NULL;
structstudentstudent_ziliao[100];
inti=0,n=0;
if((fp1=fopen("xueshengziliao.txt","rb+"))==NULL)
{printf("cannotopenfile\n");
return(head);}
while(