數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、計算機科學(xué)與技術(shù)學(xué)院課程設(shè)計成績單課程名稱:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 指導(dǎo)教師: 姓名 性別 學(xué)號班級計科1203班綜合成績成績等級程序運行情況(占總成績20%)能正確運行 基本能正確運行 能運行但結(jié)果不完善(20分) (15分) (10分)程序功能的完善程度(占總成績10%)完善 基本完善 不完善(10分) (8分) (5分)程序結(jié)構(gòu)的合理性(占總成績10%)合理 基本合理 不太合理(10分) (8分) (5分)對問題的答辯情況(占總成績40%)概念正確有創(chuàng)新 能正確回答所有問題 基本能正確回答(40分) (35分) (30分)部分問題回答概念不清晰(20分)學(xué)生的工作態(tài)度與獨立工作能力(占總成績1

2、0%)工作態(tài)度認(rèn)真能獨立完成任務(wù) 工作態(tài)度認(rèn)真但獨立性較差(10分) (8分)工作態(tài)度基本認(rèn)真但缺乏獨立性(5分)設(shè)計報告的規(guī)范性(占總成績10%)符合規(guī)范 基本符合規(guī)范 規(guī)范性較差(10分) (8分) (5分)優(yōu)秀:90分100分 良好:80分89分 中等:7079分 及格:6069分 不及格0分59分 計算機科學(xué)與技術(shù)學(xué)院制表1)問題描述無歧義的陳述設(shè)計的內(nèi)容,明確設(shè)計所能夠達到的要求或功能。這個課程設(shè)計一般不懂的問題,自己都解決了,比較難搞定的是對文件的處理這塊,但是通過自己上網(wǎng)查資料,自己摸索,才得以解決問題。還有在對刪除學(xué)生信息的時候,起初沒有考慮到要把選修表里面的學(xué)生信息也刪除掉,

3、后來經(jīng)過自己仔細考慮,結(jié)合實際情況才完善了等等一些細節(jié)。2) 解題思路(1) 定義對象類型,三張表的數(shù)據(jù)類型除了grade設(shè)為int型,其余都設(shè)為char類型,后面的字符串的匹配。而且還設(shè)置指針域。通過鏈表來實現(xiàn)數(shù)據(jù)的增刪改查的功能。(2) 將三個進行初始化,初始化只創(chuàng)建頭指針。(3) 通過尾插法輸入數(shù)據(jù),建立三張表。(4) 輸出三個表的數(shù)據(jù),分別對結(jié)點設(shè)定指針,如 student *p; p=h_student-next; .p=p-next;從而輸出表的相關(guān)信息。(5) 添加學(xué)生數(shù),尾插法來實現(xiàn)。插入過程中判斷學(xué)生學(xué)號是否與表的已有的學(xué)生學(xué)號重復(fù),性別輸入格式是否正確。做了相應(yīng)的判斷,從而

4、防止用戶添加學(xué)生時出現(xiàn)的誤操作。(6) 刪除學(xué)生。結(jié)合student表和course表。用戶輸入學(xué)生的學(xué)號或者是姓名,輸入后,在學(xué)生表中查找,看是否有該學(xué)生的信息,如有則刪除該學(xué)生,考慮到學(xué)生的選課情況,再次判斷,如果選修表中有該學(xué)生對應(yīng)的選課信息,則刪除該學(xué)生選課的所有信息。(7) 修改學(xué)生信息??紤]各數(shù)據(jù)項的性質(zhì),只能修改學(xué)生年齡和學(xué)生所在系,同理輸入信息,匹配則修改,否則。(8) 查詢學(xué)生個人基本信息。以姓名或?qū)W號為參數(shù),用戶輸入數(shù)據(jù),匹配則顯示當(dāng)前的該學(xué)生信息,否則退出到菜單。(9) 查詢學(xué)生單科目的成績。結(jié)合三張表進行查詢,輸入數(shù)據(jù)在表中查詢。(10) 添加學(xué)生選課信息。考慮到學(xué)生是

