c++課程設計-學生選修課選課系統(tǒng)_第1頁
c++課程設計-學生選修課選課系統(tǒng)_第2頁
c++課程設計-學生選修課選課系統(tǒng)_第3頁
c++課程設計-學生選修課選課系統(tǒng)_第4頁
c++課程設計-學生選修課選課系統(tǒng)_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、學生選修課選課系統(tǒng)目 錄1 前言12 需求分析22.1 編寫目的22.2 需求概述22.3 需求說明22.4 開發(fā)環(huán)境23 總體設計33.1功能模塊圖33.2 流程圖43.3 類的設計圖54 各功能模塊設計74.1整體設計74.2主要的功能函數設計75 系統(tǒng)調試86 總結與體會146.1 總結146.2 編寫程序中遇到的問題及解決辦法14參考文獻15附錄 源程序16須眉原作1 前言隨著計算機的普及,各高校均采用計算機進行學生選課。學生選修課系統(tǒng)主要包含選修課管理系統(tǒng)及學生選課系統(tǒng)兩部分。學生選修課系統(tǒng)一般需要有管理員管理選修課課程,然后學生對經過管理員操作后的選修課進行選課。選修課管理系統(tǒng)由管

2、理員登錄,對當前所有選修課課程進行管理操作。學生選課系統(tǒng)則是由學生登錄,學生可以查看由管理員整理好的所有選修課,并從顯示出的選修課中選擇自己要選擇的課程。管理員管理選修課實質是對后臺選修課庫中的選修課信息進行操作,可以在庫中添加課程或刪除課程。學生選課的實質即是先打印出后臺選修課庫中所有選修課信息以供選擇,選擇課程即是對后臺學生信息庫里的學生信息進行修改。2 需求分析2.1 編寫目的 (1)要求學生達到熟練掌握C+語言的基本知識和技能; (2)基本掌握面向對象程序設計的基本思路和方法; (3)能夠利用所學的基本知識和技能,解決簡單的面向對象程序設計問題; (4)通過編寫此系統(tǒng),實現選修課系統(tǒng)的

3、基本功能。2.2 需求概述 (1)系統(tǒng)中包括兩個登陸身份(管理員與學生),并對應不同的功能; (2)對于管理員,此系統(tǒng)具有添加、刪除、查看選修課等功能; (3)對于學生,此系統(tǒng)具有選課、查詢等功能2.3 需求說明 此系統(tǒng)可以實現學生選課,管理員管理課程的基本功能2.4 開發(fā)環(huán)境 使用Visual C+6.0編程軟件3 總體設計3.1功能模塊圖(1)學生學生身份有兩個功能,分別是選課與查看個人信息。如圖3.1所示。學生選課個人信息 圖 3.1 學生功能模塊圖(2) 管理員管理員可以對選修課課程進行管理。如下圖所示。管理員查看選修課刪除選修課添加選修課圖 3.2 管理員功能模塊圖3.2 流程圖 進

4、入系統(tǒng)后可以選擇以學生身份或者管理員身份登錄。學生登錄需要輸入個人的學號及姓名,成功登錄后可以選課或查詢個人信息。管理員的登錄需要輸入密碼,成功登錄后則可以對當前所有的選修課進行管理操作,可添加新選修課或刪除已有的選修課。詳細操作流程如下圖所示。選擇身份或退出學生管理員開始結束選課個人信息查看選修課刪除選修課添加選修課顯示全部按類型選課按學分選課顯示全部按類型查詢按學分查詢輸入學號及姓名輸入密碼圖 3.3 流程圖3.3 類的設計圖(1) Course類 Course類即選修課課程類。數據成員分別是:課程編號、課程名稱、課程類型、開課時間、授課學時、實驗學時、總學時以及學分。成員函數則包含所有數

5、據成員的get函數,用以獲取數據成員的值,set函數用來修改課程,print函數則是打印課程的信息。如下圖所示。Courseid: char *name: char *nature: char *date: char *shours: intahours: intzhours: intscore: doublescore: doublegetId(): char *getName(): char*getNature(): char*getDate(): char*getAhours(): intgetShours(): intgetZhours(): intgetScore(): double

