南京郵電大學(xué)門禁信息系統(tǒng)設(shè)計實驗報告_第1頁
南京郵電大學(xué)門禁信息系統(tǒng)設(shè)計實驗報告_第2頁
南京郵電大學(xué)門禁信息系統(tǒng)設(shè)計實驗報告_第3頁
南京郵電大學(xué)門禁信息系統(tǒng)設(shè)計實驗報告_第4頁
南京郵電大學(xué)門禁信息系統(tǒng)設(shè)計實驗報告_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、程序設(shè)計報告( 2014 / 2015 學(xué)年 第 一 學(xué)期)題 目:門禁信息系統(tǒng)專 業(yè) 計算機(jī)科學(xué)與技術(shù) 組長 學(xué)號姓名 B13040505張娟_組員 學(xué)號姓名 B13040515馮奎 _B13040525李英杰_指 導(dǎo) 教 師 朱丹 指 導(dǎo) 單 位 南京郵電大學(xué) 日 期 2014 年 11 月20 日 成員分工組長(張娟)main函數(shù)的實現(xiàn)、選擇菜單和顯示菜單的實現(xiàn)組員(馮奎)結(jié)構(gòu)體的定義及主要函數(shù)(包括錄入、修改、刪除)的實現(xiàn)組員(李英杰)查找、統(tǒng)計、排序函數(shù)的實現(xiàn)評分細(xì)則評分項優(yōu)秀良好中等差遵守機(jī)房規(guī)章制度上機(jī)時的表現(xiàn)學(xué)習(xí)態(tài)度程序準(zhǔn)備情況程序設(shè)計能力團(tuán)隊合作精神課題功能實現(xiàn)情況算法設(shè)計合

2、理性用戶界面設(shè)計報告書寫認(rèn)真程度內(nèi)容詳實程度文字表達(dá)熟練程度回答問題準(zhǔn)確度簡短評語教師簽名:年月日評分等級備注評分等級共五種:優(yōu)秀、良好、中等、及格、不及格門禁信息系統(tǒng)一、 課題內(nèi)容和要求課題內(nèi)容:門禁信息系統(tǒng)是一個用來統(tǒng)計人員出入情況的程序。信息結(jié)構(gòu)包括出入人員的姓名、證件類型、證件編號、負(fù)責(zé)接待出入人員的接待人(部門)、出入人員的進(jìn)出時間、出入事由等。通過此課題,熟練掌握數(shù)組、字符串、函數(shù)的調(diào)用和文件的處理等。程序要求:1 能錄入,刪除,修改,保存文件info_1中數(shù)據(jù)2 能分別按姓名,證件編號查詢出入信息3 統(tǒng)計各出入點的出入信息4 統(tǒng)計各部門的接待次數(shù)5 按出入事由統(tǒng)計對應(yīng)出入次數(shù)6

3、按總滯留時間排序,并顯示對應(yīng)姓名證件編號,結(jié)果存入單獨文件info_2二、 需求分析門禁信息系統(tǒng)的功能框架圖如圖1所示。錄入刪除修改保存查詢統(tǒng)計排序門禁信息系統(tǒng)圖1 功能框架圖(1)提供可操作的主菜單:輸出菜單,用于顯示以從文件中加載的總客戶信息和若干個可選的功能選項。根據(jù)客戶輸入的選項來運行不同的功能,運行不同的函數(shù)。(2)數(shù)據(jù)的錄入:從終端獲取信息,并將其寫入文件info_1中。(3)數(shù)據(jù)的刪除:從終端獲取操作信息,刪除info_1中與命令對應(yīng)的數(shù)據(jù)。(4)數(shù)據(jù)的修改:從終端獲取指令,修改info_1中與命令對應(yīng)的數(shù)據(jù)。(5)保存數(shù)據(jù):進(jìn)行錄入、刪除、修改的操作后,自動將數(shù)據(jù)保存在文件in

4、fo_1中。(6)查找功能:提供兩種類型的查找方式,即按姓名查找和按證件編號查找。(7)統(tǒng)計數(shù)據(jù):能夠分別按照出入點、接待人(部門)、出入事由進(jìn)行數(shù)據(jù)的統(tǒng)計。(8)排序功能:根據(jù)進(jìn)出人員的出入時間差進(jìn)行排序。三、概要設(shè)計1、 主要結(jié)構(gòu)體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 /定義結(jié)構(gòu)Info long int time1;char name1100;char number1100;typedef struct Info Info;Info Info_2100; /定義結(jié)構(gòu)數(shù)組,用于存儲排序后的時間,姓名,證件編號TX mj100; /定義結(jié)構(gòu)數(shù)組,存儲錄入的記錄TX a100; /定義結(jié)構(gòu)數(shù)組,存儲進(jìn)入記錄TX b100; /定義結(jié)構(gòu)數(shù)組,存儲出去記錄TX d100; /定義結(jié)構(gòu)數(shù)組,存儲只留時間差 int last=0; /初始化記錄數(shù)為02、主要函數(shù)流程圖(1)主函數(shù)

6、:調(diào)用其他函數(shù)實現(xiàn)程序功能,主函數(shù)流程圖如圖2所示。圖2 主函數(shù)(2)錄入函數(shù):輸入記錄并保存到文件中,,錄入函數(shù)流程圖如圖3所示。圖3 錄入函數(shù)(3)裝載函數(shù):用于從dat文件中載入信息,裝載函數(shù)流程圖如圖4所示。圖4 裝載函數(shù)(4)保存函數(shù):把當(dāng)前記錄寫入到文件中,流程圖如圖5所示。圖5 保存函數(shù)(5)菜單函數(shù):顯示所有菜單信息,流程圖如圖6所示。圖6 菜單函數(shù)(6)修改函數(shù):利用輸入的姓名時間找到需要修改的信息,再修改出入人員的個人信息,流程圖如圖7所示。圖7 修改函數(shù)(7)刪除函數(shù):利用輸入的姓名時間找到需要刪除的信息,再刪除出入人員的個人信息,流程圖如圖8所示。圖8刪除函數(shù)(8)按姓

