C语言程序设计课程设计报告停车场管理系统.doc

上传人:仙人指路1688 文档编号:2384747 上传时间:2023-02-17 格式:DOC 页数:67 大小:751KB
返回 下载 相关 举报
C语言程序设计课程设计报告停车场管理系统.doc_第1页
第1页 / 共67页
C语言程序设计课程设计报告停车场管理系统.doc_第2页
第2页 / 共67页
C语言程序设计课程设计报告停车场管理系统.doc_第3页
第3页 / 共67页
C语言程序设计课程设计报告停车场管理系统.doc_第4页
第4页 / 共67页
C语言程序设计课程设计报告停车场管理系统.doc_第5页
第5页 / 共67页
点击查看更多>>
资源描述

《C语言程序设计课程设计报告停车场管理系统.doc》由会员分享,可在线阅读,更多相关《C语言程序设计课程设计报告停车场管理系统.doc(67页珍藏版)》请在三一办公上搜索。

1、HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGYC语言程序设计课程设计报告课设题目: 停车场管理系统 专 业: 自动化(汽车工业电气自动化) 班 级: T1123-6 姓 名: 鲁杰 成 绩: 完成日期: 2012年6月18日2012年6月22日 指导教师: 胡宁亚 目 录C语言程序设计0课程设计报告01.课程设计目的22.需求分析22.1要求22.2任务描述32.3运行环境32.4开发工具33.总体设计33.1系统流设计33.2系统模块设计44.详细设计54.1数据结构设计54.2模块接口设计64.3 以下是几个主要模块的流程图:85.运行结果145.1信息

2、自动导入提示界面:155.2主界面:155.3 车辆录入界面175.4停车信息浏览界面:185.5信息查询界面:185.6车辆出场界面:195.7修改收费界面195.8题目要求界面215.9重新载入文件信息提示界面225.10退出系统界面226.程序调试与测试236.1程序调试236.2程序测试317.问题与不足318.建议329.编程体会3210.程序源代码:3311.参考文献6612.用户使用手册661.课程设计目的1) 通过课程设计,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。2) 通过课程设计,进一步掌握C语言中重要的数据结构。掌握并熟练运用指针、链表

3、、结构体、文件等数据结构。3) 通过课程设计,提高程序开发能力,能运用合理的控制流编写清晰高效的程序。4) 通过课程设计,培养C语言知识运用和自学能力,真正的把课堂上获得的知识运用起来,培养自己对程序编写的兴趣,并能独立设计和实现一个小型系统。5) 通过课程设计,加强了自己的程序分析能力。2.需求分析2.1要求1) 遵循软件开发过程的基本规范;能灵活应用,初步具备运用C程序解决实际问题的能力。2) 运用结构化程序设计方法,按照课程设计题目要求,完成包括需求分析、数据结构设计、概要设计、详细设计、编写代码、调试和测试C程序等过程。3) 学会利用数组、结构体、链表进行相关信息表示。4) 功能模块划

4、分清晰,系统结构图符合功能操作要求,且有详尽的功能描述5) 各主要功能模块有详尽的流程图及描述,用函数的形式实现,且调用入口、功能、出口等关系正确。6) 所设计的C程序较好的可读性和可靠性;程序书写风格规范,注释清晰。7) 界面友好(良好的人机互交),凡需要输入信息时,都有较详尽的提示信息,并对输入信息有较完善的值域分析。8) 程序经上机调试通过,不应出现语法型、功能型错误,并获得满意的结果。9) 学会通过各功能性测试用例测试程序的能力,尽可能避免原则性错误的出现。10) 掌握编写、调试和测试C语言程序的基本技巧,充分理解结构化程序设计的基本方法。11) C语言课程设计报告的内容反应实际设计过

