程序设计实验报告.docx
《程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《程序设计实验报告.docx(21页珍藏版)》请在冰点文库上搜索。
程序设计实验报告
保安值班系统设计报告
物理与电子工程学院光信息科学与技术专业09光信1班姓名:
吴刚学号:
0911030063
一.题目:
保安值班安排系统
某公司有7名保安人员:
赵、钱、孙、李、周、吴、陈。
由于工作需要进行轮休制度,一星期中每人休息一天。
预先让每一个人选择自己认为合适的休息日。
请编制一程序,打印轮休的所有可能方案。
当然使每个人都满意,例如每人选择的休息日如下:
赵:
星期二、星期四
钱:
星期一、星期六
孙:
星期三、星期日
李:
星期五
周:
星期一、星期四、星期六
吴:
星期二、星期五
陈:
星期三、星期六、星期日
二.系统功能模块结构图
三. 程序结构(画流程图)
否
是
是
四.试验结果(包括输入数据和输出结果)
当所有可能的输入正确时,可以得到7人保安值班的各自情况和信息。
五.体会
通过这次程序设计训练,我感悟很深,觉得我了解的东西太少了,缺乏用自己的思维去写程序,还有自己写的出现错误太多,由于了解得不深,好多错误都难以自己修改,只好请其它同学帮忙和上网参考资料,才得以完成设计,但总觉得有些要求没有达到。
总之,觉得实践多练是写程序设计最重要的,也是最难的,同时也是学以自用的最好表现,收获最多的阶段。
六.参考文献
1.C程序设计(第三版)谭浩强著清华大学出版社
2.数据结构(C语言版)严蔚敏著清华大学出版社
七.附录:
程序清单及源程序和执行程序源代码中要有适当和必要的注释,如每个函数的功能、入口参数的作用等;
/*使用TC进行编译;全英文输入与输出;文本界面*/
#include
#include
#include
#include
#include
#include
#include
#definekey_ESC1
#definetotal7
voidinterface();
intget_key();
intcmp();
voidscan();
voidprint();
intDFS(intt,intm);
structperson/*保安名字及休息时间*/
{
charname[20];
intday[7];
}secur[total];
structpersonsecur[total];/*7名保安信息*/
intsum[total];/*结果储存*/
intdata[total];/*每名保安期望休息的天数*/
intdd=1,tt=1;
intkflag=0;/*不满足条件的初值*/
voidsave()
{FILE*fp;
inti;
if((fp=fopen("baoan.txt","wb"))==NULL)
{printf("cannotopenfile\n");
return;
}
for(i=0;iif(fwrite(&secur[i],sizeof(structperson),1,fp)!
=1)
printf("filewriteerror\n");
if(fwrite(&sum[i],sizeof(structperson),1,fp)!
=1)
printf("filewriteerror\n");
if(fwrite(&data[i],sizeof(structperson),1,fp)!
=1)
printf("filewriteerror\n");
}
fclose(fp);
}
voidload()
{FILE*fp;
inti;
if((fp=fopen("baoan.txt","rb"))==NULL)
{printf("cannotopeninfile\n");
return;
}
for(i=0;iif(fread(&secur[i],sizeof(structperson),1,fp)!
=1)
{if(feof(fp)){fclose(fp);return;}
printf("filereaderror\n");
}
if(fread(&sum[i],sizeof(structperson),1,fp)!
=1)
{if(feof(fp)){fclose(fp);return;}
printf("filereaderror\n");
}
if(fread(&data[i],sizeof(structperson),1,fp)!
=1)
{if(feof(fp)){fclose(fp);return;}
printf("filereaderror\n");
}
}
fclose(fp);
}
voidinterface()/*用户界面*/
{
inti;
textmode(80);
textattr(WHITE+(BLACK<<4));
clrscr();
window(1,1,1,80);
textattr(WHITE+(BLACK<<4));
clrscr();
gotoxy(1,23);
for(i=1;i<=80;i++)
putch(0x4);
gotoxy(13,24);
printf("1-mon2-tue3-wed4-thur5-fri6-sat7-sun");
printf("ESC-TOEXIT");
}
intget_key()/*读取键盘键码*/
{
unionREGSregs;
regs.h.ah=0;
int86(0x16,®s,®s);
returnregs.h.ah;
}
voidscan()/*读取保安信息*/
{
inti,j;
charc='a';
for(i=0;i{
gotoxy(10,6);
printf("enterthename(don'tusethespace):
");
/*名字不能有空格*/
scanf("%s",secur[i].name);
getchar();
gotoxy(10,8);
printf("enterthedaywhichhewantstorest(1-7):
");
j=0;
while((c=getchar())!
='\n')
{
if(c!
='')
{
secur[i].day[j]=c-48;/*没有判断输入的合法性*/
j++;
}
}
sum[i]=j;
clrscr();
interface();
}
gotoxy(10,4);
printf("enterthedatasuccessfully");
save();
}
intcmp()/*判断是否满足条件*/
{
inti;
intflag=0;
for(i=1;i{
if(data[i]!
=data[i-1])
flag=1;
}
returnflag;
}
voidprint()/*输出结果*/
{
inti,j;
introw=1;
intkey;
if(tt>80)
{
gotoxy(15,20);
printf("enteranykeytoseeantherresult");
key=get_key();
interface();
dd=1;
tt=1;
}
if(dd>80)
{
row=10;
for(i=0;i{
gotoxy(tt,row++);
printf("%d",secur[i].name);
printf(":
");
printf("%d",data[i]);
printf("");
}
tt=tt+10;
}
else
{
for(i=0;i{
gotoxy(dd,row++);
printf("%s",secur[i].name);
printf(":
");
printf("%d",data[i]);
printf("");
}
}
}
intDFS(intt,intm)/*深度优先搜索*/
{
inti;
intj=0;
if(t==total)
{
if((j=cmp())==1)
{
print();
dd=dd+10;
kflag=1;
return0;
}
return0;
}
for(i=0;i{
data[t]=secur[t].day[i];
DFS(t+1,m+1);
}
return0;
}
voidmain()
{
intkey=0,l;
for(;key!
=key_ESC;)
{
dd=1;
interface();
gotoxy(10,4);
printf("doyouwanttoloadthedata?
(1or0)");
scanf("%d",&l);
if(l){load();}
else{
dd=1;
interface();
gotoxy(10,4);
printf("enterthedata");
scan();
}
gotoxy(10,6);
printf("enteranykeytoseethesesult");
key=get_key();
interface();
DFS(0,0);
if(kflag!
=1)
{
gotoxy(15,10);
printf("noneofthesesult");
}
gotoxy(15,25);
printf("enterESCtoEXIT");
printf("orenteranykeytomenu");
key=get_key();
}
}