目錄
一 、系統(tǒng)設(shè)計(jì)背景? ? ? ?
二、系統(tǒng)可行性分析
2.1?經(jīng)濟(jì)可行性
2.2?技術(shù)可行性
2.3?操作可行性
2.4?可行性分析總結(jié)
三、軟件選擇與編程環(huán)境
3.1 軟件選擇
3.2 編程環(huán)境
四、系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)
五、數(shù)據(jù)庫(kù)設(shè)計(jì)及表鏈接
5.1 表設(shè)計(jì)
5.2 表連接
六、信息瀏覽的實(shí)現(xiàn)
6.1?表單設(shè)計(jì)
6.2?報(bào)表設(shè)計(jì)
七、信息查詢的實(shí)現(xiàn)
7.1 往屆學(xué)生信息精確查詢
7.2?往屆學(xué)生信息模糊查詢
八、考前分析的實(shí)現(xiàn)
8.1 男女生比例查詢
8.2 錄取學(xué)校分布查詢
九、考研預(yù)測(cè)的實(shí)現(xiàn)
9.1 考研預(yù)測(cè)分析系統(tǒng)
9.2 班級(jí)上岸率趨勢(shì)預(yù)測(cè)
十、系統(tǒng)管理
10.1 數(shù)據(jù)環(huán)境
10.2 登陸系統(tǒng)
10.3 用戶管理
10.4? 切換賬號(hào)
10.5? 修改密碼
10.6? 退出系統(tǒng)
十一、主函數(shù)與主菜單設(shè)計(jì)
11.1? 主函數(shù)設(shè)計(jì)
11.2? 主菜單設(shè)計(jì)
十二、總結(jié)與評(píng)價(jià)改進(jìn)
十三、參考文獻(xiàn)
這個(gè)項(xiàng)目在我的B站上有專門(mén)的視頻演示:
【數(shù)據(jù)庫(kù)技術(shù)課程設(shè)計(jì)】 電信學(xué)院考研信息管理系統(tǒng) +【Visual FoxPro】_嗶哩嗶哩_bilibili
一 、系統(tǒng)設(shè)計(jì)背景? ? ? ?
????????隨著當(dāng)前研究生擴(kuò)招和報(bào)考的人數(shù)不斷增多,考研信息量也成倍增長(zhǎng)??忌鷶?shù)量的增長(zhǎng)給學(xué)校及其中的各個(gè)學(xué)院的教學(xué)管理帶來(lái)了很大的壓力,各學(xué)院的考研成功率的高低直接影響到學(xué)生培養(yǎng)的質(zhì)量。在這個(gè)信息時(shí)代,信息的獲取已成為了決定成敗最大的因素之一,考研作為選拔性的考試,考研大數(shù)據(jù)分析已經(jīng)成為了一個(gè)理所應(yīng)當(dāng)?shù)臒衢T(mén)話題,這就需要一個(gè)專門(mén)的系統(tǒng)來(lái)實(shí)現(xiàn)考研相關(guān)數(shù)據(jù)預(yù)測(cè)分析與學(xué)生信息管理功能。
二、系統(tǒng)可行性分析
2.1?經(jīng)濟(jì)可行性
????????電信學(xué)院考研信息管理系統(tǒng)應(yīng)用后可以顯著提供查詢電信學(xué)院考研信息的效率,并且實(shí)現(xiàn)考研相關(guān)數(shù)據(jù)預(yù)測(cè)分析。新系統(tǒng)的開(kāi)發(fā)費(fèi)用和今后的運(yùn)行、維護(hù)費(fèi)用,效益進(jìn)行比較,十分有利。在使用的操作人員方面,熟悉簡(jiǎn)單的電腦知識(shí),不需要花大量錢(qián)雇傭高學(xué)歷人才,即在經(jīng)濟(jì)上可行;
2.2?技術(shù)可行性
????????本系統(tǒng)可借助VFP進(jìn)行開(kāi)發(fā),雖然該系統(tǒng)應(yīng)用階段需要一定的硬件支持,但在科技飛速發(fā)展的今天,硬件更新速度越來(lái)越快,容量越來(lái)越大,可靠性越來(lái)越高,價(jià)格越來(lái)越低。其硬件平臺(tái)完全能滿足該系統(tǒng)需要。而且此系統(tǒng)占用空間不大,不會(huì)造成硬件高負(fù)荷運(yùn)轉(zhuǎn),不會(huì)造成設(shè)備的毀壞等情況。即在技術(shù)上可行;
2.3?操作可行性
????????本系統(tǒng)采用基于 Windows 的圖形用戶界面,而該系統(tǒng)是大家熟悉的操作系統(tǒng),對(duì)于那些有一般的計(jì)算機(jī)知識(shí)的人員就可以輕松上手。而整個(gè)考研信息管理系統(tǒng)采用了友好的交互界面,簡(jiǎn)介明了;
2.4?可行性分析總結(jié)
????????本系統(tǒng)綜上所述,由于該系統(tǒng)的對(duì)考研信息查詢有一定的積極作用,并且在經(jīng)濟(jì),技術(shù), 操作方面都是可行的,所以進(jìn)行此系統(tǒng)的開(kāi)發(fā)。
三、軟件選擇與編程環(huán)境
3.1 軟件選擇
????????Microsoft 公司的 Visual Foxpro6.0 是Windows 應(yīng)用程序開(kāi)發(fā)工具,是目前最為廣泛的、易學(xué)易用的面向?qū)ο蟮拈_(kāi)發(fā)工具。Visual Foxpro6.0 提供了大量的控件,這些控件可用于設(shè)計(jì)界面和實(shí)現(xiàn)各種功能,減少了編程人員的工作量,也簡(jiǎn)化了界面設(shè)計(jì)過(guò)程,從而有效的提高了應(yīng)用程序的運(yùn)行效率和可靠性。另外,VF 還具有:用戶通過(guò)各種動(dòng)作控制應(yīng)用程序的流程, 簡(jiǎn)單的 Visual Foxpro 語(yǔ)言與豐富而功能強(qiáng)大的內(nèi)置函數(shù),面向?qū)ο蟮木幊?,跨平臺(tái)開(kāi)發(fā), 與數(shù)據(jù)庫(kù)的連接性等一系列的優(yōu)點(diǎn),因此,實(shí)現(xiàn)本系統(tǒng),VF 是一個(gè)相對(duì)較好的選擇。
3.2 編程環(huán)境
????????Microsoft Visual FoxPro 6.0 是創(chuàng)建高性能、優(yōu)秀數(shù)據(jù)庫(kù)組件和解決方案的優(yōu)秀工具。Visual FoxPro 6.0 提供給開(kāi)發(fā)人員必要的工具管理數(shù)據(jù)--組織信息表格、運(yùn)行查詢、創(chuàng)建關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)、為終端用戶設(shè)計(jì)數(shù)據(jù)管理應(yīng)用程序。
????????Visual FoxPro 6.0 是 FoxPro 的進(jìn)一步發(fā)展,從面向過(guò)程的桌面數(shù)據(jù)庫(kù)系統(tǒng)到面向?qū)ο蟮拈_(kāi)發(fā)環(huán)境,這個(gè)開(kāi)發(fā)環(huán)境帶有開(kāi)發(fā)人員創(chuàng)建優(yōu)秀的客戶機(jī)/服務(wù)器數(shù)據(jù)庫(kù)和 Internet 數(shù)據(jù)庫(kù)的組件及應(yīng)用程序的工具。
????????Visual FoxPro 具有完全的面向?qū)ο蟮念?lèi)設(shè)計(jì)能力,包括繼承、子類(lèi)、 封裝、多態(tài)??梢詣?chuàng)建可視的、不可視的可重用類(lèi)庫(kù),以便動(dòng)態(tài)地減少開(kāi)發(fā)時(shí)間。
四、系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)
????????系統(tǒng)綜合運(yùn)用數(shù)據(jù)庫(kù)設(shè)計(jì)、表設(shè)計(jì)、表單設(shè)計(jì)、報(bào)表設(shè)計(jì)、程序設(shè)計(jì)、菜單設(shè)計(jì)和項(xiàng)目管理器連編等,實(shí)現(xiàn)改系統(tǒng)的所有功能,文件主要結(jié)構(gòu)如下圖所示:同時(shí),該系統(tǒng)主要包含五個(gè)功能板塊,信息瀏覽,信息查詢,考情分析,考研預(yù)測(cè),系統(tǒng)管理,其中:
- 信息瀏覽用于在主界面上一覽近三年電信學(xué)院往三屆學(xué)生基本個(gè)人信息,分為所有學(xué)生信息表和每年的考研上岸名單表兩部分,并且都能實(shí)現(xiàn)報(bào)表打印。
- 信息查詢可以實(shí)現(xiàn)通過(guò)學(xué)號(hào)對(duì)某個(gè)學(xué)生信息的精確查詢。也可以實(shí)現(xiàn)對(duì)考研成功學(xué)生的模糊查詢。例如查詢姓王的所有學(xué)生、查詢錄取學(xué)校名字開(kāi)頭為中國(guó)的學(xué)生。
- 考情分析用于查詢相關(guān)數(shù)據(jù),如:男女生比例(含上岸比例)、錄取學(xué)校分布、重點(diǎn)院校率(985/211/出國(guó)/中科院)、班級(jí)上岸比例。
- 考研預(yù)測(cè)將前面所有功能得出來(lái)數(shù)據(jù),以圖表形式呈現(xiàn)出來(lái),并加以線性趨勢(shì)分析,可以得到可信度較高的預(yù)測(cè)結(jié)果。
- 由于本系統(tǒng)分析的是近三年往屆生,而考研情況是既定的事實(shí),所以基本用不上增刪學(xué)生信息的功能。系統(tǒng)管理主要用于系統(tǒng)管理登錄用戶信息、修改密碼、切換賬號(hào)。
系統(tǒng)功能結(jié)構(gòu)圖:
?
五、數(shù)據(jù)庫(kù)設(shè)計(jì)及表鏈接
數(shù)據(jù)庫(kù)設(shè)計(jì)器如圖:
5.1 表設(shè)計(jì)
bjbl表用來(lái)存儲(chǔ)個(gè)班級(jí)上岸比例的數(shù)據(jù),其表結(jié)構(gòu)為:
字段名 |
類(lèi)型 |
寬度 |
班級(jí) |
字符型 |
18 |
users表用來(lái)存放使用者的用戶名,密碼和用戶類(lèi)型,其表結(jié)構(gòu)為:
字段名 |
類(lèi)型 |
寬度 |
name |
字符型 |
10 |
password |
字符型 |
10 |
type |
字符型 |
10 |
students14,students15,students16分別用來(lái)存放14,15,16級(jí)全體學(xué)生個(gè)人信息,其表結(jié)構(gòu)為:
字段名 |
類(lèi)型 |
寬度 |
學(xué)號(hào) |
數(shù)值型 |
12 |
姓名 |
字符型 |
6 |
班級(jí) |
字符型 |
18 |
性別 |
字符型 |
2 |
success14,success15,success16,lqxx分別用來(lái)存放14,15,16級(jí)和全體上岸學(xué)生的考研上岸學(xué)生信息,其表結(jié)構(gòu)為:
字段名 |
類(lèi)型 |
寬度 |
班級(jí) |
字符型 |
18 |
姓名 |
字符型 |
6 |
性別 |
字符型 |
2 |
學(xué)號(hào) |
數(shù)值型 |
12 |
錄取學(xué)校 |
字符型 |
20 |
是否重點(diǎn)院校 |
字符型 |
3 |
備注 |
字符型 |
6 |
fenbu14,fenbu15,fenbu16,fenbu表分別用來(lái)記錄14,15,16級(jí)和全體上岸學(xué)生的錄取院校分布情況,其表結(jié)構(gòu)為:
字段名 |
類(lèi)型 |
寬度 |
錄取學(xué)習(xí) |
字符型 |
28 |
錄取人數(shù) |
數(shù)值型 |
10 |
是否重點(diǎn)院校 |
字符型 |
3 |
備注 |
字符型 |
6 |
5.2 表連接
表students14、students1、students1和success14、success15、success16和lqxx通過(guò)由學(xué)號(hào)建立的主索引進(jìn)行連接。
表fenbu14、fenbu15、fenbu16和fenbu通過(guò)錄取學(xué)校建立的主索引連接。這四個(gè)表由createlqxxfb.prg語(yǔ)句進(jìn)行創(chuàng)建,主要為Select—SQL,代碼如下:
create table database\lqxx(學(xué)號(hào) N(12,0),班級(jí) C(18),姓名 C(6),性別 C(2),錄取學(xué)校 C(28),是否重點(diǎn)院校 C(3),備注 C(6))
use database\lqxx
append from success14
append from success15
append from success16
use
select distinct 錄取學(xué)校,是否重點(diǎn)院校,備注,count(錄取學(xué)校) as 錄取人數(shù) from lqxx;
into dbf database\fenbu;
group by 錄取學(xué)校
select distinct 錄取學(xué)校,是否重點(diǎn)院校,備注,count(錄取學(xué)校) as 錄取人數(shù) from success14;
into dbf database\fenbu14;
group by 錄取學(xué)校
select distinct 錄取學(xué)校,是否重點(diǎn)院校,備注,count(錄取學(xué)校) as 錄取人數(shù) from success15;
into dbf database\fenbu15;
group by 錄取學(xué)校
select distinct 錄取學(xué)校,是否重點(diǎn)院校,備注,count(錄取學(xué)校) as 錄取人數(shù) from success16;
into dbf database\fenbu16;
group by 錄取學(xué)校
六、信息瀏覽的實(shí)現(xiàn)
????????用于在主界面上一覽近三年電信學(xué)院往三屆學(xué)生基本個(gè)人信息,分為所有學(xué)生信息表和每年的考研上岸名單表兩部分,并且都能實(shí)現(xiàn)報(bào)表打印。
6.1?表單設(shè)計(jì)
(1)學(xué)生信息表單設(shè)計(jì)
新建表單后,添加表格、選項(xiàng)按鈕組控件,并設(shè)置表單的屬性后對(duì)表單中各個(gè)控件的布局進(jìn)行粗調(diào)和微調(diào),表格的數(shù)據(jù)來(lái)源選為表students14后,得到的表單如下:
?打印預(yù)覽 click 事件代碼:
report form print14students preview
(2)學(xué)生考研上岸信息表單設(shè)計(jì)
新建表單后,添加表格、選項(xiàng)按鈕組控件,并設(shè)置表單的屬性后對(duì)表單中各個(gè)控件的布局進(jìn)行粗調(diào)和微調(diào),表格的數(shù)據(jù)來(lái)源選為表success14后,得到的表單如下:
?打印預(yù)覽 click 事件代碼:
report form print14success preview
6.2?報(bào)表設(shè)計(jì)
(1)學(xué)生信息報(bào)表設(shè)計(jì)
經(jīng)過(guò)數(shù)據(jù)查看后,可將數(shù)據(jù)生成報(bào)表并打印,單機(jī)“打印預(yù)覽”后,顯示如下報(bào)表:
該報(bào)表的數(shù)據(jù)環(huán)境為 students14.dbf
(2)學(xué)生考研上岸報(bào)表設(shè)計(jì)
經(jīng)過(guò)數(shù)據(jù)查看后,可將數(shù)據(jù)生成報(bào)表并打印,單機(jī)“打印預(yù)覽”后,顯示如下報(bào)表:
?該報(bào)表的數(shù)據(jù)環(huán)境為 success14.dbf
七、信息查詢的實(shí)現(xiàn)
????????系統(tǒng)查詢可以實(shí)現(xiàn)通過(guò)學(xué)號(hào)對(duì)某個(gè)學(xué)生信息的精確查詢。也可以實(shí)現(xiàn)對(duì)考研成功學(xué)生的模糊查詢。例如查詢姓王的所有學(xué)生、查詢錄取學(xué)校名字開(kāi)頭為中國(guó)的學(xué)生。
7.1 往屆學(xué)生信息精確查詢
????????新建表單后,另外添加標(biāo)簽、文本、命令等控件,并設(shè)置表單的Caption等屬性后對(duì)表單中各個(gè)控件的布局進(jìn)行粗調(diào)和微調(diào),得到的表單如下:
?查詢按鈕的Click事件代碼為:
IF Empty(Thisform.Text1.Value)
Messagebox("查詢的學(xué)號(hào)不能為空",0+48,"操作提示")
ELSE
Do Case
Case Left(Thisform.Text1.Value,4)="2013" OR Left(Thisform.Text1.Value,4)="2014"
ThisForm.Text2.ControlSource='students14.學(xué)號(hào)'
ThisForm.Text3.ControlSource='students14.班級(jí)'
ThisForm.Text4.ControlSource='students14.姓名'
ThisForm.Text5.ControlSource='students14.性別'
ThisForm.Text6.ControlSource='success14.錄取學(xué)校'
ThisForm.Text7.ControlSource='success14.是否重點(diǎn)院校'
ThisForm.Text8.ControlSource='success14.備注'
select students14
set relation to 學(xué)號(hào) into success14
Locate for 學(xué)號(hào)=Val(Thisform.Text1.Value)
IF Found()=.F.
Messagebox("沒(méi)有查找到該學(xué)號(hào)對(duì)應(yīng)的學(xué)生信息",0+64,"信息不存在")
ENDIF
Thisform.refresh
Case Left(Thisform.Text1.Value,4)="1901"
ThisForm.Text2.ControlSource='students15.學(xué)號(hào)'
ThisForm.Text3.ControlSource='students15.班級(jí)'
ThisForm.Text4.ControlSource='students15.姓名'
ThisForm.Text5.ControlSource='students15.性別'
ThisForm.Text6.ControlSource='success15.錄取學(xué)校'
ThisForm.Text7.ControlSource='success15.是否重點(diǎn)院校'
ThisForm.Text8.ControlSource='success15.備注'
select students15
set relation to 學(xué)號(hào) into success15
Locate for 學(xué)號(hào)=Val(Thisform.Text1.Value)
IF Found()=.F.
Messagebox("沒(méi)有查找到該學(xué)號(hào)對(duì)應(yīng)的學(xué)生信息",0+64,"信息不存在")
ENDIF
Thisform.refresh
Case Left(Thisform.Text1.Value,4)="2011"
ThisForm.Text2.ControlSource='students16.學(xué)號(hào)'
ThisForm.Text3.ControlSource='students16.班級(jí)'
ThisForm.Text4.ControlSource='students16.姓名'
ThisForm.Text5.ControlSource='students16.性別'
ThisForm.Text6.ControlSource='success16.錄取學(xué)校'
ThisForm.Text7.ControlSource='success16.是否重點(diǎn)院校'
ThisForm.Text8.ControlSource='success16.備注'
select students16
set relation to 學(xué)號(hào) into success16
Locate for 學(xué)號(hào)=Val(Thisform.Text1.Value)
IF Found()=.F.
Messagebox("沒(méi)有查找到該學(xué)號(hào)對(duì)應(yīng)的學(xué)生信息",0+64,"信息不存在")
ENDIF
Thisform.refresh
ENDCASE
ENDIF
退出按鈕的Click事件代碼為:
Release Thisform
Return
7.2?往屆學(xué)生信息模糊查詢
新建表單后,另外添加標(biāo)簽、文本、命令等控件,并設(shè)置表單的Caption等屬性后對(duì)表單中各個(gè)控件的布局進(jìn)行粗調(diào)和微調(diào),得到的表單如下:
?查詢按鈕的Click事件代碼為:
IF Empty(Thisform.Text1.Value)
Messagebox("查詢條件不能為空",0+48,"操作提示")
ELSE
IF ThisForm.Optiongroup1.Value=1
XM=Alltrim(Thisform.Text1.Value)
ThisForm.Grid1.RecordSourceType=4
Thisform.Grid1.RecordSource="Select * From lqxx Where XM$lqxx.姓名=.T.;
INTO Cursor temp1 Order By 學(xué)號(hào) ASC"
ENDIF
IF ThisForm.Optiongroup1.Value=2
XX=Alltrim(Thisform.Text1.Value)
ThisForm.Grid1.RecordSourceType=4
Thisform.Grid1.RecordSource="Select * From lqxx Where XX$lqxx.錄取學(xué)校=.T.;
INTO Cursor temp1 Order By 學(xué)號(hào) ASC"
ENDIF
ENDIF
退出按鈕的Click事件代碼為:
Release Thisform
Return
八、考前分析的實(shí)現(xiàn)
8.1 男女生比例查詢
新建表單后,另外添加標(biāo)簽、文本、命令等控件,并設(shè)置表單的Caption等屬性后對(duì)表單中各個(gè)控件的布局進(jìn)行粗調(diào)和微調(diào),得到的表單如下:
查詢按鈕的Click事件代碼為:
Store 0 To boy1,boy2,boy3,boy4,boy5,boy6
Store 0 To girl1,girl2,girl3,girl4,girl5,girl6
Store 0 To total_
If Thisform.Check2.Value=1
Select success14
Count for 性別="男" to boy1
Count for 性別="女" to girl1
Select students14
Count for 性別="男" to boy4
Count for 性別="女" to girl4
Endif
If Thisform.Check3.Value=1
Select success15
Count for 性別="男" to boy2
Count for 性別="女" to girl2
Select students15
Count for 性別="男" to boy5
Count for 性別="女" to girl5
Endif
If Thisform.Check4.Value=1
Select success16
Count for 性別="男" to boy3
Count for 性別="女" to girl3
Select students16
Count for 性別="男" to boy6
Count for 性別="女" to girl6
Endif
IF ThisForm.Optiongroup1.Value=1
total_=boy1+boy2+boy3+girl1+girl2+girl3
Thisform.Text1.Value=str(boy1+boy2+boy3)+"人"
Thisform.Text2.Value=str(girl1+girl2+girl3)+"人"
Thisform.Text4.Value=str(total_)+"人"
ELSE
total_=boy4+boy5+boy6+girl4+girl5+girl6
Thisform.Text1.Value=str(boy4+boy5+boy6)+"人"
Thisform.Text2.Value=str(girl4+girl5+girl6)+"人"
Thisform.Text4.Value=str(total_)+"人"
ENDIF
If ThisForm.Optiongroup2.Value=1
Thisform.Text3.Value=str((boy1+boy2+boy3)/(boy4+boy5+boy6)*100,6,3)+"%"
Thisform.Text3.Alignment=0
Else
Thisform.Text3.Value=str((girl1+girl2+girl3)/(girl4+girl5+girl6)*100,6,3)+"%"
Thisform.Text3.Alignment=1
Endif
退出按鈕的Click事件代碼為:
clear
release thisform
8.2 錄取學(xué)校分布查詢
新建表單后,另外添加標(biāo)簽、文本、命令等控件,并設(shè)置表單的Caption等屬性后對(duì)表單中各個(gè)控件的布局進(jìn)行粗調(diào)和微調(diào),得到的表單如下:
表單控件Option1(近三屆)的Click事件代碼為:
IF Thisform.Optiongroup1.Value=1
ThisForm.Grid1.RecordSourceType=4
Thisform.Grid1.RecordSource="Select * From Fenbu Where 是否重點(diǎn)院校='985' OR 是否重點(diǎn)院校='211';
OR 備注='中科院' OR 備注='研究院' OR 備注='出國(guó)';
INTO Cursor temp1 Order By 錄取人數(shù) DESC"
ThisForm.Grid1.Column1.ControlSource='temp1.錄取學(xué)校'
ThisForm.Grid1.Column2.ControlSource='temp1.錄取人數(shù)'
ThisForm.Grid1.Column3.ControlSource='temp1.是否重點(diǎn)院校'
ThisForm.Grid1.Column4.ControlSource='temp1.備注'
ELSE
ThisForm.Grid1.RecordSourceType=1
ThisForm.Grid1.RecordSource='fenbu'
ThisForm.Grid1.Column1.ControlSource='fenbu.錄取學(xué)校'
ThisForm.Grid1.Column2.ControlSource='fenbu.錄取人數(shù)'
ThisForm.Grid1.Column3.ControlSource='fenbu.是否重點(diǎn)院校'
ThisForm.Grid1.Column4.ControlSource='fenbu.備注'
ENDIF
select sum(錄取人數(shù)) from fenbu into array total
select sum(錄取人數(shù)) from fenbu where 是否重點(diǎn)院校='985' OR 是否重點(diǎn)院校='211' into array admit
select sum(錄取人數(shù)) from fenbu where 備注='中科院' OR 備注='研究院' OR 備注='出國(guó)'into array special
Thisform.Text1.Value=str((admit(1)+special(1))/total(1)*100,6,3)+"%"
表單控件Option2(14級(jí))的Click事件代碼為:
IF Thisform.Optiongroup1.Value=1
ThisForm.Grid1.RecordSourceType=4
Thisform.Grid1.RecordSource="Select * From Fenbu14 Where 是否重點(diǎn)院校='985' OR 是否重點(diǎn)院校='211';
OR 備注='中科院' OR 備注='研究院' OR 備注='出國(guó)';
INTO Cursor temp2 Order By 錄取人數(shù) DESC"
ThisForm.Grid1.Column1.ControlSource='temp2.錄取學(xué)校'
ThisForm.Grid1.Column2.ControlSource='temp2.錄取人數(shù)'
ThisForm.Grid1.Column3.ControlSource='temp2.是否重點(diǎn)院校'
ThisForm.Grid1.Column4.ControlSource='temp2.備注'
ELSE
ThisForm.Grid1.RecordSourceType=1
ThisForm.Grid1.RecordSource='fenbu14'
ThisForm.Grid1.Column1.ControlSource='fenbu14.錄取學(xué)校'
ThisForm.Grid1.Column2.ControlSource='fenbu14.錄取人數(shù)'
ThisForm.Grid1.Column3.ControlSource='fenbu14.是否重點(diǎn)院校'
ThisForm.Grid1.Column4.ControlSource='fenbu14.備注'
ENDIF
select sum(錄取人數(shù)) from fenbu14 into array total
select sum(錄取人數(shù)) from fenbu14 Where 是否重點(diǎn)院校='985' OR 是否重點(diǎn)院校='211' into array admit
select sum(錄取人數(shù)) from fenbu14 where 備注='中科院' OR 備注='研究院' OR 備注='出國(guó)'into array special
Thisform.Text1.Value=str((admit(1)+special(1))/total(1)*100,6,3)+"%"
表單控件Option3(15級(jí))的Click事件代碼為:
IF Thisform.Optiongroup1.Value=1
ThisForm.Grid1.RecordSourceType=4
Thisform.Grid1.RecordSource="Select * From Fenbu15 Where 是否重點(diǎn)院校='985' OR 是否重點(diǎn)院校='211';
OR 備注='中科院' OR 備注='研究院' OR 備注='出國(guó)';
INTO Cursor temp3 Order By 錄取人數(shù) DESC"
ThisForm.Grid1.Column1.ControlSource='temp3.錄取學(xué)校'
ThisForm.Grid1.Column2.ControlSource='temp3.錄取人數(shù)'
ThisForm.Grid1.Column3.ControlSource='temp3.是否重點(diǎn)院校'
ThisForm.Grid1.Column4.ControlSource='temp3.備注'
ELSE
ThisForm.Grid1.RecordSourceType=1
ThisForm.Grid1.RecordSource='fenbu15'
ThisForm.Grid1.Column1.ControlSource='fenbu15.錄取學(xué)校'
ThisForm.Grid1.Column2.ControlSource='fenbu15.錄取人數(shù)'
ThisForm.Grid1.Column3.ControlSource='fenbu15.是否重點(diǎn)院校'
ThisForm.Grid1.Column4.ControlSource='fenbu15.備注'
ENDIF
select sum(錄取人數(shù)) from fenbu15 into array total
select sum(錄取人數(shù)) from fenbu15 Where 是否重點(diǎn)院校='985' OR 是否重點(diǎn)院校='211' into array admit
select sum(錄取人數(shù)) from fenbu15 where 備注='中科院' OR 備注='研究院' OR 備注='出國(guó)'into array special
Thisform.Text1.Value=str((admit(1)+special(1))/total(1)*100,6,3)+"%"
表單控件Option4(16級(jí))的Click事件代碼為:
IF Thisform.Optiongroup1.Value=1
ThisForm.Grid1.RecordSourceType=4
Thisform.Grid1.RecordSource="Select * From Fenbu16 Where 是否重點(diǎn)院校='985' OR 是否重點(diǎn)院校='211';
OR 備注='中科院' OR 備注='研究院' OR 備注='出國(guó)';
INTO Cursor temp4 Order By 錄取人數(shù) DESC"
ThisForm.Grid1.Column1.ControlSource='temp4.錄取學(xué)校'
ThisForm.Grid1.Column2.ControlSource='temp4.錄取人數(shù)'
ThisForm.Grid1.Column3.ControlSource='temp4.是否重點(diǎn)院校'
ThisForm.Grid1.Column4.ControlSource='temp4.備注'
ELSE
ThisForm.Grid1.RecordSourceType=1
ThisForm.Grid1.RecordSource='fenbu16'
ThisForm.Grid1.Column1.ControlSource='fenbu16.錄取學(xué)校'
ThisForm.Grid1.Column2.ControlSource='fenbu16.錄取人數(shù)'
ThisForm.Grid1.Column3.ControlSource='fenbu16.是否重點(diǎn)院校'
ThisForm.Grid1.Column4.ControlSource='fenbu16.備注'
ENDIF
select sum(錄取人數(shù)) from fenbu16 into array total
select sum(錄取人數(shù)) from fenbu16 Where 是否重點(diǎn)院校='985' OR 是否重點(diǎn)院校='211' into array admit
select sum(錄取人數(shù)) from fenbu16 where 備注='中科院' OR 備注='研究院' OR 備注='出國(guó)'into array special
Thisform.Text1.Value=str((admit(1)+special(1))/total(1)*100,6,3)+"%"
退出按鈕的Click事件代碼為:
Release Thisform
return
九、考研預(yù)測(cè)的實(shí)現(xiàn)
????????一個(gè)好的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)中,形象、直觀、易懂的統(tǒng)計(jì)圖形是必不可少的,但現(xiàn)有的幾種方法都不太理想。VFP提供了圖形向?qū)?用戶可以按照 向?qū)У奶崾局鸩讲僮?最終獲得圖形。但這種方法在實(shí)際中并不適用,因?yàn)橛纱说贸龅膱D形是靜態(tài)的,而且用戶關(guān)心的只是能否按所給數(shù)據(jù)得出圖形,而不愿看到太多的中間操作步驟。
????????為了實(shí)現(xiàn)動(dòng)態(tài)顯示,首先要生成EXCEL APPLICATION OLE對(duì)象,然后用EXCEL內(nèi)嵌的VBA對(duì)其進(jìn)行操作,達(dá)到出圖的效果。運(yùn)用這種方法的前提是機(jī)器中應(yīng)裝有EXCEL。
9.1 考研預(yù)測(cè)分析系統(tǒng)
新建表單后,另外添加command、Olecontrol控件,并設(shè)置表單的Caption等屬性后對(duì)表單中各個(gè)控件的布局進(jìn)行粗調(diào)和微調(diào),得到的表單如下:?班級(jí)上岸比例預(yù)測(cè)按鈕的Click事件代碼為:
do form excelgragh1
重點(diǎn)院校率預(yù)測(cè)按鈕的Click事件代碼為:
ObjX=ThisForm.Olecontrol1.sheets(4)
wait wind "正在生成圖表中..." nowait
for i=1 to 9
ObjX.Cells(1,i+1).Value=''
ObjX.Cells(2,i).Value=''
ObjX.Cells(3,i).Value=''
endfor
DIMENSION a[2,10]
STORE '14級(jí)' TO a(1,2)
STORE '15級(jí)' TO a(1,3)
STORE '16級(jí)' TO a(1,4)
STORE '前兩屆' TO a(1,5)
STORE '后兩屆' TO a(1,6)
STORE '14+16' TO a(1,7)
STORE '近三屆' TO a(1,8)
STORE '17級(jí)' TO a(1,9)
STORE '18級(jí)' TO a(1,10)
STORE '重點(diǎn)院校率' TO a(2,1)
STORE 0.73770 TO a(2,2)
STORE 0.64615 TO a(2,3)
STORE 0.72500 TO a(2,4)
STORE 0.69193 TO a(2,5)
STORE 0.68558 TO a(2,6)
STORE 0.73135 TO a(2,7)
STORE 0.70388 TO a(2,8)
STORE '' TO a(2,9)
for i=1 to 9
ObjX.Cells(1,i+1).Value=a[1,i+1]
ObjX.Cells(2,i).Value=a[2,i]
endfor
男女生上岸比例按鈕的Click事件代碼為:
ObjX=ThisForm.Olecontrol1.sheets(4)
wait wind "正在生成圖表中..." nowait
for i=1 to 9
ObjX.Cells(1,i+1).Value=''
ObjX.Cells(2,i).Value=''
ObjX.Cells(3,i).Value=''
endfor
DIMENSION a[3,10]
STORE '14級(jí)' TO a(1,2)
STORE '15級(jí)' TO a(1,3)
STORE '16級(jí)' TO a(1,4)
STORE '前兩屆' TO a(1,5)
STORE '后兩屆' TO a(1,6)
STORE '14+16' TO a(1,7)
STORE '近三屆' TO a(1,8)
STORE '17級(jí)' TO a(1,9)
STORE '18級(jí)' TO a(1,10)
STORE '男生上岸比例' TO a(2,1)
STORE 0.33077 TO a(2,2)
STORE 0.37008 TO a(2,3)
STORE 0.49360 TO a(2,4)
STORE 0.35019 TO a(2,5)
STORE 0.43511 TO a(2,6)
STORE 0.41509 TO a(2,7)
STORE 0.40051 TO a(2,8)
STORE '' TO a(2,9)
STORE '女生上岸比例' TO a(3,1)
STORE 0.42857 TO a(3,2)
STORE 0.43902 TO a(3,3)
STORE 0.44828 TO a(3,4)
STORE 0.43373 TO a(3,5)
STORE 0.44286 TO a(3,6)
STORE 0.43662 TO a(3,7)
STORE 0.43750 TO a(3,8)
STORE '' TO a(3,9)
wait wind "正在生成圖表..." nowait
for i=1 to 9
ObjX.Cells(1,i+1).Value=a[1,i+1]
ObjX.Cells(2,i).Value=a[2,i]
ObjX.Cells(3,i).Value=a[3,i]
endfor
9.2 班級(jí)上岸率趨勢(shì)預(yù)測(cè)
新建表單后,另外添加command、Olecontrol控件,并設(shè)置表單的Caption等屬性后對(duì)表單中各個(gè)控件的布局進(jìn)行粗調(diào)和微調(diào),得到的表單如下:
?
十、系統(tǒng)管理
10.1 數(shù)據(jù)環(huán)境
users表用來(lái)存放使用者的用戶名,密碼和用戶類(lèi)型,其表結(jié)構(gòu)為:
字段名 |
類(lèi)型 |
寬度 |
name |
字符型 |
10 |
password |
字符型 |
10 |
type |
字符型 |
10 |
用戶分為管理員,普通用戶,游客三類(lèi)。
其中游客只能在電信學(xué)院考研信息管理系統(tǒng)中進(jìn)行信息瀏覽和信息查詢;普通用戶可以在系統(tǒng)中瀏覽信息,查詢信息,查看考情分析,考研預(yù)測(cè),但不能對(duì)用戶進(jìn)行管理(增加刪除用戶信息);管理員除使用系統(tǒng)響應(yīng)功能外,還可對(duì)用戶進(jìn)行管理。
10.2 登陸系統(tǒng)
系統(tǒng)登陸界面由表單完成設(shè)計(jì),包含兩個(gè)文本框以及確定取消按鈕,文本框輸入用戶的用戶名和密碼后,對(duì)輸入的用戶名和密碼進(jìn)行匹配。如果輸入正確則進(jìn)入系統(tǒng),并執(zhí)行表單mainform。
確定按鈕的 Click 事件的過(guò)程代碼如下:
IF ALLTRIM(thisform.Text1.Value) == ''
MessageBox("請(qǐng)輸入用戶名",0+48,"操作提示")
Thisform.text1.setfocus()
RETURN
ENDIF
IF ALLTRIM(thisform.Text2.Value) == ''
MessageBox("請(qǐng)輸入密碼",0+48,"操作提示")
Thisform.text2.setfocus()
RETURN
ENDIF
SELECT users
UserName=Allt(thisform.text1.value)
UserPwd=Allt(thisform.text2.value)
Locate for(name)=UserName
If Found() == .T. &&如果找到
If Allt(password)==UserPwd &&比較密碼,成功則進(jìn)入
UserType=Allt(type)
Messagebox("歡迎"+UserName+"進(jìn)入本系統(tǒng)",0+48,"提示信息")
Release thisform
Do form mainform
Else &&比較密碼不成功
MessageBox("密碼不正確",0+16, "錯(cuò)誤提示")
Thisform.text2.selstart=0
Thisform.text2.sellength=len(allt(thisform.text2.value))
Thisform.text2.setfocus()
Endif
Else &&沒(méi)有找到指定用戶
MessageBox("你還沒(méi)有使用權(quán)限,請(qǐng)聯(lián)系管理員獲取權(quán)限",0+16, "錯(cuò)誤提示")
Thisform.text1.selstart=0
Thisform.text1.sellength=len(allt(thisform.text1.value))
Thisform.text1.setfocus()
Endif
Form1的load過(guò)程代碼如下:.
thisform.picture="image\sakula.jpg"
10.3?用戶管理
為了完成對(duì)表 users.dbf 的編輯修改,這里設(shè)計(jì)了表單 users.sct,以對(duì)應(yīng)的表users.dbf 為數(shù)據(jù)環(huán)境,完成對(duì)用戶增加和刪除,設(shè)計(jì)的表單如下:
單擊增加命令,執(zhí)行語(yǔ)句do form useraddform,運(yùn)行useraddform表單,增加新的用戶。
Form1的Destory過(guò)程代碼為:
Use database\users excl
Pack
Use
刪除按鈕的 Click 事件的過(guò)程代碼如下:
IF Allt(type)="admin"
Messagebox(Allt(name)+" 是系統(tǒng)管理員,不能刪除!",16,"操作提示")
Return
ENDIF
Mes="確要?jiǎng)h除 "+allt(name)+" 的用戶信息?"
YoN=Messagebox(Mes,1+32+0,"操作提示")
IF YoN=1
Delete
Messagebox("刪除成功,請(qǐng)重新打開(kāi)界面查看",0+64,"操作提示")
Skip
IF EOF()
Go Bottom
ENDIF
Thisform.grdusers.refresh()
ENDIF
Return
?退出按鈕的 Click 事件的過(guò)程代碼如下:
Release thisform
Return
useraddform表單如下:
?其中,確定按鈕的 Click 事件的過(guò)程代碼如下:
IF ALLTRIM(thisform.Text1.Value) == ''
MessageBox("請(qǐng)輸入用戶名",0+48,"操作提示")
Thisform.text1.setfocus()
RETURN
ENDIF
IF ALLTRIM(thisform.Text2.Value) == ''
MessageBox("請(qǐng)輸入密碼",0+48,"操作提示")
Thisform.text2.setfocus()
RETURN
ENDIF
IF ThisForm.Optiongroup1.value=1
Type_='normal'
ELSE
Type_='admin'
ENDIF
Name_=Thisform.Text1.value
Pwd_=Thisform.Text2.value
Insert Into users Value(Name_,Pwd_,Type_)
***如果以下表單未打開(kāi)則出錯(cuò)(錯(cuò)誤號(hào)為1924)
userform.refresh()
Release Thisform
Return
退出按鈕的 Click 事件的過(guò)程代碼如下:
Release Thisform
Return
10.4? 切換賬號(hào)
本系統(tǒng)支持切換賬號(hào)功能,在主界面的系統(tǒng)管理菜單下選擇切換賬號(hào)即可進(jìn)入切換賬號(hào)界面,表單設(shè)計(jì)如下:
登陸按鈕的 Click 事件的過(guò)程代碼如下:
IF ALLTRIM(thisform.Text1.Value) == ''
MessageBox("請(qǐng)輸入用戶名",0+48,"操作提示")
Thisform.text1.setfocus()
RETURN
ENDIF
IF ALLTRIM(thisform.Text2.Value) == ''
MessageBox("請(qǐng)輸入密碼",0+48,"操作提示")
Thisform.text2.setfocus()
RETURN
ENDIF
SELECT users
UserName=Allt(thisform.text1.value)
UserPwd=Allt(thisform.text2.value)
Locate for(name)=UserName
If Found() == .T. &&如果找到
If Allt(password)==UserPwd &&比較密碼,成功則進(jìn)入
UserType=Allt(type)
Messagebox("歡迎"+UserName+"進(jìn)入本系統(tǒng)",0+48,"提示信息")
Release thisform
Else &&比較密碼不成功
MessageBox("密碼不正確",0+16, "錯(cuò)誤提示")
Thisform.text2.selstart=0
Thisform.text2.sellength=len(allt(thisform.text2.value))
Thisform.text2.setfocus()
Endif
Else &&沒(méi)有找到指定用戶
MessageBox("你還沒(méi)有使用權(quán)限,請(qǐng)聯(lián)系管理員獲取權(quán)限",0+16, "錯(cuò)誤提示")
Thisform.text1.selstart=0
Thisform.text1.sellength=len(allt(thisform.text1.value))
Thisform.text1.setfocus()
Endif
退出按鈕的 Click 事件的過(guò)程代碼如下:
clear events
Release thisform
10.5? 修改密碼
???? 用戶還可以通過(guò)系統(tǒng)修改密碼,在主界面的系統(tǒng)管理菜單下選擇修改密碼即可進(jìn)入修改密碼界面,表單設(shè)計(jì)如下:
?確認(rèn)按鈕的 Click 事件的過(guò)程代碼如下:
IF ALLTRIM(thisform.Text2.Value) == ''
MessageBox("請(qǐng)輸入新密碼",0+48,"操作提示")
Thisform.Text2.setfocus()
RETURN
ENDIF
IF ALLTRIM(thisform.Text3.Value) == ''
MessageBox("請(qǐng)?jiān)俅未_認(rèn)密碼",0+48,"操作提示")
Thisform.Text3.setfocus()
RETURN
ENDIF
SELECT users
Pwd=Allt(thisform.text2.value)
Pwd1=Allt(thisform.text3.value)
IF Pwd1=Pwd
Replace password with Pwd1 for Allt(name)=Allt(UserName)
Release Thisform
ELSE
Messagebox("兩次輸入的密碼不一致",0+48+0,"操作提示")
ThisForm.Text2.setfocus()
ENDIF
Return
取消按鈕的 Click 事件的過(guò)程代碼如下:
Release Thisform
Return
Form1的Init過(guò)程代碼為:
Thisform.Text1.Value=UserName
10.6? 退出系統(tǒng)
主表單菜單欄下系統(tǒng)管理的子菜單中退出系統(tǒng)過(guò)程的代碼如下:
YoN=Messagebox("è·?¨í?3??μí3?",1+32+0,"2ù×÷ìáê?")
IF YoN=1
Close All
Clear Events
Quit
ENDIF
十一、主函數(shù)與主菜單設(shè)計(jì)
11.1? 主函數(shù)設(shè)計(jì)
程序?qū)崿F(xiàn)如下:
clear &&清屏
clear all &&釋放所有內(nèi)存變量變量
close all &&關(guān)閉各種類(lèi)型文件
Public UserName,UserType &&全局變量
set talk off &&關(guān)閉程序運(yùn)算的顯示過(guò)程
set safe off &&改寫(xiě)已有文件時(shí)不提示對(duì)話框
set date to ymd &&日期格式為年、月、日
set mark to "/" &&指定日期分隔符
set century on &&年份以四位顯示
***主屏幕不可見(jiàn)
_Screen.visible=.F.
***調(diào)用登錄界面表單
Do Form loginform
***以下語(yǔ)句不能省,該語(yǔ)句為事件循環(huán),若沒(méi)有則程序連編后不能正常運(yùn)行
read events
11.2? 主菜單設(shè)計(jì)
本系統(tǒng)的主菜單包含五個(gè)選項(xiàng),分別是
- 信息瀏覽:主菜單下包含電信14級(jí)學(xué)生信息、電信15級(jí)學(xué)生信息、電信16級(jí)學(xué)生信息表、14級(jí)考研上岸名單、15級(jí)考研上岸名單、16級(jí)考研上岸名單六個(gè)子菜單,點(diǎn)擊時(shí)分別執(zhí)行表單stuform14、stuform15、stuform16、successform14、successform15、successform16進(jìn)而完成對(duì)學(xué)生信息和學(xué)習(xí)考研信息進(jìn)行預(yù)覽,已經(jīng)完成報(bào)表打印;
- 系統(tǒng)管理:主菜單下包含用戶管理、切換賬號(hào)、修改密碼、退出系統(tǒng)四個(gè)子菜單,分別執(zhí)行表單userform、switchform、updateform表單和退出程序過(guò)程(如10.6所示),進(jìn)而完成對(duì)系統(tǒng)用戶的管理。
- 考研預(yù)測(cè):執(zhí)行命令do form excelgragh,從而打開(kāi)excelgragh表單,對(duì)考研預(yù)測(cè)的信息進(jìn)行預(yù)覽;
- 考研分析:主菜單下包含男女生比例、錄取學(xué)校分布、班級(jí)上岸比例三個(gè)子菜單,點(diǎn)擊時(shí)分別執(zhí)行表單sexratio、lqxxfb、bjbl進(jìn)而完成對(duì)男女生比例,錄取學(xué)校分布,班級(jí)上岸比例信息的查詢和預(yù)覽;
- 信息查詢:主菜單下包含往屆生信息精確查詢、往屆生信息模糊查詢兩個(gè)子菜單,點(diǎn)擊時(shí)分別執(zhí)行表單jqcx、mhcx進(jìn)而完成對(duì)考研信息的查詢;
十二、總結(jié)與評(píng)價(jià)改進(jìn)
菜單的具體結(jié)構(gòu)如下:
????????綜上所述,該系統(tǒng)通過(guò)項(xiàng)目管理器的連編,將各個(gè)管理模塊綜合在一起生成可執(zhí)行文件, 以主菜單為基礎(chǔ),可通過(guò)交互方式完成電信學(xué)院考研信息的管理。
????????總體而言,該系統(tǒng)綜合運(yùn)用數(shù)據(jù)庫(kù)、自由表、表單、報(bào)表、菜單和程序設(shè)計(jì),有效的完成電信學(xué)院考研信息管理系統(tǒng)的基本功能,同時(shí)該系統(tǒng)操作流程較為簡(jiǎn)單,用戶容易操作, 提高了信息瀏覽的效率,可利用設(shè)計(jì)的報(bào)表完成信息的打印,還能通過(guò)三年的考研數(shù)據(jù)對(duì)考研趨勢(shì)進(jìn)行預(yù)測(cè),從而極大程度上讓用戶了解電信學(xué)院考研信息。
該系統(tǒng)的運(yùn)行界面如下:
最后我們從系統(tǒng)開(kāi)銷(xiāo)、是否能動(dòng)態(tài)變化、圖類(lèi)豐富程度、 打印方法等方面比較了四種繪圖方法。
十三、參考文獻(xiàn)
[1]李敏軍.VFP環(huán)境下動(dòng)態(tài)統(tǒng)計(jì)圖的實(shí)現(xiàn)[J].福建電腦,2005(09):142-143.
[2]趙月愛(ài),趙忠孝.在VFP中設(shè)計(jì)和實(shí)現(xiàn)統(tǒng)計(jì)圖表功能的兩種方法[J].計(jì)算機(jī)工程與設(shè)計(jì),2004(04):533-535.文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-444771.html
[3]衡紅軍,樊瑋.VFP環(huán)境下統(tǒng)計(jì)圖繪制方法研究[J].計(jì)算機(jī)應(yīng)用,2001(08)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-444771.html
到了這里,關(guān)于【數(shù)據(jù)庫(kù)技術(shù)課程設(shè)計(jì)】 電信學(xué)院考研信息管理系統(tǒng) +【Visual FoxPro】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!