5、程,且符合格式要求,无抄袭现象。2.2任务描述此系统以停车场所停车辆为背景,假定学院1号停车场有车位20个,车位满时,能入不能进,要求记录每台车辆的车牌号,出入时间(要求自动获取系统时间),停车收费管理为:0.5小时内免费,以后每1小时收费1元,超过6小时的按2元计费,超过24小时的按3元计费,车辆入场时,告知空闲车位情况,并显示收费标准;车辆出场时统计总费用并显示。具体功能实现如下:1) 系统以菜单方式工作(用键盘输入16之间的数来选择功能,其中6为退出)2) 车辆进入停车场录入功能(车牌号、进入时间(自动获取系统时间)、车位满时不能进入; 3) 停车场停车信息总体浏览功能(车位占用情况、空

6、闲车位情况、已在车场内的车辆车牌号,当前已在车场的单台停车费用总计及停车场当前收费总计)4) 查询功能,按车位空闲情况、停车时时长查询(至少一种查询方式)5) 车辆出场后信息的删除(按车牌号进行删除,同时删除该车的所有费用)6) 收费的修改(给定密码,按费用性质修改,如改变收费时长或增加降低时长内费用)7) 所有数据符合实际应用要求2.3运行环境 WindowsXP/7系统VC+6.0编译环境2.4开发工具C语言3.总体设计3.1系统流设计本系统的功能模块如图所示,主要有以下模块: 信息自动导入提示界面主菜单界面车辆录入停车信息总体浏览功能查询车辆出场修改收费题目要求重新导入文件信息退出系统按

7、时长修改按费用修改保存再退出退出显示空闲车位按车牌号查询车辆信息 系统功能模块图 3.2系统模块设计1) 信息自动导入提示界面:构造函数void loadRec(),实现文件内信息的自动导入并提示。2) 主菜单界面:构造函数int menu_select(),实现系统主菜单的显示。3) 车辆录入:构造函数void insertRec(),录入车牌号码并显示所自动提取的系统时间,并将相关信息存入文件,实现对车辆信息的添加录入。 4) 停车信息总体浏览:构造函数void listRec(),显示所有车辆的车牌号、车辆进入时间、并通过调用修改函数double moneyget(double p)来计

8、算车辆当前收费以及停车场当前收费总计。5) 功能查询:构造函数void searchRec(),显示停车场车位空闲情况、给定车牌号浏览该车辆相关信息。6) 车辆出场:构造函数void deleteRec(),输入出场的车辆的车牌号码,删除该车辆在文件中的信息。并通过对收费函数double moneyget(double p)的调用,实现相应的车辆收费的查询。7) 修改收费:构造函数void modifyRec(),给定密码(123为初始密码),若输入密码正确,则调用int moneycharge(int q)函数实现对全局变量t1、t2、t3、m1、m2、m3、m4的修改,从而实现对车辆收费规

9、定的修改。8) 题目要求显示:构造函数int timu(),显示题目要求。9) 重新导入文件信息:调用函数void loadRec(),重新载入文件信息。10) 退出系统:构造函数void exit0(),若信息有改动,则调用保存函数void writeInfo()保存相关改动。4.详细设计4.1数据结构设计根据系统要求,系统中需要保存的数据信息,其结构如下:数据项名称数据项系统表示数据类型数据长度备注车牌号码num7char14车辆进入时间年yearint8车辆进入时间月monthint4车辆进入时间日dayint4车辆进入时间时hourint4车辆进入时间分minuteint4根据系统要求

10、,系统中需要保存的类别信息,其结构如下:类别代号num7yearmonthdayhourminute类别名称车牌号进入时间-年进入时间-月进入时间-日进入时间-时进入时间-分为了能实现不受限制的增加学生信息,采用链表的结构保存学生信息,在增加学生的基本信息时,创建一个学生信息的节点,将其插入到链表中,示意图如下。 车辆信息1车辆信息2通讯录信息1221车辆信息3车辆信息4为此,先声明一个类型为struct student的结构体,其成员为所停车辆的信息。然后通过对指针、链表、文件等数据结构的操作,实现对车辆信息的读取,插入,保存,查询,浏览,删除等一系列操作。其中,结构体定义如下:struct

11、 carchar num7; int year;int month;int day;int hour; int minute; struct car *next;4.2模块接口设计(1)所有函数模块声明如下:void loadRec();/*从磁盘文件导入停车信息到内存*/ void insertRec();/*车辆录入,插入信息到内存*/ void listRec();/*停车信息总体浏览*/ void searchRec();/*功能查询,通过输入车牌号码查询*/void deleteRec();/*车辆出场,并删除信息*/void modifyRec(); /*给定密码修改收费标准*/

12、int moneycharge(); /*修改收费*/void exit0();/*退出*/int menu_select();/*主菜单*/void writeInfo();/*保存停车记录*/double moneyget(); /*收费管理*/int timu(); /*显示题目要求*/(2)并定义两个全局变量:double t1=0.5,t2=6,t3=24; double m1=0,m2=1,m3=2,m4=3; /*收费修改的全局变量*/ int b; /*记录车辆总数全局变量*/ int writeinfo_flag=0; /*停车记录保存标志全局变量*/struct car*h

