課程設(shè)計(論文)用C語言設(shè)計宿舍管理查詢軟件_第1頁
課程設(shè)計(論文)用C語言設(shè)計宿舍管理查詢軟件_第2頁
課程設(shè)計(論文)用C語言設(shè)計宿舍管理查詢軟件_第3頁
課程設(shè)計(論文)用C語言設(shè)計宿舍管理查詢軟件_第4頁
課程設(shè)計(論文)用C語言設(shè)計宿舍管理查詢軟件_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 用c語言設(shè)計宿舍管理查詢軟件 第頁 共2 4頁 用c語言設(shè)計宿舍管理查詢軟件 學(xué)生姓名: 指導(dǎo)老師: 摘 要 本課程設(shè)計主要解決在一個學(xué)校學(xué)生宿舍中,管理員對于宿舍學(xué)生的管理登記查詢的程序設(shè)計。數(shù)據(jù)結(jié)構(gòu)是計算機存儲、組織數(shù)據(jù)的方式。數(shù)據(jù)結(jié)構(gòu)是指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合1。一般認(rèn)為,一個數(shù)據(jù)結(jié)構(gòu)是由數(shù)據(jù)元素依據(jù)某種邏輯聯(lián)系組織起來的。在課程設(shè)計中,系統(tǒng)開發(fā)平臺為windows 2000,程序設(shè)計設(shè)計語言采用visual c+,數(shù)據(jù)庫采用ms sql 2000,程序運行平臺為windows 98/2000/xp。對于查詢使用了二分叉查詢法。程序通過調(diào)試運行,初步實現(xiàn)了設(shè)計目

2、標(biāo),并且經(jīng)過適當(dāng)完善后,將可以應(yīng)用在現(xiàn)實中解決實際問題。 關(guān)鍵詞 程序設(shè)計;查詢;c;課程設(shè)計;數(shù)據(jù)結(jié)構(gòu)1 引 言1. 課程設(shè)計目的數(shù)據(jù)結(jié)構(gòu)課程設(shè)計的目的是,通過設(shè)計掌握數(shù)據(jù)結(jié)構(gòu)課程中學(xué)到的基本理論和算法并綜合運用于解決實際問題中,它是理論與實踐相結(jié)合的重要過程。設(shè)計要求學(xué)會如何對實際問題定義相關(guān)數(shù)據(jù)結(jié)構(gòu),并采用恰當(dāng)?shù)脑O(shè)計方法和算法解決問題,同時訓(xùn)練學(xué)生進(jìn)行復(fù)雜程序設(shè)計的技能和培養(yǎng)良好的程序設(shè)計習(xí)慣。在程序設(shè)計中,可以用兩種方法解決問題:一是傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計方法,二是更先進(jìn)的面向?qū)ο蟪绦蛟O(shè)計方法2。2. 設(shè)計說明(1)詳細(xì)設(shè)計思想采用模塊化編程思想,將程序劃分為11個模塊,在逐個模塊細(xì)化編

3、程,最后再將個個模塊組裝成軟件。(2)程序說明1)需要定義一個結(jié)構(gòu)體:typedef struct pnode /結(jié)構(gòu)體定義 用于存放學(xué)生信息的節(jié)點char name 8; /姓名 char xh16; /學(xué)號 char fh30; /房號personnode;用來存儲學(xué)生的信息。2)create() /初始條件:必須保證原有記錄是空時方可建立 操作結(jié)果:建立一個新的數(shù)據(jù)文件3) readfile() / 初始條件:數(shù)據(jù)文件已經(jīng)建立 操作結(jié)果:獲取次文件的信息 4)serch1()按姓名查找serch2()按學(xué)號查找serch3()按宿舍號查找初始條件:數(shù)據(jù)文件中含有紀(jì)錄操作結(jié)果:不支持模糊查

