C++课程设计报告.docx

上传人:b****2 文档编号:24276018 上传时间:2023-05-26 格式:DOCX 页数:14 大小:157.69KB
下载 相关 举报
C++课程设计报告.docx_第1页
第1页 / 共14页
C++课程设计报告.docx_第2页
第2页 / 共14页
C++课程设计报告.docx_第3页
第3页 / 共14页
C++课程设计报告.docx_第4页
第4页 / 共14页
C++课程设计报告.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

C++课程设计报告.docx

《C++课程设计报告.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告.docx(14页珍藏版)》请在冰豆网上搜索。

C++课程设计报告.docx

C++课程设计报告

面向对象程序设计(C++)课程设计任务书

学院

计算机与信息工程学院

专业

通信工程

课程名称

面向对象程序设计(C++)

题目

学生考勤管理系统的设计与实现

完成期限

自2017年6月12日至2017年6月17日共6天

一、项目目的

1.巩固和加深学生对程序设计课程基本知识的理解,综合该课程中所学的理论知识,独立或联合完成一个应用课题的设计;

2.根据选题需要,通过查阅手册和文献资料,培养分析和解决实际问题的能力;

3.进一步提高使用C++进行软件开发的能力。

二、项目任务的主要内容和要求

设计一个学生考勤管理系统。

可以实现对学生信息的添加功能、查询功能、显示功能、编辑功能、删除功能、统计功能、保存功能、读取功能、排序功能。

实现:

学生信息的录入:

修改:

删除和查询,按姓名或学号查询。

应用系统分析,建立该系统的功能模块框图以及界面的组织和设计,分析系统中的各个实体及它们之间的关系,根据问题描述,设计系统的类层次;完成系统的应用模块。

三、项目设计(研究)思路

考勤管理系统要实现对学生考勤的信息录入,根据给定信息对学生考勤结果进行分类统计,以及结果查询。

四、具体成果形式和要求

成果形式:

程序和报告。

具体要求:

建立一个学生考勤信息数据库,文件名为“学生考勤管理系统.txt”并从该文件写入数据。

学生考勤管理系统要实现对学生考勤的信息录入,根据给定信息对学生考勤进行分类。

起止日期

工作内容

2017年6月12日

需求分析,按照课题要求,搜集查询相关参考资料。

2017年6月13日

至2017年6月14日

概要设计和详细设计阶段,根据前期的需求分析结果,定义系统实现所需要的自定义函数数据类型及个功能函数。

2017年6月15日

至2017年6月17日

程序的进一步完善,调试与测试撰写课程设计报告。

[1].谭浩强.C程序设计(第三版)[M].北京:

清华大学出版社,2014

[2].梁旭.C语言课程设计(第三版)[M].北京:

电子工业出版社,2013

[3].刁成嘉.面向对象程序设计[M].北京:

机械工业出版社,2004

[4].张鸿.C++语言程序设计[M].北京:

中国电力出版社,2014

指导教师

意见

(签字):

年月日

系(教研室)

主任意见

(签字):

年月日

面向对象程序设计(C++)课程设计说明书

学院名称:

计算机与信息工程学院

班级名称:

通信162

学生姓名:

沈杰

学号:

81__

题目:

学生考勤管理系统的设计与实现

指导教师

姓名:

王南洋

起止日期:

2017年6月12日至2017年6月17日

1系统需求分析5

录入学生的缺课记录5

修改学生的缺课记录5

查询学生的缺课情况5

统计5

统计姓名及节数5

统计课程及人次5

小结5

2总体设计6

3详细设计7

学生缺课信息录用功能模块7

修改某学生缺课信息功能的模块图8

查询某学生缺课信息功能图8

统计某段时间内旷课学生姓名及旷课节数功能模块8

统计某段时间内有学生旷课的课程及旷课人次功能模块9

4系统调试9

系统实现9

类的设计10

5结果分析17

综合测试原始界面18

录入学生缺课记录18

修改学生缺课记录18

查询学生缺课情况19

统计某段时间旷课学生姓名及旷课节数19

6总结20

1系统需求分析

考勤信息记录了学生的缺课情况,它包括:

缺课日期、第几节课(连续用begin-end的形式表示)、课程名称(课程名称中不会出现空格)、学生姓名、缺课类型(迟到、早退、请假及旷课)。

试设计考勤管理系统,使之能提供以下功能:

录入学生的缺课记录

从键盘输入数据提示,为避免重复从键盘输入数据测试时可将数据存储在文件中,利用输入重定向功能读入。

输入格式为:

缺课日期、第几节课、课程名称、学生姓名、缺课类型,每行一条纪录。

例如:

2016-04-292-4中国近代史李某迟到

2017-04-282-4大学生心理素质马某旷课

修改学生的缺课记录

可以对缺课纪录的任意部分进行修改,然后显示一下修改后的纪录。

查询学生的缺课情况

查询结果按照日期升序排序,同一天内按照所缺课程的时间升序排序。

统计

统计姓名及节数

统计某段时间内(以天为单位)旷课学生姓名及旷课节数,查询结果先按旷课节数降序排序,旷课节数相同的学生按姓名升序排序。

