版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 c語言及數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)題目 : 學(xué)生信息管理系統(tǒng) 專 業(yè): 姓 名: 學(xué) 號(hào): 同組其他學(xué)生(學(xué)號(hào)): 2013年月 日目 錄一、需求分析3二、總體設(shè)計(jì)3三、詳細(xì)設(shè)計(jì)5四、調(diào)試與測(cè)試6五、測(cè)試結(jié)果7六、用戶手冊(cè)9七、附錄9一、需求分析每年九月份都有大量新生來到學(xué)校報(bào)道,使學(xué)校管理學(xué)生工作量增大,為此我們?cè)O(shè)計(jì)一學(xué)生信息管理系統(tǒng),學(xué)生信息包括:學(xué)號(hào),姓名,年齡,性別,出生年月,地址,E-mail等。使之能提供以下功能:(1)系統(tǒng)以菜單方式工作(2)學(xué)生信息錄入功能-輸入(3)學(xué)生信息瀏覽功能-輸出(4)查詢、排序功能-算法按學(xué)號(hào)查詢、按姓名查詢、學(xué)生信息的刪除與修改(可選項(xiàng))二、總體設(shè)計(jì)
2、組成框圖主函數(shù)主菜單歡迎界面查詢按姓名按學(xué)號(hào)錄入刪除瀏覽修改退出錄入瀏覽查詢開始密碼是否正確主菜單1錄入學(xué)生信息2瀏覽學(xué)生信息3-查詢學(xué)生信息4-刪除學(xué)生信息5-修改學(xué)生信息0-退出系統(tǒng)重新輸入密碼是否正確確刪除修改退出結(jié)束流程圖NYY 開始申請(qǐng)新空間輸入各項(xiàng)數(shù)據(jù)顯示數(shù)據(jù)結(jié)束開始錄入 瀏覽指針p指向頭結(jié)點(diǎn)P=p-next輸出指針的數(shù)據(jù) P=NULL?NY結(jié)束查詢 修改&刪除 輸入要?jiǎng)h除或修改的學(xué)號(hào)輸入姓名或?qū)W號(hào)P指針的學(xué)號(hào)與輸入的是否相同P=p-nextP指針的學(xué)號(hào)與姓名是否與輸入的相同? NN Y Y輸出數(shù)據(jù) 修改p的各項(xiàng)數(shù)據(jù)或?qū)=p-next結(jié)束結(jié)束 三、詳細(xì)設(shè)計(jì)主函數(shù)通過在while循
3、環(huán)結(jié)構(gòu)中嵌入switch分支結(jié)構(gòu)實(shí)現(xiàn)操作選擇功能。(1)Record錄入函數(shù)建立一個(gè)包含學(xué)生全部信息的結(jié)構(gòu)體,申請(qǐng)空間,其指針為p0,存入學(xué)生各項(xiàng)對(duì)應(yīng)的數(shù)據(jù)。(2)Insert插入函數(shù):按輸入的數(shù)據(jù)存儲(chǔ)在一個(gè)stu類型的指針里,若原來鏈表里沒有元素,則將此作為第一個(gè)元素;若原來的鏈表里有元素,則將指向頭結(jié)點(diǎn)指針存儲(chǔ)的學(xué)號(hào)與頭指針下一個(gè)的學(xué)號(hào)大小進(jìn)行比較,小的在前大的在后,之后指向頭結(jié)點(diǎn)處的指正后移,進(jìn)行比較,直到尾結(jié)點(diǎn)為止。在進(jìn)行比較的while函數(shù),每比較一次,計(jì)算總?cè)藬?shù)的TOTAL_NUM自加。(3)Display瀏覽函數(shù):將傳給Display函數(shù)的指針P所指向的結(jié)構(gòu)體的各項(xiàng)數(shù)據(jù)輸出以便核
4、對(duì)信息。(4)DisplayAll瀏覽函數(shù):指針指向鏈表頭結(jié)點(diǎn),在if語句中嵌套do-while語句將學(xué)生信息按學(xué)號(hào)從大到小進(jìn)行逐一輸出。(5)Query查詢函數(shù):首先使用switch語句生成菜單,實(shí)現(xiàn)操作選擇功能。分三個(gè)部分按學(xué)號(hào)查詢、按姓名查詢和取消返回上一層。按學(xué)號(hào)查詢時(shí)調(diào)用while語句對(duì)學(xué)號(hào)檢索,再調(diào)用if語句進(jìn)行判斷,最后輸出想要查詢的信息。按姓名查詢的方法跟按學(xué)號(hào)查詢的一樣。(6)Del刪除函數(shù):使用while語句進(jìn)行檢索,直接刪除學(xué)生信息。(7)Change修改函數(shù):建立devise函數(shù),生成菜單,用switch語句進(jìn)行分叉選擇功能,選擇項(xiàng)目進(jìn)行相應(yīng)的信息輸入。在Change函
5、數(shù)中使用while語句進(jìn)行檢索后再調(diào)用devise函數(shù)修改信息。實(shí)現(xiàn)學(xué)生信息修改。四、調(diào)試與測(cè)試1、進(jìn)行多次運(yùn)行,發(fā)現(xiàn)那欄的一打長(zhǎng)就會(huì)顯示一樣的數(shù)字,打短的數(shù)字就可以。我們?cè)臼鞘褂瞄L(zhǎng)整型來定義,想說空間不夠,后來改用字符型,用字符串記錄程序運(yùn)行結(jié)果正確。2、程序設(shè)計(jì)初就在考慮退出與返回有什么差別,如果返回了主菜單那退出用什么,關(guān)于這個(gè)問題看了許多網(wǎng)上的資料,發(fā)現(xiàn)許多程序都有exit(0)的函數(shù),所以去查了不少關(guān)于exit的函數(shù)容,最后退出就用了exit(0),但是又提醒說要編寫exit函數(shù),之后發(fā)現(xiàn)要加入的頭文件,程序可以正常運(yùn)行。3、程序在180行顯示說readData函數(shù)不可以返回值,所
6、以在if條件句中將return 0刪除了,不過這個(gè)程序在學(xué)校的機(jī)房即使不刪return 0也是可以運(yùn)行的,關(guān)于這點(diǎn)很是不解,還有待解決。五、測(cè)試結(jié)果1、進(jìn)入系統(tǒng)界面,輸入密碼,超過三次會(huì)自動(dòng)退出。2、選1時(shí)錄入學(xué)生信息,編輯完后會(huì)繼續(xù)顯示菜單3、選2瀏覽學(xué)生信息 ,之后繼續(xù)返回菜單界面,為節(jié)省空間菜單界面暫不截圖4、選擇3查詢學(xué)生信息會(huì)有按學(xué)號(hào)與按姓名查詢。下圖是先按學(xué)號(hào)查詢的截圖。5、按姓名查詢時(shí),如果查無此人會(huì)顯示“沒有該學(xué)生信息,請(qǐng)核對(duì)?!敝蠓祷厣弦粚?,按姓名查詢。顯示學(xué)生信息后可以選擇取消返回主菜單。6、選擇4刪除學(xué)生,輸入學(xué)號(hào)刪除學(xué)生的信息。之后會(huì)返回主菜單 7選擇5修改學(xué)生信息,
7、按學(xué)號(hào)輸入,之后按顯示輸入即可。用幾組測(cè)試數(shù)據(jù)進(jìn)行測(cè)試算法設(shè)計(jì)的正確性。(附上程序運(yùn)行的截圖)六、用戶手冊(cè)1程序一開始會(huì)顯示歡迎界面,按要求輸入密碼,3次錯(cuò)誤會(huì)退出程序。2 密碼正確后會(huì)顯示主菜單,按要求輸入您的需求。七、附錄源程序清單和結(jié)果:源程序要加注釋。結(jié)果要包括測(cè)試數(shù)據(jù)和運(yùn)行結(jié)果。/* Note:Your choice is C IDE */#include #include #include #include #include #define NULL 0#define LEN sizeof(struct student)#define FILE_DATA_PATH c:studen
8、t.txt struct student long int num; char name20; int age; char sex4; char birthday10; char address30; char tele_num13; char E_mail20; struct student *next;int TOTAL_NUM = 0;struct student *head = NULL;void welcome();void mainmenu();void record();void insert(struct student *stu);void display(struct st
9、udent *stu);void displayAll();void query();void query_by_num();void query_by_name();void readData();void writeData();void freeAll();void del();void change();void devise(struct student *p);int main() char userPWD7; int i;welcome(); for(i = 0; i 3; i+) printf(n密碼為123n); printf(n請(qǐng)輸入您的密碼:); scanf(%s, us
10、erPWD); if (strcmp(userPWD,123)=0) /密碼正確,顯示主菜單 mainmenu(); break; else if (i num); printf(請(qǐng)輸入學(xué)生的姓名:); scanf(%s,p0-name); printf(請(qǐng)輸入學(xué)生的年齡:); scanf(%d,&p0-age); printf(請(qǐng)輸入學(xué)生的性別:); scanf(%s,p0-sex); printf(請(qǐng)輸入學(xué)生的出生年月:); scanf(%s,p0-birthday); printf(請(qǐng)輸入學(xué)生的地址:); scanf(%s,p0-address); printf(請(qǐng)輸入學(xué)生的:); sc
11、anf(%s,p0-tele_num); printf(請(qǐng)輸入學(xué)生的E-mail:); scanf(%s,p0-E_mail); insert(p0); printf(該學(xué)生的信息為:n); printf(); printf(學(xué)號(hào)t姓名t年齡t性別t出生年月tt地址ttE-mailn); display(p0);void insert(struct student *stu)/根據(jù)學(xué)號(hào)對(duì)學(xué)生進(jìn)行排序/ struct student *p0, *p1, *p2; p1 = head; p0 = stu; if(head = NULL) head = p0; p0-next = NULL; els
12、e while(p0-num p1-num)&(p1-next != NULL) p2 = p1; p1 = p1-next; if(p0-num num) if(head = p1) head = p0; else p2-next = p0; p0-next = p1; else p1-next = p0; p0-next = NULL; TOTAL_NUM+;void display(struct student *p) printf(%ldt%st%dt%st%st%st%st%sn, p-num, p-name, p-age, p-sex, p-birthday, p-address,
13、 p-tele_num, p-E_mail);/瀏覽學(xué)生信息void displayAll() struct student *p; printf(學(xué)生總數(shù):%dn, TOTAL_NUM); p = head; if(head != NULL) printf(n學(xué)號(hào)t姓名t年齡t性別t出生年月t地址ttE-mailn); printf(); do display(p); p = p-next; while(p != NULL); printf(n);/查詢學(xué)生信息void query() int choice; choice = -1; do printf(n); printf(+-+n);
14、printf(| 按學(xué)號(hào)查詢 請(qǐng)按 1 |n); printf(| 按姓名查詢 請(qǐng)按 2 |n); printf(| 取消 請(qǐng)按 0 |n); printf(+-+n); printf(請(qǐng)輸入您的選擇:); scanf(%d, &choice); switch(choice) case 0: return; case 1:query_by_num();break; case 2:query_by_name(); break; default: printf(n無效選項(xiàng)!);break; while(choice != 0);/按學(xué)號(hào)查詢學(xué)生信息void query_by_num() int n
15、um; struct student *p1; printf(請(qǐng)輸入學(xué)生的學(xué)號(hào):); scanf(%ld, &num); if(head=NULL) printf(無學(xué)生記錄!n); return; p1=head; while(num!=p1-num & p1-next!=NULL) p1=p1-next; if(num = p1-num) printf(n學(xué)號(hào)t姓名t年齡t性別t出生年月t地址ttE-mailn); printf(); display(p1); else printf(沒有該學(xué)生記錄,請(qǐng)核對(duì)!);/按姓名查詢學(xué)生信息void query_by_name() char nam
16、e20; struct student *p1; printf(請(qǐng)輸入學(xué)生的姓名:); scanf(%s, name); if(head=NULL) printf(無學(xué)生記錄!n); return; p1=head; while(strcmp(name, p1-name) & p1-next!=NULL) p1=p1-next; if(!strcmp(name, p1-name) printf(n學(xué)號(hào)t姓名t年齡t性別t出生年月t地址ttE-mailn); printf(); display(p1); else printf(沒有該學(xué)生記錄,請(qǐng)核對(duì)!);/寫入文件void writeData(
17、) FILE* fp;/文件指針 struct student *p; fp = fopen(FILE_DATA_PATH, w); if (!fp) printf(文件打開錯(cuò)誤!); return; fprintf(fp,%dn, TOTAL_NUM); for(p = head; p!= NULL; p= p-next) fprintf(fp,%ldt%st%dt%st%st%st%st%sn, p-num, p-name, p-age, p-sex, p-birthday, p-address, p-tele_num, p-E_mail); fclose(fp); void freeAl
18、l() struct student *p1, *p2; p1=p2=head; while(p1) p2=p1-next; free(p1); p1=p2; /讀取文件void readData() FILE* fp;/文件指針 struct student *p1, *p2; fp = fopen(FILE_DATA_PATH, r); if (!fp) printf(文件打開錯(cuò)誤!); fscanf(fp,%dn, &TOTAL_NUM); head = p1 = p2 = (struct student *)malloc(LEN); fscanf(fp,%ldt%st%dt%st%st
19、%st%st%sn, &p1-num, p1-name, &p1-age, p1-sex, p1-birthday, p1-address, &p1-tele_num, p1-E_mail); while(!feof(fp) p1 = (struct student *)malloc(LEN); fscanf(fp,%ldt%st%dt%st%st%st%st%sn, &p1-num, p1-name, &p1-age, p1-sex, p1-birthday, p1-address, &p1-tele_num, p1-E_mail); p2-next = p1; p2 = p1; p2-ne
20、xt = NULL; fclose(fp);/刪除學(xué)生信息void del() struct student *p1, *p2; long int num; if(head = NULL) printf(無學(xué)生記錄!n); return; printf(請(qǐng)輸入您要?jiǎng)h除的學(xué)生的學(xué)號(hào):); scanf(%ld, &num); p1 = head; while(num != p1-num & p1-next != NULL) p2=p1; p1=p1-next; if(num=p1-num) if(p1=head) head=p1-next; else p2-next=p1-next; free(p
21、1); TOTAL_NUM-; else printf(沒有該學(xué)生記錄,請(qǐng)核對(duì)!n);/修改學(xué)生信息void change() struct student *p1, *p2; long int num; if(head = NULL) printf(無學(xué)生記錄!n); return; printf(請(qǐng)輸入您要修改的學(xué)生的學(xué)號(hào):); scanf(%ld, &num); p1=head; while(num !=p1-num & p1-next != NULL) p2=p1; p1=p1-next; if(num=p1-num) devise(p1); else printf(沒有該學(xué)生記錄,請(qǐng)核對(duì)!n);void devise(struct student *p) int choice; choice=-1; do printf(請(qǐng)選擇您要修改的學(xué)生
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【2021屆備考】2021屆全國(guó)名校生物試題分類解析匯編第六期(11月)-D單元-細(xì)胞的生命歷程
- 【名師一號(hào)】2020-2021學(xué)年高中生物(人教版)必修三雙基限時(shí)練15-生態(tài)系統(tǒng)的能量流動(dòng)
- 2021高一物理-1.2-運(yùn)動(dòng)的合成與分解-每課一練1(教科版必修2)
- 【語法突破-師說】2021高考(人教版)英語全程復(fù)習(xí)構(gòu)想-課時(shí)訓(xùn)練53-專題十三-數(shù)詞與主謂一致
- 河北省保定市四縣一中2024-2025學(xué)年高二上學(xué)期12月聯(lián)考化學(xué)試題 (含答案)
- 2021年高考英語考點(diǎn)總動(dòng)員系列-專題05-動(dòng)詞和動(dòng)詞短語(解析版)
- 【全程復(fù)習(xí)方略】2020年北師版數(shù)學(xué)文(陜西用)課時(shí)作業(yè):第十章-第一節(jié)隨機(jī)事件的概率
- 【中學(xué)教材全解】2020-2021學(xué)年人教版高中物理必修2-第7章-第2節(jié)-功備課資料素材庫
- 【名師一號(hào)】2021高考化學(xué)(蘇教版)一輪復(fù)習(xí)考點(diǎn)突破:5-3微粒之間的相互作用力和物質(zhì)的多樣性
- 大學(xué)生畢業(yè)實(shí)習(xí)報(bào)告(15篇)
- 畢業(yè)論文材料分揀裝置PLC控制系統(tǒng)方案
- 森林報(bào)測(cè)試題
- 刑法涉及安全生產(chǎn)的16宗罪解讀
- 京東五力模型分析
- 電大《電氣傳動(dòng)與調(diào)速系統(tǒng)》網(wǎng)絡(luò)課形考任務(wù)1-4作業(yè)及答案
- 銅精礦加工費(fèi)簡(jiǎn)析
- 機(jī)電拆除專項(xiàng)施工方案
- 變電站電氣一次工程監(jiān)理要點(diǎn)重點(diǎn)
- 足球?qū)m?xiàng)體育課教學(xué)大綱、教學(xué)計(jì)劃
- ASTMA153∕A153M-05鋼鐵制金屬構(gòu)件上鍍鋅層(熱浸)標(biāo)準(zhǔn)規(guī)范
- 牛津譯林版四年級(jí)英語上冊(cè)專項(xiàng)訓(xùn)練排序
評(píng)論
0/150
提交評(píng)論