6、set(char *a, char *b, char *c, char *d, int e, int f, double g): voidprint(): void圖 3.4 Course類(2) Student類 Student類即學生類。其中包含了學生的學號、學生姓名、所選的兩門課程及兩門選修課課程的總學分。setId和setName是用來修改相關成員的值,getName獲取學生的姓名,print函數用來打印學生的相關信息,個selectCourse則是用來選課。如下圖所示。Studentid: char *name: char *c1: Coursec2: Coursezscore: d

7、ounblesetId(char * a1): voidsetName(char* a1): voidgetName(): char*selectCourse_1(Course cc): voidselectCourse_2(Course cc): voidprint(): voidprint(): void圖3.5 Student類4 各功能模塊設計4.1整體設計對于學生和選修課,我們分別定義了相應的類Student和類Course,其間的關系就是學生類中有兩個選修課類對象成員。而對于管理員我們并沒有單獨去定義類,因為管理員只是對選修課進行操作,程序中并不需要訪問管理員的信息。為了方便對選修

8、課進行管理及多位學生的登錄,我們定義了一個選修課數組和學生數組。4.2主要的功能函數設計(1) 選課函數 void selectCourse(Student s110, Course c1M, int s_num1) 對當前學生對象進行操作,覆蓋其選修課對象成員c1或c2,即學生的選課。(2) 兩種輸出所需選修課函數按學分輸出選修課函數 void selectScore(Course c1M)按類型輸出選修課void selectNature(Course c1M)對傳遞進來的選修課數組進行掃描,輸出符合要求的選修課。(3) 選修課排序函數 void xu(Course c1M)使用冒泡排序法

9、對選修課數組進行編號從小到大的排序。(4) 主菜單函數 void menu(Course c16, Student s110)所有菜單循環(huán)都在其中,調用其他函數來實現具體功能。5 系統(tǒng)調試1. 系統(tǒng)主界面進入系統(tǒng)主界面后可以選擇登錄身份或退出程序。如圖5.1所示。圖5.1 系統(tǒng)主界面2.選修課管理系統(tǒng)圖5.1選擇登錄身份為管理員,默認密碼123,輸入-1可返回圖5.1界面。密碼輸入正確后可進入管理員登錄系統(tǒng)。如圖5.2所示。圖5.2 選修課管理系統(tǒng)3. 按學分查看選修課圖5.2選擇查看選修課,可以查看當前所有的選修課課程的相關信息。可以選擇不同的輸出方式:按學分查詢、按類型查詢、顯示全部。選擇

10、按學分查詢,在選擇0.5,可打印當前所有課程中學分為0.5的課程信息。如圖5.3所示。圖5.3 按學分查看選修課4. 查詢全部選修課查看選修課功能中可以選擇顯示全部,即羅列出當前所有的選修課課程信息。如圖5.4所示。圖5.4 查詢全部選修課5. 管理員添加選修課圖5.2選擇添加選修課,可以添加一門新的選修課,然后按要求輸入課程信息。如圖5.5所示。圖5.5 管理員添加選修課6. 添加后的選修課信息添加選修課后選擇返回上一層,再選擇顯示全部選修課可以看到已新增的選修課已添加成功。如圖5.6所示。圖5.6 添加后的選修課7. 管理員刪除選修課圖5.2選擇刪除選修課。輸入要刪除的選修課的編號,即可刪

11、除相應的選修課。如圖5.7所示。圖5.7 管理員刪除選修課8. 刪除后的選修課信息刪除選修課后選擇返回上一層,再選擇顯示全部選修課可以看到已刪除的選修課已刪除成功。如圖5.8所示。圖5.8 刪除后的選修課信息9. 學生選課系統(tǒng)圖5.1選擇學生,然后輸入學生的姓名及學號就能進入學生選課系統(tǒng)。如圖5.9所示。圖5.9 學生選課系統(tǒng)10. 學生選課以學生身份登錄成功后,可以選擇選課或是查詢個人信息。選擇選課可以選擇按學分選課、按課程類型選課或顯示全部課程再進行選課。選擇按學分選課,再選藝術類,再輸入課程編號即可選擇相應課程。如圖5.10所示。圖5.10 學生選課11. 學生信息選擇查看個人信息程序即