统计课程及人次

统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序旷课人次相同的课程按课程名称升序排序。

小结

系统以菜单方式工作。

所谓菜单指用户可以自由选择所要执行的功能。

学生可以通过以上功能录入信息、修改信息、查询信息、整理统计出所要了解的信息除了要实现上述的基本功能之外,本系统还应该在细节上下工夫,使用户使用方便,在使用的过程中保持一个愉快的心情。

学生考勤管理系统有广大的用户群这其中有老师、有教务处主任、有公司管理人员,也可以供给一般用户使用。

总之,该系统可以满足用户需求,实现对其管理的人员的考勤工作。

2总体设计

学生考勤管理系统包含五个大的功能。

分别是:

录入学生缺课信息、修改学生缺课信息、查询某个学生的缺课情况、统计某段时间内(以天为单位)旷课学生姓名及旷课节数和统计某段时间内,有学生旷课的课程及旷课人次。

学生的缺课信息主要包含缺课日期、第几节课、课程名称、学生姓名、缺课类型。

在录入学生缺课信息时根据系统提示逐一输入。

每输入完一条信息,系统会提示是否继续输入、用户可以选择继续或返回主菜单。

在修改学生缺课信息时,用户首先输入要修改的学生姓名,系统会检索如果系统中有该学生的相关信息则系统首先会提示用户修改该学生的那一部分信息,用户可自行选择。

如果系统中没有该

学生的相关信息,则系统会给相关提示,用户可以选择继续输入要修改的学生姓名或选择退出返回主菜单。

在查询学生缺课信息时,用户先输入要查询的学生姓名。

系统检索判断是否存在该学生的信息然后做出相应的提示。

总之,用户可以方便的在系统提示下进行使用。

图1学生考勤管理系统中功能模块图

3详细设计

学生考勤管理系统中四个类的类层次图为

图2学生考勤管理系统中中四个类的类层次图

学生考勤管理系统中各功能模块的实现

图3学生考勤管理系统中菜单函数的功能图

学生缺课信息录用功能模块

图4学生缺课信息录入的功能

修改某学生缺课信息功能的模块图

图5学生考勤管理系统修改学生缺课信息功能图

查询某学生缺课信息功能图

图6学生考勤管理系统查询学生缺课信息功能图

统计某段时间内旷课学生姓名及旷课节数功能模块

图7统计某段时间内旷课学生姓名及旷课节数功能图

统计某段时间内有学生旷课的课程及旷课人次功能模块

图8统计某段时间内有学生旷课的课程及旷课人次功能图

4系统调试

系统实现

程序编写完成后,我进行了程序调试。

调试过程中,出现了以下问题:

当录入学生缺课信息时,出现了无法退出录入函数的情况,主要原因是输入函数中while循环语句没有设置跳出循环的条件。

除此之外,修改某学生缺课信息时,如果没有该学生的缺课信息,系统没有提示要用户没有该学生信息,也没有建议用户重新输入要修改的学生姓名。

由此我发现了该系统修改学生缺课信息的不足。

在该函数中,也可查询要修改的学生缺课信息。

如果没有,则提示用户没有该学生的缺课信息,用户可以选择继续输入要修改的学生姓名或者退出修改环节,可以在循环语句中改变循环进行的条件从而终止循环。

系统实现了提示用户的功能,如果系统中没有你要查询的学生缺课信息,系统将会提示用户,用户可以继续输入要查询的学生姓名也可以通过按系统设置的退出键选择退出查询环节。

通过认真调试,我发现我有了收获。

类的设计

附录:

源程序代码(部分主要程序)

ettime()+1)==*(st1[j].gettime()+1)&&*(st1[i+1].gettime()+2)==*(st1[j].gettime()+2))

if(strcmp(qkn,st1[i].getkechen())==0)

renci++;

returnrenci;

}

etname())==0)

do{a[j]=i;

cout<<"1.修改日期2.修改节次3.修改课程名称4.修改缺课类型"<

cout<<"请输入要选择的数值(1,2,3,4)"<

intb;

cin>>b;

if(b==1)

{cout<<"请输入新日期"<

cin>>y>>m>>d;

st1[i].settime(y,m,d);

}

elseif(b==2)

{cout<<"请输入新节次"<

cin>>jieci;

st1[i].setjieci(jieci);

}

elseif(b==3)

{cout<<"请输入新课程名称"<

cin>>kechen;

st1[i].setkechen(kechen);

}

elseif(b==4)

{cout<<"请输入新缺课类型"<

cin>>queke;

st1[i].setqklx(queke);

}

flgh=1;j++;

}while(b<1||b>4);

if(flgh==0)

{cout<<"没有你要找的学生姓名请重试要退出请按0"<

cin>>k;

}

else

{cout<<"还要继续吗(1\0)退出请按0"<

cin>>k;

}

}

for(inti=0;i

{h=a[i];

xiansi(st1[h]);

}

}

etname())==0)

{u[j]=i;

j++;

}

if(j==0)

