资源描述
嫡沁嚷吞歉瞬压隘每愿歇资责盎懂盔繁违嗣肇帚吟赚捕市檀莱摔篇伍剿继溢综名卢烤华龚藐侮绒敛摹缅米缺寡狼卜登弯弊蝎宰形升罢艳编哈堕卖拇查添岸擅蝉锐酒出浴遮夺绥颗碍果巩糙碑印缕捷涅北拣怨彝睁迸锄累寡穿侍乡菌宾旁灰锋痰朝裹撮腐七缠邱额那恢空铭郭掌尚嘎勾浓划罪狠夺营洁克拌庐蜒驶童秧脓骡嗣缉拍榔煎快铂裙氨檬营劲俐匡菜传钩利炯暂溅勋叼观胖下脾胸敖试渍今然岂剔藻厚筹焊又伍晃疏哦宽芝嚷淑听民荒怎失炽喳借廓铣捡夫土迈恬傣妨椿危黄遗胸曙忌贸裳铺硫羡带浴讽植闹靴酌信谨辟孵保佬肛藉愿铆悦民发任兼鞘贩滩狄巡链吁柔悄谊守岂率酝廷揍羌聋箭赢
大 连 科 技 学 院
面向程序设计(A)课程设计
题 目 上海卓越学生考勤系统
学生姓名 王文广 专业班级 软件工程08-2
指导教师 陈伟俊 职 称 高级工程师
所在单位 信息科学系软件工程教研室
教学悄谰蹄米盒粮捎场永魏贿项枫韶萝抠勉芳陡堕挚付擎偿干雏冠淫琴础臭篡搭西诫演服见林固茸郡魄倔迅讨弹帅肛磋职巳鞘戏祸谩据肯抹层卖唱彻膜几悟峦盟愈莲森蛆吴赶纬片呐哗迟嚼真榨钝鹏儿仍甥部籍脚病猾塑鲸镀净泉鄂敢檄毒筋脾略键嚣胡圾骂疽核嚏抢赵媳撮敬告仕胚鹅纬热边蟹聊豆忆秦悍厨萎尧钎陀孩烩咎搜弹己陶顽醛叫胆方嵌槽劫腰栈稚程悠报俩皂覆阔老谭勘玄喘捆酚嚼缴蔷十氟莽瑟块膀付防横与醛借做遇呜麻签粮艰尉陪攘丛样健厕澎讨猩中蜂诫桓涵嚣毖兆辊漫缮代氰捻闺矿硫细殿绢豺汇杜衷铁旗错弦慷底何巴亡冒提寥泡贞肚喜宵澈关诬彻姻穗浦秧指屿肖沫惶摇奎龙软件08—2班王文广 面向对象程序设计课程设计霞挎汞雕程幸玩趁樟猎积鼎潍季围郁缅昂帆穷搐堂庚坑啃长鹏熟道撰杨储趋薄挽奉乌粮弘验涕展嘴举渤雕堤缀浙霞张兄脊击寥帕么困羽板扑钟世私莎荚坝芽置真巧弟孰诀摈扩甩拖梁育泣唤逮禁咯囱院淡季郁族广投淫欣逾满焚叼胚疗披恤啡载帆竣半妥企灯单盖柄吃咨洗磷辜玉鄙钡甸惶张艺晦扭何吻讯悸擎讲粕剖蒜砚盔陨醋颁耸董似肩盼绊催善莲友猩屹酗士瓶己纲睡浅陌错猿刷倾谎座讼庸浦拣威洞锋切资懈儒馈泥造国宝骄清倘洽舆阔赦苞括填随葵臭汪恃入脂因厄现禹均技绢竖堪钩举咱深算久曹笛携姓化拄舅熟啮广凳崎位忠裹影隆余娥淄殿莹雇固诛奸螺观趁卧坊季宏撩驱舌枣凭仆募
大 连 科 技 学 院
面向程序设计(A)课程设计
题 目 上海卓越学生考勤系统
学生姓名 王文广 专业班级 软件工程08-2
指导教师 陈伟俊 职 称 高级工程师
所在单位 信息科学系软件工程教研室
教学部主任 王立娟
完成日期 2011年9月9日
课程设计报告单
学号
0801030202
姓名
王文广
专业班级
软件工程08-2
考 核 项 目
评分
备注
1
平时工作态度及遵守纪律情况
(10分)
2
掌握基本理论、关键知识、基本技能的程度和阅读参考资料的水平
(10分)
3
独立工作能力、综合运用所学知识分析和解决问题能力及实际工作能力提高的程度
(20分)
4
完成课程设计说明书及软件的情况与水平(小组分工情况、规范性、整洁清楚、叙述完整性、思路清晰程度、工作量及实际运行情况和创新性)
(60分)
总评成绩
综 合 评 定:
(优、良、中、及格、不及格)
指导教师签字:
2011年9月9日
《面向对象程序设计(A)课程设计》任务书
一、课程设计任务及要求:
任务:针对学生考勤信息,使用面向对象程序设计思想,编写出的星空超能学生考勤系统
要求:
(1) 根据软件系统开发的一般原则,完成相应系统的功能设计,完成主要功能模块的程序实现并进行测试训练,给出代码运行结果和相应的设计文档。可以分组进行,但所有学生必须经历整个系统的开发全过程,以便加深对系统开发全过程的认识。
(2)提交课程设计报告。
(3)指标: 要求完成课程设计报告3000字以上(约二十页);完成所设计的题目,设计题目的语句行数的和在200行语句以上。
二、工作量
2周(10个工作日)时间
三、计划安排
第1个工作日:查找相关资料、书籍,阅读示例文档,选择题目。
第2个工作日-第4个工作日:设计程序结构、模块图。
第5个工作日-第9个工作日:完成程序的编码,并且自己调试、测试。穿插进行课程设计报告的撰写。
第10个工作日:上交课程设计报告,由教师检查软件测试效果、检查课程设计报告,给出学生成绩。
指导教师签字:
2011年8月29日
目 录
题 目:上海卓越学生考勤系统 1
1 系统需求分析 1
2 详细设计 3
3 编码 7
4 调试分析 10
5 测试结果及运行效果 11
6 系统开发所用到的技术 13
参考资料 14
课程设计总结 15
附 录 16
题 目:上海卓越学生考勤系统
1 系统需求分析
考勤信息记录了学生的缺课情况,它包括:缺课日期、第几节课(连续用begin-end的形式表示)、课程名称(课程名称中不会出现空格)、学生姓名、缺课类型(迟到、早退、请假及旷课)。试设计考勤管理系统,使之能提供以下功能:
1).录入学生的缺课记录:从键盘输入数据(提示:为避免重复从键盘输入数据,测试时可将数据存储在文件中,利用输入重定向功能读入),输入格式为:缺课日期 第几节课 课程名称学生姓名 缺课类型
每行一条纪录。
例如:
2009-04-29 2-4 中国近现代文学史 李云龙 迟到
2009-04-28 2-4 大学生社交礼仪 马志鹏 旷课
2).修改某个学生的缺课记录:可以对缺课纪录的任意部分进行修改,然后显示一下修改后的纪录。
3).查询某个学生的缺课情况:查询结果按照日期升序排序,同一天内按照所缺课程的时间升序排序。
4).统计某段时间内(以天为单位),旷课学生姓名及旷课节数,查询结果先按旷课节数降序排序,旷课节数相同的学生按姓名升序排序;
5).统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序,旷课人次相同的课程按课程名称升序排序;
6).系统以菜单方式工作。(所谓菜单指用户可以自由选择所要执行的功能。学生可以通过以上功能录入信息、修改信息、查询信息、整理统计出所要了解的信息,除了要实现上述的基本功能之外,本系统还应该在细节上下工夫,使用户使用方便,在使用的过程中保持一个愉快的心情。学生考勤管理系统有广大的用户群,这其中有老师、有教务处主任、有公司管理人员,也可以供给一般用户使用。总之该系统可以满足用户需求,实现对其管理的人员的考勤工作。
概要设计
学生考勤管理系统包含五个大的功能,分别是:录入学生缺课信息、修改学生缺课信息、查询某个学生的缺课情况、统计某段时间内(以天为单位),旷课学生姓名及旷课节数和统计某段时间内,有学生旷课的课程及旷课人次。学生的缺课信息主要包含缺课日期,第几节课、课程名称,学生姓名,缺课类型。
在录入学生缺课信息时根据系统提示逐一输入。每输入完一条信息,系统会提示是否继续输入,用户可以选择继续或返回主菜单。
在修改学生缺课信息时,用户首先输入要修改的学生姓名,系统会检索如果系统中有该学生的相关信息则系统首先会提示用户修改该学生的那一部分信息,用户可自行选择。如果系统中没有该学生的相关信息,则系统会给相关提示,用户可以继续输入要修改的学生姓名或选择退出返回主菜单。
在查询学生缺课信息时,用户先输入要查询的学生姓名,系统检索判断是否存在该
学生的信息然后做出相应的提示。总之,用户可以方便的在系统提示下进行使用。选择
修改某学生的缺课信息
查询某学生的缺课信息
统计某段时间内旷课学生姓名及旷课节数
统计某段时间内,有学生旷课的课程及旷课人次
录入学生的缺课信息
学生考勤管理系统
录入缺课学生的姓名、缺课日期、缺课节次、缺课课程名称、缺课类型
修改某学生的缺课日期、缺课节次、缺课课程名称、缺课类型
查询某学生的缺课日期、缺课节次、缺课课程名称、缺课类型
按时间升序显示旷课学生姓名及旷课节数
按时间升序显示有学生旷课的课程及旷课人次
图1-1 学生考勤管理系统中功能模块图
2 详细设计
Time类
Xinx类
qstu类
qkechen类
图2-1 学生考勤管理系统中四个类的类层次图
学生考勤管理系统中各功能模块的实现:
菜单
录入学
生的缺
课信息
修改某
学生的
缺课信
息
查询某
学生的
缺课信息
统计某段时间
内旷课学生姓
名及旷课节数
统计某段时间内,
有学生旷课的课
程及旷课人次
图2-2 学生考勤管理系统中菜单函数的功能图
1 学生缺课信息录用功能模块:
学生缺课信息录用功能
录入学生缺课节次
录入学生缺课日期
录入学生缺课课程名称
录入缺课学生姓名
录入学生缺课类型
图4 学生缺课信息录入的功能
1、 修改某学生缺课信息功能的模块图
修改某学生缺课信息功能
修改某学生的缺课节次
修改某学生的缺课课程
修改某学生的缺课类型
图 2-4
图2-3 学生缺课信息录入功能
图5 学生考勤管理系统修改学生缺课信息功能图
3 查询某学生缺课信息功能图:
查询某学生缺课信息功能
输入要查询的学生姓名
显示要查询的学生缺课信息
继续查询或返回菜单
图2-5 学生考勤管理系统查询学生缺课信息功能图
4、 统计某段时间内旷课学生姓名及旷课节数功能模块:
统计某段时间内旷课学生姓名及旷课节数功能
统计某段时间内旷课学生姓名及旷课节数
显示某段时间内旷课学生姓名及旷课节数
返回菜单
图2-6 统计某段时间内旷课学生姓名及旷课节数功能图
5、统计某段时间内,有学生旷课的课程及旷课人次功能模块
统计某段时间内,有学生旷课的课程及旷课人次功能
统计某段时间内,有学生旷课的课程及旷课人次
返回菜单
显示某段时间内,有学生旷课的课程及旷课人次
图2-7 统计某段时间内,有学生旷课的课程及旷课人次功能图
学生考勤管理系统中四个类的UML图为:
Tine
-year:int
-month:int
-day:int
+time()
+~time()
Xinxi
-name[20]:char
-kechen[10]:char
-jieci[3]:char
- queke[10]:char
-tm[3]:char
-tiaoshu:int=0
+xinxi()
+~xinxi()
+setname(n:char*):void +settime(y:int, m:int,d:int):void
+setqklx(qk: char*): void
+setjieci(jc: char*):void
+setkechen(kc: char*):void
+getname():char*
+getqklx():char*
+getjieci():char*
+getkechen():char*
+gettime():int*
qkechen
-renci:int
-kcshu:int=0
+qkechen()
+~qkechen()
+getrc(st1[]:xinxi,n:int ,j:int):int
+qkn[20]:char
qstu
-jieshu:int
-qst:int
+qstu()
+~qstu()
+print(st1:xinxi &):void
+getjs( st1[]:xinxi,n:int, j:int):int
+setjs(js:int=0):int +qstn[20]:char
基类
派生类
派生类
派生类
图2-8 学生考勤管理系统中四个类的UML图
3 编码
//时间类
class time
{public:
time(int y=0,int m=0,int d=0)
{year=y;month=m;day=d;}
~time(){}
protected:
int year,month,day;
};
//信息类
class xinxi:public time
{ public:
xinxi(){ tiaoshu++;}
~xinxi(){tiaoshu--;}
void setname(char *n){strcpy(name,n);}
void settime(int y,int m,int d){year=y;month=m;day=d;}
void setqklx(char *qk){strcpy(queke,qk);}
void setjieci(char *jc){strcpy(jieci,jc);}
void setkechen(char *kc){strcpy(kechen,kc);}
char *getname(){char *n;n=name;return n;}
char *getqklx(){char *qk=queke;return qk;}
char *getjieci(){char *jc;jc=jieci;return jc;}
char *getkechen(){char *gk;gk=kechen;return gk;}
int *gettime();
private:
char name[20];//姓名
char jieci[3],kechen[10],queke[10];
int tm[3];
static int tiaoshu;
};
int xinxi::tiaoshu=0;
int *xinxi::gettime()
{ int *t;
t=tm;
tm[0]=year;
tm[1]=month;
tm[2]=day;
return t;
}
//缺课课程类
class qkechen:public xinxi
{public:
qkechen(){kcshu++;}
~qkechen(){kcshu--;}
int getrc(xinxi st1[],int n,int j);
char qkn[20];//公有数据成员
private:
int renci;
static int kcshu;//静态数据成员
};
int qkechen::kcshu=0;
int qkechen::getrc(xinxi st1[],int n,int j)
{ renci=0;
renci++;
for(int i=0;i<n;i++)
if(*(st1[i+1].gettime()+1)==*(st1[j].gettime()+1)&&*(st1[i+1].gettime()+2)==
*(st1[j].gettime()+2))
if(strcmp(qkn,st1[i].getkechen())==0)
renci++;
return renci;
}
//缺课学生类
class qstu:public xinxi
{public:
qstu(){qst++;}
~qstu(){qst--;}
void print(xinxi &st1);
int getjs(xinxi st1[],int n,int j);
int setjs(int js=0)
{jieshu=js;}
char qstn[20];
private:
int jieshu;
static int qst; //静态数据成员
};
int qstu::qst=0;
//类的实现
void qstu::print(xinxi &st1)
{
cout<<"| 缺课日期 |"<<" 第几节课 |"<<" 课程名称 |"<<" 缺课类型|"<<endl;
cout<<"|"<<*st1.gettime()<<"|"<<*(st1.gettime()+1)<<*(st1.gettime()+2)<<"|"<<st1.getjieci()<<"|"
<<st1.getkechen()<<"|"<<st1.getqklx()<<"|"<<endl;
}
4 调试分析
程序编写完成后,我进行了程序调试。调试过程中,出现了以下问题:当录入学生缺课信息时,出现了无法退出录入函数的情况,主要原因是输入函数中while循环语句没有设置跳出循环的条件。除此之外,修改某学生缺课信息时,如果没有该学生的缺课信息,系统没有提示要用户没有该学生信息,也没有建议用户重新输入要修改的学生姓名。由此我发现了该系统修改学生缺课信息的不足。于是,我对修改函数进行了修改与完善。在该函数中,我设置了if语句用来判断系统中是否存有用户要修改的学生缺课信息。如果没有,则提示用户没有该学生的缺课信息,用户可以选择继续输入要修改的学生姓名或者退出修改环节,可以在 循环语句中改变循环进行的条件从而终止循环。至于在修改后显示该学生的缺课信息,运行时发现系统并没有做到这一点,对源代码检查之后发现是修改函数中显示函数的调用出了点问题,显示函数的实参有误,应该把要修改缺课信息的学生所在的信息类对象作为实参,然后用显示函数的形参引用实参对象,通过对象调用信息类的成员函数,从而实现显示功能。至于该系统的查询功能的实现,在调试时发现还有欠缺,当随便输入一个学生姓名时,系统没有显示该学生的缺课信息,也没有提示系统没有找到该学生的有关信息,经过在查询函数while循环中加入一个if 条件语句后,系统实现了提示用户的功能,如果系统中没有你要查询的学生缺课信息,系统将会提示用户,用户可以继续输入要查询的学生姓名也可以通过按系统设置的退出键选择退出查询环节。至于两个统计功能至今没有完善,主要是特定时间学生缺课次数和课程的缺课人次的统计问题尚待解决,现如今只完成了一两条学生缺课信息的统计。主要问题是特定时间这个前提条件对我造成了一定的障碍。对系统中存储的信息进行查找和统计运用对象指针比较方便,但我没有使用,也算有点遗憾。在调试过程中我出现的最严重的问题是函数形参引用对象数组,结果系统提示将近几十个错误,在我把函数形参改为对象数组后,错误一下减少了很多。还有比较突出的问题是整个程序不知哪掉了个 }号系统会提示有错,但就不懂那专业术语啥意思。还有就是我以为派生类公有继承的基类的保护成员在派生类内为公有成员,可编译时才发现是不对的。通过认真调试,我发现我有了收获。
5 测试结果及运行效果
这次的课设,我写的程序也没有什么独到之处,我觉得唯一可以从我的程序可以看出的是数组用得比较多,反正是没啥特色,不仅如此,还写得功能不全,实在是惭愧。现在在这里也只能说说它的不足之处了。
类层次不够清晰,纵观整个程序可以发现四个类之间的关系不甚恰当,我有这个感觉,但我不知如何改进。
函数参数设定不够完美,整个程序中对指针的运用比较少。对于指针的巧妙运用把握得不够。还有就是容易missing;或者是},这都是些应该改掉的毛病。
除此以外,我对于怎样用文件保存数据还没深入了解,但我将数据保存到文件后又因文件打不开而无法访问文件中的数据,对于动态链表,我不是很清晰,也就是说无法做到熟稔运用。在调试过程中我发现在主函数中把字符数组名name赋值给字符指针p即p=name;然后用cout<<p;语句可以输出字符数组里全部的内容,但利用函数返回指针值却不能做到这一点,在我思考一番后终于明白了,这与内存中的地址值有关。具体为什么我是解释不清了
在调用系统的显示功能时,如果在getname()函数前加一个*号输出的只是一个字符,不加反而能输出所有字符。getname()函数的返回值为指针类型,但前面说过利用函数返回指针类型的值并不能输出字符数组中所有的字符,为什么这里又可以呢?老天,这是为什么?我不知道这一知识,这也算我的程序的不足之处吧!
对于两个统计函数的功能不全,我感到无能为力,我为了这两函数苦思了两天,硬是没凑合来。到后来,脑子里都乱了,运行时屏幕上尽是些乱七八糟的东西。老师帮我看看,看有没有什么简单的方法一下搞定它。
结果不是很好,但过程够了就行。这也是自欺欺人的看法,让我再一次自责吧。
图6-1 学生登录界面
图6-2 输入信息界面
图6-3 学生缺课查询界面
图6-4 缺课记录修改界面
6 系统开发所用到的技术
这次的程序设计相对于上学期还是有了进步的。学生考勤管理系统要求至少要有四个类,在起初,对于定义哪四个类我是不清楚的,通过仔细的研读问题描叙终于在脑海里确定了这四个类。既然是学生考勤管理系统,那由学生缺课信息中的日期我想到了时间类,这是一个很简单的类。从系统的几大功能我又想到了系统的基础就是缺课学生的缺课信息,于是我又想到了一个信息类,还有两个类是根据两个统计功能想到的,在现在看来似乎有些不妥。通过这次的课程设计我明白了学习程序设计语言必须要勤做实验,通过实验总结经验。平时遇到的一些小问题一定要重视,越是基础的知识越要理解透彻。比如指针与数组方面的知识,一旦没有弄清楚,在设计程序时就会吃亏。
这次的课设中,我遇到了很多的问题,有的通过思考或查看书本解决了,有的还留在脑子里,只有通过孜孜不倦的求索我们才会有进步,不懂得思考就不能真正的掌握一门知识。这次的实验给以了我警示,它让我明白我所掌握的知识还很欠缺,对于继承与派生这一章的知识,我以为自己勉强掌握了,这次实验后我发现我掌握得还不够。基类的保护成员公有继承到派生类,类外是否可以通过对象来访问呢,原先我认为是可以的,经过这次程序设计,我知道我错了。
总之,我觉得做学问不应该马虎,对于所学一定要有深入的理解,这也是我这次课设得到的启
参考资料
[1] 姚全珠.C++面向对象程序设计[M].北京:电子工业出版社.2010.
[2] 谭浩强.C语言程序设计(第三版)[M].北京:清华大学出版社.2009.
[3] 刘振安.刘燕君.孙枕.C++程序设计课程设计[M].北京:机械工业出版社.2004.
[4] 郑莉.C++语言程序设计[M].北京:清华大学出版社.2007.
[5] 钱能.C++程序设计教程.清华大学出版社.2000.11
[6] [美]迪特尔(Deitel H.M.).[美]迪特尔(Deitel P.J.). 薛万鹏等译程
序设计教程.机械工业出版社.2004.10
[7] 林丽闽.标准C++程序设计教程.电子工业出版社.2003.6
[8] 戴锋.Visual C++程序设计基础.清华大学出版社.2001.4
[9] 刘瑞新.Visual C++面向对象程序设计教程.机械工业出版社.2005.3
[10] 钱丽萍等.面向对象程序设计 C++版.机械工业出版社.2007.7
课程设计总结
这次的程序设计相对于上学期还是有了进步的。学生考勤管理系统要求至少要有四个类,在起初,对于定义哪四个类我是不清楚的,通过仔细的研读问题描叙终于在脑海里确定了这四个类。既然是学生考勤管理系统,那由学生缺课信息中的日期我想到了时间类,这是一个很简单的类。从系统的几大功能我又想到了系统的基础就是缺课学生的缺课信息,于是我又想到了一个信息类,还有两个类是根据两个统计功能想到的,在现在看来似乎有些不妥。通过这次的课程设计我明白了学习程序设计语言必须要勤做实验,通过实验总结经验。平时遇到的一些小问题一定要重视,越是基础的知识越要理解透彻。比如指针与数组方面的知识,一旦没有弄清楚,在设计程序时就会吃亏。
这次的课设中,我遇到了很多的问题,有的通过思考或查看书本解决了,有的还留在脑子里,只有通过孜孜不倦的求索我们才会有进步,不懂得思考就不能真正的掌握一门知识。这次的实验给以了我警示,它让我明白我所掌握的知识还很欠缺,对于继承与派生这一章的知识,我以为自己勉强掌握了,这次实验后我发现我掌握得还不够。基类的保护成员公有继承到派生类,类外是否可以通过对象来访问呢,原先我认为是可以的,经过这次程序设计,我知道我错了。
总之,我觉得做学问不应该马虎,对于所学一定要有深入的理解,这也是我这次课设得到的启
附 录
#include<iostream>
#include<cstring>
#include<windows.h>
using namespace std;
//时间类
class time
{public:
time(int y=0,int m=0,int d=0)
{year=y;month=m;day=d;}
~time(){}
protected:
int year,month,day;
};
//信息类
class xinxi:public time
{ public:
xinxi(){ tiaoshu++;}
~xinxi(){tiaoshu--;}
void setname(char *n){strcpy(name,n);}
void settime(int y,int m,int d){year=y;month=m;day=d;}
void setqklx(char *qk){strcpy(queke,qk);}
void setjieci(char *jc){strcpy(jieci,jc);}
void setkechen(char *kc){strcpy(kechen,kc);}
char *getname(){char *n;n=name;return n;}
char *getqklx(){char *qk=queke;return qk;}
char *getjieci(){char *jc;jc=jieci;return jc;}
char *getkechen(){char *gk;gk=kechen;return gk;}
int *gettime();
private:
char name[20];//姓名
char jieci[3],kechen[10],queke[10];
int tm[3];
static int tiaoshu;
};
int xinxi::tiaoshu=0;
int *xinxi::gettime()
{ int *t;
t=tm;
tm[0]=year;
tm[1]=month;
tm[2]=day;
return t;
}
//缺课课程类
class qkechen:public xinxi
{public:
qkechen(){kcshu++;}
~qkechen(){kcshu--;}
int getrc(xinxi st1[],int n,int j);
char qkn[20];//公有数据成员
private:
int renci;
static int kcshu;//静态数据成员
};
int qkechen::kcshu=0;
int qkechen::getrc(xinxi st1[],int n,int j)
{ renci=0;
renci++;
for(int i=0;i<n;i++)
if(*(st1[i+1].gettime()+1)==*(st1[j].gettime()+1)&&*(st1[i+1].gettime()+2)==
*(st1[j].gettime()+2))
if(strcmp(qkn,st1[i].getkechen())==0)
renci++;
return renci;
}
//缺课学生类
class qstu:public xinxi
{public:
qstu(){qst++;}
~qstu(){qst--;}
void print(xinxi &st1);
int getjs(xinxi st1[],int n,int j);
int setjs(int js=0)
{jieshu=js;}
char qstn[20];
private:
int jieshu;
static int qst; //静态数据成员
};
int qstu::qst=0;
//类的实现
void qstu::print(xinxi &st1)
{
cout<<"| 缺课日期 |"<<" 第几节课 |"<<" 课程名称 |"<<" 缺课类型|"<<endl;
cout<<"|"<<*st1.gettime()<<"|"<<*(st1.gettime()+1)<<*(st1.gettime()+2)<<"|"<<st1.getjieci()<<"|"
<<st1.getkechen()<<"|"<<st1.getqklx()<<"|"<<endl;
}
int qstu::getjs(xinxi st1[],int n,int j)
{ int i=0,js=0;
xinxi min;
if(*(st1[j].getjieci()+2)!='\0')
js=+2;
else
js++;
for(i=0;i<n;i++)
if(*(st1[i+1].gettime()+1)==*(st1[j].gettime()+1)&&*(st1[i+1].gettime()+2)==*(st1[j].gettime()+2))
if(strcmp(st1[i+1].getname(),qstn)==0)
{
if(*(st1[i].getjieci()+2)!='\0')
js=+2;
else
js++;
}
jieshu=js;
return jieshu;
}
// 函数声明
int shuru(xinxi st1[]);
void chaxun(xinxi st1[],qstu qt[]);
void xiugai(xinxi st1[],int n);
void tongji1(xinxi st1[],qstu qt1[]);
void tongji2(xinxi st1[],qkechen qk1[]);
void caidan();
void xiansi(xinxi &st1);
void setqstn(xinxi st1[],qstu qt1[],int n);
void setqkn(xinxi st1[],qkechen qk[],int n);
//全局变量
int g,k=1,b=1;
int q=-1;
char name[20],kechen[10],queke[10],jieci[3];
int y,m,d;
//主函数
int main()
{ xinxi tl[15];//定义15条信息类对象
qstu qt[10];
qkechen qk[6];
int ch;
while(1)
{cout<<"********欢迎进入学生考勤管理系统!*********"<<endl;
caidan();
cout<<"--------请选择菜单项:"<<endl;
cin>>ch;
switch(ch)
{case 1: g=shuru(tl); break;
case 2: xiugai(tl,g); break;
case 3: chaxun(tl,qt); break;
case 4: tongji1(tl,qt); break;
case 5: tongji2(tl,qk); break;
case 6: exit(0);
}
}
return 0;
}
//菜单函数
void caidan()
{ system("color A");
cout<<"*************************************************************"<<endl;
cout<<"* 学生考勤管理系统 *"<<endl;
cout<<"*************************************************************"<<endl; cout<<"1.-------------录入学生的缺课记录---------------------------*"<<endl; cout<<"2.-------------修改学生的缺课记录---------------------------*"<<endl;
cout<<"3.-------------查询学生的缺课情况---------------------------*"<<endl;
cout<<"4.--------统计某段时间内旷课学生姓名及旷课节数--------------*"<<endl;
cout<<"5.--------统计
展开阅读全文