保安值班安排系统
第一章 课程设计的目的和要求
1.1课程设计的目的
C++课程设计的主要目的是根据课堂讲授内容,学生做相应的自主练习,在进行课程设计的过程中,消化自己所学的内容,使得课堂教学与实验实践之间关系更为密切, 同时也培养综合运用C++程序设计课程所学到的知识和编写C++程序解决实际问题的能力,以及良好的程序设计习惯。
通过课程设计的训练,学生了解程序设计的基本开发过程,掌握编写、调试和测试C++语言程序的基本技巧,充分理解结构化程序设计的基本方法,熟悉运用结构化程序设计的方法。
1.2课程设计的目标
本课程设计的目标:
1. 巩固和加深学生对C++语言课程的基本知识的理解和掌握; 2. 掌握C++语言编程和程序调试的基本技能; 3. 掌握利用C++语言进行软件设计的方法; 4. 提高书写程序设计说明文档的能力; 5. 提高运用C++语言解决实际问题的能力。
1.3课程设计要求
基本要求:
1. 分析课程设计题目的要求;
2. 对系统功能模块进行分析,写出详细设计说明文档; 3. 编写程序代码,调试程序使其能正确运行; 4. 设计完成的软件要便于操作和使用; 5. 设计完成后提交课程设计报告。
第二章 课程设计任务内容
2.1 课程设计题目
保安人员休息时间安排系统。
2.2背景
如今是信息高速发展的时代,我们已经进入了信息社会。作为计算机专业的学生,我们更应该了解信息的重要性,而电脑是当今社会的重要交流工具。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。作为电脑操作者,动手能力无疑是最重要的环节,课程设计就是锻炼动手能力的不错平台。作为高科技人才,我们必须会运用C++,编写应用程序,是一个计算机学院学生必备的技能。无论是以后的工作,还是现在的学习,都要求我们能够做好课程设计。保安人员休息时间安排系统是一个普遍的软件,是锻炼我们的好方法,做好它是对我们能力的肯定。
2.3任务内容
下面是本程序的具体功能要求:
1、 管理员和保安通过输入不同的信息进入不同的界面; 2、 保安通过输入信息查询所有的休息时间安排情况; 3、 管理员查询所有保安的休息时间安排情况;
4、 管理员输入每个保安自己认为适合的休息日,并进行判断。
第三章 模版设计说明
3.1 模块
3.1.1总体结构流程图
图3-1 总体结构流程图
管理员登录后与保安人员登录后的界面不同。管理员可以修改相关的保安信息,而保安人员却不能,他只能查看自己的休息时间信息。
3.1.2模块描述
1.主函数
主函数为无返回值空类型函数,主要功能是实现登录界面。 2. 管理员登录函数
此函数为无返回值空类型函数,主要功能是通过调用文件生成
函数、转换函数和判断七个变量是否两两相等的函数输入保安自己认为合适的休息时间,并输出所有的休息时间排班情况。 3.文件生成函数
此函数为无返回值空类型函数,主要功能是通过输入数据存储
的文件名打开文件。 4. 转换函数
此函数为有返回值的函数,主要功能是将字符转换为整型,并
返回整型值。
5.判断七个变量是否两两相等的函数
此函数为有返回值的函数,主要功能是判断变量是否两两相 等。
6. 保安登录函数
此函数为无返回值空类型函数,主要功能是输出所有的保安休
息时间排班情况。
3.2 主函数的流程图
图3-2 主函数流程图
3.3 管理员登录函数的流程图
根据要求输入数据存储的文件名打开文件,然后输入保安人员自己认为合适的休息日,经判断后输入完成后输出所有的休息时间排班情况。函数流程图如下所示:
图3-3管理员登录函数流程图
3.4保安登录函数
该函数为输出所有的保安休息时间排班情况,流程图如下所示:
图3-4 保安登录函数流程图
第四章 软件使用说明及运行结果
4.1使用说明
该程序可以实现对保安休息日有关信息查找与管理的功能,安装VisualC++6.0中文版后,在工具栏“文件”中单击“新建”选项,单击“文件”菜单,选择“C++ Source file”输入文件名“保安休息时间安排系统”。开始输入程序,程序输入完成,单击“组建”工具栏,选择“编译[保安休息时间安排系统.cpp1]”, 待程序无误后,开始执行程序。
在编码时,注意代码的书写规范,包括命名惯例、注释、分隔和缩进等,使程序层次清晰,增强可读性和维护性。编码操作完成后,先静态检查一下有没有语法错误,然后进行编译,更深一步检查语法错误。待编译通过时运行程序,观察是否能够正常运行,若有问题,再去修改源程序,直到达到预期的效果。
根据主要的流程图,函数功能,输入所选进入对象操作,便可得到如下图1,再根据提示输入所需数据,输出所有的排班情况以及重新修改之后的所有排班情况,如图2和图3。
4.2 运行结果
4.2.1
执行void main()/*主函数*/
图4-1 主函数调试图
4.2.2 执
行
void
manager()/*
保
安
登
录
函
数
*/
图4-2 管理员登录函数调试图
4.2.3
执行void security()/*保安登录函数*/
图4-3 保安登录函数调试图
第五章 课程设计心得与体会
这次课程设计历时两个多星期。刚开始时,思绪全无,举步维艰,对于理论知识学习不够扎实的我深感“书到用时方恨少”,再加上因为已经过去一个学期了,期间又没有怎么看书,考完试就放下了,许多知识都已经忘记了。于是我重拾教材与实验手册,对知识系统而全面进行了梳理,遇到难处先是自己思考再向同学老师请教,终于基本掌握了基本理论知识。最终我完成了这个C++语言程序的设计,认真完成了课程设计报告。
我做的是保安休息时间安排系统,虽然是很简单的一个小程序,但对我一个C++学得不怎么好的人来说却是一个很大的困难,更何况这是第一次做课程设计。所以,在得知自己要做这个课程设计时,真不知道应该如何开始。这时才知道上课时老师们不厌其烦的教导是多么的宝贵,这时才后悔上课时自己没有认真听课。可是现在一切都晚了,现在要做的是拿出书本重新复习一下。经过几天的努力,大体上把课本上的知识点看了一遍,然后在网上找了一下相关资料,体会别人是如何编程。
回顾这次课程设计,我收获了很多。首先,在这过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,如何去实现这个计划;其次,在设计过程中,我认识到学好计算机要重视实践操作,不仅仅是学习C++语言,还是其它的语言,以
及其它的计算机方面的知识都要重在实践;最后,我还大致了解了软件开发的大体过程及各个步骤,这对将来的学习和工作是很有帮助的。
对于计算机专业的大学生来说,积累实战经验是一项极其重要的内容,很可能成为将来就业的敲门砖。而综合课程设计就是积累实战经验的一个过程,虽然程序的规模不是很大,但是能够让我们尽早地认识软件开发的重要性和必要性,为将来的就业打下坚实的基础。
附录1:参考文献
[1]、谭浩强编著.C++程序设计. 北京:清华大学出版社,2004 [2]、Decoder 编著.C++程序设计. 北京:中国铁道出版社,2002 [3]、夏云庆编著.Visual C++ 6.0数据库高级编程. 北京:希望电子出版社 2002
[4]、伍俊良编著:Visual C++6.0课程设计与系统开发案例. 北京:清华大学出版社,2002.11
[5]、(美)戴特尔(Deitel,H.M. )等编著,张引等译:C++大学基础教程(第五版),北京:电子工业出版社,2006.6
附录2:程序清单
以下是保安休息时间安排系统的源代码:
#include #include #include using namespace std;
void manager();/*管理员登录函数声明*/ void security(); /*保安登录函数声明*/
void file_edit(ofstream& fout,char file_name[]); //文件生成函数声明
int compare_values(int a,int b,int c,int d,int e,int f,int g);//判断七个变量是否两两相等的函数声明
int exchange(char cha);//字符转换为整型的函数声明 void load();
void main()/*主函数*/ {
char k;
cout
*************************************** "
cout
cout
cout >k; switch(k) {
case 'p':
cout
manager (); break; case 's':
cout
cout
void manager()/*管理员登录函数*/ {
char file_name[30]; ofstream fout; //int choose;
file_edit(fout,file_name); //调用文件生成函数
/*cout > choose; switch(choose) { case 1:*/ load();
system("cls"); system("date /t"); system("time /t"); system("color fc");
loop:
int a[7][7]={0},i,j; string select[7];
string name[]={"星期日"," 星期一"," 星期二"," 星期三"," 星期四"," 星期五"," 星期六"};
for(j=0;j
switch(j) {
case 0:cout
cout>select[j]; }
for(i=0;i
{a[i][exchange(select[i][j])]=1;}//调用转换函数, 将字符型数据转化为整型
int b[7][7];
int m[7]={0,0,0,0,0,0,0};
for(i=0;i
for(j=0;j
{b[i][m[i]]=j;m[i]=m[i]+1;} //用m[i]记录b[i]中有用数据个数
}
cout
int x1,x2,x3,x4,x5,x6,x7;
int count=0; //定义计数变量
for(x1=0;x1
for(x2=0;x2
for(x3=0;x3
for(x4=0;x4
for(x5=0;x5
for(x6=0;x6
for(x7=0;x7
{
if(!(compare_values(b[0][x1],b[1][x2],b[2][x3],b[3][x4],b[4][x5],b[5][x6],b[6][x7])))//调用判断七个变量是否两两相等的函数
{
count++;
cout
cout
cout
fout
fout
}
}
if(count==0) //判断是否重新开始
{
cout
goto loop;
}
else
cout
}
int exchange(char cha)//字符转换为整型的函数定义
{
char q[2];
q[0]=cha;
return atoi(q); //字符转换为整型
}
int compare_values(int a,int b,int c,int d,int e,int f,int g)//判断七个变量是否两两相等的函数定义
{
if(a==b||a==c||a==d||a==e||a==f||a==g||b==c||b==d||b==e||b==f||b==g||c==d
||c==e||c==f||c==g||d==e||d==f||d==g||e==f||e==g||f==g)
//判断变量是否两两相等
return 1;
else
return 0;
}
void file_edit(ofstream& fout,char file_name[])//文件生成函数定义 {
cout
cin>>file_name;
fout.open(file_name,ios::app);
if(fout.fail()) //判断是否能打开文件 {
cout
exit(1);
}
fout
}
void load()
{
system("cls");
system("date /t");
system("time /t");
system("color 1f");
cout
cout
cout
for (int i0=0;i0
if(i0%1000000==0)
{
for(int j0=0;j0
{
}
if(j0%10000000==0) cout "; } } system("color 2f"); cout "; } } system("color 3f"); cout
bool IsChecked(int p[])
{
int i, j;
for (i=0; i
{
for (j=0; j
if (j == 7) return false;
}
return true; //*这个函数的作用是确保0-6这7个数字均包含在该书组中*//
}
void security()/*保安登录函数*/
{
char *WEEK[7] = {"日", "一", "二", "三", "四", "五", "六"};
int j, s=0;
int* ren = new int[7];
int * rest = new int[7];
long i,k;
for (i=0; i
{
for (j=0; j
{
ren[j]= (i>>(3*j))&7; //*通过这个循环,穷尽0-7在数组中所有的排列组合方式*//
}
if (!(ren[0]==2 || ren[0]==4))continue; //*如果赵保安不是休周
二或周四,就不用循环了。*//
else if (!(ren[1]==1 || ren[1]==6))continue;//*如果钱保安不是休周一或周六,就不用循环了。*//
else if (!(ren[2]==3 || ren[2]==0))continue;//*如果孙保安不是休周三或周日,就不用循环了。*//
else if (!(ren[3]==5))continue; //*如果李保安不是休周五,就不用循环了。*//
else if (!(ren[4]==1 || ren[4]==4 || ren[4]==6))continue; //*如果周保安不是休周一或周四或周六,就不用循环了。*//
else if (!(ren[5]==2 || ren[5]==5))continue; //*如果吴保安不是休周二或周五,就不用循环了。*//
else if (!(ren[6]==3 || ren[6]==6 || ren[6]==0))continue;//*如果陈保安不是休周三或周六或周日,就不用循环了。*//
else if (!IsChecked(ren)) continue; //*至此,所有的保安可按他们的愿望休假,但是此时的方案可能有两个人同休一天的*//
//*情况发生,因此用这个函数排除,如果0-6这七个数字(一周七天)任何一个包含在数组中则此次匹配失败。*//
++s;
cout
cout
cout
for (j=0; j
cout
}
cout
}
}