版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C/C+程序设计专题实验报告题目:学生考勤管理系统设计 班级:电子信息科学与技术131姓名: 邬 帅 斌 25 / 27文档可自由编辑打印目录 目录1 摘要.21.设计要求和目的2 1.1设计目的.3 1.2问题描述.3 1.3功能要求.3 1.4问题的解决方案.32 设计思路和方法43 主模块设计.54.运行测试及结果135. 总结16参考文献16源代码.17摘要 随着信息技术在管理上越来越深入的应用,管理信息系统的实施在技术上已经逐步成熟。管理信息系统是一个不断发展的学科,任何单位要生存要发展,要提高效率地把内部活动有机地组织起来,就必须建立与自身特点相适应的信息管理系统。 由于学校的学生
2、管理系统缺乏开发,而学生人数不断增加,学生信息的不断更新,所以,学生考勤管理系统的建立就显得非常重要了。 本设计是基于Visual basic C+ 6.0开发环境,至上而下,层次化地设计学生考勤管理,综合考虑学生考勤管理所涉及的多方面问题,结合学校和教师的情况,有步骤,条理清晰的设计,操作简单,很方便的实现了学校和老师对学生考勤的管理。关键词:学生考勤管理 C+ 信息录入 查询 1.设计要求和目的1.1设计目的 (1)进一步锻炼学生对C+课程基础知识和实践技能的掌握和运用; (2)要求学生基本掌握面向对象程序设计的基本思路和方法; (3)要求学生能够利用所学的基础知识和技能,解决简单的面向对
3、象设计问题。1.2问题描述学生信息包括:学号、姓名、性别、年龄、班级等信息。考勤信息包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假和旷课)。1.3功能要求(1)添加功能:程序能够添加学生的记录和缺课记录,提供选择界面供用户选择所要添加的类别。添加学生记录时,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。(2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。还可以按课程名、学生姓名对缺课记录进行查询。(3)显示功能:可显示当前系统中所有学生的记录和缺课记录,每条记录占
4、据一行。(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。(5)删除功能:主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。(6)统计功能:能根据多种参数进行统计。能按课程名统计出学生旷课的信息、还可以按姓名统计出任一学生的旷课情况。需要排序。(7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。(8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。1.4问题的解决方案 根据系统功能要求,可以将问题解决分为以下步骤:(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;(2)分析系
5、统中的各个实体及它们之间的关系;(3)根据问题描述,设计系统的类层次;(4)完成类层次中各个类的描述;(5)完成类中各个成员函数的定义;(6)完成系统的应用模块;(7)功能调试;(8)完成系统总结报告。(7)功能调试;(8)完成系统总结报告。2. 设计思路和方法2.1设计思路根据设计要求,经分析可将整个系统划分为7个功能模块。数据管理中可以对学生的基本信息、课程的基本信息、学生缺课的查询、添加、删除和修改。查询管理通过根据学生姓名,课程姓名 时间段儿等信息,查询单个学生的缺课记录,单科课的旷课记录,单个学生的旷课记录。功能模块图如下图所示:2.2数据结构设计 struct xuekechar
6、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的结构体,用来存放一个学生的考勤记录,其中有,字符数组name50,lesson_name50,分别存放学生名字,缺课课程名字;int型变
7、量lesson_time,chidao_num,zaotui_num,qingjia_num, kuangke_num,分别来存放,缺课节次,迟到次数,早退次数,请假次数,旷课次数 long型变量time,记录时间。3.主模块设计3.1建立学生缺课记录子模块建立的学生人数,学生基本信息(包括缺课时间、学生姓名、课程名称、节次、迟到次数、早退次数、请假次数、旷课次数),用creat()函数,如下图: 3.2修改学生缺课记录子模块 3.3修改学生缺课记录子模块 3.4查看单科旷课记录子模块根据学科名称和时间范围查出所有在该范围内旷课的学生以及次数, 如下图: 3.5查看学生旷课记录子模块根据要查询
8、的学科名称及时间段查出在改时间段内该门课上旷课的人数,如下图: 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+基础课程有了更加深刻的理解,在相
9、关的能力上有了很大的提高,虽然在设计过程中遇到很大的困难,但是经过不断的修改和调试,在此过程中受益匪浅。 这次的程序设计相对于平时的训练还是有了进步的。学生考勤管理系统要求至少要有四个类,在起初,对于定义哪四个类我是不清楚的,通过仔细的研读问题描叙终于在脑海里确定了这四个类。既然是学生考勤管理系统,那由学生缺课信息中的日期我想到了时间类,这是一个很简单的类。从系统的几大功能我又想到了系统的基础就是缺课学生的缺课信息,于是我又想到了一个信息类,还有两个类是根据两个统计功能想到的,在现在看来似乎有些不妥。通过这次的课程设计我明白了学习程序设计语言必须要勤做实验,通过实验总结经验。平时遇到的一些小问
10、题一定要重视,越是基础的知识越要理解透彻。比如指针与数组方面的知识,一旦没有弄清楚,在设计程序时就会吃亏。这次的课设中,我遇到了很多的问题,有的通过思考或查看书本解决了,有的还留在脑子里,只有通过孜孜不倦的求索我们才会有进步,不懂得思考就不能真正的掌握一门知识。这次的实验给以了我警示,让我明白我所掌握的知识还很欠缺,对于继承与派生这一章的知识,我以为自己勉强掌握了,这次实验后我发现我掌握得还不够。基类的保护成员公有继承到派生类,类外是否可以通过对象来访问呢,原先我认为是可以的,经过这次程序设计,我知道我错了。总之,我觉得做学问不应该马虎,对于所学一定要有深入的理解,这也是我这次课设得到的启示。
11、参考文献:刘锐宇.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,它
12、的值等于结构体student的所占内存大小using namespace std;int student_num;FILE *fp1; /定义指针类型文件struct xueke char xueke_name50;int people_num;struct student char 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 stu
13、dent *head) int i;char chaxun_name50;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<<"学生姓名:"
14、<<p->name<<"课程名称:"<<p->lesson_name<<"节次:"<<p->lesson_time<<endl<<"迟到次数:"<<p->chidao_num<<" 早退次数:"<<p->zaotui_num<<"请假次数:"<<p->qingjia_num<<"旷课次数:&quo
15、t;<<p->kuangke_num<<endl;p=p->next; /p的指针内容变成了p->next struct student *xiugai(struct student *head) char xiugai_name50;char xiugai_xueke_name50;int k;cout<<"请输入要修改的学生姓名与学科名称【格式:学生姓名(空格)学科名称】:"cin>>xiugai_name>>xiugai_xueke_name;struct student *p1,*p2;
16、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_n
17、ame,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&qu
18、ot;cout<<" 8-修改旷课次数nn"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;br
19、eak;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_
20、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<<"【输入格式:缺课时间(空格)学生姓名(空格)课程
21、名称(空格)第几节(空格)迟到次数(空格)早退次数(空格)请假次数(空格)旷课次数】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;stude
22、nt_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>&
23、gt;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
24、->name<<"课程名称:"<<p->lesson_name<<"节次:"<<p->lesson_time<<endl<<"迟到次数:"<<p->chidao_num<<"早退次数:"<<p->zaotui_num<<请假次数:"<<p->qingjia_num<<旷课次数:"<<p->kuangk
25、e_num<<endl;p=p->next;struct student *tongji_lesson(struct student *head) struct student *p1,*p2,*p3;char lesson50;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
26、<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->
27、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,
28、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->less
29、on_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_na
30、me)=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 a10;int n,i,j,z
31、hongjian;struct student *p1;char zhongjian_name50;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>>ai.xueke_name;ai.people
32、_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(ai.xueke_name=p1->lesson_name)ai.people_num+=p1->kuangke_num; p1=p1->ne
33、xt;p1=head; for(j=0;j<n-1;j+) for(i=0;i<n-1-j;i+) if(ai.people_num<ai+1.people_num) zhongjian=ai+1.people_num;ai+1.people_num=ai.people_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);else if(ai.pe
34、ople_num=ai+1.people_num&&strcmp(ai.xueke_name,ai+1.xueke_name)>0) zhongjian=ai+1.people_num;ai+1.people_num=ai.people_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;i<n;i+)cout<&l
35、t;"学科名称:"<<ai.xueke_name<<" 旷课次数:"<<ai.people_num<<endl;return head;return head;struct student *zairu()struct student *p1=NULL,*p2=NULL,*head=NULL;struct student student_ziliao100;int i=0,n=0;if(fp1=fopen("xueshengziliao.txt","rb+")=NUL
36、L) printf("cannot open filen");return(head); while(!feof(fp1)if(fread(&student_ziliaoi,LEN,1,fp1)!=1)if(feof(fp1)fclose(fp1); break; printf(" errorn");i+;n=i;student_num=n;p1=p2=(struct student *)malloc(LEN);head=p1;for(i=0;i<n;i+)p1->chidao_num=student_ziliaoi.chidao_n
37、um;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_);p1->qingjia_num=student_ziliaoi.qingjia_num;p1->time=student_ziliaoi.time;p1->zaotui_num=student_ziliaoi.zaotui_num;p2->
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论