排班系统C语言课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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、可增设当天值班保安的工号、电话、地址等信息的显示;

七、程序设计总结

在完成本次课程设计的过程中,一方面让我们在实际运用中更加深刻地理解了课堂学到的知识;另一方面,通过查询资料、咨询老师,培养了我们在有限时间内搜集资料以及写论文的能力;与此同时,

相关文档
最新文档