13、ead=NULL,*p1,*p2,*p3;(3)主要模块的实现系统以主函数void main()为入口,调用loadRec()函数自动导入文件中的信息,再调用menu_select()函数,进入主菜单界面。系统接收用户输入的选择,调用相应的函数,进入到下一级菜单进行相关工作。用户输入选择“1、”时,进入车辆录入模块,调用void insertRec()函数,接收用户输入的车牌号,获取系统时间作为进入时间;用户输入选择“2、”时,进入停车信息总体浏览模块,调用void listRec()函数,显示所有车辆的车牌号、车辆进入时间、并通过调用修改函数double moneyget(double p)

14、来计算车辆当前收费以及停车场当前收费总计。用户输入选择“3、”时,进入功能查询模块,调用void searchRec()函数,显示停车场车位空闲情况、接收用户输入的车牌号浏览该车辆相关信息。用户输入选择“4、”时,进入车辆出场模块,调用void deleteRec()函数,接收用户输入的出场的车辆的车牌号码,删除该车辆在文件中的信息。并通过对收费函数double moneyget(double p)的调用,实现相应的车辆收费的查询。用户输入选择“5、”时,进入修改收费模块,调用void modifyRec()函数,给定密码(123为初始密码),若接收用户输入的密码正确,则调用int money

15、charge(int q)函数实现对全局变量t1、t2、t3、m1、m2、m3、m4的修改,从而实现对车辆收费规定的修改。用户输入选择“6、”时,调用int timu()函数,显示题目要求。用户输入选择“7、”时,进入重新导入文件信息模块,重新调用loadRec()函数,再次载入文件信息。用户输入选择“8、”时,进入退出系统模块,调用exit0()函数,若文件有改动,调用void writeInfo()函数,将其保存;若无改动,安全退出系统。4.3 以下是几个主要模块的流程图:1) 主菜单函数: 否 是 否 是打印自动导入文件信息提示打印主菜单接收用户选项是否合法?是否为零?调用对应选项函数退

16、出系统主函数流程图2) 车辆录入函数:打印车辆收费规定接收用户输入的车牌号是否合法提取系统时间再次选择是否1返回主菜单2 车辆录入函数流程图3) 信息总体浏览函数:接收用户选项打印车辆总体信息界面回主菜单信息总体浏览函数流程图4) 功能查询函数打印空闲车位信息接收用户输入车牌号信息是否存在此车号打印停车时长信息是返回主菜单否功能查询函数流程图5) 车辆出场函数接收用户输入的车牌号信息是否存在该车牌号车辆打印车辆费用信息再次选择返回主菜单是否21车辆出场函数6) 修改收费函数打印欢迎界面,接收用户输入的密码密码是否正确打印选择界面接收用户选择按收费修改按时长修改接收用户信息返回主菜单输入的时间是

17、否依次增大接收用户信息返回主菜单12是否修改收费函数流程图7) 题目显示函数接收用户选项打印题目要求返回主菜单题目显示函数流程图8) 重新导入文件信息接收用户选项显示提示成功界面返回主菜单重新导入文件信息流程图9) 退出系统函数接收用户选项是否有改动执行保存退出系统退出系统5.运行结果5.1信息自动导入提示界面:信息自动导入提示界面5.2主界面:输入功能选择,系统自动进入相应功能界面。车辆录入界面5.3 车辆录入界面车辆录入界面5.4停车信息浏览界面: 停车信息浏览5.5信息查询界面: 从键盘中输入选择,可以按车牌号进行查询。 按车牌号查询的结果5.6车辆出场界面:从键盘中输入需要出场的车牌号

18、码,自动提示该车辆的收费。车辆出场界面5.7修改收费界面给定密码(初始密码为123),若密码输入正确,进入修改界面,可改变收费时长或增加降低时长内费用。修改收费界面5.8题目要求界面题目要求界面5.9重新载入文件信息提示界面重新载入文件信息提示界面5.10退出系统界面 若有改动,自动保存相关信息。6.程序调试与测试6.1程序调试(1) 各模块分别调试过程及结果。车辆录入界面 停车信息浏览 按车牌号查询: 从键盘中输入选择,可以按车牌号进行查询。车辆出场界面:从键盘中输入需要出场的车牌号码,自动提示该车辆的收费。修改收费界面:给定密码(初始密码为123),若密码输入正确,进入修改界面,可改变收费

