c++课程设计学生考勤管理系统报告2.docx
《c++课程设计学生考勤管理系统报告2.docx》由会员分享,可在线阅读,更多相关《c++课程设计学生考勤管理系统报告2.docx(25页珍藏版)》请在冰豆网上搜索。
c++课程设计学生考勤管理系统报告2
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主模块设计
3.2.1建立学生缺课记录子模块
要建立的学生人数,学生基本信息(包括缺课时间、学生姓名、课程名称、节次、迟到次数、早退次数、请假次数、旷课次数)可用creat()函数如图1.
图1
3.2.2修改学生缺课记录子模块
根据要修改的学生姓名以及科目名称找到相应的信息,再选择要修改的项目进行单项修改如图2
图2
3.2.3修改学生缺课记录子模块
根据人名可以查出该学生的所有缺课记录如图3
图3
3.2.4查看单科旷课记录子模块
根据学科名称和时间范围查出所有在该范围内旷课的学生以及次数如图4
图4
3.2.5查看学生旷课记录子模块
根据要查询的学科名称及时间段查出在改时间段内该门课上旷课的人数如图5
图5
3.2.6载入学生旷课记录子模块
可以载入实现储存在当前文件夹中txt文件中所储存的数据如图6
图6
3.2.7储存学生旷课记录子模快
进入系统界面,顺序的完成各项操作,进行数据的输入,信息的保存调用相应的函数打开相应的地址,查询各项信息。
如图7
图7
4.运行结果
4.1运行
开始菜单
图1开始菜单
主菜单
图2主菜单
建立学生缺课记录
图2建立学生缺课记录
储存学生旷课记录
图3储存学生旷课记录
5.课程设计总结
课程设计顺利完成,题目所要求的功能基本实现,可以对学生的缺课信息进行添加,修改,删除以及查询的显示。
不过这个程序还不够完善,例如不能往当前文件夹中的txt文件中添加记录。
结束语
整个系统的设计过程对于我来说是个学习、探索的过程,通过借鉴别人,学习设计程序,在整个设计过程中,出现过很多的问题,很多繁琐的东西都需要反复的修改,主要是因为前期的学习不认真,对系统的需求分析的要求认识不清楚,使得在后边的工作中不得不经常反复请教别人去修改。
使我体会到设置中每一步的重要性。
所以在分析一个问题时,我们需要站在一个有远见的高度。
通过此次设计,我对C++语言编程有了深刻的认识,积累了使用软件工程的思想来开发软件的经验,更重要的是学会了在对待问题时应该考虑到哪些方面和怎么解决问题。
虽然时间紧迫但我学会了不少,感到自身知识的贫乏,希望在日后积极学习并尝试努力中能做出完善的系统。
参考文献
[1]
谭浩强.C++语言程序设计.清华大学出版社
[2]
求是科技.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,