軟件工程課程設計實驗報告-學生信息管理系統_第1頁
軟件工程課程設計實驗報告-學生信息管理系統_第2頁
軟件工程課程設計實驗報告-學生信息管理系統_第3頁
軟件工程課程設計實驗報告-學生信息管理系統_第4頁
軟件工程課程設計實驗報告-學生信息管理系統_第5頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、軟件工程課程實驗報告 系統名稱 _ 學生信息管理系統_學 院 _ 計算機學院信息_ _ 學生信息管理系統設計文檔1. 可行性研究 1.1技術可行性已經有人開發(fā)過,并且我們也都使用過相類似系統,對其一般性的軟件和操作環(huán)境、編譯環(huán)境都比較熟悉,所以說在技術上來說是可行的。 1.2經濟可行性當前系統只對服務器有關的要求,在服務費用方面,支出在你那個承擔的范圍,以后的維護及其他設備的總共費用在可以承擔的范圍。用當前系統可以節(jié)約出能夠支付當前系統的直接支出,以后維護費用更是比以前的機制節(jié)約很多錢。1.3操作可行性系統的操作方式在這個用戶組織內能行得通。2. 需求分析2.1輸入讓學生在紙面上填寫相關內容,

2、然后等待輔導員或管理員的審批確認后,再輸入數據庫中保存。2.2輸出學生選擇用戶選項進入系統后,系統可經有算法程序輸出學生基本信息表,學習成績表等。2.2.1打印輸出可打印基本信息、學習成績等各種表格以及在對相應信息進行統計操作后的表格。2.2.2文件輸出可將所有打印表格輸出到EXCEL文件中,以便用戶使用其它的EXCEL軟件改變表格的大小及字體。2.3故障處理2.3.1內部故障處理在開發(fā)階段可以隨即修改數據庫里的相應內容。 2.3.2外部故障處理對編輯的程序進行重裝載時,第一次裝載認為錯,修改。第二次運行,在需求調用時出錯,有錯誤提示,重試。2.4性能要求分析2.4.1系統易操作性所開發(fā)的系統

3、應做到操作簡單,盡量使系統操作不受用戶對電腦知識水平的限制。2.4.2系統具有可維護性由于系統涉及的信息比較廣,數據庫中的數據需定期修改,系統可利用的空間及性能也隨之下降,為了使系統更好地運轉,學院可以對系統數據及一些簡單的功能進行獨立的維護及調整。2.4.3系統具有開放性該系統能夠在開放的硬件體系結構中運行,并且能與其他系統順利連接,不會因外部系統的不同面要做在量的修改工作。3.概要設計3.1基本設計概念和處理流程管理員通過密碼認證,進入信息管理頁面對學生相關信息的錄入、更新、修改、添加等操作,也可以通過查詢界面對學生信息進行完全的查詢,而學生和相關人員只能通過公共的查詢界面對學生信息進行查

4、詢,如要對學生信息進行完全查詢就需要得到管理員的同意。管理界面數據中 心處理處理打印查詢管理員操作信息輸出查詢用戶界面3.2接口設計 本系統采用快速原型開發(fā)工具Visual Basic 6.0進行開發(fā),所提供的不同層次的接口,都具有高度的集成性,本系統沒有采用低級語言設計和完成自定義接口,因此接口設計部分已經由不同方式的組件來完成了,以下只做簡單說明。3.2.1用戶接口 說明將向用戶提供的命令和它們的語法結構,以及軟件的回答信息。命令語法信息正確信息錯誤提交IF ELSE進入系統返回到當前界面重設點擊事件清空輸入的數據無取消點擊事件返回到當前界面無3.2.2外部接口說明本系統同外界的所有接口的

