版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> c語言及數(shù)據結構與算法課程設計</p><p> 題 目 : 學生信息管理系統(tǒng) </p><p> 專 業(yè): </p><p> 姓 名: </p&
2、gt;<p> 學 號: </p><p> 同組其他學生(學號): </p><p> 2013年 月 日</p><p><b> 目 錄</b></p><p><
3、b> 一、需求分析3</b></p><p><b> 二、總體設計3</b></p><p><b> 三、詳細設計5</b></p><p><b> 四、調試與測試6</b></p><p><b> 五、測試結果7<
4、/b></p><p><b> 六、用戶手冊9</b></p><p><b> 七、附錄9</b></p><p><b> 一、需求分析</b></p><p> 每年九月份都有大量新生來到學校報道,使學校管理學生工作量增大,為此我們設計一學生信息管理系
5、統(tǒng),學生信息包括:學號,姓名,年齡,性別,出生年月,地址,電話,E-mail等。使之能提供以下功能:</p><p> (1)系統(tǒng)以菜單方式工作</p><p> ?。?)學生信息錄入功能---輸入</p><p> ?。?)學生信息瀏覽功能---輸出</p><p> (4)查詢、排序功能---算法按學號查詢、按姓名查詢、學生信息的刪除
6、與修改(可選項)</p><p><b> 二、總體設計</b></p><p><b> 組成框圖</b></p><p><b> 流程圖</b></p><p> 錄入 瀏覽</p>&l
7、t;p> 查詢 修改&刪除</p><p><b> 三、詳細設計</b></p><p> 主函數(shù)通過在while循環(huán)結構中嵌入switch分支結構實現(xiàn)操作選擇功能。</p><p> ?。?)Record錄入函數(shù)</p><p>
8、; 建立一個包含學生全部信息的結構體,申請空間,其指針為p0,存入學生各項對應的數(shù)據。</p><p> ?。?)Insert插入函數(shù):</p><p> 按輸入的數(shù)據存儲在一個stu類型的指針里,若原來鏈表里沒有元素,則將此作為第一個元素;若原來的鏈表里有元素,則將指向頭結點指針存儲的學號與頭指針下一個的學號大小進行比較,小的在前大的在后,之后指向頭結點處的指正后移,進行比較,直到尾
9、結點為止。</p><p> 在進行比較的while函數(shù)內,每比較一次,計算總人數(shù)的TOTAL_NUM自加。</p><p> (3)Display瀏覽函數(shù):</p><p> 將傳給Display函數(shù)的指針P所指向的結構體的各項數(shù)據輸出以便核對信息。</p><p> (4)DisplayAll瀏覽函數(shù):</p>&l
10、t;p> 指針指向鏈表頭結點,在if語句中嵌套do-while語句將學生信息按學號從大到小進行逐一輸出。</p><p> ?。?)Query查詢函數(shù):</p><p> 首先使用switch語句生成菜單,實現(xiàn)操作選擇功能。分三個部分按學號查詢、按姓名查詢和取消返回上一層。按學號查詢時調用while語句對學號檢索,再調用if語句進行判斷,最后輸出想要查詢的信息。按姓名查詢的方法跟
11、按學號查詢的一樣。</p><p> (6)Del刪除函數(shù):</p><p> 使用while語句進行檢索,直接刪除學生信息。</p><p> ?。?)Change修改函數(shù):</p><p> 建立devise函數(shù),生成菜單,用switch語句進行分叉選擇功能,選擇項目進行相應的信息輸入。在Change函數(shù)中使用while語句進行檢索
12、后再調用devise函數(shù)修改信息。實現(xiàn)學生信息修改。</p><p><b> 四、調試與測試</b></p><p> 1、進行多次運行,發(fā)現(xiàn)電話那欄的電話一打長就會顯示一樣的數(shù)字,打短的數(shù)字就可以。我們原本是使用長整型來定義電話號碼,想說空間不夠,后來改用字符型,用字符串記錄電話號碼程序運行結果正確。</p><p> 2、程序設計初
13、就在考慮退出與返回有什么差別,如果返回了主菜單那退出用什么,關于這個問題看了許多網上的資料,發(fā)現(xiàn)許多程序都有exit(0)的函數(shù),所以去查了不少關于exit的函數(shù)內容,最后退出就用了exit(0),但是又提醒說要編寫exit函數(shù),之后發(fā)現(xiàn)要加入<stdlib.h>的頭文件,程序可以正常運行。</p><p> 3、程序在180行顯示說readData函數(shù)不可以返回值,所以在if條件句中將return
14、 0刪除了,不過這個程序在學校的機房即使不刪return 0也是可以運行的,關于這點很是不解,還有待解決。</p><p><b> 五、測試結果</b></p><p> 1、進入系統(tǒng)界面,輸入密碼,超過三次會自動退出。</p><p> 2、選1時錄入學生信息,編輯完后會繼續(xù)顯示菜單</p><p> 3、選
15、2瀏覽學生信息 ,之后繼續(xù)返回菜單界面,為節(jié)省空間菜單界面暫不截圖</p><p> 4、選擇3查詢學生信息會有按學號與按姓名查詢。下圖是先按學號查詢的截圖。</p><p> 5、按姓名查詢時,如果查無此人會顯示“沒有該學生信息,請核對?!敝蠓祷厣弦粚樱葱彰樵?。顯示學生信息后可以選擇取消返回主菜單。</p><p> 6、選擇4刪除學生,輸入學號刪除學
16、生的信息。之后會返回主菜單</p><p> 7選擇5修改學生信息,按學號輸入,之后按顯示輸入即可。</p><p> 用幾組測試數(shù)據進行測試算法設計的正確性。(附上程序運行的截圖)</p><p><b> 六、用戶手冊</b></p><p> 1程序一開始會顯示歡迎界面,按要求輸入密碼,3次錯誤會退出程序。
17、</p><p> 2 密碼正確后會顯示主菜單,按要求輸入您的需求。</p><p><b> 七、附錄</b></p><p> 源程序清單和結果:源程序要加注釋。結果要包括測試數(shù)據和運行結果。</p><p> /* Note:Your choice is C IDE */</p><p&
18、gt; #include <stdio.h></p><p> #include <malloc.h></p><p> #include <string.h></p><p> #include <io.h></p><p> #include <stdlib.h><
19、;/p><p> #define NULL 0</p><p> #define LEN sizeof(struct student)</p><p> #define FILE_DATA_PATH "c:\student.txt" </p><p> struct student </p><
20、p> { long int num;</p><p> char name[20];</p><p><b> int age;</b></p><p> char sex[4];</p><p> char birthday[10];</p><p> char address
21、[30];</p><p> char tele_num[13];</p><p> char E_mail[20];</p><p> struct student *next;};</p><p> int TOTAL_NUM = 0;</p><p> struct student *head = NU
22、LL;</p><p> void welcome();</p><p> void mainmenu();</p><p> void record();</p><p> void insert(struct student *stu);</p><p> void display(struct stud
23、ent *stu);</p><p> void displayAll();void query();</p><p> void query_by_num();void query_by_name();</p><p> void readData();</p><p> void writeData();</p>&
24、lt;p> void freeAll();</p><p> void del();</p><p> void change();</p><p> void devise(struct student *p);</p><p> int main(){ </p><p> char user
25、PWD[7]; int i;</p><p> welcome(); </p><p> for(i = 0; i < 3; i++) { </p><p> printf("\n密碼為123\n"); </p><p> printf(&quo
26、t;\n請輸入您的密碼:"); </p><p> scanf("%s", userPWD); </p><p> if (strcmp(userPWD,"123")==0) </p><p> { //密碼正確,顯示主菜單
27、 </p><p> mainmenu(); break; } </p><p> else </p><p> { if (i < 2) </p><p> { //用戶名或密碼錯誤,提示用戶重新輸入
28、 </p><p> printf("密碼錯誤,請重新輸入!"); } </p><p> else { //連續(xù)3次輸錯用戶名或密碼,退出系統(tǒng)。 </p><p> printf("
29、;您已連續(xù)3次將密碼輸錯,系統(tǒng)將退出!"); </p><p> } } } </p><p> return 0;}//顯示歡迎信息</p><p> void welcome(){ </p><p> printf("+~~~~~~~~~~~~~~~~~~~~~~~
30、~~~~+\n"); </p><p> printf("| |\n"); </p><p> printf("| 歡迎使用學生信息管理系統(tǒng) |\n"); </p><p> printf("|
31、 |\n"); </p><p> printf("+~~~~~~~~~~~~~~~~~~~~~~~~~~~+\n");}//系統(tǒng)主菜單</p><p> void mainmenu(){ int choice; choice = -1; </p><p> readData(); </
32、p><p> printf("\n溫馨提示:為保證您的操作得到保存,請按正常順序退出系統(tǒng)^_^\n"); </p><p><b> do </b></p><p> { printf("\n\n\n"); </p><p> printf("
33、;\t\t\t--------------------------------\n"); </p><p> printf("\t\t\t+ 學生信息管理系統(tǒng) |\n"); </p><p> printf("\t\t\t--------------------------------\n");
34、 </p><p> printf("\t\t\t+ 1----錄入學生信息 |\n"); </p><p> printf("\t\t\t+ 2----瀏覽學生信息 |\n"); </p><p> printf("\t\t\t+ 3--
35、--查詢學生信息 |\n"); </p><p> printf("\t\t\t+ 4----刪除學生信息 |\n"); </p><p> printf("\t\t\t+ 5----修改學生信息 |\n"); </p><p> printf("
36、\t\t\t+ 0----退出系統(tǒng) |\n"); </p><p> printf("\t\t\t--------------------------------\n"); </p><p> printf("請輸入您的選擇:"); </p><p>
37、scanf("%d", &choice); </p><p> switch(choice) { </p><p> case 0: writeData(); freeAll(); exit(0); </p><p> case
38、 1: record(); break; </p><p> case 2: displayAll(); break; </p><p> case 3: query(); break; </p><p> case
39、 4: del(); break; </p><p> case 5: change(); break; </p><p> default: printf("\n無效選項!"); break; } }
40、 </p><p> while(choice != 0);}//錄入學生信息</p><p> void record(){ struct student *p0; </p><p> p0 = (struct student *)malloc(LEN); </p><p> printf("請輸入學生的學號:&
41、quot;); </p><p> scanf("%ld",&p0->num); </p><p> printf("請輸入學生的姓名:"); </p><p> scanf("%s",p0->name); </p><p> printf(&qu
42、ot;請輸入學生的年齡:"); </p><p> scanf("%d",&p0->age); </p><p> printf("請輸入學生的性別:"); </p><p> scanf("%s",p0->sex); </p><p> pri
43、ntf("請輸入學生的出生年月:"); </p><p> scanf("%s",p0->birthday); </p><p> printf("請輸入學生的地址:"); </p><p> scanf("%s",p0->address); </p>&
44、lt;p> printf("請輸入學生的電話:"); </p><p> scanf("%s",p0->tele_num); </p><p> printf("請輸入學生的E-mail:"); </p><p> scanf("%s",p0->E_mail);
45、 </p><p> insert(p0); </p><p> printf("該學生的信息為:\n"); </p><p> printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
46、</p><p> printf("學號\t姓名\t年齡\t性別\t出生年月\t\t地址\t電話\tE-mail\n"); </p><p> display(p0);}</p><p> void insert(struct student *stu)//根據學號對學生進行排序//</p><p><b>
47、; { </b></p><p> struct student *p0, *p1, *p2; p1 = head; </p><p> p0 = stu; </p><p> if(head == NULL) { head = p0; p0->next = NULL; }</p><p> else {
48、 while((p0->num > p1->num)&&(p1->next != NULL)) </p><p> { p2 = p1; p1 = p1->next; } </p><p> if(p0->num <= p1->num) { if(head == p1) head = p0;&l
49、t;/p><p> else p2->next = p0; </p><p> p0->next = p1; } </p><p> else { p1->next = p0; p0->next = NULL; } } </p><p> TOTAL_NUM++;}</p>
50、<p> void display(struct student *p){ </p><p> printf("%ld\t%s\t%d\t%s\t%s\t%s\t%s\t%s\n", p->num, p->name, p->age, p->sex, p->birthday, p->address, p->tele_num, p->
51、E_mail);}//瀏覽學生信息</p><p> void displayAll(){ </p><p> struct student *p; </p><p> printf("學生總數(shù):%d\n", TOTAL_NUM); </p><p> p = head; </p><p>
52、; if(head != NULL) { </p><p> printf("\n學號\t姓名\t年齡\t性別\t出生年月\t地址\t電話\tE-mail\n"); </p><p> printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
53、^^^^^"); </p><p> do { display(p); p = p->next; } while(p != NULL); } printf("\n");}//查詢學生信息</p><p> void query(){ int choice; </p><p> choice = -1;
54、</p><p> do { printf("\n"); </p><p> printf("+--------------------+\n"); </p><p> printf("| 按學號查詢 請按 1 |\n"); </p&
55、gt;<p> printf("| 按姓名查詢 請按 2 |\n"); </p><p> printf("| 取消 請按 0 |\n"); </p><p> printf("+--------------------+\n"); </p&g
56、t;<p> printf("請輸入您的選擇:"); </p><p> scanf("%d", &choice); </p><p> switch(choice) { case 0: return;</p><p> case 1:que
57、ry_by_num();break; </p><p> case 2:query_by_name(); break; </p><p> default: printf("\n無效選項!");break; } } </p><p> while(choice !=
58、 0);}//按學號查詢學生信息</p><p> void query_by_num(){ </p><p><b> int num; </b></p><p> struct student *p1; </p><p> printf("請輸入學生的學號:"); </p>
59、<p> scanf("%ld", &num); </p><p> if(head==NULL) { printf("無學生記錄!\n"); return; } </p><p><b> p1=head; </b></p><p> while(num!=p1->
60、num && p1->next!=NULL) p1=p1->next; </p><p> if(num == p1->num) { </p><p> printf("\n學號\t姓名\t年齡\t性別\t出生年月\t地址\t電話\tE-mail\n"); </p><p> printf(&qu
61、ot;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"); </p><p> display(p1); } else printf("沒有該學生記錄,請核對!");}//按姓名查詢學生信息</p><p> void query_b
62、y_name(){ char name[20]; struct student *p1; printf("請輸入學生的姓名:"); </p><p> scanf("%s", name); if(head==NULL) { printf("無學生記錄!\n"); return; } p1=head; </p><p>
63、 while(strcmp(name, p1->name) && p1->next!=NULL) p1=p1->next; </p><p> if(!strcmp(name, p1->name)) { </p><p> printf("\n學號\t姓名\t年齡\t性別\t出生年月\t地址\t電話\tE-mail\n"
64、;); </p><p> printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"); </p><p> display(p1); } </p><p> else printf("沒有該學生記錄,請
65、核對!");}//寫入文件</p><p> void writeData(){ FILE* fp;//文件指針 </p><p> struct student *p; </p><p> fp = fopen(FILE_DATA_PATH, "w"); </p><p> if (!f
66、p) { printf("文件打開錯誤!"); return; } </p><p> fprintf(fp,"%d\n", TOTAL_NUM); </p><p> for(p = head; p!= NULL; p= p->next) { </p><p>
67、 fprintf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%s\t%s\n", </p><p> p->num, p->name, p->age, p->sex, p->birthday, p->address, p->tele_num, p->E_mail); } </p>&
68、lt;p> fclose(fp); }</p><p> void freeAll(){ </p><p> struct student *p1, *p2; </p><p> p1=p2=head; </p><p> while(p1) { p2=p1->next; free(p1); p1=p2; } }
69、//讀取文件</p><p> void readData(){ FILE* fp;//文件指針 </p><p> struct student *p1, *p2; </p><p> fp = fopen(FILE_DATA_PATH, "r"); </p><p> if (!fp)
70、{ printf("文件打開錯誤!"); } </p><p> fscanf(fp,"%d\n", &TOTAL_NUM); </p><p> head = p1 = p2 = (struct student *)malloc(LEN); </p><p> fscanf(fp,"
71、;%ld\t%s\t%d\t%s\t%s\t%s\t%s\t%s\n", &p1->num, p1->name, &p1->age, p1->sex, p1->birthday, p1->address, &p1->tele_num, p1->E_mail); </p><p> while(!feof(fp)) &
72、lt;/p><p> { p1 = (struct student *)malloc(LEN); </p><p> fscanf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%s\t%s\n", &p1->num, p1->name, &p1->age, p1->sex, p1->bi
73、rthday, p1->address, &p1->tele_num, p1->E_mail); p2->next = p1; p2 = p1; } </p><p> p2->next = NULL; fclose(fp);}//刪除學生信息</p><p> void del(){ struct student *p1, *p2; <
74、/p><p> long int num; </p><p> if(head == NULL) </p><p> { printf("無學生記錄!\n"); return; } </p><p> printf("請輸入您要刪除的學生的學號:"); </p><p>
75、; scanf("%ld", &num); </p><p> p1 = head; </p><p> while(num != p1->num && p1->next != NULL) </p><p> { p2=p1; </p><p> p1=p1->n
76、ext; } </p><p> if(num==p1->num) </p><p> { if(p1==head) </p><p> head=p1->next; </p><p> else p2->next=p1->next; </p><p> free(p1);
77、 </p><p> TOTAL_NUM--;} </p><p> else printf("沒有該學生記錄,請核對!\n");}//修改學生信息</p><p> void change(){ struct student *p1, *p2; long int num; </p><p> if(head
78、== NULL) </p><p> { printf("無學生記錄!\n"); </p><p> return; } </p><p> printf("請輸入您要修改的學生的學號:");</p><p> scanf("%ld", &num); </p
79、><p> p1=head; </p><p> while(num !=p1->num && p1->next != NULL) </p><p> { p2=p1; p1=p1->next; } </p><p> if(num==p1->num) devise(p1); </
80、p><p> else printf("沒有該學生記錄,請核對!\n");}</p><p> void devise(struct student *p)</p><p> { int choice; </p><p> choice=-1; </p><p><b>
81、 do </b></p><p> { printf("請選擇您要修改的學生的信息內容:\n"); </p><p> printf("+----------------------+\n"); </p><p> printf("| 姓
82、名 請按 1 |\n"); </p><p> printf("| 年齡 請按 2 |\n"); </p><p> printf("| 性別 請按 3 |\n"); </p><p> printf("| 出生年月 請
83、按 4 |\n"); </p><p> printf("| 地址 請按 5 |\n"); </p><p> printf("| 電話 請按 6 |\n"); </p><p> printf("| E-mail 請按 7 |\n")
84、; </p><p> printf("| 取消 請按 0 |\n"); </p><p> printf("+----------------------+\n"); </p><p> printf("請輸入您的選擇:"); </
85、p><p> scanf("%d", &choice); </p><p> switch(choice) { case 0: return; </p><p> case 1: printf("請輸入新姓名:"); sca
86、nf("%s", p->name); break; </p><p> case 2: printf("請輸入新年齡:"); scanf("%d", &p->age);break; </p><p> case 3: printf("請輸入新性別:"
87、;); scanf("%s", p->sex); break; </p><p> case 4: printf("請輸入新出生年月:"); scanf("%s", p->birthday); break; </p><p> cas
88、e 5: printf("請輸入新地址:"); scanf("%s", p->address); break; </p><p> case 6: printf("請輸入新電話:"); scanf("%s", &p->tele_num);
89、 break; </p><p> case 7: printf("請輸入新E-mail:"); scanf("%s", p->E_mail); break; </p><p> default:printf("\n無效選項!");
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c語言課程設計--- 學生信息管理系統(tǒng)
- c語言課程設計--學生信息管理系統(tǒng)
- c語言課程設計——學生信息管理系統(tǒng)
- c語言課程設計---學生信息管理系統(tǒng)
- 學生信息管理系統(tǒng)-c語言課程設計
- c語言課程設計---學生信息管理系統(tǒng)
- c語言課程設計--學生信息管理系統(tǒng)
- c語言課程設計-學生信息管理系統(tǒng)
- c語言課程設計-學生信息管理系統(tǒng)
- c語言課程設計--學生信息管理系統(tǒng)
- c語言課程設計--學生信息管理系統(tǒng)
- c語言課程設計-學生信息管理系統(tǒng)
- c語言課程設計-學生信息管理系統(tǒng)
- c語言課程設計---學生信息管理系統(tǒng)設計
- c語言課程設計----學生信息管理系統(tǒng)設計
- c語言課程設計--學生信息管理
- 學生信息管理系統(tǒng)c語言課程設計報告
- c語言課程設計--學生信息管理系統(tǒng) (2)
- c語言課程設計--學生信息管理系統(tǒng) (2)
- c語言課程設計報告----學生信息管理系統(tǒng)
評論
0/150
提交評論