文件管理系統(tǒng)開發(fā)案例new資料_第1頁
文件管理系統(tǒng)開發(fā)案例new資料_第2頁
文件管理系統(tǒng)開發(fā)案例new資料_第3頁
文件管理系統(tǒng)開發(fā)案例new資料_第4頁
文件管理系統(tǒng)開發(fā)案例new資料_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、文件管理系統(tǒng)開發(fā)(kif)案例 -學(xué)生成績管理系統(tǒng) 的設(shè)計(jì)共四十八頁教學(xué)目的:了解文件管理系統(tǒng)的設(shè)計(jì)步驟。將課程(kchng)的主要知識內(nèi)容融會貫通于該案例中。變松散的知識點(diǎn)的學(xué)習(xí)為知識的靈活掌握與應(yīng)用。分別從結(jié)構(gòu)化層面和面向?qū)ο蟮膶用媪私獬橄笏季S的設(shè)計(jì)思想。訓(xùn)練學(xué)生的綜合設(shè)計(jì)和調(diào)試程序的能力。共四十八頁教學(xué)講解重點(diǎn):避免原有內(nèi)容的重復(fù)講解,突出強(qiáng)調(diào)難點(diǎn)和易錯點(diǎn)的講解,包括:復(fù)雜數(shù)據(jù)結(jié)構(gòu)的訪問層次和語句結(jié)構(gòu)根據(jù)函數(shù)功能確定函數(shù)參數(shù)及返回值類型單鏈表的操作函數(shù)中表頭指針的變化根據(jù)文件操作數(shù)據(jù)類型和文件的有無選取(xunq)正確的文件打開方式和文件讀寫函數(shù)。共四十八頁通過代碼的不同組織了解(lio

2、ji)不同層次的抽象設(shè)計(jì)思想,包括函數(shù)庫、接口、類等概念,進(jìn)一步區(qū)分結(jié)構(gòu)化程序設(shè)計(jì)過程和面向?qū)ο笤O(shè)計(jì)中函數(shù)的不同使用方式和意義通過代碼組織理解文件包含的作用、掌握多文件操作的方法。引導(dǎo)學(xué)生思考如何對系統(tǒng)功能的進(jìn)一步完善和對代碼的進(jìn)一步優(yōu)化。共四十八頁學(xué)生(xu sheng)成績管理系統(tǒng)設(shè)計(jì)要求:學(xué)生信息以數(shù)據(jù)文件的形式存放在磁盤中,包括學(xué)號、姓名(xngmng)、語文、數(shù)學(xué)、英語三門課程的成績,系統(tǒng)對學(xué)生信息可以進(jìn)行各種增、刪、改、排序及對文件進(jìn)行讀寫等功能。共四十八頁需求分析總體設(shè)計(jì)詳細(xì)設(shè)計(jì)及編碼(bin m)代碼組織-編程抽象共四十八頁能從文件中讀入學(xué)生記錄存于計(jì)算機(jī)中,同時(tngsh)

3、也能將學(xué)生記錄保存到磁盤文件;能按不同方式添加(tin ji)新學(xué)生記錄;一、需求分析能對指定的學(xué)生記錄進(jìn)行修改、刪除;能按照不同條件查詢學(xué)生記錄可對學(xué)生表按條件進(jìn)行排序可用菜單形式顯示系統(tǒng)功能供用戶選擇,并能從不同功能操作中返回到菜單能對學(xué)生成績進(jìn)行統(tǒng)計(jì)并顯示統(tǒng)計(jì)結(jié)果共四十八頁成績管理更新模塊輸入模塊查詢模塊統(tǒng)計(jì)模塊輸出模塊文件輸入鍵盤輸入按學(xué)號查詢按姓名查詢增加記錄刪除記錄修改記錄排序記錄輸出至文件屏幕顯示統(tǒng)計(jì)各段人數(shù)系統(tǒng)功能模塊圖共四十八頁二、總體設(shè)計(jì)基本流程(lichng)功能模塊設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)函數(shù)功能描述共四十八頁開始打開文件讀文件并存入數(shù)組或鏈表調(diào)用菜單函數(shù)選擇菜單操作退出系統(tǒng)嗎