{cout<<"没有你所要的学生名字!

";ettime()<<"|"<<*(st1[i].gettime()+1)<<"|"<<*(st1[i].gettime()+2)<<"|"<

}

ettime()+1)<*(st1[i+1].gettime()+1))

qt[i].print(st1[i]);

else

if(*(st1[i].gettime()+1)==*(st1[i+1].gettime()+1)&&*(st1[i].gettime()+2)<*(st1[i+1].gettime()+2))

qt[i].print(st1[i]);

else

if(*(st1[i].gettime()+1)==*(st1[i+1].gettime()+1)&&*(st1[i].gettime()+2)==*(st1[i+1].gettime()+2))

if(strcmp(st1[i].getjieci(),st1[i+1].getjieci())==-1)

qt[i].print(st1[i]);

}

cout<<"是否继续查询(y/n)继续请按y退出按n"<

cin>>n;

}

}

}

etname()<

if(*(st1[0].getjieci()+2)!

='\0')

js=+2;

else

js++;

cout<<"节数:

"<

}

et(r->r[i+1]);

r->n--;

}

charyn;

cout<<"保存修改?

(y/n)"<

cin>>yn;

if(yn=='y')wt(r);

elsereturn;

}

5结果分析

这次的课设,我写的程序也没有什么独到之处,我觉得唯一可以从我的程序可以看出的是数组用得比较多,反正是没啥特色。

不仅如此,还写得功能不全,实在是惭愧。

现在在这里也只能说说它的不足之处了。

类层次不够清晰,纵观整个程序可以发现四个类之间的关系不甚恰当,我有这个感觉。

但我不知如何改进。

函数参数设定不够完美,整个程序中对指针的运用比较少。

对于指针的巧妙运用把握得不够。

还有就是容易missing或者是}这都是些应该改掉的毛病。

除此以外,我对于怎样用文件保存数据还没深入了解。

但我将数据保存到文件后又因文件打不开而无法访问文件中的数据,对于动态链表,我不是很清晰,也就是说无法做到熟稔运用。

在调试过程中我发现在主函数中把字符数组名name赋值给字符指针p即p=name;然后用cout<

在我思考一番后终于明白了,这与内存中的地址值有关。

具体为什么我是解释不清了,调用系统的显示,如果在getname()函数前加一个*号输出的只是一个字符,不加反而能输出所功能时有字符。

getname()函数的返回值为指针类型。

但前面说过利用函数返回指针类型的值并不能输出字符数组中所有的字符,为什么这里又可以呢?

我不知道这一知识,这也算我的程序的不足之处吧!

对于两个统计函数的功能不全,我感到无能为力,我为了这两函数苦思了两天硬是没凑合来。

到后来脑子里都乱了,运行时屏幕上尽是些乱七八糟的东西。

结果不是很好,但过程够了就行。

综合测试原始界面

图9综合测试原始界面

录入学生缺课记录

图10录入学生缺课记录

修改学生缺课记录

图11修改学生缺课记录

查询学生缺课情况

图12查询学生缺课情况

统计某段时间旷课学生姓名及旷课节数

图13统计某段时间旷课学生姓名及旷课节数

6总结

这次的程序设计相对于上学期还是有了进步的。

学生考勤管理系统要求至少要有四个类,在起初,对于定义哪四个类我是不清楚的,通过仔细的研读问题描叙终于在脑海里确定了这四个类。

既然是学生考勤管理系统,那由学生缺课信息中的日期我想到了时间类,这是一个很简单的类。

从系统的几大功能我又想到了系统的基础就是缺课学生的缺课信息,于是我又想到了一个信息类,还有两个类是根据两个统计功能想到的,在现在看来似乎有些不妥。

通过这次的课程设计我明白了学习程序设计语言必须要勤做实验,通过实验总结经验。

平时遇到的一些小问题一定要重视,越是基础的知识越要理解透彻。

比如指针与数组方面的知识,一旦没有弄清楚,在设计程序时就会吃亏。

这次的课程设计中,我遇到了很多的问题,有的通过思考或查看书本解决了,有的还留在脑子里。

只有通过孜孜不倦的求索我们才会有进步,不懂得思考就不能真正的掌握一门知识。

这次的实验给以了我警示,它让我明白我所掌握的知识还很欠缺,对于继承与派生这一章的知识,我以为自己勉强掌握了,这次实验后我发现我掌握得还不够。

基类的保护成员公有继承到派生类,类外是否可以通过对象来访问呢?

原先我认为是可以的,经过这次程序设计我知道我错了。

总之,我觉得做学问不应该马虎。

对于所学一定要有深入的理解这也是我这次课程设计得到的启示。

参考文献

[1].谭浩强.C程序设计(第三版)[M].北京:

清华大学出版社,2014

[2].梁旭.C语言课程设计(第三版)[M].北京:

电子工业出版社,2013

[3].刁成嘉.面向对象程序设计[M].北京:

机械工业出版社,2004

[4].张鸿.C++语言程序设计[M].北京:

中国电力出版社,2014

学生姓名:

填表日期:

2017年06月17日

指导教师评语

成绩评定

指导教师签名:

填表日期:

年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1