課程設(shè)計宿舍管理查詢系統(tǒng)_第1頁
課程設(shè)計宿舍管理查詢系統(tǒng)_第2頁
課程設(shè)計宿舍管理查詢系統(tǒng)_第3頁
課程設(shè)計宿舍管理查詢系統(tǒng)_第4頁
課程設(shè)計宿舍管理查詢系統(tǒng)_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-(宿舍管理查詢軟件)題 目:宿舍管理查詢軟件 學(xué)生姓名: 學(xué) 號: 專業(yè)班級: 2014年7月3日數(shù)據(jù)結(jié)構(gòu)課程設(shè)計題目宿舍管理查詢軟件1、課程設(shè)計的目的2、課程設(shè)計的內(nèi)容和要求(包括原始數(shù)據(jù)、技術(shù)要求、工作要求等)任務(wù):為宿舍管理人員編寫一個宿舍管理查詢軟件, 程序設(shè)計要求:(1)采用交互工作方式(2)可以增加、刪除、修改信息(3)建立數(shù)據(jù)文件 ,數(shù)據(jù)文件按關(guān)鍵字(姓名、學(xué)號、房號)進行排序(選擇、快速排序、堆排序等任選一種)(4) 查詢 : a.按姓名查詢 ;b.按學(xué)號查詢 ;c按房號查詢(5) 打印任一查詢結(jié)果(可以連續(xù)操作)目 錄數(shù)據(jù)結(jié)構(gòu)課程設(shè)計I目錄I1 設(shè)計題目12

2、 需求分析13算法設(shè)計13.1算法設(shè)計思想及分析13.2線性表的順序存儲23.2.1程序流程圖為:23.2.2存儲結(jié)構(gòu):34、數(shù)據(jù)測試34.1開始錄入的數(shù)據(jù):34.2插入的數(shù)據(jù):34.3查找的數(shù)據(jù):34.4刪除的數(shù)據(jù):35、測試輸出結(jié)果及分析(以運行結(jié)果圖表示):45.1測試輸出結(jié)果45.1.1歡迎界面:45.1.2按任意鍵進入線性表的創(chuàng)建界面,輸入數(shù)據(jù),開始創(chuàng)建:45.1.3請按鍵選擇操作:55.1.4按學(xué)號排序:55.1.5按房號排序:5插入后顯示:6按姓名查找:6按學(xué)號查找:7按房號查找:7進入刪除功能,刪除數(shù)據(jù)后顯示剩余的學(xué)生信息:7退出(數(shù)字為零時退出):85.2測試輸出結(jié)果分析86

3、、收獲與體會91 、設(shè)計題目宿舍管理查詢軟件任務(wù):為宿舍管理人員編寫一個宿舍管理查詢軟件, 程序設(shè)計要求:(1)采用交互工作方式(2)可以增加、刪除、修改信息(3)建立數(shù)據(jù)文件 ,數(shù)據(jù)文件按關(guān)鍵字(姓名、學(xué)號、房號)進行排序(選擇、快速排序、堆排序等任選一種)(4) 查詢 : a.按姓名查詢 ;b.按學(xué)號查詢 ;c按房號查詢(5) 打印任一查詢結(jié)果(可以連續(xù)操作)2、需求分析根據(jù)上述要求,我們開始考慮系統(tǒng)應(yīng)具備的功能:3、 算法設(shè)計3.1 算法設(shè)計思想及分析首先,運行程序進入“歡迎進入宿舍管理查詢系統(tǒng)”界面,然后進入線性表創(chuàng)建界面中,輸入學(xué)生的信息,創(chuàng)建好學(xué)生信息以后單擊“n”鍵則進入操作界面

4、(主界面),然后可按鍵進行操作。單擊數(shù)字鍵“1”,則為按姓名排序 單擊數(shù)字鍵“2”,則為按學(xué)號排序單擊數(shù)字鍵“3”,則為按房號排序 單擊數(shù)字鍵“4”,則為按姓名查找單擊數(shù)字鍵“5”,則為按學(xué)號查找 單擊數(shù)字鍵“6”,則為按學(xué)號查找單擊數(shù)字鍵“7”,則為按學(xué)號插入 單擊數(shù)字鍵“8”,則為按學(xué)號刪除系統(tǒng)中有如下關(guān)鍵詞: 提示:當輸入的數(shù)字鍵為0時,退出操作;請輸入數(shù)字鍵(18為操作鍵);請按任意鍵進入主界面。3.2線性表的順序存儲3.2.1程序流程圖為:開始顯示“宿舍管理查詢系統(tǒng)主菜單”是否繼續(xù)查找Y輸入“學(xué)號,姓名,性別,房間號”是否繼續(xù)錄入Y“信息錄入”按鍵選擇操作按“1”按“4”按“6”按“