19、时长或增加降低时长内费用。题目要求界面重新载入文件信息提示界面退出界面:若有改动,自动保存相关信息。(2) 集成调试过程及结果。信息自动导入提示界面车辆录入界面:输入功能选择,系统自动进入相应功能界面。,选择8退出系统。6.2程序测试(1) 各模块测试用例数据的确定 设定一车牌号为222222的车辆于2012年 6 月23 日14时 30分进入,现定其2012年 6月 24日 14时 30分出场。(2) 测试结果 停车总费用显示为41.5元,正确。(3) 测试中出现的问题的原因和分析 因程序中设定的时长计算为日、时、分的计算,故其无法实现跨年及跨日的收费计算。7.问题与不足(1) 需求分析中存

20、在的问题和分析 可另加入车场车位的编号,根据车位号查询相关车辆信息。(2) 概要设计中存在的问题和分析 未能加入批量删除的功能。(3) 详细设计中存在的问题和分析 对于系统时间的获取,由于系统的局限,只能算到日、时、分,而有关年、月的计算未能实现。(4) 代码编制中存在的问题和分析 一些系统固有的功能函数未能使用,重新编译,使程序冗长,使用全局变量较多,程序内存较大。(5) 调试和测试中存在的问题和分析 调试时有些函数无变量返回而使用了int定义,后改为了void才没有了系统警告。8.建议可另加入车场车位的编号,根据车位号查询相关车辆信息。9.编程体会编写程序一定要认真严谨,要对所调用的函数声

21、明,对链表的使用要认真,使用系统函数要写出相应的头文件。10.程序源代码:#include#include#include#include #include#include #define LEN sizeof(struct car) double t1=0.5,t2=6,t3=24; double m1=0,m2=1,m3=2,m4=3; /*收费修改的全局变量*/ int b; /*记录车辆总数全局变量*/ int writeinfo_flag=0; /*停车记录保存标志全局变量*/ /*结构体定义*/struct carchar num7; int year;int month;int

22、day;int hour; int minute; struct car *next;/*函数声明*/void loadRec();/*从磁盘文件导入停车信息到内存*/void insertRec();/*车辆录入*/void listRec();/*停车信息总体浏览*/void searchRec();/*功能查询*/void deleteRec();/*车辆出场*/void modifyRec(); /*给定密码修改收费标准*/ int moneycharge(); /*修改收费*/void exit0();/*退出*/int menu_select();/*主菜单*/void write

