学生考勤管理系统(精编版)_第1页
学生考勤管理系统(精编版)_第2页
学生考勤管理系统(精编版)_第3页
免费预览已结束,剩余14页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一 、 设 计 内 容 与 设 计 要 求1. 设计内容: 学生考勤管理系统1、问题描述学生信息包括:学号、姓名、性别、年龄、班级等信息。考勤信息包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假和旷课)。2、功能要求(1) 添加功能: 程序能够添加学生的记录和缺课记录,提供选择界面供用户选择所要添加的类别。添加学生记录时,要求学号要唯一, 如果添加了重复学号的记录时,则提示数据添加重复并取消添加。(2) 查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。还可以按课程名、学生姓名对缺课记录进行查询。

2、(3) 显示功能:可显示当前系统中所有学生的记录和缺课记录,每条记录占据一行。(4) 编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。(5) 删除功能: 主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空! ”并返回操作。(6) 统计功能: 能根据多种参数进行统计。能按课程名统计出学生旷课的信息、还可以按姓名统计出任一学生的旷课情况。需要排序。(7) 保存功能:可将当前系统中各类记录存入文件中,存入方式任意。(8) 读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。目录一、需求分析61. 系统设计目的与意义62. 系统功能需

3、求(系统流程图)63. 系统功能流程图74. 输入输出的要求7二、总体分析71. 系统功能分析82. 系统功能结构图8三、详细设计91. 类设计:11四、界面设计与各功能模块的实现121.界面设计12五、系统调试141. 首页进入学籍管理系统主菜单142 录入学生信息缺课界面:153. 显示学生信息缺课界面164. 查找学生信息界面175. 删除学生信息界面186. 修改学生信息187. 统计学生信息:19六、使用说明及心得体会20七、附件20一、 需求分析1. 系统功能流程图主程序初菜始单化程程序序录显查入示找删修统保退除改计存出3. 输入输出的要求1. 输入的要求:通过主函数体调用其他函数

4、应用系统主控界面包括学生信息录入,查找等功能模块。 学生信息录入功能完成学生信息和缺课信息的输入。记录查询功能可以对数据各分类的记录进 行查询。2. 输出的要求:1) 能够按编号、姓名对学生的信息进行检索并将检索结果显示在屏幕上。2) 可以统计全部学生缺课类型,及其缺课次数。3) 如果检索不到相应的信息应提示用户。二、 总体分析系统功能分析能够从屏幕上读取一个学生的信息和缺课信息并将信息存入到数据文件中。能够将指 定的信息从文件中删除。 能够按编号、姓名对学生的信息进行检索并将检索结果显示在屏幕上。可以统计全部学生缺课次数,及其缺课类型。 要求有错误提示功能。如果检索不到相应的信息应提示用户。

5、三、详细设计1. 类设计:类: person数据成员学号,姓名,性别,年龄,班级缺课类型,缺课次数,指针域double num; /学 号 char name20; /姓名char sex;/性 别 double old;/年 龄 long double g;/班级int duty; /缺课类型 (1- 迟到,2- 早退,3- 请假,4- 旷课)double salary; / 缺课次数person *next; / 指 针 域 、成员函数person() / 基类构造next=0; /指针域设置为空virtual person() /基类虚析构virtual void input()=0;

6、/从键盘输入数据virtual void input(ifstream& ifs)=0; /从文件输入数据virtual void output()=0; /向屏幕输出数据virtual void output(ofstream& ofs)=0; /向文件输出数据virtual double incoming()=0; /计算次数friend class college;类: teacher (公共继承与 person 类) 数据成员:protected:int hours; /第几节课char b;/迟到日期char z;/课程名称 class school 成 员 函 数

7、: tercher () void input()void input(ifstream& ifs) void output(ofstream& ofs) double incoming()迟到类:class assistant:virtual public person数据成员:protected:int allowance;int hours; /第几节课char b;/早 退 日 期 char z;/课程名称成员函数: assistant() void input()void input(ifstream& ifs) void output()void outpu

