C语言课程设计报告_第1页
C语言课程设计报告_第2页
C语言课程设计报告_第3页
C语言课程设计报告_第4页
C语言课程设计报告_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

欢迎下载 XX大学 课课 程程 设设 计计 报报 告告 课程设计名称:C 语言课程设计语言课程设计 课程设计题目:排班系统 院(系):XX学院 专 业:XX 班 级:XX 学 号:XXXXXXXXXXXXX 姓 名:XX 指导教师:XXX 完成日期:XX年X月X日 欢迎下载 目目 录录 第第 1 章章 需求分析与概要设计需求分析与概要设计.1 1.1 需求分析 .1 1.2 概要设计 .1 第第 2 章章 详细设计详细设计.2 2.1 排班系统基本结构 .2 2.1.1 排班系统细节剖析.2 2.2 程序详细介绍(算法实现) .3 第第 3 章章 调试分析调试分析.5 3.1 我的调试: .5 3.2 运行结果 .5 第第 4 章章 用户手册及结束语用户手册及结束语.8 4.1 用户手册 .8 4.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.12.1 每个人的工作选择每个人的工作选择 周一周二周三周四周五周六周日 1.zhao 工作工作工作休息工作工作工作 2.qian 工作工作工作工作工作休息工作 3.sun 工作工作工作工作工作工作休息 4.li 工作工作休息工作工作工作工作 5.zhou 工作工作休息工作工作工作工作 6.wu 工作工作工作工作工作工作休息 表表 2.22.2 对应的数组对应的数组 a 0(下标) 123456 0(下标)0 110111 1(下标)1 111101 2(下标)2 111110 3(下标)3 101111 4(下标)4 101111 欢迎下载 5(下标)5 101111 6(下标)6 111110 2. 数据转化为方案: 该部分是以 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 程序设计(第三版).清华大学出版社,2009 2 Harvey M.Deitel,Paul J.Deitel 编著 聂雪军、贺军译. C 程序设计经典教程. 清华大学出版社,2006 3 王敬华、林萍、张清国编著. C 语言程序设计教程(第二版). 清华大学出版社,2013 4 谭浩强著. C 程序设计题解与上机指导(第三版). 清华大学出版社,2008 5 温海、张友、童伟等编著. C 语言精彩编程百例. 中国水利水电出版社,2004 欢迎下载 附 录(程序清单) 程序源代码:程序源代码: #define N 10 #include struct 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, 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, 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+; /赋值 0 for(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, if(m=1) printf(n 请问是第几个人?他的选择是?); scanf(%d %d, 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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论