版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)磚建材批發(fā)零售協(xié)議2024年版版
- 個性化2024勞務(wù)協(xié)議范本無償提供版B版
- 2025年度叉車租賃與安全風(fēng)險評估合同4篇
- 2025年度新能源汽車零部件集成供應(yīng)合同4篇
- 2025年蔬菜種植基地與餐飲企業(yè)采購合同3篇
- 二零二五版房地產(chǎn)土地使用權(quán)租賃與轉(zhuǎn)讓綜合協(xié)議3篇
- 第10課 遼夏金元的統(tǒng)治 說課稿-2023-2024學(xué)年統(tǒng)編版(2019)高中歷史必修中外歷史綱要上冊
- 2025年度約定不生育子女的婚姻解除協(xié)議書3篇
- 《竇娥冤》《雷雨》《哈姆萊特》聯(lián)讀說課稿 2023-2024學(xué)年統(tǒng)編版高中語文必修下冊
- 2024年還建房轉(zhuǎn)讓合同法律保護(hù)問題探討
- 【公開課】同一直線上二力的合成+課件+2024-2025學(xué)年+人教版(2024)初中物理八年級下冊+
- 高職組全國職業(yè)院校技能大賽(嬰幼兒照護(hù)賽項)備賽試題庫(含答案)
- 2024年公安部直屬事業(yè)單位招聘筆試參考題庫附帶答案詳解
- NB-T 47013.15-2021 承壓設(shè)備無損檢測 第15部分:相控陣超聲檢測
- 裝飾工程施工技術(shù)ppt課件(完整版)
- SJG 05-2020 基坑支護(hù)技術(shù)標(biāo)準(zhǔn)-高清現(xiàn)行
- 汽車維修價格表
- 10KV供配電工程施工組織設(shè)計
- 終端攔截攻略
- 藥物外滲處理及預(yù)防【病房護(hù)士安全警示教育培訓(xùn)課件】--ppt課件
評論
0/150
提交評論