5、安排包括軟件與硬件之間的接口、本系統與各支持軟件直接的關系。硬件接口軟件接口鍵盤鼠標打印機主模塊管理模塊查詢模塊3.2.3內部接口說明本系統之內的各個系統元素之間的接口的安排。數據庫接口設計采用ADO連接方式。模塊名稱主模塊管理員驗證模塊用戶查詢界面管理界面主模塊管理員驗證模塊用戶查詢界面管理界面4.詳細設計4.1控制流程圖4.1.1主模塊軟件結構4.1.2管理員登陸軟件結構4.1.3用戶查詢軟件結構用戶查詢模塊輸入查詢條件IF正確輸出結果ELSE打印出結果返回重新輸入條件4.2源程序流程圖5、項目測試 功能截圖: 5.1 登 陸 界 面 5.2 學生用戶功能界面 5.3 學生查詢功能 5.4

6、 管理員管理界面 5.5 管理員輸入功能 5.6 管理員刪除功能 5.7 管理員查詢功能 5.8 管理員修改功能 5.9 管理員插入功能 5.10 統計功能 5.11 分類功能 5.12 顯示功能 5.13 管理員保存功能文件保存名為:STUDENT 路徑為:C:6、項目管理6、1 人員管理 團隊負責人:陶修赟 小組成員:萬富,洪鑫,汪賢惠,項鑫6、2產品管理 本產品工作于in-TC工作環(huán)境,用于對學生成績的管理。學生用戶,可進行查詢課程成績;管理員可對學生及其成績進行錄入、修改、查詢、排列等功能。本系統可進行維護,修改。6、3進程管理可行性分析:5月23日5月24日 標志:提交可行性分析報告

7、項目開發(fā)計劃:5月25日5月26日 標志:提交項目開發(fā)計劃需求分析:5月27日5月27日 標志:完成需求分析報告軟件設計:5月30日6月1日 標志:完成軟件分析與設計文檔編程實現:6月2日6月10日 標志:代碼編寫全部完成軟件測試:6月13日6月14日 標志:完成軟件測試,可投入使用可行性分析:5月25日5月26日 標志:提交可行性分析報告項目開發(fā)計劃:5月27日5月30日 標志:提交項目開發(fā)計劃需求分析:5月31日5月31日 標志:完成需求分析報告軟件設計:6月1日6月3日 標志:完成軟件分析與設計文檔軟件實現:6月6日6月14日 標志:代碼編寫全部完成測試與實施:6月15日6月16日 標志

8、:完成軟件測試,可投入使用可行性分析:5月25日5月26日 標志:提交可行性分析報告項目開發(fā)計劃:5月27日5月30日 標志:提交項目開發(fā)計劃需求分析:5月31日5月31日 標志:完成需求分析報告軟件設計:6月1日6月3日 標志:完成軟件分析與設計文檔軟件實現:6月6日6月14日 標志:代碼編寫全部完成測試與實施:6月15日6月16日 標志:完成軟件測試,可投入使用6、4項目計劃甘特圖 7、編 碼#include #include #include string.h#include conio.h#define HEADER1 -STUDENT- n#define HEADER2 | numb

9、er | name |Comp|Math|Eng | sum | ave |mici | n#define HEADER3 |-|-|-|-|-|-|-|-| #define FORMAT | %-10s |%-15s|%4d|%4d|%4d| %4d | %.2f |%4d |n#define DATA p-data.num,,p-data.egrade,p-data.mgrade,p-data.cgrade,p-data.total,p-data.ave,p-data.mingci#define END - nint saveflag=0; /*是否需要存盤的標志變量

10、*/typedef struct student /*標記為student*/ char num10; /*學號*/ char name15; /*姓名*/ int cgrade; /*C語言成績*/ int mgrade; /*數學成績*/ int egrade; /*英語成績*/ int total; /*總分*/ float ave; /*平均分*/ int mingci; /*名次*/;typedef struct node /*定義每條記錄或結點的數據結構,標記為node*/ struct student data; struct node *next;Node,*Link;void

11、 menuchoice() system(cls); /*清屏.與clrscr()功能相同*/ textcolor(10); /*在文本模式中選擇新的字符顏色*/ gotoxy(7,5); cprintf( The Students Grade Management System n); gotoxy(7,8); printf(nPlease Enter your choice; 0 enter students systemnttt); printf( ); printf(1 enter teachers systemn);void menu() /*菜單函數*/ system(cls);