12、打印出當前學生的相關信息。如圖5.11 所示。圖5.11 學生信息12. 退出圖5.1選擇退出即退出程序。如圖5.12所示。圖5.12 退出程序6 總結與體會6.1 總結本程序實現了學生選課及管理員對課程的操作功能,而學生的選課及管理員對課程的管理,都可以按學分或類型來進行操作。管理員登錄的默認密碼是123,管理員可以添加新的選修課課程,也可以刪除原有的選修課。經過此次的課程設計,我們受益頗豐,尤其是對在編寫過程中遇到的難題的處理方法,學會了很多程序設計的技巧。6.2 編寫程序中遇到的問題及解決辦法(1)在無法與后臺交互的情況下如何實現用戶登錄?因為只需要管理員有對選修課操作的能力,因此不需儲

13、存管理員的信息,只需在其登錄前詢問密碼即可。而學生的登錄,在其登錄時分配一個對象空間,儲存在其登錄時獲取的學號及姓名即可,即每一個學生的登錄相當于注冊過程。(2)如何在不退出程序的情況下,能夠讓多位學生進行選課?定義學生類對象數組,每一位學生選完課后,再分配一個新的學生類對象空間。(3)如何實現對學生對象中課程對象成員的覆蓋?一開始我們?yōu)榱朔奖闫鹨娛强紤]學生類課程對象定義為引用,這樣只需引用已有的選修課課程即可,但這樣的話,在對學生對象初始化時引用的初始化就成了問題,因此只能放棄。最終是選擇了使用set和get方法對對象成員的成員一個個覆蓋。參考文獻1 黃維通.Visual C+面向對象與可視

14、化程序設計(第2版).北京:清華大學出版社,2007.2 張乃孝,陳光,孫猛.算法與數據結構C語言描述(第三版),2011.3 譚浩強.C程序語言設計(第三版)M.北京:清華大學出版社,2007.4 楊永斌.數據結構理論與實踐M.天津:科學技術出版社,2011.5 羅建軍.C+程序射機槍教程(第2版).北京:高等教育出版社,2004.6 鄭振杰.C+程序設計. 北京:人民郵電出版社,2005.7 劉覺夫,王更生等.c+程序設計.北京:郵電大學出版社,2011.8 邵偉忠.C常用算法程序集.天津:人民出版社,2009.9 徐世亮.C+大學教程.北京:人民郵電出版社,2010.10 吳華恩.C+程

15、序設計.北京:機械工業(yè)出版社,2008.11 邵偉忠.C常用算法程序集.天津:人民出版社,2009.附錄 源程序#include <iostream.h>#include <string.h>#define M 10class Course /選修課課程類private:char * id;char * name;char * nature;char * date;int shours;int ahours;int zhours;double score;public:Course()id = "unknown"name = "unknow

16、n"nature = "unknown"zhours = 0;shours = 0;ahours = 0;date = "unknown"score = 0;Course(char *a, char *b, char *c, char *d, int e, int f, double g)id = a;name = b;nature = c;date = d;shours = e;ahours = f;score = g;zhours = e + f;void set(char *a, char *b, char *c, char *d, in

17、t e, int f, double g)id = a;name = b;nature = c;date = d;shours = e;ahours = f;score = g;zhours = e + f;char * getDate()return date;int getZhours()return zhours;int getShours()eturn shours;int getAhours()return ahours;double getScore()return score;char * getNature()return nature;char * getId()eturn

18、id;char * getName()return name;void print()cout << "編號: " << id << 't'cout << "名稱: " << name << 't'cout << "類型: " << nature << 't'cout << "上課時間: " << date << endl;c

19、out << "總學時: " << zhours << 'h' << 't'cout << "授課學時: " << shours << 'h' << 't'cout << "實驗學時: " << ahours << 'h' << 't'cout << "學分: " &

20、lt;< score << endl;class Student /學生類private: /學生選的課程是對象的成員char * id;char * name;Course c1;Course c2;double zscore;public:Student()id = "unknown"name = "unknown"zscore = 0;void setId(char * a1)d = a1;void setName(char * a1)name = a1;char * getName()return name;void print

