类型排班系统C语言学习知识课程规划.doc

收藏

编号:2605997    类型:共享资源    大小:285.52KB    格式:DOC    上传时间:2020-04-23
  
8
金币
分享到微信 分享到微博 分享到QQ空间
关 键 词:
排班 系统 语言 学习 知识 课程 规划 计划
资源描述:
C程序 课程设计报告 201— 201 学年第 学期 课程名称 C语言课程设计 设计题目 《排班系统》 学生姓名 学 号 专业班级 指导教师 201 年 月 日 目录 一、设计任务书…………………………………………………………3 1、题目与要求…………………………………………………3 2、本程序涉及的知识点………………………………………3 二、程序流程图…………………………………………………………4 三、程序代码设计………………………………………………………5 四、程序调试过程………………………………………………………6 五、程序运行过程………………………………………………………6 六、程序有待改进的地方………………………………………………9 七、程序设计总结………………………………………………………9 八、致谢…………………………………………………………………9 参考文献…………………………………………………………………9 附录…………………………………………………………………… 10 一、设计任务书 1、题目与要求 赵:星期二、星期四本程序实现的功能是对7名保安人员进行排班,要求每个人在一星期中可以休息一天。每名保安可以自行选择自己想要的休息日,而对于休息日的选择既可以是某一天,也可以是某几天中的其中一天。当7名保安依次输入自己想要的休息日后,系统将会给出可能的值班安排。若系统给出的值班安排是0种,证明系统对7名保安的选择无法作出排班,需要重新输入。 具体题目:学校实验楼有7名保安人员:钱、赵、孙、李、周、吴、陈。由于工作需要进行轮休制度,一星期中每人休息一天。预先让每一个人选择自己认为合适的休息日。请编制程序,打印轮休的所有可能方案。当然使每个人都满意,例如每人选择的休息日如下: 钱:星期一、星期六 孙:星期三、星期日 李:星期五 周:星期一、星期四、星期六 吴:星期二、星期五 陈:星期三、星期六、星期日 2、本程序涉及的知识点 输入函数和输出函数、变量的定义、for语句和switch-case语句的使用等 二、程序流程图 开始 输出显示欢迎使用排班系统 循环录入每个保安选择的休息日 判断输入的休息日 是否合理 输出满足条件的值班安排 结束 三、程序代码设计 输入函数和输出函数、变量的定义、for语句和switch-case语句、ss字符串的使用等。 输入函数: 1)函数原形:自定义swap(int *a, int *b)函数 2) 功 能:swap()函数利用取地址符号&完成对程序中某个变量的赋值,进而程序中判断交换的功能。 3)函数原形:get char() 4)功 能:向计算机输入一个字符。 5)变量及类型: int a,b,m,k: 整型形参变量,接收main()传过来的随机数字。 int i:循环控制变量,其中i 具有自加功能。 int j: 整型形参变量,其中j 具有自加功能。 6)说 明:输入字符后需要输入-1,待系统做出判断后往下执行。 选择判断结构 switch-case语句:从表达式值等于某个case语句后的值开始,它下方的所有语句都会一直运行,直到遇到一个break为止。随后,switch语句将结束,程序从switch结束大括号之后的第一个语句继续执行,并忽略其他case;假如任何一个case语句的值都不等于表达式的值,就运行可选标签default之下的语句。 假如表达式的值和任何一个case标签都不匹配,同时没有发现一个default标签,程序会跳过整个switch语句,从它的结束大括号之后的第一个语句继续执行。 for语句:for(语句1 ; 语句2 ; 语句3 ) {循环体} 执行时,先执行一次语句1(注意只执行一次) 之后判断语句2是否成立 1).如果成立执行循环体,之后执行语句3。再返回语句2判断条件是否成立?成立执行循环体后再执行语句3,如此直到循环体不成立则跳出循环 2)如果语句2不成立,则不执行循环体也不执行语句3直接跳出循环。 输出函数: 1)函数原形:printf(“======”,*) 2)功 能:输出相关提示信息及最后结果。 3)相关变量: int n:输出正确结果。 int i,j:输出计算正确,计算排班情况。 4)说 明:输出时要把要输出的信息用双引号括起来,输出数字时要在其代表变量前加逗号。 四、程序调试过程 由于对C语言知识储备有限,且时间精力有限,我们在设计程序程序的过程中遇到了不少问题。 首先遇到的问题是:使用何种数组以及如何使输出变得简洁易懂,易操作。在思考讨论之后,我们决定尽量“使输入数字化,输出结果文字化”的做法,也就是再输入星期几的时候直接用数字代替,在输出的时候,为了更加直观,就需要把原先的数字输出为星期几这种文字的形式;在单个对象输出结束之后,我们选择了 -1这个不会与其他日期混淆的数字,以此表示可以对下一个对象进行输出。这就需要重新定义一个二维数组,数组中存放“星期一,星期二”等文字形式的定义,这样我们可以通过前面输入的数字来引用对应的文字。 解决了最基本的问题之后,我们遇到的问题是:程序使用过程还是不够直观,不能让使用者直接观察到每个保安可能选择的休息日,在无法自行解决的情况下我们向老师求助。在解释程序、说明目的之后,我们重新进行了一次讨论,最后老师建议我们重新定义一个新的数组。为此我们找了很多相关资料,不断地进行调试,修改,却始终无法完全达到我们的预想;在老师的指导下,再次经历了数组选择以及一系列的调试与修改之后,我们重新定义了 ss字符串,采用了 char ss数组。 在选择了char ss数组之后遇到的问题就是输出语句繁琐,每次都会显示“请输入下列人选择休息的可能时间”,后来我们对“printf("请输入下列人选选择休息的可能时间:\n");”这个语句进行修改与位置的调整,使得其变得简洁。 调试的过程比较繁琐,除了跟版本有一定的关系外,有时候就因为一个小错误,程序调试了好久也出不来想要的结果,最后通过我们组员的一起讨论、利用课本、网上的资源和老师的帮助,这些问题都被我们逐一解决了。 五、程序运行过程 1、输出多种结果 2、输出0种结果(说明输入有误,需要重新输入) 3、只输出一种结果(如题目要求) 六、程序有待改进的地方 本程序是根据保安可能选择的休息日,给出满足条件的值班安排这一功能,系统功能相对单一,不够人性化。在对C语言有更深的了解后,可以考虑对程序进行修改,增加系统功能,例如: 1、增设特殊情况显示以及分析,根据况进行人性化排班,例如:看病>办证>旅游 2、在系统无法排班时,判断周几没有值班人员; 3、当有某个保安请假一周,也就是剩下的6名保安有一个人一周要值两天时如何排班; 4、增设投票功能:当有多种值班安排时,通过投票随机决定使用哪一种值班安排; 5、可增设当天值班保安的工号、电话、地址等信息的显示; 七、程序设计总结 在完成本次课程设计的过程中,一方面让我们在实际运用中更加深刻地理解了课堂学到的知识;另一方面,通过查询资料、咨询老师,培养了我们在有限时间内搜集资料以及写论文的能力;与此同时,在编写程序时,也让我们体会到想要学好一个程序,不仅要上课认真听老师讲,还要在课外多阅读一些相关的资料和书籍。 同时,相关的资料和老师的指导对我们完成程序的编写提供很大的帮助。除此之外,我们还认识到编写程序时必须要耐心仔细,真可谓,细节决定成败;一个标点和字符或是中英文等输入细节都要注意,否则就可能导致整个程序运行错误,这极大地培养了我们务实求真,发现问题的科学素养。 此外,思考、讨论、查找资料以及调试、修改的过程是非常繁琐的,但是我们要尽量做到尽善尽美,只有这样,才能设计出简洁的、比较人性化的程序。 八、致谢 本次课程设计的完成,除了感谢百度文库提供的资料以及网友的不吝赐教之外,还要特别感谢C语言课程李老师的耐心指导,让我们在繁琐的调试中寻找到乐趣以及不断改进的动力。 参考文献 [1]谭浩强,C程序设计(第四版),北京:清华大学出版社,2010.6 [2] 豆丁网-http://www.docin.com/p-475334925.html [3]- C语言论坛 - 编程论坛http://bbs.bccn.net/thread-329752-1-1.html [4]-3亿文库-http://3y.uu456.com/bp-cs1ss01dff00bedsbqf31dd0-1.html [5]http://wenku.baidu.com/link?url=z0auYk8U_fl7zeJMFCDv8DyzKyuRbtdM2mhL7G3RDZgml12wE78M88yCTPnoH5aeBqyQEGKAjuKGf81vAU4Llu3Yxhwg-WKpKmfo5dZbdrG 附录 源程序: #include int n = 0; int rest[7][7]; void swap(int *a, int *b) { int m; m = *a; *a = *b; *b = m; } void perm(int list[], int k, int m) { int i; int j; if(k > m) { for (i=0; i<7; i++) { for (j=0; j<7; j++) { if (rest[i][j] == -1) return; if (rest[i][j] != list[i]) continue; if (rest[i][j] == list[i]) break; } } n++; printf("Solution: %d\n", n); printf("赵 钱 孙 李 周 吴 陈\n"); printf("=============================================================\n"); for(i = 0; i <= m; i++) { switch (list[i]) { case 1: printf("星期一 "); break; case 2: printf("星期二 "); break; case 3: printf("星期三 "); break; case 4: printf("星期四 "); break; case 5: printf("星期五 "); break; case 6: printf("星期六 "); break; case 7: printf("星期日 "); break; default: break; } } printf("\n\n\n"); } else { for(i = k; i <= m; i++) { swap(&list[k], &list[i]); perm(list, k + 1, m); swap(&list[k], &list[i]); } } } int main() { int list[] = {1, 2, 3, 4, 5, 6, 7}; int i, j; char ss[7][20]={"赵","钱","孙","李","周","吴","陈"}; printf("===========================欢迎使用排班系统===================================\n"); printf("请输入下列人选选择休息的可能时间:\n"); for(i = 0; i < 7; i++) { printf("%s:",ss[i]); for(j = 0; j < 7; j++) { scanf("%d", &rest[i][j]); if(rest[i][j] == -1) break; } } printf("\n\n\n"); perm(list, 0, 6); printf("total:%d\n", n); getchar(); getchar(); return 0; }
展开阅读全文
提示  得力文库 - 分享文档赚钱的网站所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:排班系统C语言学习知识课程规划.doc
链接地址:https://www.deliwenku.com/p-2605997.html
关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com  

收起
展开