经济管理学院本科课程设计论文数据结构 2.docx
《经济管理学院本科课程设计论文数据结构 2.docx》由会员分享,可在线阅读,更多相关《经济管理学院本科课程设计论文数据结构 2.docx(50页珍藏版)》请在冰豆网上搜索。
经济管理学院本科课程设计论文数据结构2
经济管理学院本科课程设计论文
数据结构课程设计
学号:
1005170124
姓名:
孙晓东
班级:
管理101
专业:
信息管理与信息系统
系别:
管理系
指导教师:
孙鸿飞
2011年12月30日吉林
第1章停车场管理问题
1.1需求分析
1.1.1课程设计的目的
运用数据结构编写一个C语言程序,实现对停车场的管理。
只要包括:
车辆到达时得信息登记,车辆离开时得信息记录及便道的车辆信息的显示功能。
1.1.2课程设计的任务
该系统实现以下几个功能:
(1)车辆到达信息登记:
包括车牌号,在停车场停放的位置等;
(2)车辆离开信息记录;
(3)信息显示:
显示停车场内和便道内的汽车到达及位置等信息;
1.1.3软件运行和开发工具
1、windows2000以上操作系统
2、VisualC++6.0开发环境
1.1.4系统总体设计图
图1-1
1.1.5基本信息
车的车牌号,到达时信息及离开时信息。
1.2概要设计
使用VisualC++平台设计学生成绩管理系统的主框架。
1.2.1问题定义
该程序主要是为了实现对车库的管理,为实现该功能先定义了一个系统菜单:
(1)添加信息
(2)查找停车信息
(3)显示全部信息
(4)显示统计数据
1.3流程图及系统测试
1.3.1进停车场
图1-2进停车场流程
1.3.2车辆离开
图1-3车辆离开
1.4程序运行图
1.4.1菜单栏
图1-4菜单栏运行图
1.4.2输入信息栏
图1-5输入信息栏运行图
1.4.3出车栏
图1-6出车栏运行图
1.4.4显示栏
图1-7显示栏运行图
1.5心得感受
开始时候的课程设计完全没有思路,感觉很迷茫,不知道从何做起。
幸好在课设之前孙老师给我们做了很详细的指点,记得在大一的时候老师就提到过他,当时就给我们留下了深刻的印象。
是一位很负责任的,很有耐心的好老师,我们很爱孙鸿飞老师。
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握管理项目的开发技术是十分重要的。
回顾起此次停车场问题管理系统课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整一星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。
在以后会有更多的课程设计,我们现在的努力是为了将来打好基础,赵老师很认真的对待我们的答辩,这是一种很负责任的表现,这是要让我们真正的自己动手,了解和掌握一些基本知识,在以后的工作中做到游刃有余。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在孙老师的辛勤指导下,终于游逆而解。
同时,在孙老师的身上我学得到很多实用的知识,在此我表示感谢!
同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
第2章运动会分数统计
2.1需求分析
问题描述:
参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:
7、5、3、2、1,前三名的积分分别为:
5、3、2;哪些取前五名或前三名由学生自己设定。
(m<=20,n<=20)。
功能要求:
(1)可以输入各个学校各个项目的前三名或前五名的成绩;
(2) 能统计各学校总分;
(3) 可以按学校编号或名称、学校总分、男女团体总分排序输出;
(4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校;
(5) 数据存入文件并能随时查询;
(6) 规定:
输入数据形式和范围:
可以输入学校的名称,运动项目的名称。
输出形式:
有中文提示,各学校分数为整形。
界面要求:
有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
2.2概要设计
2.2.1系统功能设计
根据运动会分数统计系统问题的分析和设计要求,可以将该系统可以分为三个模块:
信息统计模块、信息输出模块、信息查询模块,其系统功能结构图如图2-1所示。
(1)信息统计模实现信息的输入、统计、存档。
(2)信息输出模块,实现信息的输出。
(3)信息查询实现信息的查询。
图2-1系统功能结构图
2.2.2函数构造
根据系统功能结构图的描述,可以构造出该系统的几个基本的函数,其方法名和功能如表2-1所示。
表2-1函数功能表
函数
功能
voidinputinformation()
输入和统计信息函数
voidoutput()
输出信息函数
voidinquiry()
查询信息函数
voidwritedata()
数据存储函数
voidreaddata()
读入数据函数
2.3详细设计
2.3.1数据类型及重要变量的定义
定义运动项目数据类型,用于存放运动项目,包括项目编号、项目所取名次数、名次、分数。
//定义项目结点的类型
typedefstruct
{
intitemnum;//项目编号
inttop;//项目取名次的数目,由用户定义3或5
intrange[5];//名次
intmark[5];//分数
}itemnode;
定义学校数据类型,用来存储参赛学校信息,包括学校编号、学校总分、男团总分、女团总分、项目数组。
//定义学校结点类型
intschoolnum;//学校编号
intscore;//学校总分
intmscore;//男团体总分
intwscore;//女团体总分
itemnodec[m+w];//项目数组
}schoolnode;
定义学校数组schoolnodeh[n]。
采用数组结构有利于随机的存储和查询。
定义全局标志变量intflag1、flag2,分别用以标志是否已经向系统输入了信息和标志系统中是否已经存在信息。
定义文件指针FILE*report,用来指向存档的文件。
2.3.2函数的设计和实现
在概要设计中已经对该系统涉及的抽象数据类型和函数及其功能做了说明,这里就不在对每个函数进行一一说明,只对其中比较重要的功能模块进行描述。
(1)信息输入及分数统计功能
voidinputinformation()为输入信息及分数统计函数。
在输入信息的同时进行分数的统计。
可以输入各个学校各项目前三名或前五名的成绩。
在输入学校的参赛项目时,结果取前三名还是前五名自己定,用一个选择语句实现。
利用swith语句前三名的分数赋为5、3、2,前五名的成绩赋为7,5、3、2、1,未取得成绩则赋为0。
并统计团体总分,男团总分和女团总分。
其主要功能代码如下:
for(s=0;s{printf("*****名次:");scanf("%d",&h[i].c[j].range[s]);//输入所获名次信息if(h[i].c[j].top==3)switch(h[i].c[j].range[s]){case0:h[i].c[j].mark[s]=0;break;case1:h[i].c[j].mark[s]=5;break;case2:h[i].c[j].mark[s]=3;break;case3:h[i].c[j].mark[s]=2;break;}elseswitch(h[i].c[j].range[s]){case0:h[i].c[j].mark[s]=0;break;case1:h[i].c[j].mark[s]=7;break;case2:h[i].c[j].mark[s]=5;break;case3:h[i].c[j].mark[s]=3;break;case4:h[i].c[j].mark[s]=2;break;case5:h[i].c[j].mark[s]=1;break;}h[i].score=h[i].score+h[i].c[j].mark[s];(2)信息输出功能voidoutput()为输出函数。列出一个输出目录利用swich语句使函数按学校编号输出或按学校总分、男团总分、女团总分由高到低排序输出。利用辅助数组remember[]和冒泡排序的方法使之按分数的由高到低输出。利用循环语句dowhile()当输入2时返回输出目录,输入0是跳出循环返回主菜单。其流程图如图2-2所示。图2-2输出信息模块流程图(3)信息查询功能voidinquiry()为查询函数。列车一个查询目录利用swich语句使函数按学校编号或项目编号查询,输出某学校的某个项目的得分情况或某个项目的前几名的学校。再利用循环语句dowhile()当输入2是返回查询目录,输入0时跳出循环返回主菜单。其程序流程图如图2-3所示。图2-3查询信息模块程序流程图(4)主函数voidmain()是主函数。列出主菜单,利用switch语句调用以上函数实现各个菜单的功能。想在每次查询结束想返回主菜单进行其它项时,应在main()函数中调用其它函数时再调用main()函数,如:switch(choice){case1:printf("输入信息:\n");inputinformation();writedata();printf("信息已存入档案!");main();case2:printf("输出信息:\n");if(flag1)readdata();output();main();在进入主菜单后为了确保系统中已经输入了信息,用标志标量flag1和flag2来控制循环。如果系统中没有任何信息,用户就不能选择输入或查询操作,此时会输出提示信息,并返回主菜单。直到用户输入了信息或退出系统。其实现代码如下:do{printf("======================欢迎使用======================\n");printf("\n\n*****************运动会分数统计系统********************\n");printf("\n\n********************1.输入信息*************************\n");printf("********************2.输出信息*************************\n");printf("********************3.查询信息*************************\n");printf("********************4.退出系统*************************\n\n\n");printf("================================================\n\n");printf("********请选择要实现步骤的编号(请确保已经输入信息!):\n\n");scanf("%d",&choice);if(choice==4)break;elseif(choice==1)flag1=0;elseif((report=fopen("sportsdata.txt","r"))!=null)flag2=0;else{system("cls");printf("\n\n\n\n系统中无任何信息!\n\n请先输入信息!!!\n\n\n\n");}}while(flag1&&flag2);2.4测试运行程序,进入系统主菜单。用户可以选择输入、输出、查询信息或退出系统,界面如图2-3所示。图2-3系统主界面(1)输入信息输入1得到进入输入信息模块。根据系统提示将以下信息输入系统中:学校编号1,项目编号1,取前5名,获得1个名次,是第5名;项目编号2,取前3名,获得3个名次,分别是1、2、3名。学校编号2,项目编号1,取前5名,获得4个名次,分别是1、2、3、4名;项目编号2,取前5名,获得0个名次。输入信息后,会自动存档,并提示存档成功,然后自动返还主菜单,如图2-4所示。图2-4信息成功输入系统并存入了文档(2)输出信息输入2进入输出信息模块,该模块分四项,分别代表一种输出方式,如图2-5所示。图2-5输入信息模块界面用户可以按照自己的喜好,选择一种方式输入信息,输入2返回输出信息模块,输入0返回主菜单。如图7~9分别是按照学校编号、学校总分、女团总分输出的情况。图2-6按学校总分输出图2-7按学校总分输出图2-8按女团总分输出(3)查询信息输入3进入信息查询模块,该模块分为两项,如图2-7所示。图2-7信息查询模块用户可以选择不同菜单进行查询,如图4-8和图4-9分别是按照学校编号和项目编号查询的情况。图2-8按学校编号查询图2-9按项目编号查询(4)退出系统在主菜单下输入4可以退出系统,并有中文提示,如图所示。图2-10退出系统2.5课程设计总结2,5,1调试中遇到的较重要问题回顾(1)提出问题:所有输入输出内容只能在一屏内显示,学过c语言,很知道”\n”是换行,”\f”是换屏的,可是在这里就是无法实现。解决问题:输入clrscr();(2)提出问题:设置选项,供用户输入选择时,当按任意键时都会跳入下一步操作,或者直接退出系统。分析问题:在供用户选择时,提供了几个选项,就写几个case语句,但是当用户输入的并不是这几个数字时,系统就不能做出正确判断。解决问题:修改case语句,添加default语句提示出错,要求重新输入。源代码如下:Default:{clrscr();/*清屏*/printf("输入错误,请重新选择");}(3)提出问题:用户在系统主菜单上进行选择时,若没有输入任何初始信息,而选择输出或查询操作,系统也会做出相应操作。解决问题:增加标识变量作为循环终止变量,用来判断系统中是否已经输入了信息。若没有就提示用户先输入信息。2.5.2算法的效率及改进设想算法的效率:总的来讲,严重引响执行速度的便是查找,查找任意一个数据,便要将其所在的结构从头至尾遍历一次,耗费大量的时间。改进设想:因大部分显示均是以学校为单位,所以将以由有关人的各种信息为集合的结构改为以由有关学校的各种信息为集合的结构。2.5.3心得体会在这次上机过程中遇到过一些问题,但经过不懈努力,解决了部分,还有的现在不能解决,留待日后思考和解决。比如说在运用数据结构排序的时候,方法的选择上,总是想用时间复杂度小的算法,但结果出了问题,最后还是用了我们熟悉的选择法排序。在编写之前,做整体规划和详细设计很重要。只有思路清晰,设计合理可行,编码才有可能有的放矢,才能更加有效的完成任务。本次集中上机实验,对我来说可以算是一次挑战,因为在理论学习中没有好好的掌握,现在要独立完成一个较复杂的程序编写,确实有一点困难。但我对于难度一向是以积极迎战的态度来面对,认真积极努力完成这次集中上机的任务。对我来说这是一次很好的机会,同时我也很好的把握了这次机会,认真的完成了此次上机学习的任务,对自己今后在程序编写方面以及文档撰写方面相信会有很大的帮助,在此也对老师安排这样一次学习表示感谢,最后希望自己在数据结构以及计算机的其他学习方面能够得到很好的提高。 参考文献[1]李云清、杨庆红、揭安全.数据结构(C语言版)[M].人民邮电大学出版社,2004.6[2]潘彦.算法设计与分析基础[M].北京:清华大学出版社,2007.1[3]肖梦强、曲秀清.软件工程——原理、方法与应用[M].中国水利水电出版社,2005.10[4]吕凤翥.C++语言程序设计(第2版).电子工业出版社,2007.2[5]严蔚敏、吴伟民.数据结构(C语言版)[M].清华大学出版社,2002.9 附录附录1#include#include#include#include//常量定义#defineMAX_STOP5//定义停车场最大停车数#defineMAX_PLATE10//定义车牌号最大长度usingnamespacestd;//使用std命名空间 //定义存储汽车信息的结构体typedefstruct{charlicense_plate[MAX_PLATE];//汽车牌照号码,定义为一个字符指针类型charstate;//汽车当前状态,字符p表示停放在停车位上,字符s表示停放在便道上,每辆车的初始状态用字符i来进行表示}CAR;//定义模拟停车场的栈结构typedefstruct{CARSTOP[MAX_STOP];//汽车信息的存储空间inttop;//用来指示栈顶位置的静态指针}SeqStack;//定义模拟便道的队列结构typedefstructnode{CARWAIT;//汽车信息的存储空间structnode*next;//用来指示队列位置的动态指针}QNode;//链队列节点的类型//定义链队列的收尾指针typedefstruct{QNode*front,*rear;}LQueue;//将头尾指针封装在一起的链队//函数声明intEmpty_LQueue(LQueue*q);//判队空intLeaveCheck(SeqStackparking,char*license_plate);//检查离开的车是否在停车场中intQueueLength(LQueue*q);//判队长度intOut_LQueue(LQueue*&sidewalk,char*license_plate);//出队操作intStackEmpty(SeqStackparking);//判断栈是否为空intStackFull(SeqStackparking);//判断栈是否为满intStackPop(SeqStack&parking);//出栈操作intStackTop(SeqStackparking,char*license_plate);//取栈顶元素voidCar_come(SeqStack&parking,LQueue*&sidewalk);//有车到来时的操作voidCar_leave(SeqStack&parking,LQueue*&sidewalk);//有车离开的操作voidDisplay(SeqStackparking);//显示停车场内的所有信息调试时用voidInitStack(SeqStack&parking);//初始化栈voidInitList(LQueue*&sidewalk);//初始化队列voidIn_LQueue(LQueue*&sidewalk,char*license_plate);//进队操作voidInput_Check(char*license_plate);//检验输入的车牌是否合法voidStackPush(SeqStack&parking,char*license_plate);//进栈操作voidmain(){//定义变量SeqStackparking;LQueue*sidewalk=NULL;char*choice=newchar;intflag=1;//定义一个变量判断是否退出InitStack(parking);//初始化一个为空的停车场InitList(sidewalk);//初始化一个为空的便道while(flag)//运行界面及功能选择{cout<<"\t****************************************************\n\n";cout<<"\t*****************欢迎来到孙晓东的停车场*************\n\n";cout<<"\t|停车场模拟管理系统|\n\n";cout<<"\t|--------------------------------------------------|\n\n";cout<<"\t||\n\n";cout<<"\t|有车到来时请按C键。|\n\n";cout<<"\t|有车要走时请按l键。|\n\n";cout<<"\t|查看停车场请按D键。|\n\n";cout<<"\t|要退出系统请按Q键。|\n\n";cout<<"\t|--------------------------------------------------|\n\n";cout<<"\t|***************************************************\n\n";cout<<"请选择操作:";gets(choice);if(1!=strlen(choice)){cout<<"请正确输入选项!";continue;}else{switch(*choice){case'c':case'C':{Car_come(parking,sidewalk);break;}case'l':case'L':{Car_leave(parking,sidewalk);break;}case'q':case'
{printf("*****名次:
");
scanf("%d",&h[i].c[j].range[s]);//输入所获名次信息
if(h[i].c[j].top==3)
switch(h[i].c[j].range[s])
{case0:
h[i].c[j].mark[s]=0;break;
case1:
h[i].c[j].mark[s]=5;break;
case2:
h[i].c[j].mark[s]=3;break;
case3:
h[i].c[j].mark[s]=2;break;
}
else
h[i].c[j].mark[s]=7;break;
case4:
case5:
h[i].c[j].mark[s]=1;break;
h[i].score=h[i].score+h[i].c[j].mark[s];
(2)信息输出功能
voidoutput()为输出函数。
列出一个输出目录利用swich语句使函数按学校编号输出或按学校总分、男团总分、女团总分由高到低排序输出。
利用辅助数组remember[]和冒泡排序的方法使之按分数的由高到低输出。
利用循环语句dowhile()当输入2时返回输出目录,输入0是跳出循环返回主菜单。
其流程图如图2-2所示。
图2-2输出信息模块流程图
(3)信息查询功能
voidinquiry()为查询函数。
列车一个查询目录利用swich语句使函数按学校编号或项目编号查询,输出某学校的某个项目的得分情况或某个项目的前几名的学校。
再利用循环语句dowhile()当输入2是返回查询目录,输入0时跳出循环返回主菜单。
其程序流程图如图2-3所示。
图2-3查询信息模块程序流程图
(4)主函数
voidmain()是主函数。
列出主菜单,利用switch语句调用以上函数实现各个菜单的功能。
想在每次查询结束想返回主菜单进行其它项时,应在main()函数中调用其它函数时再调用main()函数,如:
switch(choice)
printf("输入信息:
\n");inputinformation();writedata();printf("信息已存入档案!
");main();
printf("输出信息:
\n");if(flag1)readdata();output();main();
在进入主菜单后为了确保系统中已经输入了信息,用标志标量flag1和flag2来控制循环。
如果系统中没有任何信息,用户就不能选择输入或查询操作,此时会输出提示信息,并返回主菜单。
直到用户输入了信息或退出系统。
其实现代码如下:
do{printf("======================欢迎使用======================\n");
printf("\n\n*****************运动会分数统计系统********************\n");
printf("\n\n********************1.输入信息*************************\n");
printf("********************2.输出信息*************************\n");
printf("********************3.查询信息*************************\n");
printf("********************4.退出系统*************************\n\n\n");
printf("================================================\n\n");
printf("********请选择要实现步骤的编号(请确保已经输入信息!
):
\n\n");
scanf("%d",&choice);
if(choice==4)break;
elseif(choice==1)flag1=0;
elseif((report=fopen("sportsdata.txt","r"))!
=null)flag2=0;
{system("cls");
printf("\n\n\n\n系统中无任何信息!
\n\n请先输入信息!
!
\n\n\n\n");
}while(flag1&&flag2);
2.4测试
运行程序,进入系统主菜单。
用户可以选择输入、输出、查询信息或退出系统,界面如图2-3所示。
图2-3系统主界面
(1)输入信息
输入1得到进入输入信息模块。
根据系统提示将以下信息输入系统中:
学校编号1,项目编号1,取前5名,获得1个名次,是第5名;项目编号2,取前3名,获得3个名次,分别是1、2、3名。
学校编号2,项目编号1,取前5名,获得4个名次,分别是1、2、3、4名;项目编号2,取前5名,获得0个名次。
输入信息后,会自动存档,并提示存档成功,然后自动返还主菜单,如图2-4所示。
图2-4信息成功输入系统并存入了文档
(2)输出信息
输入2进入输出信息模块,该模块分四项,分别代表一种输出方式,如图2-5所示。
图2-5输入信息模块界面
用户可以按照自己的喜好,选择一种方式输入信息,输入2返回输出信息模块,输入0返回主菜单。
如图7~9分别是按照学校编号、学校总分、女团总分输出的情况。
图2-6按学校总分输出
图2-7按学校总分输出
图2-8按女团总分输出
(3)查询信息
输入3进入信息查询模块,该模块分为两项,如图2-7所示。
图2-7信息查询模块
用户可以选择不同菜单进行查询,如图4-8和图4-9分别是按照学校编号和项目编号查询的情况。
图2-8按学校编号查询
图2-9按项目编号查询
(4)退出系统
在主菜单下输入4可以退出系统,并有中文提示,如图所示。
图2-10退出系统
2.5课程设计总结
2,5,1调试中遇到的较重要问题回顾
(1)提出问题:
所有输入输出内容只能在一屏内显示,学过c语言,很知道”\n”是换行,”\f”是换屏的,可是在这里就是无法实现。
解决问题:
输入clrscr();
(2)提出问题:
设置选项,供用户输入选择时,当按任意键时都会跳入下一步操作,或者直接退出系统。
分析问题:
在供用户选择时,提供了几个选项,就写几个case语句,但是当用户输入的并不是这几个数字时,系统就不能做出正确判断。
解决问题:
修改case语句,添加default语句提示出错,要求重新输入。
源代码如下:
Default:
clrscr();/*清屏*/
printf("输入错误,请重新选择");
(3)提出问题:
用户在系统主菜单上进行选择时,若没有输入任何初始信息,而选择输出或查询操作,系统也会做出相应操作。
增加标识变量作为循环终止变量,用来判断系统中是否已经输入了信息。
若没有就提示用户先输入信息。
2.5.2算法的效率及改进设想
算法的效率:
总的来讲,严重引响执行速度的便是查找,查找任意一个数据,便要将其所在的结构从头至尾遍历一次,耗费大量的时间。
改进设想:
因大部分显示均是以学校为单位,所以将以由有关人的各种信息为集合的结构改为以由有关学校的各种信息为集合的结构。
2.5.3心得体会
在这次上机过程中遇到过一些问题,但经过不懈努力,解决了部分,还有的现在不能解决,留待日后思考和解决。
比如说在运用数据结构排序的时候,方法的选择上,总是想用时间复杂度小的算法,但结果出了问题,最后还是用了我们熟悉的选择法排序。
在编写之前,做整体规划和详细设计很重要。
只有思路清晰,设计合理可行,编码才有可能有的放矢,才能更加有效的完成任务。
本次集中上机实验,对我来说可以算是一次挑战,因为在理论学习中没有好好的掌握,现在要独立完成一个较复杂的程序编写,确实有一点困难。
但我对于难度一向是以积极迎战的态度来面对,认真积极努力完成这次集中上机的任务。
对我来说这是一次很好的机会,同时我也很好的把握了这次机会,认真的完成了此次上机学习的任务,对自己今后在程序编写方面以及文档撰写方面相信会有很大的帮助,在此也对老师安排这样一次学习表示感谢,最后希望自己在数据结构以及计算机的其他学习方面能够得到很好的提高。
参考文献
[1]李云清、杨庆红、揭安全.数据结构(C语言版)[M].人民邮电大学出版社,2004.6
[2]潘彦.算法设计与分析基础[M].北京:
清华大学出版社,2007.1
[3]肖梦强、曲秀清.软件工程——原理、方法与应用[M].中国水利水电出版社,2005.10
[4]吕凤翥.C++语言程序设计(第2版).电子工业出版社,2007.2
[5]严蔚敏、吴伟民.数据结构(C语言版)[M].清华大学出版社,2002.9
附录
附录1
#include
//常量定义
#defineMAX_STOP5//定义停车场最大停车数
#defineMAX_PLATE10//定义车牌号最大长度
usingnamespacestd;//使用std命名空间
//定义存储汽车信息的结构体
charlicense_plate[MAX_PLATE];//汽车牌照号码,定义为一个字符指针类型
charstate;//汽车当前状态,字符p表示停放在停车位上,字符s表示停放在便道上,每辆车的初始状态用字符i来进行表示
}CAR;
//定义模拟停车场的栈结构
CARSTOP[MAX_STOP];//汽车信息的存储空间
inttop;//用来指示栈顶位置的静态指针
}SeqStack;
//定义模拟便道的队列结构
typedefstructnode
CARWAIT;//汽车信息的存储空间
structnode*next;//用来指示队列位置的动态指针
}QNode;//链队列节点的类型
//定义链队列的收尾指针
QNode*front,*rear;
}LQueue;//将头尾指针封装在一起的链队
//函数声明
intEmpty_LQueue(LQueue*q);//判队空
intLeaveCheck(SeqStackparking,char*license_plate);//检查离开的车是否在停车场中
intQueueLength(LQueue*q);//判队长度
intOut_LQueue(LQueue*&sidewalk,char*license_plate);//出队操作
intStackEmpty(SeqStackparking);//判断栈是否为空
intStackFull(SeqStackparking);//判断栈是否为满
intStackPop(SeqStack&parking);//出栈操作
intStackTop(SeqStackparking,char*license_plate);//取栈顶元素
voidCar_come(SeqStack&parking,LQueue*&sidewalk);//有车到来时的操作
voidCar_leave(SeqStack&parking,LQueue*&sidewalk);//有车离开的操作
voidDisplay(SeqStackparking);//显示停车场内的所有信息调试时用
voidInitStack(SeqStack&parking);//初始化栈
voidInitList(LQueue*&sidewalk);//初始化队列
voidIn_LQueue(LQueue*&sidewalk,char*license_plate);//进队操作
voidInput_Check(char*license_plate);//检验输入的车牌是否合法
voidStackPush(SeqStack&parking,char*license_plate);//进栈操作
voidmain()
//定义变量
SeqStackparking;
LQueue*sidewalk=NULL;
char*choice=newchar;
intflag=1;//定义一个变量判断是否退出
InitStack(parking);//初始化一个为空的停车场
InitList(sidewalk);//初始化一个为空的便道
while(flag)//运行界面及功能选择
{cout<<"\t****************************************************\n\n";
cout<<"\t*****************欢迎来到孙晓东的停车场*************\n\n";
cout<<"\t|停车场模拟管理系统|\n\n";
cout<<"\t|--------------------------------------------------|\n\n";
cout<<"\t||\n\n";
cout<<"\t|有车到来时请按C键。
|\n\n";
cout<<"\t|有车要走时请按l键。
cout<<"\t|查看停车场请按D键。
cout<<"\t|要退出系统请按Q键。
cout<<"\t|***************************************************\n\n";
cout<<"请选择操作:
";
gets(choice);
if(1!
=strlen(choice))
cout<<"请正确输入选项!
continue;
switch(*choice)
case'c':
case'C':
Car_come(parking,sidewalk);break;
case'l':
case'L':
Car_leave(parking,sidewalk);break;
case'q':
case'
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1