12、/*清屏.與clrscr()功能相同*/ textcolor(10); /*在文本模式中選擇新的字符顏色*/ gotoxy(7,5); /*在文本窗口中設置光標,下同*/ cprintf( The Students Grade Management System n); gotoxy(7,8); cprintf( *Menu*n); gotoxy(7,9); cprintf( * 1 input record 2 delete record *n); gotoxy(7,10); cprintf( * 3 search record 4 modify record *n); gotoxy(7,1

13、1); cprintf( * 5 insert record 6 count record *n); gotoxy(7,12); cprintf( * 7 sort reord 8 save record *n); gotoxy(7,13); cprintf( * 9 display record 0 quit system *n); gotoxy(7,14); cprintf( *n); /*cprintf()送格式化輸出至文本窗口屏幕中*/void menustudent() system(cls); /*清屏.與clrscr()功能相同*/ textcolor(10); /*在文本模式中

14、選擇新的字符顏色*/ gotoxy(7,5); /*在文本窗口中設置光標,下同*/ cprintf( The Students Grade Management System n); gotoxy(7,8); cprintf( *Menu*n); gotoxy(7,9); cprintf( *3 search record 0 quit system*n); gotoxy(7,10); cprintf( *n); /*cprintf()送格式化輸出至文本窗口屏幕中*/void printheader() /*格式化輸出表頭*/ printf(HEADER1); printf(HEADER2);

15、 printf(HEADER3);void printdata(Node *pp) /*格式化輸出表中數據*/ Node* p; p=pp; printf(FORMAT,DATA); void Wrong() /*輸出按鍵錯誤信息*/ printf(nnnnn*Error:input has wrong! press any key to continue*n); getchar();void Nofind() /*輸出未查找此學生的信息*/ printf(n=Not find this student!n);void Disp(Link l) /*顯示單鏈表l中存儲的學生記錄,內容為stud

16、ent結構中定義的數據項*/ Node *p; p=l-next; /*l存儲的是單鏈表中頭結點的指針,該頭結點沒有存儲學生信息,指針域指向的后繼結點才有學生信息*/ if(!p) printf(n=Not student record!n); getchar(); return; printf(nn); printheader(); /*輸出表格頭部*/ while(p) /*逐條輸出鏈表中存儲的學生信息*/ printdata(p); p=p-next; /*移動至下一個結點*/ printf(HEADER3); getchar();Node* Locate(Link l,char fin

17、dmess,char nameornum) /*用于定位鏈表中符合要求的節(jié)點,并返回指向該節(jié)點的指針,findmess保存要查找的具體內容; nameornum保存按什么查找;在單鏈表l中查找;*/ Node *r; if(strcmp(nameornum,num)=0) /*按學號查詢*/ r=l-next; while(r) if(strcmp(r-data.num,findmess)=0) /*若找到findmess值的學號*/ return r; r=r-next; else if(strcmp(nameornum,name)=0) /*按姓名查詢*/ r=l-next; while(

18、r) if(strcmp(,findmess)=0) /*若找到findmess值的學生姓名*/ return r; r=r-next; return 0;void stringinput(char *t,int lens,char *notice) /*輸入字符串,并進行長度驗證(長度lens)printf(n Exceed the required length! n); /*進行長度校驗,超過lens值重新輸入*/ while(strlen(n)lens); strcpy(t,n); /*將輸入的字符串拷貝到字符串t中*/int numberinput(char *

19、notice) /*輸入分數,0分數100 | t100 | tnext; system(cls); Disp(l); /*先打印出已有的學生信息*/ while(r-next!=NULL) r=r-next; /*將指針移至于鏈表最末尾,準備添加記錄*/ while(1) /*一次可輸入多條記錄,直至輸入學號為0的記錄結點添加操作*/ while(1) /*輸入學號,保證該學號沒有被使用,若輸入學號為0,則退出添加記錄操作*/ stringinput(num,10,Input number(press 0return menu):); /*格式化輸入學號并檢驗*/ flag=0; if(st

20、rcmp(num,0)=0) /*輸入為0,則退出添加操作,返回主界面*/ return; s=l-next; while(s) /*查詢該學號是否已經存在,若存在則要求重新輸入一個未被占用的學號*/ if(strcmp(s-data.num,num)=0) flag=1; break; s=s-next; if(flag=1) /*提示用戶是否重新輸入*/ getchar(); printf(=The number %s is not existing,try again?(y/n):,num); scanf(%c,&ch); if(ch=y|ch=Y) continue; else ret

