专周设计报告样板_第1页
专周设计报告样板_第2页
专周设计报告样板_第3页
专周设计报告样板_第4页
专周设计报告样板_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

专 周 报 告 目 录一专周目的1二专周任务与要求:11、任务:12、设计要求:1三设计说明书21 需求分析22 概要设计95 物理设计146数据库建立157 数据初始化178 数据库用户权限管理199、建立触发器,存储过程1910 系统实现20四、专周心得体会28一、题目和设计要求专周题目:停车场管理,设计要求:对一个两层共十二个车位的停车场进行停车、取车管理,我作为小组一员负责停车收费管理这一块。 题目要求如下:1、有一个两层的停车场,每层有6个车位,当地一层停车满后才允许使用第二层。(停车场可用一个二维数组实现,每个数组元素存放一个车牌号)每辆车的信息包括车牌号,层号,车位号,停车时间共四项,其中停车时间按分钟计算。2、假设停车场的初始状态为第一层已经停有4辆车,其车位号依次为1-4,停车时间依次为20,15,10,5.即先将这四辆车的信息存入文件car_dat中(数组的 对应元素也要进行赋值)。3、停车操作:当一辆车进入停车场时,先输入其车牌号,再为它分配一个层号和一个车位号(分配前先查询车位的使用情况,如果第一层有空位必须停在第一层);停车时间设为5,最后将新停入的汽车的信息添加文件car_dat中,并将在此之前的所有车的停车时间加5。 4、收费管理(取车):当有车离开时,输入其车牌号,先按其停车时间计算费用,每5分钟0.2元。(停车费用可用一个变量进行保存),同时从文件car_dat中删除该车的信息,并将该车对应的车位设置为可用状态,(即二位数组对用元素清零)。按用户的选择来判断是否要输出停车收费的总计。5、输出停车场的全部车辆信息。6、退出系统。 整个收费管理操作用一个charge函数来执行,在此函数内可使用其他函数,或者循环使用,同时在此函数执行中要记录下执行此操作的时间,以便于计算费用和打印凭条(即为题目要求的“输出停车收费总计),而且客户或者管理员在进行收费管理时也可以及时的返回主菜单,另外如果不按照系统指示进行操作也会返回主菜单。二、设计与实现1、分析问题a) 主过程:当停在停车场的车要离开时,车主会输入车牌号,系统就应该迅速计算出停车费用,之后询问客户是否要凭条,是的话打印凭条。b) 输入车牌号的时候,有可能客户输入的车牌号不是五位,或者输入错误(没有输入自己的车牌号),此时也有可能输入的错误车牌号恰巧和停车场其他某一辆车一致,对于此类情况系统要做出判断和相应的提示。c) 询问车主取车时,可能不按提示输入。d) 在某些情况,可能车主会不记得自己的车牌号,则可以按车位取车。e) 按车位取车的时候,可能输入的车位不合范围。f) 询问车主是否打印凭条,车主不按照系统要求输入(比如Y或者N),而输入其他的。2、 设计思路a) 首先请车主输入车牌号(包含字母),如果输入的车牌号不是五个,就输出提示,提醒他输入五位。b) 当车主输入了车牌号(五位)之后,系统就在“car.dat”文件中去搜索,如果没有找到则说明车主输入有误,提醒他重新输入。c) 提醒的时候同时给予另外一种选择,即通过车位号取车,此时车主要做出选择。d) 如果选择输入车牌号,则再次回到a,如果选择通过车位号取车,系统就会提示车主输入车层和车位,如果输入车层超过2车位超过6,则提示车主输入错误,让他重新输入。e) 待车主输入正确之后,找到该车,输出车牌号并确认取车。f) 在b中,如果搜索到了对应的车牌号,则将此车相应的车层和车位输出,并询问车主是否确认取车(以防止输错车牌号和别人的车正好吻合)。不取则回到菜单。g) 确认取车之后,系统就会计算出停车的费用,计算时,小于五分钟统一按五分钟计算,将结果输出,然后询问车主是否要打印凭条。h) 需要的话,即将结构体中所有的信息输出,不需要则不进行任何操作。i) 最后将取出的车的所有信息归零,包括车牌号,停车起始和终止时间,停车费用,以及停车日期,并存入文件,跳出charge函数。j) 在选择取车方式的时候,如果车主没有按照要求输入1或者2,则系统提示错误,默认返回主菜单。3、流程图开始输入车牌号(code_num)车牌号为5strlen=5停车场中是否含有此车牌号的车NY确认i值 (i+1)=6YN输出层数 1,输出车位(i+1)输出层数 2,输出车位(i-5)输入是否取车YN341N输入有误,选择取车方式:1,车牌号;2,车位212default44Menu函数1Nn记录时间并且将当地时间赋给结构体parking_messagei3输出费用parking_messagei是否打印凭条将时间值及车牌号全部归零NY2输入层数和车位找到对应的车牌号并且输出确认是否取车YN34Save函数Menu函数1Pingtiao函数:输出车牌号,停车位,以及停车取车时间注释:1,charge 函数 2,chargeplace函数 3,fee 函数 4,back 函数4、功能实现1,我的整个模块就是一个charge 函数,其中包含了四个函数,fee函数、chargeplace函数、back函数、pingtiao函数、save函数,在chatge函数主体中,主要流程是让车主输入车牌号,同时也可以通过车位取车,这时就进入chargeplace函数和车主对话。2,不论车主以何种方式取车,最终确认取车之后就进入fee函数,计算费用,如果车主不取车,进入back函数即回去主菜单。3,在fee函数中,计算费用并输出之后,就询问是否需要凭条,需要则进入pingtiao(凭条)函数,输出车主停车的全部详细信息,如果不需要,则再次进入back函数,回到主菜单。4,不论是否需要凭条,在fee函数最后都会执行save函数,将已取的车信息全部归零,以便于下次取车。以下即为我负责编写的charge 函数以及相应的注释:/* 声明要使用的函数 */void chargeplace();void fee(int j);void pingtiao(); void fee(int j); /* 声明fee函数 */ void charge()int i,a;char d; /* 定义要使用的变量及字符 */char code_num6; /* 定义一个一维数组存放车牌号 */ char c;printf(请输入车牌号(五位):); /* 输入车牌号 */scanf(%s,code_num);while(strlen(code_num)!=5) /* 保证输入的(车牌号)字符串长度为5 */printf(您的输入有误,请重新输入车牌号(五位):);scanf(%s,code_num);for(i=0;i+)if(strcmp(parking_messagei.code_num,code_num)=0)&(i=11) /*通过车牌号找到i值*/printf(您的车停放在%d层%d号车位:,(i+1)=6?1:2,(i+1)=12) break; /*没有找这个车牌,跳出循环执行下一项*/if(i=12) /*车牌号输入错误*/printf(对不起!该停车场没有找到车牌号为%s的车!n,code_num);printf(1输入错误再来一次,请按-1t 2忘记了车牌号,请按-2);scanf(%d,&a); /* 选择取车方式 */switch(a)case 1:charge();break; /*再次输入,重新执行charge函数*/case 2:chargeplace();break; /*忘记了车牌号,通过停车位取车*/default:printf(errorn); /*选择取车的时候按键错误,则返回主菜单*/printf(按任意键返回主菜单.n);scanf(%s,&c);if(c=getchar()!=0) back();save();void chargeplace() /* 通过车位取车 */ int i=0;int m,n;char d;printf(请输入层数(12)及车位号(16):); /* 输入车位 */scanf(%d,%d,&m,&n);while(m2|n6) /* 保证输入的车位号正确 */printf(您的输入有误,请重新输入层数(12)及车位号(16):);scanf(%d,%d,&m,&n);i=(m=1)?(n-1):(n+5); /* 通过输入的车位确定i值,找相应的结构体元素 */printf(车已找到,车牌号为%s,parking_messagei.code_num);printf(n);printf(是否要取该车(Y/N)?n); /* 确认取车 */ scanf(%s,&d);if(d=Y|d=y) printf(取车成功n);fee(i); /* 取车即进入fee函数*/else back(); /* 不取车即再次返回主采单*/ void fee(int j) /* 收费函数 */void pingtiao(int k);char q; /* 声明pingtiao函数 */local=localtime(&parking_messagej.end); /* 确定local结构体指针的指向 */parking_messagej.end=time(NUL); /* 确定本地时间,并将它赋给结构体 */int p=parking_messagej.end,parking_messagej.start); /*计算一辆车停车到取车的时间(秒)*/printf(您的停车费用为:);parking_messagej.fee=(p/300)+1)*0.2; /*计算停车费用*/printf(t%7.1fn,parking_messagej.fee);printf(请问您是否需要您停车收费的凭条:需要Yt退出Nn);/*询问是否需要打印全部信息*/ scanf(%s,&q);if(q=Y|q=y) pingtiao(j); /* 需要则执行pingtiao函数 */ strcpy(parking_messagej.code_num,); /* 将原来停车的信息归零,即删除 */ parking_messagej.parkingtime2.year=parking_messagej.parkingtime2.day=parking_messagej.parkingtime2.mon=parking_messagej.parkingtime2.hour=parking_messagej.parkingtime2.min=parking_messagej.parkingtime1.year=parking_messagej.parkingtime1.day=parking_messagej.parkingtime1.mon=parking_messagej.parkingtime1.hour=parking_messagej.parkingtime1.min=0;parking_messagej.start=0;parking_messagej.end=0;save(); /* 最后再存入car.dat文件 */void pingtiao(int k) /* 打印凭条函数 */printf(*); /* 输出车牌号,车位,停车费用信息 */printf(n您的车牌号为%5s,停放在第%d层第%d号车位,您停车的总费用为%6.2f元,nnt谢谢光临发发停车场,欢迎下次惠顾!n,parking_messagek.code_num,parking_messagek.floor,parking_messagek.place,parking_messagek.fee);char str80;char ptr80;local=localtime(&parking_messagek.end);parking_messagek.end=time(NUL);/* 通过时间结构体获取当地时间并赋给 parking_message结构体 */parking_messagek.parkingtime2.hour=local-tm_hour; parking_messagek.parkingtime2.min=local-tm_min;printf(n日期:停车: ); /* 输出当地年月日,以及停车取车具体时间 */ strftime(str,100,%A, %Y-%B-%d, ,local);printf(str);printf(%d:%dn,parking_messagek.parkingtime1.hour,parking_messagek.parkingtime1.min);printf( 取车: );strftime(ptr,100,%A, %Y-%B-%d, ,local);printf(ptr);printf(%d:%dn,parking_messagek.parkingtime2.hour,parking_messagek.parkingtime2.min);printf(*);5、典型算法和技巧分析,调试体会1,从整体结构看,在我写的这个函数里,包含了很多个函数,这是由于在进行取车时,会遇到很多不同的情况,把每一种情况都编写成一个函数,便于编写,也便于思考和分析,看起来也显得清晰简洁。2,在输入车牌号,车位号等信息,我都使用了一个while语句,给予车主提示,以保证输入给系统的信息可以被识别。3,在输出时间的时候,我采用时间函数特有输出方式,这样比输出结构体的信息更准确更快速。4,在程序中基本上没有有返回值的函数,但是整个函数围绕所要取的车辆,而确认所要取的车最直接的方法就是确定i值,即确定是结构体的哪一个元素,这样就可以把各个函数联系在一起,所取用的值和赋予的值都能够相互对应。5,因此,我在使用fee函数pingtiao函数时,将i值作为一个实参进行传递,达到各个函数相互联系的目的。6,由于函数很多,流向也很不清晰,刚开始运行总会出现很多很奇怪的结果,而且错误很多,vc的提示也不准确。我将每个函数分开先进行调试,确认正确之后,只要保证函数之间的连接正确即可。7,为了保证函数流向正确,我先大概了写了函数之后,就画它的流程图,通过流程图,我可以很轻松地发现我的错误,也看出了很多可以改进的地方。8,调试程序的时候,我觉得手是心境最重要,首先要保持心情平静,不可心烦气躁,否则越调越乱,另外就是要冷静地思考,同时也有一些技巧,比如用/*/把一些不很重要的程序筐住,一部分一部分调试,效率更高也让人更有信心。9,还有的时候,老是调试不通,偶然的机会在书上看到类似的,才发现自己本身掌握不够准确。10,在运行中有的算法不明显的,特别是有个程序只是在内部进行了运算处理,但是却暂时没有输出,在运行就没有办法看见这些算法是如何运行的,解决这样的问题,我可以在其中插入一些输出函数,就可以很清楚地看见这些算法是如何运行的,检查起来就容易多了。三、专周小结1. 我们组的题目是关于停车场的管理,这是一个实际性很强的题目,所以在进行设计的时候要考虑很多实际情况,因此在设计中加入很多很人性化的操作,比如说忘了车牌号,输入错误可以再重新输入。2. 在收费的时候,收费的依据就是停车时间,所以停车时间一定要算准确,为次我们同学网上搜索和学习,在整个函数包括主函数都插入了时间结构体,在我这个函数中就记录了每辆车的停车时间,这样在打印凭条的时候就可以给客户一个清楚的停车起始时间和终止时间,这样用户得到凭条的时候也会有个好心情。3. 写这个程序的时候才发现,原来做一些程序的时候,拿来就上机实现,而不做任何准备,那只能应付小程序,一旦像现在这样写一个很大的程序时,就发现在长长的一大块里面找一个小错误是多么的困难。4. 体会最深的也是上面提到过的,算法是一个程序的灵魂,写之前一定要使用流程图,起码心中有数,否则在调试的时候,太乱了,c语言也不像其他的,错误指向不精确,如果是一些句子的语法错误还比较容易发现,但是如果算法有错或者有漏洞,它的错误指示就毫无章法可询,这个时候在vc里面拖上拖下检查程序效率就非常低,相反的,放下电脑,拿张纸画一下算法就很容易发现问题。5. 这次做这个程序是以小组形式进行的,注意组内的合作,也是非常重要的,大的程序分成多个不关联的部分大家同时去做,程序写得更快更精辟,检查错误的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论