7、名查詢函數(shù):利用輸入的姓名進(jìn)行順序查找并將找到的信息輸出,流程圖如圖9所示。圖9 按姓名查詢函數(shù)(9)按證件編號查詢函數(shù):利用用戶輸入的證件編號進(jìn)行順序查找并將找到的客戶信息輸出,流程圖如圖10所示。圖10 按證件編號查詢函數(shù)(10)統(tǒng)計出入點次數(shù)函數(shù):統(tǒng)計記錄中東南西北4個門的出入次數(shù),流程圖如圖11所示。圖11 統(tǒng)計出入點次數(shù)函數(shù)(11)統(tǒng)計部門接待次數(shù)函數(shù):統(tǒng)計記錄中4個部門接待的次數(shù),流程圖如圖12所示。圖12 統(tǒng)計部門接待次數(shù)函數(shù)(12)統(tǒng)計事由次數(shù)函數(shù):統(tǒng)計記錄中4個事由次數(shù),流程圖如圖13所示。圖13 統(tǒng)計事由次數(shù)函數(shù)(13)排序函數(shù):先計算中人員的滯留時間差,流程圖如圖14所示

8、。圖14 排序函數(shù)四、源程序代碼#include<stdio.h>#include<stdlib.h>#include<math.h>#include<time.h>#include<string.h>/main函數(shù)的實現(xiàn)、選擇菜單和顯示菜單的實現(xiàn),結(jié)構(gòu)體的定義由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、;           /定義結(jié)構(gòu)體用于保存排序后的信息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;                       /保存記錄的數(shù)目void showMenu();                  /顯示菜單void do

15、Choice(int choice);        /從終端輸入操作指令int  getChoice();                 /獲取操作指令void doQuit();          

16、60;         /退出程序void doInsert();                  /錄入數(shù)據(jù)void doUpdate();              

17、;    /修改數(shù)據(jù)void doQueryname();               /按姓名查找void doQuerynum();                /按證件編號查找void doDelete();&#

18、160;                 /刪除數(shù)據(jù)void countin_and_out();           /統(tǒng)計各出入點的出入次數(shù)void countdepart();          

19、;     /統(tǒng)計各部門的接待次數(shù)void countreason();               /按出入事由統(tǒng)計對應(yīng)出入次數(shù)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()/打印表頭函數(shù)    

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)/文件未結(jié)束時循環(huán)                    if(fread(&mji,sizeof(TX),1,fp)=1)/如果正確讀入一個

25、數(shù)據(jù)塊                            i+;                     

26、       last=i;        fclose(fp);/關(guān)閉文件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);/當(dāng)前記錄寫入文件 &#

28、160;      i+;        fclose(fp);void showMenu()/菜單函數(shù)    system("cls");/清屏    printf("*門禁信息系統(tǒng)*n");    printf("t1.增加出入信息n");  &

29、#160; printf("t2.按姓名查找出入信息n");    printf("t3.按證件編號查找出入信息n");    printf("t4.修改出入信息n");    printf("t5.刪除出入信息n");    printf("t6.按出入點統(tǒng)計出入信息n");    pr

30、intf("t7.按各部門統(tǒng)計出入信息n");    printf("t8.按出入事由統(tǒng)計出入信息n");    printf("t9.按滯留時間排序n");printf("t10,顯示所有出入信息n");    printf("t0.退出系統(tǒng)n");    printf("=n");   

31、; printf("請輸入你的選擇(0-9):n");void doQuit()    printf("n再見!");    exit(0);/錄入、修改、刪除函數(shù)的實現(xiàn)由B13040515馮奎 完成void doInsert()/錄入信息的實現(xiàn)    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()/修改信息的實現(xiàn)    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、()/刪除信息的實現(xiàn)    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();    /查找、統(tǒng)計、排序函數(shù)的實現(xiàn)由B13040525 李英杰完成void doQueryname()/按姓名查詢的實現(xiàn)    char tname100;    int i;    int find=0;    printf("請輸入姓名:&q

48、uot;);    scanf("%s",&tname);    for(i=0;i<last;i+)/for循環(huán)查找字符串            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("沒有更多數(shù)據(jù)");    void doQuerynum()/按證件編號查詢的實現(xiàn)    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("沒有更多數(shù)據(jù)");    int getChoice()/輸入選擇項    int choice;    scanf("%d",&choice);    return  choice;void countin_and_out()/統(tǒng)計出入點次數(shù)的實現(xiàn)    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("南門次數(shù):%d,北門次數(shù): %d,西門次數(shù):%d,東門次數(shù):%d", c0, c1, c2 ,c3); 

66、60;      fclose(fp);void countdepart()/統(tǒng)計部門接待次數(shù)的實現(xiàn)    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次數(shù):%d,部門2次數(shù): %d,部門3次數(shù):%d,部門4次數(shù):%d", c0, c1, c2 ,c3);        fclose(fp);void countreason() /統(tǒng)計事由次數(shù)的實現(xiàn)    int i=0;    int c4=0; 

75、0;  char work10 = "工作"    char visit10 = "訪問"    char study10 = "學(xué)習(xí)"    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("工作次數(shù):%d,訪問次數(shù): %d,學(xué)習(xí)次數(shù):%d,其他次數(shù):%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);/關(guān)閉文件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結(jié)構(gòu)記錄年為實際-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結(jié)構(gòu)記錄年為實際-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);/當(dāng)前記錄寫入文件    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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論