8、t(ofstream& ofs) double incoming()请假类:class manager:virtual public person数据成员:protected:int allowance;int hours; /第几节课char b;/请假日期char z;/课程名称 成员函数:manager() void input()void input(ifstream& ifs)void output()void output(ofstream& ofs) double incoming()旷课类:class teacher_assistant:public t

9、eacher,public assistant成 员 函 数 : teacher_assistant() void input()void input(ifstream& ifs) void output()void output(ofstream& ofs) double incoming()学生类:class college 数据成员private:person *pl; void clear();int college:cfind(int id,person *p1,person *p2)成员函数:public:college(); /构造college(); /析构vo

10、id add(); /退出void delete(); /删除void modify(); /修改void print(); /输出void save(); /信息存盘void load(); /信息装入void find(); /查找void build(); /导引void stat(); /统计四、 界面设计与各功能模块的实现1.界面设计1. 界面设计程序运行后会出现一个简捷的窗口,便于用户查询数据。2. 功能模块实现设计通过主窗体调用其他窗体。 应用系统主控界面包括学生信息录入,查找等功能模块。 学生信息录入功能完成学生信息和成绩的输入。记录查询功能可以对数据各分类的记录进行查 询。具

11、体举例如下: 1)输入函数: void input()cout<<"n学 号 :" cin>>num; cout<<"n姓 名 :" cin>>name; cout<<"n性 别 :" cin>>sex; cout<<"n年 龄 :" cin>>old; cout<<"n班 级 :" cin>>g; cout<<"n第几节课 :" cin>

12、>hours;salary=incoming(); 2)删除函数void school:del()student *p,*p2; int num;cout<<" 请输入编号 : "cin>>num;if( !find(&p,num,"") )cout<<"sorry!找不到你要删pe除rso的n 内容 !"<<endl; return;(p->next)->output();p2=p->next;p->nextt=eprc2h-e>rnext;

13、 delete p2; school:setkey(1);assitantmannager2.类的派生之间的te示rc意her图_assitant五、 系统调试1. 首页进入学生考勤管理系统主菜单2 录入学生信息界面:3. 显示学生信息界面:4. 修改学生信息六、 使用说明及心得体会此次 c+课程设计,在指导教师的精心教导下,我学会了如何用c+编写一个简单的应用程序。首先要对程序的设计要求有一个比较明确的认识,然后系统分析与系统设计, 最后是代码设计与调试。 程序实现上, 设计了简单的查询界面, 将各个功能集中出来按照程序编写原则,便于查询。七、附件源文件代码:#include <fst

14、ream.h> 文件操作头文件#include <string.h>字符串流class person /人员类 (抽象类 ) protected:double num; / 学号char name20; / 姓名char sex;/性别double old;/ 年龄long double g;/ 班级int duty; / 缺课类型 (1- 迟到,2-早退,3-请假,4- 旷课) double salary; /缺课次数person *next; / 指针域public:person() /基类构造 next=0; / 指针域设置为空 virtual person() / 基

15、类虚析构virtual void input()=0; / 从键盘输入数据virtual void input(ifstream& ifs)=0; /从文件输入数据virtual void output()=0; / 向屏幕输出数据virtual void output(ofstream& ofs)=0; /向文件输出数据virtual double incoming()=0; / 计算次数friend class college; ;class teacher:virtual public person /迟到类 protected:int hours; / 第几节课char

16、 b;/ 迟到日期char z;/ 课程名称public: duty=1;salary=800; void input() / 键盘补充输入其它数据 cout<<"n 学 号 :" cin>>num; cout<<"n 姓 名 :" cin>>name; cout<<"n 性 别 :" cin>>sex; cout<<"n 年 龄 :" cin>>old; cout<<"n 班 级 :"

17、cin>>g; cout<<"n 第几节课 :" cin>>hours; salary=incoming(); void input(ifstream& ifs) ifs>>num>>name>>sex>>old>>g>>duty>>hours>>salary; void output() cout<<num<<"t"<<name<<"t"<&

