




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
XX大学课 程 设 计 报 告课程设计名称:C语言课程设计课程设计题目:排班系统 院(系):XX学院专 业:XX班 级:XX学 号:XXXXXXXXXXXXX姓 名:XX 指导教师:XXX完成日期:XX年X月X日目 录第1章 需求分析与概要设计11.1 需求分析11.2 概要设计1第2章 详细设计22.1 排班系统基本结构22.1.1 排班系统细节剖析22.2 程序详细介绍(算法实现)3第3章 调试分析53.1 我的调试:53.2 运行结果5第4章 用户手册及结束语84.1 用户手册84.2 结束语8参考文献9附 录(程序清单)10第1章 需求分析与概要设计1.1 需求分析1.题目要求:为多名保安设计一个排班系统,每人可以自行预先选出一天为休息日,系统打印可能的轮班方案并存储结果。尽可能做到令所有人满意,保排班方案的公平性。2.题目分析:本题的重点和难点在于保安的人数是不确定的,且他们可能选择的休息日也无法确定,所以方案的结果也就不仅仅有一种。由此可以看出只有解决好这两个问题,才能够符合该题目的要求,完成保安的排班工作。1.2 概要设计1.总体思路:对于这道题目,我的思路是采用二维数组的方式来解决。大概过程是先假设所有人都上班,即没有休息日。然后再让每个人进行选择自己希望的休息日。先每个人选择出一天,然后系统进行排班,输出其所输入数据的对应方案。然后在第一次所输数据的基础上,若还有其他选择,则进行二次输入,以此更改初始数据,重新设计可能的排班方案。2.细节实现:因为题目的要求是打印可能的方案,那么如何来实现打印呢?我采用了通过对二位数组中的每一个值用阿拉伯数字0和1来标记,以1来表示工作,0来表示休息。3.功能作用:本系统系保安的排班系统,可以完成基本的排班功能,在此基础上,还为用户设计了二次输入的选项,以此来解决当所输数据不满足要求,无法完成排班的问题,同时也可以为用户提供更多的可行方案,而不是仅仅局限于一种。第2章 详细设计开始2.1 排班系统基本结构 屏幕显示欢迎界面 输入选择排出方案其他选择有保存方案 无 结束图2.1 排班系统基本结构此排班系统主要分为:显示欢迎界面、排班界面及选择界面。该系统各部分间有序衔接,各尽其责,如图2.1所示,充分展现了该系统的协调性与整体性。2.1.1 排班系统细节剖析此排班系统的重点在于每次对二维数组的赋值操作,最开始时是将所有的初值都赋为1,然后以0来赋给选择对应日期、对应人的对应数值。这样一来,便可以将每个人的每天上班与否进行标记(1是工作,0是休息),这道题目的另一个难点在于对每个人有比较公平的方案,所以该问题在设计时,我就将含有小于规定数量工作人数的方案标记为不可行方案,同时在屏幕输出该方案排出的结果,以供操作人员查阅该方案到底哪里不可行,利于下次输入数据地改动。2.2 程序详细介绍(算法实现)我的这套程序大致可以分为三个部分:1. 数据输入部分即第一次输入数据(每个人的选择),该部分是通过二位数组来实现的,以第几个人来控制数组的第一个下标,以周几来控制该数组的第二个下标,这样就可以将所有的人所有的天数看做一个二维表来实现选择信息的数字化,如表2.1、2.2所示。表2.1 每个人的工作选择周一周二周三周四周五周六周日1.zhao工作工作工作休息工作工作工作2.qian工作工作工作工作工作休息工作3.sun工作工作工作工作工作工作休息4.li工作工作休息工作工作工作工作5.zhou工作工作休息工作工作工作工作6.wu工作工作工作工作工作工作休息表2.2 对应的数组a0(下标)1234560(下标)01101111(下标)11111012(下标)21111103(下标)31011114(下标)41011115(下标)51011116(下标)61111102. 数据转化为方案:该部分是以for循环为工具手段,对每一个数据进行扫描判断,然后将工作的人打印出来,即保安工作排班表。这样一个方案就完成了。3. 方案的更改:此部分则是以更改个别数据为主,其他数据依然参照之前的数据,其实现的方法就是用第二次输入的数据,对第一次的数据进行覆盖,在这个覆盖的过程中,我们不仅要将二次选择的人及选择的天对应的数据更改为0,同时还要对原数组中此人的选择对应的数值恢复为零,我最开始设计时,就忽略了这一点,造成输出的方案有的人一周休息一天,有的人休息了两天,失去了设计方案的公平性。以此造成很多困扰,后来经过详细分析、查找,我采用了每次只覆盖数组中的数值,而将二次选择的人的首选数字进行保留,这样就实现了公平排班的理念。第3章 调试分析3.1 我的调试:1. 在刚刚完成编译时,程序中有很多语法错误,如将“;”打成了中文输入法,甚至是干脆忘记打的情况,还有比如将for循环下面的括号只打了一半等,这些语法错误给我造成了许多困扰,后经逐条更改,最后终于得以运行。2. 除了一些语法错误,在运行的过程中还出现了许多其他的错误。如上文提到的由于没有将初次选择更改回为工作,造成方案的不公平等,这个问题我在初期一直没有弄懂,后经单步调试,对数组中的逐个数字进行跟踪,终于发现了这个问题,并想出方案解决3.2 运行结果该软件运行时会出现以下几种情况:1. 正常进行排班,显示出对应的排班方案,如图3.1所示: 图3.1 正常排班2. 更改其中一个人的选择,输出第二方案,如图3.2: 图3.2 其他选择3. 无其他选择,保存方案至文件“保安排班方案”,如下图: 图3.3 存储的方案4.当用户输入的选择对应的方案不可行时,软件会给出提示,如图3.4所示: 图3.4 方案不可行5.这时我们对选择进行二次调整,如图3.5所示: 图3.5 调整方案第4章 用户手册及结束语4.1 用户手册本软件用户请注意以下几点:1. 当打开本软件时,会出现欢迎使用界面,同时出现输入提示,请您按照提示依次进行操作;2. 值得注意的是,本软件采用的是输入数字进行选择,每次输入数字后,请输入回车键;3. 当电脑屏幕提示更改选择时,在输入两个数字时,请以空格隔开。4.2 结束语本系统是我经过两周时间冥思苦想得来的结果。在设计该系统时我也遇到了许多困难。如最开始时我想采用的是想将所有数组同时赋值,然后同时进行扫描,可是后来发现这样的方法是行不通的(或许以后学的多了能够解决,但目前来说知识量还很有限),因为在进行两个for循环时,会出现交叉限制的情况,无法完成扫描,所以我最终想出了一次只对一个二维表赋值、扫描。对于其他方案则是以二次输入数据的方式进行更改初值,以达到排班的目的。当然,可能该系统在功能上还存在一些弊端,但至少这也是我两周来的辛苦成果。我以后一定会继续努力,对该系统进行进一步的完善。参考文献1 谭浩强著. C程序设计(第三版).清华大学出版社,20092 Harvey M.Deitel,Paul J.Deitel编著 聂雪军、贺军译. C程序设计经典教程.清华大学出版社,20063 王敬华、林萍、张清国编著. C语言程序设计教程(第二版). 清华大学出版社,20134 谭浩强著. C程序设计题解与上机指导(第三版). 清华大学出版社,20085 温海、张友、童伟等编著. C语言精彩编程百例. 中国水利水电出版社,2004附 录(程序清单)程序源代码:#define N 10#includestruct guard char name20; int choice;guN;void main()int i,j,k,m,total,x,y;int aN7,b7=0,0,0,0,0,0,0;FILE *fp;fp=fopen(d:保安排班方案.txt,w);printf(nn*欢迎使用微微排班软件,本软件代表制作人祝您工作顺利,阖家欢乐*nn*下面就让我们一起开启排班的旅程吧!*nn);printf(请输入保安总人数:n);scanf(%d,&total);for(i=0;itotal;i+) /将所有值初始化为一for(j=0;j7;j+)aij=1;for(i=0;itotal;i+) /以每个人为线索进行循环printf(请输入保安的姓名:n); scanf(%s,);printf(他的选择是:1.周一;2周二;3.周三;4.周四;5.周五;6.周六;7.周日n);scanf(%d,&gui.choice);if(gui.choice=1)ai0=0;b0+;if(gui.choice=2)ai1=0;b1+;if(gui.choice=3)ai2=0;b2+;if(gui.choice=4)ai3=0;b3+;if(gui.choice=5)ai4=0;b4+;if(gui.choice=6)ai5=0;b5+;if(gui.choice=7)ai6=0;b6+; /赋值0for(k=0;k+)for(j=0;j=total-1) /判断方案是否可行printf(方案不可行!如下:n);fprintf(fp,n您所输入的数据派出的方案不可行!如下:n); fprintf(fp,n周一:); printf(n周一:); for(i=0;itotal;i+)if(ai0=1)printf(%st,);fprintf(fp,%st,); fprintf(fp,n周二:); printf(n周二:); for(i=0;itotal;i+)if(ai1=1)printf(%st,);fprintf(fp,%st,); fprintf(fp,n周三:); printf(n周三:); for(i=0;itotal;i+) if(ai2=1) printf(%st,);fprintf(fp,%st,); fprintf(fp,n周四:); printf(n周四:); for(i=0;itotal;i+) if(ai3=1) printf(%st,);fprintf(fp,%st,); fprintf(fp,n周五:); printf(n周五:); for(i=0;itotal;i+) if(ai4=1) printf(%st,);fprintf(fp,%st,); fprintf(fp,n周六:); printf(n周六:); for(i=0;itotal;i+) if(ai5=1) printf(%st,);fprintf(fp,%st,); fprintf(fp,n周日:); printf(n周日:); for(i=0;itotal;i+) if(ai6=1) printf(%st,); fprintf(fp,%st,); /完成一次 printf(n请问还有其他选择吗?n1.有;2,没有n); fprintf(fp,nnn其他选择:n); scanf(%d,&m); if(m=1) printf(n请问是第几个人?他的选择是?); scanf(%d %d,&x,&y); x-; y-; axgux.choice-1=1; axy=0; bgux.choice-1-; by+; else fprintf(fp,无);break; fclose(fp);课程设计总结:在本次课程设计中,我收获颇多,从以前简简单单的仅有理论知识,到现在的通过理论知识来解决实际问题,我收获的不仅仅是一个排班系统,更是一种能力,一种实实在在的动手能力。感谢老师能给我们这个实践的机会。这次课程设计,从构思,到设想,到实际动手去编程,到每一次的发现问题,解决问题,再到最后的报告,都是我一步一步,一个脚印一个脚印自己走出来的,而这每一次困难
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 包饺子活动方案策划(3篇)
- 河源企业活动拓展策划方案(3篇)
- 路面病害的施工方案(3篇)
- 公司生日活动策划创意方案(3篇)
- 新航线考试题库及答案
- 北京市门头沟区2023-2024学年八年级下学期期末质量监测道德与法制考点及答案
- 北京市门头沟区2023-2024学年八年级上学期期末考试英语考点及答案
- 忻州医疗面试题目及答案
- 玩具宝贝700字(10篇)
- 企业员工手册及政策宣导模板
- 口腔门诊运营管理实务
- 2024年湖南省古丈县卫生局公开招聘试题带答案
- 毛巾关键工序管理制度
- 2025至2030年中国电动船行业市场供需态势及发展前景研判报告
- 2025-2030年中国城市轨道交通行业市场现状供需分析及投资评估规划分析研究报告
- 2025安徽龙亢控股集团有限公司招聘招聘21人笔试参考题库附带答案详解析集合
- 国企职称评聘管理制度
- T/CNCA 048-2023矿用防爆永磁同步伺服电动机通用技术条件
- 安装家具合同协议书范本
- 月饼代销合同协议书
- 购买肉牛合同协议书
评论
0/150
提交评论