5、3”按“7”按“8”按“2”按“5”按姓名排序按學(xué)號排序按房號排序按姓名查找按房號查找是否繼續(xù)查找Y按學(xué)號查找是否繼續(xù)查找Y按學(xué)號插入Y是否繼續(xù)插入按學(xué)號刪除是否繼續(xù)刪除Y顯示列表NNNNNN按“0”結(jié)束3.2.2存儲結(jié)構(gòu)本系統(tǒng)定義的存儲結(jié)構(gòu)采用結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體為:#define ListSize 100typedef struct /定義結(jié)構(gòu)體成員char name20;int num; /學(xué)號和房號都為整型int room;stu;stu stud;typedef struct int ListSize; /當前分配的存儲容量int length; /當前長度stu *elem; lin

6、klist; 4、數(shù)據(jù)測試4.1開始錄入的數(shù)據(jù):姓名 學(xué)號 房間號李XX 357 612劉XX 361 528呂XX 250 4134.2插入的數(shù)據(jù):姓名 學(xué)號 房間號趙XX 346 612丁XX 367 5094.3查找的數(shù)據(jù):XX(按姓名) 359(按學(xué)號) 612(按房間號)4.4刪除的數(shù)據(jù):357(按學(xué)號)5、測試輸出結(jié)果(以運行結(jié)果圖表示):5.1.1歡迎界面:5.1.2按任意鍵進入線性表的創(chuàng)建界面,輸入數(shù)據(jù),開始創(chuàng)建:5.1.3請按鍵選擇操作:5.1.4按學(xué)號排序:5.1.5按房號排序:5.1.6插入后顯示:5.1.7按姓名查找:5.1.8按學(xué)號查找:5.1.9按房號查找:5.1.

7、10進入刪除功能,刪除數(shù)據(jù)后顯示剩余的學(xué)生信息:5.1.11退出(數(shù)字為零時退出):5.2分析結(jié)果優(yōu)點:在插入和刪除模塊中,顯示學(xué)生的信息的下面總是有主界面,經(jīng)過調(diào)試,清屏后,顯示的只有學(xué)生的信息了,再按鍵即可返回主界面。本程序能很好的控制了顯示的學(xué)生信息與主界面的轉(zhuǎn)換。缺點:在按關(guān)鍵字(姓名、學(xué)號、房號)查找中,由于題目限制了只能用二分查找方式進行查找,所以有時出現(xiàn)了關(guān)鍵字相同時(列如房號相同),就只能查出并顯示出一個學(xué)生的信息(例如612房間有杜欣笑和李劉璐兩名同學(xué),但只查找到杜欣笑一名同學(xué))。按(姓名、學(xué)號、房號)排序和查找功能每個函數(shù)都寫了一遍,很繁瑣6、 收獲與體會經(jīng)過這次課程設(shè)計,

8、我收獲到到了很多東西,對C語言有了進一步的了解和認識,不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠遠不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能提高自己的實際動手能力和獨立思考的能力,在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,通過這次課程設(shè)計之后,一定把以前所學(xué)過的知識重新溫故。通過本次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計,我學(xué)到了很多,獨立的完成了作業(yè),我覺得很滿足,也很有成就感,現(xiàn)在知道并熟練的掌握了一些曾經(jīng)自己不知道的知識。例如: (1)sc

9、anf()和gets()輸入函數(shù)的不同之處,當scanf()輸入字符串時不能帶空格,否則不能輸出后面的字符,而gets()能輸入帶空格的字符串。(2)知道了怎么能組裝好各個函數(shù)模塊,使它們實現(xiàn)各自的功能。附錄:采用順序線性表解決宿舍管理問題#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 40 /線性表存儲空間的初始分配量#define increase 10 /線性表存儲空間的分配量增量int f,t=0; /定義全局變量typedef struct char name20;int