21、urn; else break; p=(Node *)malloc(sizeof(Node); if(!p) printf(n Allocate memory failure ); /*如沒有申請到,打印提示信息*/ return ; strcpy(p-data.num,num); /*將字符串num拷貝到p-data.num中*/ stringinput(,15,Name:); p-data.cgrade=numberinput(C language Score0-100:); /*輸入并檢驗分數,分數必須在0100之間*/ p-data.mgrade=numberin

22、put(Math Score0-100:); p-data.egrade=numberinput(English Score0-100:); p-data.total=p-data.egrade + p-data.cgrade + p-data.mgrade; /*計算總分*/ p-data.ave=(float)(p-data.total/3); /*計算平均分*/ p-data.mingci=0; p-next=NULL; /*表明這是鏈表的尾部結點*/ r-next=p; /*將新建的結點加入鏈表尾部中*/ r=p; saveflag=1; /*在main()有對該全局變量的判斷,若為1

23、,則進行存盤操作*/ return ;void Qur(Link l) /*按學號或姓名,查詢學生記錄*/ int select; /*1:按學號查,2:按姓名查,其他:返回主界面(菜單)*/ char searchinput20; /*保存用戶輸入的查詢內容*/ Node *p; if(!l-next) /*若鏈表為空*/ system(cls); printf(n=No student record!n); getchar(); return; system(cls); printf(n =1 Search by number =2 Search by namen); printf( pl

24、ease choice1,2:); scanf(%d,&select); if(select=1) /*按學號查詢*/ stringinput(searchinput,10,Input the existing student number:); p=Locate(l,searchinput,num);/*在l中查找學號為searchinput值的節(jié)點,并返回節(jié)點的指針*/ if(p) /*若p!=NULL*/ printheader(); printdata(p); printf(END); printf(press any key to return); getchar(); else N

25、ofind(); getchar(); else if(select=2) /*按姓名查詢*/ stringinput(searchinput,15,input the existing student name:); p=Locate(l,searchinput,name); if(p) printheader(); printdata(p); printf(END); printf(press any key to return); getchar(); else Nofind(); getchar(); else Wrong(); getchar();void Del(Link l) /

26、*刪除學生記錄:先找到保存該學生記錄的節(jié)點,然后刪除該節(jié)點*/ int sel; Node *p,*r; char findmess20; if(!l-next) system(cls); printf(n=No student record!n); getchar(); return; system(cls); Disp(l); printf(n =1 Delete by number =2 Delete by namen); printf( please choice1,2:); scanf(%d,&sel); if(sel=1) stringinput(findmess,10,input

27、 the existing student number:); p=Locate(l,findmess,num); if(p) /*p!=NULL*/ r=l; while(r-next!=p) r=r-next; r-next=p-next;/*將p所指節(jié)點從鏈表中去除*/ free(p); /*釋放內存空間*/ printf(n=Delete success!n); getchar(); saveflag=1; else Nofind(); getchar(); else if(sel=2) stringinput(findmess,15,input the existing studen

28、t name); p=Locate(l,findmess,name); /*先按姓名查詢到該記錄所在的節(jié)點*/ if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n=Delete success!n); getchar(); saveflag=1; else Nofind(); getchar(); else Wrong(); getchar();void Modify(Link l) /*修改學生記錄。先按輸入的學號查詢到該記錄,然后提示用戶修改學號之外的值,學號不能修改*/ Node *p; char

