|
一、概述 1、 項目背景 當今時代是飛速發(fā)展的信息時代。在各行各業(yè)中離不開信息處理,這正是計算機被廣泛應用于信息管理系統(tǒng)的環(huán)境。計算機的最大好處在于利用它能夠進行信息管理。使用計算機進行信息控制,不僅提高了工作效率,而且大大的提高了其安全性。 尤其對于復雜的信息管理,計算機能夠充分發(fā)揮它的優(yōu)越性。計算機進行信息管理與信息管理系統(tǒng)的開發(fā)密切相關(guān),系統(tǒng)的開發(fā)是系統(tǒng)管理的前提。目前隨著個大高校的擴招,在校學生數(shù)量龐大。擁有一款好的學習成績管理系統(tǒng)軟件,對于加強對在校生的成績管理起到積極作用。并且,可以為在校生隨時查閱自己的成績信息、教師錄入成績、管理員進行信息維護等提供方便,為學校節(jié)省大量人力資源本系統(tǒng)就是為了管理好學生成績信息而設計的。 2、 編寫目的 首先,學生成績管理是一個學校不可缺少的部分,它的內(nèi)容對于學校的管理者和學生以及學生家長來說都至關(guān)重要,所以一個良好的學生成績管理系統(tǒng)應該能夠為用戶提供充足的信息和快捷的查詢手段。學生成績管理系統(tǒng)對學校加強學生成績管理有著極其重要的作用. 作為計算機應用的一部分,使用計算機對學生成績信息進行管理,具有手工管理所無法比擬的優(yōu)點。例:檢索迅速、查找方便、可靠性高、存儲量大、保密性好、壽命長、成本低等。這些優(yōu)點能夠極大地提高管理者管理的效率,也是學校走向科學化、正規(guī)化管理,與世界接軌的重要條件。 因此,開發(fā)設計這樣一套學生成績管理軟件成為很有必要的事情。其次,初步掌握軟件開發(fā)的流程,熟悉delphi與SQL的使用方法,達到能夠較好的運用兩者制成能實現(xiàn)初步功能的管理系統(tǒng),鍛煉自己的動手能力,同時,在合作中更好的與同學交流,這些都是必要的。最后,自己動手編程序,能更好的提升對本專業(yè)的愛好,初步了解本專業(yè)的發(fā)展方向,為將來的畢業(yè)與找工作奠定基礎(chǔ)。  3、 軟件定義 該學生管理管理信息系統(tǒng)是基于Internet/Intranet 及C 技術(shù),建立以以數(shù)據(jù)庫為后臺核心應用、以服務為目的信息平臺,對資源進行科學的加工整序和管理維護,為教學和科學研究提供文獻信息保障和提高管理學生成績的效率而設計的系統(tǒng)。 4、 開發(fā)環(huán)境 本系統(tǒng)采用,XP作為操作平臺,前臺開發(fā)工具采用delphi7.0,數(shù)據(jù)庫管理采用SQL SERVER 2008。 二、需求分析 1、 問題的提出 為了提高高校學生成績信息的管理效率,方便學生和教師對學生成績信息進行查詢、方便學校里面管理員去管理和查詢學生信息,建立一個學生成績管理系統(tǒng),使學生信息管理工作規(guī)范化,系統(tǒng)化,程序化,避免學生成績管理的隨意性,提高信息處理的速度和準確性,能夠及時、準確、有效的查詢和修改學生信息是必須而且十分迫切的工作。本次課程設計題目為《學生成績管理系統(tǒng)》,涉及成績管理系統(tǒng)的登錄界面、老師對學生成績的查詢、學生對學生成績的查詢、教務員對學生成績的增刪改查統(tǒng)計等內(nèi)容。本功能實現(xiàn)對學生信息、教師信息情況信息的管理和統(tǒng)計、課程信息和成績信息查看及維護。 2、系統(tǒng)的業(yè)務功能分析 學生成績管理系統(tǒng)應當將學生與教務員區(qū)分開來,因為增、刪、改、統(tǒng)計的權(quán)限應當只有教務員才擁有,學生只能查詢與自己相關(guān)的記錄,老師查詢自己所授課程的記錄,而教務員則錄入數(shù)據(jù),進行增刪改與統(tǒng)計。另外,在日常學習生活中,為了方便老師和同學了解情況,需要提供平均分、最高(低)分、排名等供老師和學生查詢。 具體分析:按照教師,學生,管理員三種角色設計系統(tǒng)功能。 ①學生要能夠查詢自己所學課程的成績,查看自己不同課程的成績、GPA以及排名,查看個人信息、修改個人登錄密碼等。 ②教師要實現(xiàn)對自己所教授課程中所有學生成績的查詢、以及對自己所教班上同學的各分數(shù)段成績單人數(shù)成績的查詢(排序功能),個人資料的修改和修改個人登錄密碼等。 ③管理員要能夠?qū)崿F(xiàn)對管理員、教師、學生基本信息的增加、刪除、修改、查詢以及實現(xiàn)對學生成績的增加、刪除(按學號、按班級、按課程號、按院系)、修改、查詢(按學號、按班級、按課程號、按院系)和數(shù)據(jù)統(tǒng)計分析以及對結(jié)果提供打印功能等。 3、系統(tǒng)業(yè)務流程分析 個人信息修改密碼 4、完成的功能 系統(tǒng)的功能模塊劃分 《學生成績管理系統(tǒng)》包括八個模塊:系統(tǒng)登錄、學生基本信息管理、教師基本信息管理、管理員基本信息管理、學生成績信息查詢、學生成績信息管理,學生成績信息統(tǒng)計,系統(tǒng)退出。 1、系統(tǒng)登錄模塊 (1)用戶人員在登錄界面中輸入用戶名與密碼。 (2)通過用戶名與數(shù)據(jù)庫里的用戶表相比配,將學生、教師與管里員區(qū)分開,三者各自進入自己的頁面,初始密碼為:000000,登錄成功后,可以修改密碼。 (3)三者擁有各自權(quán)限,分別擁有不同的功能。 2、學生基本信息管理:管理員對所有學生信息進行增刪改查,學生只能查詢自己的基本信息。 3、教師基本信息管理:管理員對所有教師信息進行增刪改查,學生只能查詢自己的基本信息。 4、管理員基本信息管理:管理員對所有管理員信息進行增刪改查。 5、學生成績信息查詢:管理員查詢功能:可以按學號、班級、院系、教師工號等對學生成績分別進行查詢、查某門課程的排名、最高分、最低分、績點、不及格人數(shù)等、查某班級某科目分數(shù)段的人數(shù)。教師查詢功能:查詢所教課程的最高分、最低分、各分數(shù)段人數(shù)、不及格人數(shù)等。學生查詢功能:查某學生所學課程的排名、最高分、最低分、績點、不及格人數(shù)等。 6、學生成績信息管理:管理員對學生成績進行增刪改查。 7、學生成績信息統(tǒng)計:按學號、班級、院系、教師工號等分別進行統(tǒng)計,并對結(jié)果提供打印能。 8、退出程序:退出該程序。 9、數(shù)據(jù)流程圖 數(shù)據(jù)流圖 10、數(shù)據(jù)字典 (1).數(shù)據(jù)流 ①院信息,包括學院編號,學院名稱等信息。 ②班級信息,包括班級編號,學院編號等信息。 ③生信息,包括學生編號,學生姓名,性別,班級,聯(lián)系方式等信息。 ④教師信息,包括教師工號,教師姓名,性別,學院編號,聯(lián)系方式等信息。 ⑤管理員信息,包括管理員編號,管理員姓名,性別等信息。 ⑥用戶信息,包括用戶名,登錄密碼等信息。 ⑦課程信息,包括課程號,課程名稱,學分,學時,教師工號等信息。 (2).數(shù)據(jù)存儲 績表信息,包括學生編號,課程編號,課程績點,課程成績等信息。 課程安排信息,包括課程編號,課程名稱,教師工號等信息。 三、系統(tǒng)設計 、數(shù)據(jù)表: (1)、數(shù)據(jù)庫的關(guān)系模式: (sno, sname, sex, classno, departed, phone); teacher(tno, tname, departid, sex, phone); course(cno, cname, credit, ctime, tno); score(sno, sname, cno, cname, grade, GPA); administror(adminino,adimniname,sex); department(departed, departname); class(departed, classno, classname); user(userno,password); (2)、表的物理設計: 表一學生信息表student table student( sno char(10) primary key, char(20) not null default ‘Noname’, sex char(10) not null , char(10) foreign key references class(classno) , departid char(10) foreign key references department(departid), phone char(20) ); 表二教師信息表teacher Create table student( tno char(10) primary key, char(10) not null default ‘Noname’ , sex char(10) not null , char(10) forgein key refrences department(departid), phone char(20) ); 表三課程信息表course table student( cno char(10) , cname char(20) not null, credi char(10) not null , char(10) not null, tno char(10) , primary key(cno, tno) ); 表四學生成績表score Create table score ( sno char(10), sname char(20) not null, cno char(10), cname char(20) not null, Score char(10) not null, GPA float, primary key(sno,cno) ); 表五管理員信息表administror Create table student( char(10) primary key, char(20) not null default ‘Noname’, sex char(10) not null ); 表六院系表department table student( char(10) primary key, departname char(20) not null ); 表七班級表class table class ( char(10) foreign key references department(departid), classno char(10)primary key , classname char(10) not null); 表八用戶表user Create table user( char(10) primary key, password char(6)not null ); 2、視圖,索引,數(shù)據(jù)庫權(quán)限:這些在這個學生成績管理系統(tǒng)中沒有用到。 3、軟件功能設計 (1)、系統(tǒng)的結(jié)構(gòu)圖 顯示制作人和版本 (2)、功能表: (3)、功能描述:同功能表。 四、系統(tǒng)實施 (1)、系統(tǒng)的界面設計: 1、登陸界面 2、密碼修改 3、個人信息 4、操作頁面 5、信息管理 6、成績查詢 7、成績管理 8、成績統(tǒng)計 (2)、事件的設計過程: ②行軟件進入主界面,在主界面登錄進入各自操作主界面。 ③生登錄后可在登錄界面進行成績查詢、個人信息查詢及密碼修改。 ③教師登錄后可在登錄界面進行功能選擇來完成自己所選擇的查詢與維護。 ④管理員登錄后可在登錄界面點擊各頁面標簽選擇功能進入相應頁面。 (3)、主要代碼描述: 1、登錄 TfrmLogin.btnOKClick(Sender: TObject); var sSQL: string; begin Trim(Edit1.Text) = '' then begin _MessageBox('請?zhí)顚懹脩裘?#39;, MB_OK); Edit1.SetFocus; Exit; end else Trim(Edit2.Text) = '' then begin _MessageBox('請?zhí)顚懨艽a!', MB_OK); Edit2.SetFocus; Exit; end; := iErrorCount 1; := 'select ' ' from [user] a ' ' left join (select tno,tname,1 as UserType from teacher ' ' union all ' ' select sno,sname,2 from student ' ' union all ' ' select adminino,admininame,0 from administror) b on erno = b.tno ' ' where erno = ' QuotedStr(Trim(Edit1.Text)) ' and a.password = ' QuotedStr(Trim(Edit2.Text)); gf_OpenSQL(sSQL, DM.aqPublic); if DM.aqPublic.IsEmpty then begin iErrorCount >= 3 then begin _MessageBox('賬號或密碼錯誤三次,程序自動關(guān)閉!',MB_OK); Application.Terminate; end; _MessageBox('賬號或密碼錯誤,請重試!還剩' IntToStr(3 - iErrorCount) '次將自動關(guān)閉程序!',MB_OK); Edit1.SelectAll; Edit1.SetFocus; end else begin _LoginUser.sUserID := DM.aqPublic.FieldByName('userno').AsString; gr_LoginUser.sUserName :=DM.aqPublic.FieldByName('tname').AsString; gr_LoginUser.iType := DM.aqPublic.FieldByName('usertype').AsInteger; SetLoginInfo; Self.Hide; .CreateForm(TfrmStuSource, frmStuSource); case gr_LoginUser.iType of 0: .sbMain.Panels[0].Text := '工號:' gr_LoginUser.sUserID; .sbMain.Panels[1].Text := '姓名:' gr_LoginUser.sUserName; .sbMain.Panels[2].Text := '登錄身份:管理員'; end; 1: .S1.Visible := False; frmStuSource.N3.Visible := False; frmStuSource.N10.Visible := False; .sbMain.Panels[0].Text := '工號:' gr_LoginUser.sUserID; .sbMain.Panels[1].Text := '姓名:' gr_LoginUser.sUserName; .sbMain.Panels[2].Text := '登錄身份:教師'; end 2: .S1.Visible := False; frmStuSource.N10.Visible := False; frmStuSource.N11.Visible := False; .sbMain.Panels[0].Text := '學號:' gr_LoginUser.sUserID; .sbMain.Panels[1].Text := '姓名:' gr_LoginUser.sUserName; .sbMain.Panels[2].Text := '登錄身份:學生'; end; end; .ShowModal; end; end; TfrmLogin.FormShow(Sender: TObject); begin:= 0; TfrmLogin.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin Key = 13 then Edit2.SetFocus; end; TfrmLogin.Edit2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin Key = 13 then (Sender); end; 2、修改密碼 TfrmChangPwd.ChangePwd: Boolean; var : string; ,NewPwd: string; begin:= True; Trim(edtNewPwd1.Text) = Trim(edtNewPwd2.Text) then begin _MessageBox('兩次輸入的新密碼不相同',MB_OK); edtNewPwd2.SetFocus; Result := False; Exit; end; := Trim(edtOldPsw.Text); NewPwd := Trim(edtNewPwd1.Text); := 'update [user] set password = ' QuotedStr(NewPwd) ' where userno = ' QuotedStr(gr_LoginUser.sUserID); gf_ExecSQL(sSQL,DM.aqSQL); end; TfrmChangPwd.btnOKClick(Sender: TObject); begin not ChangePwd then begin _MessageBox('密碼修改成功!', MB_OK); Exit; end; end; 、查詢數(shù)據(jù) TfrmScoreMange.SearchData; sSQL: string; begin sSQL := 'select a.sno,a.sname,b.sex,b.phone,o,ame,a.score,a.GPA,d.departname,c.classname ' ' from score a ' ' left join student b on a.sno = b.sno ' ' left join class c on b.classno = c.classno ' ' left join department d on b.departid = d.departid ' ' where 1 = 1'; gr_LoginUser.iType of 0: end; 1: := sSQL ' and exists(select 1 from course where cno = o and tno = ' QuotedStr(gr_LoginUser.sUserID) ')'; end; 2: := sSQL ' and a.sno = ' QuotedStr(gr_LoginUser.sUserID); end; end; Trim(edtSNo.Text) '' then:= sSQL ' and a.sno = ' QuotedStr(Trim(edtSNo.Text)); if Trim(edtSName.Text) <> '' then:= sSQL ' and a.sName = ' QuotedStr(Trim(edtSName.Text)); if Trim(edttno.Text) <> '' then:= sSQL ' and exists(select * from course where cno = o and tno = ' QuotedStr(Trim(edttno.Text)) ')'; if Trim(cbxSDepart.Text) <> '全部' then:= sSQL ' and d.departname = ' QuotedStr(Trim(cbxSDepart.Text)); Trim(cbxSClass.Text) <> '全部' then:= sSQL ' and c.ClassName = ' QuotedStr(Trim(cbxSClass.Text)); gf_OpenSQL(sSQL, aqMaster); end; 4、增加記錄 parprocedure TfrmScoreMange.AddData; var sSQL: string; fScore: Double; begin Trim(edtNo.Text) = '' then begin _MessageBox('插入數(shù)據(jù)時未填寫學號!',MB_OK); edtNo.SetFocus; Exit; end else Trim(edtName.Text) = '' then begin_MessageBox('插入數(shù)據(jù)時未填寫姓名!',MB_OK); edtName.SetFocus; Exit; end else Trim(edtCourse.Text) = '' then begin_MessageBox('插入數(shù)據(jù)時未填寫課程號!',MB_OK); edtCourse.SetFocus; Exit; end else Trim(edtCourseName.Text) = '' then begin _MessageBox('插入數(shù)據(jù)時未填寫課程名稱!',MB_OK); edtCourseName.SetFocus; Exit; end else Trim(edtScore.Text) = '' then begin _MessageBox('插入數(shù)據(jù)時未填寫成績!',MB_OK); edtScore.SetFocus; Exit; end else Trim(edtGPA.Text) = '' then begin _MessageBox('插入數(shù)據(jù)時未填寫平均績點!',MB_OK); edtGPA.SetFocus; Exit; end; if not TryStrToFloat(Trim(edtScore.Text),fScore) then begin_MessageBox('成績輸入不合法,請重輸!',MB_OK); edtScore.SetFocus; Exit; end else not TryStrToFloat(Trim(edtGPA.Text),fScore) then begin_MessageBox('平均績點輸入不合法,請重輸!',MB_OK); edtGPA.SetFocus; Exit; end; gf_MessageBox('是否新增所輸數(shù)據(jù)?',MB_YESNO MB_ICONWARNING) = IDNO then Exit; := sSQL 'insert into score(sno,sname,cno,cname,score,GPA)' ' values(%s,%s,%s,%s,%s,%s)'; sSQL := Format(sSQL,[QuotedStr(Trim(edtNo.Text)),QuotedStr(Trim(edtName.Text)),QuotedStr(Trim(edtCourse.Text)) ,QuotedStr(Trim(edtCourseName.Text)),QuotedStr(Trim(edtScore.Text)),QuotedStr(Trim(edtGPA.Text))]); try _ExecSQL(sSQL,aqPublic); except E: Exception do begin_MessageBox('保存數(shù)據(jù)發(fā)生錯誤。錯誤信息:' E.Message,MB_OK); end; end; ; end; 、刪除記錄 TfrmScoreMange.DelData; var sSQL: string; begin (aqMaster.IsEmpty) or (not aqMaster.Active) then begin _MessageBox('沒有數(shù)據(jù)可以刪除!',MB_OK MB_ICONWARNING); Exit; end; gf_MessageBox('刪除數(shù)據(jù)后將不能恢復,是否刪除?',MB_YESNO MB_ICONWARNING) = IDNO then Exit; sSQL := 'delete from score where sno = ' QuotedStr(aqMaster.FieldByName('sno').AsString) ' and cno = ' QuotedStr(aqMaster.FieldByName('cno').AsString); gf_ExecSQL(sSQL,aqPublic); SearchData; end; 、修改記錄 TfrmScoreMange.EditData; var: string; sno: string; begin (aqMaster.IsEmpty) or (not aqMaster.Active) then begin_MessageBox('沒有數(shù)據(jù)可以修改!',MB_OK MB_ICONERROR); Exit; end; := aqMaster.FieldByName('sno').AsString; := 'update score set sno = %s,sname = %s, cno = %s, cname = %s, score = %s, GPA = %s where sno = ' QuotedStr(aqMaster.FieldByName('sno').AsString) ' and cno = ' QuotedStr(aqMaster.FieldByName('cno').AsString); sSQL := Format(sSQL,[QuotedStr(Trim(edtNo.Text)),QuotedStr(Trim(edtName.Text)),QuotedStr(Trim(edtCourse.Text)) ,QuotedStr(Trim(edtCourseName.Text)),QuotedStr(Trim(edtScore.Text)),QuotedStr(Trim(edtGPA.Text))]); try _ExecSQL(sSQL,aqPublic); except E: Exception do begin _MessageBox('修改數(shù)據(jù)發(fā)生錯誤。錯誤信息:' E.Message,MB_OK); end; end; .Locate('sno',sno,[]); end; 7、統(tǒng)計 TfrmScoreStat.StatData(iType: Integer); var: string; sCondition 2: string; i: Integer; begin i := 0 to dgMaster.Columns.Count - 1 do dgMaster.Columns[i].Visible := True; := ' from score a ' ' left join student b on a.sno = b.sno ' ' left join class c on b.classno = c.classno ' ' left join department d on b.departid = d.departid '; case iType of 1: := 'select a.sno,a.sname,c.classname,d.departname,o,ame,max(a.score) as MaxScore, ' ' min(a.score) as MinScore,convert(decimal(18,2),avg(convert(float,a.score))) as avgScore, ' ' sum(case when convert(float,a.score) <60 then 0 else 1 end) as Fail '; := ' group by a.sno,a.sname,c.classname,d.departname,o,ame'; end; 2: .Columns[0].Visible := False; dgMaster.Columns[1].Visible := False; sCondition1 := 'select c.classname,d.departname,o,ame,max(a.score) as MaxScore, ' ' min(a.score) as MinScore,convert(decimal(18,2),avg(convert(float,a.score))) as avgScore, ' ' sum(case when convert(float,a.score) <60 then 0 else 1 end) as Fail '; := ' group by c.classname,d.departname,o,ame'; end; 3: .Columns[0].Visible := False; dgMaster.Columns[1].Visible := False; dgMaster.Columns[2].Visible := False; sCondition1 := 'select d.departname,o,ame,max(a.score) as MaxScore, ' ' min(a.score) as MinScore,convert(decimal(18,2),avg(convert(float,a.score))) as avgScore, ' ' sum(case when convert(float,a.score) <60 then 0 else 1 end) as Fail '; := ' group by d.departname,o,ame'; end; 4: .Columns[0].Visible := False; dgMaster.Columns[1].Visible := False; dgMaster.Columns[2].Visible := False; dgMaster.Columns[3].Visible := False; := 'select o,ame,max(a.score) as MaxScore, ' ' min(a.score) as MinScore,convert(decimal(18,2),avg(convert(float,a.score))) as avgScore, ' ' sum(case when convert(float,a.score) <60 then 0 else 1 end) as Fail '; := ' group by o,ame'; end; end; := sCondition1 sSQL sCondition2; _OpenSQL(sSQL, aqMaster); end; 8、打印 CopyDbDataToExcel(Args: array of const); var, jCount: Integer; XLApp: Variant; Sheet: Variant; I: Integer; begin.Cursor := crHourGlass; if not VarIsEmpty(XLApp) then begin .DisplayAlerts := False; XLApp.Quit; (XLApp); end; XLApp := CreateOleObject('Excel.Application'); except .Cursor := crDefault; Exit; end; .WorkBooks.Add; .SheetsInNewWorkbook := High(Args) 1; I := Low(Args) to High(Args) do begin .WorkBooks[1].WorkSheets[I 1].Name := TDBGrid(Args[I].VObject).Name; Sheet := XLApp.Workbooks[1].WorkSheets[TDBGrid(Args[I].VObject).Name]; not TDBGrid(Args[I].VObject).DataSource.DataSet.Active then begin .Cursor := crDefault; Exit; end; (Args[I].VObject).DataSource.DataSet.first; iCount := 0 to TDBGrid(Args[I].VObject).Columns.Count - 1 do Sheet.Cells[1, iCount 1] := (Args[I].VObject).Columns.Items[iCount].Title.Caption; := 1; not TDBGrid(Args[I].VObject).DataSource.DataSet.Eof do begin iCount := 0 to TDBGrid(Args[I].VObject).Columns.Count - 1 do begin .Cells[jCount 1, iCount 1] := (Args[I].VObject).Columns.Items[iCount].Field.AsString; end; (jCount); (Args[I].VObject).DataSource.DataSet.Next; end; .Visible := True; end; .Cursor := crDefault; end; 五、系統(tǒng)測試 (1)、給出單元測試的測試用例: 1、按教師工號查詢 2、按學號查詢 3、按班級查詢 4、新增數(shù)據(jù) 5、刪除數(shù)據(jù) 6、統(tǒng)計 (2)、給出系統(tǒng)測試的測試用例: 1、登錄用戶名或密碼錯誤 2、修改密碼 兩次密碼不一致修改成功 六、收獲和體會 一次軟件設計帶給我們的收獲很多很多,想著剛接觸delphi時的茫然無知到現(xiàn)在可以做出的成品的進步,帶給我們的不僅僅是高興,更多的是收獲知識的滿足。 學習成績管理系統(tǒng)時一個與我們息息相關(guān)的軟件系統(tǒng),如何把它做好是一個難題。作為學生,很容易知道作為學生應該擁有的權(quán)限,然而對于教師、管理員的職權(quán)我們卻是似懂非懂。通過我們小組人員的討論,分析最終確定了他們的職權(quán),完成他們的功能。 通過對這次學習成績管理系統(tǒng)的設計,我們明白了創(chuàng)建一個小型管理系統(tǒng)的流程與步驟。判斷一個管理系統(tǒng)的好壞,最重要的一個依據(jù)就是看這個系統(tǒng)是否滿足用戶的需求。所以首先進行一個系統(tǒng)的需求分析至關(guān)重要。我們要站在用戶的角度分析什么功能是常用的,什么功能時重要的,什么功能時次要的,我們要根據(jù)實際的情況調(diào)整按鈕的排列順序,功能實現(xiàn)的復雜程度和所耗系統(tǒng)內(nèi)存,以及實現(xiàn)時間。只有這樣我們才能做好一個滿足需求的軟件。一個好的軟件設計不僅要滿足用戶的需求,還需要站在管理員的角度和層面上分析,一個管理層應該具備哪些職權(quán)才能更快捷地實現(xiàn)對整個系統(tǒng)的管理。也就是說在系統(tǒng)開發(fā)方面要以用戶為主體,兼顧管理員對整個資料的掌控來實現(xiàn)軟件,而不是自己想當然,即做到有理有據(jù)。這種統(tǒng)籌兼顧的思想應該是一個IT人才應該具備的基本思想。 同時也讓我們體會到編寫源代碼時對語言運用的能力的要求,我們應該力求在滿足功能的基礎(chǔ)上讓我們的代碼語言簡潔、易懂。我們絕不能滿足于自己所懂得知識,要明白作為一個合格的計算機人才,不斷創(chuàng)新、不斷發(fā)展科技才能跟上時代發(fā)展的要求,才能與時俱進! 軟件設計的主要目的便是對同學們動手實踐能力的一個鍛煉。通過課程設計,讓同學們更好的掌握delphi這個軟件,了解和掌握pascal語言的用法。一次課程設計所教會我們的絕對比我們從書本上得到的更多更印象深刻。從控件的熟悉到界面的設計,再到代碼的編寫,到debug的出現(xiàn),然后就是不斷修改調(diào)試,直到最后的成功運行。每一步都是一個進步,每一次進步都是一次心獲得心靈滿足感的時候。翻閱書籍、網(wǎng)上查詢、詢問同學 每一次問題的解決都是艱難的,但在每一次艱難的嘗試后獲得的成功的喜悅確實溢于言表的。從完全不懂代碼到自己會敲代碼再到今天程序的順利完成,這是我們朝著人生的道路又前進了一步。 但是,我們也明白,雖然完成了這次課程設計,我們對delphi的認識、對pascal語言的了解也只是在一個層面上,以后我們還需要學習的很多很多。我相信我們都不是停滯不前的人,我們都渴望知識的澆灌,未來我們一定可以“更上一層樓”! 一次課程設計所教會我們的絕不僅僅是技能的提高,動手能力的鍛煉,這次組隊的結(jié)果更是讓大家相互理解,相互合作,相互幫助相互扶持,增進了友誼。知識的增加、能力的鍛煉、友誼的增進、團結(jié)合作是我們收獲的寶貴財富!
信息發(fā)布:廣州名易軟件有限公司 http://www.jetlc.com
|