10、 num; /學(xué)號和房號都為整型int room;stu;stu stud;typedef structint length; /當前長度stu *elem; /存儲空間基址int listsize; /當前分配的存儲容量linklist; void init(linklist &l)/線性表初始化l.length=0;l.elem=(stu *)malloc(N*sizeof(stu );l.listsize=N;void menu()/操作菜單printf("n");printf(" *請按鍵選擇操作*n");printf("n&q

11、uot;);printf("n");printf(" 1 按姓名排序 2 按學(xué)號排序n");printf("n");printf(" 3 按房號排序 4 按姓名查找n");printf("n");printf(" 5 按學(xué)號查找 6 按房號查找n");printf("n");printf(" 7 按學(xué)號插入 8 按學(xué)號刪除n");printf("n");printf("n");printf(&qu

12、ot;n");printf("n");printf("提示:當輸入的數(shù)字鍵為0時,退出操作n");if(t=1)printf("請輸入數(shù)字鍵(18為操作鍵):");/18為有效數(shù)字操作鍵 scanf("%d",&f);if(f<0|f>9)system("cls"); printf("n");printf("輸入數(shù)字不對,請在原處重輸!n"); printf("n");menu();void disp()

13、/返回主界面char c;fflush(stdin);printf("n");printf("請按任意鍵進入主界面:");scanf("%c",&c);system("cls");void panduan3() /如果已無學(xué)生記錄則返回主界面 printf("n");printf("已無學(xué)生記錄n");printf("n"); disp(); menu();void shuru(linklist l) /輸入學(xué)生的信息printf("請輸

14、入姓名:");fflush(stdin); / 清空輸入緩沖區(qū),得到正確的輸入數(shù)據(jù)gets(); /輸入一行字符串(姓名)printf("請輸入學(xué)號:");scanf("%d",&stud.num);printf("請輸入房號:");scanf("%d",&stud.room);void create(linklist &l)/創(chuàng)建學(xué)生信息表if(l.length>=l.listsize) /判斷學(xué)生的人數(shù)是否超過初值,如果超過,則重新分配stu *newb

15、ase;newbase=(stu*)realloc(l.elem,(N+increase)*sizeof(stu );l.elem=newbase;l.listsize+=increase;int i=2;char ch;printf("n");printf(" *開始創(chuàng)建線性表*n");printf("n");printf("請輸入第1個學(xué)生的信息n");shuru(l); /調(diào)用輸入函數(shù)ch=getchar();strcpy(,);l.eleml.leng

16、th.num=stud.num;l.eleml.length.room=stud.room;l.length+;printf("n");printf("是否繼續(xù)輸入?<y/n>:");scanf("%c",&ch);printf("n");printf("n");while(ch='y') printf("請輸入第%d個學(xué)生的信息n",i); shuru(l);strcpy(,);l.

17、eleml.length.num=stud.num;l.eleml.length.room=stud.room;l.length+;i+;ch=getchar(); printf("n");printf("是否繼續(xù)輸入?<y/n>:");scanf("%c",&ch);printf("n");printf("n"); if(ch='n') system("cls");void sort3(linklist &l)/按房號排序(采用冒

18、泡排序)int i,j;stu temp;for(i=0;i<l.length-1;i+)for(j=i+1;j<l.length;j+)if(l.elemi.room>l.elemj.room)temp=l.elemi;l.elemi=l.elemj;l.elemj=temp;void sort2(linklist &l)/按學(xué)號排序(采用冒泡排序)int i,j;stu temp;for(i=0;i<l.length-1;i+)for(j=i+1;j<l.length;j+)if(l.elemi.num>l.elemj.num)temp=l.el

19、emi;l.elemi=l.elemj;l.elemj=temp;void sort1(linklist &l)/按姓名排序(采用冒泡排序)int i,j;stu temp;for(i=0;i<l.length-1;i+)for(j=i+1;j<l.length;j+)if(strcmp(,)>0)temp=l.elemi;l.elemi=l.elemj;l.elemj=temp;void print1(linklist &l)/打印學(xué)生信息int i;printf("n");printf(&

20、quot;姓名 學(xué)號 房號n");printf("n");for(i=0;i<l.length;i+)printf("%-15s %-3d %5dn",,l.elemi.num,l.elemi.room);void print2(linklist &l,int mid) /打印查找到的學(xué)生信息 printf("查找成功->該學(xué)生信息為:n");printf("姓名 學(xué)號 房號n");printf("n");printf("%-15s

21、 %-5d %-5dn",,l.elemmid.num,l.elemmid.room);int panduan1(char ch) /判斷是否繼續(xù)查找scanf("%c",&ch);printf("是否繼續(xù)查找?<y/n>:"); fflush(stdin);scanf("%c",&ch);if(ch='y')system("cls");return(1); elsereturn 0;int panduan2(char ch) /如果

22、學(xué)生不存在,判斷是否繼續(xù)查找scanf("%c",&ch);printf("該學(xué)生不存在,是否繼續(xù)查找?<y/n>:"); fflush(stdin);scanf("%c",&ch);if(ch='y')system("cls");return(1); elsereturn 0;void chazhao3(linklist &l)/按房號從小到大查找(采用二分查找)if(l.length=0) panduan3(); /此函數(shù)功能為:返回主界面else int l

23、ow=0,high=l.length,mid,flag=0;/flag作為標志符,為1則表示查找成功,否則沒有所要查找的學(xué)生int m;char ch;printf("n");printf("n");printf("按房號查找->請輸入要查找的房號:");scanf("%d",&m);printf("n");while(low<=high) mid=(low+high)/2;if(m=l.elemmid.room)flag=1;break;else if(m>l.ele

24、mmid.room)low=mid+1;else high=mid-1;if(flag=1) print2(l,mid);if(panduan1(ch) /調(diào)用判斷函數(shù)1chazhao3(l);else system("cls");menu();else if(panduan2(ch) /調(diào)用判斷函數(shù)2chazhao3(l); else system("cls");menu();void chazhao2(linklist &l)/按學(xué)號從小到大查找(采用二分查找) if(l.length=0) panduan3();elseint low=0,

25、high=l.length,mid,flag=0;int n;char ch;printf("n");printf("n");printf("按學(xué)號查找->請輸入要查找的學(xué)號:");scanf("%d",&n);printf("n");while(low<=high) mid=(low+high)/2;if(n=l.elemmid.num)flag=1;break;else if(n>l.elemmid.num)low=mid+1;else high=mid-1;if(

26、flag=1) print2(l,mid);if(panduan1(ch) chazhao2(l);else system("cls");menu();else if(panduan2(ch) chazhao2(l); else system("cls");menu(); void chazhao1(linklist &l)/按姓名從小到大查找(采用二分查找) if(l.length=0) panduan3();elseint low=0,high=l.length,mid,flag=0;printf("n");printf(

27、"n");printf("按姓名查找->請輸入要查找的姓名:");char a15,ch;scanf("%s",a);printf("n");while(low<=high) mid=(low+high)/2;if(strcmp(a,)=0)flag=1;break;else if(strcmp(a,)>0)low=mid+1;else high=mid-1;if(flag=1) print2(l,mid); /打印查找到的學(xué)生的信息if(p

28、anduan1(ch) chazhao1(l);else system("cls");menu();elseif(panduan2(ch)chazhao1(l);else system("cls");menu();void insert(linklist &l)/按學(xué)號從小到大插入該學(xué)生int i,j,k; char ch;printf("n");printf("插入的學(xué)生信息為:n");printf("姓名:");fflush(stdin);/ 清空輸入緩沖區(qū),得到正確的輸入數(shù)據(jù)get

29、s(); printf("學(xué)號:");scanf("%d",&stud.num);printf("房號:");scanf("%d",&stud.room);if(l.length=0)strcpy(,);l.eleml.length.num=stud.num;l.eleml.length.room=stud.room;for(i=0;i<l.length;i+) if(stud.num<l.elemi.num)k=

30、i;for(j=l.length;j>k;j-)l.elemj=l.elemj-1;strcpy(,);l.elemk.num=stud.num;l.elemk.room=stud.room;break;else strcpy(,);l.eleml.length.num=stud.num;l.eleml.length.room=stud.room;l.length+;fflush(stdin);printf("n");printf("是否繼續(xù)插入?<y/n

31、>:");scanf("%c",&ch);if(ch='y') insert(l);else system("cls");void Delete(linklist &l)/按學(xué)號刪除該學(xué)生int i,j,k=-1;char ch;printf("n");printf("n");printf("請輸入要刪除學(xué)生的學(xué)號:");scanf("%d",&stud.num);for(i=0;i<l.length;i+)if(

32、stud.num=l.elemi.num)printf("該學(xué)生的信息為:n");printf("n");printf("%-15s %-3d %7dn",,l.elemi.num,l.elemi.room);k=i;for(j=k;j<l.length-1;j+)l.elemj=l.elemj+1;printf("n");break; if(i>=l.length) printf("該學(xué)生不存在n");if(k>=0)l.length-;fflush(

33、stdin);printf("n");printf("是否繼續(xù)刪除?<y/n>:");scanf("%c",&ch);system("cls");if(ch='y') Delete(l);else system("cls");void main() /主函數(shù)linklist l; /定義線性表 linit(l); /調(diào)用初始化函數(shù)char ch;system("color a");printf("n");printf(" *歡迎進入宿舍管理查詢系統(tǒng)*n");printf("n");printf("請按任意鍵開始操作:");scanf("%c",&ch);system("cls");/將屏幕先前顯示的內(nèi)容清理掉create(l); /調(diào)用線性表創(chuàng)建函數(shù)system("cls");t=1;menu(); /調(diào)用主菜單函數(shù)while(f!=0)system("cls");switch(f)case 1: sort1(l)

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論