




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、沈 陽 航 空 工 業(yè) 學(xué) 院 課程設(shè)計學(xué) 號 200604021035班 級 6402101 姓 名 趙晨指導(dǎo)教師 王曉巖2007年 9 月 20 日沈陽航空工業(yè)學(xué)院課程設(shè)計任務(wù)書院系:電子 專業(yè):電子信息工程 班級:6402101學(xué)號:200604021035 題目:會議簽到系統(tǒng)一、課程設(shè)計時間2007年9月10日至2007年9月14日,共計1周,20學(xué)時。二、課程設(shè)計內(nèi)容用C語言編寫軟件完成以下任務(wù):(1)數(shù)據(jù)信息(參加會議人員代號,姓名,性別,工作單位,職務(wù),聯(lián)系方式,是否簽到等)保存在meeting.dat文件中。(2)簽到。(3)按工作單位將數(shù)據(jù)信息排序。(4)統(tǒng)計實際參加會議的人
2、數(shù)和缺席的人數(shù)。三、課程設(shè)計要求1. 程序質(zhì)量:² 貫徹結(jié)構(gòu)化的程序設(shè)計思想。² 用戶界面友好,功能明確,操作方便。² 用戶界面中的菜單至少應(yīng)包括“名單錄入”、“人員簽到”、“數(shù)據(jù)排序”、“統(tǒng)計參加和缺席人數(shù)”、“退出”5項,所有數(shù)據(jù)的改變都應(yīng)該在相關(guān)文件中有所體現(xiàn)。² 代碼應(yīng)適當縮進,并給出必要的注釋,以增強程序的可讀性。2. 課程設(shè)計說明書:課程結(jié)束后,上交課程設(shè)計說明書和源程序。課程設(shè)計說明書的格式和內(nèi)容參見提供的模板。四、指導(dǎo)教師和學(xué)生簽字指導(dǎo)教師:_ 學(xué)生簽名:_五、說明書成績六、教師評語沈 陽 航 院 設(shè) 計 用 紙目錄一、需求分析1二、程序
3、流程圖2三、核心技術(shù)的實現(xiàn)說明及相應(yīng)程序段9四、個人總結(jié)15五、參考文獻15六、源程序1621一、需求分析經(jīng)過對程序設(shè)計題目的分析可知,整個程序的設(shè)計實現(xiàn)大致分為三個模塊,其中每一個模塊對應(yīng)一個函數(shù),他們的功能分別是:錄入?yún)⒓訒h人員信息數(shù)據(jù)函數(shù)(add),人員簽到數(shù)據(jù)函數(shù)(signin),排序函數(shù)(compositor)。在這些函數(shù)當中,錄入信息和排序函數(shù)的實現(xiàn)嚴格按照題目的要求,而簽到和統(tǒng)計參加人數(shù)和缺席人數(shù)都放到了函數(shù)(signin)里。1、錄入?yún)⒓訒h人員信息數(shù)據(jù)函數(shù) 主要實現(xiàn)程序最初運行時參加會議人員信息數(shù)據(jù)的錄入以及其后的運行中人員數(shù)據(jù)的追加功能;2、人員簽到數(shù)據(jù)函數(shù) 實現(xiàn)的功能是
4、按照參加會議人員的代號對人員進行簽到,并對簽到人員進行標記,最后統(tǒng)計并輸出參加人數(shù)和缺席人數(shù)。3、排序函數(shù) 實現(xiàn)的功能是按照人員代號的增序顯示。 除上面介紹的功能之外,程序還具有退出功能,可以在程序運行完畢后選擇退出。每一個參加會議人員信息都包含參加會議人員代號,姓名,性別,工作單位,職務(wù),聯(lián)系方式,是否簽到,在程序當中,將人員信息類型定義為結(jié)構(gòu)體類型,添加以及追加的人員信息直接寫入D盤的meeting.dat文件中,其他函數(shù)每次對人員記錄的訪問,其數(shù)據(jù)來源都是meeting.dat文件,這樣做不但可以保證人員數(shù)據(jù)的一致性,而且可以對人員數(shù)據(jù)進行永久保存,保證每次運行程序都可以采用原來的數(shù)據(jù)。
5、二、程序流程圖1、程序總體結(jié)構(gòu)圖2、具體功能框圖(1)錄入人員數(shù)據(jù)函數(shù)add開始定義文件指針定義頭指針鏈表信息存入文件輸入信息到鏈表結(jié)束圖2 錄入人員數(shù)據(jù)函數(shù)(2)人員簽到函數(shù)signin開始定義變量初值,文件指針,鏈表指針能否打開文件輸出不能打開文件結(jié)束否feof(f1)是將文件中的信息讀入鏈表釋放P指針否關(guān)閉f1文件 a=0輸出:請員工輸入序號簽到,輸入0時結(jié)束簽到否是是輸入%d是M是否為空否i+輸出結(jié)束簽到,人員出勤結(jié)果如下輸出應(yīng)到%d人,實到%d人,缺席%d人,j,i,j-i結(jié)束圖3人員簽到函數(shù)3)按代號排序函數(shù)compositor開始定義文件指針,鏈表指針能否打開文件 meeting
6、1.dat!feof(f1)定義指針n輸出:不能打開文件輸出:不能打開文件將信息輸入鏈表釋放指針r=top結(jié)束結(jié)束能否打開文件 meeting2.datP是否為零否能否能否是是否否r指針內(nèi)容小于p內(nèi)容且r!=p是r=r->nextr!=p否是q=p;p=p0否r=topq->next=r;r0->next=q是q->next=top;top=qp0=p;p=p->nextp=NULL;p=top,否P不為空是輸出鏈表中的信息關(guān)閉文件f1,f2結(jié)束圖4按代號排序函數(shù)三、核心技術(shù)的實現(xiàn)說明及相應(yīng)程序段本程序主要由三個自定義函數(shù)和一個主函數(shù)組成,其中主函數(shù)以菜單的形式調(diào)
7、用其他函數(shù)來實現(xiàn)要求的所有功能。在這些函數(shù)當中,錄入數(shù)據(jù)函數(shù)、簽到函數(shù)和排序函數(shù)是程序中較為核心的部分,下面分別進行說明。1、錄入數(shù)據(jù)函數(shù)錄入數(shù)據(jù)分為兩種情況,其一是在會議文件(meeting.dat)不存在的情況下,首先由程序創(chuàng)建一個新文件,并將錄入的人員信息寫入該文件當中;其二是在會議文件(meeting.dat)已經(jīng)存在的情況下,此時文件要以讀寫方式或追加的方式打開,這樣才可以保證以前已經(jīng)存在的數(shù)據(jù)不丟失。具體的程序段如下:void add() /*錄入員工信息子函數(shù)*/FILE *f1;finger top=NULL,p=NULL,t=NULL;p=(finger)malloc(siz
8、eof(message);top=p;while(1)printf("n請輸入員工信息,輸入0時結(jié)束錄入");scanf("%d%s%s%s%s%d",&p->number,p->name,p->sex,p->workplace,p->job,&p->tel);/*分部分輸入*/ p->flag=0;if(p->number=0)free(p);t->next=NULL;break;t=p;p=(finger)malloc(sizeof(message);t->next=p; p
9、=NULL; if(f1=fopen("D:meeting.dat","w")=NULL) /*把鏈表中信息存入文件*/ printf("不能創(chuàng)建文件!"); exit(0); p=top; while(p!=NULL) fprintf(f1,"%d %s %s %s %s %dn",p->number,p->name,p->sex,p->workplace,p->job,p->tel); p=p->next; 2、人員簽到函數(shù)該函數(shù)的核心內(nèi)容是人員簽到和統(tǒng)計參加人數(shù)和缺席
10、人數(shù)。該函數(shù)執(zhí)行時,首先把meeting.dat文件中信息讀入鏈表,并由用戶輸入人員代號,而后按0結(jié)束簽到。如果文件中存在該人員的數(shù)據(jù),則進行標記,否則不標記。這時被標記的為1,未被標記的為0,最后統(tǒng)計出參加人數(shù)和缺席人數(shù),具體程序段如下:void signin() /*簽到,標記*/int a=1,i=0,j=0;FILE *f1;finger m=NULL,p=NULL,t=NULL,top=NULL;if(f1=fopen("D:meeting.dat","r")=NULL) /*把文件中信息讀入鏈表*/printf("不能打開文件mee
11、ting.dat!");exit(0);p=(finger)malloc(sizeof(message);top=p;while(!feof(f1)fscanf(f1,"%d%s%s%s%s%dn",&p->number,p->name,p->sex,p->workplace,p->job,&p->tel);p->flag=0;t=p;p=(finger)malloc(sizeof(message);t->next=p;free(p);t->next=NULL;fclose(f1);m=top;
12、while(a!=0) /*簽到*/printf("請員工輸入序號簽到,輸入0時結(jié)束簽到"); scanf("%d",&a);while(m!=NULL)if(m->number=a)m->flag=1;i+;m=m->next;j+;printf("結(jié)束簽到,人員出勤結(jié)果如下:n");printf("應(yīng)到%d人,實到%d人,缺勤%d人n",j,i,j-i);3、按代號排序函數(shù)對于代號的排序采用的排序算法是鏈表插入法,首先讀取文件meeting.dat信息,在創(chuàng)建meeting2.dat文
13、件,以便保存排序后的信息,該程序的實現(xiàn)主要是把指針變量插入到各個結(jié)點,進行比較,最終實現(xiàn)按代號的升序排列。具體的程序段如下:void compositor() /*排序*/FILE *f1; FILE *f2;finger m=NULL,n=NULL,t=NULL,top=NULL,p,p0,r,r0,q;if(f1=fopen("D:meeting.dat","r")=NULL) /*讀取文件meeting.dat信息*/printf("不能打開文件meeting.dat!");exit(0); if(f2=fopen("
14、D:meeting2.dat","w")=NULL) /*創(chuàng)建meeting2.dat文件*/printf("不能創(chuàng)建文件meeting2.dat!");exit(0);n=(finger)malloc(sizeof(message);top=n;while(!feof(f1) /*排序*/fscanf(f1,"%d%s%s%s%s%dn",&n->number,n->name,n->sex,n->workplace,n->job,&n->tel);n->flag=0
15、;t=n;n=(finger)malloc(sizeof(message);t->next=n;free(n); /*/t->next=NULL;p0=NULL;p=top;while(p!=NULL)r=top;while(r->number<p->number)&&(r!=p)r0=r;r=r->next;if(r!=p)q=p;p0->next=p->next;p=p0;if(r=top)q->next=top;top=q; elseq->next=r;r0->next=q;p0=p;p=p->nex
16、t;p=NULL; p=top; while(p!=NULL) /*將排序后信息寫入文件meeting2.dat*/ fprintf(f2,"%d %s %s %s %s %dn",p->number,p->name,p->sex,p->workplace,p->job,p->tel); printf("%d %s %s %s %s %dn",p->number,p->name,p->sex,p->workplace,p->job,p->tel); p=p->next;fclo
17、se(f1); fclose(f2);四、個人總結(jié)一周的課程設(shè)計使我更一深層次地學(xué)習(xí)了C語言,了解了C語言,曾經(jīng)課本沒有認真地閱讀,現(xiàn)在通過這門課程,使我不僅認真地看,反復(fù)地看,而且還仔細地研究了一翻,補上了以前學(xué)習(xí)的漏洞,剛開始時認為這門課程很難,但是經(jīng)過了一翻研究和與老師和其他同學(xué)的溝通,一些問題還是解決了,但可以說這門課程還是有難度的,所以以后還要加強對這方面知識的學(xué)習(xí),掌握好這門課程對我以后的專業(yè)也有很大的好處。程序大體上完成了課程的要求,但還是有些毛病不能解決,主函數(shù)不是總是循環(huán)的結(jié)構(gòu),如果改成這種結(jié)構(gòu),簽到和排序都出問題,也許問題出現(xiàn)在我程序的各個部分都是我在書上找的,然后拼接在一
18、起的,各個部分的連貫性不好,導(dǎo)致改后出錯。五、參考文獻1 譚浩強C程序設(shè)計北京:清華大學(xué)出版社,20052 劉成等C語言程序設(shè)計實驗指導(dǎo)與習(xí)題集北京:中國鐵道出版社,2006六、源程序#include <stdlib.h>#include <malloc.h>#include <stdio.h>#include <string.h>#include <math.h>typedef struct message /*定義數(shù)據(jù)結(jié)構(gòu)*/long int number;char name10;char sex3;char workplace2
19、0;char job5;long int tel;int flag;struct message *next;*finger; /*指向結(jié)構(gòu)體的指針*/void menu() /*屏幕輸出菜單*/printf("*n");printf("*1.錄入員工信息 *n");printf("*2.在此簽到,并輸出人員簽到結(jié)果 *n");printf("*3.排序 *n");printf("*4.退出 *n");printf("*n");void add() /*錄入員工信息子函數(shù)*/
20、FILE *f1;finger top=NULL,p=NULL,t=NULL;p=(finger)malloc(sizeof(message);top=p;while(1)printf("n請輸入員工信息,輸入0時結(jié)束錄入");scanf("%d%s%s%s%s%d",&p->number,p->name,p->sex,p->workplace,p->job,&p->tel);/*分部分輸入*/ p->flag=0;if(p->number=0)free(p);t->next=NULL
21、;break;t=p;p=(finger)malloc(sizeof(message);t->next=p; p=NULL; if(f1=fopen("D:meeting.dat","w")=NULL) /*把鏈表中信息存入文件*/ printf("不能創(chuàng)建文件!"); exit(0); p=top; while(p!=NULL) fprintf(f1,"%d %s %s %s %s %dn",p->number,p->name,p->sex,p->workplace,p->jo
22、b,p->tel); p=p->next; void signin() /*簽到,標記*/int a=1,i=0,j=0;FILE *f1;finger m=NULL,p=NULL,t=NULL,top=NULL;if(f1=fopen("D:meeting.dat","r")=NULL) /*把文件中信息讀入鏈表*/printf("不能打開文件meeting.dat!");exit(0);p=(finger)malloc(sizeof(message);top=p;while(!feof(f1)fscanf(f1,&qu
23、ot;%d%s%s%s%s%dn",&p->number,p->name,p->sex,p->workplace,p->job,&p->tel);p->flag=0;t=p;p=(finger)malloc(sizeof(message);t->next=p;free(p);t->next=NULL;fclose(f1);m=top;while(a!=0) /*簽到*/printf("請員工輸入序號簽到,輸入0時結(jié)束簽到"); scanf("%d",&a);while
24、(m!=NULL)if(m->number=a)m->flag=1;i+;m=m->next;j+;printf("結(jié)束簽到,人員出勤結(jié)果如下:n");printf("應(yīng)到%d人,實到%d人,缺勤%d人n",j,i,j-i);void compositor() /*排序*/FILE *f1; FILE *f2;finger m=NULL,n=NULL,t=NULL,top=NULL,p,p0,r,r0,q;if(f1=fopen("D:meeting.dat","r")=NULL) /*讀取文件m
25、eeting.dat信息*/printf("不能打開文件meeting.dat!");exit(0); if(f2=fopen("D:meeting2.dat","w")=NULL) /*創(chuàng)建meeting2.dat文件*/printf("不能創(chuàng)建文件meeting2.dat!");exit(0);n=(finger)malloc(sizeof(message);top=n;while(!feof(f1) /*排序*/fscanf(f1,"%d%s%s%s%s%dn",&n->number,n->name,n->sex,n->workplace,n->job,&n->tel);n
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)店代運營合同模板
- 智慧城市面試題及答案
- 掌握2024年園藝師考試新思路與技巧試題及答案
- 實戰(zhàn)經(jīng)驗2024年農(nóng)藝師考試試題及答案
- 2024年農(nóng)業(yè)職業(yè)經(jīng)理人考試學(xué)習(xí)路徑選擇試題及答案
- 社工面試題目結(jié)構(gòu)及答案
- 農(nóng)業(yè)職業(yè)經(jīng)理人考試復(fù)習(xí)資料選擇與獲取建議試題及答案
- 突破知識邊界福建事業(yè)單位考試試題及答案
- 2024年花藝師面試準備試題及答案
- 園藝師技能操作考試準備試題及答案
- 重慶市2025屆高三3月適應(yīng)性月考語文試卷及參考答案
- T-CECS 10390-2024 建筑幕墻用背栓
- 國旗下講話第三周校長講話稿:以習(xí)慣鑄舟楫 以品格揚云帆-讓成長在堅守中綻放華章
- 三門峽水庫實習(xí)報告
- 文化產(chǎn)業(yè)項目風(fēng)險管理及應(yīng)對措施
- 民用無人機操控員執(zhí)照(CAAC)考試復(fù)習(xí)重點題庫500題(含答案)
- 2023年小學(xué)科學(xué)實驗知識競賽試題庫含答案
- 價值共創(chuàng)理論形成路徑探析與未來研究展望
- 破釜沉舟成語故事課件全
- 《實驗室生物安全》課件
- 技術(shù)總監(jiān)聘用合同協(xié)議書(2025年)
評論
0/150
提交評論