停车场管理系统 课程设计
- 格式:doc
- 大小:722.08 KB
- 文档页数:19
高级语言程序设计(1)课程设计 一、程序设计说明书 【设计题目】 停车场信息管理系统 【问题描述】 现如今随着经济的发展,私家车越来越多,系统管理停车场变得尤为重要。某小区停车场有车数辆,将每个车主的信息用该软件通过键盘敲入并以文本文件方式存放在磁盘,内容为五列:停车场车位号、车牌号、车主姓名、车主身份证号、车主电话。编写程序,录入车主信息,可对车主信息随时进行修改、删除,并按车位号查询车主信息。
【基本要求】 1. 通过此软件可以录入该汽车的车牌号; 2. 通过此软件能够浏览录入该汽车所停车位号; 3. 通过此软件录入车主信息,包括车主姓名、车主身份证号以及车主的联系方式; 4. 通过此软件可根据输入的车位号删除、修改或查询车主信息; 5. 过此软件能将车主信息按照车位号进行排序; 6. 通过此软件可输出全部车主信息。
【算法思想】 1. 构造一个结构体类型,成员包括五项:一个字符型数组存放:车主姓名,四个整形变量:汽车的车牌号、汽车所停车位号、车主身份证号以及车主的联系方式。 2. 录入车主信息及车位号时,通过循环语句将各项信息输入到结构体中,然后通过循环语句算出总分并写入文本文件中,并存入磁盘。 3. 修改车主信息时,先将文件读出到结构体中,通过字符的比较查找所修改的信息所在处,如果没有找到则输出警告语句,找到后则通过输入输出函数与赋值进行修改,并将修改过后的车主信息写入文本文件中,并存入磁盘。 4. 查询车主信息时,直接通过已经存在的文本文件进行读出并在屏幕上输出结果,如果文件不存在则输出警告语句。 5. 查找时,直接通过已经存在的文本文件进行读出到结构体中,并将结构提数组通过车位号的大小用冒泡法进行排序,然后将结果显示在屏幕上。
【调用关系】 main函数分别调用: insert(); //输入信息 del(); //删除车主信息 modify(); //修改车主信息 inquire(); //查询车主信息
sort(); //对车主信息进行排序 print_inf()//打印车主信息 2
【概要设计】 1.功能模块图; 主函数
2.各个模块详细的功能描述。 1. 保存信息模块:将程序中链表里所存储的信息保存到已经指定好的文件中(result.txt)(主要是fprintf函数)。 2. 读取信息模块:将指定的文件(result.txt)中的信息读取后存入运行程序中的链表当中(主要是fscanf函数) 3. 简单菜单模块:显示程序执行时的主菜单(主要是switch语句实现)。 4. 输出信息模块:将链表中的信息输出到程序的显示框上(主要是for循环和printf函数实现)。 5. 添加信息模块:按照停车号的大小进行插入,有重号系统会显示“有重号,添加失败”,否则“插入成功” 。 6. 删除信息模块:通过停车号的比较,当无此车位号则删除失败,否则删除成功。 7. 修改信息模块:先找到需要修改的车位号,再按照车牌号,车主姓名,车主身份证,车主联系方式进行进一步修改若无该车位号则提示错误信息返回主菜单。 8. 查询信息模块:如果链表里无数据则显示“系统无数据,按任意键返回” 如果有则按车位号查询,并输出。 9. 排序信息模块:按照简单排序按车位号对信息进行排序,并输出。 10. 主函数模块:将以上模块进行组合实现系统的功能。
插入信息 验证密码 查找信息 删除信息 修改信息 读取文件 排序信息 保存文件 3
【详细设计】 功能函数的调用关系图;
【程序使用方法】 1. 执行程序,先输入密码,进入程序主界面按照程序提示进入所要执行的内容。 2. 选择1,根据所停车位号添加车主信息,添加完成后按任意键返回主菜单。 3. 选择2,根据所停车位号删除车主信息,删除完成后按任意键返回主菜单。 4. 选择3,根据所停车位号修改车主信息,修改完成后按任意键返回主菜单。 5. 选择4,根据所停车位号查询车主信息,查询后按任意键返回主菜单。
输入密码进入菜单 Switch() Case 7读取文件
Case 1添加信息 Case 2删除信息 Case 3修改信息 Case 4查询信息 Case 5排序信息 Case 6打印信息 Case 0 退出 添加(插入)停车场的基本信息(车位号车牌号,车主信息)
输入车位号,删除该车位的信息
输入车位号,选择修改各项信息 输入车位号,查询该车位的信息 将停车场现有的停车信息按照车位号进行排序
将停车场现有的停车信息输出
结束 4
6. 选择5,给居所停车位对车主信息进行排序,排序完成后按任意键返回。 7. 选择6,可输出全部车主信息,出现在屏幕上,按任意键进行返回。 8. 显示主菜单是,选择0,结束本次程序。
二. 程序上机调试报告 【语法错误及其排除】 1.个别用户表示符和关键字相同导致程序无法运行,找出错误修改。 2. 使用fscanf( )函数时,参数直接写的是变量名,应该取地址。 3.宏定义时在末尾处加上了分号,应该不加分号。 4.部分单词拼写错误,导致定义的变量不存在,根据提示进行修改。 三.程序测试结果
程序测试主要截屏 1. 输入系统密码 5
2. 密码正确,进入主菜单
3. 添加停车信息
4. 修改车主信息 6 5. 排序车主信息 7
6. 打印车主信息 7. 查找车主信息 8 8. 删除车主信息
9. 退出程序 【收获及体会】 对自己的设计进行评价,指出合理和不足之处,提出改进方案; 我自己觉得自己的程序还存在很大问题,比如如果使用者不按照程序先前制定的规则输入则会出现bug,合理之处就在于基本完成了一个非收费停车场的基本信息的管理。 改进之处就是增加信息的项目已经bug的问题。还有就是将这个停车场改成 9
一个收费的停车场,按照时间来收费,有过想法但是不知道该怎么实现,有想到用time函数,但不知道怎么用! 四、源程序代码 #include #include #include #include #include
struct car *creat_inf(); void save_inf(struct car *h); struct car *read_inf(struct car *head); void menu(void); void scan_inf(struct car *h); void print_inf(struct car *h); int insert(struct car *h); int del(struct car *h); int modify(struct car *h); struct car * inquire(struct car *h); struct car *sort(struct car *head);
//定义结构体 struct car { int n; //停车场车位号 char num[20]; //车牌号 char name[20]; //车主姓名 char number[20]; //车主身份证号 char tel_num[20]; //车主联系电话 struct car *next; //指针域 };
//建立单链表头结点 struct car *creat_inf() { struct car *head; 10
head=(struct car *)malloc(sizeof(struct car)); head->next=NULL; //表尾节点next域置空 return head; }
//将单链表中的信息保存到指定的磁盘文件中 void save_inf(struct car *h) { struct car *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); }
//从指定的磁盘文件中读取信息并存入单链表中 struct car *read_inf(struct car *head) {
struct car *p1,*p2; FILE *fp; system("cls");