南京邮电大学门禁信息系统设计实验报告_第1页
南京邮电大学门禁信息系统设计实验报告_第2页
南京邮电大学门禁信息系统设计实验报告_第3页
南京邮电大学门禁信息系统设计实验报告_第4页
南京邮电大学门禁信息系统设计实验报告_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、程序设计报告( 2014 / 2015 学年 第 一 学期)题 目:门禁信息系统专 业 计算机科学与技术 组长 学号姓名 B13040505张娟_组员 学号姓名 B13040515冯奎 _B13040525李英杰_指 导 教 师 朱丹 指 导 单 位 南京邮电大学 日 期 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)保存数据:进行录入、删除、修改的操作后,自动将数据保存在文件in

4、fo_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 tim

5、e; /时间 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所示

8、。图14 排序函数四、源程序代码#include<stdio.h>#include<stdlib.h>#include<math.h>#include<time.h>#include<string.h>/main函数的实现、选择菜单和显示菜单的实现,结构体的定义由B13040505张娟 完成#define INSERT 1#define QUERYNAME 2#define QUERYNUM 3#define UPDATE 4#define DELETE&

9、#160;5#define COUNTIN_AND_OUT 6#define COUNTDEPART 7#define COUNTREASON 8#define SORT 9#define LIST 10#define QUIT 0FILE *fp;FILE *fp1;typedef struct    char name100;     

10、0;         /姓名    char credentials_type100;   /证件类型    char credentials_number100; /证件编号    char place100;         

11、     /出入点    char in_and_out_type100;    /出入类型    char reason100;             /事由    long int time;  

12、;             /    char depart100;             /接待人(部门)TX;struct Info            

13、;           /定义结构体用于保存排序后的信息long int time1;char name1100;char number1100;typedef struct Info Info;Info Info_2100;/定义变量完成程序所需操作TX mj100;/定义变量用于完成滞留时间排序的操作TX a100;TX b100;TX d100;int 

14、;last=0;                       /保存记录的数目void showMenu();                  /显示菜单void do

15、Choice(int choice);        /从终端输入操作指令int  getChoice();                 /获取操作指令void doQuit();          

16、60;         /退出程序void doInsert();                  /录入数据void doUpdate();              

17、;    /修改数据void doQueryname();               /按姓名查找void doQuerynum();                /按证件编号查找void doDelete();&#

18、160;                 /删除数据void countin_and_out();           /统计各出入点的出入次数void countdepart();          

19、;     /统计各部门的接待次数void countreason();               /按出入事由统计对应出入次数void sort();                   

20、;   /按滞留时间排序void init();int main(int argc,char *argv)    int choice;    init();    while(1)            showMenu();    &#

21、160;   choice=getChoice();        doChoice(choice);        system("pause>nul");        return 0;void printHead()/打印表头函数    

22、;printf("%s  %6s  %8s %6s %9s%6s%8s%16sn","姓名","证件类型","证件编号","出入点","出入类型","事由","时间","接待人部门");void init()    int i=0;    if(fp=fope

23、n("info_1.dat","rb")=NULL)/以读的方式打开文件            printf("不能打开文件,请检查"); /如果打开失败,提示信息,退出        exit(0);        last=0;  &#