4、詢必須查詢項和關(guān)鍵字吻合情況下才可查詢。調(diào)用按不同關(guān)鍵字查詢的子函數(shù)若存在相應(yīng)的查詢結(jié)果則顯示在屏幕上,若查找的紀(jì)錄不存在則提示該紀(jì)錄不存在,請建立相應(yīng)的數(shù)據(jù)紀(jì)5)insert() /添加數(shù)據(jù)紀(jì)錄的函數(shù)初始條件:必須已經(jīng)建立了數(shù)據(jù)文件操作結(jié)果:在數(shù)據(jù)文件中添加新的紀(jì)錄若沒有建立數(shù)據(jù)文件則添加失敗。6) delete() /刪除數(shù)據(jù)紀(jì)錄的函數(shù)初始條件:必須建立了數(shù)據(jù)庫并且數(shù)據(jù)文件中含有數(shù)據(jù)紀(jì)錄操作結(jié)果:刪除輸入學(xué)號的學(xué)生的一切相關(guān)紀(jì)錄7)updata() /修改數(shù)據(jù)紀(jì)錄的函數(shù)初始條件:必須建立了數(shù)據(jù)庫并且數(shù)據(jù)文件中含有數(shù)據(jù)紀(jì)錄操作結(jié)果:修改輸入的學(xué)號相對應(yīng)的學(xué)生的一切信息。如不存在相應(yīng)的紀(jì)錄則提

5、示不存在8)output() /輸出函數(shù) 初始條件:數(shù)據(jù)文件已經(jīng)建立 操作結(jié)果:起泡法排序 按學(xué)號順序輸出記錄。(3)各函數(shù)之間的關(guān)系利用主函數(shù)調(diào)用其他的各個函數(shù),新建數(shù)據(jù)文件函數(shù)create()是其它各個函數(shù)的基礎(chǔ),有了它其它函數(shù)才能夠使用。查詢函數(shù)insert1.2.3()添加數(shù)據(jù)紀(jì)錄函數(shù)insert()刪除數(shù)據(jù)紀(jì)錄函數(shù)delete ()修改數(shù)據(jù)紀(jì)錄函數(shù)updata ()這些函數(shù)都是在同一等級上的函數(shù),是平行關(guān)系。查詢當(dāng)前所有紀(jì)錄的函數(shù)output()以學(xué)號為關(guān)鍵字查詢函數(shù)serch1()以姓名為關(guān)鍵字查詢函數(shù)serch2()以床號為關(guān)鍵字查詢函數(shù)serch3()以宿舍號)這些函數(shù)都是查詢

6、函數(shù)中的子函數(shù),他們之間是平行的關(guān)系。3. 算法說明輸入學(xué)生數(shù)據(jù),通過#判斷是否輸入結(jié)束。將數(shù)據(jù)保存在文件里。查詢是否存在文件,存在則輸出所查詢的學(xué)生相關(guān)數(shù)據(jù),若不存在該學(xué)生的數(shù)據(jù)則輸出查詢失敗。輸入學(xué)生數(shù)據(jù)是否輸入完畢 存在# ?繼續(xù)輸入學(xué)生數(shù)據(jù)跳出函數(shù)ny輸入所查學(xué)生信息文件中是否存在該學(xué)生信息輸出該學(xué)生信息并跳回主函數(shù)輸出該學(xué)生不存在跳回主函數(shù)yn流程圖 3-14. 主要變量char name8; 定義學(xué)生姓名。char xh16; 定義學(xué)號。char fh30; 定義房號床號。注:其他變量程序中均有注釋。5. 主要函數(shù)功能表5-1 程序中的函數(shù)函數(shù)功能main();主函數(shù)create(

7、);新建數(shù)據(jù)文件serch1();查詢函數(shù)serch2();查詢函數(shù)serch3();查詢函數(shù)insert();加數(shù)據(jù)紀(jì)錄函數(shù)delete();刪除數(shù)據(jù)紀(jì)錄函數(shù)updata();修改數(shù)據(jù)紀(jì)錄函數(shù)readfile();數(shù)據(jù)文件讀取函數(shù)output();查詢當(dāng)前所有紀(jì)錄冰按學(xué)號升序輸出的函數(shù)6. 調(diào)試說明程序開始運行時提示用戶按照需要選擇功能圖6-1 提示用戶按照格式選擇要用的功能對于用戶輸入的數(shù)據(jù),若不在范圍內(nèi)則跳回主菜單。建立文件。讀取舊文件。按姓名查詢按學(xué)號查詢插入操作。排序輸出。刪除操作。當(dāng)操作完成后每次都會自動跳回主菜單選擇9即可退出程序。6 心得體會對我們這一學(xué)期實際學(xué)到的內(nèi)容的檢驗,