21、()cout << "n學號: " << id << endl;cout << "姓名: " << name << endl;cout << "您已選的選修課:n1."c1.print();cout << "2."c2.print();cout << "選修課總學分: " << c1.getScore() + c2.getScore() << 'n'

22、 <<endl;void selectCourse_1(Course cc) /修改對象的課程成員c1.set(cc.getId(),cc.getName(),cc.getNature(),cc.getDate(),cc.getShours(),cc.getAhours(),cc.getScore();void selectCourse_2(Course cc)c2.set(cc.getId(),cc.getName(),cc.getNature(),cc.getDate(),cc.getShours(),cc.getAhours(),cc.getScore();void sele

23、ctCourse(Student s110, Course c1M, int s_num1) /選課char id210, select1;int i, j, k;for(j=0; j<2; j+)cout << "n您想選您的第幾門選修課(1 or 2):"cin >> k;cout << "請輸入您想要選的選修課的編號:"cin >> idj;for(i=0; i<M && c1i.getScore() !=0; i+) /掃描所有選修課,如果當前選修課為空則跳出循環(huán)if(s

24、trcmp(idj, c1i.getId()=0)if(1 = k)s1s_num1.selectCourse_1(c1i);break;if(2 = k)s1s_num1.selectCourse_2(c1i);break;if(0 = j)cout << "n您是否想要繼續(xù)選課?(y/n):"cin >> select1;if('n' = select1) break;cout << "n選課成功!" << endl;void selectScore(Course c1M) /按學分查詢

25、選修課int select, num, i;cout << "n請輸入選修課的學分:"cout << "n 1. 0.5n 2. 1.0" << endl;cout << " 請選擇:"cin >> select;num = 1;if(1 = select)for(i=0; i<M && c1i.getScore() !=0; i+)if(0.5 = c1i.getScore()cout << num << '.'

26、c1i.print();cout << endl;num+;else if(2 = select)for(i=0; i<M && c1i.getScore() !=0; i+)if(1.0 = c1i.getScore()cout << num << '.'c1i.print();cout << endl;num+;else cout << "對不起,您的輸入有誤,請重新輸入!nn"void selectNature(Course c1M) /按類型查詢選修課int selec

27、t, num, i;char n110="藝術類", n210 ="學術類"cout << "請輸入選修課的學分:"cout << "n 1. 藝術類n 2. 學術類" << endl;cout << " 請選擇:"cin >> select;num = 1;if(1 = select)for(i=0; i<M && c1i.getScore() !=0; i+)if(strcmp(n1, c1i.getNatur

28、e() = 0)cout << num << '.'c1i.print();cout << endl;num+;else if(2 = select)for(i=0; i<M && c1i.getScore() !=0; i+)if(strcmp(n2, c1i.getNature() = 0)cout << num << '.'c1i.print();cout << endl;num+;else cout << "對不起,您的輸入有誤,請重新輸入

29、!nn"void xu(Course c1M) /當前所有選修課進行排序(編號從小到大) int i,j,k=0,num=0; Course cc; for(j=0; j<M && c1j.getScore() !=0; j+) for(i=num; i<M && c1i.getScore() !=0; i+) if(strcmp( c1i.getId(), c1i+1.getId() ) > 0) k+;cc.set(c1i.getId(),c1i.getName(),c1i.getNature(),c1i.getDate(),c1

30、i.getShours(),c1i.getAhours(),c1i.getScore();c1i.set(c1i+1.getId(),c1i+1.getName(),c1i+1.getNature(),c1i+1.getDate(),c1i+1.getShours(),c1i+1.getAhours(),c1i+1.getScore();c1i+1.set(cc.getId(),cc.getName(),cc.getNature(),cc.getDate(),cc.getShours(),cc.getAhours(),cc.getScore(); else k = 2; if(1 = k) n

31、um = i; k = 0; void menu(Course c16, Student s110) /菜單int flag0, flag1, flag2, flag3, flag4, password=0 ;int select, s_num=0, i, j, num, newNum;char id1010;char select1;char id110;char name110;char da20;char na10;int sh;int ah;double sc;flag0 = 1;while(flag0)cout << "n=" << end

32、l;cout << "| 菜 單 |" << endl;cout << "=" << endl;cout << "| 1.管理員 |" << endl;cout << "| 2.學生 |" << endl;cout << "| 3.退出 |" << endl;cout << "=" << endl;cout << &quo

33、t;n請選擇:"cin >> select;switch(select)case 1:flag3 = 1;while(1)cout << "請輸入密碼(輸入-1退出):"cin >> password;if(-1 = password) flag3 =0;break;if(123 = password) cout << "n 管理員,你好!歡迎登錄!" <<endl;break;cout << "密碼錯誤,請重新輸入!n"while(flag3)cout

34、 << "n=" <<endl;cout << "| 菜 單 |" <<endl;cout << "=" <<endl;cout << "| 1.添加選修課 |" << endl;cout << "| 2.刪除選修課 |" << endl;cout << "| 3.查看選修課 |" << endl;cout << &quo

35、t;| 4.返回上一層 |" << endl;cout << "=" <<endl;cout << "n請選擇:"cin >> select;switch(select)case 1:newNum = 0;for(i=0; i<M && c1i.getScore() !=0; i+) newNum+;cout << "n請按格式依次輸入選修課的編號、名稱、上課時間(x.xx-x.xx)、類型(藝術類或學術類)、授課學時、實驗學時、學分:&qu

36、ot; << endl;cin >> id1 >> name1 >> da >> na >> sh >> ah >> sc;c1newNum.set(id1, name1, da, na, sh, ah, sc);xu(c1);cout << "添加成功!" << endl;break;case 2:flag4 = 1;j = 0;num = 0;while(flag4)cout << "n請輸入您想要刪除課程的編號:"ci

37、n >> idj;for(i=0; i<M && c1i.getScore() !=0; i+)if(strcmp(idj, c1i.getId()=0)for(num=i; num<M && c1i.getScore() !=0; num+)c1num.set(c1num+1.getId(),c1num+1.getName(),c1num+1.getNature(),c1num+1.getDate(),c1num+1.getShours(),c1num+1.getAhours(),c1num+1.getScore();c1num = C

38、ourse();break;cout << "刪除成功!n"cout << "n您是否想要繼續(xù)刪除?(y/n):"cin >> select1;if('n' = select1) break;j+;break;case 3:flag2 = 1;while(flag2)cout << "n=" <<endl;cout << "| 菜 單 |" <<endl;cout << "=" <

39、;<endl;cout << "| 1.按學分查詢選修課 |" << endl;cout << "| 2.按選修課類型查詢選修課 |" << endl;cout << "| 3.顯示全部 |" << endl;cout << "| 4.返回上一層 |" << endl;cout << "=" <<endl;cout << "請選擇:"cin

40、 >> select;switch(select)case 1:selectScore(c1);break;case 2:selectNature(c1);break;case 3:for(i=0; i<M && c1i.getScore() !=0; i+)cout << i+1 << '.' ;c1i.print();cout << endl;break;case 4:flag2 = 0;break;default :cout << "對不起,您的輸入有誤,請重新輸入!nn"

41、;break;case 4:flag3 = 0;break;default :cout << "對不起,您的輸入有誤,請重新輸入!nn"break;case 2:char a10, b10;s1s_num = Student();cout << "n請輸入您的學號:"cin >> a;s1s_num.setId(a);cout << "請輸入您的姓名:"cin >> b;s1s_num.setName(b);flag1 = 1;while(flag1)cout <<

42、; "n=" <<endl;cout << "| 菜單 |" <<endl;cout << "=" <<endl;cout << "| 1.選課 |" << endl;cout << "| 2.個人信息 |" << endl;cout << "| 3.返回上一層 |" << endl;cout << "=" <

43、;<endl;cout << "請選擇:"cin >> select;switch(select)case 1:flag2 = 1;cout << "n" << s1s_num.getName() << ",你好!歡迎登錄!" << endl;while(flag2)cout << "n=" <<endl;cout << "| 菜 單 |" <<endl; cout &l

44、t;< "=" <<endl;cout << "| 1.按學分查詢選修課 |" << endl;cout << "| 2.按選修課類型查詢選修課 |" << endl;cout << "| 3.顯示全部 |" << endl;cout << "| 4.返回上一層 |" << endl;cout << "=" <<endl;cout << "請選擇:"cin &g

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論