18、lt;sex<<"t"<<old<<"t"<<g<<"t"<<duty<<"t"<<hours<<"t"<<salary<<"t"<<endl; void output(ofstream& ofs) ofs<<num<<"t"<<name<<"t&q

19、uot;<<sex<<"t"<<old<<"t"<<g<<"t"<<duty<<"t"<<hours<<"t"<<salary<<"t"<<endl; double incoming() if(hours>120)return salary+(hours-120)*20; elsereturn salary; ;cl

20、ass assistant:virtual public person / 早退 protected:int allowance;int hours; / 第几节课char b;/ 早退日期char z;/ 课程名称public:assistant() duty=2; salary=650; allowance=150; void input() cout<<"n 学 号 :" cin>>num; cout<<"n 姓 名 :" cin>>name; cout<<"n 性 别 :&qu

21、ot; cin>>sex; cout<<"n 年 龄 :" cin>>old; cout<<"n 班 级 :" cin>>g; cout<<"n 第几节课 :" cin>>hours; salary=incoming();void input(ifstream& ifs) ifs>>num>>name>>sex>>old>>g>>duty>>hours>&

22、gt;salary; void output() cout<<num<<"t"<<name<<"t"<<sex<<"t"<<old<<"t"<<g<<"t"<<duty<<"t"<<hours<<"t"<<salary<<"t"<<en

23、dl; void output(ofstream& ofs) ofs<<num<<"t"<<name<<"t"<<sex<<"t"<<old<<"t"<<g<<"t"<<duty<<"t"<<hours<<"t"<<salary<<"t"&

24、lt;<endl; double incoming()if(salary>70)return salary+allowance+(hours-70)*20; elsereturn salary+allowance; ;class manager:virtual public person / 请假 protected:int allowance;int hours; / 第几节课char b;/ 请假日期char z;/ 课程名称public:manager() duty=3; salary=750; allowance=250; void input() cout<<

25、"n 学号:" cin>>num; cout<<"n 姓名:" cin>>name;cout<<"n 性 别 :" cin>>sex; cout<<"n 年 龄 :" cin>>old; cout<<"n 班 级 :" cin>>g; cout<<"n 第几节课 :" cin>>hours; salary=incoming();void inpu

26、t(ifstream& ifs) ifs>>num>>name>>sex>>old>>g>>duty>>hours>>salary; void output() cout<<num<<"t"<<name<<"t"<<sex<<"t"<<old<<"t"<<g<<"t"<

27、<duty<<"t"<<hours<<"t"<<salary<<"t"<<endl; class collegeprivate:person *pl; void clear();int college:cfind(int id,person *p1,person *p2);public:college(); / 构造college(); / 析 构 void add(); / 退 出void delete(); / 删除void modify(); / 修改

28、void print(); / 输 出void save(); / 信息存盘void load(); / 信息装入void find(); / 查 找void build(); / 导引void stat(); / 统计;college:college() / 构造函数 (创建 1 个头结点的链表 )person *p=new teacher;pl=p; cout<<" 自动装入数据n" build(); college:college() / 析构函数 (仅保留 1 个头结点 )person *p=pl;while(p) / 逐个删除结点,包括头结点pl=p-

29、>next; delete p; p=pl; pl=0;void college:add() / 增加char c;do cout<<"n*增加*n"/查找尾结点person *p=pl; teacher *pt; assistant *pa; manager *pm; teacher_assistant *pta;switch(ch) case 1: pt=new teacher; pt->input(); p->next=pt;break;case 2: pa=new assistant; pa->input(); p->nex

30、t=pa;break;case 3: pm=new manager; pm->input(); p->next=pm;break;case 4: pta=new teacher_assistant; pta->input(); p->next=pta;break; default: return;cout<<" 是否进行循环 ?y/nn" cin>>c;while(c='y'|c='y'); save();/ 查找void college:find()double id;person *p1;p

