《南京邮电大学门禁信息系统设计实验报告(共37页).doc》由会员分享,可在线阅读,更多相关《南京邮电大学门禁信息系统设计实验报告(共37页).doc(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上程序设计报告( 2014 / 2015 学年 第 一 学期)题 目:门禁信息系统 专 业 计算机科学与技术 组长 学号姓名 B张娟_组员 学号姓名 B冯奎 _ B李英杰_指 导 教 师 朱丹 指 导 单 位 南京邮电大学 日 期 2014 年 11 月20 日 成员分工组长(张娟)main函数的实现、选择菜单和显示菜单的实现组员(冯奎)结构体的定义及主要函数(包括录入、修改、删除)的实现组员(李英杰)查找、统计、排序函数的实现评分细则评分项优秀良好中等差遵守机房规章制度上机时的表现学习态度程序准备情况程序设计能力团队合作精神课题功能实现情况算法设计合理性用户界面设计报
2、告书写认真程度内容详实程度文字表达熟练程度回答问题准确度简短评语 教师签名: 年 月 日评分等级备注评分等级共五种:优秀、良好、中等、及格、不及格门禁信息系统一、 课题内容和要求课题内容:门禁信息系统是一个用来统计人员出入情况的程序。信息结构包括出入人员的姓名、证件类型、证件编号、负责接待出入人员的接待人(部门)、出入人员的进出时间、出入事由等。通过此课题,熟练掌握数组、字符串、函数的调用和文件的处理等。程序要求:1 能录入,删除,修改,保存文件info_1中数据2 能分别按姓名,证件编号查询出入信息3 统计各出入点的出入信息4 统计各部门的接待次数5 按出入事由统计对应出入次数6 按总滞留时
3、间排序,并显示对应姓名证件编号,结果存入单独文件info_2二、 需求分析门禁信息系统的功能框架图如图1所示。录入删除修改保存查询统计排序门禁信息系统图1 功能框架图(1)提供可操作的主菜单:输出菜单,用于显示以从文件中加载的总客户信息和若干个可选的功能选项。根据客户输入的选项来运行不同的功能,运行不同的函数。(2)数据的录入:从终端获取信息,并将其写入文件info_1中。(3)数据的删除:从终端获取操作信息,删除info_1中与命令对应的数据。(4)数据的修改:从终端获取指令,修改info_1中与命令对应的数据。(5)保存数据:进行录入、删除、修改的操作后,自动将数据保存在文件info_1中
4、。(6)查找功能:提供两种类型的查找方式,即按姓名查找和按证件编号查找。(7)统计数据:能够分别按照出入点、接待人(部门)、出入事由进行数据的统计。(8)排序功能:根据进出人员的出入时间差进行排序。三、概要设计 1、 主要结构体typedef struct char name100; /姓名 char credentials_type100; /证件类型 char credentials_number100; /证件编号 char place100; /出入点 char in_and_out_type100; /出入类型 char reason100; /事由 long int time; /
5、时间 char depart100; /接待人(部门)TX;struct Info /定义结构Info long int time1;char name1100;char number1100;typedef struct Info Info;Info Info_2100; /定义结构数组,用于存储排序后的时间,姓名,证件编号TX mj100; /定义结构数组,存储录入的记录TX a100; /定义结构数组,存储进入记录TX b100; /定义结构数组,存储出去记录TX d100; /定义结构数组,存储只留时间差 int last=0; /初始化记录数为02、主要函数流程图(1)主函数:调用其
6、他函数实现程序功能,主函数流程图如图2所示。图2 主函数(2)录入函数:输入记录并保存到文件中,,录入函数流程图如图3所示。图3 录入函数(3)装载函数:用于从dat文件中载入信息,装载函数流程图如图4所示。 图4 装载函数(4)保存函数:把当前记录写入到文件中,流程图如图5所示。图5 保存函数(5)菜单函数:显示所有菜单信息,流程图如图6所示。图6 菜单函数(6)修改函数:利用输入的姓名时间找到需要修改的信息,再修改出入人员的个人信息,流程图如图7所示。图7 修改函数(7)删除函数:利用输入的姓名时间找到需要删除的信息,再删除出入人员的个人信息,流程图如图8所示。图8删除函数(8)按姓名查询
7、函数:利用输入的姓名进行顺序查找并将找到的信息输出,流程图如图9所示。图9 按姓名查询函数(9)按证件编号查询函数:利用用户输入的证件编号进行顺序查找并将找到的客户信息输出,流程图如图10所示。图10 按证件编号查询函数(10)统计出入点次数函数:统计记录中东南西北4个门的出入次数,流程图如图11所示。图11 统计出入点次数函数(11)统计部门接待次数函数:统计记录中4个部门接待的次数,流程图如图12所示。图12 统计部门接待次数函数(12)统计事由次数函数:统计记录中4个事由次数,流程图如图13所示。图13 统计事由次数函数(13)排序函数:先计算中人员的滞留时间差,流程图如图14所示。图1
8、4 排序函数四、源程序代码 #include#include#include#include#include/main函数的实现、选择菜单和显示菜单的实现,结构体的定义由B张娟 完成#defineINSERT1 #defineQUERYNAME2 #defineQUERYNUM3#defineUPDATE4#define DELETE5#defineCOUNTIN_AND_OUT6#defineCOUNTDEPART7#defineCOUNTREASON8#defineSORT9#defineLIST10#defineQUIT0FILE*fp;FILE*fp1;typedefstruct ch
9、arname100;/姓名charcredentials_type100;/证件类型charcredentials_number100;/证件编号charplace100;/出入点charin_and_out_type100;/出入类型charreason100;/事由longinttime;/chardepart100;/接待人(部门)TX;structInfo/定义结构体用于保存排序后的信息longinttime1;charname1100;charnumber1100;typedefstructInfoInfo;InfoInfo_2100;/定义变量完成程序所需操作TXmj100;/定义
10、变量用于完成滞留时间排序的操作TXa100;TXb100;TXd100;intlast=0;/保存记录的数目voidshowMenu();/显示菜单voiddoChoice(intchoice);/从终端输入操作指令intgetChoice();/获取操作指令voiddoQuit();/退出程序voiddoInsert();/录入数据voiddoUpdate();/修改数据voiddoQueryname();/按姓名查找 voiddoQuerynum();/按证件编号查找 voiddoDelete();/删除数据voidcountin_and_out();/统计各出入点的出入次数voidcou
11、ntdepart();/统计各部门的接待次数voidcountreason();/按出入事由统计对应出入次数voidsort();/按滞留时间排序voidinit();intmain(intargc,char*argv)intchoice;init();while(1)showMenu();choice=getChoice();doChoice(choice);system(pausenul);return0;voidprintHead()/打印表头函数printf(%s%6s%8s%6s%9s%6s%8s%16sn,姓名,证件类型,证件编号,出入点,出入类型,事由,时间,接待人部门);voi
12、dinit()inti=0;if(fp=fopen(info_1.dat,rb)=NULL)/以读的方式打开文件printf(不能打开文件,请检查); /如果打开失败,提示信息,退出exit(0);last=0;elsewhile(!feof(fp)/文件未结束时循环if(fread(&mji,sizeof(TX),1,fp)=1)/如果正确读入一个数据块i+;last=i;fclose(fp);/关闭文件voidsave()inti=0;if(fp=fopen(info_1.dat,wb)=NULL)/以写的方式打开文件printf(不能打开,请检查!);exit(0);while(ilas
13、t)fwrite(&mji,sizeof(TX),1,fp);/当前记录写入文件i+;fclose(fp);voidshowMenu()/菜单函数system(cls);/清屏printf(*门禁信息系统*n);printf(t1.增加出入信息n);printf(t2.按姓名查找出入信息n);printf(t3.按证件编号查找出入信息n);printf(t4.修改出入信息n);printf(t5.删除出入信息n);printf(t6.按出入点统计出入信息n);printf(t7.按各部门统计出入信息n);printf(t8.按出入事由统计出入信息n);printf(t9.按滞留时间排序n);p
14、rintf(t10,显示所有出入信息n);printf(t0.退出系统n);printf(=n);printf(请输入你的选择(0-9):n);voiddoQuit()printf(n再见!);exit(0);/录入、修改、删除函数的实现由B冯奎 完成voiddoInsert()/录入信息的实现printf(姓名:);scanf(%s,&mjlast.name);printf(证件类型:);scanf(%s,&mjlast.credentials_type);printf(证件编号:);scanf(%s,&mjlast.credentials_number);printf(出入点:);scan
15、f(%s,&mjlast.place);printf(出入类型:);scanf(%s,&mjlast.in_and_out_type);printf(事由:);scanf(%s,&mjlast.reason);printf(时间:);scanf(%ld,&mjlast.time);printf(接待人(部门):);scanf(%s,&mjlast.depart);printf(增加成功!n);last+;save();voiddoUpdate()/修改信息的实现chartname100;longintttime;inti;intfind=0;printf(请输入姓名:);scanf(%s,&t
16、name);printf(请输入时间:);scanf(%ld,&ttime);for(i=0;ilast&!find;i+)if(!strcmp(tname,mji.name)/比较字符串if(ttime=mji.time)find=1;printf(n请修改:n);printf(姓名:);scanf(%s,&mji.name);printf(证件类型:);scanf(%s,&mji.credentials_type);printf(证件编号:);scanf(%s,&mji.credentials_number);printf(出入点:);scanf(%s,&mji.place);printf
17、(出入类型:);scanf(%s,&mji.in_and_out_type);printf(事由:);scanf(%s,&mji.reason);printf(时间:);scanf(%ld,&mji.time);printf(接待人(部门):);scanf(%s,&mji.depart);if(!find)printf(抱歉,无此人);elseprintf(已成功修改!);save();voiddoDelete()/删除信息的实现chartname100;longinttime;inti;intfind=0;intindex;printf(请输入姓名:);scanf(%s,&tname);pr
18、intf(请输入时间:);scanf(%ld,&time);for(i=0;ilast&!find;i+)if(!(strcmp(tname,mji.name)if(time=mji.time)find=1;index=i;break;if(!find)printf(抱歉,无此人);elsefor(i=index;i=last;i+)strcpy(mji.name,mji+1.name);/后一个记录替换前一个记录strcpy(mji.credentials_type,mji+1.credentials_type);strcpy(mji.credentials_number,mji+1.cre
19、dentials_number);strcpy(mji.place,mji+1.place);strcpy(mji.in_and_out_type,mji+1.in_and_out_type);strcpy(mji.reason,mji+1.reason);mji.time=mji+1.time;strcpy(mji.depart,mji+1.depart);last-;printf(已成功删除!);save();/查找、统计、排序函数的实现由B 李英杰 完成voiddoQueryname()/按姓名查询的实现chartname100;inti;intfind=0;printf(请输入姓名:)
20、;scanf(%s,&tname);for(i=0;ilast;i+)/for循环查找字符串if(!strcmp(tname,mji.name)printf(你查询的信息如下:n); printHead();find=1;printf(%st,mji.name);printf(%st,mji.credentials_type);printf(%st,mji.credentials_number);printf(%st,mji.place);printf(%st,mji.in_and_out_type);printf(%st,mji.reason);printf(%ldt,mji.time);p
21、rintf(%stn,mji.depart);if(!find)printf(没有更多数据);voiddoQuerynum()/按证件编号查询的实现chartnum100;inti;intfind=0;printf(请输入证件编号:);scanf(%s,&tnum);for(i=0;iplace,south)=0)/比较字符串c0+;if(strcmp(mj-place,north)=0)c1+;if(strcmp(mj-place,west)=0)c2+;if(strcmp(mj-place,east)=0)c3+;printf(南门次数:%d,北门次数:%d,西门次数:%d,东门次数:%d
22、,c0,c1,c2,c3);fclose(fp);voidcountdepart()/统计部门接待次数的实现inti=0;intc4=0;charpart110=部门1;charpart210=部门2;charpart310=部门3;charpart410=部门4;fp=fopen(info_1.dat,rb);if(fp=0)printf(不能打开文件,请检查);exit(0);elsewhile(fread(&mj,sizeof(TX),1,fp)=1)/读入文件if(strcmp(mj-depart,part1)=0)/比较字符串c0+;if(strcmp(mj-depart,part2
23、)=0)c1+;if(strcmp(mj-depart,part3)=0)c2+;if(strcmp(mj-depart,part4)=0)c3+;printf(部门1次数:%d,部门2次数:%d,部门3次数:%d,部门4次数:%d,c0,c1,c2,c3);fclose(fp);voidcountreason()/统计事由次数的实现inti=0;intc4=0;charwork10=工作;charvisit10=访问;charstudy10=学习;charother10=其他;fp=fopen(info_1.dat,rb);if(fp=0)printf(不能打开文件,请检查);exit(0)
24、;elsewhile(fread(&mj,sizeof(TX),1,fp)=1)if(strcmp(mj-reason,work)=0)c0+;if(strcmp(mj-reason,visit)=0)c1+;if(strcmp(mj-reason,study)=0)c2+;if(strcmp(mj-reason,other)=0)c3+;printf(工作次数:%d,访问次数:%d,学习次数:%d,其他次数:%d,c0,c1,c2,c3);fclose(fp);voidlist()/在终端显示信息inti=0;printHead();for(i;ilast;i+)printf(%3s%4s%
25、8s%6s%9s%3s%10ld%5sn,mji.name,mji.credentials_type,mji.credentials_number,mji.place,mji.in_and_out_type,mji.reason,mji.time,mji.depart);/关闭文件voidsort()inti=0,j,k=0,m,n,index,t,x,y;structtmtime_cha;time_tt1,t2;intyear,month,day,hour,min,sec=0;fp=fopen(info_1.dat,rb);for(i=0;ilast-1;i+)for(j=i+1;jlast
26、;j+)if(!strcmp(mji.name,mjj.name)ak.time=mji.time;bk.time=mjj.time;strcpy(ak.name,mji.name);strcpy(bk.name,mjj.name);strcpy(ak.credentials_number,mji.credentials_number);strcpy(bk.credentials_number,mjj.credentials_number);k+;for(n=0;nk;n+)year=an.time/+2000;month=an.time/%100;day=an.time/10000%100;
27、hour=an.time/100%100;min=an.time%100;time_cha.tm_year=year-1900;/tm结构记录年为实际-1900time_cha.tm_mon=month-1;time_cha.tm_mday=day;time_cha.tm_hour=hour;time_cha.tm_min=min;time_cha.tm_sec=sec;t1=mktime(&time_cha);/获得从1970年1月1日0时0分0秒以来过去的时间,秒year=bn.time/+2000;month=bn.time/%100;day=bn.time/10000%100;day=
28、bn.time/10000%100;hour=bn.time/100%100;min=bn.time%100;time_cha.tm_year=year-1900;/tm结构记录年为实际-1900time_cha.tm_mon=month-1;time_cha.tm_mday=day;time_cha.tm_hour=hour;time_cha.tm_min=min;time_cha.tm_sec=sec;t2=mktime(&time_cha);strcpy(dn.name,an.name);strcpy(dn.credentials_number,an.credentials_number
29、);dn.time=t2-t1;for(x=0;xn-1;x+)index=x;for(y=x+1;yn;y+)if(dy.timedindex.time)index=y;if(index!=x)/滞留时间排序t=dindex.time;dindex.time=dx.time;dx.time=t;/按滞留时间交换姓名strcpy(d100.name,dx.name);strcpy(dx.name,dindex.name);strcpy(dindex.name,d100.name);/按滞留时间交换证件编号strcpy(d100.credentials_number,dx.credentials_number);strcpy(dx.credentials_number,dindex.credentials_number);strcpy(dindex.credentials_num