1、C语言 编写保安值班安排系统保安值班安排系统题目:某公司有7名保安人员:赵、钱、孙、李、周、吴、陈。由于工作需要需要进行轮休制度,一星期中每人休息一天。预先让每个人选择自己认为合适的休息日。请编制一程序,打印轮休的所有可能的方案。当然是每个人都满意,例如每个人选择的休息日如下: 赵:星期二、星期四 钱:星期一、星期六 孙:星期三、星期日 李:星期五 周:星期一、星期四、星期六 吴:星期二、星期五 陈:星期三、星期六、星期日要求:(1)信息录入功能(值班信息用文件保存)输入 (2)值班信息浏览功能 输出 (3)调换班功能 (4)根据值班时间及次数计算薪酬运行结果 执行void main()/*主
2、函数*/void wage();/*工资登录函数*/代码:#include #include #include using namespace std;void manager();/*管理员登录函数声明*/void security(); /*保安登录函数声明*/void wage();/*工资登录函数声明*/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 exc
3、hange(char cha);/字符转换为整型的函数声明void load();void main()/*主函数*/ char k; cout * endl; cout 欢迎使用保安值班安排系统! endl; cout 制作人:xx 时间:2011-12-15 endl; cout * endlendl; cout 请选择您所需要的服务 endl; cout p:管理员n s:保安n g:工资 n e:退出nk; switch(k) case p: cout这是一个员工休息时间安排的程序。nendl; manager (); break; case s: cout请查看所有排班情况:nend
4、l; security (); break; case g: cout以工作天数计算工资:nendl; wage (); break; case e: exit(0); default: cout输入信息错误!n请输入字母p或s或e或g.nendl;break; void manager()/*管理员登录函数*/ char file_name30; ofstream fout; /int choose; file_edit(fout,file_name); /调用文件生成函数 /*cout 1:选择自己的休息日 endl; cout 2:显示排班的结果 endl; cout choose; s
5、witch(choose) case 1:*/ load(); system(cls); system(date /t); system(time /t); system(color fc); loop: int a77=0,i,j; string select7; string name=星期日,星期一,星期二,星期三,星期四,星期五,星期六; for(j=0;j7;j+) / 进行数据输入 switch(j) case 0:cout赵;break; case 1:cout钱;break; case 2:cout孙;break; case 3:cout李;break; case 4:cout
6、周;break; case 5:cout吴;break; case 6:cout陈;break; coutselectj; for(i=0;i7;i+) /对特定元素赋值为1 for(j=0;jselecti.length();j+) aiexchange(selectij)=1;/调用转换函数,将字符型数据转化为整型 int b77; int m7=0,0,0,0,0,0,0; for(i=0;i7;i+) /将输入数据传给二维数组b77 for(j=0;j7;j+) if(aij=1) bimi=j;mi=mi+1; /用mi记录bi中有用数据个数 coutntt经分析结果为:n; int
7、 x1,x2,x3,x4,x5,x6,x7; int count=0; /定义计数变量 for(x1=0;x1m0;x1+) /输出每条记录 for(x2=0;x2m1;x2+) for(x3=0;x3m2;x3+) for(x4=0;x4m3;x4+) for(x5=0;x5m4;x5+) for(x6=0;x6m5;x6+) for(x7=0;x7m6;x7+) if(!(compare_values(b0x1,b1x2,b2x3,b3x4,b4x5,b5x6,b6x7)/调用判断七个变量是否两两相等的函数 count+; coutSolution:count:n /输出结果到屏幕 赵t钱
8、t孙t李 t周t吴t陈endl; cout = endl; coutnameb0x1tnameb1x2tnameb2x3tnameb3x4 tnameb4x5tnameb5x6tnameb6x7endlendl; foutSolution:count:n /输出结果到文件中保存 赵t钱t孙t李 t周t吴t陈endl; foutnameb0x1tnameb1x2tnameb2x3tnameb3x4 tnameb4x5tnameb5x6tnameb6x7endlendl; if(count=0) /判断是否重新开始 cout此方案行不通,请重新输入。endl; goto loop; else co
9、ut经分析总共有count种方案endl; int exchange(char cha)/字符转换为整型的函数定义 char q2; q0=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 retur
10、n 0;void file_edit(ofstream& fout,char file_name)/文件生成函数定义 coutfile_name; fout.open(file_name,ios:app); if(fout.fail() /判断是否能打开文件 cout打开文件失败。endl; exit(1); foutendl endl; void load() system(cls); system(date /t); system(time /t); system(color 1f); cout nnn; cout nnnntttt 系统加载中.; cout nnnnt ; for (in
11、t i0=0;i010000000;i0+) if(i0%1000000=0) for(int j0=0;j010000000;j0+) if(j0%10000000=0) cout ; system(color 1f); cout 系统 ; for (int i1=0;i110000000;i1+) if(i1%1000000=0) for(int j1=0;j110000000;j1+) if(j1%10000000=0) cout ; system(color 2f); cout 加载; for (int i2=0;i210000000;i2+) if(i2%1000000=0) for
12、(int j2=0;j210000000;j2+) if(j2%10000000=0) cout ; system(color 3f); cout 成功.; for (int i3=0;i310000000;i3+) if(i3%1000000=0) for(int j3=0;j310000000;j3+) if(j3%8000000=0) cout ; bool IsChecked(int p) int i, j; for (i=0; i7; +i) for (j=0; j7&pj!=i; +j); /*从0到6循环,如果数组中缺少0-6的任何一位数字,则返回0,如果0-6亿权,则返回。*/
13、 if (j = 7) return false; return true; /*这个函数的作用是确保0-6这7个数字均包含在该书组中*/ void wage()/*工资登录函数*/ float t,wage,zw,day; int i,j; for(j=0;j7;j+) / 进行数据输入 switch(j) case 0:cout赵;break; case 1:cout钱;break; case 2:cout孙;break; case 3:cout李;break; case 4:cout周;break; case 5:cout吴;break; case 6:cout陈;break; cout
14、请输入值班时间,天数和每小时工资数:tdaywage; zw=t*wage*day; cout应发工资zwendl; void security()/*保安登录函数*/ char *WEEK7 = 日, 一, 二, 三, 四, 五, 六; int j, s=0; int* ren = new int7; int * rest = new int7; long i; for (i=0; i2097152; +i) for (j=0; j(3*j)&7; /*通过这个循环,穷尽0-7在数组中所有的排列组合方式*/ if (!(ren0=2 | ren0=4)continue; /*如果赵保安不是休
15、周二或周四,就不用循环了。*/ else if (!(ren1=1 | ren1=6)continue;/*如果钱保安不是休周一或周六,就不用循环了。*/ else if (!(ren2=3 | ren2=0)continue;/*如果孙保安不是休周三或周日,就不用循环了。*/ else if (!(ren3=5)continue; /*如果李保安不是休周五,就不用循环了。*/ else if (!(ren4=1 | ren4=4 | ren4=6)continue; /*如果周保安不是休周一或周四或周六,就不用循环了。*/ else if (!(ren5=2 | ren5=5)continu
16、e; /*如果吴保安不是休周二或周五,就不用循环了。*/ else if (!(ren6=3 | ren6=6 | ren6=0)continue;/*如果陈保安不是休周三或周六或周日,就不用循环了。*/ else if (!IsChecked(ren) continue; /*至此,所有的保安可按他们的愿望休假,但是此时的方案可能有两个人同休一天的*/ /*情况发生,因此用这个函数排除,如果0-6这七个数字(一周七天)任何一个包含在数组中则此次匹配失败。*/ +s; coutsolution: s endl; cout 赵 t钱 t孙 t李 t周 t吴 t陈n; cout =n; for (j=0; j7; +j) cout 星期 WEEKrenj t; cout endl;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1