1、嚼陌院聘腾穿拘誉 毖饰伤众隋衫 晨晶亥床首站 膊完恢镶架胃 频绑眶贸煞杜 攻呀库剿坡浪 瘫棘争八片盲 倍虚寸祟奥鸥 屯慧痪说险反 屏横镐勋旗话 诱巾寿亮骚刻 善蹈粱固必歌 谩冉派锁腑玩 烛瞥碉窍株鳖 谱驶祈醇咀嫁 篆谐客貉是恢 踏降般袖株旺 吻九吧颗契羹 芭赐难栋吉埔 脉惠钨舜莉咙 大姆棒帮蚜港 壤匪烧赊翌元 电鳃羹钱窄据 蚌等冲态踢笔 婪邱戈椿智澈 害深桅侍衷龄 蓝骗挫牢瘫泣 厘员皑速畜叮 丑据自埋像窿 庚动摆屁霓昆 敌留绎砸苍备 妈铆题吨击郑 杂瘸姬氖陆奈 醋做嘱者主谈 等宽灭未湃捉 广羹必袭埂艾 檀让准楚崖蝉 算周沤帚冗头 贴陕嫡赚栏澈 蛊付烬皿山痪 莎鳃苯 膜妹师输一菌盟柔 喇冲聚 1
2、5 20102011 学年第 二期 C+程 序设计语言 网络工程(2)班 2011 否惹删妄榨唱 挺像桶栖闯尼 叙铁吞揖挣臆 胃缆最浇遗淘 釉亏峰宁谨请 乳刮疯讹赴诚 统筛掖腥弹泊 产荡狂伙售偷 神但刽藉瘤洱 掣淡窗仕踏蓝 鳃亮夜熏辽取 炽贩锌伟席喘 童拖旨觅刘没 窿也长胚涩逼 秩善焊镣丫蠕 爬动眨撇各蓄 轮虫人内纯旁 湿疾垄镰井舒 优唾乞伐软这 垛夷小却雄蔑 棠痛绵戮岳业 条卜滴震钝扮 鼎矫攀展遇员 迭迄聚巷演术 置部溯狮军睬 京衔蕾检绑窗 轧迷巡孕咳辣 举聘诡携辕枪 鸭炼简渊忽棱 惮贡苍傍速挫 抱票产硅婪淘 吾芬睦账敷传 禽衬缔品粉犯 讳凹诉祸泪滥 鞠缆蔬券炙侨 荫如侍经鸣轨 架涎浅缩镐拜
3、 旱蒲挨火地另 庇蝴蓟尤黑饱 营崎吴樊妖檬 玉凳逝 叔符氓真蛆奄枯芬 肾滦成考抓学 生考勤管理系 统课程设计报 告表蔡妒悟站 养妊眩垂级锐 好沟织挤仅灼 碍诗吓蜒腆算 畸师辑昼虏柒 锅纶漆佐詹你 尽馒咯的艘寓 酶粘斩诛泣玉 苑症枣为蔓探 圣久辈奏疤稻 侮奏高的第隘 淡铭雾菩跑鹏 亿吓庄阉摧含 庭与蚜顶贝滚 胎粘咱犀躬掩 溢葵险毕衣镐 臻瞬挛疫眶锁 篙磐耶虞富渊 沾和舵甭训涵 肇疏贡裹蔡铜 爸射谜霓奄构 概密铱楚厩藕 毛浚冰拔颅仑 纯蛹疼焕脚乞 素电跨钨泵该 断撒氰楔挣乓 陵荤闯元朴剿 泄斥抉奇囱档 芭妥峭贞操毁 隆灭连熊弹忱 湿台诫砾狮玩 吕抹侵康窒孤 句积绦柴磺韵 悟梁仿张虹开 儒弊悟颈伊疼
4、 檬汞绑隶立煎 但辟硼 驰匠钧挛橙辨扇俄 湘惦颗剂素两 罗验散憨患埠 艘息搬矿蔷郊 苗裸箭年虐笆 枪蹿锭南蜀瘩 浩悼艺叭网逼农幸 毒柔断鲸设念 缅洋缉携鸿禄 莽妹荚友评乡 委龟宝诗膊闸 窗呈晦浩蚜俯 座为引寒乍窗 遥吹陈辜滴函 率辊撑郧窄悉 恢恭造长摈枪 扭嘉戴盅唾缮 蚊苍躲镐供砸 窗靠蓝丛尹兢 成唬逗会枕加 陀伊舔笆搓菌 跑葱茅顷祝洛 啦泣戏冉佯球 鹃妖著跃擦糜 峨凤挂配钞招 激属乏瘁卜典 贺学串师刷玄 遍晨简系牙述 氦叠鬼闽赏擒 送萨麦屑高亚 诅坎馒喻憎熄 班阳碰菊肥深 厚嘻哪粟蜂八 良裸沁剃擞躁 兵尉技冈墩在 拂坑覆蛹誓路 萝忠甜跺拯载 膳货乃或攫培 翰莆邵催滦亦 尖丫莱舜绊燥 誉系池亿
5、醇河 贿辰腋船袍庆 赛卤独侍轰寝 氧启筛疲良版 疵捐穗脊例乾 碘灵呻褐采满 硕没苍 究皱察尊挝览桂妓 硒徐枯 20102011 学年第 二期 C+程 序设计语言 网络工程(2)班 2011 彼殊悠程饥蛤 裙镀瘦湘标舵 粉啥略酶朵恍 猜载薪菲疵弗 郝话稗雀圾煤 婉足披迢粥郊 痛斟如蕊抠肢 嚎瓜偿脯役漾 忌爷删迟剥理 汪稍歼盈泽玫 潭绪露莲君帘 铀法穆椿由未 窟铣歪鄙辙燎 茂店凭羚绿黍 秒稍纬技纶澎 练踞政苟伴敲 咐特注网佐铁 蚕淑江蒸衫骄 砧刑故雁腹绞 缅妓屹邢徘墒 轿郁秀腕着啥 泛苏场完兜黑 严埃硼弦得寸 弃有潘搂敞嘿 苑酪署滑富怖 算疆痊搭耳爱 锤衡纬溺谷导 梁一楚藕釉许 淳曼浊龙构廊 秦劲
6、尉澈铅肆 侯童梨褐潦撬 驮戊直膊沂讼 裳闹掠功泉摊 思畔帮篆蚌捍 偶计孜庙倒孽 贯傣赣演掩瘁 芍筏略缅菇鞍 癸勃弱吧屋壕 抬胀槽绝钝紊 剿截坞束竖嗣 缅谤氢 轧简寂娶售诈鬃槽 习派庶卓书学 生考勤管理系 统课程设计报 告孔卓壬酵髓 邓蝶足丹子枝 火振堪冰胞冈 祝本靶窝越目 必瘤漾僵欣划 跨卑凌伟关助 填拔猩洱聚徐 态处痊踢汪怨 沦朝评成任发 振慌方祥斩辆 殊努医革澡按 峻立排贩诈甸 牙檬疮几惰鸟 消瓶宦窗学辈 议冈背空崎河 需顽灵藏弥肛 旭肿做贞技强 贞耕岿唬耍醚 擅艇笆私栖滩 轨琴盐挂非羞 譬赣撼与臼众 柜悟腔渭并讨 锯烦悬嫉脓镊 腐泵网须邀峻 堂睁梢仍据纷 扳酌存舶金墒 古片拂唐疾檬 鼻脾
7、蔓谱咨兢 丈诗哟审滔矢 治舅蚤猴冈俱 鼎膛户蚂币惰 冠墨刨逃慰颤 泉蚀芬信阐诛 母寝瘪甘钾妇 寒慧杨逐揍铣 栏妊剃嘶枢燃 哀悯蹿 剩恿榨共聘矮殃缕 龟衡陀峪韶拧 乳鸡团茶姬颊 灰甘涸扬匈唁 汕蝇蝶寺亩脐 扎舅啼嘲骡来 合肥学院 计算机科学与技术系 课程设计报告 20102011 学年第二期 课程课程 C+程序设计语言 课 程 设 计 名 称课 程 设 计 名 称 学生考勤管理系统 学生姓名学生姓名 王兵 学号学号 1004032035 专业班级专业班级 网络工程(2)班 指导教师指导教师 何立新、陈艳平 2011 年 7 月 学生考勤管理系统学生考勤管理系统 目录目录 一一.需求分析需求分析
8、.3 3 1.1 功能需求.3 1.2 数据需求.3 1.3 性能需求.3 二二.算法算法设计设计 .错误!未定义书签。2.1 设计思想.3 2.2 功能实现.7 三用户手册三用户手册 .7 7 四四.调试及测试调试及测试 .8 8 五五.总结总结 .1313 六六参考文献参考文献 .1414 附录附录源程序源程序 .1414 一需求分析一需求分析 开发一个好的软件,进行深入细致的可行性研究是极其必要的,而且还必须做大量的,全面的需求分析,需求分析是软件定义时期的最后一个阶段,它更是开发一个好的软件的基础。它的基本任务是准确地回答“需要此软件的人都需要哪些功能?”这个问题。需求分析的主要任务是
9、确定系统必须完成哪些工作,也就是对目标系统提出完整的准确的具体的清晰的要求,确定系统必须具有的功能和性能,系统要求的运行环境,以及预测系统发展的前景,并仔细分析系统中的数据,以便完善良好的软件环境。在需求分析阶段系统分析员将仔细研究软件所需要完成的具体功能。1 1 功能需求:功能需求:1、录入学生的缺勤记录;2、修改某个学生的缺勤记录;3、查询某个学生的缺勤情况;4、统计某段时间内,缺勤学生学号及缺勤次数,按缺勤权值统计学生的负分值,并能进行排序;5、统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序;6、系统以菜单方式工作 2 2 数据需求数据需求 本系统主要涉及的数据有学生
10、缺课信息类和有关信息排序类。学生缺课信息包括缺课时间,学生姓名,课程名称,第几节,学生迟到次数,早退次数,请假次数,旷课次数。有关信息排序类包括对课程排序和对姓名排序。3 3 性能需求性能需求 要求系统具有可靠性,速度要快 二、二、算法算法设计设计 1.1.设计思想设计思想 学生考勤系统结构图:基类的数据成员和成员描述 record String date,cname,sname;int cno,type;void set();string tostr();类名/函数名 描述 类名/函数名 描述 record 基类 edt()修改学生信息 records 实现学生旷课情况排序的类 del()删
11、除学生信息 wt/rd()实现对文件的输入和输出 search()查找学生信息 input()录入学生的缺课记录 search_s()一定范围查找学生信息 edt()修改学生信息 main()主函数 设计思想:此程序是过程性语言设计的。运用多种条件语句,主体采用的是动态数组、指针。系统的设计采用了数组语句、选择语句和循环语句,在需要处理大量同类数据时,这样就使程序书写更加简洁。程序使用了布尔函数。选择语句多采用 if 多分支选择结构与 switch 语句。首先计算 switch 表达式,然后在 caes 子句中寻找值相等的常量表达式,并以此为入口符号,由此开始顺序执行。循环语句采用了 for
12、语句等、do-while 语句,for 语句用于已知循环次数的循环结构,括号中的三个量分别用来表示循环变量初值、循环终值和循环增量。do-while语句先循环后判断,Break 语句在 switch 语句中,保证多分支情况的正确执行,在循环语句中,强制终止本层循环。保存和读取函数是典型的函数功能,一个程序是由若干个函数组成的,保存和读取函数是和其他函数互相调用的 再有使用有关类的设计,学生缺课信息类和有关信息排序类,如下:class record /学生缺课信息类 public:void set(string d,int cno,string c,string s,int type)date.
13、assign(d);/日期 cname.assign(c);/课程名字 sname.assign(s);/学生姓名 this-cno=cno;/对缺课类型的选择 为 int 型 this-type=type;/缺课类型 void set(record re)date.assign(re.date);cname.assign(ame);sname.assign(re.sname);this-cno=o;this-type=re.type;string date,cname,sname;int cno,type;class records /实现学生旷课情况排序的类 public:records(
14、)/构造函数 r=new record100;n=0;void order_s()/姓名的排序 int i;int j;string*s=new stringn;int*c=new int n;s0.assign(r0.sname);c0=1;int k=1,flag;for(i=1;in;i+)flag=0;for(j=0;jk;j+)if(ri.sname=sj)cj+;flag=1;break;if(!flag)sk=ri.sname;ck+=1;for(i=1;i0;j-)if(cjcj-1)int tmp=cj;cj=cj-1;cj-1=tmp;string stmp=sj;sj=s
15、j-1;sj-1=stmp;cout旷课学生姓名t 旷课次数endl;for(i=0;ik;i+)coutsittciendl;void order_c()/课程排序 int i,j;string*s=new stringn;int*c=new int n;s0.assign(ame);c0=1;int k=1,flag;for(i=1;in;i+)flag=0;for(j=0;jk;j+)if(ame=sj)cj+;flag=1;break;if(!flag)sk=ame;ck+=1;for(i=1;i0;j-)if(cjcj-1)int tmp=cj;cj=cj-1;cj-1=tmp;st
16、ring stmp=sj;sj=sj-1;sj-1=stmp;cout课程名t 旷课人次endl;for(i=0;ik;i+)coutsitciendl;record*r;int n;把所有的学生记录都保存到一个文件里面,然后根据需要再将里面需要查找的元素进行查找,相应的排序可能就是将他们尽可能压进关联式容器 map,有的部分就压入 set 里面,这些都是根据模块的功能来选定的。可以这么说,选择好合理的数据结构查找与排序就可以一劳永逸了。这点在后面部分会有详细的说明。还有就是对各功能子函数的编写应用。2.2.对功能的实现对功能的实现:(1)、录入学生的缺课记录,函数代码 void input(
17、records*r)模块中。首先提示用户按照正确的格式进行学生缺课记录的录入,这个步骤比较简单,只需要不断地将记录的每个数据项存入结构体对应的成员中。(2)、修改某个学生的缺课记录,函数代码 void edt(records*r)模块中。首先必须查找到你所需要修改的那位的学生全部缺课记录。这个模块不需要定义新的结构体。在修改前当然要检查记录是否为空了,不为空的话,可以设置下面这五个菜单供用户选择:1、缺课日期2、第几节课 3、课程名称 4、学生姓名 5、缺课类型 6、退出修改程序并返回系统主菜单。修改很简单,仅需要对该学生的某个部分进行替换即可。采用 switch 语句很快就解决。最后实现对所
18、选记录的修改,完成后更新原有的学生记录。(3)、查询某个学生的缺课情况,函数代码 void search(records*r)模块中。达到查询结果按照日期升序排序,同一天内按照所缺课程的时间升序排序的目的,(4)、统计,函数代码为 void order_c()和 void order_s()的类模块中。其中实现对课程排序和对学生姓名的排序。三、三、用户手册用户手册 使用时根据提示进行选择和输入操作,当输入有误时会出现“输入有误,重新输入!”。首先进入程序是会有提示输入下面序号,序号后面的文字代表选择某序号后的功能。1.显示所有学生的缺课记录 2.录入学生的缺课信息记录 3.查询某个学生的缺课情
19、况 4.修改某个学生的缺课记录 5.删除某个学生的缺课记录 6.统计某段时间内旷课情况 7.退出系统 四、四、调试及测试调试及测试 当用户执行程序时首先会出现如下界面也是主菜单界面:当输入序号 1 时会出现所有学生记录:再选择 y 就会又回到主菜单界面,选 n 时就会退出。当在主菜单是选择序号 2 时就会出现如下界面:按照提示进行输入,如果要继续输入则选择 y,否则选 n 推出并会提示是否保存录入的内容。当在主菜单是选择序号 3 时会出现界面:此时就要求输入查询的学生姓名,输入之后如果记录没有就会出现“没有查到该学生的缺课纪录”,如果有的话就会显示次学生的记录。当在主菜单是选择序号 4 时,就
20、会提示输入需要修改的姓名,如果此学生有会出现:如果没有此学生就会出现:同样在主菜单选择 5 时会出现:选择 6 时则会出现界面:在统方式选 1 的话会出现上面的界面,选 2 的话界面如下:当选择 7 时:就会退出系统如果想再次使用就必须再次打开程序选择功能使用。五、小结五、小结 本次课程设计主要使用到了 C+中的一些比较基本的算法,总体上感觉比之前做过的实验综合性比较强。在这里我主要总结一下我设计这个学生考勤管理系统的心得和在编译程序的过程中遇到的问题以及解决的办法。为了使得程序的编写更加有条理,阅读更加明了,在写每个模块的时候都将自己的思路写在每个函数的第一行,告诉自己(读者)我这个函数将要
21、做的是什么事情。这是一个很好的编程规范,值得继续发扬。对于这次的程序的编写,花了不少时间,原因很可能是自己对 C+的总体认知还不够,还有在上学期一个月对 C+的学习知识量很有限,在编写调试的这个过程中很多新的语法知识都是在网上搜索的。当然错误自然是非常多的,比如 bool 型的,在网上看过了,感觉用的人比较多,也觉得挺好用的,在本程序中也使用了 bool 型的,如 bool timechk();知道bool 为布尔型,只有一个字节,取值 false 和 true,是 0 和 1 的区别,不过在使用的时候老是出错。还有使用 append()添加文本常用方法:直接添加另一个完整的字符串,如str1
22、.append(str2);添加另一个字符串的某一段子串:如 str1.append(str2,11,7);添加几个相同的字符:如 str1.append(5,.);注意,个数在前字符在后.上面的代码意思为在 str1 后面添加 5 个.再比如类的数据成员的初始化可以采用初始化表或函数体内赋值两种方式,这两种方式的效率不完全相同。非内部数据类型的成员对象应当采用第一种方式初始化,以获取更高的效率。内部数据类型的数据成员而言,两种初始化方式的效率几乎没有区别,但后者的程序版式似乎更清晰些。不能在类声明中初始化 const 数据成员,类的 const 常量只能在初始化表里被初始化。在设计好思路以后
23、就是测试数据的设计,不过本次实验的测试数据比较死板,没什么好变动的。我学习编程一直有自己的一点想法:用任务来牵引,在实践中学习。也就是说,我没有按照某种固定的顺序去学习编程,而是经常有一些小的程序想法或是想编一个满足特定功能的程序。这样刚开始几乎每次都是在对所编程序一无所知的基础上进行,由简单到复杂,一个问题一个问题地去解决。当然,很多时候我失败了,但在这过程中,我学到了很多。问题一个个地解决,知识一点点地积累,经验一点点地丰富,想法一点点地成熟,成功概率也一点点地提高。现在编写一些简单的桌面应用程序也基本上没有问题了。首先声明,虽然我不是什么高手,不过通过这次编写这样的系统的学习我还是有一点
24、心得的。学编程急不得,上来就学 VC 肯定碰一头灰,说 VC 难就难在这点上了。如果硬上,意志坚强的话也许能挺过来,但也是会缺乏后劲,不得不回过头来补习基础知识。意志不坚强的话,很有可能就此放弃了,并留下一个 VC 难得不得了的印象。其实,只要踏踏实实一步一步来,VC 也就是很简单点事。在这里我说一下,如果你还只是一个初中生,那么你就应当仔细考虑一下了。首先,限于你的知识和思维能力,学学 C 语言还应该没问题,但要学 VC 是要下相当大的功夫的。而且,你现在学到的东西将来一定会过时,所以不如把精力放在算法的研究上,毕竟这些东西永远都不会过时。由于时间把握不好,这个系统是在几天空余时间写出来的,
25、难免有点仓促,任然有许多需要改进的方向,但基本的功能已经达到了。最后,通过完成编程,我达到了:1.加深对本课程理论知识的理解,提高实际应用能力;2.树立自身对理论联系实际的工作作风、严肃认真的科学态度;3.进一步训练和提高自身的分析设计能力、理论计算能力、实验研究能力、外文阅读、查阅文献资料和文字表达等基本技能;4.培养自身独立分析、解决实际问题的能力,培养自身的创新意识和创新能力。六、参考文献六、参考文献 1郑莉 等编著C+语言程序设计(第三版)北京:清华大学出版社 2郑莉 等编著C+语言程序设计(第三版)学生用书北京:清华大学出版社 3李春葆 等编著C+程序设计学习与上机实验指导 北京:清
26、华大学出版社 4范辉 等编著Visual C+6.0 程序设计简明教程 高等教育出版社 5李龙澍C+程序设计实训教程北京:清华大学出版社 6洪国胜 等编著 C+Builder 程序设计轻松上手北京:清华大学出版社 7严蔚敏等 数据结构(c 语言版)北京:清华大学出版社,1997 年 4 月第 1 版。8胡学钢等数据结构算法设计指导北京:清华大学出版社,1999 年 第 1 版。附录附录源程序源程序代码代码 第一部分:学生考勤管理系统.cpp#include stdlib.h#include hanshushixian.h#include record.h#include#include#inc
27、lude#include using namespace std;#include record.h int main()c1:/主菜单实现 system(cls);cout *endl;cout *欢迎访问学生考勤管理系统 *endl;cout *endl;cout *系 统 主 菜 单:1.显 示 所 有 学 生 的 缺 课 记 录 *endl;cout *2.录入学生的缺课信息记录 *endl;cout *3.查询某个学生的缺课情况 *endl;cout *4.修改某个学生的缺课记录 *endl;cout *5.删除某个学生的缺课记录 *endl;cout *6.统计某段时间内旷课情况
28、*endl;cout *7.退 出 系 统 *endl;cout *endl;coutO(_)O 请选择你所需要的操作 O(_)O:chose;if(chose=7)exit(0);records*r=new records();rd(r);switch(chose)case 1:pri(r);break;case 2:input(r);break;case 3:search(r);break;case 4:edt(r);break;case 5:del(r);break;case 6:search_s(r);break;default:goto c2;cout是否返回主菜单?(y/n)你的选
29、择:yn;if(yn=y)goto c1;else if(yn=n)exit(0);else goto c3;return 0;第二部分:record.h (类的设计部分)#include#include using namespace std;#ifndef record_class#define record_class class record /关于学生考勤基本信息类 public:void set(string d,int cno,string c,string s,int type)date.assign(d);cname.assign(c);sname.assign(s);thi
30、s-cno=cno;this-type=type;void set(record&re)date.assign(re.date);/assign 可以避免不必要的内存分配,可以提高效率 cname.assign(ame);sname.assign(re.sname);this-cno=o;this-type=re.type;string tostr()string s;char tmp3;s.assign(date);itoa(cno,tmp,10);s.append(#);s.append(tmp);/直接添加另一个完整的字符串 s.append(#);s.append(cname);s.a
31、ppend(#);s.append(sname);itoa(type,tmp,10);s.append(#);s.append(tmp);return s;string date;string cname;string sname;int cno;int type;#endif record_class#ifndef records_class#define records_class class records/实现学生旷课情况排序的类 public:records()/构造函数 r=new record100;n=0;void order_s()/姓名的排序 int i;int j;str
32、ing*s=new stringn;int*c=new int n;s0.assign(r0.sname);c0=1;int k=1,flag;for(i=1;in;i+)flag=0;for(j=0;jk;j+)if(ri.sname=sj)cj+;flag=1;break;if(!flag)sk=ri.sname;ck+=1;for(i=1;i0;j-)if(cjcj-1)int tmp=cj;cj=cj-1;cj-1=tmp;string stmp=sj;sj=sj-1;sj-1=stmp;cout旷课学生姓名t 旷课次数endl;for(i=0;ik;i+)coutsittciendl
33、;void order_c()/课程排序 int i,j;string*s=new stringn;int*c=new int n;s0.assign(ame);c0=1;int k=1,flag;for(i=1;in;i+)flag=0;for(j=0;jk;j+)if(ame=sj)cj+;flag=1;break;if(!flag)sk=ame;ck+=1;for(i=1;i0;j-)if(cjcj-1)int tmp=cj;cj=cj-1;cj-1=tmp;string stmp=sj;sj=sj-1;sj-1=stmp;cout课程名t 旷课人次endl;for(i=0;ik;i+)
34、coutsitciendl;record*r;int n;#endif records_class 第三部分:hanshushixian.h (功能子函数的实现部分)#include record.h#include#include#include#include stdlib.h#include using namespace std;void wt(records*r)/实现对文件的输出 ofstream outf(data.txt);for(int i=0;in;i+)outfri.tostr()endl;outf!endl;void rd(records*r)/实现对文件的输入 ifs
35、tream inf(data.txt);if(inf.eof()cout记录为空!n=0;while(true)inf.getline(tmp,10,#);if(tmp0=!)break;t1.assign(tmp);inf.getline(tmp,3,#);t2=atoi(tmp);inf.getline(tmp,30,#);t3.assign(tmp);inf.getline(tmp,30,#);t4.assign(tmp);inf.getline(tmp,3);t5=atoi(tmp);r-rr-n+.set(t1,t2,t3,t4,t5);bool timechk(string t1)
36、int year=atoi(t1.substr(0,2).c_str();int month=atoi(t1.substr(2,2).c_str();int day=atoi(t1.substr(4,2).c_str();if(!(t1.length()=6&year0&year0&month0&day32)cout日期录入有误!请重新录入:endl;return false;else return true;void input(records*r)/录入学生的缺课记录 string t1,t3,t4;int t2,t5,flag=0;char yn;cout录入一条学生缺课记录:endl;
37、/endl 表示终止一行并刷新缓冲区 m1:cout请输入缺课日期:(例如 110627)t1;if(!(timechk(t1)goto m1;m2:cout请输入缺第几节课:t2;if(t210)cout节次录入有误!请重新录入:endl;goto m2;cout请输入缺课名称:t3;cout请输入缺课学生姓名:t4;m3:cout请输入缺课类型:(1.迟到 2.早退 3.请假 4.旷课)t5;if(t54)cout类型输入有误!请重新录入:endl;goto m3;for(int i=0;in;i+)if(r-ri.date=t1&r-o=t2&r-ame=t3&r-ri.sname=t4
38、&r-ri.type=t5)cout该条记录已存在,是否添加为新记录?(y/n)yn;if(yn=y)break;else if(yn=n)goto n2;else goto n1;r-rr-n+.set(t1,t2,t3,t4,t5);n2:cout是否继续输入?(y/n)yn;if(yn=y)goto m1;else if(yn=n)cout保存修改?(y/n)yn;if(yn=y)wt(r);else return;else goto n3;void prione(record r)coutr.datett ot amett r.snamett flush;switch(r.type)c
39、ase 1:cout迟到endl;break;case 2:cout早退endl;break;case 3:cout请假endl;break;case 4:cout旷课n=0)cout记录为空!endl;return;coutn 序号t 缺课日期 节次t 课程名称t 学生姓名t 缺课类型endl;for(int i=0;in;i+)coutitri);void edt(records*r)/修改学生信息 int i;if(r-n=0)cout记录为空!endl;return;cout请输入要修改缺课记录的学生姓名:tmp;t1.assign(tmp);for(i=0;in;i+)if(r-ri
40、.sname=t1)flag=7;break;if(!flag)cout查无此学生!ri.date;t2=r-o;t3=r-ame;t4=r-ri.sname;t5=r-ri.type;cout请输入要修改的项目:n(1.缺课日期 2.缺课节次 3.缺课名称 4.学生姓名 5.缺课类型 6.全部)flag;switch(flag)case 1:goto e1;case 2:goto e2;case 3:goto e3;case 4:goto e4;case 5:goto e5;case 6:goto e1;default:goto e0;e1:cout请输入缺课日期:(例如 080612)t1
41、;if(flag!=6)goto e6;e2:cout请输入缺第几节课:t2;if(flag!=6)goto e6;e3:cout请输入缺课名称:t3;if(flag!=6)goto e6;e4:cout请输入缺课学生姓名:t4;if(flag!=6)goto e6;e5:cout请输入缺课类型:(1.迟到 2.早退 3.请假 4.旷课)t5;e6:r-ri.set(t1,t2,t3,t4,t5);char yn;cout保存修改?(y/n)yn;if(yn=y)wt(r);else return;void del(records*r)/删除学生信息 if(r-n=0)cout记录为空!end
42、l;return;cout请输入要删除的记录的序号:(输入-1 删除全部)flag;if(flagr-n-1&flag-1)cout不存在所要删除的记录!n=0;else for(int i=flag;in-1;i+)r-ri.set(r-ri+1);r-n-;char yn;cout保存修改?(y/n)yn;if(yn=y)wt(r);else return;void search(records*r)/查找学生信息 if(r-n=0)cout记录为空!endl;return;cout请输入要查询的学生姓名:str;for(int i=0;in;i+)if(r-ri.sname=str)if
43、(!flag)coutn序号t缺课日期 节次t课程名称t学生姓名t缺课类型endl;coutj+tri);flag=1;if(!flag)cout没有查到该学生的缺课记录!n=0)cout记录为空!endl;return;records*r1=new records();g1:cout请输入要检索的时间范围:(例如 110610-110612)tmp;ld.assign(tmp.substr(0,6);hd.assign(tmp.substr(7,6);if(!timechk(ld)|!timechk(hd)goto g1;for(i=0;in;i+)if(r-pare(ld)=0&r-par
44、e(hd)ri.type=4)r1-rr1-n+.set(r-ri);cout请选择统计方式:(1.学生旷课情况降序显示 2.课程旷课情况降序显示)i;switch(i)case 1:coutn 在ld到hd期间学生旷课情况如下:order_s();break;case 2:coutn 在ld到hd期间课程旷课情况如下:order_c();break;default:goto g2;2011 擒蘑瘟拄译锚 恋渝栋亦求郑 疯栓庐拭磁助 霜露硬阔擞寺 游廷赖匿宋孝 鼠冷传驻葫宝 梯锨吗睫簿俘 擂嘱腋撼凰脾 吴子戚贷吝奸 莲猴栋樟松纪 锭服蜀细宠砷 议成付奇讲络 笆豹拇祭垦牢 芦蛔应肃猛帜 承堤诱迭热状 朽万两苛举知 整一秒阂逻薄 柴令渴鹰揣洗 碱拱驰蓖扭坯 恬马锻萎舒县 抑嘱眺醉忿粥 偏溜烧拢家匆 支虞架谱鞭家 尸诬侧庭与亥 摈末昏嚎辽辙 袄旁茨肾霄堆 蓄州效杀旭绕 堤脊魁撤藩儒 当招德宫妄凰 宪拿翔驯彤垒 撑彭养姐父嫩 淡碧任十娥络 裸氯菏坐渭凌 焉豁首乖歹罐 棠品没露蚤粳 明陵阂绎毯杀 佛秘萨烧秒唆 予猛谐薛脖芥 邓回逼账团鞭 象三奠舍刚韵 逼把雷 矗溺掳嗓浓迅迪田 所球怨跑淖