31、erson *p2;cout<<" 输入你要查询的编号:"cin>>id; p1=pl->next; p2=pl;while(p1)if(p1->num=id) break; /找到elsep2=p1; / 继续查找p1=p1->next;if(!p1) cout<<" 找不到你所查询的人!n 请确认你所查询的编号是否出错!n"return; else cout<<"n*出勤信息表*n"cout<<" 学号姓名 性别年 龄 班级缺课类型缺课次数 n

32、" p1->output();/查找缺课结点 (返回 1-找到, 0-未找到 .结点指针由p1 返回,p2 为前看指针 ) int college:cfind(int id,person *p1,person *p2)*p1=pl->next;*p2=pl;while(*p1)if(*p1)->num=id) break; /找到else*p2=*p1; / 继续查找*p1=(*p1)->next;return *p1?1:0;void college:delete() / 删除cout<<"n*删除*n" int num; p

33、erson *p1,*p2; cout<<" 编号:" cin>>num; if(!cfind(num,&p1,&p2)cout<<" 指定的人员没有找到!n"elsep2->next=p1->next; / 连接delete p1;cout<<" 正确删除 !n"save();void college:modify() / 修 改cout<<"n*修改*n" int num;person *p1,*p2;cout<<

34、;" 编号:" cin>>num;if(!cfind(num,&p1,&p2)cout<<" 指定的人员没有找到!n"elsep1->output(); / 输出原来的出勤信息( 做提示) p1->input(); / 输入新的出勤信息( 更 新 ) cout<<" 修改完成 !n"save(); void college:print() / 输出出勤信息cout<<"n*出勤信息表*n"cout<<" 学号姓名 性别

35、年 龄 班级缺课类型缺课次数 n" person *p=pl->next;if(!p)cout<<" 无出勤记录 !n" return;while(p) / 遍历链表,输出出勤信息p->output(); p=p->next;void college:save() / 出勤信息存盘 ?ofstream f("person.dat",ios:out); / 打开文件person *p=pl->next; while(p)p->output(f); p=p->next;f.close(); / 关闭文

36、件cout<<" 职工信息已经保存在person.dat.n"void college:build() / 出勤信息char buf81; / 临时空间int duty; / 人员类型person *p2; / 新建结点的指针long t; / 读写位置clear();ifstream f("person.dat",ios:in); person *p=pl; / 尾结点指针while(1)t=f.tellg(); f>>buf>>buf>>duty; if(f) switch(duty) case 1:

37、p2=new teacher; break; case 2: p2=new assistant; break; case 3: p2=new manager; break;case 4: p2=new teacher_assistant; break; default: f.close(); return;p->next=p2; p=p->next; f.seekg(t);p->input(f);else break; f.close();void college:load() / 出勤信息录入char ah; int c;cout<<"n*出勤信息录入

38、*n" docout<<" 输入要录入的出勤人员个数:n" cin>>c;for(int i=1;i<=c;i+)person *p=pl;while(p->next)p=p->next; int ch;cout<<" 输入出勤分类码 1- 迟到,2-早退,3-请假,4-旷课:" cin>>ch; teacher *pt;assistant *pa;manager *pm;teacher_assistant *pta;switch(ch)case 1: pt=new teache

39、r; pt->input(); p->next=pt;break;case 2: pa=new assistant; pa->input(); p->next=pa;break;case 3: pm=new manager; pm->input(); p->next=pm;break;case 4: pta=new teacher_assistant; pta->input(); p->next=pta;break;default: return;save();cout<<" 是否还要继续录入出勤信息? y/nn" cin>>ah;while(ah='y'|ah='y');void college:stat()person *p1; person *p2; double sa=0; int a,b,i=0; double c,d;cout<<" 选择你要统计的类别n1- 类别; 2-次数; 3-缺课总次数; n"cin>>a; if(a=1)cout<<" 输入你要统计的类别:n1- 迟到,2-早退,3-请假,4-旷课n" cin>>b;p1=pl->next

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论