學(xué)生管理系統(tǒng)
《學(xué)生管理系統(tǒng)》由會員分享,可在線閱讀,更多相關(guān)《學(xué)生管理系統(tǒng)(31頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 信息科學(xué)與技術(shù)學(xué)院 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計報告 題目名稱: 學(xué)生管理系統(tǒng) 專業(yè)班級: 11級計科2班 學(xué)生姓名: 陶 鑫 學(xué)生學(xué)號: 2011508035 指導(dǎo)教師: 郭 理 完成日期: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 詳細(xì)設(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)的基本思想及算法解決實際問題。更好的掌握鏈表,能進(jìn)行各種基本的操作,提高編程能力。 1.2 課程設(shè)計的題目 《學(xué)生管理系統(tǒng)》 1.3 題目要求 使用下面的數(shù)據(jù),用C/C++設(shè)計一個簡單的學(xué)籍管理系統(tǒng),實現(xiàn)出最基本的功能。 學(xué)生基本信息文件(A.TXT)及其內(nèi)容:A.TXT文件不需要編程錄入數(shù)據(jù),可用文本編輯工具直接生成 學(xué)號 姓名 性別 宿舍號碼 電話號碼 01 張成成 男 501 87732111
3、 02 李成華 女 101 87723112 03 王成鳳 女 101 87723112 04 張明明 男 502 87734333 05 陳東 男 501 87732111 06 李果 男 502 87734333 07 張園園 女 102 87756122 … …. .. … ……….. 學(xué)生成績基本信息文件(B.TXT)及其內(nèi)容: 學(xué)號 課程編號 課程名稱 學(xué)分 平時成績 實驗成績 卷面成績
4、 綜合成績 實得學(xué)分 01 A01 大學(xué)物理 3 66 78 82 02 B03 高等數(shù)學(xué) 4 78 -1 90 01 B03 高等數(shù)學(xué) 4 45 -1 88 02 C01 VF 3 65 76 66 … …. ………. .. .. … (一) 功能要求及說明: (1) 數(shù)
5、據(jù)錄入功能: 對B.TXT進(jìn)行數(shù)據(jù)錄入,只錄入每個學(xué)生的學(xué)號、課程編號、課程名稱、學(xué)分、平時成績、實驗成績、卷面成績共7個數(shù)據(jù). 綜合成績、學(xué)分由程序根據(jù)條件自動運算。 綜合成績的計算:如果本課程的實驗成績?yōu)?1,則表示無實驗,綜合成績=平時成績*30%+卷面成績*70%; 如果實驗成績不為-1,表示本課程有實驗,綜合成績=平時成績*15%+實驗成績*.15%+卷面成績*70% . 實得學(xué)分的計算: 采用等級學(xué)分制. 綜合成績在90-100之間 ,應(yīng)得學(xué)分=學(xué)分*100% 綜合成績在80-90之間 ,應(yīng)得學(xué)分=學(xué)分*80% 綜合成績在70-80之間 ,應(yīng)得學(xué)分=學(xué)分
6、*75% 綜合成績在60-70之間 ,應(yīng)得學(xué)分=學(xué)分*60% 綜合成績在60以下 ,應(yīng)得學(xué)分=學(xué)分*0% (2)查詢功能:分為學(xué)生基本情況查詢和成績查詢兩種 A:學(xué)生基本情況查詢: A1----輸入一個學(xué)號或姓名(可實現(xiàn)選擇),查出此生的基本信息并顯示輸出。 A2---輸入一個宿舍號碼,可查詢出本室所有的學(xué)生的基本信息并顯示輸出。 B:成績查詢: B1:輸入一個學(xué)號時,查詢出此生的所有課程情況,格式如下: 學(xué) 號:xx 姓 名:xxxxx 課程編號:xxx 課程名稱:xxxxx 綜合成績:xxxx 實得學(xué)分: xx
7、 課程編號:xxx 課程名稱:xxxxx 綜合成績:xxxx 實得學(xué)分: xx 課程編號:xxx 課程名稱:xxxxx 綜合成績:xxxx 實得學(xué)分: xx … … … … ……… … … 共修:xx科,實得總學(xué)分為: xxx (3)刪除功能:當(dāng)在A.TXT中刪除一個學(xué)生時,自動地在B.TXT中刪除此人所有信息。 (4 ) 排序功能:能實現(xiàn)選擇按綜合成績或?qū)嵉脤W(xué)分升序或降序排序并顯示數(shù)據(jù)。 (二)其它要求: (1) 只能使用C/C++語言,源程序要有適當(dāng)?shù)淖⑨?,使程序容易?/p>
8、讀 (2) 至少采用文本菜單界面(如果能采用圖形菜單界面更好) (3) 學(xué)生可自動增加新功能模塊(視情況可另外加分) (4)寫出課程設(shè)計報告,具體要求見相關(guān)說明文檔 2 概要設(shè)計 2.1 存儲結(jié)構(gòu) 首先,為了能使自己得到鍛煉,存儲結(jié)構(gòu)我使用了順序存儲與鏈?zhǔn)酱鎯?,學(xué)生基本信息用的數(shù)組來存儲,對學(xué)生成績基本信息使用鏈表進(jìn)行存儲。結(jié)構(gòu)體定義如下: //學(xué)生基本信息的結(jié)構(gòu)體定義 typedef struct student {string xuehao; //學(xué)號 string name; //姓名 string gender; //性別 string sushe
9、; //宿舍號 string tel;//電話 }student; //學(xué)生成績信息的結(jié)構(gòu)體定義 typedef struct grade {string xuehao;//學(xué)號 string courseno; //課程號 string coursename; //課程名稱 int xuefen; //學(xué)分 int pingshi; //平時成績 int shiyan; //實驗成績 int juanmian;//卷面成績 float zonghe;//綜合成績 float shide;//實得學(xué)分 grade *next; }
10、grade; 2.2 基本操作 (1)數(shù)據(jù)錄入功能 (2)查詢功能 (3)刪除功能 (4)排序功能 (5)顯示所有學(xué)生信息 (6)保存 (7)退出 3 詳細(xì)設(shè)計 3.1 流程圖 各個算法的設(shè)計如下: 1.主函數(shù):int main( ); 從A.txt中讀取存儲的學(xué)生基本信息到內(nèi)存,以便進(jìn)行處理,過程如圖1 開始 創(chuàng)建存儲學(xué)生信息的單鏈表的頭結(jié)點 將學(xué)生信息讀取到內(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é)點的指針。 用于進(jìn)行指示進(jìn)行各種操作,是與每個函數(shù)都相聯(lián)系的一個函數(shù),功能操作見圖2 6保存 0退出 開始 輸入i 菜單 4排序 3刪除 5顯示學(xué)生信息 2查詢 1數(shù)據(jù)錄入 其他有誤誤 結(jié)束 6保存
12、 0退出 開始 輸入i 菜單 4排序 3刪除 5顯示學(xué)生信息 2查詢 1數(shù)據(jù)錄入 其他有誤誤 圖2 3. 數(shù)據(jù)錄入函數(shù):void luru(grade *gra); 其中g(shù)ra是指向單鏈表最后一個結(jié)點的指針,用于后插法中進(jìn)行插入。 將學(xué)生成績信息依次輸入單鏈表中,其中單鏈表邊輸入邊創(chuàng)建,綜合成績和實得學(xué)分可由計算機(jī)自己計算。流程圖見圖3 判斷成績范圍 應(yīng)得學(xué)分=學(xué)分*100% 應(yīng)得學(xué)分=學(xué)分*80% 應(yīng)得學(xué)
13、分=學(xué)分*75% 應(yīng)得學(xué)分=學(xué)分*60% 應(yīng)得學(xué)分=0 結(jié)束 綜合成績=平時成績*15%+實驗成績*.15%+卷面成績*70% 輸入學(xué)生平時成績 輸入學(xué)生實驗成績 輸入學(xué)生卷面成績 輸入學(xué)生課程編號 輸入學(xué)生的學(xué)號 輸入學(xué)生學(xué)分 開始 gra->shiyan=-1 綜合成績=平時成績*30%+卷面成績*70% 輸入學(xué)生平時成績 輸入學(xué)生實驗成績 輸入學(xué)生卷面成績 輸入學(xué)生課程編號 輸入學(xué)生的學(xué)號 輸入學(xué)生學(xué)分 開始 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é)點的指針。 有學(xué)生基本情況查詢和成績查詢兩種大功能,基本情況查詢又分為按學(xué)號或姓名查找單個學(xué)生基本信息,也可輸入宿舍號查詢整個宿舍學(xué)生的基本信息。成績查詢只要輸入學(xué)號便可查詢相應(yīng)學(xué)生的成績信息。見圖4 1.輸入一個學(xué)號或姓名 2.輸入一個宿舍號碼 a 按學(xué)號查找 b 按姓名查找 輸出一個宿舍學(xué)生信息 輸出相應(yīng)學(xué)生信息 輸出相應(yīng)學(xué)生所有成績 結(jié)束 開始 輸入i A:學(xué)生基本情況查詢 B:成績查詢 輸入j 輸入學(xué)號
16、 圖4 5. 刪除功能:void del(student *stu,grade *head); stu為指向?qū)W生基本信息數(shù)組的指針,head為指向?qū)W生成績鏈表的頭結(jié)點的指針。 執(zhí)行刪除功能時在存儲學(xué)生基本信息的數(shù)組中與存儲學(xué)生成績信息的鏈表中同時刪除該學(xué)生信息,以便進(jìn)行下面操作與向文件中存儲信息。功能見圖5 開始 輸入要刪除學(xué)生的學(xué)號 在學(xué)生基本信息中刪除 在學(xué)生成績基本信息中刪除 結(jié)束
17、 圖5 6. 排序功能:void sort(grade *head); head為指向?qū)W生成績鏈表的頭結(jié)點的指針。 下面流程圖實現(xiàn)的是按綜合成績升序排序,使用的選擇排序法,雖說使用的存儲結(jié)構(gòu)為鏈?zhǔn)酱鎯Y(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. 顯示所有學(xué)生信息:void show(student *stud); stud為指向?qū)W生基本信息數(shù)組的指針 用于顯示內(nèi)存中學(xué)生基本情況信息,以便更好了解學(xué)生的一些情況. 開始 i=1 stud[i].xuehao!="0" 輸出學(xué)號,姓名,性別,宿舍,電話號 結(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 保存學(xué)生基本信息到A.TXT 保
22、存學(xué)生成績信息到B.TXT
輸入有誤,重新操作!
結(jié)束
N
Y N
Y
圖8
3.2 源程序
#define num 10
#include
23、
#include
24、ring courseno; //課程號 string coursename; //課程名稱 int xuefen; //學(xué)分 int pingshi; //平時成績 int shiyan; //實驗成績 int juanmian;//卷面成績 float zonghe;//綜合成績 float shide;//實得學(xué)分 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<<"請輸入學(xué)生的學(xué)號,"<<
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<<"請輸入要查詢學(xué)生的學(xué)號:"< 36、 <<"課程名稱:"< 37、}
//刪除功能
void del(student *stu,grade *head)
{string str;
grade *p=head->next;
grade *q;
cout<<"請輸入要刪除學(xué)生的學(xué)號:"< 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";
}
}
//在學(xué)生成績基本信息中刪除
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<<"按實得學(xué)分降序排序為:"< 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<<" 歡迎使用學(xué)生管理系統(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)菜單界面
顯示各種功能需進(jìn)行的各種操作,界面如下:
當(dāng)輸入操作有誤時結(jié)果如下:
(2) 數(shù)據(jù)錄入功能
負(fù)責(zé)錄入學(xué)生成績信息,綜合成績和實得學(xué)分將由計算機(jī)自己完成。學(xué)生成績由鏈表相連時間復(fù)雜度為O(1),但程序還存在漏洞,當(dāng)輸入成績?yōu)榉菙?shù)字類型時便會出現(xiàn)錯誤,還需進(jìn)行完善。
輸入成績?yōu)榉菙?shù)字類型時便會出現(xiàn)錯誤,還需進(jìn)行完善。如下圖:
(3) 查詢功能
63、
按提示進(jìn)行操作得到的結(jié)果如下圖,其中包括正確操作與非正確操作下的情況。
無成績輸入時成績查詢結(jié)果為:
有成績輸入時查詢結(jié)果:
(4) 排序功能
當(dāng)已有成績輸入時操作結(jié)果如下:
當(dāng)無成績輸入時,給出提示“請先輸入學(xué)生成績信息再排序!”
(5) 刪除功能:
刪除后需保存,經(jīng)保存后便可在相應(yīng)文件中觀察到相應(yīng)信息的改變。
(6) 保存功能
分為學(xué)生基本信息保存和學(xué)生成績保存兩個功能:
(7) 顯示所有學(xué)生信 64、息功能:
(8) 退出功能:
5 課程設(shè)計總結(jié)
通過本次課程設(shè)計,我最大的收獲就是自己的動手能力得到了很大的提升,我發(fā)現(xiàn)只有自己動手才能更好的了解到自己的知識漏洞,很多小問題可能對代碼的編寫都有很大影響,像在編寫過程中我有時漏掉半撇括號,而在查找時就相當(dāng)費力,所以多敲代碼很重要啊。對語言也得到了更深的了解。語言等于算法加數(shù)據(jù)結(jié)構(gòu),這句話確實很有道理,數(shù)據(jù)結(jié)構(gòu)給了我一種更好的思路,一種更好的思想,掌握一種思想遠(yuǎn)比會很多語言來的重要,只有我們有了思路,有了更好的算法,我們的程序才會更加優(yōu)秀,空間復(fù)雜度,時間復(fù)雜度才會更加少。在設(shè)計過程中我遇到了很多錯誤或是難題,其中耗時最多的就是考慮存儲結(jié)構(gòu),只有有了一個好的存儲結(jié)構(gòu)對數(shù)據(jù)的操作才更加便利。
另外就是要有一顆永不言棄的心,遇到困難很正常,但不要輕易放棄,只要自信,有一顆戰(zhàn)勝一切的心,仔細(xì)查找錯誤,堅持下來肯定可以成功。
6參考書目:
[1]譚浩強(qiáng),《C++程序設(shè)計》,清華大學(xué)出版社
[2]嚴(yán)蔚敏,李冬梅,吳偉民,《數(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Storytime (2)
- 【四清導(dǎo)航】秋八年級數(shù)學(xué)上冊 3.3 一元一次不等式(第3課時)課件 (新版)浙教版
- 海淀區(qū)域P4P實操診斷課件
- 三年級記事作文指導(dǎo)
- 醫(yī)院內(nèi)感染的預(yù)防和控制
- 機(jī)械設(shè)計第十章習(xí)題
- 華泰汽車“全心服務(wù)_貼心關(guān)懷”管理知識分析方案
- Unit 11 Lesson 2 What's the matter 課件 1
- 創(chuàng)業(yè)大賽設(shè)計中財務(wù)分析方法與技巧
- 從現(xiàn)在開始課件 (4)(精品)
- 蛋白質(zhì)促降解與氨基酸代謝
- (精品)電視原理第1章1
- 術(shù)中病情觀察小講課
- 日系汽車研發(fā)質(zhì)量管控
- 6Sigma的管理理論(ppt 30頁)