4、調(diào)用相應(yīng)函數(shù)完成相應(yīng)操作存盤否調(diào)用存盤函數(shù)結(jié)束否是否是1、基本(jbn)流程共四十八頁輸入模塊:實(shí)現(xiàn)將數(shù)據(jù)輸入數(shù)組或鏈表查詢模塊:在數(shù)組或鏈表中實(shí)現(xiàn)按不同字段進(jìn)行查詢更新模塊:實(shí)現(xiàn)對記錄的增、刪、改、排序等操作統(tǒng)計(jì)模塊:實(shí)現(xiàn)各種統(tǒng)計(jì)功能輸出模塊:實(shí)現(xiàn)將處理后的數(shù)據(jù)寫入文件(wnjin)或在屏幕上輸出的功能。2、功能模塊設(shè)計(jì)(shj)共四十八頁學(xué)生成績(chngj)信息結(jié)構(gòu)struct student char num8; char name20; int s3; /三門課成績?nèi)敉ㄟ^數(shù)組實(shí)現(xiàn),則定義結(jié)構(gòu)數(shù)組struct student stuN;N為已定義過的符號常量若通過單鏈表實(shí)現(xiàn)(shxin

5、),則單鏈表結(jié)點(diǎn)結(jié)構(gòu)定義:struct node char num8; char name20; int s3; struct node *next;3、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)共四十八頁 display( ) 功能:顯示長度為len的學(xué)生表中存儲的學(xué)生記錄。 search( ) 功能:在長度為len的學(xué)生表中按姓名或?qū)W號查找指定的學(xué)生記錄。 append( ) 功能:在長度為len的學(xué)生表的末尾添加新的學(xué)生記錄 del( ) 功能:從長度為len的學(xué)生表中刪除(shnch)指定學(xué)號的學(xué)生 modify(student stu,int len) 功能:修改長度為len的學(xué)生表中指定學(xué)號的學(xué)生記錄4、函數(shù)功

6、能描述(數(shù)據(jù)結(jié)構(gòu)(sh j ji u)以結(jié)構(gòu)數(shù)組為例)voidstudent stu,int lenvoidstudent stu,int lenintstudent stu,int lenintstudent stu,int lenvoid共四十八頁void count(student stu,int len) 功能:對長度為len的學(xué)生表按要求(yoqi)進(jìn)行統(tǒng)計(jì)void sort(student stu,int len) 功能:將長度為len的學(xué)生表中記錄按要求排序void save(student stu,int len) 功能:將長度為len的學(xué)生表中記錄保存到文件 readfile

7、( ) 功能:將文件中的學(xué)生數(shù)據(jù)讀入到學(xué)生記錄表中,并返回表中的記錄數(shù)。void menu() 功能:顯示系統(tǒng)提供的可選菜單項(xiàng)void main()整個系統(tǒng)的控制部分。intstudent stu共四十八頁三、詳細(xì)(xingx)設(shè)計(jì)及編碼1、主函數(shù)的設(shè)計(jì):啟動程序后,首先從文件中將學(xué)生信息讀入到結(jié)構(gòu)數(shù)組或鏈表中,然后進(jìn)入菜單界面供用戶選擇,根據(jù)選擇項(xiàng)執(zhí)行相應(yīng)的操作,直到(zhdo)退出該管理系統(tǒng)。菜單界面如下:根據(jù)前面的基本流程設(shè)計(jì)出如下的主函數(shù):共四十八頁清屏,原型(yunxng)包含在stdlib.h中 int main()struct student stuN;int len;int c

8、hoice;char ch;len= ; /調(diào)用讀文件函數(shù)cout按任意鍵繼續(xù)endl;getch();while(1) /注意該循環(huán)退出的條件 system(cls); /清屏函數(shù) menu(); /調(diào)用菜單顯示函數(shù) coutchoice; if(choice=0) /選擇退出 coutn保存到文件嗎?ch;if(ch=y|ch=Y) save(stu,len);coutn歡迎再次(zi c)使用,按任意鍵退出endl;getch(); break; 增強(qiáng)交互,要求頭文件conio.h暫停程序,直到輸入任意一字符readfile(stu)共四十八頁 switch(choice) case 1