5、否有重選課程的情況,在此也防止了誤操作。(11) 刪除學(xué)生選課信息(12) 修改學(xué)生選課信息(13) 查詢某個系所有學(xué)生的成績(14) 保存學(xué)生表、課程表、選修表。(15) 加載學(xué)生表、課程表、選修表。(16) 定義菜單,定義主函數(shù),運行程序。3)算法描述用流程圖、偽碼等描述算法。 整體設(shè)計流程圖說明:由于代碼比較多,如果一一用流程和代碼描述算法,工作量大,并且有些函數(shù)原理一樣,自認(rèn)為沒有必要都描述,故就自認(rèn)為比較有代表性的描述如下: 學(xué)生選課系統(tǒng)選修表課程表學(xué)生表查詢某系所有學(xué)生成績查詢學(xué)生單科成績查詢學(xué)生選課修改學(xué)生選課刪除學(xué)生選課添加學(xué)生選課刪除學(xué)生修改學(xué)生查詢學(xué)生添加學(xué)生若學(xué)生存在選課

6、信息,則要刪除該學(xué)生選課信息。退出系統(tǒng),保存三張表 部分程序設(shè)計流程圖1、 添加學(xué)生信息流程圖。開始輸入學(xué)生學(xué)號查找學(xué)生表,判斷學(xué)生表中是否有存在該學(xué)生 否退出菜單欄 是輸入姓名,性別 在菜單欄輸入:0程序結(jié)束所有表的數(shù)據(jù)庫都自動保存保存檢查性別輸入格式是否正確說明:只有選擇菜單欄 0 ,才能保存所有表的數(shù)據(jù)。輸入年齡和所在系 是 輸入后把數(shù)據(jù)插入原來表的結(jié)尾。插入學(xué)生信息函數(shù)的代碼如下:void insert_student(student *stu) student *s,*s1; /這里定義指針s 和s1printf(| 學(xué)號 | 姓名 | 性別 | 年齡 | 所在系 |n);s=(st

7、udent *)malloc(sizeof(student); /這里為s申請一個新的結(jié)點printf(請輸入學(xué)號:); scanf(%s,&s-sno);/輸入學(xué)號信息s1=stu-next;/檢查是否存在這名學(xué)生,輸入的學(xué)號不能重復(fù)while(s1!=null) /在鏈表中查找,看是否有與重復(fù)的學(xué)號if(strcmp(s1-sno,s-sno)=0)printf(該學(xué)生已存在,請檢查是否輸入錯誤n);printf(請重新輸入學(xué)號:); scanf(%s,&s-sno); /這里說明有重復(fù),重新輸入學(xué)號s1=s1-next;/指向下一個結(jié)點if(s1=null)/如果沒有找到重復(fù)的學(xué)號,說明

8、可以插入新學(xué)生printf(請輸入姓名:); scanf(%s,&s-sname);printf(請輸入性別(男/女):); scanf(%s,&s-ssex);if(strcmp(s-ssex,男)=0)|(strcmp(s-ssex,女)=0) /這里匹配年齡,要求用戶輸入性別的格式正確printf(請輸入年齡:); scanf(%s,&s-sage);printf(請輸入所在系:); scanf(%s,&s-sdept);r_student-next=s;r_student=s; /這里把用戶輸入的信息插入到表尾r_student-next=null; /指向尾結(jié)點printf(插入成功

9、!nn);elseprintf(插入失敗! 性別輸入有誤!n); /返回錯誤信息2、 刪除學(xué)生信息流程圖 開始輸入學(xué)生學(xué)號查找學(xué)生表,判斷學(xué)生表中是否有存在該學(xué)生 否 是刪除學(xué)生表中的該學(xué)生信息查找選修表,判斷選修表中是否有該學(xué)生的選課信息 否 是刪除兩個表中對應(yīng)該學(xué)生的所有信息返回主菜單刪除學(xué)生信息函數(shù)的代碼如下:void delete_student(student *stu,sc *s)char sn20;定義一個char類型的字符串,表示要輸入學(xué)生的學(xué)號或者姓名student *p; /這里定義指針psc *s;/這里定義指針sprintf(請輸入要刪除的信息中學(xué)生學(xué)號或姓名:);sc

10、anf(%s,&sn); /用戶輸入要刪除的學(xué)生的學(xué)號或姓名p=stu-next; /p指向頭指針的下一個結(jié)點s=s-next; /s指向頭指針的下一個結(jié)點student *q=stu; /把頭指針賦給指針qsc *s1=s; /把頭指針賦給指針s1while(p!=null)/在學(xué)生表中表中查找,看是否這樣的一個學(xué)生if(strcmp(p-sno,sn)=0 | strcmp(p-sname,sn)=0)/找到對應(yīng)的學(xué)生strcpy(sn,p-sno);while(s!=null)/在選修表中表中查找,看是否有該學(xué)生對應(yīng)的選課信息if(strcmp(sn,s-sno)=0)s1-next=s

11、-next; /如果有,則刪除學(xué)生對應(yīng)的選課信息free(s); /釋放s結(jié)點,刪除選課信息s=s1-next; /指向下一個結(jié)點,看選課表中是否還有該學(xué)生的選課信息,若有,則刪除continue;if(s!=null)s=s-next;s1=s1-next;q-next=p-next;/指向下一個結(jié)點,看學(xué)生表中是否還有該學(xué)生的相關(guān)信息,若有,則刪除free(p);/釋放p結(jié)點,刪除該學(xué)生printf(刪除成功!nn); 開始break;p=p-next;輸入系名q=q-next;查找學(xué)生表,判斷學(xué)生表中是否有存在有學(xué)生在該系3、 查詢某個系所有學(xué)生的成績 否 有結(jié)合選修表,看在該系對應(yīng)的學(xué)

12、生是否有選課 否 有返回主菜單輸出信息4、 查詢某個系所有學(xué)生的成績的代碼:void select_sdept_grade(student *stu,sc *s)char sdept4;定義一個char類型的字符串,表示要輸入的系名student *p; /定義一個指向?qū)W生表的指針sc *q;/定義一個指向選修表的指針int i=0; /此處設(shè)置一個標(biāo)記printf(請輸入系名:);scanf(%s,&sdept); /輸入系名p=stu-next; /指向頭指針的下一個結(jié)點printf(-n);printf(| 學(xué)號 | 姓名 | 課程號 | 成績 |n);printf(-n);printf

