




已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告設(shè)計題目: 學生宿舍管理系統(tǒng) 學 院:年級專業(yè): 姓 名:學 號: 指導老師: 1.設(shè)計目的宿舍對于大學生在校生活來說相當于家的存在,而宿舍管理又是學校后勤管理的重要環(huán)節(jié),如何直觀的了解宿舍的入住情況和每位同學的住宿位置是提高工作效率的重要課題,根據(jù)我們所學的C語言和數(shù)據(jù)結(jié)構(gòu)課程中有關(guān)鏈表及外部文件的內(nèi)容,為后勤管理人員編寫宿舍管理查詢軟件, 就可以輕松滿足實現(xiàn)上述需求。通過實際課題設(shè)計,可以對我們加深書本知識理解,了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計方法,培養(yǎng)獨立分析和設(shè)計能力,掌握軟件開發(fā)過程的基本方法和技能,對我們的個人素質(zhì)提高大有脾益。2.需求分析2.1性能分析宿舍一般由若干學生入駐,每個宿舍都有獨立唯一的編號,入住學生也有唯一的學號,另外添加學生的姓名和班級,使用這些關(guān)鍵字就可以方便的查詢和管理宿舍入住情況。程序設(shè)計應采用交互工作方式,并建立數(shù)據(jù)文件。程序應通過建立子函數(shù)實現(xiàn)創(chuàng)建、保存與載入數(shù)據(jù)文件,查找、添加、刪除、更改、顯示等功能,可以自動保存修改。應具有友好的界面和較強的容錯能力。能夠迅速準確地完成各種學生信息的統(tǒng)計和查詢,以方便管理員對學生信息的統(tǒng)一管理。2.2功能分析為方便管理員對系統(tǒng)進行操作,程序應具有以下功能:(1)創(chuàng)建宿舍數(shù)據(jù)文件,并提示管理員輸入學生姓名、學號、宿舍號、班級等信息,并在本地保存數(shù)據(jù)文件(2)打開宿舍數(shù)據(jù)文件:輸入文件名打開保存過的數(shù)據(jù)文件(3)查詢住宿信息:提供學號、姓名、宿舍號三種查詢方式(4)添加住宿信息:在數(shù)據(jù)文件中添加新的住宿信息(5)刪除住宿信息:提示管理員輸入要刪除的學生姓名,驗證后刪除(6)修改住宿信息:提示管理員輸入要修改的學生姓名,驗證后修改(7)輸出數(shù)據(jù)文件:將住宿信息按學號的大小排序全部輸出(8)退出系統(tǒng)3.程序結(jié)構(gòu)及流程設(shè)計3.1系統(tǒng)流程圖初始化創(chuàng)建程序結(jié)束主菜單讀取顯示查詢增加修改刪除讀取文件讀寫文件輸出結(jié)果3.2 函數(shù)設(shè)計函數(shù)原型 函數(shù)功能函數(shù)處理描述void creat() 初始條件,創(chuàng)建新數(shù)據(jù)文件,用于存放學生信息調(diào)用文件操作函數(shù)來實現(xiàn)void readfile() 文件讀取函數(shù),打開已有的數(shù)據(jù)文件調(diào)用文件操作函數(shù)來實現(xiàn)void output()輸出函數(shù),用于輸出所有的學生信息調(diào)用文件操作函數(shù),并將學號作為關(guān)鍵字進行冒泡排序再輸出void namesearch()查找函數(shù),用于以姓名為關(guān)鍵字查詢使用指針,將關(guān)鍵字與記錄比較,若相同則輸出void numsearch()查找函數(shù),用于以學號為關(guān)鍵字查詢使用指針,將關(guān)鍵字與記錄比較,若相同則輸出Void dorsearch ()查找函數(shù),用于以房號為關(guān)鍵字查詢使用指針,將關(guān)鍵字與記錄比較,若相同則輸出void add()添加函數(shù),以姓名為關(guān)鍵字加入新的學生信息使用指針,建立一個新節(jié)點,將新信息插入原文件中void modify()修改函數(shù),用于以修改已存在的學生信息,以姓名為關(guān)鍵字使用指針,將關(guān)鍵字與記錄比較,若相同則更改原紀錄并保存在原文件中void deleted()刪除函數(shù),用于刪除所選的學生信息,以姓名為關(guān)鍵字使用指針,將關(guān)鍵字與記錄比較,若相同則刪除一切相關(guān)記錄void main()主函數(shù),用于調(diào)用子函數(shù)按照輸入的命令調(diào)用已定義的子函數(shù)4.系統(tǒng)詳細設(shè)計4.1數(shù)據(jù)結(jié)構(gòu)設(shè)計typedef struct pnode /結(jié)構(gòu)體定義 用于存放學生信息的節(jié)點char name10; /姓名char num16; /學號char room30; /宿舍號char group20; /班級student;char filename20; /文件名FILE *fp; /指向文件的指針4.2創(chuàng)建功能(void creat())使用函數(shù)新建鏈表,再使用while循環(huán)完成對宿舍數(shù)據(jù)的錄入,包括姓名、學號、班級、宿舍號等信息。最終將錄入數(shù)據(jù)保存在數(shù)組里。完成輸入后,輸入#結(jié)束循環(huán)。開始調(diào)用creat()函數(shù)輸入姓名、學號、房號、班級否是結(jié)束判斷是否有“#”4.3讀取功能(void readfile())使用函數(shù)讀取數(shù)據(jù)文件,根據(jù)輸入的文件名加載保存在本地的數(shù)據(jù)文件,若找不到相同名稱文件,則輸出錯誤提示。4.4查找功能 (void namesearch(),void numsearch(),void groupsearch())通過輸入選擇相關(guān)的查詢函數(shù)來完成查找功能,使用指針將關(guān)鍵字與記錄比較,若相同則輸出,若無相同則輸出錯誤提示。開始根據(jù)需求選擇調(diào)用namesearch()、 numsearch()、groupsearch()函數(shù)是判斷鏈表是否為空否輸入姓名或?qū)W號或房號 是 否輸出“無此信息”判斷是否存在輸出顯示結(jié)束4.5修改功能(void Modify())使用函數(shù)定義指向結(jié)構(gòu)體變量的指針,檢驗鏈表中是否有記錄,若有記錄,根據(jù)要修改的編號查找對應結(jié)點修改信息并保存,若沒記錄,輸出錯誤提示。開始調(diào)用Modify()函數(shù)是判斷鏈表是否為空否輸入姓名 輸出記錄是 否輸出“無此信息”判斷是否存在替換輸入新紀錄結(jié)束 4.6刪除功能(void deleted())使用函數(shù)定義指向結(jié)構(gòu)體變量的指針,用指針檢驗鏈表中是否有記錄,若有記錄根據(jù)要修改的編號查找要刪除的結(jié)點并刪除記錄,若沒記錄,輸出錯誤提示。開始調(diào)用deleted ()函數(shù)是判斷鏈表是否為空否輸入姓名否 是否刪除是 否輸出“無此信息”判斷是否存在是刪除結(jié)束4.7添加功能(void Add())使用函數(shù)定義指向結(jié)構(gòu)體變量的指針,找到插入結(jié)點,在要插入的結(jié)點輸入信息并保存。開始調(diào)用add()函數(shù)是判斷鏈表是否為空否添加姓名、學號、房號 結(jié)束4.8輸出功能(void output()使用循環(huán)語句對已有的宿舍記錄進行逐個讀取,按學號為關(guān)鍵字進行冒泡排序,經(jīng)過n-1趟子排序完成,第i趟子排序從第1個數(shù)至第n-i個數(shù),若第i個數(shù)比后一個數(shù)大(則升序,小則降序)則交換兩數(shù),排序完后按順序輸出所有記錄。5.系統(tǒng)調(diào)試5.1主界面5.2創(chuàng)建界面5.3加載界面5.4按姓名查詢5.5按學號查詢5.6按宿舍號查詢5.7修改界面5.8刪除界面5.9添加界面5.10輸出界面5.11本地數(shù)據(jù)文件5.12系統(tǒng)分析經(jīng)過測試,該宿舍管理系統(tǒng)結(jié)構(gòu)清晰,運行時測試也相對簡單。設(shè)計的功能可以完全實現(xiàn),輸入的信息也可以正確顯示,可以成功地退出程序。程序運行開始,根據(jù)界面提示選擇輸入,測試對學生信息的增加,刪除,查詢,修改等功能是否實現(xiàn)及輸出相應的信息。當選擇退出程序時,系統(tǒng)有沒有正常結(jié)束退出程序。本程序的不足之處在于沒有登錄程序,這樣就沒有辦法設(shè)置用戶管理及權(quán)限設(shè)置。程序在運行時沒有設(shè)置清屏程序,以至于屏幕不夠簡潔。函數(shù)實現(xiàn)的功能也不夠全面,在刪除,更改等操作中僅以姓名為關(guān)鍵字,有一定的局限性。6.心得體會通過這次課程設(shè)計,我對C語言有了更深刻的了解,增強了程序的編寫能力,鞏固了專業(yè)知識,對程序的模塊化觀念也又模糊逐漸變的清晰了。在程序的運行與調(diào)試過程中出現(xiàn)了很多錯誤,通過反復地復習課本上的相關(guān)知識,不停地修改與調(diào)試,我終于完成了這段程序。在調(diào)試過程中,我認識到了C語言的靈活性與嚴謹性,同一個功能可以由不同的語句來實現(xiàn),但編寫程序時要特別注意細節(jié)方面的問題,因為一個小小的疏忽就能導致整個程序不能運行。當然我也認識到了自己的薄弱之處,如對鏈表相關(guān)知識的欠缺,文件運用的不熟練,在以后的學習中我要集中精力、端正態(tài)度,爭取把知識學得更扎實、更全面。這次課程設(shè)計我做的還不是很完善,因為功能不是很多,如果以后有機會完善的話,應該對管理員和用戶登錄時做進一步完善。學生的信息還不夠完整,如學生的宿舍長,系別,一些費用以及學生的成績等待相關(guān)詳細信息。在這次課程設(shè)計的過程中,我體會到要想開發(fā)一個系統(tǒng)軟件,不僅需要相當?shù)膶I(yè)技術(shù)知識,還要有嚴謹縝密的思維能力。只有思想上清晰了,編程才有意義,否則就是白費力氣。同時還要善于捕獲細小的方面,因為那往往是這個程序的致命因素。這次課程設(shè)計培養(yǎng)了我的細心和耐性,更樹立了一種科學的態(tài)度。7.參考資料1田魯懷.數(shù)據(jù)結(jié)構(gòu).北京:電子工業(yè)出版社,20102譚浩強.C語言程序設(shè)計(第三版).北京:清華大學出版社,20053 劉振安,孫忱,劉燕君.C程序設(shè)計課程設(shè)計.北京:機械工業(yè)出版社,20078.附錄源程序#include#include#include#include typedef struct pnode /結(jié)構(gòu)體定義 用于存放學生信息的節(jié)點char name 10; /姓名char num16; /學號char dor30; /房號char group20; /班級student;char filename20; /文件名FILE *fp; /指向文件的指針void creat() / 創(chuàng)建一個二進制文件 用于存放學生數(shù)據(jù) student *person; person=(student *)malloc(sizeof(student); /為節(jié)點分配內(nèi)存 printf(n 請您輸入文件名:n); scanf(%s,filename); if(fp=fopen(filename,w+)=NULL) printf(n 您沒有輸入文件名 不能找到文件);exit(0);printf(n請輸入學生的姓名 學號 房號 班級 用空格隔開 以#結(jié)束n);scanf(%s,person-name);while(strcmp(person-name,#) /該循環(huán)用于控制學生信息的錄入 遇#結(jié)束 scanf(%s %s %s,person-num,person-dor,person-group);fprintf(fp,%-10s%-10s%-10s%-10sn,person-name,person-num,person-dor,person-group);scanf(%s,person-name); fclose(fp);void readfile() /文件讀取函數(shù) printf(n請輸入文件名:n); scanf(%s,filename); /此處輸入為文件的路徑 if(fp=fopen(filename,r+)=NULL)printf(n無法打開該文件:n);exit(0);fclose(fp);void output() /輸出函數(shù) 用于輸出文件的全部信息 student *person; long offset1,offset2; char name110,name210,name310; char num116,num216,num316; char dor130,dor230,dor330; char group120,group220,group320;person=(student *)malloc(sizeof(student); if(fp=fopen(filename,r)=NULL)printf(n 無法打開該文件);exit(0); while(!feof(fp) /此循環(huán)用于對文件數(shù)據(jù)中關(guān)鍵字學號進行從小到大冒泡排序 int a,b,c,d; /a為循環(huán)結(jié)束判定變量 b,c,d用于起泡排序?qū)W號交換的替換if(fp=fopen(filename,r+)=NULL) /冒泡排序printf(n 無法打開該文件);exit(0);while(!feof(fp) / 外部循環(huán) while(!feof(fp) /內(nèi)部循環(huán) offset1=ftell(fp); /獲取文件內(nèi)部當前指針位置fscanf(fp,%s%s%s%sn,person-name,person-num,person-dor,person-group); strcpy(name1,person-name); strcpy (num1,person-num); strcpy(dor1,person-dor); strcpy(group1,person-group); if(feof(fp) break; /文件結(jié)束 跳出循環(huán) offset2=ftell(fp); /獲取文件內(nèi)部下一指針位置fscanf(fp,%s%s%s%sn,person-name,person-num,person-dor,person-group); strcpy (name2,person-name); strcpy(num2,person-num); strcpy(dor2,person-dor); strcpy(group2,person-group); b=strlen(num1); c=strlen(num2); d=strcmp(num1,num2); if(b=c&d0) /如果 學號1大于等于學號2 則交換全部數(shù)據(jù) strcpy(name3,name1); strcpy(name1,name2); strcpy(name2,name3); strcpy(num3,num1); strcpy(num1,num2); strcpy(num2,num3); strcpy(dor3,dor1); strcpy(dor1,dor2); strcpy(dor2,dor3); strcpy(group3,group1); strcpy(group1,group2); strcpy(group2,group3); fseek(fp,offset1,SEEK_SET); /將指針移動offset1個字節(jié) strcpy(person-name,name1); strcpy(person-num,num1); strcpy(person-dor,dor1); strcpy(person-group,group1);fprintf(fp,%-10s%-10s%-10s%-10sn,person-name,person-num,person-dor,person-group); /排序后寫入文件 strcpy(person-name,name2); strcpy(person-num,num2); strcpy( person-dor,dor2); strcpy(person-group,group2);fprintf(fp,%-10s%-10s%-10s%-10sn,person-name,person-num,person-dor,person-group);/排序后寫入文件 fseek(fp,offset2,SEEK_SET); /將文件位置指針從文件頭向前移動offset2個字節(jié) rewind(fp); /指向頭文件 while(!feof(fp) /此循環(huán)用于判斷學號是否有序 offset1=ftell(fp);fscanf(fp,%s%s%s%sn,person-name,person-num,person-dor,person-group); strcpy (num1,person-num); if(feof(fp) a=1;break; offset2=ftell(fp);fscanf(fp,%s%s%s%sn,person-name,person-num,person-dor,person-group); strcpy(num2,person-num); b=strlen(num1); c=strlen(num2); d=strcmp(num1,num2); if(b=c&dname,person-num,person-dor,person-group);printf(%-20s%-20s%-20s%-20sn,person-name,person-num,person-dor,person-group);fclose(fp);printf(*nn);void namesearch() / 按姓名搜索函數(shù) int k=0; char namekey10; student *person;person=(student *)malloc(sizeof(student); printf(n 請輸入您要查找的姓名:); scanf(%s,namekey);if(fp=fopen(filename,rb)=NULL)printf(n 無法打開文件);exit(0); while(!feof(fp)fscanf(fp,%s %s %s %sn,person-name,person-num,person-dor,person-group);if(!strcmp(namekey,person-name) printf(nn 已經(jīng)為您找到 以下是記錄:nn); printf(%-20s%-20s%-20s%-20sn,姓名,學號,房號,班級);printf(%-20s%-20s%-20s%-20sn,person-name,person-num,person-dor,person-group);k=1; if(!k)printf(nn 沒有關(guān)于此姓名的任何信息! n); fclose(fp);void numsearch() /按學號搜索函數(shù) int k=0; char xhkey16; student *person;person=(student *)malloc(sizeof(student); printf(n 請您輸入需要查找的學號:); scanf(%s,xhkey); if(fp=fopen(filename,rb)=NULL)printf(n 無法打開文件 ); exit(0); while(!feof(fp)fscanf(fp,%s %s %s %sn,person-name,person-num,person-dor,person-group); if(!strcmp(xhkey,person-num) printf(nn 已經(jīng)為您找到 以下是記錄:nn); printf(%-20s%-20s%-20s%-20sn,姓名,學號,房號,班級);printf(%-20s%-20s%-20s%-20sn,person-name,person-num,person-dor,person-group);k=1; if(!k) printf(nn 沒有關(guān)于該學號的任何信息n); fclose(fp);void dorsearch () /按房號搜索函數(shù) int k=0; char fhkey30; student *person; person=(student *)malloc(sizeof(student); printf(n 請您輸入想要查找的房號); scanf(%s,fhkey); if(fp=fopen(filename,rb)=NULL) printf(n 無法打開文件); exit(0); while(!feof(fp) fscanf(fp,%s %s %s %sn,person-name,person-num,person-dor,person-group); if(!strcmp(fhkey,person-dor) printf(nn 已經(jīng)為您找到 以下是記錄:nn); printf(%-20s%-20s%-20s%-20sn,姓名,學號,房號,班級);printf(%-20s%-20s%-20s%-20sn,person-name,person-num,person-dor,person-group); k=1; if(!k) printf(nn 沒有關(guān)于此房號的任何信息n); fclose(fp);void add() /插入函數(shù) 用于像已有文件插入一條新的學生信息記錄 student *person; person=(student *)malloc(sizeof(student); if(fp=fopen(filename,a)=NULL) printf(n 無法打開文件);exit(0); printf(n 請您輸入學生姓名 學號 房號 班級 n);scanf(%s %s %s %s,person-name,person-num,person-dor,person-group);fprintf(fp,%-10s%-10s%-10s%-10sn,person-name,person-num,person-dor,person-group); fclose(fp);void modify() /更新函數(shù) 用于修改指定學生姓名的記錄 int k=0; long offset; char namekey10; student *person; person=(student *)malloc(sizeof(student); printf(n 請您輸入想要更改的學生的姓名 :); scanf(%s,namekey); if(fp=fopen(filename,r+)=NULL) printf(n 無法打開文件); exit(0); while(!feof(fp) offset=ftell(fp);fscanf(fp,%s %s %s %sn,person-name,person-num,person-dor,person-group);if(!strcmp(namekey,person-name) /比較是否相同 如k=1; break;if(k) /相同 輸出記錄并進行修改 printf(n 記錄輸出如下:nn); printf(%-20s%-20s%-20s%-20sn,姓名,學號,房號,班級);printf(%-20s%-20s%-20s%-20sn,person-name,person-num,person-dor,person-group); printf(n 請您輸入新的學生姓名 學號 房號 班級:n); scanf(%s %s %s %s,person-name,person-num,person-dor,person-group);fseek(fp,offset,SEEK_SET);fprintf(fp,%-10s%-10s%-10s%-10sn,person-name,person-num,person-dor,person-group); elseprintf(n 沒有關(guān)于該姓名的任何記錄n); fclose(fp);void deleted() /刪除函數(shù) 用于刪除指定學生姓名的記錄int k=0; char m; long offset; char namekey10; student *person; person=(student *)malloc(sizeof(student); printf(n請您輸入想要刪除的姓名:); scanf(%s,namekey); if(fp=fopen(filename,r+)=NULL)printf(n 無法打開文件 ); exit(0); while(!feof(fp) /此循環(huán)遍歷整個文件 查找需要刪除的記錄 offset=ftell(fp);fscanf(fp,%s %s %s %
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學生物學期末考試試卷及答案
- 2025年財務(wù)報表分析與會計決策考試試題及答案
- 2025年城市軌道交通工程專業(yè)考核試題及答案
- 2025江西中考數(shù)學答案
- 智慧城市數(shù)據(jù)資源共享協(xié)議
- 2025年潮州出租車區(qū)域科目考試題
- 產(chǎn)品創(chuàng)新行業(yè)產(chǎn)品類型分類表
- 2025年黑龍江省雙鴨山市名校英語八下期中復習檢測試題含答案
- 美容美發(fā)行業(yè)從業(yè)資格證明書(8篇)
- 項目合作開發(fā)意向協(xié)議書
- GB/T 18860-2002摩托車變速V帶
- GB/T 16604-2008滌綸工業(yè)長絲
- GB 38031-2020電動汽車用動力蓄電池安全要求
- 計算流體力學完整課件
- 國開作業(yè)《監(jiān)督學》形成性考核(三)參考(含答案)238
- 人因工程學課后習題及解答
- 2022年廣東省中考地理試卷(含答案)
- 機關(guān)檔案管理工作培訓課件
- 石材產(chǎn)品質(zhì)量保證書
- 部編版五年級語文下冊作文范文全套
- 衰老生物學ppt課件(PPT 57頁)
評論
0/150
提交評論