9、:display(stu,len);break; case 2:search(stu,len);break; case 3: ;break;/添加記錄 case 4: ;break;/刪除記錄 case 5:modify(stu,len);break; case 6:count(stu,len);break; case 7:sort(stu,len);break; case 8:save(stu,len);break; default:coutn輸入錯誤(cuw),按任意鍵繼續(xù)endl;getch(); system( pause ); return 0; len=append(stu,len

10、)len=del(stu,len)共四十八頁2、menu函數(shù)的設(shè)計(jì)該函數(shù)功能很簡單,只需在屏幕上按要求(yoqi)顯示菜單項(xiàng),請自行完成設(shè)計(jì)。3、display函數(shù)(hnsh)的設(shè)計(jì)分析:遍歷長度為len的結(jié)構(gòu)數(shù)組stu,輸出每個學(xué)生的所有信息。注意對結(jié)構(gòu)數(shù)組成員的訪問層次,尤其是成員本身又為數(shù)組的學(xué)生成績,需逐一訪問。如第i個學(xué)生的第j門課的成績需表示為:stui.sj故遍歷需雙重循環(huán)。請自行完成代碼設(shè)計(jì)。共四十八頁4、search函數(shù)的設(shè)計(jì)設(shè)計(jì)思路:在長度為len的學(xué)生表中按姓名或?qū)W號查找指定的學(xué)生記錄,因有不同的查詢條件,所以需設(shè)計(jì)二級菜單,分別按學(xué)號和姓名查詢學(xué)生記錄,根據(jù)查詢情況分別

11、輸出查詢到的學(xué)生信息或是未找到的提示,然后返回到上級菜單。該函數(shù)的流程(lichng)如下:共四十八頁開始選擇查找方式按學(xué)號?選擇錯誤否按姓名?否輸入待查學(xué)號最后一個學(xué)生?是取第一個學(xué)生比較找到否?否否取下一個學(xué)生比較找到否?是輸出未找到提示否輸出找到的記錄是結(jié)束同按學(xué)號查找過程,略是共四十八頁void search(student stu,int len) int choice,i,j; char num8,name20; system(cls); cout1.按學(xué)號查詢 2.按姓名(xngmng)查詢n; coutchoice; if(choice=1) cout輸入學(xué)號:num; for

12、(i=0;ilen;i+) if( ) cout學(xué)號t姓名t語文t數(shù)學(xué)t英語t總分endl; t; for(j=0;j3;j+) coutstui.sjt; coutstui.s0+stui.s1+stui.s2endl; cout按任意鍵繼續(xù)endl; getch(); return;coutn未找到該生記錄,按任意鍵繼續(xù)n;getch(); return ; 字符串比較必須通過(tnggu)此函數(shù)strcmp(stui.num,num)=0共四十八頁 else if(choice=2) cout輸入姓名:name; for(i=0;ilen;i+

13、) if(strcmp(,name)=0) cout學(xué)號t姓名t語文t數(shù)學(xué)t英語t總分endl; t; for(j=0;j3;j+)coutstui.sjt; coutstui.s0+stui.s1+stui.s2endl; cout按任意鍵繼續(xù)endl; getch(); return;coutn未找到該生記錄,按任意鍵繼續(xù)n;getch(); return; else coutn選擇錯誤(cuw),按任意鍵返回endl; getch(); ?思考(sko):比較按姓名和學(xué)號兩種方式查詢的代碼,函數(shù)如何優(yōu)化更簡潔共四十八頁5、ap

14、pend函數(shù)的設(shè)計(jì)設(shè)計(jì)思路:在學(xué)生表中添加新的學(xué)生記錄。首先輸入要添加的學(xué)生學(xué)號,在原表中查找該學(xué)號的記錄是否已存在。若已存在,則選擇是否重新輸入新學(xué)生記錄,如選擇“是”,則返回;否則結(jié)束函數(shù)返回主菜單。若原表中不存在該學(xué)號的學(xué)生,則繼續(xù)輸入要添加的學(xué)生的姓名(xngmng)和三門課的成績。添加成功后,學(xué)生表的實(shí)際長度增加1.根據(jù)上述設(shè)計(jì)思路,請自行完成如下形式的函數(shù)設(shè)計(jì)int append(student stu,int len)?思考(sko):該函數(shù)的類型為何要定義為int類型共四十八頁6、del函數(shù)的設(shè)計(jì)設(shè)計(jì)思路:為簡單起見,本例中該函數(shù)只考慮按學(xué)號刪除的情況,實(shí)際應(yīng)用中還可按姓名刪除

15、學(xué)生記錄。本例中該函數(shù)的設(shè)計(jì)思路:若學(xué)生表為空表,則做相應(yīng)的提示,然后退出該函數(shù);若非空,則轉(zhuǎn)在表中查找待刪除學(xué)生的學(xué)號。若找到,該學(xué)生后的所有記錄前移一位刪除該記錄,然后退出該函數(shù);若未找到,則提示該學(xué)生不存在,重新輸入新學(xué)號后,轉(zhuǎn)繼續(xù)查找。根據(jù)上述設(shè)計(jì)思路,請自行完成(wn chng)如下形式的函數(shù)設(shè)計(jì)int del(student stu,int len)共四十八頁7、modify函數(shù)的設(shè)計(jì)設(shè)計(jì)思路(sl):若學(xué)生表為空表,則做相應(yīng)的提示,然后退出該函數(shù);若非空,則轉(zhuǎn)在表中查找待修改學(xué)生的學(xué)號。若找到,輸入該學(xué)生的新信息,然后退出該函數(shù);若未找到,則提示該學(xué)生不存在,重新輸入新學(xué)號后,轉(zhuǎn)

