南京邮电大学门禁信息系统设计实验报告

上传人:风*** 文档编号:63435816 上传时间:2022-03-18 格式:DOC 页数:37 大小:1.41MB
返回 下载 相关 举报
南京邮电大学门禁信息系统设计实验报告_第1页
第1页 / 共37页
南京邮电大学门禁信息系统设计实验报告_第2页
第2页 / 共37页
南京邮电大学门禁信息系统设计实验报告_第3页
第3页 / 共37页
点击查看更多>>
资源描述
精选优质文档-倾情为你奉上程序设计报告( 2014 / 2015 学年 第 一 学期)题 目:门禁信息系统 专 业 计算机科学与技术 组长 学号姓名 B张娟_组员 学号姓名 B冯奎 _ B李英杰_指 导 教 师 朱丹 指 导 单 位 南京邮电大学 日 期 2014 年 11 月20 日 成员分工组长(张娟)main函数的实现、选择菜单和显示菜单的实现组员(冯奎)结构体的定义及主要函数(包括录入、修改、删除)的实现组员(李英杰)查找、统计、排序函数的实现评分细则评分项优秀良好中等差遵守机房规章制度上机时的表现学习态度程序准备情况程序设计能力团队合作精神课题功能实现情况算法设计合理性用户界面设计报告书写认真程度内容详实程度文字表达熟练程度回答问题准确度简短评语 教师签名: 年 月 日评分等级备注评分等级共五种:优秀、良好、中等、及格、不及格门禁信息系统一、 课题内容和要求课题内容:门禁信息系统是一个用来统计人员出入情况的程序。信息结构包括出入人员的姓名、证件类型、证件编号、负责接待出入人员的接待人(部门)、出入人员的进出时间、出入事由等。通过此课题,熟练掌握数组、字符串、函数的调用和文件的处理等。程序要求:1 能录入,删除,修改,保存文件info_1中数据2 能分别按姓名,证件编号查询出入信息3 统计各出入点的出入信息4 统计各部门的接待次数5 按出入事由统计对应出入次数6 按总滞留时间排序,并显示对应姓名证件编号,结果存入单独文件info_2二、 需求分析门禁信息系统的功能框架图如图1所示。录入删除修改保存查询统计排序门禁信息系统图1 功能框架图(1)提供可操作的主菜单:输出菜单,用于显示以从文件中加载的总客户信息和若干个可选的功能选项。根据客户输入的选项来运行不同的功能,运行不同的函数。(2)数据的录入:从终端获取信息,并将其写入文件info_1中。(3)数据的删除:从终端获取操作信息,删除info_1中与命令对应的数据。(4)数据的修改:从终端获取指令,修改info_1中与命令对应的数据。(5)保存数据:进行录入、删除、修改的操作后,自动将数据保存在文件info_1中。(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; /时间 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)主函数:调用其他函数实现程序功能,主函数流程图如图2所示。图2 主函数(2)录入函数:输入记录并保存到文件中,,录入函数流程图如图3所示。图3 录入函数(3)装载函数:用于从dat文件中载入信息,装载函数流程图如图4所示。 图4 装载函数(4)保存函数:把当前记录写入到文件中,流程图如图5所示。图5 保存函数(5)菜单函数:显示所有菜单信息,流程图如图6所示。图6 菜单函数(6)修改函数:利用输入的姓名时间找到需要修改的信息,再修改出入人员的个人信息,流程图如图7所示。图7 修改函数(7)删除函数:利用输入的姓名时间找到需要删除的信息,再删除出入人员的个人信息,流程图如图8所示。图8删除函数(8)按姓名查询函数:利用输入的姓名进行顺序查找并将找到的信息输出,流程图如图9所示。图9 按姓名查询函数(9)按证件编号查询函数:利用用户输入的证件编号进行顺序查找并将找到的客户信息输出,流程图如图10所示。图10 按证件编号查询函数(10)统计出入点次数函数:统计记录中东南西北4个门的出入次数,流程图如图11所示。图11 统计出入点次数函数(11)统计部门接待次数函数:统计记录中4个部门接待的次数,流程图如图12所示。图12 统计部门接待次数函数(12)统计事由次数函数:统计记录中4个事由次数,流程图如图13所示。图13 统计事由次数函数(13)排序函数:先计算中人员的滞留时间差,流程图如图14所示。图14 排序函数四、源程序代码 #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 charname100;/姓名charcredentials_type100;/证件类型charcredentials_number100;/证件编号charplace100;/出入点charin_and_out_type100;/出入类型charreason100;/事由longinttime;/chardepart100;/接待人(部门)TX;structInfo/定义结构体用于保存排序后的信息longinttime1;charname1100;charnumber1100;typedefstructInfoInfo;InfoInfo_2100;/定义变量完成程序所需操作TXmj100;/定义变量用于完成滞留时间排序的操作TXa100;TXb100;TXd100;intlast=0;/保存记录的数目voidshowMenu();/显示菜单voiddoChoice(intchoice);/从终端输入操作指令intgetChoice();/获取操作指令voiddoQuit();/退出程序voiddoInsert();/录入数据voiddoUpdate();/修改数据voiddoQueryname();/按姓名查找 voiddoQuerynum();/按证件编号查找 voiddoDelete();/删除数据voidcountin_and_out();/统计各出入点的出入次数voidcountdepart();/统计各部门的接待次数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,姓名,证件类型,证件编号,出入点,出入类型,事由,时间,接待人部门);voidinit()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(ilast)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);printf(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(出入点:);scanf(%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,&tname);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(出入类型:);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);printf(请输入时间:);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.credentials_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(请输入姓名:);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);printf(%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,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)=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);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%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;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;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=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);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_number,d100.credentials_number);for(y=0;yn;y+)printf(滞留时间:%ds,姓名:%s,编号:%sn,dy.time,dy.name,dy.credentials_number);/将排序后的滞留时间、姓名、证件编号保存在info_2中Info_2y.time1=dy.time;strcpy(Info_2y.name1,dy.name);strcpy(Info_2y.number1,dy.credentials_number);fp=fopen(info_2.dat,wb);if(fp=NULL)/以写的方式打开文件printf(不能打开,请检查!);exit(0);elsefwrite(&Info_2,sizeof(Info),y,fp);/当前记录写入文件fclose(fp);voiddoChoice(intchoice)printf(正在处理第%d个选择!n,choice);switch(choice)caseINSERT:doInsert();break;caseQUERYNAME:doQueryname();break;caseQUERYNUM:doQuerynum();break;caseUPDATE:doUpdate();break;caseDELETE:doDelete();break;caseCOUNTIN_AND_OUT:countin_and_out();break;caseCOUNTDEPART:countdepart();break;caseCOUNTREASON:countreason();break;caseSORT:sort();break;caseLIST:list();break;caseQUIT:doQuit();五、测试数据及其结果分析运行后,程序的主菜单界面如下。菜单:*门禁信息系统* 1.增加出入信息 2.按姓名查找出入信息 3.按证件编号查找出入信息 4.修改出入信息 5.删除出入信息 6.按出入点统计出入信息 7.按各部门统计出入信息 8.按出入事由统计出入信息 9.按滞留时间排序 10,显示所有出入信息 0.退出系统=请输入你的选择(0-9):总客户信息:图15总客户信息请输入所要进行的操作:1:增加出入信息; 2:按姓名查找出入信息; 3:按证件编号查找出入信息; 4:修改出入信息; 5:删除出入信息;6:按出入点统计出入信息;7:按各部门统计出入信息; 8:按出入事由统计出入信息;9: 按滞留时间排序; 10:显示所有出入信息;0:退出系统;(1)增加出入信息测试图16 增加出入信息(2)按姓名查找出入信息测试图17 按姓名查找出入信息(3)按证件编号查找出入信息测试图18按证件编号查找出入信息(4)修改出入信息测试图19 修改出入信息修改后按证件编号查询如下:图20 修改后(5)删除出入信息测试. 图22 删除出入信息删除后按证件查询如界面显示无此人。(6)按出入点统计出入信息测试图23 按出入点统计出入信息(7)按各部门统计出入信息测试图24 按各部门统计出入信息(8)按出入事由统计出入信息测试测试图25 按出入事由统计出入信息(9)按滞留时间排序并显示姓名和证件编号测试图26 按滞留时间排序并显示姓名和证件编号(10)显示所有出入信息图27 所有信息(0)退出系统结果分析如下。(1)在输入菜单选项时如果输入的内容不是1-0之间的数字,而是其他数字,系统将继续执行等待下次正确的输入;若输入的为其他字符(字母或符号),系统将自动认为操作结束而推出系统。(2)在需要输入所须查找的姓名或证件编号处如输入姓名或证件编号不在系统中,系统提示无更多数据并继续读取指令。六、调试过程中的问题(1)按姓名、证件编号查询时出现问题:起初按姓名或是证件编号查询只能查到该命令下的第一条记录:for(i=0;ilast&!find;i+);此时,查询到需要的记录后1就赋值给了find,不再继续循环下去,打印出纪录之后函数结束。所以,把for循环改为for(i=0;ilast;i+),可以输出查询的所有记录,通过for(i=0;ilast;i+) if(!strcmp(tname,mji.name) find=1; printf() 来完成。(2)修改或删除记录时不能准确修或删除:原先在修改或删除记录时由于一个人至少有一进一出两条记录,所以只能修改或删除第一条记录。后来通过增加一条用于判断时间的语句解决此情况,通过for(i=0;ilast&!find;i+) if(!strcmp(tname,mji.name)if(ttime=mji.time)printf(“”);来实现。(3)不能只存入排序后的姓名和证件编号:排序之后直接存入文件会把不需要的内容直接保存。所以,另外定义一个结构Info,把排序后需要的滞留时间,姓名,证件编号存入结构数组Info_2100中,通过struct Infolong int time1;char name1100;char number1100;typedef struct Info Info;Info Info_2100;for(y=0;yn;y+)printf(滞留时间:%d s,姓名:%s,编号:%sn,dy.time,dy.name,dy.credentials_number);Info_2y.time1 = dy.time;strcpy(Info_2y.name1,dy.name);strcpy(Info_2y.number1,dy.credentials_number); fwrite(&Info_2,sizeof(Info),y,fp);来实现。七、课程设计总结程序设计是一个学习新知识、巩固加深所学课本知识的过程,它培养了我们综合运用知识,独立思考和解决问题的能力。它不仅加深了我对计算机语言的理解,还让我感受到了编写程序的乐趣。在这一次的程序设计实验中,老师将我们分成小组的形式,不仅让我们获得了知识,更培养了我们团队合作的意识,更加认识到了合作的重要性。起初拿到课业我们都无从下手,然后经过翻阅书本,查阅资料,一点点的构建框架,写出代码的大概,遇到比较棘手的问题便及时的通过小组讨论加以解决。通过门禁信息系统的实验,我们学会了菜单显示代码的调用,字符串的拷贝,时间函数的准确运用,读取和写入文件等。在这次实验课程中我们不诶艰难,反复修改、调试,就是希望能够运用自己所学的知识出色的完成一项工程。因此对们我来说,这次的课程是非常有意义的。此外,实验后的实验报告让我们有了总结回顾的效果。21世纪的我们,必须学好科学技术才能站得住脚。希望通过此次的课程,我们以后能更加认真,努力学习,团结互助,一使自己的知识更加全面。同时也感谢老师的帮助和教导!八、参考文献1Brian W.Kernighan,Dennis M.Ritchie.C程序设计语言M(第2版新版).徐宝文等译.北京:机械工业出版社.2王立柱.C/C+与数据结构(第3版)上册.北京:清华大学出版社,2008.3何钦铭,颜晖.C语言程序设计M.北京:高等教育出版社,2008.4谭浩强,张基温.C语言程序设计教程M.北京:高等教育出版社,2006.125FORD W,TOPP W.Data Structure with C+M(数据结构C+语言描述).刘卫东 沈官林译.北京:清华大学出版社,1998.6VVANDEVOORD D.JOSUTTIS N M.C+ TemplatesM.陈伟柱译.北京:人民邮电出版社,2004.7苏小红等.C语言大学实用教程(第2版)M.北京:电子工业出版社,2007.8MARK A W.Data Structures and Algorithm Analysis in C+M(第3版).张怀勇等译.北京:人民邮电出版社,2007.9秦军. 程序设计基础(C语言版).北京:机械工业出版社,2007.10夏涛.C语言程序设计M.北京:北京邮电大学出版社,2007.专心-专注-专业
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!