C++宿舍管理系統(tǒng)課程設(shè)計(jì)_第1頁
C++宿舍管理系統(tǒng)課程設(shè)計(jì)_第2頁
C++宿舍管理系統(tǒng)課程設(shè)計(jì)_第3頁
C++宿舍管理系統(tǒng)課程設(shè)計(jì)_第4頁
C++宿舍管理系統(tǒng)課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

河南城建學(xué)院課程設(shè)計(jì)報告書專業(yè):信息管理與信息系統(tǒng)課程設(shè)計(jì)名稱:《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)》題目:宿舍管理查詢軟件班級:信管2班設(shè)計(jì)者學(xué)號:083215217設(shè)計(jì)者姓名:張凱迪同組人員:姚颯颯指導(dǎo)老師:張延紅崔雪冰楊斌完成時間:2016年6月12日摘要在校學(xué)生的信息管理是校園管理中的一個重要內(nèi)容,隨著國家擴(kuò)招政策的繼續(xù)實(shí)施,學(xué)生數(shù)量也不斷增加、信息的不斷細(xì)化、各個行業(yè)間聯(lián)系的不斷密切,對人事管理的要求也不斷提高。如何記錄和管理好學(xué)生的信息,對學(xué)生實(shí)施高效的宏觀管理,對學(xué)生出入宿舍以及學(xué)生注入和遷出的信息的靈活的記錄及更新,是一項(xiàng)繁重而艱巨的任務(wù)。關(guān)鍵詞:C++;數(shù)據(jù)庫表;宿舍信息查詢;宿舍信息管理 目錄104目錄 132340第一章開發(fā)環(huán)境和開發(fā)工具 197201.1C++簡介 1293771.2開發(fā)背景 124261.3開發(fā)環(huán)境 113701第二章算法思想 2272492.1系統(tǒng)需求分析 2172722.2系統(tǒng)總體設(shè)計(jì) 2102882.2.1系統(tǒng)設(shè)計(jì)目標(biāo) 2258752.2.2開發(fā)設(shè)計(jì)思想 3322462.2.3系統(tǒng)功能模塊設(shè)計(jì) 3211482.3算法思想描述 53305第三章算法實(shí)現(xiàn) 6129763.1數(shù)據(jù)結(jié)構(gòu) 628173.2程序模塊 635983.2.1數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) 6261383.3各模塊之間的調(diào)用關(guān)系 7273463.3.1模塊劃分 7257973.3.2操作實(shí)現(xiàn) 1047443.4源程序代碼 1823197第四章測試與分析 32250124.1使用方法 32297244.2測試數(shù)據(jù)選擇 32135124.3測試結(jié)果分析 3232331總結(jié) 3826014心得體會 3928865參考文獻(xiàn) 40第一章開發(fā)環(huán)境和開發(fā)工具1.1C++簡介C++標(biāo)準(zhǔn)可分為兩部分,C++語言本身和C++標(biāo)準(zhǔn)庫。C++標(biāo)準(zhǔn)庫對于VisualC++是相當(dāng)新的,實(shí)際上微軟只是在發(fā)布VisualC++5.0時去除了一些“bug”。標(biāo)準(zhǔn)庫提供了標(biāo)準(zhǔn)的輸入/輸出、字符串、容器(如矢量、列表和映射等)、非數(shù)值運(yùn)算(如排序、搜索和合并等)和對數(shù)值計(jì)算的支持。應(yīng)該說,C/C++包含了相對少的關(guān)鍵字,而且很多最有用的函數(shù)都來源于庫,C++標(biāo)準(zhǔn)庫實(shí)現(xiàn)容器和算法的部分就是STL。STL是數(shù)據(jù)結(jié)構(gòu)和算法的一個框架,數(shù)據(jù)結(jié)構(gòu)包括矢量、列表和映射等,算法包括這些數(shù)據(jù)結(jié)構(gòu)的查找、拷貝和排序等。1994年7月,ANSI/ISOC++標(biāo)準(zhǔn)委員會投票決定接受STL為C++標(biāo)準(zhǔn)庫的一部分,這個建議是根據(jù)AlexStepanov、MengLee和DavidMusser這三人的編程和軟件庫研究提出的。STL的產(chǎn)生是為了滿足通用性的設(shè)計(jì)目標(biāo),而不是為了提高性能。1.2開發(fā)背景隨著科學(xué)技術(shù)的不斷發(fā)展,計(jì)算機(jī)科學(xué)日漸成熟,其強(qiáng)大的功能已為人們所深刻認(rèn)識,它己進(jìn)入人類社會的各個領(lǐng)域并發(fā)揮著越來越重要的作用。采用計(jì)算機(jī)進(jìn)行信息化管理已成為衡量企業(yè)管理科學(xué)化和現(xiàn)代化的重要標(biāo)志,而人事管理的全面自動化、信息化則是其中重要的組成部分。人事管理的好壞對于企業(yè)的決策者和管理者來說都至關(guān)重要,在很大程度上影響著企業(yè)的經(jīng)濟(jì)效益和社會效益。因此,本文所研究的人事管理信息系統(tǒng)具有一定的使用價值和現(xiàn)實(shí)意義。1.3開發(fā)環(huán)境本文所采用的開發(fā)環(huán)境主要是在一般的PC硬件環(huán)境和WindouwsVista/2003/XP系統(tǒng)由Visual++6.0編寫而成,在用到MicrosoftVisualC++6.0中c語言的情況下,對于查詢采用了逐個查詢法,程序通過調(diào)試運(yùn)行實(shí)現(xiàn)了設(shè)計(jì)目標(biāo),并且經(jīng)過適當(dāng)完善后,將可以應(yīng)用在實(shí)際中解決問題。第二章算法思想2.1系統(tǒng)需求分析為了實(shí)現(xiàn)提高高校宿舍管理部門的工作效率,充分利用資源,減少少不必要的人力,物力,和財力的支出,方便宿舍管理部門的工作人員全面地掌握學(xué)生住宿情況等目的,為宿舍管理部門開發(fā)設(shè)計(jì)專用系統(tǒng)軟件—宿舍管理軟件來進(jìn)行管理學(xué)生宿舍信息,使學(xué)生宿舍信息實(shí)現(xiàn)標(biāo)準(zhǔn)化的管理和規(guī)范化的制度是十分必要的。該程序應(yīng)該具有以下功能:(1)學(xué)生的入住信息錄入;(2)輸出學(xué)生入住信息(分別按姓名,學(xué)號,房間號有序);(3)按給定學(xué)號,姓名,房間號查詢;(4)插入新增的學(xué)生信息;(5)按學(xué)號刪除學(xué)生信息。該程序執(zhí)行的全過程大致為:(1)按照提示輸入所需要的條件;(2)選擇要實(shí)現(xiàn)的功能;(3)顯示執(zhí)行后的結(jié)果2.2系統(tǒng)總體設(shè)計(jì)2.2.1系統(tǒng)設(shè)計(jì)目標(biāo)任務(wù):為宿舍管理人員編寫一個宿舍管理查詢軟件,程序設(shè)計(jì)要求:(1)采用交互工作方式(2)建立數(shù)據(jù)文件,數(shù)據(jù)文件按關(guān)鍵字(姓名、學(xué)號、房號)進(jìn)行排序(冒泡、選擇、插入排序等任選一種)查詢菜單:(用二分查找實(shí)現(xiàn)以下操作)(3)按姓名查詢(4)按學(xué)號查詢(5)按房號查詢(6)打印任一查詢結(jié)果(可以連續(xù)操作)2.2.2開發(fā)設(shè)計(jì)思想基于以上系統(tǒng)設(shè)計(jì)目標(biāo),本文在開發(fā)人事管理信息系統(tǒng)時遵循了以下開發(fā)設(shè)計(jì)思想:●采用現(xiàn)有的軟硬件環(huán)境及先進(jìn)的管理系統(tǒng)開發(fā)方案,從而達(dá)到充分利用現(xiàn)有資源,提高系統(tǒng)開發(fā)水平和應(yīng)用效果的目的。●盡量達(dá)到操作過程中的直觀、方便、實(shí)用、安全等要求。●系統(tǒng)采用模塊化程序設(shè)計(jì)方法,既便于系統(tǒng)功能的各種組合和修改,又便于未參與開發(fā)的技術(shù)維護(hù)人員補(bǔ)充、維護(hù)?!裣到y(tǒng)應(yīng)具備數(shù)據(jù)庫維護(hù)功能,及時根據(jù)用戶需求進(jìn)行數(shù)據(jù)的添加、查找、顯示、排序等操作。2.2.3系統(tǒng)功能模塊設(shè)計(jì)本系統(tǒng)分為八個模塊:如圖2-1所示的系統(tǒng)功能模塊圖。如圖2-2系統(tǒng)功能模塊圖。2-1系統(tǒng)模塊圖如下請按選擇操作1按姓名排序2按學(xué)號排序3按房號排序4按姓名查找5按學(xué)號查找6按房號查找7按學(xué)號插入8按學(xué)號刪除2-2系統(tǒng)功能圖如下2-2系統(tǒng)功能圖如下輸入信息輸出界面選擇操作選擇1選擇2選擇3選擇4選擇5選擇6選擇7選擇8選擇11按姓名排序顯示按學(xué)號排序顯示按房號排序并顯示按姓名查找并顯示按學(xué)號查找并顯示按房號排序并顯示按學(xué)號插入按學(xué)號刪除選擇0結(jié)束系統(tǒng)退出yyyyyyyynnnnnnnnny2.3算法思想描述該程序的由多種函數(shù)實(shí)現(xiàn),每個函數(shù)具有不同的功能,主要有主菜單函數(shù),插入功能子菜單函數(shù),查找功能子菜單函數(shù),學(xué)生信息錄入函數(shù),顯示函數(shù),排序函數(shù),插入函數(shù)以及查找函數(shù)。在每個區(qū)域中會調(diào)用不同的函數(shù)來實(shí)現(xiàn)主要的功能。比如,在學(xué)生顯示這個功能里調(diào)用顯示函數(shù);在插入功能里調(diào)用子菜單函數(shù);在顯示信息時調(diào)用排序函數(shù)先對需要輸出的信心進(jìn)行排序,然后再輸出;在查找功能里會調(diào)用查找函數(shù)來進(jìn)行查找,包括按照性別,學(xué)號,姓名,房間號等查詢。而最主要的函數(shù)有:<1>插入函數(shù),它用尾插法來實(shí)現(xiàn);<2>排序函數(shù),用快速排序函數(shù)來實(shí)現(xiàn);<3>查找函數(shù),用逐個查找法;第三章算法實(shí)現(xiàn)3.1數(shù)據(jù)結(jié)構(gòu)選擇的數(shù)據(jù)結(jié)構(gòu)為:#include<stdio.h>#include<stdlib.h>#include<string.h>數(shù)據(jù)結(jié)構(gòu)采用鏈?zhǔn)酱鎯?,所有程序從主函?shù)voidmain()開始,首先調(diào)用menu()主菜單函數(shù),在menu()函數(shù)中依次增加各種功能,然后通過switch…case語句分別選擇錄入,顯示,插入,查找,退出功能1,選擇錄入功能時調(diào)用shuru()函數(shù)錄入信息;2選擇顯示功能時,首先用 linklistl()表頭顯示函數(shù),然后分別調(diào)用sort1(linklist&l)sort2(linklist&l),sort3(linklist&l),函數(shù)根據(jù)學(xué)生學(xué)號,學(xué)生宿舍號,學(xué)生姓名關(guān)鍵字進(jìn)行冒泡排序,然后顯示3選擇查詢功能時首先調(diào)用insert(linklist&l)函數(shù)進(jìn)行信息插入,然后調(diào)用linklistl()表頭顯示函數(shù),最后調(diào)用print1(l)函數(shù)顯示信息并對其進(jìn)行排序4選擇查詢功能時,首先調(diào)用menu5()顯示查詢的菜單,然后分別調(diào)用chazhao1(linklist&l),chazhao2(linklist&l),chazhao3(linklist&l),以學(xué)生學(xué)號,姓名,宿舍號為關(guān)鍵字進(jìn)行查找,最后調(diào)用system()顯示函數(shù)退出功能。3.2程序模塊3.2.1數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu):線性存儲結(jié)構(gòu):鏈?zhǔn)?include<stdio.h>//線性表的靜態(tài)單鏈表表示存儲結(jié)構(gòu)#include<string.h>//定義一個存儲學(xué)生相關(guān)信息的結(jié)構(gòu)體#defineN10;//鏈表的最大長度voidmain()//主函數(shù){ linklistl;//定義線性表l init(l);//調(diào)用初始化函數(shù) charch; system("colora"); printf("\n"); printf("*************************歡迎進(jìn)入宿舍管理查詢系統(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ù)voidinit(linklist&l)//線性表初始化voidmenu()//操作菜單voiddisp()//返回主界面voidpanduan3()//如果已無學(xué)生記錄則返回主界面3.3各模塊之間的調(diào)用關(guān)系3.3.1模塊劃分voidshuru(linklistl)//輸入學(xué)生的信息voidcreate(linklist&l)//創(chuàng)建學(xué)生信息表shuru(l);//調(diào)用輸入函數(shù)voidsort3(linklist&l)//按房號排序(采用冒泡排序)voidsort2(linklist&l)//按學(xué)號排序(采用冒泡排序)voidsort1(linklist&l)//按姓名排序(采用冒泡排序) voidprint1(linklist&l)//打印學(xué)生信息voidprint2(linklist&l,intmid)//打印查找到的學(xué)生信息 intpanduan1(charch)//判斷是否繼續(xù)查找 intpanduan2(charch)//如果學(xué)生不存在,判斷是否繼續(xù)查找 voidchazhao3(linklist&l)//按房號從小到大查找(采用二分查找)voidchazhao2(linklist&l)//按學(xué)號從小到大查找(采用二分查找)voidchazhao1(linklist&l)//按姓名從小到大查找(采用二分查找)voidinsert(linklist&l)//按學(xué)號從小到大插入該學(xué)生voidDelete(linklist&l)//按學(xué)號刪除該學(xué)生調(diào)用函數(shù)的實(shí)現(xiàn):switch(f) { case1:sort1(l);//調(diào)用按姓名排序函數(shù) printf("\n"); if(l.length==0) { printf("已無學(xué)生記錄\n"); printf("\n"); disp(); menu(); } else { printf("按姓名排序:\n"); print1(l); disp();//調(diào)用返回主界面 menu(); } break; case2:sort2(l);//調(diào)用按學(xué)號排序函數(shù) printf("\n"); if(l.length==0) { printf("已無學(xué)生記錄\n"); printf("\n"); disp(); menu(); } else { printf("按學(xué)號排序:\n"); print1(l); disp(); menu(); }break; case3:sort3(l);//調(diào)用按房號排序函數(shù) printf("\n"); if(l.length==0) { printf("已無學(xué)生記錄\n"); printf("\n"); disp(); menu(); } else { printf("按房號排序:\n"); print1(l); disp(); menu(); }break; case4:sort1(l);//先調(diào)用按姓名排序函數(shù)進(jìn)行排序 chazhao1(l);//再調(diào)用按姓名查找函數(shù)進(jìn)行(二分)查找 break; case5:sort2(l);//先調(diào)用按學(xué)號排序函數(shù)進(jìn)行排序 chazhao2(l);//再調(diào)用按學(xué)號查找函數(shù)進(jìn)行(二分)查找 break; case6:sort3(l);//先調(diào)用按房號排序函數(shù)進(jìn)行排序 chazhao3(l);//再調(diào)用按房號查找函數(shù)進(jìn)行(二分)查找 break; case7:sort2(l);//調(diào)用插入函數(shù) insert(l); system("cls"); printf("顯示插入后的學(xué)生信息:\n");print1(l); disp(); menu(); break; case8:Delete(l);//調(diào)用刪除函數(shù) if(l.length==0) { printf("\n"); printf("學(xué)生記錄已被刪除完\n"); printf("\n"); disp(); menu(); } else { printf("顯示刪除后的學(xué)生信息:\n"); print1(l); disp(); menu(); } break; } }}3.3.2操作實(shí)現(xiàn)錄入學(xué)生信息voidshuru(linklistl)//輸入學(xué)生的信息{ printf("請輸入姓名:"); fflush(stdin);//清空輸入緩沖區(qū),得到正確的輸入數(shù)據(jù) gets();//輸入一行字符串(姓名)printf("請輸入性別:");//hnnn fflush(stdin);//清空輸入緩沖區(qū),得到正確的輸入數(shù)據(jù)、、、 gets(stud.sex);//輸入一行字符串(性別)、、、、 printf("請輸入學(xué)號:"); scanf("%d",&stud.num); printf("請輸入房號:"); scanf("%d",&stud.room);}voidcreate(linklist&l)//創(chuàng)建學(xué)生信息表{ if(l.length>=l.listsize)//判斷學(xué)生的人數(shù)是否超過初值,如果超過,則重新分配 { stu*newbase; newbase=(stu*)realloc(l.elem,(N+increase)*sizeof(stu)); l.elem=newbase; l.listsize+=increase; } inti=2; charch; printf("\n"); printf("**************************開始創(chuàng)建線性表***************************\n");printf("\n"); printf("請輸入第1個學(xué)生的信息\n"); shuru(l);//調(diào)用輸入函數(shù) ch=getchar(); strcpy(l.elem[l.length].name,); l.elem[l.length].num=stud.num; l.elem[l.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.elem[l.length].name,); l.elem[l.length].num=stud.num; l.elem[l.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");}顯示學(xué)生信息voidprint1(linklist&l)//顯示并打印學(xué)生信息{ inti; printf("\n"); printf("姓名學(xué)號房號\n");printf("\n"); for(i=0;i<l.length;i++) printf("%-15s%-3d%5d\n",l.elem[i].name,l.elem[i].num,l.elem[i].room);}學(xué)生信息插入voidinsert(linklist&l)//按學(xué)號從小到大插入該學(xué)生{ inti,j,k; charch; printf("\n"); printf("插入的學(xué)生信息為:\n"); printf("姓名:"); fflush(stdin);//清空輸入緩沖區(qū),得到正確的輸入數(shù)據(jù) gets(); printf("學(xué)號:"); scanf("%d",&stud.num); printf("房號:"); scanf("%d",&stud.room); if(l.length==0) { strcpy(l.elem[l.length].name,); l.elem[l.length].num=stud.num; l.elem[l.length].room=stud.room; } for(i=0;i<l.length;i++) { if(stud.num<l.elem[i].num) { k=i; for(j=l.length;j>k;j--) l.elem[j]=l.elem[j-1]; strcpy(l.elem[k].name,); l.elem[k].num=stud.num; l.elem[k].room=stud.room; break; } else { strcpy(l.elem[l.length].name,); l.elem[l.length].num=stud.num; l.elem[l.length].room=stud.room; } } l.length++; fflush(stdin); printf("\n"); printf("是否繼續(xù)插入?<y/n>:"); scanf("%c",&ch); if(ch=='y')insert(l); elsesystem("cls");}學(xué)生信息排序voidsort3(linklist&l)//按房號排序(采用冒泡排序){ inti,j; stutemp; for(i=0;i<l.length-1;i++) for(j=i+1;j<l.length;j++) if(l.elem[i].room>l.elem[j].room) { temp=l.elem[i]; l.elem[i]=l.elem[j]; l.elem[j]=temp; }}voidsort2(linklist&l)//按學(xué)號排序(采用冒泡排序){ inti,j; stutemp; for(i=0;i<l.length-1;i++) for(j=i+1;j<l.length;j++) if(l.elem[i].num>l.elem[j].num) { temp=l.elem[i]; l.elem[i]=l.elem[j]; l.elem[j]=temp; }}voidsort1(linklist&l)//按姓名排序(采用冒泡排序){ inti,j; stutemp; for(i=0;i<l.length-1;i++) for(j=i+1;j<l.length;j++) if(strcmp(l.elem[i].name,l.elem[j].name)>0) { temp=l.elem[i]; l.elem[i]=l.elem[j]; l.elem[j]=temp; }學(xué)生信息查找voidchazhao3(linklist&l)//按房號從小到大查找(采用二分查找){ if(l.length==0)panduan3();//此函數(shù)功能為:返回主界面 else { intlow=0,high=l.length,mid,flag=0;//flag作為標(biāo)志符,為1則表示查找成功,否則沒有所要查找的學(xué)生 intm; charch; printf("\n");printf("\n"); printf("按房號查找>請輸入要查找的房號:"); scanf("%d",&m); printf("\n"); while(low<=high) { mid=(low+high)/2; if(m==l.elem[mid].room) { flag=1; break; } elseif(m>l.elem[mid].room) low=mid+1; else high=mid-1; } if(flag==1) { print2(l,mid); if(panduan1(ch))//調(diào)用判斷函數(shù)1 chazhao3(l); else { system("cls"); menu(); } } else { if(panduan2(ch))//調(diào)用判斷函數(shù)2 chazhao3(l); else { system("cls"); menu(); } } }}voidchazhao2(linklist&l)//按學(xué)號從小到大查找(采用二分查找){if(l.length==0)panduan3(); else { intlow=0,high=l.length,mid,flag=0; intn; charch; printf("\n");printf("\n"); printf("按學(xué)號查找>請輸入要查找的學(xué)號:"); scanf("%d",&n); printf("\n"); while(low<=high) { mid=(low+high)/2; if(n==l.elem[mid].num) { flag=1; break; } elseif(n>l.elem[mid].num) low=mid+1; else 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(); } } }}voidchazhao1(linklist&l)//按姓名從小到大查找(采用二分查找){ if(l.length==0)panduan3(); else { intlow=0,high=l.length,mid,flag=0; printf("\n");printf("\n"); printf("按姓名查找>請輸入要查找的姓名:"); chara[15],ch; scanf("%s",a); printf("\n"); while(low<=high) { mid=(low+high)/2; if(strcmp(a,l.elem[mid].name)==0) { flag=1; break; } elseif(strcmp(a,l.elem[mid].name)>0) low=mid+1; else high=mid-1; }刪除操作voidDelete(linklist&l)//按學(xué)號刪除該學(xué)生{ inti,j,k=-1; charch; printf("\n");printf("\n"); printf("請輸入要刪除學(xué)生的學(xué)號:"); scanf("%d",&stud.num); for(i=0;i<l.length;i++) { if(stud.num==l.elem[i].num) { printf("該學(xué)生的信息為:\n");printf("\n"); printf("%-15s%-3d%7d\n",l.elem[i].name,l.elem[i].num,l.elem[i].room); k=i; for(j=k;j<l.length-1;j++) l.elem[j]=l.elem[j+1]; printf("\n"); break; } } if(i>=l.length)printf("該學(xué)生不存在\n"); if(k>=0)l.length--; fflush(stdin); printf("\n"); printf("是否繼續(xù)刪除?<y/n>:"); scanf("%c",&ch); system("cls"); if(ch=='y')Delete(l); elsesystem("cls"); }3.4源程序代碼#include<stdio.h>//c語言頭文件,包含一些函數(shù),如scanf,printfK可直接調(diào)用#include<stdlib.h>//定義五種類型、一些宏和通用工具函數(shù)。類型例如size_等#include<string.h>//包含字符串處理函數(shù)的頭文件#defineN40//線性表存儲空間的初始分配量#defineincrease10//線性表存儲空間的分配量增量intf,t=0;//定義全局變量typedefstruct//定義新結(jié)構(gòu){ charname[20];charsex[20]; intnum;//學(xué)號和房號都為整型 introom;}stu;stustud;typedefstruct//二叉樹的二叉鏈表存儲表示{ intlength;//當(dāng)前長度 stu*elem;//存儲空間基址 intlistsize;//當(dāng)前分配的存儲容量}linklist;voidinit(linklist&l)//線性表初始化{ l.length=0; l.elem=(stu*)malloc(N*sizeof(stu));//將malloc返回的內(nèi)存空間地址轉(zhuǎn)成大小為結(jié)構(gòu)體stu的大小的空間,再賦給L.elem. l.listsize=N;}voidmenu()//操作菜單{ printf("\n"); printf("***************請按鍵選擇操作****************\n"); printf("\n");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("\n"); printf("\n"); printf("提示:當(dāng)輸入的數(shù)字鍵為0時,退出操作\n"); if(t==1) { printf("請輸入數(shù)字鍵(1~8為操作鍵):");//1~8為有效數(shù)字操作鍵 scanf("%d",&f); if(f<0||f>9) { system("cls"); printf("\n"); printf("輸入數(shù)字不對,請?jiān)谠幹剌?\n");printf("\n"); menu(); } } }voiddisp()//返回主界面{ charc; fflush(stdin); printf("\n"); printf("請按任意鍵進(jìn)入主界面:"); scanf("%c",&c); system("cls");}voidpanduan3()//如果已無學(xué)生記錄則返回主界面{ printf("\n"); printf("已無學(xué)生記錄\n"); printf("\n"); disp(); menu();}voidshuru(linklistl)//輸入學(xué)生的信息{ printf("請輸入姓名:"); fflush(stdin);//清空輸入緩沖區(qū),得到正確的輸入數(shù)據(jù) gets();//輸入一行字符串(姓名)printf("請輸入性別:");//輸出文字 fflush(stdin);//清空輸入緩沖區(qū),得到正確的輸入數(shù)據(jù)、、、 gets(stud.sex);//輸入一行字符串(性別)、、、、 printf("請輸入學(xué)號:"); scanf("%d",&stud.num); printf("請輸入房號:"); scanf("%d",&stud.room);}voidcreate(linklist&l)//創(chuàng)建學(xué)生信息表{ if(l.length>=l.listsize)//判斷學(xué)生的人數(shù)是否超過初值,如果超過,則重新分配 { stu*newbase; newbase=(stu*)realloc(l.elem,(N+increase)*sizeof(stu));//重新分配存儲器塊 l.elem=newbase; l.listsize+=increase; } inti=2; charch; printf("\n"); printf("**************************開始創(chuàng)建線性表***************************\n");printf("\n"); printf("請輸入第1個學(xué)生的信息\n"); shuru(l);//調(diào)用輸入函數(shù) ch=getchar(); strcpy(l.elem[l.length].name,);//指針復(fù)制 l.elem[l.length].num=stud.num; l.elem[l.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.elem[l.length].name,); l.elem[l.length].num=stud.num; l.elem[l.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"); }voidsort3(linklist&l)//按房號排序(采用冒泡排序){ inti,j; stutemp; for(i=0;i<l.length-1;i++) for(j=i+1;j<l.length;j++) if(l.elem[i].room>l.elem[j].room) { temp=l.elem[i]; l.elem[i]=l.elem[j]; l.elem[j]=temp; }}voidsort2(linklist&l)//按學(xué)號排序(采用冒泡排序){ inti,j; stutemp; for(i=0;i<l.length-1;i++) for(j=i+1;j<l.length;j++) if(l.elem[i].num>l.elem[j].num) { temp=l.elem[i]; l.elem[i]=l.elem[j]; l.elem[j]=temp; }}voidsort1(linklist&l)//按姓名排序(采用冒泡排序){ inti,j; stutemp; for(i=0;i<l.length-1;i++) for(j=i+1;j<l.length;j++) if(strcmp(l.elem[i].name,l.elem[j].name)>0) { temp=l.elem[i]; l.elem[i]=l.elem[j]; l.elem[j]=temp; } }voidprint1(linklist&l)//打印學(xué)生信息{ inti; printf("\n"); printf("姓名學(xué)號房號\n");printf("\n"); for(i=0;i<l.length;i++) printf("%-15s%-3d%5d\n",l.elem[i].name,l.elem[i].num,l.elem[i].room);}voidprint2(linklist&l,intmid)//打印查找到的學(xué)生信息{ printf("查找成功>該學(xué)生信息為:\n"); printf("姓名學(xué)號房號\n");printf("\n"); printf("%-15s%-5d%-5d\n",l.elem[mid].name,l.elem[mid].num,l.elem[mid].room);}intpanduan1(charch)//判斷是否繼續(xù)查找{ scanf("%c",&ch); printf("是否繼續(xù)查找?<y/n>:"); fflush(stdin); scanf("%c",&ch); if(ch=='y') { system("cls"); return(1); } else return0;}intpanduan2(charch)//如果學(xué)生不存在,判斷是否繼續(xù)查找{ scanf("%c",&ch); printf("該學(xué)生不存在,是否繼續(xù)查找?<y/n>:"); fflush(stdin); scanf("%c",&ch); if(ch=='y') { system("cls"); return(1); } else return0;}voidchazhao3(linklist&l)//按房號從小到大查找(采用二分查找){ if(l.length==0)panduan3();//此函數(shù)功能為:返回主界面 else { intlow=0,high=l.length,mid,flag=0;//flag作為標(biāo)志符,為1則表示查找成功,否則沒有所要查找的學(xué)生 intm; charch; printf("\n");printf("\n"); printf("按房號查找>請輸入要查找的房號:"); scanf("%d",&m); printf("\n"); while(low<=high) { mid=(low+high)/2; if(m==l.elem[mid].room) { flag=1; break; } elseif(m>l.elem[mid].room) low=mid+1; else high=mid-1; } if(flag==1) { print2(l,mid); if(panduan1(ch))//調(diào)用判斷函數(shù)1 chazhao3(l); else { system("cls"); menu(); } } else { if(panduan2(ch))//調(diào)用判斷函數(shù)2 chazhao3(l); else { system("cls");//調(diào)用系統(tǒng)命令cls完成清屏 menu(); } } }}voidchazhao2(linklist&l)//按學(xué)號從小到大查找(采用二分查找){if(l.length==0)panduan3(); else { intlow=0,high=l.length,mid,flag=0; intn; charch; printf("\n");printf("\n"); printf("按學(xué)號查找>請輸入要查找的學(xué)號:"); scanf("%d",&n); printf("\n"); while(low<=high) { mid=(low+high)/2; if(n==l.elem[mid].num) { flag=1; break; } elseif(n>l.elem[mid].num) low=mid+1; else 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(); } } }}voidchazhao1(linklist&l)//按姓名從小到大查找(采用二分查找){ if(l.length==0)panduan3(); else { intlow=0,high=l.length,mid,flag=0; printf("\n");printf("\n"); printf("按姓名查找>請輸入要查找的姓名:"); chara[15],ch; scanf("%s",a); printf("\n"); while(low<=high) { mid=(low+high)/2; if(strcmp(a,l.elem[mid].name)==0) { flag=1; break; } elseif(strcmp(a,l.elem[mid].name)>0) low=mid+1; else high=mid-1; } if(flag==1) { print2(l,mid);//打印查找到的學(xué)生的信息 if(panduan1(ch))chazhao1(l); else { system("cls"); menu(); } } else { if(panduan2(ch)) chazhao1(l); else { system("cls"); menu(); } } }}voidinsert(linklist&l)//按學(xué)號從小到大插入該學(xué)生{ inti,j,k; charch; printf("\n"); printf("插入的學(xué)生信息為:\n"); printf("姓名:"); fflush(stdin);//清空輸入緩沖區(qū),得到正確的輸入數(shù)據(jù) gets(); printf("學(xué)號:"); scanf("%d",&stud.num); printf("房號:"); scanf("%d",&stud.room); if(l.length==0) { strcpy(l.elem[l.length].name,); l.elem[l.length].num=stud.num; l.elem[l.length].room=stud.room; } for(i=0;i<l.length;i++) { if(stud.num<l.elem[i].num) { k=i; for(j=l.length;j>k;j--) l.elem[j]=l.elem[j-1]; strcpy(l.elem[k].name,); l.elem[k].num=stud.num; l.elem[k].room=stud.room; break; } else { strcpy(l.elem[l.length].name,); l.elem[l.length].num=stud.num; l.elem[l.length].room=stud.room; } } l.length++; fflush(stdin);//清除文件緩沖區(qū),當(dāng)文件以寫方式打開時,將緩沖區(qū)內(nèi)容寫入文件 printf("\n"); printf("是否繼續(xù)插入?<y/n>:"); scanf("%c",&ch); if(ch=='y')insert(l); elsesystem("cls");}voidDelete(linklist&l)//按學(xué)號刪除該學(xué)生{ inti,j,k=-1; charch; printf("\n");printf("\n"); printf("請輸入要刪除學(xué)生的學(xué)號:"); scanf("%d",&stud.num);//整型賦值 for(i=0;i<l.length;i++) { if(stud.num==l.elem[i].num) { printf("該學(xué)生的信息為:\n");printf("\n"); printf("%-15s%-3d%7d\n",l.elem[i].name,l.elem[i].num,l.elem[i].room); k=i; for(j=k;j<l.length-1;j++) l.elem[j]=l.elem[j+1]; printf("\n"); break; } } if(i>=l.length)printf("該學(xué)生不存在\n"); if(k>=0)l.length--; fflush(stdin); printf("\n"); printf("是否繼續(xù)刪除?<y/n>:"); scanf("%c",&ch); system("cls"); if(ch=='y')Delete(l); elsesystem("cls"); }voidmain()//主函數(shù){ linklistl;//定義線性表l init(l);//調(diào)用初始化函數(shù)(指針) charch; system("colora"); printf("\n"); printf("*************************歡迎進(jìn)入宿舍管理查詢系統(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) { case1:sort1(l);//調(diào)用按姓名排序函數(shù) printf("\n"); if(l.length==0) { printf("已無學(xué)生記錄\n"); printf("\n"); disp(); menu(); } else { printf("按姓名排序:\n"); print1(l); disp();//調(diào)用返回主界面 menu(); } break; case2:sort2(l);//調(diào)用按學(xué)號排序函數(shù) printf("\n"); if(l.length==0) { printf("已無學(xué)生記錄\n"); printf("\n"); disp(); menu(); } else { printf("按學(xué)號排序:\n"); print1(l); disp(); menu(); }break; case3:sort3(l);//調(diào)用按房號排序函數(shù) printf("\n"); if(l.length==0) { printf("已無學(xué)生記錄\n"); printf("\n"); disp(); menu(); } else { printf("按房號排序:\n"); print1(l); disp(); menu(); }break; case4:sort1(l);//先調(diào)用按姓名排序函數(shù)進(jìn)行排序 chazhao1(l);//再調(diào)用按姓名查找函數(shù)進(jìn)行(二分)查找 break; case5:sort2(l);//先調(diào)用按學(xué)號排序函數(shù)進(jìn)行排序 chazhao2(l);//再調(diào)用按學(xué)號查找函數(shù)進(jìn)行(二分)查找 break; case6:sort3(l);//先調(diào)用按房號排序函數(shù)進(jìn)行排序 chazhao3(l);//再調(diào)用按房號查找函數(shù)進(jìn)行(二分)查找 break; case7:sort2(l);//調(diào)用插入函數(shù) insert(l); system("cls"); printf("顯示插入后的學(xué)生信息:\n");print1(l); disp(); menu(); break; case8:Delete(l);//調(diào)用刪除函數(shù) if(l.length==0) { printf("\n"); printf("學(xué)生記錄已被刪除完\n"); printf("\n"); disp(); menu(); } else { printf("顯示刪除后的學(xué)生信息:\n"); print1(l); disp(); menu();

溫馨提示

  • 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

提交評論