29、findmess20; if(!l-next) system(cls); printf(n=No student record!n); getchar(); return; system(cls); printf(Modify student recorder:); Disp(l); stringinput(findmess,10,nInput the existing student number:); /*輸入并檢驗該學號*/ p=Locate(l,findmess,num); /*查詢到該節(jié)點*/ if(p) /*若p!=NULL,表明已經找到該節(jié)點*/ printf(Number:%s

30、,n,p-data.num); printf(Name:%s,); stringinput(,15,input new name:); printf(C language score:%d,p-data.cgrade); p-data.cgrade=numberinput(C language Score0-100:); printf(Math score:%d,p-data.mgrade); p-data.mgrade=numberinput(Math Score0-100:); printf(English score:%d,p-data.egr

31、ade); p-data.egrade=numberinput(English Score0-100:); p-data.total = p-data.egrade + p-data.cgrade + p-data.mgrade; p-data.ave=(float)(p-data.total/3); p-data.mingci=0; printf(n=Modify success!n); Disp(l); saveflag=1; else Nofind(); getchar();void Insert(Link l) /*插入記錄,按學號查詢到要插入的節(jié)點的位置,然后在該學號之后插入一個新節(jié)

32、點*/ Link p,v,newinfo; /*p指向插入位置,newinfo指新插入記錄*/ char ch,num10,s10; /*s保存插入點位置之前的學號,num保存輸入的新記錄的學號*/ int flag=0; v=l-next; system(cls); Disp(l); while(1) stringinput(s,10,nPlease input Insert location after the Number:); flag=0; v=l-next; while(v) /*查詢該學號是否存在,flag=1表示該學號存在*/ if(strcmp(v-data.num,s)=0

33、) flag=1;break; v=v-next; if(flag=1) break; /*若學號存在,則進行插入之前的新記錄的輸入操作*/ else getchar(); printf(n=The number %s is not existing,try again?(y/n):,s); scanf(%c,&ch); if(ch=y|ch=Y) continue; else return; stringinput(num,10,Input new student Number:); /*以新記錄的輸入操作與Add()相同*/ v=l-next; while(v) if(strcmp(v-d

34、ata.num,num)=0) printf(=Sorry,the new number:%s is existing !n,num); printheader(); printdata(v); printf(n); getchar(); return; v=v-next; newinfo=(Node *)malloc(sizeof(Node); if(!newinfo) printf(n Allocate memory failure ); /*如沒有申請到,打印提示信息*/ return ; /*返回主界面*/ strcpy(newinfo-data.num,num); stringinp

35、ut(,15,Name:); newinfo-data.cgrade=numberinput(C language Score0-100:); newinfo-data.mgrade=numberinput(Math Score0-100:); newinfo-data.egrade=numberinput(English Score0-100:); newinfo-data.total=newinfo-data.egrade+newinfo-data.cgrade+newinfo-data.mgrade; newinfo-data.ave=(float)(n

36、ewinfo-data.total/3); newinfo-data.mingci=0; newinfo-next=NULL; saveflag=1; p=l-next; /*將指針賦值給p,因為l中的頭節(jié)點的下一個節(jié)點才實際保存著學生的記錄*/ while(1) if(strcmp(p-data.num,s)=0) /*在鏈表中插入一個節(jié)點*/ newinfo-next=p-next; p-next=newinfo; break; p=p-next; Disp(l); printf(nn); getchar();void Tongji(Link l) /*統計總分,單科第一和各科不及格人數*

37、/ Node *pm,*pe,*pc,*pt; /*用于指向分數最高的節(jié)點*/ Node *r=l-next; int countc=0,countm=0,counte=0; /*保存三門成績中不及格的人數*/ if(!r) system(cls); printf(n=No student record!n); getchar(); return ; system(cls); Disp(l); pm=pe=pc=pt=r; while(r) if(r-data.cgradedata.mgradedata.egradedata.cgrade=pc-data.cgrade) pc=r; if(r-data.mgrade=pm-data.mgrade) pm=r; if(r-data.egrade=pe-data.egrade) pe=r; if(r-data.total=pt-data.total) pt=r; r=r-next; printf(n-t

溫馨提示

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

評論

0/150

提交評論