16、繼續(xù)查找。請自行(zxng)完成代碼設(shè)計(jì)共四十八頁8、count函數(shù)的設(shè)計(jì)分析:該函數(shù)的功能是對學(xué)生成績表的統(tǒng)計(jì)(tngj),統(tǒng)計(jì)(tngj)的內(nèi)容可以很多,包括每門課程和總分的最高最低分、包括各分?jǐn)?shù)段的人數(shù)等,也適宜設(shè)計(jì)成二級菜單的形式供用戶選擇,請大家自行完善。共四十八頁9、sort函數(shù)的設(shè)計(jì)設(shè)計(jì)思路:該函數(shù)的功能是對學(xué)生成績表按條件排序,排序的條件可以是學(xué)號、成績等,也適宜設(shè)計(jì)成二級菜單的形式供用戶選擇。設(shè)計(jì)程序時注意如下內(nèi)容:若按學(xué)號等字符串類型的成員(chngyun)排序的話,注意比較的方法要通過strcmp函數(shù)實(shí)現(xiàn),而不能直接用關(guān)系比較運(yùn)算比較此類成員交換元素時結(jié)構(gòu)變量允許整體賦值

17、,無需逐個成員交換共四十八頁10、save函數(shù)的設(shè)計(jì)分析:該函數(shù)實(shí)現(xiàn)的是將存儲于結(jié)構(gòu)數(shù)組中的學(xué)生記錄寫入磁盤(c pn)文件的功能。對結(jié)構(gòu)數(shù)組適宜選擇塊讀寫。函數(shù)中注意對文件正確打開與否的判別、對讀寫成功與否的不同提示等等。代碼請自行設(shè)計(jì)。共四十八頁11、readfile函數(shù)的設(shè)計(jì)分析:函數(shù)實(shí)現(xiàn)從磁盤文件讀學(xué)生數(shù)據(jù)到結(jié)構(gòu)數(shù)組的功能。對結(jié)構(gòu)數(shù)組選擇塊讀寫。設(shè)計(jì)中兩個關(guān)鍵點(diǎn):因?qū)W生表的初始長度取決于文件中的記錄數(shù),所以讀文件的過程中要記錄下學(xué)生記錄的總數(shù),作為(zuwi)函數(shù)的返回值提供給其它操作使用。因數(shù)據(jù)可從文件讀也可從鍵盤輸入,所以以讀的方式打開一個可能存在也可能不存在的文件應(yīng)選用“ab+”

18、方式。共四十八頁int readfile(student stu) FILE *fp; int i=0,len; fp=fopen(c:student,ab+ ); if(fp=NULL) cout無法打開(d ki)文件 studentn;exit(0); while(!feof(fp) if(fread(&stui,sizeof(student),1,fp)=1)i+; len=i; fclose(fp); cout文件中學(xué)生記錄數(shù)為:lenendl; return len;共四十八頁四、代碼的組織(1) -結(jié)構(gòu)化C層面上的編程抽象函數(shù)與接口:定義函數(shù)的目的之一是將整個程序分成多個可操作的

19、部分以降低(jingd)復(fù)雜性;接口則是在更高層次上降低(jingd)復(fù)雜性。函數(shù)使其調(diào)用者將訪問需要的一系列步驟組合為一個操作;接口則是使其客戶將訪問需要的一系列函數(shù)實(shí)現(xiàn)成一個編程抽象。共四十八頁接口是庫和其客戶間的邊界,提供庫和客戶間的交流渠道,也是分離二者的屏障;在不顯示庫的實(shí)現(xiàn)細(xì)節(jié)的情況(qngkung)下,為客戶提供有關(guān)使用庫的信息。使用(shyng)庫文件的源文件只包括其客戶需要了解的有關(guān)庫的信息(只包括函數(shù)原型)庫代碼client.cppmylib.hmylib.cpp客戶文件接口文件庫文件共四十八頁managelib.h內(nèi)容(接口(ji ku)文件)struct student

20、char num8;char name20;int s3;void display(student stu,int len);void search(student stu,int len);int append(student stu,int len);學(xué)生成績管理系統(tǒng)案例(n l)的代碼組織 共四十八頁managelib.cpp文件(庫文件,包括必要的頭文件)#include managelib.hvoid display(student stu,int len) int i,j; if(len=0) cout無記錄,按任意鍵返回(fnhu)endl; getch(); return; (

21、略)此處略去前面定義的除主函數(shù)外的所有函數(shù)運(yùn)行時將接口(ji ku)文件插入至此,進(jìn)一步理解文件包含的作用共四十八頁scoremanage.cpp文件內(nèi)容(客戶文件)#include managelib.h#define N 20int main() /主函數(shù)的具體(jt)實(shí)現(xiàn) 共四十八頁代碼(di m)的組織(2) -面向?qū)ο蟮木幊坛橄蠖x一個(y )學(xué)生成績管理類scoremanage,將對學(xué)生信息管理的操作都作為類的成員函數(shù)定義在類體內(nèi),組織在文件funlib.h。將類成員函數(shù)在類體外實(shí)現(xiàn),組織在funlib.cpp中。共四十八頁struct student char num8; cha