8、在課程設(shè)計的同時不僅鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正的掌握,從而提高自己的實際動手能力和獨立思考的能力。要學(xué)好數(shù)據(jù)結(jié)構(gòu)這門課程,不僅要認(rèn)真的閱讀課本知識,更重要的是要通過上機實踐才能增強和鞏固對課本知識的理解。首先通過實踐我發(fā)現(xiàn)了自己許多的不足,尤其是露出了對c語言知識基礎(chǔ)的掌握不好,許多簡單的東西都不知道。在課本上看到各種算法感覺很簡單,但是真正的讓自己去寫一個算法感覺很困難。即使是課本上的原程序算法,自己寫起來都感

9、覺有點生疏。在調(diào)試過程中經(jīng)常出現(xiàn)的錯誤也不是很熟悉。通過實踐,使我在這幾個方面的認(rèn)識有所提高。通過實踐的學(xué)習(xí),我認(rèn)到學(xué)好計算機要重視實踐操作,不僅僅是學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),還是其它的課程,以及其它的計算機方面的知識都要重在實踐,所以后在學(xué)習(xí)過程中,我會更加注視實踐操作,使自己更好地學(xué)好計算機?;仡櫰鸫舜螖?shù)據(jù)結(jié)構(gòu)課程設(shè)計,至今我仍感慨頗多,的確,從選題到定稿,從理論到實踐,遇到了許多問題,也學(xué)到了許多東西。雖然程序中不是很完美,但是對于我來說已經(jīng)不錯了,今后還需繼續(xù)努力。參考文獻(xiàn)1嚴(yán)蔚敏,吳偉民. 數(shù)據(jù)結(jié)構(gòu)(c語言版). 清華大學(xué)出版社,20102李文軍,李師賢,周曉聰. c+作為計算機專業(yè)程序設(shè)計入門

10、語言的實踐與探討. 計算機科學(xué),1999,26(4):80833 王曉東.計算機算法設(shè)計與分析.電子工業(yè)出版社,2007附錄1:源程序清單/程序名稱:課程設(shè)計.c/程序功能:具有實現(xiàn)對學(xué)生數(shù)據(jù)的插入查詢刪除功能的宿舍查詢軟件/程序作者:江龍圣/最后修改日期:2010-6-24#include#include#includetypedef struct pnode /結(jié)構(gòu)體定義 用于存放學(xué)生信息的節(jié)點 char name 8; /姓名 char xh16; /學(xué)號 char fh30; /房號personnode;char filename20; /文件名file *fp; /指向文件的指針vo

