




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件学院课程设计报告书课程名称软件工程概论设计题目**大学档案馆学生学籍管理系统的分析与设计专业班级学号姓名指导教师成绩20年12月1设计时间 32设计目的 33设计任务 34设计内容 34.1需求分析 34.1.1总体目标 34.1.2具体目标 34.1.3系统功能建模(数据流程图) 44.1.4数据字典 54.2总体设计(系统层次图) 94.3详细设计 94.3.1模块详细设计 95总结与展望 13参考文献 14成绩评定 141设计时间2设计目的使学生掌握软件工程的基本原理和基本方法,充分理解和掌握软件工程学的概念、原理、方法和技术。3设计任务本课程设计要求学生运用软件工程的思想,严格按照软件生命周期各阶段的目的和任务,完成对系统的分析和设计。4设计内容4.1需求分析4.1.1总体目标总体需求目标是在企业需求分析、考察调研和工程基本原则大体确定后进行的设计。XX大学生档案馆学生学籍管理系统在总体需求目标方面,以档案馆的基本需求和关键需求为重点。基本需求是档案馆正常的作业规范和业务流程的概念组合,关键需求是档案馆全部管理流程中重要环节和重要路线的概要抽取。如果没有基本需求就没有档案馆的总体的作业管理,而没有关键需求也就没有了档案馆的经营管理特色和个性。所以,建立一套完善的大学生档案馆学生学籍管理系统,来解决当前的需求是现阶段的总体目标。4.1.2具体目标(1)学生档案管理系统的完善。(2)档案管理人员工作环境的改善。(3)档案管理的高效率。(4)学生档案更加安全。(5)学生档案更便于管理。学生学籍管理是教学管理中重要的组成部分,随着院校学生规模的日益增大、大量的信息处理的现实面前已呈现出无法应对的局面。因此,建立一套档案馆学生学籍管理系统具有十分重要的意义和实际应用的迫切性,而且现有的条件、管理理念和技术水平已使之成为可能。开发该学籍管理系统是为了更好地管理学生的档案,便于学生档案的录入、管理、输出和安全等。使学生档案管理工作系统化、规范化、自动化,从而达到提高档案管理效率的目的。4.1.3系统功能建模(数据流程图)数据流程图是描述系统数据流程的工具,它将数据独立抽象出来,通过图形方式描述信息的来龙去脉和实际流程。为了描述复杂的软件系统的信息流向和加工,可采用分层的DFD来描述,分层DFD有顶层,中间层、底层之分。(1)顶层。决定系统的范围,决定输入输出数据流,它说明系统的边界,把整个系统的功能抽象为一个加工,顶层DFD只有一张。(2)中间层。顶层之下是若干中间层,某一中间层既是它上一层加工的分解结果,又是它下一层若干加工的抽象,即它又可进一步分解。(3)底层。若一张DFD的加工不能进一步分解,这张DFD就是底层的了。底层DFD的加工是由基本加工构成的,所谓基本加工是指不能再进行分解的加工。数据流程图的基本成分:系统的外部实体、处理过程、数据存储和系统中的数据流。数据流程图中的图形元素:数据的源点/终点数据的处理数据存储数据流结果数据记录学生学籍记录结果数据记录学生学籍记录备份文件正确密码权限密码操作员管理员P1.1.1验证已输入信息处理P1.1.2登陆失败处理P1.2.1新数据添加P1.2.2原有数据修改P2.1.2原有数据项修改P2.3.3数据查询P2.3.2还原数据P2.3.1备份数据学生档案P2.1.1新数据项录入图4-1XX大学生档案馆学生学籍管理数据流程图4.1.4数据字典数据字典是对数据流图的解释和说明,包含的内容如下:(1)数据元素(数据流分量)。数据元素是不可再分的数据单位,一般而言,包括如下内容:数据项描述={数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系,数据项之间的联系}。其中,后两项定义了数据的完整性约束条件,用于数据校验。名字:学生学籍档案别名:描述:一个学生从入学到工作的基本信息名字:学生学籍档案别名:描述:一个学生从入学到工作的基本信息数据类型:字符型、数值型定义:学生学籍=毕业生基本信息档案+派遣信息的档案+招生信息的档案+论文信息的档案(2)数据流。是数据结构在系统内传输的路径。对数据流的描述通常包括如下内容:{数据流名,说明,编号,数据流来源,数据流去向,组成(数据结构)}名字:权限分配描述:确保学籍档案的安全性,任何人不得随意的更改或删除信息编号:F4组成:用户密码、用户的身份验证、姓名名字:档案的统计、搜索描述:查询大学生档案的信息名字:权限分配描述:确保学籍档案的安全性,任何人不得随意的更改或删除信息编号:F4组成:用户密码、用户的身份验证、姓名名字:档案的统计、搜索描述:查询大学生档案的信息编号:F2组成:档案号、姓名、学号、专业、学院、性别、统计学生入学、毕业的年份、培养层次、进行数量统计名字:查询(选定条件查询)描述:查询了解大学生派遣信息、招生信息、论文信息、用户信息的情况编号:F3组成:档案号、姓名、派遣信息、单位名称、考试科目、论文题目、用户密码名字:添加、更改、删除信息描述:确保大学生档案信息的准确编号:F1组成:档案号、姓名、学号、专业、学院、性别、派遣信息、单位名称、考试科目、论文题目、用户密码(3)数据存储。数据存储是数据结构停留或保存的地方。也是数据流的来源和去向之一。可以是手工文档或手工凭单,也可以是计算及文档。一般而言,应包括如下内容:{数据存储名,说明,编号,输入的数据流,输出的数据流,组成(数据结构),数据量,存取频度,存取方式}。名字:数据记录描述:一个学生的基本学籍档案信息编号:D名字:数据记录描述:一个学生的基本学籍档案信息编号:D组成:毕业生基本信息、派遣信息、招生信息、论文信息、用户管理、系统管理及维护名字:毕业生基本信息描述:有关毕业生基本档案信息编号:D1组成:学院名称、专业名称、姓名、身份证号、档案号、奖励、惩处名字:派遣信息描述:有关毕业学生派遣信息编号:D2组成:学院名称、专业名称、姓名、身份证号、档案号、派遣单位名称名字:招生信息描述:有关学生招生考试档案的基本信息编号:D3组成:学院名称、专业名称、姓名、身份证号、档案号、学号、考试科目名字:论文信息描述:有关学生论文档案的基本信息编号:D4组成:学院名称、专业名称、姓名、档案号、论文题目、作者姓名名字:用户信息描述:有关用户的基本信息编号:D5组成:姓名、身份证号、登陆密码、修改密码(4)数据处理。处理过程的具体处理逻辑通常在详细设计过程中用判定表或判定树来描述。在数据字典中,只需描述处理过程的说明性信息,通常包括以下内容:{处理过程名,说明,输入数据流,输出数据流,处理}名字:毕业生基本信息管理描述:一个毕业生基本信息的输入、更新、删除等编号:P1输入/输出数据流:毕业生的基本信息名字:毕业生基本信息管理描述:一个毕业生基本信息的输入、更新、删除等编号:P1输入/输出数据流:毕业生的基本信息名字:派遣信息管理描述:一个毕业生毕业后派遣工作编号:P2名字:派遣信息管理描述:一个毕业生毕业后派遣工作编号:P2输入/输出数据流:派遣信息名字:招生信息管理描述:有关学生的招生考试情况编号:P3输入/输出数据流:考试信息、录取信息名字:论文信息管理描述:一个毕业生有关论文的信息编号:P4输入/输出数据流:论文题目、作者姓名名字:用户管理描述:对录入和使用学生学籍管理系统的用户信息进行权限的分配编号:P5输入/输出数据流:用户名、密码4.2总体设计(系统层次图)XX大学档案馆学生XX大学档案馆学生学籍管理系统基本信息管理派遣信息管理招生信息管理论文信息管理用户管理系统管理和维护图4-2XX大学生档案馆学生学籍管理系统层次图4.3详细设计4.3.1模块详细设计(1)毕业生基本信息的管理基本档案的添加:添加学生的基本信息,如档号、姓名、学号、专业、学院等。基本档案的更新:对以输入的学生基本档案的修改。基本档案的删除:删除已在的学生档案。基本档案的查询:可以用所有的字段进行查询。基本档案的批量操作:可以利用查询结果来进行批量更新和删除,也可以全记录更新。基本档案的统计:根据学生入学,毕业的年份,所属学院,培养层次,进行数量统计,并以图形的形式表示出来。(2)、派遣信息的管理:派遣信息的输入:输入学生的派遣信息,包括档号、单位等。派遣信息的查询:对指定的条件进行查询。派遣信息的删除:删除已有的学生派遣信息。派遣信息的更新:对以输入的学生派遣信息的修改。(3)、招生信息的管理:招生信息的输入:输入执行信息的学号,姓名,考试科目等。执行信息的删除:删除已有的执行信息。招生信息的更新:对以输入的招生信息修改。招生信息的查询:对指定的条件进行查询。(4)、论文信息的管理论文信息的输入:输入论文信息的作者名,论文题目等。论文信息的删除:删除已有的论文信息。论文信息的更新:对以输入的论文信息修改。论文信息的查询:对指定的条件进行查询。(5)、用户管理:用户信息的输入:录入使用系统的用户信息的用户权限的分配。用户信息的删除:删除已有的用户信息。用户密码的更新:更新用户密码。用户权限的分配:分配用户使用系统的权限。(6)、系统管理和系统维护:编码表管理:管理系统所用的编码信息。数据库备份:对数据库备份和还原。一、模块定义模块是软件结构的基础,软件结构的好坏完全由模块的属性体现出来把软件模块化的目的是为了降低软件复杂性,使软件设计,测试,调试、维护等工作变得简易,但随着模块数目的增加,通过接口的连接这些模块的工作量也随之增加二、输入项目姓名、学号、身份证号、密码、学院名称、专业名称三、输出项目学籍号、学籍档案、档案信息四、程序过程设计F学生姓名、密码TF学生姓名、密码T学籍信息、学籍号提示信息输入错误输入、姓名密码输入学生新的基本信息并确认TF存入学生管理系统输入学生基本信息提示信息错误图4-3XX大学生档案馆学生学籍管理盒图F7毕业生基本信息管汇总F8F7毕业生基本信息管汇总F8派遣信息的管理汇总F6系统管理及维护F5用户管理F4论文信息的管理F9招生信息的管理汇总F1毕业生基本信息管理F10论文信息的管理汇总F2派遣信息的管理F3招生信息的管理E2操作员P0XX学校学生学籍管理系统图4-4XX大学生档案馆学生学籍管理数据流图(顶层图)E1管理员F19显示派遣信息F14F19显示派遣信息F14输入个人信息F11基本档案添加F12基本档案更新F13基本档案删除E1管理员E2操作员F14输入个人信息F15显示基本档案F16派遣信息的输入F17派遣信息的更新F18派遣信息的删除E1管理员E2操作员P1毕业生信息管理系统P2派遣信息管理图4-5XX大学生档案馆学生学籍管理数据流图(一、二层)5总结与展望这次软件工程概论课程设计,我主要设计了XX大学档案馆的学生学籍管理系统。通过这次软件工程课程设计,我对于软件工程设计的相关步骤和流程有了更深刻的理解,熟悉并掌握了软件工程的相关知识。同时,我也发现自己对于软件工程知识掌握的还不够,设计能力还有待于进一步提高。这次课程设计给了我一个锻炼自己,强化专业知识的机会。通过这次课程设计,我也认识到了自己的不足之处。但我相信,只要认真学习,多借鉴别人的经验,多思考,多实践,就能把自己的分内事做好。参考文献[1]郑人杰,殷人昆,陶永雷。实用软件工程[M].北京:清华大学出版社,2004.[2]杨公之主编。档案信息化建设实务。中国档案出版社,2003.[3]蒋方帅.BorlandDelphi程序设计[M].北京:清华大学出版社,2002.[4]王珊,陈红。数据库系统原理教程[M].北京:清华大学出版社,2002.[5]冯惠玲、张辑哲主编.档案学概论。中国人民大学出版社,2003.[6]陈豫龙,何旭洪。数据库系统开发实例导航[M].北京:人民邮电出版社,2004.[7]傅荣校。档案管理现代化。浙江大学出版社,2000.[8]张海藩.软件工程导论(第四版).北京:清华大学出版社,2003年12月[9]岳庆生。Delphi高级编程技巧[M].北京:清华大学出版社,2000.成绩评定成绩教师签字日期和时间课程设计报告功能1.1课程设计题目功能:定义了日期类、时间类和日期时间综合类,重载了+、-、++、--、=、>=、<=、==、!=等运算符,可以设置时间、日期,比较时间和日期的大小,可以进行时间、日期对象的运算(加减),并按多种格式输出结果。1.2思想和方法:通过重载运算符使运算符实现对对象的加减运算,并在结果输出时自动载入闰年判断程序,实现结果的智能化输出;将菜单输出和结果输出隔开,防止混淆;日期类中将星期五单独定义,实现对错误的处理;通过拷贝函数的运用,实现“+”、“-”的重载。1.3增加的新功能:增加了对运算起始日期时间的修改和各操作菜单的退出功能。详细设计2.1c_Time类:重载了+、-、++、--、==、!=、<、>、<=、>=运算符;将时间是否超过或少于当天设置为静态静态成员函数,设置了两个输出函数;“-”中,优化了结构,以四行将原程序代替,将少于一天的情况在后面列出;“+”中,将数值超过范围的情况的处理在后面列出。2.2c_Date类:重载了+、-、++、--、==、!=、<、>、<=、>=运算符;设置了两个输出函数;简化了“+”运算符,同时修正了错误;“+”“-”中,将数值超过范围的情况的处理在后面列出;在第一个函数中,对当前时间日期进行了赋值,是起始日期时间的设定函数。2.3TDmanage类:重载了+、-、++、--、==、!=、<、>、<=、>=运算符;设置为c_Time和c_Date的派生类,可以实现对时间和日期的混合加减比较。2.4TDglobal类:为输入输出的专门的类,重载了<<,>>运算符。2.5error类:为专门处理错误的类,包括对原日期时间少于1900的处理,以及在“+”、“-”中结果少于1900的处理,以及输出时日期时间少于1900的处理。2.6main类:以swith型进行菜单的输出,主要是对所有程序的综合处理,对菜单项的编辑,是最后的运行程序。调试过程3.1出现了编译时无问题,而调试时提示没有相关函数的问题,编译结束后载入相关文件解决了问题。3.2无法有效退出,将函数改为swith型解决问题。3.3出现了输出结果与预期不符的状况,更改了输出变量名解决问题。3.4最开始时没有设置对“+”的错误类进行设置,由于不太可能遇到相关情况,没有注意,后来看课本才发现。输入输出开始界面时间格式的更改与否主操作菜单时间类操作,以“+”为例其后继续为主操作菜单日期类操作,以“-”为例综合类操作,以比较为例总结本程序大量运用了运算符的重载,并且用到了多文件的处理,对以后处理或创建大程序很有帮助。而且运算符重载实际上是有很多技巧的,最一般的“+”“-”重载,需要考虑输入的数据的类型及对输出结果的要求。另外错误处理也是个难关,即“error”类,不仅要考虑原日期时间的处理,还要考虑对运算符错误的处理,很有可能会落下某些情况,需要不断调试以保证每种情况都考虑到了。这个程序对个人对类处理必须相当熟悉,几乎将所有可能的情况都涉及了,而且难度不算太大,对于刚接触c++没有太长时间的我们是个很好的练习课程。附件源程序://cTime_t.hBegin#include<iostream.h>#include<time.h>#ifndefcTime_t_h#definecTime_t_hclasscTime_t{ staticintFlagMoreDay; staticintFlagLessDay; staticintformat; intSeconds; intMinutes; intHours; structtm*CurrentTime; time_ttime_date;public: cTime_t(); cTime_t(constcTime_t&T); cTime_t(inthour,intmin=0,intsec=0):Seconds(sec),Minutes(min),Hours(hour){};~cTime_t(){}; constcTime_t&operator=(constcTime_t&T);inlinevoidSetSec(intsec){Seconds=sec;} inlinevoidSetMin(intmin){Minutes=min;} inlinevoidSetHour(inthour){Hours=hour;} voidprint()const; voidprint1()const; inlineintGetSec()const{returnSeconds;} inlineintGetMin()const{returnMinutes;} inlineintGetHour()const{returnHours;} intgetFlagMoreDay(){returnFlagMoreDay;} intgetFlagLessDay(){returnFlagLessDay;} voidresetFlagMoreDay(){FlagMoreDay=0;} voidresetFlagLessDay(){FlagLessDay=0;} booloperator<(constcTime_t&T)const; booloperator<=(constcTime_t&T)const; booloperator>(constcTime_t&T)const; booloperator>=(constcTime_t&T)const; booloperator==(constcTime_t&T)const; booloperator!=(constcTime_t&T)const; constcTime_toperator+(constcTime_t&T)const; intoperator-(cTime_t&T); constcTime_toperator+(intNewMinutes); constcTime_toperator-(intNewMinutes); intgetformat1(){returnformat;} voidoperator++(); voidoperator--();staticvoidChangeFormat(){format=(format==1)?2:1;}//formatcanbeonly1or2 friendostream&operator<<(ostream&out,constcTime_t&T);friendistream&operator>>(istream&in,cTime_t&T); friendclasscTDmanage;};#endif//cTime_t.hEnd//cTime_t.cpp//implementationofcTime_t#include"cTime_t.h"intcTime_t::format=1;intcTime_t::FlagMoreDay=0;//defaultvaluesforstaticdatamembersintcTime_t::FlagLessDay=0;//cTime_t::cTime_t()//emptyc'tor{ time_date=time(0); CurrentTime=localtime(&time_date); Seconds=CurrentTime->tm_sec; Minutes=CurrentTime->tm_min; Hours=CurrentTime->tm_hour;}//cTime_t::cTime_t(constcTime_t&T)//copyc'tor{ Seconds=T.Seconds; Minutes=T.Minutes; Hours=T.Hours;}//constcTime_t&cTime_t::operator=(constcTime_t&T)//operator=function{ Seconds=T.Seconds; Minutes=T.Minutes;//copyreleventfields Hours=T.Hours; return*this;}//voidcTime_t::print()const//printfunction{ switch(format) { case1: if(Seconds<10&&Minutes<10) cout<<"Thetimeis:"<<Hours<<":0"<<Minutes<<":0"<<Seconds<<"."<<endl; elseif(Seconds<10) cout<<"Thetimeis:"<<Hours<<":"<<Minutes<<":0"<<Seconds<<"."<<endl; elseif(Minutes<10) cout<<"Thetimeis:"<<Hours<<":0"<<Minutes<<":"<<Seconds<<"."<<endl; else cout<<"Thetimeis:"<<Hours<<":"<<Minutes<<":"<<Seconds<<"."<<endl; break; case2: if(Hours<=12) { if(Seconds<10&&Minutes<10) cout<<"Thetimeis:"<<Hours<<":0"<<Minutes<<":0"<<Seconds<<"AM."<<endl; elseif(Minutes<10) cout<<"Thetimeis:"<<Hours<<":0"<<Minutes<<":"<<Seconds<<"AM."<<endl; elseif(Seconds<10) cout<<"Thetimeis:"<<Hours<<":"<<Minutes<<":0"<<Seconds<<"AM."<<endl; else cout<<"Thetimeis:"<<Hours<<":"<<Minutes<<":"<<Seconds<<"AM."<<endl; } else { if(Seconds<10&&Minutes<10) cout<<"Thetimeis:"<<Hours-12<<":0"<<Minutes<<":0"<<Seconds<<"PM."<<endl; elseif(Minutes<10) cout<<"Thetimeis:"<<Hours-12<<":0"<<Minutes<<":"<<Seconds<<"PM."<<endl; elseif(Seconds<10) cout<<"Thetimeis:"<<Hours-12<<":"<<Minutes<<":0"<<Seconds<<"PM."<<endl; else cout<<"Thetimeis:"<<Hours-12<<":"<<Minutes<<":"<<Seconds<<"PM."<<endl; } break; default: cout<<"Theformatisnotok"<<endl;//error(ifformatvaluewasn'toneoftheabove }}//voidcTime_t::print1()const//printfunction{ switch(format) { case1: if(Seconds<10&&Minutes<10) cout<<Hours<<":0"<<Minutes<<":0"<<Seconds<<"."<<endl; elseif(Seconds<10) cout<<Hours<<":"<<Minutes<<":0"<<Seconds<<"."<<endl; elseif(Minutes<10) cout<<Hours<<":0"<<Minutes<<":"<<Seconds<<"."<<endl; else cout<<Hours<<":"<<Minutes<<":"<<Seconds<<"."<<endl; break; case2: if(Hours<=12) { if(Seconds<10&&Minutes<10) cout<<Hours<<":0"<<Minutes<<":0"<<Seconds<<"AM."<<endl; elseif(Minutes<10) cout<<Hours<<":0"<<Minutes<<":"<<Seconds<<"AM."<<endl; elseif(Seconds<10) cout<<Hours<<":"<<Minutes<<":0"<<Seconds<<"AM."<<endl; else cout<<Hours<<":"<<Minutes<<":"<<Seconds<<"AM."<<endl; } else { if(Seconds<10&&Minutes<10) cout<<Hours-12<<":0"<<Minutes<<":0"<<Seconds<<"PM."<<endl; elseif(Minutes<10) cout<<Hours-12<<":0"<<Minutes<<":"<<Seconds<<"PM."<<endl; elseif(Seconds<10) cout<<Hours-12<<":"<<Minutes<<":0"<<Seconds<<"PM."<<endl; else cout<<Hours-12<<":"<<Minutes<<":"<<Seconds<<"PM."<<endl; } break; default: cout<<"Theformatisnotok"<<endl;//error(ifformatvaluewasn'toneoftheabove }}//boolcTime_t::operator<(constcTime_t&T)const//operator<function{ if(Hours<T.Hours) returntrue; if(Hours==T.Hours) { if(Minutes<T.Minutes) returntrue; if(Minutes==T.Minutes) return(Seconds<T.Seconds); } returnfalse;}//boolcTime_t::operator<=(constcTime_t&T)const//operator<=function{ if(Hours<T.Hours) returntrue; if(Hours==T.Hours) { if(Minutes<T.Minutes) returntrue; if(Minutes==T.Minutes) return(Seconds<=T.Seconds); } returnfalse;}//boolcTime_t::operator>(constcTime_t&T)const//operator>function{ if(Hours>T.Hours) returntrue; if(Hours==T.Hours){ if(Minutes>T.Minutes) returntrue; if(Minutes==T.Minutes) return(Seconds>T.Seconds); } returnfalse;}// boolcTime_t::operator>=(constcTime_t&T)const//operator>=function{ if(Hours>T.Hours) returntrue; if(Hours==T.Hours) { if(Minutes>T.Minutes) returntrue; if(Minutes==T.Minutes) return(Seconds>=T.Seconds); } returnfalse;}//boolcTime_t::operator==(constcTime_t&T)const//operator==function{ return((Hours==T.Hours)&&(Minutes==T.Minutes)&&(Seconds==T.Seconds));}//boolcTime_t::operator!=(constcTime_t&T)const//operator!=function{ return!((Hours==T.Hours)&&(Minutes==T.Minutes)&&(Seconds==T.Seconds));}//constcTime_tcTime_t::operator+(constcTime_t&T)const//operator+function{ intHourTemp,MinuteTemp,SecondTemp;//define3tempvariablestogettimedata SecondTemp=Seconds+T.Seconds; if(SecondTemp>=60)//morethrn1minute { SecondTemp-=60; MinuteTemp=Minutes+T.Minutes+1;//soaddtominute } else MinuteTemp=Minutes+T.Minutes; if(MinuteTemp>=60)//morethen1hour { MinuteTemp-=60; HourTemp=Hours+T.Hours+1;//addtohour } else HourTemp=Hours+T.Hours; if(HourTemp>=24) { FlagMoreDay=1;//toadddaytodateclass HourTemp-=24; } return(cTime_t(HourTemp,MinuteTemp,SecondTemp));//returnlocaltimeclass}//intcTime_t::operator-(cTime_t&T){ intnewhour,newminute; newhour=Hours-T.Hours; newminute=Minutes-T.Minutes; returnnewhour*60+newminute;}/*constcTime_tcTime_t::operator-(constcTime_t&T)const//operaor-function{ intHourTemp,MinuteTemp,SecondTemp;//define3tempvariablestogettimedata HourTemp=Hours-T.Hours; if(HourTemp<0)//TclasshourwasbiggerthenTHISclass { FlagLessDay=1;//tocut1dayformdateclass HourTemp+=24;//add24hourstopreviousday } MinuteTemp=Minutes-T.Minutes; if(MinuteTemp<0)//sameforminutes { MinuteTemp+=60; --HourTemp; } SecondTemp=Seconds-T.Seconds; if(SecondTemp<0)//sameforseconds { SecondTemp+=60; --MinuteTemp; } return(cTime_t(HourTemp,MinuteTemp,SecondTemp));//returnlocalclass}*///voidcTime_t::operator++()//operator++function{ if((Seconds==59)&&(Minutes==59)&&(Hours==23))//endofaday { FlagMoreDay=1;//toadddaytodayclass Seconds=0; Minutes=0; Hours=0; } elseif((Seconds==59)&&(Minutes==59))//endofhour { Seconds=0; Minutes=0; ++Hours; } elseif(Seconds==59)//endofminute { Seconds=0; ++Minutes; } else ++Seconds;}//voidcTime_t::operator--()//operator--function{ if((Seconds==0)&&(Minutes==0)&&(Hours==0))//startofday { FlagLessDay=1;//tosubstruct1dayfromdayclass Seconds=59; Minutes=59; Hours=23; } elseif((Seconds==0)&&(Minutes==0))//startofhour { Seconds=59; Minutes=59; --Hours; } elseif(Seconds==0)//startofminute { Seconds=59; --Minutes; } else --Seconds;}constcTime_tcTime_t::operator+(intNewMinutes){ intHourTemp,MinuteTemp,SecondTemp; SecondTemp=Seconds; HourTemp=Hours; MinuteTemp=Minutes+NewMinutes; while(MinuteTemp>=60) { MinuteTemp-=60; HourTemp+=1; while(HourTemp>=24) { HourTemp-=24; FlagMoreDay+=1; } } return(cTime_t(HourTemp,MinuteTemp,SecondTemp));}constcTime_tcTime_t::operator-(intNewMinutes){ intHourTemp,MinuteTemp,SecondTemp; SecondTemp=Seconds; HourTemp=Hours; MinuteTemp=Minutes-NewMinutes; while(MinuteTemp<0) { MinuteTemp+=60; HourTemp-=1; while(HourTemp<0) { HourTemp+=24; FlagLessDay=1; } } return(cTime_t(HourTemp,MinuteTemp,SecondTemp));}//cTime_t.cppend//cDate_t.hBegin#include<iostream.h>#include<time.h>#ifndefcDate_t_h#definecDate_t_h#defineN3classcDate_t{ enumDays{Saturday,Sunday,Monday,Tuesday,Wensday,Thursday,Friday}; enumMonths{None,January,February,Mars,April,May,June,July,August,September,October,November,December}; staticintformat; staticcharMon[][10]; staticcharDDays[][10]; intDay; intMonth; intYear; structtm*CurrentTime; time_ttime_date; public: boolError; cDate_t(); cDate_t(constcDate_t&D); cDate_t(intyear,intmonth,intday); ~cDate_t(){} constcDate_t&operator=(constcDate_t&D); inlinevoidSetDay(intday){Day=day;} inlinevoidSetMon(intmon){Month=mon;} inlinevoidSetYear(intyear){Year=year;} voidprint(); voidprint1(); inlineintGetDayOfMonth()const{returnDay;} inlineintGetMonth()const{returnMonth;} inlineintGetYear()const{returnYear;} intGetDayOfYear(intyear,intmonth,intday); intGetDaysInMonth(intmonth,intyear); intGetDayOfWeek(); boolIsLeapYear(intyear); char*GetDayOfWeekName(); char*GetNameOfMonth(); intRetriveDay(intDays,intyear); intRetriveMonth(intDays,intyear); booloperator<(constcDate_t&D)const; booloperator<=(constcDate_t&D)const; booloperator>(constcDate_t&D)const; booloperator>=(constcDate_t&D)const; booloperator==(constcDate_t&D)const; booloperator!=(constcDate_t&D)const; constcDate_toperator+(constcDate_t&D); intoperator-(cDate_t&D); constcDate_toperator+(intDays); constcDate_toperator-(intDays); intgetformat2(){returnformat;} voidoperator++(); voidoperator--();staticvoidcDate_t::ChangeFormat()//implementationofstaticfunctionmustbeinheader{ switch(format) { case1: format=2;break; case2:format=3;break; case3: format=1; }} friendostream&operator<<(ostream&out,constcDate_t&D);friendistream&operator>>(istream&in,cDate_t&D); voidSetError(){Error=false;} friendclasscTDmanage;};#endif//cDate_t.hEnd//cDate_t.cppBegin//implementationofcDate_t.h#include"cDate_t.h"#include"error.h"#include<math.h>#definemax(a,b)(((a)>(b))?(a):(b))#definemin(a,b)(((a)<(b))?(a):(b))intcDate_t::format=1;//静态成员变量charcDate_t::Mon[][10]={"Janaury","February","Mars","April","May","Juny","July","August","September","October","November","December"};charcDate_t::DDays[][10]={"Saturday","Sunday","Monday","Tuesday","Wensday","Thursday","Friday"};//cDate_t::cDate_t()//构造函数,赋值当前时间{ SetError(); time_date=time(0); CurrentTime=localtime(&time_date); Day=CurrentTime->tm_mday; Month=CurrentTime->tm_mon+1; Year=CurrentTime->tm_year+1900;}//cDate_t::cDate_t(intyear,intmonth,intday):Year(year),Month(month),Day(day)//c'tor{ SetError(); if(Year<1900)//错误的数字 { Error1(); Error=true; }}//cDate_t::cDate_t(constcDate_t&D)//拷贝的构造函数{ SetError(); Day=D.Day; Month=D.Month; Year=D.Year; if(Year<1900)//错误的数字 { Error1(); Error=true; }}//constcDate_t&cDate_t::operator=(constcDate_t&D)//重载=运算符{ Day=D.Day; Month=D.Month; Year=D.Year; if(Year<1900)//baddatafromtheotherobject { Error1(); Error=true;//置错误标志 } else SetError();//正确 return*this;}//voidcDate_t::print()//输出{ charstr[N]; for(inti=0;i<N;++i) str[i]=Mon[Month-1][i];//将月份的英文赋值进str[] str[i]='\0'; if(Error)//如果日期出错,输出提示信息 { Error2(); return; } switch(format)//判断以什么形式输出 { case1://欧洲格式 cout<<"Thedateis:"<<Day<<"/"<<Month<<"/"<<Year<<"."<<"["<<GetDayOfWeekName()<<"]"<<endl; break; case2://美国格式 cout<<"Thedateis:"<<Month<<"/"<<Day<<"/"<<Year<<"."<<"["<<GetDayOfWeekName()<<"]"<<endl; break; case3://用英文月份形式代替数字 cout<<"Thedateis:"<<Day<<"/"<<str<<"/"<<Year<<"."<<"["<<GetDayOfWeekName()<<"]"<<endl; break; default: cout<<"Theformatisnotok"<<endl; }}//voidcDate_t::print1()//输出{ charstr[N]; for(inti=0;i<N;++i) str[i]=Mon[Month-1][i];//将月份的英文赋值进str[] str[i]='\0'; if(Error)//如果日期出错,输出提示信息 { Error2(); return; } switch(format)//判断以什么形式输出 { case1://欧洲格式 cout<<Day<<"/"<<Month<<"/"<<Year<<"."<<"["<<GetDayOfWeekName()<<"]"<<endl; break; case2://美国格式 cout<<Month<<"/"<<Day<<"/"<<Year<<"."<<"["<<GetDayOfWeekName()<<"]"<<endl; break; case3://用英文月份形式代替数字 cout<<Day<<"/"<<str<<"/"<<Year<<"."<<"["<<GetDayOfWeekName()<<"]"<<endl; break; default: cout<<"Theformatisnotok"<<endl; }}//boolcDate_t::operator<(constcDate_t&D)const//重载<运算符//returntrueifTHISobjectis<thenthesecond{ if(Year<D.Year) returntrue; if(Year==D.Year) { if(Month<D.Month) returntrue; if(Month==D.Month) return(Day<D.Day); } returnfalse;}//boolcDate_t::operator<=(constcDate_t&D)const//重载<=运算符//returntrueifTHISobjectis<=thenthesecond{ if(Year<D.Year) returntrue; if(Year==D.Year) { if(Month<D.Month)returntrue; if(Month==D.Month) return(Day<=D.Day); } returnfalse;}//boolcDate_t::operator>(constcDate_t&D)const//重载>运算符//returntrueifTHISobjectis>thenthesecond{ if(Year>D.Year) returntrue; if(Year==D.Year){if(Month>D.Month) returntrue; if(Month==D.Month) return(Day>D.Day); } returnfalse;}// boolcDate_t::operator>=(constcDate_t&D)const//重载>=运算符//returntrueifTHISobjectis>=thenthesecond{ if(Year>D.Year) returntrue; if(Year==D.Year){ if(Month>D.Month) returntrue; if(Month==D.Month) return(Day>=D.Day); } returnfalse;}//boolcDate_t::operator==(constcDate_t&D)const//重载==运算符//returntrueifTHISobjectandthesecondoneareequalinalltheirdatedatamember{ return((Year==D.Year)&&(Month==D.Month)&&(Day==D.Day));}//boolcDate_t::operator!=(constcDate_t&D)const//重载!=运算符//returntrueifTHISobjectandthesecondonearenotequalinalltheirdatedatamember{ return!((Year==D.Year)&&(Month==D.Month)&&(Day==D.Day));}//constcDate_tcDate_t::operator+(constcDate_t&D)//重载+运算符{ intYearTemp,MonthTemp,DayTemp,NewDays;//存储结果 if(Error||D.Error)//日期对象有错 { Error3();//输出信息 return(cDate_t(-1,-1,-1)); } YearTemp=Year+D.Year;//求年的总数 NewDays=GetDayOfYear(Year,Month,Day)+GetDayOfYear(D.Year,D.Month,D.Day);//getsumofdays if(NewDays>((IsLeapYear(YearTemp))?366:365))//如果月日相加结果大于1年 { NewDays=NewDays-((IsLeapYear(YearTemp))?366:365); YearTemp+=1;//年份加1,知道小于1年 } DayTemp=RetriveDay(NewDays,YearTemp);//retrivethecurrentdayinthespecificmonth MonthTemp=RetriveMonth(NewDays,YearTemp);//samewithmonth return(cDate_t(YearTemp,MonthTemp,DayTemp));}//intcDate_t::operator-(cDate_t&D){ intTemp1,Temp2,NewDays=0; Temp1=GetDayOfYear(Year,Month,Day); Temp2=D.GetDayOfYear(D.Year,D.Month,D.Day); if(Year==D.Year) { NewDays=max(Temp1,Temp2)-min(Temp1,Temp2); } else { for(intTemp3=min(Year,D.Year);Temp3<max(Year,D.Year);Temp3++) { NewDays+=((IsLeapYear(Temp3))?366:365); } if(Year>D.Year) NewDays=NewDays+Temp1-Temp2; else NewDays=-(NewDays+Temp2-Temp1); } returnNewDays;}///*constcDate_tcDate_t::operator-(constcDate_t&D)//operator-function{ intYearTemp,MonthTemp,DayTemp,NewDays,Temp1,Temp2;//variablestostoretonewdateobject if(Error||D.Error)//ifnolessthen1objecthaveorrordata { Error4();//printorrormessege return(cDate_t(-1,-1,-1));//returnerrorclass } YearTemp=Year-D.Year;//substractionofTHISandsecondyear if(YearTemp<1900)//error { Error1();//printerrormessege return(cDate_t(-1,-1,-1));//returnerrorclass } Temp1=GetDayOfYear(Year,Month,Day);//getdaysofyearofTHISobject if(Temp1<0)//error { Error5();//printerrormessege return(cDate_t(-1,-1,-1));//returnerrorclass } Temp2=GetDayOfYear(D.Year,D.Month,D.Day);//getdaysofyearofsecondobject if(Temp2<0)//error { Error5();//printerrormessege return(cDate_t(-1,-1,-1));//returnerrorclass } NewDays=Temp1-Temp2;//ifthedataokgettheirsubstraction if(NewDays<0)//thesubstractionislessthenzero { NewDays=NewDays+((IsLeapYear(YearTemp))?366:365);//setdaysforpreviousyear YearTemp-=1;//sub1year } DayTemp=RetriveDay(NewDays,YearTemp);//retrivethecurrentdayinthespecificmonth MonthTemp=RetriveMonth(NewDays,YearTemp);//samewithmonth return(cDate_t(YearTemp,MonthTemp,DayTemp));//returnlocalclass}*///intcDate_t::GetDayOfYear(intyear,intmonth,intday)//取得日期那年从1月1日起的天数{ intNumOfDay=0;//结果清零 intDaysIn1Month=0;//每月的天数 while(month!=1&&DaysIn1Month!=-1)//循环累加每月的天数 { DaysIn1Month=GetDaysInMonth(month,year); NumOfDay+=DaysIn1Month; month--; } if(DaysIn1Month==-1) return-1;//出错 else returnNumOfDay+day;//返回最后结果}//intcDate_t::GetDaysInMonth(intmonth,intyear)//取得每月的最大天数{ switch(month) { caseJanuary:caseMars:caseMay:caseJuly:caseAugust:caseOctober:caseDecember: return31; caseApril:caseJune:caseSeptember:caseNovember:return30; caseFebruary:if(IsLeapYear(year)) return29; else return28; } return-1;}//intcDate_t::GetDayOfWeek()//1/1/1900是星期一,根据这个日期推断当前日期是星期几{ intweekday=2;//in1/1/1900(saturday==0,sunday==1,) for(intTheYear=1900;TheYear<Year;++TheYear)//从1/1/1900年开始计算 { if(IsLeapYear(TheYear)) weekday=(weekday+366)%7; else weekday=(weekday+365)%7; } for(intTheMonth=1;TheMonth<Month;++TheMonth) weekday=(weekday+GetDaysInMonth(TheMonth,Year))%7; if((weekday+Day)%7==0) return6; else return((weekday+Day)%7-1);}//boolcDate_t::IsLeapYear(intyear)//判断是否为闰年{ return(!(year%4))&&(year%100)||(!(year%400));}//char*cDate_t::GetDayOfWeekName()//转换成星期的英文名{ intWeekday=GetDayOfWeek(); returnDDays[Weekday];}//char*cDate_t::GetNameOfMonth()//转换成月份的英文名{ returnMon[Month-1];}//intcDate_t::RetriveDay(intDays,intyear)//将日期对象的天数换算为真实日期{ intday=Days; intleap=(IsLeapYear(year));//判断改年是否为闰年 intM=(leap)?29:28; for(intmon=1;mon<=12;++mon) { if((day<=31&&(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12))||(day<=30&&(mon==4||mon==6||mon==9||mon==11))||(day<=M&&mon==2)) returnday; else//将每月的天数依次减去,最后剩下的就是真实的天数 day-=GetDaysInMonth(mon,year); } return-1;}//intcDate_t::RetriveMonth(intDays,intyear)//将日期对象的天数换算为真实月份{ intday=Days; intleap=(IsLeapYear(year)); intM=(leap)?29:28; for(intmon=1;mon<=12;++mon) { if((day<=31&&(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12))||(day<=30&&(mon==4||mon==6||mon==9||mon==11))||(day<=M&&mon==2)) returnmon; else day-=GetDaysInMonth(mon,year); } return-1;}//voidcDate_t::operator++()//重载++运算符{ if((Day==GetDaysInMonth(Month,Year))&&(Month==12))//到1年结束 { Day=1; Month=1; ++Year; } elseif((Day==GetDaysInMonth(Month,Year)))//1月结束 { Day=1; ++Month; } else ++Day;}//voidcDate_t::operator--()//重载--运算符{ if((Day==1)&&(Month==1))//1年开始 { Day=31;//12月份为31天 Month=12; --Year; } elseif(Day==1)//1月开始 { --Month; Day=GetDaysInMonth(Month,Year); } else --Day;}constcDate_tcDate_t::operator+(intDays)//重载+运算符{ intYearTemp,DayTemp,MonthTemp,NewDays; intday=Days; YearTemp=Year; NewDays=GetDayOfYear(Year,Month,Day)+day; while(NewDays>((IsLeapYear(YearTemp))?366:365)) { NewDays=NewDays-((IsLeapYear(YearTemp))?366:365); YearTemp+=1; } DayTemp=RetriveDay(NewDays,YearTemp); MonthTemp=RetriveMonth(NewDays,YearTemp); return(cDate_t(YearTemp,MonthTemp,DayTemp));}constcDate_tcDate_t::operator-(intDays){ intYearTemp,Day
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 单位返聘合同范本
- 农村工程改建合同范本
- 农村住房贷款买卖合同范本
- 买卖股份合同范本
- 单位购买服装购买合同范本
- 劳动仲裁聘用合同范本
- 出售废钢 废铁合同范本
- 劳务分包项目合同范本
- 中介甲乙丙方合同范本
- 医药采购合同范例范例
- 蝴蝶兰栽培技术规程
- Unit 4 Time to celebrate 教学设计-2024-2025学年外研版英语七年级上册
- 健康档案模板
- 筋膜刀的临床应用
- DB32-T 4790-2024建筑施工特种作业人员安全操作技能考核标准
- 2022年安徽阜阳太和县人民医院本科及以上学历招聘笔试历年典型考题及考点剖析附带答案详解
- 2024-2030年中国反刍动物饲料行业市场发展趋势与前景展望战略分析报告
- 护理团体标准解读-成人氧气吸入疗法护理
- 幼儿园大班《识字卡》课件
- 2024-2030全球与中国宠物医院市场现状及未来发展趋势
- 《研学旅行课程设计》课件-2认识研学旅行的参与方
评论
0/150
提交评论