數據結構課程設計報告--宿舍管理查詢軟件_第1頁
數據結構課程設計報告--宿舍管理查詢軟件_第2頁
數據結構課程設計報告--宿舍管理查詢軟件_第3頁
數據結構課程設計報告--宿舍管理查詢軟件_第4頁
數據結構課程設計報告--宿舍管理查詢軟件_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、-. z數據構造課程設計宿舍管理查詢軟件班級*班學生提交日期2021 年7月24日成 績計算機與通信工程學院一、需求分析程序設計任務 為宿舍管理人員編寫一個宿舍管理查詢軟件。程序設計要求:A. 采用交互工作方式B. 建立數據文件 ,數據文件按關鍵字、*、房號進展排序(冒泡、選擇、插入排序等任選一種)查詢菜單: (用二分查找實現以下操作)A. 按查詢 B. 按*查詢 C. 按房號查詢打印任一查詢結果可以連續(xù)操作2、功能要實現交互工作方式,各項操作完畢后均應返回主菜單;系統本無任何信息數據,要建立數據文件,需開發(fā)一個信息錄入功能,即首先創(chuàng)立一個學員線性表,同時我們可以將數據暫時保存在存中,所以我們

2、未開發(fā)信息存盤功能;信息錄入后都保存在存中,用戶看不到,需要設計一個信息顯示功能,信息的顯示應該便于查閱,所以需具備按各種關鍵字顯示的功能;本系統按關鍵字、*、房號進展冒泡排序,采用二分查找方式分別實現按關鍵字、*、房號查詢功能;由于有些同學因為不同原因而離校,所以設計了刪除功能;由于有新同學入校,所以設計了插入功能;當用戶操作完畢需要退出時,我們提供了退出選項,便于使用者退出交互式工作系統。功能模塊圖流程圖輸入和輸出輸入的形式1開場創(chuàng)立線性表:按先后順序輸入20個字以,*整型,房號整型。2根據用戶所選擇的操作鍵,然后再根據程序的相應提示進展輸入。 選擇操作鍵1按排序:無輸入; 選擇操作鍵2按

3、*排序:無輸入; 選擇操作鍵3按房號排序):無輸入; 選擇操作鍵4按查找:輸入要查找的; 選擇操作鍵5按*查找:輸入要查找的*; 選擇操作鍵6按房號查找:輸入要查找的房號; 選擇操作鍵7按*插入:按照提示順序輸入要插入的學生,*,房號; 選擇操作鍵8按*刪除:輸入要刪除學生的*。輸出的形式及圍 根據用戶選擇的不同,會有不同的輸出。 選擇操作鍵1按排序:輸出以首字母排序的所有學生信息; 選擇操作鍵2按*排序:輸出按*從小到大排列的所有學生信息; 選擇操作鍵3按房號排序):輸出按房號從小到大排列的所有學生信息; 選擇操作鍵4按查找:假設查找成功,則輸出相應學生信息,假設不成功,則輸 出該學生不存在

