版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.一、设计内容与设计要求1设计内容:学生考勤管理系统1、问题描述学生信息包括:学号、姓名、性别、年龄、班级等信息。考勤信息包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假和旷课)。2、功能要求(1)添加功能:程序能够添加学生的记录和缺课记录,提供选择界面供用户选择所要添加的类别。添加学生记录时,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。(2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。还可以按课程名、学生姓名对缺课记录进行查询。(3)显示功能:可显示当前系统中
2、所有学生的记录和缺课记录,每条记录占据一行。(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。(5)删除功能:主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。(6)统计功能:能根据多种参数进行统计。能按课程名统计出学生旷课的信息、还可以按姓名统计出任一学生的旷课情况。需要排序。(7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。(8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。目 录一、需求分析61.系统设计目的与意义62.系统功能需求(系统流程图)63.系统功能流程图74.输入输出的
3、要求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)如果检索不到相应的信息应提示用户。二、 总体分析系统功能分析能够从屏幕上读取一个学生的信息和缺课信息并将信息存入到数据文件中。能够将指定的信息从文件中删除。能够按编号、姓名对学生的信息进行检索并将检索结果显示在屏幕上。可以统计全部学生缺课次数,及其缺课类型。要求有错误提示功能。如果检索不到相应的信息应提示用户。 三、详细设计1.类设计:类:Person 数据成员学号,姓名,性别,年龄,班级缺课类型,缺课次数,
5、指针域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; /从键盘输入数据 virtual void Input(ifstream& ifs)=0; /从文件输入
6、数据 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成员函数:Tercher()void Input()void Input(ifstream& ifs)void Ou
7、tput(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 Output(ofstream& ofs)double Incoming()请假类:class Manager:virtual pu
8、blic 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 Teacher,public Assistant成员函数:Teacher_Assistant()void Input()void In
9、put(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(); /析构 void Add(); /退出 void Delete(); /删除 void Modify(); /修改 void Print(); /输出
10、void Save(); /信息存盘 void Load(); /信息装入 void Find(); /查找 void Build(); /导引 void Stat(); /统计四、 界面设计与各功能模块的实现1. 界面设计1.界面设计程序运行后会出现一个简捷的窗口,便于用户查询数据。2.功能模块实现设计通过主窗体调用其他窗体。应用系统主控界面包括学生信息录入,查找等功能模块。学生信息录入功能完成学生信息和成绩的输入。记录查询功能可以对数据各分类的记录进行查询。具体举例如下:1) 输入函数:void Input() cout<<"n学号:" cin>>
11、;num; cout<<"n姓名:" cin>>Name; cout<<"n性别:" cin>>sex; cout<<"n年龄:" cin>>old; cout<<"n班级:" cin>>G; cout<<"n第几节课:" cin>>Hours; Salary=Incoming(); 2)删除函数void school:del()student *p,*p2;int num;c
12、out<<"请输入编号: "cin>>num;if( !find(&p,num,"") )cout<<"SORRY!找不到你要删除的内容!"<<endl;return;(p->next)->output();p2=p->next;p->next=p2->next;delete p2;school:setkey(1);2. 类的派生之间的示意图TercherAssitantMannagerTercher_AssitantPerson五、 系统调试1.首
13、页进入学生考勤管理系统主菜单2录入学生信息界面:3.显示学生信息界面:4.修改学生信息六、 使用说明及心得体会此次c+课程设计,在指导教师的精心教导下,我学会了如何用C+编写一个简单的应用程序。首先要对程序的设计要求有一个比较明确的认识,然后系统分析与系统设计,最后是代码设计与调试。程序实现上,设计了简单的查询界面,将各个功能集中出来按照程序编写原则,便于查询。七、附件源文件代码:#include <fstream.h> 文件操作头文件#include <string.h> 字符串流 class Person /人员类(抽象类) protected: double nu
14、m; /学号 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() /基类虚析构 virtual void Input()=0; /从键盘输入数据 virtual void Input(ifstream& ifs)=0; /从文件输入数据 virtua
15、l 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 B;/迟到日期 char Z;/课程名称public: Duty=1; Salary=800; void Input() /键盘补充输入其它数据 cout<<&qu
16、ot;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 Input(ifstream&
17、; ifs) ifs>>num>>Name>>sex>>old>>G>>Duty>>Hours>>Salary; void Output() cout<<num<<"t"<<Name<<"t"<<sex<<"t"<<old<<"t"<<G<<"t"<<Duty<&l
18、t;"t"<<Hours<<"t"<<Salary<<"t"<<endl; void Output(ofstream& ofs) ofs<<num<<"t"<<Name<<"t"<<sex<<"t"<<old<<"t"<<G<<"t"<<D
19、uty<<"t"<<Hours<<"t"<<Salary<<"t"<<endl; double Incoming() if(Hours>120) return Salary+(Hours-120)*20; else return Salary; ; class Assistant:virtual public Person /早退 protected: int Allowance; int Hours; /第几节课 char B;/早退日期 char Z;/
20、课程名称 public: Assistant() Duty=2; Salary=650; Allowance=150; void Input() cout<<"n学号:" cin>>num; cout<<"n姓名:" cin>>Name; cout<<"n性别:" cin>>sex; cout<<"n年龄:" cin>>old; cout<<"n班级:" cin>>G; cou
21、t<<"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"<<sex<<"
22、;t"<<old<<"t"<<G<<"t"<<Duty<<"t"<<Hours<<"t"<<Salary<<"t"<<endl; void Output(ofstream& ofs) ofs<<num<<"t"<<Name<<"t"<<sex<
23、<"t"<<old<<"t"<<G<<"t"<<Duty<<"t"<<Hours<<"t"<<Salary<<"t"<<endl; double Incoming() if(Salary>70) return Salary+Allowance+(Hours-70)*20; else return Salary+Allowance; ;
24、 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<<"n学号:" cin>>num; cout<<"n姓名:" cin>>Name; cout<<"n性别:" cin>
25、;>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>>Salary; void O
26、utput() cout<<num<<"t"<<Name<<"t"<<sex<<"t"<<old<<"t"<<G<<"t"<<Duty<<"t"<<Hours<<"t"<<Salary<<"t"<<endl; class College
27、 private: Person *PL; void Clear(); int College:Cfind(int ID,Person *p1,Person *p2); public: College(); /构造 College(); /析构 void Add(); /退出 void Delete(); /删除 void Modify(); /修改 void Print(); /输出 void Save(); /信息存盘 void Load(); /信息装入 void Find(); /查找 void Build(); /导引 void Stat(); /统计 ; College:Colle
28、ge() /构造函数(创建1个头结点的链表) Person *p=new Teacher; PL=p; cout<<"自动装入数据n" Build(); College:College() /析构函数(仅保留1个头结点) Person *p=PL; while(p) /逐个删除结点,包括头结点 PL=p->next; delete p; p=PL; PL=0; void College:Add() /增加 char c; do cout<<"n* 增加 *n" /查找尾结点 Person *p=PL; Teacher *pt
29、; 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->next=pa; break; case 3: pm=new Manager; pm->Input(); p->next=pm; break; case 4: pta=new Teacher_Assistant; pta->Inpu
30、t(); p->next=pta; break; default: return; cout<<"是否进行循环?y/nn" cin>>c; while(c='y'|c='Y'); Save(); /查找 void College:Find() double ID; Person *p1; Person *p2; cout<<"输入你要查询的编号:" cin>>ID; p1=PL->next; p2=PL; while(p1) if(p1->num=ID) b
31、reak; /找到 else p2=p1; /继续查找 p1=p1->next; if(!p1) cout<<"找不到你所查询的人!n请确认你所查询的编号是否出错!n"return; else cout<<"n* 出勤信息表 *n" cout<<"学号 姓名 性别 年龄 班级 缺课类型 缺课次数n" p1->Output(); /查找缺课结点(返回1-找到,0-未找到.结点指针由p1返回,p2为前看指针) int College:Cfind(int ID,Person *p1,Perso
32、n *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; Person *p1,*p2; cout<<"编号:" cin>>num; if(!Cfind(num,&p1,&p2) cout<<
33、;"指定的人员没有找到!n" else p2->next=p1->next; /连接 delete p1; cout<<"正确删除!n" Save(); void College:Modify() /修改 cout<<"n* 修改 *n" int num; Person *p1,*p2; cout<<"编号:" cin>>num; if(!Cfind(num,&p1,&p2) cout<<"指定的人员没有找到!n&qu
34、ot; else p1->Output(); /输出原来的出勤信息(做提示) p1->Input(); /输入新的出勤信息(更新) cout<<"修改完成!n" Save(); void College:Print() /输出出勤信息 cout<<"n* 出勤信息表 *n" cout<<"学号 姓名 性别 年龄 班级 缺课类型 缺课次数n" Person *p=PL->next; if(!p) cout<<"无出勤记录!n" return; whil
35、e(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(); /关闭文件 cout<<"职工信息已经保存在Person.dat.n" void College:Build() /出勤信息 char buf81; /临时空间 in
36、t 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: p2=new Teacher; break; case 2: p2=new Assistant; break; case 3: p2=new Manager; break; case
37、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* 出勤信息录入 *n" do cout<<"输入要录入的出勤人员个数:n" cin>>c; for(int i=1;i<=c
38、;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 Teacher; pt->Input(); p->next=pt; break; case 2: pa=new Assistant; pa->Inpu
39、t(); 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; p2=PL; while(p1) if(p1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《留置针使用规范》课件
- 《小数数位顺序表》课件
- 八下期中测试卷01【测试范围:第1-11课】(原卷版)
- 旅游行业导游讲解培训总结
- 2006年江苏高考语文真题及答案
- 年度目标设定与实现路径计划
- 幼儿园工作总结用心呵护温馨成长
- 《焊工基础知识》课件
- 2023年-2024年新员工入职前安全教育培训试题附参考答案(夺分金卷)
- 厨师个人述职报告15篇
- GB/T 18490.1-2017机械安全激光加工机第1部分:通用安全要求
- GB/T 16895.32-2008建筑物电气装置第7-712部分:特殊装置或场所的要求太阳能光伏(PV)电源供电系统
- 气压治疗仪的使用方法课件
- 《护理交接班制度》课件
- 重庆九龙坡区2022-2023学年高一物理第一学期期末质量跟踪监视试题含解析
- 食材配送投标服务方案
- 建筑施工现场农民工维权告示牌
- 医疗医学医生护士工作PPT模板
- 口腔门诊规章制度.-口腔诊所12个规章制度
- ppt模板:创意中国风古风水墨山水通用模板课件
- 纺纱学-ppt课件
评论
0/150
提交评论