11、id creat() /創(chuàng)建新數(shù)據(jù)文件的函數(shù) 創(chuàng)建一個二進(jìn)制文件 用于存放學(xué)生數(shù)據(jù) personnode *person; person=(personnode *)malloc(sizeof(personnode); /為節(jié)點分配內(nèi)存 printf(n please enter the filename:n); scanf(%s,filename); if(fp=fopen(filename,w+)=null) printf(n you have no enter the filename,can not font the file); exit(0); printf(n please en

12、ter the name,studentnumbeer (the same length) and roomnumber,spare with space,endwith #n); scanf(%s,person-name); while(strcmp(person-name,#) /該循環(huán)用于控制 學(xué)生信息的錄入 當(dāng)輸入#時 學(xué)生信息錄入完畢 scanf(%s %s,person-xh,person-fh); fprintf(fp,%-10s%-20s%-50sn,person-name,person-xh,person-fh); scanf(%s,person-name); fclose(

13、fp);void readfile() /文件讀取函數(shù) 用于打開已有的二進(jìn)制數(shù)據(jù)文件printf(n please enter the fileroad:n); scanf(%s,filename); /此處輸入為文件的路徑 如c:zhang if(fp=fopen(filename,r+)=null) printf(n cant open thefile:n); exit(0); fclose(fp);void output() /輸出函數(shù) 用于輸出文件的全部信息 personnode *person; long offset1,offset2; char name18,name28,nam

14、e38; char xh116,xh216,xh316; char fh130,fh230,fh330;person=(personnode *)malloc(sizeof(personnode); if(fp=fopen(filename,r)=null) printf(n cant open the file); exit(0); while(!feof(fp) /此循環(huán)用于 對文件數(shù)據(jù)中關(guān)鍵字學(xué)號進(jìn)行從小到大冒泡排序 int a,b,c,d; /a為循環(huán)結(jié)束判定變量 b,c,d用于起泡排序時學(xué)號交換的替換 if(fp=fopen(filename,r+)=null) printf(n c

15、ant open the file); exit(0); while(!feof(fp) / 從文件頭開始遍歷 while(!feof(fp) /對兩組數(shù)據(jù)進(jìn)行排序 offset1=ftell(fp); /獲取文件內(nèi)部當(dāng)前指針位置 fscanf(fp,%s%s%sn,person-name,person-xh,person-fh); strcpy(name1,person-name); strcpy (xh1,person-xh); strcpy(fh1,person-fh); if(feof(fp) break; /文件結(jié)束 跳出循環(huán) offset2=ftell(fp); /獲取文件內(nèi)部下一

16、指針位置 fscanf(fp,%s%s%sn,person-name,person-xh,person-fh); strcpy (name2,person-name); strcpy(xh2,person-xh); strcpy(fh2,person-fh); b=strlen(xh1); c=strlen(xh2); d=strcmp(xh1,xh2); if(b=c&d0) /如果 學(xué)號1大于等于學(xué)號2 怎交換全部數(shù)據(jù) strcpy(name3,name1); strcpy(name1,name2); strcpy(name2,name3); strcpy(xh3,xh1); strcpy

17、(xh1,xh2); strcpy(xh2,xh3); strcpy(fh3,fh1); strcpy(fh1,fh2); strcpy(fh2,fh3); fseek(fp,offset1,seek_set); /將文件指針移動offset1個字節(jié) strcpy(person-name,name1); strcpy(person-xh,xh1); strcpy(person-fh,fh1); fprintf(fp,%-10s%-20s%-50sn,person-name,person-xh,person-fh);/排序后寫入文件 strcpy(person-name,name2); strc

18、py(person-xh,xh2); strcpy( person-fh,fh2); fprintf(fp,%-10s%-20s%-50sn,person-name,person-xh,person-fh);/排序后寫入文件 fseek(fp,offset2,seek_set); /將文件位置指針從文件頭向前移動offset2個字節(jié) rewind(fp); /指向頭文件 while(!feof(fp) /此循環(huán)用于判斷學(xué)號是否有序 offset1=ftell(fp); fscanf(fp,%s%s%sn,person-name,person-xh,person-fh); strcpy (xh1

19、,person-xh); if(feof(fp) a=1; break; offset2=ftell(fp); fscanf(fp,%s%s%sn,person-name,person-xh,person-fh); strcpy(xh2,person-xh); b=strlen(xh1); c=strlen(xh2); d=strcmp(xh1,xh2); if(b=c&dname,person-xh,person-fh); printf(%-10s%-20s%-50sn,person-name,person-xh,person-fh); fclose(fp); printf(*nn);voi

20、d search1() / 按姓名搜索函數(shù) int k=0; char namekey8; personnode *person; person=(personnode *)malloc(sizeof(personnode); printf(n please enter the namehead you need :); scanf(%s,namekey); if(fp=fopen(filename,rb)=null) printf(n cant open thefile); exit(0); while(!feof(fp) fscanf(fp,%s %s %sn,person-name,pe

21、rson-xh,person-fh); if(!strcmp(namekey,person-name) /比較是否相同 相同則輸出結(jié)果 否則輸出未找到記錄 printf(nn have serched,the courrent is:); printf(%-10s%-20s%-50sn,person-name,person-xh,person-fh); k=1; if(!k) printf(nn sorry,there is not the current of thiss people n); fclose(fp);void search2() /按學(xué)號搜索函數(shù) int k=0; char

22、xhkey16; personnode *person; person=(personnode *)malloc(sizeof(personnode); printf(n please enter the roomnumber you want to serch:); scanf(%s,xhkey); if(fp=fopen(filename,rb)=null) printf(n cant open the file ); exit(0); while(!feof(fp) fscanf(fp,%s %s %sn,person-name,person-xh,person-fh); if(!str

23、cmp(xhkey,person-xh) /比較是否相同 相同則輸出結(jié)果 否則輸出未找到記錄 printf(nn have got it,the current is:); printf(%-10s%-20s%-50sn,person-name,person-xh,person-fh); k=1; if(!k) printf(nn sorry,there is not the current of thiss people n); fclose(fp);void search3() /按房號搜索函數(shù) int k=0; char fhkey30; personnode *person; pers

24、on=(personnode *)malloc(sizeof(personnode); printf(n please enter the roomnumber you want to serch:); scanf(%s,fhkey); if(fp=fopen(filename,rb)=null) printf(n cant open thefile); exit(0); while(!feof(fp) fscanf(fp,%s %s %sn,person-name,person-xh,person-fh); if(!strcmp(fhkey,person-fh) /比較是否相同 相同則輸出結(jié)

25、果 否則輸出未找到記錄 printf(nn have got it,the current is:); printf(%-10s%-20s%-50sn,person-name,person-xh,person-fh); k=1; if(!k) printf(nn sorry,there is not the current of thiss peoplen); fclose(fp);void append() /插入函數(shù) 用于像已有文件插入一條新的學(xué)生信息記錄 personnode *person; person=(personnode *)malloc(sizeof(personnode);

26、 if(fp=fopen(filename,a)=null) printf(n cant open the file); exit(0); printf(n please enter the name,studentnumber and roomnumber n); scanf(%s %s %s,person-name,person-xh,person-fh); fprintf(fp,%-10s%-20s%-50sn,person-name,person-xh,person-fh); fclose(fp);void modify() /更新函數(shù) 用于修改指定學(xué)生姓名的記錄 int k=0; l

27、ong offset; char namekey8; personnode *person; person=(personnode *)malloc(sizeof(personnode); printf(n please enter the studentname you want to updata :); scanf(%s,namekey); if(fp=fopen(filename,r+)=null) printf(n cant open thefile); exit(0); while(!feof(fp) offset=ftell(fp); fscanf(fp,%s %s %sn,pe

28、rson-name,person-xh,person-fh); if(!strcmp(namekey,person-name) /比較是否相同 如 k=1; break; if(k) /相同 輸出記錄并進(jìn)行修改 printf(n hava got it,the current is:); printf(%-10s%-20s%-50sn,person-name,person-xh,person-fh); printf(n please enter the new studentname,studentnumber and roomnumber :); scanf(%s %s %s,person-

29、name,person-xh,person-fh); fseek(fp,offset,seek_set); fprintf(fp,%-10s%-20s%-50sn,person-name,person-xh,person-fh); else printf(n sorry,there is not the current of this people n); fclose(fp);void deleted() /刪除函數(shù) 用于刪除指定學(xué)生姓名的記錄 int k=0; char m; long offset; char namekey8; personnode *person; person=(p

30、ersonnode *)malloc(sizeof(personnode); printf(n please enter the name you want to delete :); scanf(%s,namekey); if(fp=fopen(filename,r+)=null) printf(n cant open the file ); exit(0); while(!feof(fp) /此循環(huán)遍歷整個文件 查找需要刪除的記錄 offset=ftell(fp); fscanf(fp,%s%s%sn,person-name,person-xh,person-fh); if(!strcmp(namekey,person-name) k=1; break; if(k) pr

溫馨提示

  • 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

提交評論