4、; 選擇操作鍵5按*查找:假設查找成功,則輸出相應學生信息,假設不成功,則輸 出該學生不存在; 選擇操作鍵6按房號查找:假設查找成功,則輸出相應學生信息,假設不成功,則輸 出該學生不存在。 選擇操作鍵7按*插入:輸出插入后的所有學生信息; 選擇操作鍵8按*刪除:輸出所需刪除的學生信息,確認刪除后,輸出刪除后 的所有學生信息。測試數據開場錄入的數據: * 房號 備 1 102 權 6 231 周瑜 3 124正確輸入:查找的數據:6按*正確輸出:權 6 231詳細設計1、數據構造typedef struct /定義構造體成員char name20;int num; /*和房號都為整型int ro

5、om;stu;stu stud;typedef structint length; /當前長度stu *elem; /存儲空間基址int listsize; /當前分配的存儲容量linklist; 2、數據int f;f為全局變量,指選擇的操作鍵數char name20;name 為int num;num 為*int room;room 為房號int length; length 為線性表的當前長度stu *elem; elem 指示線性表的基地址int listsize;listsize為當前分配的存儲容量char c;c 為進入主界面的任意鍵char ch;ch 為判斷字符y或nint i

6、,j;在冒泡排序中,i 為外層循環(huán)次數,j 為層循環(huán)次數int i;在打印學生信息時,i作為循環(huán)變量int m;int n;int a;m,n,a在二分查找中分別代表房號,*,int i,j,k;i,j,k在按*插入中作為循環(huán)變量int i,j,k=-1;i,j,k在按*刪除中作為循環(huán)變量3、函數調用 具體函數如下:void init(linklist &l):用于線性表初始化,通過調用C語言文件操作函數來實現。void create(linklist &l):用于創(chuàng)立學生信息表,通過線性表來實現。void sort3(linklist &l):用于按房號排序,通過采用冒泡排序的算法來實現。v

7、oid sort2(linklist &l):用于按*排序,通過采用冒泡排序的算法來實現。void sort1(linklist &l):用于按排序,通過采用冒泡排序的算法來實現。void chazhao3(linklist &l):用于按房號從小到大查找,通過采用二分查找的算法來實現。void chazhao2(linklist &l):用于按*從小到大查找,通過采用二分查找的算法來實現。void chazhao1(linklist &l):用于按從小到大查找,通過采用二分查找的算法來實現。void print1(linklist &l):用于打印學生信息,通過調用文件操作函數實現。void

8、 print2(linklist &l,int mid) :用于打印查找到的學生信息,通過調用文件查找函數實現。int panduan2(char ch):用于如果學生不存在,判斷是否繼續(xù)查找,通過if語句,文件操作函數實現void panduan3() :用于如果已無學生記錄則返回主界面,通過調用其他函數和文件操作函數實現。void disp() :用于返回主界面,通過調用menu()函數實現。void menu():用于列出操作菜單,通過輸入輸出語句實現。void main() :程序操作的入口,是程序的主函數,可以按照已定義的函數調用子函數。4、主程序:int main() /主函數li

9、nklist l; /定義線性表 linit(l); /調用初始化函數char ch;system(color a);printf(n);printf( *歡送進入宿舍管理查詢系統*n);printf(n);printf(請按任意鍵開場操作:);scanf(%c,&ch);system(cls);/將屏幕先前顯示的容清理掉create(l); /調用線性表創(chuàng)立函數system(cls);t=1;menu(); /調用主菜單函數 while(f!=0)system(cls);switch(f)case 1: sort1(l); /調用按排序函數 printf(n); if(l.length=0)

10、 printf(已無學生記錄n); printf(n); disp(); menu(); elseprintf(按排序:n);print1(l);disp(); /調用返回主界面 menu(); break;case 2: sort2(l); /調用按*排序函數 printf(n); if(l.length=0) printf(已無學生記錄n);printf(n); disp(); menu(); elseprintf(按*排序:n);print1(l);disp(); menu();break;case 3: sort3(l); /調用按房號排序函數 printf(n); if(l.leng

11、th=0) printf(已無學生記錄n); printf(n); disp(); menu(); elseprintf(按房號排序:n);print1(l);disp(); menu();break; case 4:sort1(l); /先調用按排序函數進展排序 chazhao1(l); /再調用按查找函數進展二分查找 break;case 5: sort2(l); /先調用按*排序函數進展排序 chazhao2(l); /再調用按*查找函數進展二分查找 break;case 6: sort3(l); /先調用按房號排序函數進展排序 chazhao3(l); /再調用按房號查找函數進展二分查

12、找 break;case 7: sort2(l); /調用插入函數 insert(l); system(cls);printf(顯示插入后的學生信息:n);print1(l);disp(); menu(); break;case 8: Delete(l); /調用刪除函數if(l.length=0)printf(n);printf(學生記錄已被刪除完n);printf(n);disp(); menu();elseprintf(顯示刪除后的學生信息:n);print1(l);disp(); menu();break;調試分析為了防止繁瑣、改良算法,在一些函數中調用了其它的函數。如:在按、*、房號

13、查找中都調用了 panduan1(ch) 和panduan2(ch)函數。在插入和刪除模塊中,顯示學生的信息的下面總是有主界面,經過調試,運用system(cls)函數清屏后,顯示的只有學生的信息了,再按鍵即可返回主界面。本程序屢次運用了 disp()、menu()、system(cls)、fflush(stdin)等函數,經過屢次調試,已經很好的控制了顯示的學生信息與主界面的轉換。通過本次課程設計,對線性表、冒泡排序、二分查找的應用有了更深入的了解。用戶手冊首先,運行程序進入歡送進入宿舍管理查詢系統界面,然后進入線性表創(chuàng)立界面中,輸入學生的信息,創(chuàng)立好學生信息以后單擊任意鍵則進入操作界面主界

14、面,然后可按鍵進展操作。單擊數字鍵1,則為按排序 單擊數字鍵2,則為按*排序單擊數字鍵3,則為按房號排序 單擊數字鍵4,則為按查找單擊數字鍵5,則為按*查找 單擊數字鍵6,則為按*查找單擊數字鍵7,則為按*插入 單擊數字鍵8,則為按*刪除系統中有如下關鍵詞: 提示:當輸入的數字鍵為0時,退出操作;請輸入數字鍵(18為操作鍵);請按任意鍵進入主界面。測試結果歡送界面按任意鍵進入線性表的創(chuàng)立界面,并輸入數據,開場創(chuàng)立按操作鍵選擇操作按排序按*排序按房號排序按查找按*查找按房號查找按*插入按*刪除附錄源程序: /采用順序線性表解決宿舍管理問題 (C語言)*include*include*includ

15、e*define N 40 /線性表存儲空間的初始分配量*define increase 10 /線性表存儲空間的分配量增量int f,t=0; /定義全局變量typedef struct char name20;int num; /*和房號都為整型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(

16、stu );l.listsize=N;void menu()/操作菜單printf(n);printf( *請按鍵選擇操作*n);printf(n);printf(n);printf( 1 按排序 2 按*排序n);printf(n);printf( 3 按房號排序 4 按查找n);printf(n);printf( 5 按*查找 6 按房號查找n);printf(n);printf( 7 按*插入 8 按*刪除n);printf(n);printf(n);printf(n);printf(n);printf(提示:當輸入的數字鍵為0時,退出操作n);if(t=1)printf(請輸入數字鍵(

17、18為操作鍵):);/18為有效數字操作鍵 scanf(%d,&f);if(f9)system(cls); printf(n);printf(輸入數字不對,請在原處重輸!n); printf(n);menu();void disp() /返回主界面char c;fflush(stdin);printf(n);printf(請按任意鍵進入主界面:);scanf(%c,&c);system(cls);void panduan3() /如果已無學生記錄則返回主界面 printf(n);printf(已無學生記錄n);printf(n); disp(); menu();void shuru(linkl

18、ist l) /輸入學生的信息printf(請輸入:);fflush(stdin); / 清空輸入緩沖區(qū),得到正確的輸入數據gets(); /輸入一行字符串printf(請輸入*:);scanf(%d,&stud.num);printf(請輸入房號:);scanf(%d,&stud.room);void create(linklist &l)/創(chuàng)立學生信息表if(l.length=l.listsize) /判斷學生的人數是否超過初值,如果超過,則重新分配stu *newbase;newbase=(stu*)realloc(l.elem,(N+increase)*sizeof(

19、stu );l.elem=newbase;l.listsize+=increase;int i=2;char ch;printf(n);printf( *開場創(chuàng)立線性表*n);printf(n);printf(請輸入第1個學生的信息n);shuru(l); /調用輸入函數ch=getchar();strcpy(,);l.eleml.length.num=stud.num;l.eleml.length.room=stud.room;l.length+;printf(n);printf(是否繼續(xù)輸入:);scanf(%c,&ch);print

20、f(n);printf(n);while(ch=y) printf(請輸入第%d個學生的信息n,i); shuru(l);strcpy(,);l.eleml.length.num=stud.num;l.eleml.length.room=stud.room;l.length+;i+;ch=getchar(); printf(n);printf(是否繼續(xù)輸入:);scanf(%c,&ch);printf(n);printf(n); if(ch=n) system(cls);void sort3(linklist &l)/按房號排序采用冒泡排

21、序int i,j;stu temp;for(i=0;il.length-1;i+)for(j=i+1;jl.elemj.room)temp=l.elemi;l.elemi=l.elemj;l.elemj=temp;void sort2(linklist &l)/按*排序采用冒泡排序int i,j;stu temp;for(i=0;il.length-1;i+)for(j=i+1;jl.elemj.num)temp=l.elemi;l.elemi=l.elemj;l.elemj=temp;void sort1(linklist &l)/按排序采用冒泡排序int i,j;stu temp;for(

22、i=0;il.length-1;i+)for(j=i+1;j0)temp=l.elemi;l.elemi=l.elemj;l.elemj=temp;void print1(linklist &l)/打印學生信息int i;printf(n);printf( *房號n);printf(n);for(i=0;i該學生信息為:n);printf( * 房號n);printf(n);printf(%-15s %-5d %-5dn,,l.elemmid.num,l.elemmid.room);int panduan1(char ch) /判斷是否繼續(xù)查找scanf(%c,&c

23、h);printf(是否繼續(xù)查找:); fflush(stdin);scanf(%c,&ch);if(ch=y)system(cls);return(1); elsereturn 0;int panduan2(char ch) /如果學生不存在,判斷是否繼續(xù)查找scanf(%c,&ch);printf(該學生不存在,是否繼續(xù)查找:); fflush(stdin);scanf(%c,&ch);if(ch=y)system(cls);return(1); elsereturn 0;void chazhao3(linklist &l)/按房號從小到大查找采用二分查找if(l.length=0) pa

24、nduan3(); /此函數功能為:返回主界面else int low=0,high=l.length,mid,flag=0;/flag作為標志符,為1則表示查找成功,否則沒有所要查找的學生int m;char ch;printf(n);printf(n);printf(按房號查找-請輸入要查找的房號:);scanf(%d,&m);printf(n);while(lowl.elemmid.room)low=mid+1;else high=mid-1;if(flag=1) print2(l,mid);if(panduan1(ch) /調用判斷函數1chazhao3(l);else system(

25、cls);menu();else if(panduan2(ch) /調用判斷函數2chazhao3(l); else system(cls);menu();void chazhao2(linklist &l)/按*從小到大查找采用二分查找 if(l.length=0) panduan3();elseint low=0,high=l.length,mid,flag=0;int n;char ch;printf(n);printf(n);printf(按*查找-請輸入要查找的*:);scanf(%d,&n);printf(n);while(lowl.elemmid.num)low=mid+1;el

26、se high=mid-1;if(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(n);printf(按查找-請輸入要查找的:);cha

27、r a15,ch;scanf(%s,a);printf(n);while(low0)low=mid+1;else high=mid-1;if(flag=1) print2(l,mid); /打印查找到的學生的信息if(panduan1(ch) chazhao1(l);else system(cls);menu();elseif(panduan2(ch)chazhao1(l);else system(cls);menu();void insert(linklist &l)/按*從小到大插入該學生int i,j,k; char ch;printf(n);printf(插入的學生信息為:n);pri

28、ntf(:);fflush(stdin);/ 清空輸入緩沖區(qū),得到正確的輸入數據gets(); printf(*:);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;il.length;i+) if(stud.numk;j-)l.elemj=l.elemj-1;strcpy(l.elem

29、,);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ù)插入:);scanf(%c,&ch);if(ch=y) insert(l);else system(cls);void Delete(linklist &l)/按*刪除該學

30、生int i,j,k=-1;char ch;printf(n);printf(n);printf(請輸入要刪除學生的*:);scanf(%d,&stud.num);for(i=0;il.length;i+)if(stud.num=l.elemi.num)printf(該學生的信息為:n);printf(n);printf(%-15s %-3d %7dn,,l.elemi.num,l.elemi.room);k=i;for(j=k;j=l.length) printf(該學生不存在n);if(k=0)l.length-;fflush(stdin);printf(n);printf(是否繼續(xù)刪除:);scanf(%c,&ch);system(cls);if(ch=y) Delete(l);else system(cls);int main() /主函數linklist l; /定義線性表 linit(l); /調用初始化函數char ch;system(color a);printf(n);printf( *歡送進入宿舍管理查詢系統*n);printf(n);printf(請按任意鍵開場操作:);scanf(%c,&ch);system(cls);/將屏幕先前顯示的容清理掉create(l); /調用線性表創(chuàng)立函數system(cls)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論