13、(| sno | sname | cno | grade |n);printf(-n);while(p!=null)/在學(xué)生表中表中查找,看是否這樣的一個學(xué)生if(strcmp(p-sdept,sdept)=0)q=s-next; /找出所有匹配的系名,并全部輸出while(q!=null)if(strcmp(p-sno,q-sno)=0)i=1;printf(|%9s%11s%14s%17d |n,q-sno,p-sname,q-cno,q-grade); printf(-n);q=q-next; /指向下一個結(jié)點,查詢對應(yīng)系名的相關(guān)信息p=p-next;if(i=0) /輸出誤操作情況pr

14、intf(對不起,沒有你需要的信息,請檢查系名是否輸入錯誤!n);/保存課程表void save_course()course *p,*p0; /定義一個指向課程表的指針p=h_course-next; /指向頭結(jié)點的指針賦給pif(fp_course=fopen(course.txt,wb)=null) /創(chuàng)建文件,進行保存printf(文件保存失敗!n請重新啟動本系統(tǒng)!n);exit(0); /直接退出系統(tǒng)while(p!=null) /在課程表中表中訪問鏈表數(shù)據(jù),將鏈表信息一一寫入文件中if(fwrite(p,sizeof(course),1,fp_course)!=1) /將鏈表中的信

15、息寫入文件中printf(寫入文件失敗!n請重新啟動本系統(tǒng)!n); p0=p; p=p-next; /指向下一個結(jié)點. free(p0); /釋放所有結(jié)點free(h_course); /釋放指針fclose(fp_course); /關(guān)閉文件/加載課程表的相關(guān)信息void load_course() course *p;/定義一個指向課程表的指針course *q=h_course; /把課程信息的一個指針指向q fp_course=fopen(course.txt,rb); 打開course.txt , p=(course *)malloc(sizeof(course);/申請一個新的結(jié)點

16、p while(fread(p,sizeof(course),1,fp_course) q-next=p;q=p;p=(course *)malloc(sizeof(course); q-next=null;r_course=q; fclose(fp_course); /關(guān)閉文件(主菜單和主函數(shù)比較簡單,c語言里面的知識,一看便知)/主菜單int menu() int i;printf( |-|n);printf( | 歡迎進入學(xué)生選課管理系統(tǒng) |n);printf( | 本系統(tǒng)含有三張信息表 |n);printf( | 學(xué)生表、課程表、學(xué)生選課信息表 |n);printf( |-|n);pr

17、intf( | 1 = 查看各個表信息 |n);printf( | 2 = 查詢學(xué)生信息 |n);printf( | 3 = 刪除學(xué)生信息 |n);printf( | 4 = 修改學(xué)生信息 |n);printf( | 5 = 添加學(xué)生信息 |n);printf( | 6 = 刪除學(xué)生選課信息 |n);printf( | 7 = 修改學(xué)生選課信息 |n);printf( | 8 = 添加學(xué)生選課信息 |n);printf( | 9 = 查詢學(xué)生單科目的成績 |n);printf( | 10 = 查詢某個系所有學(xué)生的成績 |n);printf( | 0 = 退出系統(tǒng) |n);printf( |-|

18、n);printf(請選擇您需要的操作(0-10);for(;)scanf(%d,&i); /輸入要操作的數(shù)字if(i10)printf(n錯誤!請重新輸入:);exit(0);else break;return i;/主菜單選擇函數(shù)void menu_select()for(;) switch(menu() /功能選擇case 0:system(cls);printf(謝謝使用,再見!n);save(); /退出系統(tǒng)才能保存三張表三個表printf(nnt文件保存成功!n); exit(0);case 1:show_all_student(); show_all_course();show_

19、all_sc(); break;case 2:select_student(h_student);break;case 3:delete_student(h_student,h_sc);break;case 4:show_all_student(); update_student(h_student);break;case 5:insert_student(h_student);break;case 6:show_all_sc();delete_student_sc(h_student,h_course,h_sc);break; case 7:update_student_sc(h_stude

20、nt,h_course,h_sc);break; case 8: show_all_course();add_student_sc(h_student,h_course,h_sc);break;case 9:select_sc(h_student,h_course,h_sc);break;case 10:select_sdept_grade(h_student,h_sc);break;default:printf(輸入錯誤,請重新輸入!n);system(cls); break;5)測試結(jié)果截圖給出你的測試結(jié)果,并對輸出結(jié)果進行適當(dāng)?shù)姆治觥⒈葘涂陀^的評價。說明:截屏圖片太多,故采用層疊放置第

21、一次打開首頁面輸入數(shù)據(jù)到三張表1、以下是添加學(xué)生表、課程表、選修表輸入序號1:顯示結(jié)果為輸入序號2:演示學(xué)號為20120005,和不存在的學(xué)號20120004輸入序號3:演示學(xué)號為20120001,和不存在的學(xué)號20120004顯示是否刪除成功輸入序號4:修改學(xué)生信息。演示學(xué)號為20120002,修改其年齡輸入序號4:添加學(xué)生信息。添加學(xué)號為20120006的學(xué)生輸入序號6:刪除學(xué)生選課信息。刪除學(xué)號為20120001的學(xué)生輸入序號7:修改學(xué)生選課信息。刪除學(xué)號為20120001的學(xué)生輸入序號8:添加學(xué)生選課信息。刪除學(xué)號為20120003的學(xué)生輸入序號9:查詢學(xué)生單科目的成績。查詢學(xué)號為20

22、120001的學(xué)生的選修課程4的成績輸入序號10:查詢某個系所有學(xué)生的成績。查詢學(xué)院為cs的學(xué)生的選修課程所有的成績7)設(shè)計總結(jié) 總結(jié):首先,當(dāng)我看到這個課程設(shè)計題目的時候,第一感覺就想用php+mysql做(自己課外時間學(xué)了php網(wǎng)站設(shè)計)。說實話,php+mysql做這個課程設(shè)計很簡單的,但是很可惜,這是數(shù)據(jù)結(jié)構(gòu)課程設(shè)計。所以得把老師在課堂上講的東西聯(lián)想起來,但是,老師在課堂上大部分時間講的很多不是如何寫代碼,講的是概念,講的是算法設(shè)計。所以說,這次課程設(shè)計對于我來說,是一種挑戰(zhàn)。第一次做課程設(shè)計嘛,感覺無從下手,無賴之下,只好在網(wǎng)上隨便找了一份課程設(shè)計,看看別人是怎么設(shè)計的,我下載的是圖書館圖書信息系統(tǒng)。先琢磨別人的思路。估計琢磨了三個小時左右,之后自己在看要做的課程設(shè)計。三張表,定義三個對象類型,各分配指針域,然后是初始化三張表,創(chuàng)建頭指針,之后分別輸入數(shù)據(jù),建立三張表。然后是設(shè)計單個表的操作,多個表關(guān)聯(lián)的操作。設(shè)計主函數(shù)。想好了

溫馨提示

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

評論

0/150

提交評論