23、Info();/*保存停车记录*/double moneyget(); /*收费管理*/int timu(); /*显示题目要求*/*链表操作所用结构体指针*/struct car*head=NULL,*p1,*p2,*p3;/*定义结构体指针 head 为头指针 p1 为输入数据缓存空间指针 p2 为尾指针*/*主函数*/int main() loadRec();for(;)switch(menu_select() case 1: system(cls); insertRec(); break;case 2: system(cls); listRec(); break;case 3: sys

24、tem(cls); searchRec(); break; case 4: system(cls); deleteRec(); break;case 5: system(cls); modifyRec(); break;case 6: system(cls); timu(); break; case 7: system(cls); loadRec(); break; case 8: system(cls); exit0(); return 0; default : getchar(); printf(n 选择错误,请正确输入你的选择(18),:n); printf(n 按Enter键返回.n)

25、; system(cls);return 0;/*主菜单*/int menu_select()int c;rewind(stdin); printf (n *欢迎使用停车管理系统*n); printf (n 1、车辆录入n); printf (n 2、停车信息总体浏览n); printf (n 3、功能查询n); printf (n 4、车辆出场n); printf (n 5、修改收费n); printf (n 6、题目要求n); printf (n 7、重新导入文件信息n); printf (n 8、退出系统n); printf (n *n); printf (n 请输入您的选择(18):n

26、); scanf(%d,&c); getchar();return c;/*显示题目要求*/int timu()printf (n 假定学院1号停车场有车位20个,车位满时,能入不能进,要求记录每台车辆的车牌号,出入时间(要求自动获取系统时间),停车收费管理为: 0.5小时内免费,以后每1小时收费1元,超过6小时的按2元计费,超过24小时的按3元计费,车辆入场时,告知空闲车位情况,并显示收费标准;车辆出场时统计总费用并显示。试设计一停车场管理系统,使之能提供以下功能:n); printf ((1)系统以菜单方式工作(用键盘输入16之间的数来选择功能,其中6为退出)n); printf ((2)

27、车辆进入停车场录入功能(车牌号、进入时间(自动获取系统时间)、车位满时不能进入; n); printf ((3)停车场停车信息总体浏览功能(车位占用情况、空闲车位情况、已在车场内的车辆车牌号,当前已在车场的单台停车费用总计及停车场当前收费总计)n); printf ((4)查询功能,按车位空闲情况、停车时时长查询(至少一种查询方式)n); printf ((5)车辆出场后信息的删除(按车牌号进行删除,同时删除该车的所有费用)n); printf ((6)收费的修改(给定密码,按费用性质修改,如改变收费时长或增加降低时长内费用)n); printf ((7)所有数据符合实际应用要求); prin

28、tf(n 按Enter键返回.n); getchar(); system(cls); return 0 ;/*从磁盘文件导入停车信息到内存*/void loadRec() FILE *fp;int n=0;if(fp=fopen(456.txt ,r)=NULL) /*打开文件*/ printf(文件不存在或无法打开!n);return;head=p1=(struct car *)malloc(LEN); /*开辟一个新单元*/p1-next =NULL;while(!feof(fp)n+; fscanf(fp,%s %d %d %d %d %d , p1-num, &p1-year,&p1-

29、month,&p1-day,&p1-hour,&p1-minute);if(p1-num0num09) n-;break; p2=(struct car *)malloc(LEN); /*开辟一个新单元*/p1-next =p2;p3=p1;p1=p2;p1-next=NULL;free(p2);p3-next=NULL;printf(n %d项信息输入完毕,按Enter键返回.n,n);b=n;getchar();system(cls); /*清屏*/writeinfo_flag=0; /*设置保存记录标志*/if( fclose(fp) ) /* 关闭文件 */ printf( 无法关闭文

30、件!n ); exit(0); /*车辆录入*/void insertRec() if(b=0|bnext!=NULL)p3=p3-next;system(cls);p3-next=p1=(struct car *)malloc(LEN);/*开辟一个新单元*/ else head=p1=(struct car *)malloc(LEN); /*开辟一个新单元*/ p1-next =NULL; printf(nn 收费标准:%.2lf小时每小时%.2lf元,以后每一小时收费%.2lf元,超过%.2lf小时的按%.2lf元计费,超过%.2lf小时的按%.2lf元计费!,t1,m1,m2,t2,m

31、3,t3,m4); printf(nn 请输入车辆的车牌号(numnum); if(strlen(p1-num)6) printf(输入错误请重新输入:n); rewind(stdin); while(strlen(p1-num)6); b=b+1; p1-year=sys.wYear; p1-month=sys.wMonth; p1-day=sys.wDay; p1-hour=sys.wHour; p1-minute=sys.wMinute; printf(%d年%d月%d日%d时%d分,p1-year,p1-month,p1-day,p1-hour,p1-minute); p2=(stru

32、ct car *)malloc(LEN); /*开辟一个新单元*/ p1-next =p2;p3=p1;p1=p2;p1-next =NULL; free(p2); p3-next=NULL; printf(n 信息输入完毕,按任意键返回.n); getchar(); writeinfo_flag=1; /*清除保存记录标志*/ system(cls);printf(接下来您要做什么?n); /*选择所需服务*/puts(tt*MENU*nn);puts(tttt 1).再次录入);puts(tttt 2).返回主菜单);puts(nntt *n);printf(ntt输入你的选择(1-2):

33、 bb); do scanf(%d,&t); if(t2) printf(输入错误请重新输入:n); rewind(stdin);while(t2); if(t=1) /*另一辆车进入*/ insertRec(); else if(t=2) /*返回主菜单*/ system(cls); return ;else printf(停车场无空闲车位,请稍后录入!n); return ;/*收费函数*/double moneyget(double p) /*使用全局变量*/double money; if(p=t1)money=p*t1; else if (p=t2) money=(p-t1)*m2+t1*m1; else if (p=t3) money=(p-t2)*m3+(t2-t1)*m2+t1*m1; else money=(p-t3)*m4+(t3-t2)*m3+(t2-t1)*m2+t1*m1; return money;/*停车信息总体浏览*/void listRec() int a,c,d;double e,f,sum=0.0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号