学生考勤标准管理系统.doc
《学生考勤标准管理系统.doc》由会员分享,可在线阅读,更多相关《学生考勤标准管理系统.doc(25页珍藏版)》请在咨信网上搜索。
一、设计内容和设计要求 1.设计内容:学生考勤管理系统 1、问题描述 学生信息包含:学号、姓名、性别、年纪、班级等信息。 考勤信息包含:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假和旷课)。 2、功效要求 (1)添加功效:程序能够添加学生统计和缺课统计,提供选择界面供用户选择所要添加类别。添加学生统计时,要求学号要唯一,假如添加了反复学号统计时,则提醒数据添加反复并取消添加。 (2)查询功效:可依据学号、姓名等信息对已添加学生统计进行查询,假如未找到,给出对应提醒信息,假如找到,则显示对应统计信息。还能够按课程名、学生姓名对缺课统计进行查询。 (3)显示功效:可显示目前系统中全部学生统计和缺课统计,每条统计占据一行。 (4)编辑功效:可依据查询结果对对应统计进行修改,修改时注意学号唯一性。 (5)删除功效:关键实现对已添加学生统计进行删除。假如目前系统中没有对应统计,则提醒“统计为空!”并返回操作。 (6)统计功效:能依据多个参数进行统计。能按课程名统计出学生旷课信息、还能够按姓名统计出任一学生旷课情况。需要排序。 (7)保留功效:可将目前系统中各类统计存入文件中,存入方法任意。 (8)读取功效:可将保留在文件中信息读入到目前系统中,供用户进行使用。 目 录 一、需求分析 6 1.系统设计目标和意义 6 2.系统功效需求(系统步骤图) 6 3.系统功效步骤图 7 4.输入输出要求 7 二、总体分析 7 1. 系统功效分析 8 2.系统功效结构图 8 三、具体设计 9 1.类设计: 11 四、界面设计和各功效模块实现 12 1. 界面设计 12 五、系统调试 14 1.首页进入学籍管理系统主菜单 14 2录入学生信息缺课界面: 15 3.显示学生信息缺课界面 16 4.查找学生信息界面 17 5.删除学生信息界面 18 6.修改学生信息 18 7.统计学生信息: 19 六、 使用说明及心得体会 20 七、附件 20 一、 需求分析 1.系统功效步骤图 退出 主程序 初始化程序 菜单程序 查找 删除 修改 统计 录入 显示 保留 3.输入输出要求 1.输入要求: 经过主函数体调用其它函数应用系统主控界面包含学生信息录入,查找等功效模块。学生信息录入功效完成学生信息和缺课信息输入。统计查询功效能够对数据各分类统计进行查询。 2.输出要求: 1)能够按编号、姓名对学生信息进行检索并将检索结果显示在屏幕上。 2)能够统计全部学生缺课类型,及其缺课次数。 3)假如检索不到对应信息应提醒用户。 二、 总体分析 系统功效分析 能够从屏幕上读取一个学生信息和缺课信息并将信息存入到数据文件中。能够将指定信息从文件中删除。能够按编号、姓名对学生信息进行检索并将检索结果显示在屏幕上。能够统计全部学生缺课次数,及其缺课类型。要求有错误提醒功效。假如检索不到对应信息应提醒用户。 三、具体设计 1.类设计: 类:Person 数据组员 学号,姓名,性别,年纪,班级缺课类型,缺课次数,指针域 double num; //学号 char Name[20]; //姓名 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; //从文件输入数据 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 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 Output(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 Teacher,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(); //析构 void Add(); //退出 void Delete(); //删除 void Modify(); //修改 void Print(); //输出 void Save(); //信息存盘 void Load(); //信息装入 void Find(); //查找 void Build(); //导引 void Stat(); //统计 四、 界面设计和各功效模块实现 1. 界面设计 1.界面设计 程序运行后会出现一个简捷窗口,便于用户查询数据。 2.功效模块实现设计 经过主窗体调用其它窗体。应用系统主控界面包含学生信息录入,查找等功效模块。学生信息录入功效完成学生信息和成绩输入。统计查询功效能够对数据各分类统计进行查询。 具体举例以下: 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>>Hours; Salary=Incoming(); } 2)删除函数 void school::del() {student *p,*p2; int num; cout<<"请输入编号: "; 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. 类派生之间示意图 Tercher Assitant Mannager Tercher_Assitant Person 五、 系统调试 1.首页进入学生考勤管理系统主菜单 2录入学生信息界面: 3.显示学生信息界面: 4.修改学生信息 六、 使用说明及心得体会 此次c++课程设计,在指导老师精心教导下,我学会了怎样用C++编写一个简单应用程序。首先要对程序设计要求有一个比较明确认识,然后系统分析和系统设计,最终是代码设计和调试。程序实现上,设计了简单查询界面,将各个功效集中出来根据程序编写标准,便于查询。 七、附件 源文件代码: #include <fstream.h> 文件操作头文件 #include <string.h> 字符串流 class Person //人员类(抽象类) { protected: double num; //学号 char Name[20]; //姓名 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; //从文件输入数据 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 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班级:"; 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"<<sex<<"\t"<<old<<"\t"<<G<<"\t"<<Duty<<"\t"<<Hours<<"\t"<<Salary<<"\t"<<endl; } void Output(ofstream& ofs) { ofs<<num<<"\t"<<Name<<"\t"<<sex<<"\t"<<old<<"\t"<<G<<"\t"<<Duty<<"\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;//课程名称 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; 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"<<sex<<"\t"<<old<<"\t"<<G<<"\t"<<Duty<<"\t"<<Hours<<"\t"<<Salary<<"\t"<<endl; } void Output(ofstream& ofs) { ofs<<num<<"\t"<<Name<<"\t"<<sex<<"\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; } }; 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>>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 Output() { cout<<num<<"\t"<<Name<<"\t"<<sex<<"\t"<<old<<"\t"<<G<<"\t"<<Duty<<"\t"<<Hours<<"\t"<<Salary<<"\t"<<endl; } 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(); //输出 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->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->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; } cout<<"是否进行循环?y/n\n"; 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) break; //找到 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,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; Person *p1,*p2; cout<<"编号:"; cin>>num; if(!Cfind(num,&p1,&p2)) { cout<<"指定人员没有找到!\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"; } 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; } 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(); //关闭文件 cout<<"职员信息已经保留在Person.dat.\n"; } void College::Build() //出勤信息 { char buf[81]; //临时空间 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: 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** 出勤信息录入 **\n"; do { cout<<"输入要录入出勤人员个数:\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 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->Input(); p->next=pta; break; default: return; } } Save(); cout<<"是否还要继续录入出勤信息?? y/n\n"; 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<<"选择你要统计类别\n[1-类别;2-次数;3-缺课总次数;]\n"; cin>>a; if(a==1) { cout<<"输入你要统计类别:\n[1-迟到,2-早退,3-请假,4-旷课]\n"; cin>>b; p1=PL->next; p2=PL; while(p1) { if(p1->Duty==b) { i++; //找到 p2=p1; //继续查找 p1=p1->next; } else { p2=p1; //继续查找 p1=p1->next; } }cout<<b<<"类缺课次数是:"<<i<<endl; } else if(a==2) { cout<<"输入出勤下限:";cin>>c; cout<<"\n输入出勤上限:";cin>>d; p1=PL->next; p2=PL; while(p1) { if(p1->Salary>=c&&p1->Salary<=d) { p1->Output();//找到 p2=p1; //继续查找 p1=p1->next; } else { p2=p1; //继续查找 p1=p1->next; } else if(a==3) { Person *p=PL->next; while(p) //遍历链表 { Sa=Sa+(p->Salary); p=p->next; } cout<<"缺课总数是:"<<Sa<<endl; } else if(a==4) { Person *p=PL->next; while(p) { i=i+1; p=p->next; } cout<<"缺课次数是:"<<i<<endl; cout<<"统计完成!!!\n"; } void main() { char ch; College c; //定义大学对象 do { cout<<"\n☆☆ 学生考勤管理系统 ☆☆\n"; cout<<"1-添加\n"; cout<<"2-查询\n"; cout<<"3-编辑\n"; cout<<"4-删除\n"; cout<<"5-统计\n"; cout<<"6-读取\n"; cout<<"7-退出\n"<<"请选择:\n"; cin>>ch; switch(ch) { case '1': c.Load(); break; case '2': c.Find(); break; case '3': c.Modify(); break; case '4': c.Delete(); break; case '5': c.Stat(); break; case '6': c.Print(); break; case '7': c.Add; break; } }while(ch!='7'); }- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 考勤 标准 管理 系统
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【人****来】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【人****来】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【人****来】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【人****来】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文