高级语言程序设计(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()Case7读取文件Case1添加信息Case2删除信息Case3修改信息Case4查询信息Case5排序信息Case6打印信息Case0退出添加(插入)停车场的基本信息(车位号车牌号,车主信息)输入车位号,删除该车位的信息输入车位号,选择修改各项信息输入车位号,查询该车位的信息将停车场现有的停车信息按照车位号进行排序将停车场现有的停车信息输出结束46.选择5,给居所停车位对车主信息进行排序,排序完成后按任意键返回。7.选择6,可输出全部车主信息,出现在屏幕上,按任意键进行返回。8.显示主菜单是,选择0,结束本次程序。二.程序上机调试报告【语法错误及其排除】1.个别用户表示符和关键字相同导致程序无法运行,找出错误修改。2.使用fscanf()函数时,参数直接写的是变量名,应该取地址。3.宏定义时在末尾处加上了分号,应该不加分号。4.部分单词拼写错误,导致定义的变量不存在,根据提示进行修改。三.程序测试结果程序测试主要截屏1.输入系统密码52.密码正确,进入主菜单3.添加停车信息4.修改车主信息65.排序车主信息76.打印车主信息7.查找车主信息88.删除车主信息9.退出程序【收获及体会】对自己的设计进行评价,指出合理和不足之处,提出改进方案;我自己觉得自己的程序还存在很大问题,比如如果使用者不按照程序先前制定的规则输入则会出现bug,合理之处就在于基本完成了一个非收费停车场的基本信息的管理。改进之处就是增加信息的项目已经bug的问题。还有就是将这个停车场改成9一个收费的停车场,按照时间来收费,有过想法但是不知道该怎么实现,有想到用time函数,但不知道怎么用!四、源程序代码#includestdio.h#includeconio.h#includestdlib.h#includemalloc.h#includestring.hstructcar*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;10head=(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);11if((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);}12//输出模块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-np-n)h=h-next;if(h-next!=NULL&&h-next-n==p-n)13{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;}14h=p;p=p-next;}printf(无此车位号,删除失败,按任意键返回主菜单!\n);getch();}return0;}//修改信息模块intmodify(structcar*h){intm,choice;structcar*p;p=h-next;