24、160;     else            while(!feof(fp)/文件未结束时循环                    if(fread(&mji,sizeof(TX),1,fp)=1)/如果正确读入一个

25、数据块                            i+;                     

26、       last=i;        fclose(fp);/关闭文件void save()    int i=0;    if(fp=fopen("info_1.dat","wb")=NULL)/以写的方式打开文件       &#

27、160;    printf("不能打开,请检查!");        exit(0);        while(i<last)            fwrite(&mji,sizeof(TX),1,fp);/当前记录写入文件 &#

28、160;      i+;        fclose(fp);void showMenu()/菜单函数    system("cls");/清屏    printf("*门禁信息系统*n");    printf("t1.增加出入信息n");  &

29、#160; printf("t2.按姓名查找出入信息n");    printf("t3.按证件编号查找出入信息n");    printf("t4.修改出入信息n");    printf("t5.删除出入信息n");    printf("t6.按出入点统计出入信息n");    pr

30、intf("t7.按各部门统计出入信息n");    printf("t8.按出入事由统计出入信息n");    printf("t9.按滞留时间排序n");printf("t10,显示所有出入信息n");    printf("t0.退出系统n");    printf("=n");   

31、; printf("请输入你的选择(0-9):n");void doQuit()    printf("n再见!");    exit(0);/录入、修改、删除函数的实现由B13040515冯奎 完成void doInsert()/录入信息的实现    printf("姓名:");    scanf("%s",&mjla

32、);    printf("证件类型:");    scanf("%s",&mjlast.credentials_type);    printf("证件编号:");    scanf("%s",&mjlast.credentials_number);    printf("出入

33、点:");    scanf("%s",&mjlast.place);    printf("出入类型:");    scanf("%s",&mjlast.in_and_out_type);    printf("事由:");    scanf("%s",&mjla

34、st.reason);    printf("时间:");    scanf("%ld",&mjlast.time);    printf("接待人(部门):");    scanf("%s",&mjlast.depart);    printf("增加成功!n"); &#

35、160;  last+;    save();void doUpdate()/修改信息的实现    char tname100;long int ttime;    int i;    int find=0;    printf("请输入姓名:");    s

36、canf("%s",&tname);printf("请输入时间:");scanf("%ld",&ttime);    for(i=0;i<last&&!find;i+)            if(!strcmp(tname,)/比较字符串if(ttime=mji.time)find=1;printf("n请修改:

37、n");printf("姓名:");scanf("%s",&);printf("证件类型:");scanf("%s",&mji.credentials_type);printf("证件编号:");scanf("%s",&mji.credentials_number);printf("出入点:");scanf("%s",&mji.place);printf("出入类型:&

38、quot;);scanf("%s",&mji.in_and_out_type);printf("事由:");scanf("%s",&mji.reason);printf("时间:");scanf("%ld",&mji.time);printf("接待人(部门):");scanf("%s",&mji.depart);        if(!find

39、)            printf("抱歉,无此人");        else            printf("已成功修改!");    save();void doDelete

40、()/删除信息的实现    char tname100;    long int time;    int i;    int find=0;    int index;    printf("请输入姓名:");    scanf(&quo

41、t;%s",&tname);printf("请输入时间:");scanf("%ld",&time);    for(i=0;i<last&&!find;i+)            if(!(strcmp(tname,)        if(time=mj

42、i.time)find=1;index=i;break;                if(!find)            printf("抱歉,无此人");        else  

43、0;         for(i=index;i<=last;i+)                    strcpy(,mji+1.name);/后一个记录替换前一个记录         

44、60;  strcpy(mji.credentials_type,mji+1.credentials_type);            strcpy(mji.credentials_number,mji+1.credentials_number);            strcpy(mji.place,mji+1.place);

45、60;           strcpy(mji.in_and_out_type,mji+1.in_and_out_type);            strcpy(mji.reason,mji+1.reason);            mji.t

46、ime=mji+1.time;            strcpy(mji.depart,mji+1.depart);                last-;        printf("已成功删除!");

47、0;       save();    /查找、统计、排序函数的实现由B13040525 李英杰完成void doQueryname()/按姓名查询的实现    char tname100;    int i;    int find=0;    printf("请输入姓名:&q

48、uot;);    scanf("%s",&tname);    for(i=0;i<last;i+)/for循环查找字符串            if(!strcmp(tname,)        printf("你查询的信息如下:n");

49、0;   printHead();find=1;        printf("%st",);        printf("%st",mji.credentials_type);        printf("%st",mji.credentials_

50、number);        printf("%st",mji.place);        printf("%st",mji.in_and_out_type);        printf("%st",mji.reason);      

51、;  printf("%ldt",mji.time);        printf("%stn",mji.depart);                if(!find)          

52、0; printf("没有更多数据");    void doQuerynum()/按证件编号查询的实现    char tnum100;    int i;    int find=0;    printf("请输入证件编号:");    scanf("%s

53、",&tnum);    for(i=0;i<last;i+)            if(!strcmp(tnum,mji.credentials_number)         printf("你查询的信息如下:n");   printHead();find=1;

54、0;        printf("%st",);         printf("%st",mji.credentials_type);         printf("%st",mji.credentials_number);   

55、;      printf("%st",mji.place);         printf("%st",mji.in_and_out_type);         printf("%st",mji.reason);       

56、  printf("%ldt",mji.time);         printf("%stn",mji.depart);                if(!find)          

57、;  printf("没有更多数据");    int getChoice()/输入选择项    int choice;    scanf("%d",&choice);    return  choice;void countin_and_out()/统计出入点次数的实现    i

58、nt i=0;    int c4=0;    char south10 = "南门"    char north10 = "北门"    char west10 = "西门"    char east10 =

59、 "东门"    fp=fopen("info_1.dat","rb");    if(fp=0)        printf("不能打开文件,请检查");        exit(0);       

60、; else            while(fread(&mj,sizeof(TX),1,fp)=1)/读入文件                    if(strcmp(mj->place, south)=0) /比较字符串

61、60;                           c0+;                      

62、;  if(strcmp(mj->place, north)=0)                            c1+;             

63、;           if(strcmp(mj->place, west)=0)                            c2+;    

64、                    if(strcmp(mj->place, east)=0)                        

65、;    c3+;                            printf("南门次数:%d,北门次数: %d,西门次数:%d,东门次数:%d", c0, c1, c2 ,c3); 

66、60;      fclose(fp);void countdepart()/统计部门接待次数的实现    int i=0;    int c4=0;    char part110 = "部门1"    char part210 = "部门2"&#

67、160;   char part310 = "部门3"    char part410 = "部门4"    fp=fopen("info_1.dat","rb");    if(fp=0)        printf("

68、;不能打开文件,请检查");        exit(0);        else            while(fread(&mj,sizeof(TX),1,fp)=1)/读入文件         

69、60;          if(strcmp(mj->depart, part1)=0) /比较字符串                            c0+;  &#

70、160;                     if(strcmp(mj->depart, part2)=0)                      

71、;      c1+;                        if(strcmp(mj->depart, part3)=0)            

72、0;               c2+;                        if(strcmp(mj->depart, part4)=0)   

73、60;                        c3+;                         

74、;   printf("部门1次数:%d,部门2次数: %d,部门3次数:%d,部门4次数:%d", c0, c1, c2 ,c3);        fclose(fp);void countreason() /统计事由次数的实现    int i=0;    int c4=0; 

75、0;  char work10 = "工作"    char visit10 = "访问"    char study10 = "学习"    char other10 = "其他"    fp=fopen("

76、info_1.dat","rb");    if(fp=0)            printf("不能打开文件,请检查");        exit(0);        else    

77、        while(fread(&mj,sizeof(TX),1,fp)=1)             if(strcmp(mj->reason,work)=0)                 c

78、0+;                        if(strcmp(mj->reason, visit)=0)                 c1+; &#

79、160;                      if(strcmp(mj->reason, study)=0)                 c2+;   &

80、#160;                    if(strcmp(mj->reason, other)=0)                 c3+;     

81、                       printf("工作次数:%d,访问次数: %d,学习次数:%d,其他次数:%d", c0, c1, c2 ,c3);        fclose(fp);void 

82、;list() /在终端显示信息int i=0;printHead();    for(i;i<last;i+)printf("%3s    %4s    %8s %6s %9s   %3s   %10ld  %5sn",,mji.credentials_type,mji.credentials_number,mji

83、.place ,mji.in_and_out_type,mji.reason,mji.time ,mji.depart);/关闭文件void sort()int i=0,j,k=0,m,n,index,t,x,y;struct tm time_cha;    time_t t1,t2;    int year, month, day,hour,min,sec=0;fp=fopen("info_1.dat&q

84、uot;,"rb");for(i=0;i<last-1;i+)for(j=i+1;j<last;j+)if(!strcmp(,)ak.time=mji.time;bk.time=mjj.time;strcpy(,);strcpy(,);strcpy(ak.credentials_number,mji.credentials_number);strcpy(bk.credentials_number,mjj.credentials_number);k+;for(n=0;n&l

85、t;k;n+)    year=an.time /100000000+2000;        month=an.time /1000000%100;        day=an.time /10000%100;        hour=an.time /100%100;

86、0;       min=an.time %100;        time_cha.tm_year = year - 1900;  /tm结构记录年为实际-1900        time_cha.tm_mon  = month - 1; 

87、;       time_cha.tm_mday = day;        time_cha.tm_hour = hour;        time_cha.tm_min  = min;        time_cha

88、.tm_sec  = sec;        t1 = mktime(&time_cha);/获得从1970年1月1日0时0分0秒以来过去的时间,秒        year=bn.time /100000000+2000;        month=bn.time /1000000

89、%100;        day=bn.time /10000%100;        day=bn.time /10000%100;        hour=bn.time /100%100;        min=bn.time %10

90、0;        time_cha.tm_year = year - 1900;  /tm结构记录年为实际-1900        time_cha.tm_mon  = month - 1;        time_cha.tm_mday 

91、;= day;        time_cha.tm_hour = hour;        time_cha.tm_min  = min;        time_cha.tm_sec  = sec;     

92、0;  t2 = mktime(&time_cha);        strcpy(,);        strcpy(dn.credentials_number,an.credentials_number);        dn.time =t2-t1;for(x=0;x

93、<n-1;x+)index=x;for(y=x+1;y<n;y+)if(dy.time<dindex.time)index=y;if(index!=x)    /滞留时间排序t=dindex.time dindex.time=dx.time;dx.time=t;/按滞留时间交换姓名strcpy( ,);strcpy(,);strcpy(,);/按滞留时间交换证件编号strcpy(d100.credentials

94、_number,dx.credentials_number );strcpy(dx.credentials_number,dindex.credentials_number);strcpy(dindex.credentials_number,d100.credentials_number);for(y=0;y<n;y+)printf("滞留时间:%d s,姓名:%s,编号:%sn",dy.time,,dy.credentials_number);/将排序后的滞留时间、姓名、证件编号保存在info_2中Info_2y.time1

95、0;= dy.time;strcpy(Info_21,);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);/当前记录写入文件    f

96、close(fp);void doChoice(int choice)    printf("正在处理第%d个选择!n",choice);    switch(choice)            case INSERT:          

97、0; doInsert();            break;        case QUERYNAME:            doQueryname();        &

98、#160;   break;        case QUERYNUM:            doQuerynum();            break;       

99、; case UPDATE:            doUpdate();            break;        case DELETE:        &#

100、160;   doDelete();            break;        case COUNTIN_AND_OUT:            countin_and_out();            break;        case COUNTDEPART:            countdepart();  &

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论