c语言保安排版课程设计报告.docx
- 文档编号:9529703
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:13
- 大小:144.36KB
c语言保安排版课程设计报告.docx
《c语言保安排版课程设计报告.docx》由会员分享,可在线阅读,更多相关《c语言保安排版课程设计报告.docx(13页珍藏版)》请在冰豆网上搜索。
c语言保安排版课程设计报告
课程设计报告
学院、系:
吉林大学珠海学院计算机科学与技术系
专业名称:
计算机科学与技术专业
课程设计科目
C语言程序课程设计
所在班级:
1班
学生学号:
04110126
学生姓名:
钟晓鸿
指导教师:
单缅老师
完成时间:
2012年3月25日
保安排班系统
一、设计任务与目标
如今是信息高速发展的时代,我们已经进入了信息社会。
作为计算机专业的学生,我们更应该了解信息的重要性,而电脑是当今社会的重要交流工具。
使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。
作为电脑操作者,动手能力无疑是最重要的环节,课程设计就是锻炼动手能力的不错平台。
作为高科技人才,我们必须会运用C,编写应用程序,是一个计算机学院学生必备的技能。
无论是以后的工作,还是现在的学习,都要求我们能够做好课程设计。
保安人员休息时间安排系统是一个简单的小程序,通过它,可以让我们掌握一个完整系统的设计和实现的方法,巩固所学的程序设计的知识。
通过课程设计的训练,学生了解程序设计的基本开发过程,掌握编写、调试和测试C语言程序的基本技巧,充分理解结构化程序设计的基本方法,熟悉运用结构化程序设计的方法。
此类问题的已有类似工作,是应用结构体来处理的,而我将在这的基础上应用链表,指针来完成保安排班系统,利用for循环来为保安轮休选择排列组合。
这样能够让我熟悉并掌握掌握链表,指针的相关知识,。
进行本设计时要达到的具体的目标:
1.应用链表来完成保安排班系统。
2.所设计的程序能够识别不满足排班的情况。
3.利用for循环来排列组合保安的轮休选择。
4.必须用到c语言的精华部分:
指针。
5.利用文件的读取,记录程序的运行结果。
二、方案设计与论证
1、设计思路
1 声明一linklist结构体类型的结点,含“char*name;intday[7];”两个成员,
还有structlinklist类型的指针next。
2 定义建表函数:
定义指针数组char*n[7]指向7个保安的姓氏;定义structlinklist的指针head,q,p;再分别创建7个新结点;并将7个新结点的name分别初始化,避免出现野指针。
3 定义myinput函数,存入每名保安的轮休选择;它的作用是:
依次输入各个保安人员想要的休息日(1—7),当所输入的休息日数小于7时,输入一个负数结束该保安的数据输入,(如:
赵想要的休息日是星期一,星期二,星期六,则输入:
126-1<回车>);当所有的数据输入后,不能使每天都有保安值班,则提示并重新输入数据。
4 定义myfuny函数:
5 定义FILE型的指针fp,让其指向文件,文件名filename[]="保安排版.txt";记录程序运行的结果。
重新定义一个structlinklist*s[7];利用for循环让其分别指向7个结点,利用7个for循环为保安的轮休选择排列组合,如果分配给这7名保安的休息日互不相等,则该分配方式满足要求,并输出。
6 定义主函数:
定义structlinklist*a;调用函数myinput以a为参数,调用清屏函数system("cls"),和函数myfun以a为参数。
三、程序框图或流程图,程序清单与调用关系
四、全部源程序清单
#include
#include
#include
#include
structlinklist
{char*name;
intday[7];
structlinklist*next;
};
structlinklist*creat(intm)/*建表函数*/
{char*n[7]={"赵","钱","孙","李","周","吴","陈"};
intd[7]={0};
inti;
structlinklist*head,*q,*p;
head=(structlinklist*)malloc(sizeof(structlinklist));
head->name=n[0];
q=head;//头指针赋给指针q
for(i=1;i { p=(structlinklist*)malloc(sizeof(structlinklist));//创建新结点 p->name=n[i]; q->next=p; q=p; } q->next=NULL; returnhead; } voidmyinput(structlinklist*q1)//参考zsq88网友但有对其进行修改,该函数主要功能是录入每个保安的轮休选择,并进行相应的判断。 {structlinklist*p1=q1; inti,r[8]={0},c; printf("=======================排班系统=======================\n"); for(c=0;c<7;c++) { printf("%s-----请输入你想要的休息日(1-7): ",p1->name); i=0; do { scanf("%d",&p1->day[i]); if(p1->day[i]>0)r[p1->day[i]]++;/*"r[p->day[i]]++"用来统计一个星期的每一天,有多少保安选择该天作为休息日*/ i++; }while(p1->day[i-1]>=0&&i<7);/*当想要的休息日数小于七天时,以负数结束输入,如当想要的休息日是: 星期一,星期三,星期日时,输入: 137-1<出车>*/ printf("------------------------------------------------------\n"); p1=q1->next;q1=p1; } if(r[1]==0||r[2]==0||r[3]==0||r[4]==0||r[5]==0||r[6]==0||r[7]==0)/*若一星期内存在某一天或以上完全没人选做休息日,则重新输入*/ { printf("输入的数据不能满足每天都有人值班! 请重新输入! \n"); printf("按任意键继续..."); getch(); system("cls"); } } voidmyfuny(structlinklist*t)//部分参考zsq88网友 {FILE*fp; charfilename[]="baoanpaiban.txt"; charxingqi[8][7]={"","星期一","星期二","星期三","星期四","星期五","星期六","星期日"}; inty[7],j1=0,j2=0,j3=0,j4=0,j5=0,j6=0,j7=0,b;/*定义数组y[7],y[1]储存分配给第一个保安的休息日,y[2]储存分配给第二个保安的休息日……*/ intn=1; structlinklist*p2=t,*s[7];//定义structlinklist类型的指针q和指针数组s[7]。 fp=fopen(filename,"w");//将程序执行的结果保存在“保安排版.txt”文档中。 for(b=0;b<7;b++) { s[b]=p2;//利用for循环让指针s[0],s[1]……s[5],s[6]分别依次指向7个结点。 p2=t->next; t=p2; } for(j1=0;s[0]->day[j1]>0&&j1<7;j1++)/*当s[0].day[j1]为负数或j1>=7时结束循环,下同*/ { y[0]=s[0]->day[j1]; for(j2=0;s[1]->day[j2]>0&&j2<7;j2++) { y[1]=s[1]->day[j2]; for(j3=0;s[2]->day[j3]>0&&j3<7;j3++) { y[2]=s[2]->day[j3];//利用for循环进行排列组合比较,满足的方案就输出。 for(j4=0;s[3]->day[j4]>0&&j4<7;j4++) { y[3]=s[3]->day[j4]; for(j5=0;s[4]->day[j5]>0&&j5<7;j5++) { y[4]=s[4]->day[j5]; for(j6=0;s[5]->day[j6]>0&&j6<7;j6++) { y[5]=s[5]->day[j6]; for(j7=0;s[6]->day[j7]>0&&j7<7;j7++) { y[6]=s[6]->day[j7]; if(y[0]! =y[1]&&y[0]! =y[2]&&y[0]! =y[3]&&y[0]! =y[4]&&y[0]! =y[5]&&y[0]! =y[6]&&y[1]! =y[2]&&y[1]! =y[3]&&y[1]! =y[4]&&y[1]! =y[5]&&y[1]! =y[6]&&y[2]! =y[3]&&y[2]! =y[4]&&y[2]! =y[5]&&y[2]! =y[6]&&y[3]! =y[4]&&y[3]! =y[5]&&y[3]! =y[6]&&y[4]! =y[5]&&y[4]! =y[6]&&y[5]! =y[6]) {printf("Solution: %d\n赵钱孙李周吴陈\n",n); fprintf(fp,"Solution: %d\n赵钱孙李周吴陈\n",n); printf("=======================================================================\n"); fprintf(fp,"=======================================================================\n"); printf("%s%s%s%s%s%s%s\n\n\n",xingqi[y[0]],xingqi[y[1]],xingqi[y[2]],xingqi[y[3]],xingqi[y[4]],xingqi[y[5]],xingqi[y[6]]); fprintf(fp,"%s%s%s%s%s%s%s\n\n\n",xingqi[y[0]],xingqi[y[1]],xingqi[y[2]],xingqi[y[3]],xingqi[y[4]],xingqi[y[5]],xingqi[y[6]]); n++; }/*如果分配给这7名保安的休息日互不相等,则该分配方式满足要求,并输出在屏幕上*/ } } } } } } } fclose(fp); } voidmain() {structlinklist*a; a=creat(7); myinput(a); system("cls");//清屏的作用 myfuny(a); getch();//从控制台读取一个字符,但不显示在屏幕上用getch();会等待你按下任意键,再继续执行下面的语句; } 五、程序运行结果测试与分析 以下是不满足的时候的情况: (假设没人选星期三作为休息日) 六、结论与心得 这次课程设计历时三个多星期。 刚开始时,思绪全无,举步维艰,对于理论知识学习不够扎实的我深感“书到用时方恨少”,再加上因为已经过去一个学期了,期间又没有怎么看书,考完试就放下了,许多知识都已经忘记了。 于是我重拾教材与实验手册,对知识系统而全面进行了梳理,遇到难处先是自己思考再向同学老师请教,终于基本掌握了基本理论知识。 最终我完成了这个C语言程序的设计,认真完成了课程设计报告。 我做的是保安休息时间安排系统,虽然是很简单的一个小程序,但老师要求我用链表做,对我一个刚刚学习数据结构的人来说却是一个很大的困难,更何况这是第一次做课程设计。 所以,在得知自己要做这个课程设计时,真不知道应该如何开始。 于是我拿出书本自学链表知识。 经过几天的努力,大体上把课本上链表的知识点看了一遍,然后在网上找了一下相关资料,体会别人是如何编程。 在本程序调试中我总是遇到不少困难: 1..如何让这7名保安输入自己想要的休息日,怎么从一个星期中的7天进行选择,每个人以什么样的数据形式输入,以及每个人要输入的数据个数也可能不一样。 为了解决这个问题,并挑战自己的能力,本想用链表和枚举类型来设计这道程序的,但发现在实现算法的过程中,由于自己对这些知识掌握的不够,很多技术问题难以解决,于是放弃了这种做法,定义结构体来储存各个保安的信息,在结构体内用数组来存储各个保安输入的信息,保安以整形数据类型的形式输入数据,但所输入数据数小于7个时,以负数结尾,如此,数据输入方式简单不易出错. 2.当7名保安都输入数据后,无法使每一天都有人值班,这时所输入的数据就不满足要求,那么怎么判断这种情况呢。 解决办法是: 定义一个数组r[8],r[1]-r[7]分别代表从星期一到星期天,保安们每选中一天,就使这一天对应的数组成员自动加1,当7名保安都输入数据后,若从r[1]——r[7]7个数中有一个仍为0,则说明输入输数据不满足要求,并以递归函数实现重新输入数据。 3.设计此程序本着以输入“数字化”,结果输出”文字化“的理念,那么怎么在输出时,以汉字的形式表示出来呢。 思路是定义一个二维数组,数组中存放”星期一“,”星期二“……那么我们可以通过前面输入的数字作为行下标,来引用这些文字,从而问题得到解决。 4另外,程序在调试上,也遇到了不少问题,由于调试缺乏技巧,花了不少时间处理,所以以后必须多上机,不断积累程序调试经验。 例如在调试过程中 .程序总是提示: “0x004011c6指令引用的0xcccccccc内存该内存不能为read”。 刚开始我并不明白其代表的意思,为了解决这一问题我查了不少参考资料,同时向CSDN网友求助,后方知弄清其意思。 此后经过多番修改调试,终于完成本程序的编写。 回顾这次课程设计,我收获了很多。 首先,在这过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,如何去实现这个计划;其次,在设计过程中,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践;最后,我还大致了解了软件开发的大体过程及各个步骤,这对将来的学习和工作是很有帮助的。 但因时间关系没有来得及完成的其他想法,例如屏幕背景颜色和字符颜色的设置,我本打算使用数据库系统,VC++等方法实现。 还有保安个人信息的录入与输出。 七、参考资料 [1]谭浩强等编著,C语言程序设计学习辅导,北京: 清华大学出版社,214-222页。 [2]严蔚敏吴伟民编著,数据结构(c语言版)北京: 清华大学出版社,27-31页。 [3]陈守孔孟佳娜武秀川等编著,算法与数据结构c语言版第2版,北京: 机械工业出版社,25-33页。 八、致谢 感谢XX文库所提供的资料,同时我要特别地感谢CSDN网友zhutuo100hao的无私帮助 课程设计成绩评定表 对课程设计工作过程的简短介绍和自我评价 在完成本设计是我为自己设定了目标: 应用链表来完成保安排班系统。 必须用到c语言的精华部分: 指针。 利用文件的读取,记录程序的运行结果。 这其中要用到我未曾学过的知识如链表文件读取,但是我还是通过自学新知识并成功应用到设计中,当然这个过程也是经历过无数次的失败的,我觉得自己在此次设计中能够迎难而上,积极思考是值得肯定的,今后的学习中,我也要继续保持这种态度! 学生签名: 钟晓鸿 2012年3月25日 (以下由评定小组教师填写) 质量评价指标(在相应栏目打√) 评价项目 评价质量 优秀 良好 中等 及格 不及格 工作量和态度 实验、计算可靠性 文字和图表质量 总体评价 评定成绩(百分制) 评定小组成员签名 2012年月日 制定人: 王钲旋,单缅审定人: 陈守孔
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 保安 排版 课程设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)