22、r name20; int s3;接口(ji ku)文件funlib.h包括一個student結(jié)構(gòu)類型和一個成績(chngj)管理類scoremanage的定義共四十八頁class scoremanage private :student stuN;int len; public:scoremanage(student stu1,int len1)/構(gòu)造函數(shù)len=len1;for(int i=0;ilen;i+)stui=stu1i;void display( );void search( );void append( ); ;注意(zh y):類的成員函數(shù)可直接操作類的成員stu,無需通過

23、參數(shù)使用。思考:append函數(shù)和del函數(shù)的返回值為何為void類型(lixng),與前面結(jié)構(gòu)化程序不同?共四十八頁funlib.cpp文件(類的成員(chngyun)函數(shù)實(shí)現(xiàn))#include funlib.hvoid scoremanage:display( ) int i,j; if(len=0) cout無記錄,按任意鍵返回(fnhu)endl; getch(); return; / 輸出信息的語句略去其它成員函數(shù)實(shí)現(xiàn)略成員函數(shù)類體外實(shí)現(xiàn)類成員,無需也不能重定義共四十八頁#include funlib.hint main()struct student stuN;int len,i=

24、0; /通過讀文件(wnjin)獲取stu內(nèi)容和記錄個數(shù)len scoremanage sm(stu,len); 客戶(k h)文件manmain.cpp創(chuàng)建scoremanage類對象,自動調(diào)用構(gòu)造函數(shù)注意對類對象成員函數(shù)調(diào)用的方法有別于結(jié)構(gòu)化,如:sm.display();面向?qū)ο蠓椒ǖ拇a實(shí)現(xiàn)請自行完成共四十八頁五、應(yīng)用案例1、手機(jī)通訊錄管理系統(tǒng)該系統(tǒng)模擬手機(jī)通訊錄管理系統(tǒng),實(shí)現(xiàn)對手機(jī)中的通訊錄進(jìn)行管理 ,基本功能包括:查看功能:具有按類別(libi)查看功能(如朋友、同事、親人等),當(dāng)選中某類時,顯示出此類所有數(shù)據(jù)中的姓名和電話號碼。添加數(shù)據(jù)功能:能錄入新數(shù)據(jù), 包括:姓名,電話號碼、

25、分類、電子郵件;當(dāng)錄入重復(fù)的姓名和電話號碼時,則提示數(shù)據(jù)錄入重復(fù)并取消錄入;錄入的新數(shù)據(jù)能按遞增的順序自動加入通訊錄。共四十八頁主界面顯示添加修改查詢刪除按順序顯示按姓名修改按類別查詢修改功能:選中某個人的姓名時,可對此人的相應(yīng)數(shù)據(jù)進(jìn)行(jnxng)修改。刪除功能:選中某個人的姓名時,可對此人的相應(yīng)數(shù)據(jù)進(jìn)行刪除。共四十八頁2、火車票售票管理系統(tǒng)該系統(tǒng)(xtng)模擬火車票售票系統(tǒng)(xtng),相關(guān)信息如下:車次 發(fā)車時間 起點(diǎn)站 終點(diǎn)站 行車時間 額定載量 已定票人數(shù)(rn sh)K487 8:18 重慶北 成都東 3:14 700 330K577 11:56 重慶北 成都東 5:06 700 223從數(shù)據(jù)文件中讀入車次信息,系統(tǒng)具有功能如下:錄入功能:錄入車次信息,可不定時地增加車次數(shù)據(jù),并將數(shù)據(jù)重新保存到文件中共四十八頁瀏覽功能

溫馨提示

  • 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

提交評論