还剩15页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
大学XX课程设计报告课程设计名称C语言课程设计课程设计题目排班系统院(系)学院XX专业XX班级XX学号XXXXXXXXXXXXX姓名XX指导教师XXX完成日期年月日XX XX第章用户手册及结束语
44.1用户手册本软件用户请注意以下几点当打开本软件时,会出现欢迎使用界面,同时出现输入提示,请您按照提示
1.依次进行操作;值得注意的是,本软件采用的是输入数字进行选择,每次输入数字后,请输
2.入回车键;当电脑屏幕提示更改选择时,在输入两个数字时,请以空格隔开
3.
4.2结束语本系统是我经过两周时间冥思苦想得来的结果在设计该系统时我也遇到了许多困难如最开始时我想采用的是想将所有数组同时赋值,然后同时进行扫描,可是后来发现这样的方法是行不通的(或许以后学的多了能够解决,但目前来说知识量还很有限),因为在进行两个循环时,会出现交叉限制的情况,无法完成扫for描,所以我最终想出了一次只对一个二维表赋值、扫描对于其他方案则是以二次输入数据的方式进行更改初值,以达到排班的目的当然,可能该系统在功能上还存在一些弊端,但至少这也是我两周来的辛苦成果我以后一定会继续努力,对该系统进行进一步的完善参考文献谭浩强著.程序设计(第三版).清华大学出版社,
[1]C2009⑵编著聂雪军、贺军译.程序设计经典教程.清华大Harvey M.Deitel,Paul J.Deitel C学出版社,2006王敬华、林萍、张清国编著.语言程序设计教程(第二版).清华大学出版社,
[3]C2013谭浩强著.程序设计题解与上机指导(第三版).清华大学出版社,
[4]C2008温海、张友、童伟等编著.语言精彩编程百例.中国水利水电出版社,
[5]C2004附录程序清单程序源代码#define N10#includestdio.hstruct guardcharname
[20];int choice;}gu[N];void maininti,j,k,m,total,x,y;int a[N]
[7],b
[7]={0,0,0,0,0,0,0;FILE*fp;保安排班方案fp=fopend:\\欢迎使用微微排班软件,本软件代表制作人祝您工作顺利,阖家欢乐printf”\n\n**********下面就让我们一起开启排班的旅程吧!;**********W\n********************\n\n”printf请输入保安总人数\nH;scanf,%dn,total;〃将所有值初始化为一fori=0;itotal;i++forj=0;j7;j++皿;a[i=1〃以每个人为线索进行循环fori=0;itotal;i++printf请输入保安的姓名:\nn;scanfn%sH,gu[i].name;他的选择是.周一;周二;.周三;.周四;.周五;.周六;.周日printf1234567\n;scanfn%dn,gu[i].choice;ifgu[i].choice==1{a[i]
[0]=0;;b
[0]++ifgu[i].choice==2{a[i][l]=0;;b[l]++ifgu[i].choice==3{a[i]
[2]=0;⑵;b++}ifgu[i].choice==4{a[i]
[3]=0;b
[3]++;}ifgu[i].choice==5{a[i]
[4]=0;b
[4]++;ifgu[i].choice==6a[i]
[5]=0;b
[5]++;ifgu[i].choice==7a[i]
[6]=0;〃赋值b
[6]++;0fork=0;;k++forj=0;j7;j++ifb[j]=total-l{〃判断方案是否可行printf方案不可行!如下:\nn;fprintffp/\n您所输入的数据派出的方案不可行!如下\nn;fprintffp,n\n周一”;周一”;printf”\nfori=0;itotal;i+4-ifa[i][O]==lprintf%s\tH,gu[i].name;fprintffp,n%s\tn,gu[i].name;周二;fprintffp/\n”周二”;printf\nfori=0;itotal;i++ifa[i][l]==lprintf,%s\t,\gu[i].name;fprintffp,n%s\tn,gu[i].name;周三fprintffpj\n;printfn\n周三”;fori=0;itotal;i++皿ifa2]==1printfn%s\tn,gu[i].name;fprintffp,n%s\tH,gu[i].name;}周四;fprintffp,”\n”printfn\n周四”;fori=0;itotal;i++ifa[i]
[3]==l{printfn%s\tn,gu[i].name;fprintffp,n%s\tn,gu[i].name;周五”;fprintffpj\nprintfn\n周五”;fori=0;itotal;i++ifa[i]
[4]=lprintfn%s\tn,gu[i].name;fprintffp,n%s\tn,gu[i].name;fprintffp,H\n周六”;printfn\n周六”;fori=0;itotal;i++ifa[il
[5]=lprintf*%s\tH,gu[i].name;fprintffp,n%s\tn,gu[i].name;周日”;fprintffpj\nprintfH\n周日”;fori=0;itotal;i++ifa[i]
[6]==lprintfn%s\tn,gu|i|.name;fprintffp,n%s\tn,gu[i].name;〃完成一次请问还有其他选择吗?有;没有;printf”\n\nl.2,\nfprintffp,n\n\n\n其他选择\n;scanfH%dn,m;if m==l请问是第几个人?他的选择是?printf”\nscanfM%d%d”,x,y;;X-y--;a[x][gu[x].choice-1]=1;a[x][y]=0;b[gu[x].choice-l]—;;b[y]++else无fprintffp,”break;}fclosefp;课程设计总结在本次课程设计中,我收获颇多,从以前简简单单的仅有理论知识,到现在的通过理论知识来解决实际问题,我收获的不仅仅是一个排班系统,更是一种能力,一种实实在在的动手能力感谢老师能给我们这个实践的机会这次课程设计,从构思,到设想,到实际动手去编程,到每一次的发现问题,解决问题,再到最后的报告,都是我一步一步,一个脚印一个脚印自己走出来的,而这每一次困难,每一次磨砺,也都使我收获的更多,成长的更快我觉得这不仅仅是一次小小的课设,同时更是我们重塑自我的一个转折,走好这一步,我们也就离我们的目的地更近了一些都说十年磨一剑,我们只有在这样的不断地实践中,才能真正地收获自我另外从这次课程设计中,我也领悟到了一点,那就是人是在不断地实践与尝试中进步的,我以后也一定力求做到这点,以后多多进行专业知识实践,而不是仅仅局限在课程设计当中即使没有课设,我们也要为自己创造问题只有这样,我们才能真正提高自己的能力指导教师评语:指导教师(签字):年一月—日课程设计成绩目录第章需求分析与概要设计11需求分析
1.11概要设计
1.21第章详细设计22排班系统基本结构
2.12排班系统细节剖析
2.
1.12程序详细介绍(算法实现)
2.23第章调试分析35我的调试
3.15运行结果
3.25第章用户手册及结束语48用户手册
4.18结束语
4.28参考文献9附录(程序清单)10第章需求分析与概要设计
11.1需求分析.题目要求为多名保安设计一个排班系统,每人可以自行预先选出一天为休1息日,系统打印可能的轮班方案并存储结果尽可能做到令所有人满意,保排班方案的公平性.题目分析本题的重点和难点在于保安的人数是不确定的,且他们可能选择2的休息日也无法确定,所以方案的结果也就不仅仅有一种由此可以看出只有解决好这两个问题,才能够符合该题目的要求,完成保安的排班工作
1.2概要设计.总体思路对于这道题目,我的思路是采用二维数组的方式来解决大概过1程是先假设所有人都上班,即没有休息日然后再让每个人进行选择自己希望的休息日先每个人选择出一天,然后系统进行排班,输出其所输入数据的对应方案然后在第一次所输数据的基础上,若还有其他选择,则进行二次输入,以此更改初始数据,重新设计可能的排班方案.细节实现因为题目的要求是打印可能的方案,那么如何来实现打印呢?我2采用了通过对二位数组中的每一个值用阿拉伯数字和来标记,以来表示工作,11来表示休息
0.功能作用本系统系保安的排班系统,可以完成基本的排班功能,在此基础3上,还为用户设计了二次输入的选项,以此来解决当所输数据不满足要求,无法完成排班的问题,同时也可以为用户提供更多的可行方案,而不是仅仅局限于一种第章详细设计
22.1排班系统基本结构有图排班系统基本结构
2.1此排班系统主要分为显示欢迎界面、排班界面及选择界面该系统各部分间有序衔接,各尽其责,如图所示,充分展现了该系统的协调性与整体性
2.1排班系统细节剖析
2.
1.1此排班系统的重点在于每次对二维数组的赋值操作,最开始时是将所有的初值都赋为然后以来赋给选择对应日期、对应人的对应数值这样一来,便可以将1,每个人的每天上班与否进行标记(是工作,是休息),这道题目的另一个难点10在于对每个人有比较公平的方案,所以该问题在设计时,我就将含有小于规定数量工作人数的方案标记为不可行方案,同时在屏幕输出该方案排出的结果,以供操作人员查阅该方案到底哪里不可行,利于下次输入数据地改动
2.2程序详细介绍(算法实现)我的这套程序大致可以分为三个部分数据输入部分
1.即第一次输入数据(每个人的选择),该部分是通过二位数组来实现的,以第几个人来控制数组的第一个下标,以周几来控制该数组的第二个下标,这样就可以将所有的人所有的天数看做一个二维表来实现选择信息的数字化,如表、所示
2.
12.2表每个人的工作选择
2.1周六周一周二周三周四周五周日
1.zhao工作工作工作休息工作工作工作
2.qian工作工作工作工作工作休息工作
3.sun工作工作工作工作工作工作休息
4.li工作工作休息工作工作工作工作
5.zhou工作工作休息工作工作工作工作
6.wu工作工作工作工作工作工作休息表对应的数组
2.2(下标)a01234560(下标)01011111(下标)11111012(下标)21111103(下标)31011114(下标)41011115(下标)51011116(下标)6111110数据转化为方案
2.该部分是以循环为工具手段,对每一个数据进行扫描判断,然后将工作for的人打印出来,即保安工作排班表这样一个方案就完成了方案的更改
3.此部分则是以更改个别数据为主,其他数据依然参照之前的数据,其实现的方法就是用第二次输入的数据,对第一次的数据进行覆盖,在这个覆盖的过程中,我们不仅要将二次选择的人及选择的天对应的数据更改为同时还要0,对原数组中此人的选择对应的数值恢复为零,我最开始设计时,就忽略了这一点,造成输出的方案有的人一周休息一天,有的人休息了两天,失去了设计方案的公平性以此造成很多困扰,后来经过详细分析、查找,我采用了每次只覆盖数组中的数值,而将二次选择的人的首选数字进行保留,这样就实现了公平排班的理念第章调试分析
33.1我的调试在刚刚完成编译时,程序中有很多语法错误,如将“;”打成了中文输入法,
1.甚至是干脆忘记打的情况,还有比如将循环下面的括号只打了一半for等,这些语法错误给我造成了许多困扰,后经逐条更改,最后终于得以运行除了一些语法错误,在运行的过程中还出现了许多其他的错误如上文提到
2.的由于没有将初次选择更改回为工作,造成方案的不公平等,这个问题我在初期一直没有弄懂,后经单步调试,对数组中的逐个数字进行跟踪,终于发现了这个问题,并想出方案解决
3.2运行结果该软件运行时会出现以下几种情况:正常进行排班,显示出对应的排班方案,如图所示:
1.
3.1更改其中一个人的选择,输出第二方案,如图
2.32zhou zheng■/呆舜迂
1121.exezhou wu周zhao qian sun li li zhengwu周zhao qian sun wu wu zheng周zhao qian sun zhouzhou zheng周qian sun li liwuwu周zhao qian sun zhou zheng zheng周zhao sun li li zhou周请问是第几个人?他的选择是?12zhao qian请间还有其他选择吗?;zhao qian sun li zhou wu有;没有2,;qiansun li zhou wu zhengsun wu zhengzhao qian•zhao qiansun zhou wu zhengzhao qiansun zhou wu zhenglili zhouwu zheng•zhao sun周zhou zhengnzhao qian|请问还有其他选择吗?;没有2,图其他选择
3.2WWW紧安排王方案,txt-记事本无其他选择,保存方案至文件“保安排班方案”,如下图:
3.文件编辑格式Q MV帮助但££一二zhao qiansun lizhouwu三四zhao qiansun lizhouwuzheng五六日周zhao qiansun wuzheng周周qiansun lizhouwuzheng周周zhao qiansun lizhouwuzheng周周zhao sun lizhouwu zhengzhao qian lizhouzheng其他选择:后zhao qiansun・其他选择:无•■二qiansunli底••三zhao qiansun■危•四■zhao qiansun■暗zhao qiansun五■.zhao sunli■、六•zhao aianli•*危日w1,zz11wz1hh1iurh1•oooZ1W1WZ1WhuuJhueennsszlwzzzlwzhuhhhuFheooeonuunusgeehhzz.当用户输入的选择对应的方案不可行时,软件会给出提示,如图所示:
43.4保型选j E
1121.exe欢迎使用微微排班软件,本软件代表制作人祝您工作顺利,阖家欢乐XXXXXXXXXM**********下面就让我们一起开启排班的旅程!WXXXXX请输入保安总人数蓍输入保安的姓名zhao他的选择是.周一;周二;,周三;.周四;.周五;,周六;.周日12345671用输入保安的姓名qian他的选择是.周一;周二;.周三;.周四;.周五;,周六;,周日12345672请输入保安的姓名sun他的选择是[.周一;周二;.周三;.周四;.周五;.周六;.周日2345671请输入保安的姓名li他的选择是.周一;周二;.周三;.周四;.周五;.周六;.周日12345671——;qian二zhao sunli二zhao qiansunli四zhao qiansunli五zhao qiansunliqiansunli7\zhao日;zhao qiansunli请间还启其他选择方案不可行如下图方案不可行
3.4周一周二周三周四周五周六有没有选、周日马?小还举飞请向;其何有.这时我们对选择进行二次调整,如图所示:
53.5「青问是第几个人?他的选择是?qzLan lizhaosun lizhao qiansunlili周zhao qiansunlili周zhaoqiansun周zhaoqiansun周Nhao qiansun耀间还有其他选择吗?11,1••••
2.*2b::4J[i.11111。