學生管理系統(tǒng)
《學生管理系統(tǒng)》由會員分享,可在線閱讀,更多相關(guān)《學生管理系統(tǒng)(31頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 信息科學與技術(shù)學院 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計報告 題目名稱: 學生管理系統(tǒng) 專業(yè)班級: 11級計科2班 學生姓名: 陶 鑫 學生學號: 2011508035 指導教師: 郭 理 完成日期:2013-01-09 1 課程設(shè)計的目的 1 1.1 課程設(shè)計的目的 1 1.2 課程設(shè)計的題目 1 1.3 題目要求 1 2 概要設(shè)計 2 2.1 存儲結(jié)構(gòu) 2 2.2 基本操作 3 3 詳細設(shè)計 3 3.1 流程圖 3 3.2 源程序 10 4 測試 21 5 課
2、程設(shè)計總結(jié) 29 6參考書目: 29 1 課程設(shè)計的目的 1.1 課程設(shè)計的目的 更好的掌握數(shù)據(jù)結(jié)構(gòu)這門課程,會用數(shù)據(jù)結(jié)構(gòu)的基本思想及算法解決實際問題。更好的掌握鏈表,能進行各種基本的操作,提高編程能力。 1.2 課程設(shè)計的題目 《學生管理系統(tǒng)》 1.3 題目要求 使用下面的數(shù)據(jù),用C/C++設(shè)計一個簡單的學籍管理系統(tǒng),實現(xiàn)出最基本的功能。 學生基本信息文件(A.TXT)及其內(nèi)容:A.TXT文件不需要編程錄入數(shù)據(jù),可用文本編輯工具直接生成 學號 姓名 性別 宿舍號碼 電話號碼 01 張成成 男 501 87732111
3、 02 李成華 女 101 87723112 03 王成鳳 女 101 87723112 04 張明明 男 502 87734333 05 陳東 男 501 87732111 06 李果 男 502 87734333 07 張園園 女 102 87756122 … …. .. … ……….. 學生成績基本信息文件(B.TXT)及其內(nèi)容: 學號 課程編號 課程名稱 學分 平時成績 實驗成績 卷面成績
4、 綜合成績 實得學分 01 A01 大學物理 3 66 78 82 02 B03 高等數(shù)學 4 78 -1 90 01 B03 高等數(shù)學 4 45 -1 88 02 C01 VF 3 65 76 66 … …. ………. .. .. … (一) 功能要求及說明: (1) 數(shù)
5、據(jù)錄入功能: 對B.TXT進行數(shù)據(jù)錄入,只錄入每個學生的學號、課程編號、課程名稱、學分、平時成績、實驗成績、卷面成績共7個數(shù)據(jù). 綜合成績、學分由程序根據(jù)條件自動運算。 綜合成績的計算:如果本課程的實驗成績?yōu)?1,則表示無實驗,綜合成績=平時成績*30%+卷面成績*70%; 如果實驗成績不為-1,表示本課程有實驗,綜合成績=平時成績*15%+實驗成績*.15%+卷面成績*70% . 實得學分的計算: 采用等級學分制. 綜合成績在90-100之間 ,應(yīng)得學分=學分*100% 綜合成績在80-90之間 ,應(yīng)得學分=學分*80% 綜合成績在70-80之間 ,應(yīng)得學分=學分
6、*75% 綜合成績在60-70之間 ,應(yīng)得學分=學分*60% 綜合成績在60以下 ,應(yīng)得學分=學分*0% (2)查詢功能:分為學生基本情況查詢和成績查詢兩種 A:學生基本情況查詢: A1----輸入一個學號或姓名(可實現(xiàn)選擇),查出此生的基本信息并顯示輸出。 A2---輸入一個宿舍號碼,可查詢出本室所有的學生的基本信息并顯示輸出。 B:成績查詢: B1:輸入一個學號時,查詢出此生的所有課程情況,格式如下: 學 號:xx 姓 名:xxxxx 課程編號:xxx 課程名稱:xxxxx 綜合成績:xxxx 實得學分: xx
7、 課程編號:xxx 課程名稱:xxxxx 綜合成績:xxxx 實得學分: xx 課程編號:xxx 課程名稱:xxxxx 綜合成績:xxxx 實得學分: xx … … … … ……… … … 共修:xx科,實得總學分為: xxx (3)刪除功能:當在A.TXT中刪除一個學生時,自動地在B.TXT中刪除此人所有信息。 (4 ) 排序功能:能實現(xiàn)選擇按綜合成績或?qū)嵉脤W分升序或降序排序并顯示數(shù)據(jù)。 (二)其它要求: (1) 只能使用C/C++語言,源程序要有適當?shù)淖⑨?,使程序容易?/p>
8、讀 (2) 至少采用文本菜單界面(如果能采用圖形菜單界面更好) (3) 學生可自動增加新功能模塊(視情況可另外加分) (4)寫出課程設(shè)計報告,具體要求見相關(guān)說明文檔 2 概要設(shè)計 2.1 存儲結(jié)構(gòu) 首先,為了能使自己得到鍛煉,存儲結(jié)構(gòu)我使用了順序存儲與鏈式存儲,學生基本信息用的數(shù)組來存儲,對學生成績基本信息使用鏈表進行存儲。結(jié)構(gòu)體定義如下: //學生基本信息的結(jié)構(gòu)體定義 typedef struct student {string xuehao; //學號 string name; //姓名 string gender; //性別 string sushe
9、; //宿舍號 string tel;//電話 }student; //學生成績信息的結(jié)構(gòu)體定義 typedef struct grade {string xuehao;//學號 string courseno; //課程號 string coursename; //課程名稱 int xuefen; //學分 int pingshi; //平時成績 int shiyan; //實驗成績 int juanmian;//卷面成績 float zonghe;//綜合成績 float shide;//實得學分 grade *next; }
10、grade; 2.2 基本操作 (1)數(shù)據(jù)錄入功能 (2)查詢功能 (3)刪除功能 (4)排序功能 (5)顯示所有學生信息 (6)保存 (7)退出 3 詳細設(shè)計 3.1 流程圖 各個算法的設(shè)計如下: 1.主函數(shù):int main( ); 從A.txt中讀取存儲的學生基本信息到內(nèi)存,以便進行處理,過程如圖1 開始 創(chuàng)建存儲學生信息的單鏈表的頭結(jié)點 將學生信息讀取到內(nèi)存 調(diào)用菜單函數(shù) 結(jié)束
11、 圖 1 2. 菜單函數(shù):void menu(student *stu,grade *head,grade *gra); stu是指向?qū)W生基本信息數(shù)組的指針,head是指向?qū)W生成績信息鏈表頭結(jié)點的指針,gra是指向?qū)W生成績信息鏈表最后一個結(jié)點的指針。 用于進行指示進行各種操作,是與每個函數(shù)都相聯(lián)系的一個函數(shù),功能操作見圖2 6保存 0退出 開始 輸入i 菜單 4排序 3刪除 5顯示學生信息 2查詢 1數(shù)據(jù)錄入 其他有誤誤 結(jié)束 6保存
12、 0退出 開始 輸入i 菜單 4排序 3刪除 5顯示學生信息 2查詢 1數(shù)據(jù)錄入 其他有誤誤 圖2 3. 數(shù)據(jù)錄入函數(shù):void luru(grade *gra); 其中g(shù)ra是指向單鏈表最后一個結(jié)點的指針,用于后插法中進行插入。 將學生成績信息依次輸入單鏈表中,其中單鏈表邊輸入邊創(chuàng)建,綜合成績和實得學分可由計算機自己計算。流程圖見圖3 判斷成績范圍 應(yīng)得學分=學分*100% 應(yīng)得學分=學分*80% 應(yīng)得學
13、分=學分*75% 應(yīng)得學分=學分*60% 應(yīng)得學分=0 結(jié)束 綜合成績=平時成績*15%+實驗成績*.15%+卷面成績*70% 輸入學生平時成績 輸入學生實驗成績 輸入學生卷面成績 輸入學生課程編號 輸入學生的學號 輸入學生學分 開始 gra->shiyan=-1 綜合成績=平時成績*30%+卷面成績*70% 輸入學生平時成績 輸入學生實驗成績 輸入學生卷面成績 輸入學生課程編號 輸入學生的學號 輸入學生學分 開始 gra->shiyan=-1
14、 Y N 綜合成績=平時成績*30%+卷面成績*70% 90-100 80-90 70-80 60-70 60以下 圖3 4.查詢功能:void lookfor(student *p,grade *h
15、ead); P為指向?qū)W生基本信息數(shù)組的指針,head為指向?qū)W生成績鏈表的頭結(jié)點的指針。 有學生基本情況查詢和成績查詢兩種大功能,基本情況查詢又分為按學號或姓名查找單個學生基本信息,也可輸入宿舍號查詢整個宿舍學生的基本信息。成績查詢只要輸入學號便可查詢相應(yīng)學生的成績信息。見圖4 1.輸入一個學號或姓名 2.輸入一個宿舍號碼 a 按學號查找 b 按姓名查找 輸出一個宿舍學生信息 輸出相應(yīng)學生信息 輸出相應(yīng)學生所有成績 結(jié)束 開始 輸入i A:學生基本情況查詢 B:成績查詢 輸入j 輸入學號
16、 圖4 5. 刪除功能:void del(student *stu,grade *head); stu為指向?qū)W生基本信息數(shù)組的指針,head為指向?qū)W生成績鏈表的頭結(jié)點的指針。 執(zhí)行刪除功能時在存儲學生基本信息的數(shù)組中與存儲學生成績信息的鏈表中同時刪除該學生信息,以便進行下面操作與向文件中存儲信息。功能見圖5 開始 輸入要刪除學生的學號 在學生基本信息中刪除 在學生成績基本信息中刪除 結(jié)束
17、 圖5 6. 排序功能:void sort(grade *head); head為指向?qū)W生成績鏈表的頭結(jié)點的指針。 下面流程圖實現(xiàn)的是按綜合成績升序排序,使用的選擇排序法,雖說使用的存儲結(jié)構(gòu)為鏈式存儲結(jié)構(gòu),但排序時并非改變的指針指向,而是只修改存儲的信息,指針指向不用改變。如圖6 開始 head=head->next head->next!=NULL p=head->next P!=NULL
18、 head->zonghe>p->zonghe 交換相鄰節(jié)點中數(shù)據(jù) p=p->next 結(jié)束 N Y P!=NULL head->zonghe>p->zonghe 交換相鄰節(jié)點中數(shù)據(jù) p=p->next
19、 N Y N Y head=head->next
20、 圖6 7. 顯示所有學生信息:void show(student *stud); stud為指向?qū)W生基本信息數(shù)組的指針 用于顯示內(nèi)存中學生基本情況信息,以便更好了解學生的一些情況. 開始 i=1 stud[i].xuehao!="0" 輸出學號,姓名,性別,宿舍,電話號 結(jié)束 N Y
21、 i++ 圖7 8. 保存功能:void save1(student *stud); void save2(grade *head); stud為指向?qū)W生基本信息數(shù)組的指針,head為指向?qū)W生成績鏈表的頭結(jié)點的指針。函數(shù)用于將內(nèi)存中數(shù)據(jù)存儲到文件中以便更好保存信息。 開始 輸入i i==1 I==2 保存學生基本信息到A.TXT 保
22、存學生成績信息到B.TXT
輸入有誤,重新操作!
結(jié)束
N
Y N
Y
圖8
3.2 源程序
#define num 10
#include
23、
#include
24、ring courseno; //課程號 string coursename; //課程名稱 int xuefen; //學分 int pingshi; //平時成績 int shiyan; //實驗成績 int juanmian;//卷面成績 float zonghe;//綜合成績 float shide;//實得學分 grade *next; }grade; void luru(grade *gra); void menu(student *stu,grade *head,grade *gra); void lookfor(studen
25、t *p,grade *head); void sort(grade *head); void out(grade *head); void sort1(grade *head); void del(student *stu,grade *head); void show(student *stu); void save1(student *stud); void save2(grade *head); void leave(); //數(shù)據(jù)錄入 void luru(grade *gra) {string str; cout<<"請輸入學生的學號,"<<
26、endl;
cin>>str;
gra->xuehao=str;
cout<<"請錄入該生課程編號"<
27、錄入該生實驗成績"<
28、計算 if(gra->zonghe>=90&&gra->zonghe<=100) gra->shide=gra->xuefen; else if(gra->zonghe>=80) gra->shide=gra->xuefen*0.8; else if(gra->zonghe>=70) gra->shide=gra->xuefen*0.75; else if(gra->zonghe>=60) gra->shide=gra->xuefen*0.60; else
29、if(gra->zonghe<60)
gra->shide=0;
else
cout<<"您輸入有誤,請按提示操作!"< 30、成績查詢 --"< 31、--------------"< 32、<
33、t<<"請輸入姓名:"<
34、輸入宿舍號:"<
35、 B:
cout<<"請輸入要查詢學生的學號:"< 36、 <<"課程名稱:"< 37、}
//刪除功能
void del(student *stu,grade *head)
{string str;
grade *p=head->next;
grade *q;
cout<<"請輸入要刪除學生的學號:"< 38、;
stu[j].name=stu[j+1].name;
stu[j].sushe=stu[j+1].sushe;
stu[j].tel=stu[j+1].tel;
stu[j].xuehao=stu[j+1].xuehao;
}
stu[j].gender="0";
stu[j].name="0";
stu[j].sushe="0";
stu[j].tel="0";
stu[j].xuehao="0";
}
}
//在學生成績基本信息中刪除
while(p)
{
if 39、(p->xuehao==str)
{head->next=p->next;
q=p;
p=p->next;
delete q;
}
else
{p=p->next;
head=head->next;
}
}
cout<<"刪除成功!"< 40、head=head->next)
{for(grade *p=head->next;p;p=p->next)
{
if(head->zonghe>p->zonghe)
{temp->xuehao=head->xuehao;
head->xuehao=p->xuehao;
p->xuehao=temp->xuehao;
temp->courseno=head->courseno;
head->courseno=p->courseno;
p->courseno=temp->courseno;
41、 temp->coursename=head->coursename;
head->coursename=p->coursename;
p->coursename=temp->coursename;
temp->xuefen=head->xuefen;
head->xuefen=p->xuefen;
p->xuefen=temp->xuefen;
temp->pingshi=head->pingshi;
head->pingshi=p->pingshi;
p->pingshi=temp->pingshi;
42、
temp->shiyan=head->shiyan;
head->shiyan=p->shiyan;
p->shiyan=temp->shiyan;
temp->juanmian=head->juanmian;
head->juanmian=p->juanmian;
p->juanmian=temp->juanmian;
temp->zonghe=head->zonghe;
head->zonghe=p->zonghe;
p->zonghe=temp->zonghe;
temp->shide=head- 43、>shide;
head->shide=p->shide;
p->shide=temp->shide;//數(shù)據(jù)交換
}
}
}
cout<<"按綜合成績升序排序為:"< 44、
if(head->shide 45、sename;
p->coursename=temp->coursename;
temp->xuefen=head->xuefen;
head->xuefen=p->xuefen;
p->xuefen=temp->xuefen;
temp->pingshi=head->pingshi;
head->pingshi=p->pingshi;
p->pingshi=temp->pingshi;
temp->shiyan=head->shiyan;
head->shiyan=p->shiyan;
p 46、->shiyan=temp->shiyan;
temp->juanmian=head->juanmian;
head->juanmian=p->juanmian;
p->juanmian=temp->juanmian;
temp->zonghe=head->zonghe;
head->zonghe=p->zonghe;
p->zonghe=temp->zonghe;
temp->shide=head->shide;
head->shide=p->shide;
p->shide=temp->shide;
47、 }
}
}
cout<<"按實得學分降序排序為:"< 48、"\t"< 49、tud[i].name<<" "< 50、xuehao!="0";i++)
{
outfile< 51、err<<" 打開文件失敗,程序中止!"< 52、ename<<"\t"< 53、nt *stu,grade *head,grade *gra)
{int i;grade *p;
cout<<" 歡迎使用學生管理系統(tǒng),請按提示操作! "< 54、**********************"< 55、ra);
system("pause");
system("cls");
menu(stu,head,gra);
break;
case 2:lookfor(stu,head);
system("pause");
system("cls");
menu(stu,head,gra);
break;
case 3:
del(stu,head);
system("pause");
system("cls");
menu(stu,head, 56、gra);
break;
case 4:
cout<<"-------------------------------------------------"< 57、rt1(head);
else
{cout<<"您輸入有誤,請重新操作!"< 58、ra);
break;
case 6:cout<<"-------------------------------------------------"< 59、head);
else
{cout<<"您輸入有誤,請重新操作!"< 60、em("cls");
menu(stu,head,gra);
break;
}
}
int main()
{system("color 0e");
student stud[num];
grade *gra1,*r;
gra1=new grade;
gra1->next=NULL;
r=gra1;
for(int i=0;i 61、she="0";
stud[i].tel="0";
}
ifstream infile("A.txt",ios::in); //打開文件
if(!infile)
{
cerr<<" 讀取信息失敗,程序中止!"< 62、e.close(); //關(guān)閉文件
menu(stud,gra1,r);
return 0;
}
4 測試
(1)菜單界面
顯示各種功能需進行的各種操作,界面如下:
當輸入操作有誤時結(jié)果如下:
(2) 數(shù)據(jù)錄入功能
負責錄入學生成績信息,綜合成績和實得學分將由計算機自己完成。學生成績由鏈表相連時間復(fù)雜度為O(1),但程序還存在漏洞,當輸入成績?yōu)榉菙?shù)字類型時便會出現(xiàn)錯誤,還需進行完善。
輸入成績?yōu)榉菙?shù)字類型時便會出現(xiàn)錯誤,還需進行完善。如下圖:
(3) 查詢功能
63、
按提示進行操作得到的結(jié)果如下圖,其中包括正確操作與非正確操作下的情況。
無成績輸入時成績查詢結(jié)果為:
有成績輸入時查詢結(jié)果:
(4) 排序功能
當已有成績輸入時操作結(jié)果如下:
當無成績輸入時,給出提示“請先輸入學生成績信息再排序!”
(5) 刪除功能:
刪除后需保存,經(jīng)保存后便可在相應(yīng)文件中觀察到相應(yīng)信息的改變。
(6) 保存功能
分為學生基本信息保存和學生成績保存兩個功能:
(7) 顯示所有學生信 64、息功能:
(8) 退出功能:
5 課程設(shè)計總結(jié)
通過本次課程設(shè)計,我最大的收獲就是自己的動手能力得到了很大的提升,我發(fā)現(xiàn)只有自己動手才能更好的了解到自己的知識漏洞,很多小問題可能對代碼的編寫都有很大影響,像在編寫過程中我有時漏掉半撇括號,而在查找時就相當費力,所以多敲代碼很重要啊。對語言也得到了更深的了解。語言等于算法加數(shù)據(jù)結(jié)構(gòu),這句話確實很有道理,數(shù)據(jù)結(jié)構(gòu)給了我一種更好的思路,一種更好的思想,掌握一種思想遠比會很多語言來的重要,只有我們有了思路,有了更好的算法,我們的程序才會更加優(yōu)秀,空間復(fù)雜度,時間復(fù)雜度才會更加少。在設(shè)計過程中我遇到了很多錯誤或是難題,其中耗時最多的就是考慮存儲結(jié)構(gòu),只有有了一個好的存儲結(jié)構(gòu)對數(shù)據(jù)的操作才更加便利。
另外就是要有一顆永不言棄的心,遇到困難很正常,但不要輕易放棄,只要自信,有一顆戰(zhàn)勝一切的心,仔細查找錯誤,堅持下來肯定可以成功。
6參考書目:
[1]譚浩強,《C++程序設(shè)計》,清華大學出版社
[2]嚴蔚敏,李冬梅,吳偉民,《數(shù)據(jù)結(jié)構(gòu)》,人民郵電出版社
- 溫馨提示:
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)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023年六年級數(shù)學下冊6整理和復(fù)習2圖形與幾何第7課時圖形的位置練習課件新人教版
- 2023年六年級數(shù)學下冊6整理和復(fù)習2圖形與幾何第1課時圖形的認識與測量1平面圖形的認識練習課件新人教版
- 2023年六年級數(shù)學下冊6整理和復(fù)習1數(shù)與代數(shù)第10課時比和比例2作業(yè)課件新人教版
- 2023年六年級數(shù)學下冊4比例1比例的意義和基本性質(zhì)第3課時解比例練習課件新人教版
- 2023年六年級數(shù)學下冊3圓柱與圓錐1圓柱第7課時圓柱的體積3作業(yè)課件新人教版
- 2023年六年級數(shù)學下冊3圓柱與圓錐1圓柱第1節(jié)圓柱的認識作業(yè)課件新人教版
- 2023年六年級數(shù)學下冊2百分數(shù)(二)第1節(jié)折扣和成數(shù)作業(yè)課件新人教版
- 2023年六年級數(shù)學下冊1負數(shù)第1課時負數(shù)的初步認識作業(yè)課件新人教版
- 2023年六年級數(shù)學上冊期末復(fù)習考前模擬期末模擬訓練二作業(yè)課件蘇教版
- 2023年六年級數(shù)學上冊期末豐收園作業(yè)課件蘇教版
- 2023年六年級數(shù)學上冊易錯清單十二課件新人教版
- 標準工時講義
- 2021年一年級語文上冊第六單元知識要點習題課件新人教版
- 2022春一年級語文下冊課文5識字測評習題課件新人教版
- 2023年六年級數(shù)學下冊6整理和復(fù)習4數(shù)學思考第1課時數(shù)學思考1練習課件新人教版