vf课程设计学籍管理系统.docx
《vf课程设计学籍管理系统.docx》由会员分享,可在线阅读,更多相关《vf课程设计学籍管理系统.docx(18页珍藏版)》请在冰豆网上搜索。
vf课程设计学籍管理系统
综合项目2(学籍管理系统
项目10:
vf学籍管理系统的开发实例
一、需求分析
随着学校规模不断扩大,学生的数量急剧增加,有关学生的各种信息量也成倍增加。
面对庞大的信息量,需要有学生管理系统来提高学校管理人员的工作效率。
通过这样的系统,可以做到信息的规范管理,科学统计和快速的查询,从而减少管理方面的工作量,由于大学生类别和专业的设置的多样化,大学生的学籍管理历来是非常繁琐和复杂的工作,不仅需要多配置管理人员,而且在数据处理的准确性、时效性、安全性等方面均存在许多问题,使得人工管理几乎无法实现。
这种情况下,用计算机进行管理变得尤为的必要,这可以发挥计算机的优势,利用计算机来进行学籍管理,无疑大大减轻了工作人员的工作量和减少人为的错误。
因此我们选用了微软公司的VisualFoxPro6.0作为软件平台,并用它来实现学籍管理系统中的各项功能。
二、数据来源
我们以某学校为例。
学生情况登记表:
学号、姓名、性别、出生日期、是否团员、电话、总成绩
0001、谭彦、女、1983.5.21、是、58253761、453
0002、应华、女、1983.10.12、是、58263537、425
0003、崔玫、女、1980.2.22、是、58354321、490
0004、季平、男、1981.3.19、.是、58134217、510
老师情况登记表
编号、姓名、性别、学历、职称、联系方式、
20040001、张华、男、大学、58330330
20040002、程城、女、大学、58266238
20040003、马东、男、大学、58288368
课程情况登记表
课程号、课程名、学期、学分、教师所在系
2004、0010、计算机基础知识一5
2004、0012、高数二、6
2004、0052、英语三、5
2004、1200、数据库应用四、3
三、系统的具体功能
(1设计要求
系统开发的总体任务是实现学生信息关系的系统化、规范化和自动化。
设计要求分析显示在系统开发的总体任务的基础上完成的。
本例中的学生学籍管理系统的设计要求主要有:
有关学籍等信息的输入,包括输入学生基本信息、所在班级、所学课程和成绩等。
学生信息的查询,包括查询学生的基本信息、所在班级、已学课程和成绩等。
学生信息的修改。
学校基本课程信息的输入
基本课程信息的修改。
学生课程的设置和修改。
学生成绩信息的输入、修改、查询。
学生成绩信息的统计。
本例根据学生信息表和课程基本信息表、教师信息表等输入单据中归纳出包括2个表的数据库,现将这些列出如下:
(1学生表:
xs(学号,姓名,性别,出生日期,是否团员,电话,通信地址,邮编,总成绩,备注
(2课程表:
kc(课程号,课程名,学期,学分,教师,所在系
(3教师表:
js(编号,姓名,性别,学历,职称,所授课程,联系方式,备注
六、应用程序的设计
该系统的最终用户应该是学校的学籍管理工作人员,这是一群具有相当计算机应用知识的用户,他们应该可以很熟练的使用本系统,而且该系统的使用率也会提高,它将完成学生信息的录入、存储、修改的相关查询、汇总工作、从而将大大提高学生工作信息管理的效率。
学生学籍管理系统的具体设计如下:
1、学生学籍管理系统主程序(A:
\main.prg
功能:
提供程序的主界面和进入系统各功能模块的接口,包括一个自右向左滚动的飞字程序。
源程序:
settalkoff&&关闭人机对话
setescapeoff&&设置ESC脱离键不起作用,即误按该键不会终止程序的执行clearall&&清屏
setcoloto0/7,7/0&&设置VFP系统的默认颜色
clear&&清屏
@4,42clearto30,92
setcoloto7+/0+&&从第4行第42列到第30行第92列产生白字黑底的色块
@4,42clearto30,92&&显示色块
@3,40clearto29,90
setcoloto7+/4&&从第3行第40列到第29行第90列产生白字黑底的色块
@3,40clearto29,90&&显示色块
@4,42,28,88boxspace(9&&从左上角第4行第42列到右下角第28行88列产生线框
@7,52say'==学生学籍管理系统=='&&在第7行第52列显示学生学籍管理系统的字样
@8,50say'-------------------------------'&&在第8行第50列显示分隔线条
@9,57say'==1.录入数据=='&&在第9行第57列显示1.录入数据字样
@11,57say'==2.修改数据=='&&在第11行第57列显示2.修改数据字样
@13,57say'==3.查询数据=='&&在第13行第57列显示3.查询数据字样
@15,57say'==4.统计数据=='&&在第15行第57列显示4.统计数据字样
@17,57say'==5.显示数据=='&&在第17行第57列显示5.打印数据字样
@19,57say'==6.删除数据=='&&在第19行第57列显示6.退出数据字样
@21,57say'==7.退出=='&&在第21行第57列显示7.退出字样x=1&&设初值x=1
b1="◆欢迎您使用学生学籍管理系统&&将字符串赋给变量b1
dowhile.t.&&当条件成立时计算机做下面的语句hz1=substr(b1,x,29&&取字符串b1从第1个字符到第29个字符赋给变
量hz1
@25,51sayhz1&&在第25行第51列显示字符串hz1
bb=inkey(0.6&&将等待0.6秒击键的inkey函数赋给bb
ifbb<>0&&变量bb不等于0,即有击键动作发生exit&&那么,不显示字符串
endi&&与if条件判断语句相配对
x=x+2&&将变量x的值加2赋给x
ifx>83&&如果变量x大于83个字符
x=1&&那么,将1赋给变量x,即从头开始显示字符串
endi&&与if条件判断语句相配对
endd&&与dowhile循环语句相配对
@27,51say'请选择1--7:
'&&在第27行51列显示请选择1-7:
的字样
wait''tok&&计算机等待用户从键盘输入一个字符给变量kdocase&&做选择语句
casek='1'&&当变量k的值等于1时
doa:
\input&&计算机跳转到a:
\input子程序
casek='2'&&当变量k的值等于2时
doa:
\modify&&计算机跳转到a:
\modify子程序
casek='3'&&当变量k的值等于3时
doa:
\search&&计算机跳转到a:
\search子程序
casek='4'&&当变量k的值等于4时
doa:
\total&&计算机跳转到a:
\total子程序
casek='5'&&当变量k的值等于5时
doa:
\dp&&计算机跳转到a:
\dp子程序
casek='6'&&当变量k的值等于6时
doa:
\del&&计算机跳转到a:
\del子程序
casek='7'&&当变量k的值等于7时
setcoloto0/7,7/0&&设置VFP系统的默认颜色
clear&&清屏
retu&&返回VFP主程序
endcase&&与docase选择语句相配对
setdecimalsto2
setfdowto1
setfweekto1
setmarkto….‟
Setseparatorto….”
Setpointto….‟
2、录入模块子程序(A:
\input.prg
功能:
提供卡片式的录入数据界面。
源程序:
settalkoff
usea:
\xj&&打开a:
\xj.dbf数据库文件
gobott&&将记录指针移到数据库的末尾
skip&&跳到下一条记录
hk=recn(&&将当前记录号赋给变量hk
hk1=str(hk,3&&将变量hk值的前三位,由数值转换为字符串赋给c1=.t.&&将逻辑型变量“真”赋给变量c1
dowhilec1&&当条件成立时计算机做下面的语句
a1=spac(2&&将2个空格赋给变量a1
a2=spac(6&&将6个空格赋给变量a2
a3=spac(2&&将2个空格赋给变量a3
a4=spac(8&&将8个空格赋给变量a4
a5=spac(2&&将2个空格赋给a5
a6=spac(8&&将8个空格赋给a6
a7=spac(30&&将30个空格赋给a7
a8=spac(6&&将6个空格赋给a8
a9=spac(6&&将6个空格赋给a9
a10=spac(50&&将50个空格赋给a10
kk=.t.&&将逻辑型变量“真”赋给变量kk
dowhilekk&&当条件成立时计算机做下面的语句
clea&&清屏
@1,5say"输入第"+hk1+"张卡片"&&在第1行第5列显示输入第"+hk1+"张卡片的字样,其中,hk1为宏替换
hk=hk+1&&变量hk的值增1
hk1=str(hk,3&&将变量hk的值取3位赋给hk1
@row(+1,5say"学号:
"geta1&&在当前行的下一行第5列显示学号字样
@row(,40say"姓名:
"geta2&&在当前行第40列显示姓名字样
@row(+1,5say"性别:
"geta3&&在当前行的下一行第5列显示性别字样
@row(+1,5say"出生年月(MM/DD/YY:
"geta4&&在当前行的下一行第5列显示出生年月字样
@row(+1,40say"是否团员:
"geta5&&在当前行的下一行第5列显示是否团员字样
@row(+1,5say"电话:
"geta6&&在当前行的下一行第5列显示电话字样
@row(+1,40say"通信地址:
"geta7&&在当前行的下一行第5列显示通信地址字样
@row(+1,5say"邮编:
"geta8&&在当前行的下一行第5列显示邮编字样
@row(+1,5say"总成绩:
"geta9&&在当前行第40列显示是否总成绩字样
@row(+1,5say"备注:
"geta10&&在当前行的下一行第5列显示备注字样
read&&将键盘所输内容读入内存
y="y"&&将字符y赋给变量y
@12,5say"输入正确吗?
(Y/N"gety&&在第12行第5列显示输入正确吗字样
read&&并将输入的y或n读入内存
ify="Y".or.y="y"&&如果变量y值为大写的Y或小写的ykk=.f.&&那么,将逻辑否赋给变量kk
endif&&与if相配对
enddo&&与dowhile相配对
appeblan&&添加新记录到空白记录
replace学号witha1,姓名witha2,性别witha3,出生年月withctod(a4,是否团员witha5
replace电话withval(a6,通信地址withval(a7,邮编withval(a8,总成绩witha9,备注witha10&&替换键盘输入的内容到相应的字段中
y=""&&将一空格赋给变量y
clea
@14,5say"继续输入吗?
(y/n"gety&&在第14行第5列显示继续输入吗字样
read&&并将输入的y或n读入内存ify="N".or.y="n"&&如果变量y值为大写的N或小写的n
kk=.f.&&那么,将逻辑否赋给变量kk
exit&&退出输入界面
endif&&与if相配对
enddo&&与dowhile相配对
clear&&清屏
doa:
\main&&运行A:
\main.prg主程序(2、修改模块子程序(A:
\modify.prg
功能:
提供卡片式的修改数据的功能。
源程序:
settalkoff
setdelimiteroff
usea:
\xj&&打开数据库文件A:
\xj.dbf
kk=.t.
dowhilekk
clear
gotop
yy=space(2
@4,20say"请输入学号"getyy
read
locaallfor学号=yy
ifeof(
@5,5say""
wait"该记录不存在!
请按任意键返回!
"
y="y"
clea
@6,5say"继续修改吗?
(Y/N"gety
read
ify="Y".or.y="y"
loop
endi
clea
doa:
\main
retu
endi
clea
kk=.t.
dowhilekk
clear
@row(+1,1say"学号:
"get学号
@row(,40say"姓名:
"get姓名
@row(+1,1say"性别:
"get性别
@row(+1,1say"出生年月:
"get出生年月
@row(,60say"是否团员:
"get是否团员
@row(+1,1say"电话:
"get电话
@row(+1,25say"通信地址:
"get通信地址
@row(,25say""邮编:
"get邮编
@row(+1,1say"总成绩:
"get总成绩
@row(,60say"备注(双击文本框输入内容:
"get备注
y=""
@9,15say"修改正确吗?
(Y/N"gety
read
ify="y".or.y="Y"
kk=.f.
else
loop
endi
enddo
clear
y=""
@5,15say"继续修改吗?
(Y/N"gety
read
ify="n".or.y="N"
kk=.f.
endif
enddo
clea
doa:
\main
(3、查询模块子程序(A:
\search.prg
功能:
提供按学号检索、按姓名检索、按学号和姓名检索和按学号、姓名、性别检索三个子模块的查询数据功能。
表单上的按钮功能包括:
输入查询条件、查询、显示查询条件、清除查询条件、打印预览、打印和放弃。
起初,除输入查询条件、显示查询条件和放弃外按钮均是不能选择的。
当单击“输入查询条件”按钮时,表单元上的字段均为空,用户可以输入任意知道的条件做为查询条件,这些条件均是“与”的关系。
这时,按钮也可以被选择了,若单击查询,查询结果就显示在表单的逐条浏览页上,同时,在该页上还显示了共查询到几条记录及可用移动记录按钮逐条查看记录。
显示查询条件按钮可以查看本次查询输入的条件;清除查询条件按钮可以清除本次查询的条件以备下一次查询;打印按钮将本次查询结果输出到打印机;放弃按钮则放弃本次查询并释放本表单元。
为了方便查看,还可以在表单的浏览佤页中一次查看到全部查询到的记录;并能在浏览字段设定页中设定佤浏览时该字段的显示与否。
源程序:
settalkoff
setdelimiteroff
setsafetyoff&&重建索引时不提示覆盖
usea:
\xj
indeon学号toa:
\xh&&按学号建立索引文件xh.idx
indeon学号+姓名toa:
\xhxm&&按学号和姓名建立索引文件xhxm.idxindeon姓名toa:
\xm&&按姓名建立索引文件xm.idx
stor.t.toc
dowhilec
text
检索功能表
0---退出检索系统
1---按学号检索
2---按姓名检索
3---按学号和姓名检索
4---按学号、姓名、性别检索
endt
dd=1
@row(+1,17say"请输入功能号"getddpict"9"rang0,4
read
docase
casedd=0
clear
doa:
\main
retu
casedd=1
clear
n1=spac(2
@4,20say"请输入学号"getn1
read
usea:
\xjindea:
\xh&&打开数据库文件xj.dbf并打开按学号建立的索引文件xh.idx
find&n1&&查找字符串n1,&为宏替换
casedd=2
Clear
n2=spac(6
@4,10say"请输入姓名"getn2
read
usea:
\xjindea:
\xm
find&n2
casedd=3
clear
n1=spac(2
n2=spac(6
@4,10say"请输入学号"getn1
@5,10say"请输入姓名"getn2
read
usea:
\xjindea:
\xhxm
n4=n1+n2
find&n4
casedd=4
clear
n1=spac(2
n2=spac(6
n3=spac(2
@3,10say"请输入学号:
"getn1
@4,10say"姓名:
"getn2
@5,10say"性别:
"getn3
read
locafor学号=n1.and.姓名=n2.and.性别=n3&&查找条件是学号为n1并且姓名为n2并且性别为n3的记录
other
retu
Endc
ifeof(&&如果已到文件尾
clear
wait'对不起!
没找到。
请按任意键返回!
'
loop
endif
cc=.t.
y=""
dowhilecc
setdevitoscre&&设置屏幕显示字符
clea
@row(,5say"学号:
"+学号
@row(,40say"姓名:
"+姓名
@row(+1,5say"性别:
"+性别
@row(+1,5say"出生年月:
"+dtoc(出生年月
@row(+1,40say"是否团员:
"+是否团员
@row(+1,5say"电话:
"+电话
@row(,40say"通信地址:
"+通信地址
@row(+1,5say"邮编:
"+邮编
@row(+1,5say"总成绩:
"+总成绩
@row(+1,5say"备注:
"+备注
@20,20say"不继续查找打N,否则打任一键"gety
read
ify="N".or.y="n"
clear
stor.f.tocc
loop
else
Endif
if.not.eof(
loop
Endif
stor.f.tocc
Enddo
stor.f.toc
Enddo
use
doa:
\main
(4、统计模块子程序(A:
\total.prg
功能:
提供统计人数、平均成绩和党员人数的功能。
源程序:
settalkoff
usea:
dd=0
stor.t.toc
dowhilec
clear
text
统计功能表
0---退出统计系统
1---统计人数
2---统计平均成绩
3---统计党员人数
endt
dd=1
@row(+1,17say"请输入功能号"getddpict"9"rang0,3
read
docase
casedd=0
clear
doa:
casedd=1
clear
countoaa&&计算记录数并把值赋给aa
@4,20say"总人数:
"
?
?
aa&&显示变量aa的值
a=''
@7,20say"按任意键返回!
"
read
ifa=''
loop
endi
casedd=2
clear
aver总成绩toaa&&对总成绩求平均并把平均值分别赋给变量aa@4,20say"求总成绩平均成绩为:
"
?
?
aa
a=''@9,20say"按任意键返回!
"readifa=''loopendicasedd=3clearcounfor是否团员="是"toaa&&统计党员数,并把值赋给aa@4,20say"团员人数为:
"?
?
aaa=''@9,20say"按任意键返回!
"readifa=''loopendiendcreturnendd5,显示模块子程序(A:
\dp.prg功能:
提供卡片式的显示记录的功能.源程序:
settalkoffsetdevitoscreusea:
\xjkk=.t.dowhilekkcleahk=recn(hk1=str(hk,3@row(,5say"您现在浏览的是第"+hk1+"张卡片"@row(+1,5say"学号:
"+学号@row(+1,5say"姓名:
"+姓名@row(+1,5say"性别:
"+性别@row(+1,5say"出生年月:
"+dtoc(出生年月@row(,40say"是否团员:
"+是否团员@row(+1,5say"电话:
"+电话@row(+1,40say"通信地址:
"+通信地址@row(+1,5say"邮编:
"+邮编@row(+1,5say"总成绩:
"+总成绩@row(+1,5say"备注:
"+备注wait'请按n键浏览下一条记录,按l键浏览上一条记录,按y键返回主程序!
'tokdocase
casek='n'ifeof(&&如果已到文件尾gotop&&将文件记录指针移到文件记录的首记录elseskip&&否则,跳到下一条记录endihk=hk+1casek='l'ifbof(&&如果已到文件开头gobott&&将文件记录指针移到文件记录的最后一条记录elseskip-1&&否则,跳到上一条记录endihk=hk-1casek='y'cleardoa:
\mainkk=.f.endcendd6,删除模块子程序(A:
\del.prg功能:
提供逻辑与物理删除的功能.源程序:
settalkoffsetdevitoscreusea:
\xjyy=""yn=""de=spac(2clear@4,20say"请输入要删除记录的学号"getdereadlocaallfor学号=deifeof(wait"查无此卡片!
击回车键退出!
"cleardoa:
\xjretuendiif.not.eof(cleahk=recn(hk1=str(hk,3@row(,5say"您现在浏览的是第"+hk1+"张卡片"@row(+1,5say"学号:
"+学号
@row(+1,5say"姓名:
"+姓名@row(+1,5say"性别:
"+性别@row(+1,5say"出生年月:
"+dtoc(出生年月@row(,40say"是否团员:
"+是否团员@row(+1,5say"电话:
"+电话@row(,40say"通信地址:
"+通信地址@row(+1,5say"邮编:
"+邮编@row(+1,5say"总成绩:
"+总成绩@row(+1,5say"备注:
"+备注endif@13,20say"是这个记录吗?
(Y/N"getynreadifyn="n".or.yn="N"cleadoa:
\xjr