停车场管理系统 课程设计.docx
- 文档编号:8624978
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:22
- 大小:584.31KB
停车场管理系统 课程设计.docx
《停车场管理系统 课程设计.docx》由会员分享,可在线阅读,更多相关《停车场管理系统 课程设计.docx(22页珍藏版)》请在冰豆网上搜索。
停车场管理系统课程设计
高级语言程序设计
(1)课程设计
一、程序设计说明书
【设计题目】停车场信息管理系统
【问题描述】
现如今随着经济的发展,私家车越来越多,系统管理停车场变得尤为重要。
某小区停车场有车数辆,将每个车主的信息用该软件通过键盘敲入并以文本文件方式存放在磁盘,内容为五列:
停车场车位号、车牌号、车主姓名、车主身份证号、车主电话。
编写程序,录入车主信息,可对车主信息随时进行修改、删除,并按车位号查询车主信息。
【基本要求】
1.通过此软件可以录入该汽车的车牌号;
2.通过此软件能够浏览录入该汽车所停车位号;
3.通过此软件录入车主信息,包括车主姓名、车主身份证号以及车主的联系方式;
4.通过此软件可根据输入的车位号删除、修改或查询车主信息;
5.过此软件能将车主信息按照车位号进行排序;
6.通过此软件可输出全部车主信息。
【算法思想】
1.构造一个结构体类型,成员包括五项:
一个字符型数组存放:
车主姓名,四个整形变量:
汽车的车牌号、汽车所停车位号、车主身份证号以及车主的联系方式。
2.录入车主信息及车位号时,通过循环语句将各项信息输入到结构体中,然后通过循环语句算出总分并写入文本文件中,并存入磁盘。
3.修改车主信息时,先将文件读出到结构体中,通过字符的比较查找所修改的信息所在处,如果没有找到则输出警告语句,找到后则通过输入输出函数与赋值进行修改,并将修改过后的车主信息写入文本文件中,并存入磁盘。
4.查询车主信息时,直接通过已经存在的文本文件进行读出并在屏幕上输出结果,如果文件不存在则输出警告语句。
5.查找时,直接通过已经存在的文本文件进行读出到结构体中,并将结构提数组通过车位号的大小用冒泡法进行排序,然后将结果显示在屏幕上。
【调用关系】
main函数分别调用:
insert();//输入信息
del();//删除车主信息
modify();//修改车主信息
inquire();//查询车主信息
sort();//对车主信息进行排序
print_inf()//打印车主信息
【概要设计】
1.功能模块图;
2.
主函数
3.各个模块详细的功能描述。
1.保存信息模块:
将程序中链表里所存储的信息保存到已经指定好的文件中(result.txt)(主要是fprintf函数)。
2.读取信息模块:
将指定的文件(result.txt)中的信息读取后存入运行程序中的链表当中(主要是fscanf函数)
3.简单菜单模块:
显示程序执行时的主菜单(主要是switch语句实现)。
4.输出信息模块:
将链表中的信息输出到程序的显示框上(主要是for循环和printf函数实现)。
5.添加信息模块:
按照停车号的大小进行插入,有重号系统会显示“有重号,添加失败”,否则“插入成功”。
6.删除信息模块:
通过停车号的比较,当无此车位号则删除失败,否则删除成功。
7.修改信息模块:
先找到需要修改的车位号,再按照车牌号,车主姓名,车主身份证,车主联系方式进行进一步修改若无该车位号则提示错误信息返回主菜单。
8.查询信息模块:
如果链表里无数据则显示“系统无数据,按任意键返回”
如果有则按车位号查询,并输出。
9.排序信息模块:
按照简单排序按车位号对信息进行排序,并输出。
10.主函数模块:
将以上模块进行组合实现系统的功能。
【详细设计】
功能函数的调用关系图;
【程序使用方法】
1.执行程序,先输入密码,进入程序主界面按照程序提示进入所要执行的内容。
2.选择1,根据所停车位号添加车主信息,添加完成后按任意键返回主菜单。
3.选择2,根据所停车位号删除车主信息,删除完成后按任意键返回主菜单。
4.选择3,根据所停车位号修改车主信息,修改完成后按任意键返回主菜单。
5.选择4,根据所停车位号查询车主信息,查询后按任意键返回主菜单。
6.选择5,给居所停车位对车主信息进行排序,排序完成后按任意键返回。
7.选择6,可输出全部车主信息,出现在屏幕上,按任意键进行返回。
8.显示主菜单是,选择0,结束本次程序。
二.程序上机调试报告
【语法错误及其排除】
1.个别用户表示符和关键字相同导致程序无法运行,找出错误修改。
2.使用fscanf()函数时,参数直接写的是变量名,应该取地址。
3.宏定义时在末尾处加上了分号,应该不加分号。
4.部分单词拼写错误,导致定义的变量不存在,根据提示进行修改。
三.程序测试结果
程序测试主要截屏
1.输入系统密码
2.密码正确,进入主菜单
3.添加停车信息
4.修改车主信息
5.排序车主信息
6.打印车主信息
7.查找车主信息
8.删除车主信息
9.退出程序
【收获及体会】
对自己的设计进行评价,指出合理和不足之处,提出改进方案;
我自己觉得自己的程序还存在很大问题,比如如果使用者不按照程序先前制定的规则输入则会出现bug,合理之处就在于基本完成了一个非收费停车场的基本信息的管理。
改进之处就是增加信息的项目已经bug的问题。
还有就是将这个停车场改成一个收费的停车场,按照时间来收费,有过想法但是不知道该怎么实现,有想到用time函数,但不知道怎么用!
四、源程序代码
#include
#include
#include
#include
#include
structcar*creat_inf();
voidsave_inf(structcar*h);
structcar*read_inf(structcar*head);
voidmenu(void);
voidscan_inf(structcar*h);
voidprint_inf(structcar*h);
intinsert(structcar*h);
intdel(structcar*h);
intmodify(structcar*h);
structcar*inquire(structcar*h);
structcar*sort(structcar*head);
//定义结构体
structcar
{
intn;//停车场车位号
charnum[20];//车牌号
charname[20];//车主姓名
charnumber[20];//车主身份证号
chartel_num[20];//车主联系电话
structcar*next;//指针域
};
//建立单链表头结点
structcar*creat_inf()
{
structcar*head;
head=(structcar*)malloc(sizeof(structcar));
head->next=NULL;//表尾节点next域置空
returnhead;
}
//将单链表中的信息保存到指定的磁盘文件中
voidsave_inf(structcar*h)
{
structcar*c;
FILE*fp;
if((fp=fopen("result.txt","wt"))==NULL)
{
printf("写文件出错,按任意键退出!
");
getch();
exit
(1);
}
for(c=h->next;c!
=NULL;c=c->next)
{
fprintf(fp,"%d%s%s%s%s",c->n,c->num,c->name,c->number,c->tel_num);
}
printf("\n文件已成功保存,按任意键退出!
\n\n");
getch();
fclose(fp);
}
//从指定的磁盘文件中读取信息并存入单链表中
structcar*read_inf(structcar*head)
{
structcar*p1,*p2;
FILE*fp;
system("cls");
if((fp=fopen("result.txt","rt"))==NULL)
{
printf("文件空,按任意键返回!
!
");
getch();
returnhead;
}
p2=head;
while(!
feof(fp))//文件未结束
{
p1=(structcar*)malloc(sizeof(structcar));//存放读取信息
fscanf(fp,"%d%s%s%s%s\n",&p1->n,p1->num,p1->name,p1->number,p1->tel_num);
p2->next=p1;//链接节点
p2=p1;
}
p2->next=NULL;
fclose(fp);
printf("\n文件中信息以正确读出,按任意键返回!
");
getch();
system("cls");
returnhead;
}
//停车场管理系统菜单
voidmenu(void)
{
printf("\n\n\n--------------------欢迎来到停车场管理系统-----------------------\n\n\n");
printf("1.添加停车信息\n\n");
printf("2.删除停车信息\n\n");
printf("3.修改停车信息\n\n");
printf("4.查询停车信息\n\n");
printf("5.排序停车信息\n\n");
printf("6.打印停车信息\n\n");
printf("7.读取库中数据\n\n");
printf("0.退出系统\n\n");
printf("请选择0-6选项\n\n");
}
//输出模块
voidprint_inf(structcar*h)
{
structcar*p;
system("cls");
printf("\n\n目前停车场的数据为:
\n\n");
printf("车位号车牌号车主姓名车主身份证号车主联系电话\n");
for(p=h->next;p!
=NULL;p=p->next)
printf("%5d%10s%8s%10s%10s\n",p->n,p->num,p->name,p->number,p->tel_num);
printf("按任意键返回主菜单!
\n");
getch();
}
//添加信息模块
intinsert(structcar*h)
{
structcar*p;
p=(structcar*)malloc(sizeof(structcar));//p指向新生成的节点
system("cls");
printf("请输入要添加的车位号,车牌号,车主姓名,车主身份证号,车主联系电话\n");
scanf("%d%s%s%s%s",&(p->n),(p->num),(p->name),(p->number),(p->tel_num));
while(h->next!
=NULL&&h->next->n
h=h->next;
if(h->next!
=NULL&&h->next->n==p->n)
{
free(p);
printf("有重号,添加失败,按任意键返回主菜单!
");
getch();
return0;
}
p->next=h->next;
h->next=p;
printf("添加成功,按任意键返回主菜单!
");
getch();
return1;
}
//删除信息模块
intdel(structcar*h)
{
intm;
structcar*p;
p=h->next;
system("cls");
if(p==NULL)//只有头结点为空表,不能删除
{
printf("无内容,无法删除,按任意键退出返回主菜单!
\n");
getch();
return0;
}
else
{
printf("请输入要删除的车位号:
\n");
scanf("%d",&m);
while(p!
=NULL)
{
if(p->n==m)
{
h->next=p->next;
free(p);
printf("删除成功!
按任意键返回主菜单!
\n");
getch();
return1;
}
h=p;
p=p->next;
}
printf("无此车位号,删除失败,按任意键返回主菜单!
\n");
getch();
}
return0;
}
//修改信息模块
intmodify(structcar*h)
{
intm,choice;
structcar*p;
p=h->next;
system("cls");
printf("\n请输入要修改的车位号:
\n");
scanf("%d",&m);
while(p!
=NULL)
{
if(p->n==m)
{
printf("您要修改哪一项:
\n");
printf("\n1.车牌号\n");
printf("\n2.车主姓名\n");
printf("\n3.车主身份证号\n");
printf("\n4.车主联系方式\n");
printf("请选择1-4:
");
scanf("%d",&choice);
switch(choice)
{
case1:
printf("请输入修改后的车牌号:
\n");
scanf("%s",p->num);
break;
case2:
printf("请输入修改后的车主姓名:
\n");
scanf("%s",p->name);
break;
case3:
printf("请输入修改后的车主身份证号:
\n");
scanf("%s",p->number);
break;
case4:
printf("请输入修改后的车主联系方式:
\n");
scanf("%s",p->tel_num);
break;
}
printf("\n停车信息\n");
printf("车位号车牌号车主姓名车主身份证号车主联系电话\n");
printf("%5d%10s%8s%10s%10s\n",p->n,p->num,p->name,p->number,p->tel_num);
printf("修改信息成功!
按任意键返回主菜单!
");
getch();
return1;
}
p=p->next;
}
printf("您所要修改的信息不存在,按任意键返回主菜单!
");
getch();
return0;
}
//查询信息模块
structcar*inquire(structcar*h)
{
intm;
structcar*p;
system("cls");
if(h->next==NULL)
{
printf("系统无数据,按任意键返回主菜单\n");
getch();
return0;
}
else
{
p=h->next;
printf("请输入要要查找的车位号:
");
scanf("%d",&m);
while(p!
=NULL)
{
if(p->n==m)
{
printf("车位号车牌号车主姓名车主身份证号车主联系电话\n");
printf("%5d%10s%8s%10s%10s\n",p->n,p->num,p->name,p->number,p->tel_num);
printf("按任意键返回主菜单...");
getch();
returnp;//找到则返回指向该节点的指针P
}
p=p->next;
}
}
returnNULL;//未找到则返回空指针NULL
}
//排序
structcar*sort(structcar*head)
{
structcar*temp1,*p1,*p2,*min,*temp,*p;
temp=(structcar*)malloc(sizeof(structcar));
if(head->next==NULL)
{
system("cls");
printf("系统无数据!
按任意键返回主菜单!
");
getch();
returnhead;
}
for(p1=head->next;p1!
=NULL;p1=p1->next)
{
min=p1;
for(p2=p1->next;p2!
=NULL;p2=p2->next)
if(min->n>p2->n)
min=p2;
if(min!
=p1)
{
*temp=*min;
*min=*p1;
*p1=*temp;
temp1=min->next;
min->next=p1->next;
p1->next=temp1;
}
}
system("cls");
printf("\n\n排序后停车场的数据为:
\n\n");
printf("车位号车牌号车主姓名车主身份证号车主联系电话\n");
for(p=head->next;p!
=NULL;p=p->next)
printf("%5d%10s%8s%10s%10s\n",p->n,p->num,p->name,p->number,p->tel_num);
printf("按任意键返回主菜单...\n");
getch();
return(head);
}
//主函数
voidmain(void)
{
structcar*head;
intm,n,choice;
m=123;
printf("请输入管理员密码:
\n");
scanf("%d",&n);
if(n==m)
{
printf("密码正确!
按任意键进入\n");
getch();
}
else
{
printf("密码错误!
按任意键退出\n");
exit(0);
}
head=creat_inf();
do
{
system("cls");
menu();
scanf("%d",&choice);
switch(choice)
{
case1:
insert(head);
break;
case2:
del(head);
break;
case3:
modify(head);
break;
case4:
inquire(head);
break;
case5:
sort(head);
break;
case6:
print_inf(head);
break;
case7:
head=read_inf(head);
break;
case0:
break;
}
}while(choice!
=0);
save_inf(head);
free(head);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 停车场管理系统 课程设计 停车场 管理 系统