需要VF做学生管理系统的课程设计,谁能帮帮忙发给我吗?我邮箱

简单一点,要有程序,可以运行,[email protected] 万分感谢,感谢

综合项目2(学籍管理系统)

项目10:vf 学籍管理系统的开发实例

一、需求分析
随着学校规模不断扩大,学生的数量急剧增加,有关学生的各种信息量也成倍增加。面对庞大的信息量,需要有学生管理系统来提高学校管理人员的工作效率。通过这样的系统,可以做到信息的规范管理,科学统计和快速的查询,从而减少管理方面的工作量,由于大学生类别和专业的设置的多样化,大学生的学籍管理历来是非常繁琐和复杂的工作,不仅需要多配置管理人员,而且在数据处理的准确性、时效性、安全性等方面均存在许多问题,使得人工管理几乎无法实现。这种情况下,用计算机进行管理变得尤为的必要,这可以发挥计算机的优势,利用计算机来进行学籍管理,无疑大大减轻了工作人员的工作量和减少人为的错误。 因此我们选用了微软公司的Visual FoxPro 6.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)
功能:提供程序的主界面和进入系统各功能模块的接口,包括一个自右向左滚动的飞字程序。
源程序:
set talk off &&关闭人机对话
set escape off &&设置ESC脱离键不起作用,即误按该键不会终止程序的执行
clear all &&清屏
set colo to 0/7,7/0 &&设置VFP系统的默认颜色
clear &&清屏
@4,42 clear to 30,92
set colo to 7+/0+ &&从第4行第42列到第30行第92列产生白字黑底的色块
@4,42 clear to 30,92 &&显示色块
@3,40 clear to 29,90
set colo to 7+/4 &&从第3行第40列到第29行第90列产生白字黑底的色块
@3,40 clear to 29,90 &&显示色块
@4,42,28,88 box space(9) &&从左上角第4行第42列到右下角第28行88列产生线框
@7,52 say'==学生学籍管理系统==' &&在第7行第52列显示学生学籍管理系统的字样
@8,50 say'-------------------------------' &&在第8行第50列显示分隔线条
@9,57 say'==1.录入数据==' &&在第9行第57列显示1.录入数据字样
@11,57 say'==2.修改数据==' &&在第11行第57列显示2.修改数据字样
@13,57 say'==3.查询数据==' &&在第13行第57列显示3.查询数据字样
@15,57 say'==4.统计数据==' &&在第15行第57列显示4.统计数据字样
@17,57 say'==5.显示数据==' &&在第17行第57列显示5.打印数据字样
@19,57 say'==6.删除数据==' & &在第19行第57列显示6.退出数据字样
@21,57 say'==7.退 出==' &&在第21行第57列显示7.退出字样
x=1 &&设初值x=1
b1="◆欢迎您使用学生学籍管理系统 &&将字符串赋给变量b1
do while.t. &&当条件成立时计算机做下面的语句
hz1=substr(b1,x,29) &&取字符串b1从第1个字符到第29个字符赋给变
量hz1
@25,51 say hz1 &&在第25行第51列显示字符串hz1
bb=inkey(0.6) &&将等待0.6秒击键的inkey 函数赋给bb
if bb<>0 &&变量bb不等于0,即有击键动作发生
exit &&那么,不显示字符串
endi &&与if条件判断语句相配对
x=x+2 &&将变量x的值加2赋给x
if x>83 &&如果变量x大于83个字符
x=1 &&那么,将1赋给变量x,即从头开始显示字符串
endi &&与if条件判断语句相配对
endd &&与do while循环语句相配对
@27,51 say'请选择1--7:' &&在第27行51列显示请选择1-7:的字样
wait ' ' to k &&计算机等待用户从键盘输入一个字符给变量k
do case &&做选择语句
case k='1' &&当变量k的值等于1时
do a:\input &&计算机跳转到a:\input子程序
case k='2' &&当变量k的值等于2时
do a:\modify &&计算机跳转到a:\modify子程序
case k='3' &&当变量k的值等于3时
do a:\search &&计算机跳转到a:\search子程序
case k='4' &&当变量k的值等于4时
do a:\total &&计算机跳转到a:\total子程序
case k='5' &&当变量k的值等于5时
do a:\dp &&计算机跳转到a:\dp子程序
case k='6' &&当变量k的值等于6时
do a:\del &&计算机跳转到a:\del子程序
case k='7' &&当变量k的值等于7时
set colo to 0/7,7/0 &&设置VFP系统的默认颜色
clear &&清屏
retu &&返回VFP主程序
endcase &&与do case选择语句相配对
set decimals to 2
set fdow to1
set fweek to 1
set mark to ‘.’
Set separator to ‘.”
Set point to ‘.’

2、录入模块子程序(A:\input.prg)
功能:提供卡片式的录入数据界面。
源程序:set talk off
use a:\xj &&打开a:\xj.dbf数据库文件
go bott &&将记录指针移到数据库的末尾
skip &&跳到下一条记录
hk=recn() &&将当前记录号赋给变量hk
hk1=str(hk,3) &&将变量hk值的前三位,由数值转换为字符串赋给c1=.t. &&将逻辑型变量“真”赋给变量c1
do while c1 &&当条件成立时计算机做下面的语句
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
do while kk &&当条件成立时计算机做下面的语句
clea &&清屏
@1,5 say"输入第"+hk1+"张卡片" &&在第1行第5列显示输入第"+hk1+"张卡片的字样,其中,hk1为宏替换
hk=hk+1 &&变量hk的值增1
hk1=str(hk,3) &&将变量hk的值取3位赋给hk1
@row()+1,5 say"学号:"get a1 &&在当前行的下一行第5列显示学号字样
@row(),40 say"姓名:"get a2 &&在当前行第40列显示姓名字样
@row()+1,5 say"性别:"get a3 &&在当前行的下一行第5列显示性别字样
@row()+1,5 say"出生年月(MM/DD/YY):"get a4 &&在当前行的下一行第5列显示出生年月字样
@row()+1,40 say"是否团员:"get a5 &&在当前行的下一行第5列显示是否团员字样
@row()+1,5 say"电话:"get a6 &&在当前行的下一行第5列显示电话字样
@row()+1,40 say"通信地址:"get a7 &&在当前行的下一行第5列显示通信地址字样
@row()+1,5 say"邮编 :"get a8 &&在当前行的下一行第5列显示邮编字样
@row()+1,5 say"总成绩:"get a9 &&在当前行第40列显示是否总成绩字样
@row()+1,5 say"备注:"get a10 &&在当前行的下一行第5列显示备注字样
read &&将键盘所输内容读入内存
y="y" &&将字符y赋给变量y
@12,5 say"输入正确吗?(Y/N)"get y &&在第12行第5列显示输入正确吗字样
read &&并将输入的y或n读入内存
if y="Y".or.y="y" &&如果变量y值为大写的Y或小写的y
kk=.f. &&那么,将逻辑否赋给变量kk
endif &&与if 相配对
enddo &&与do while相配对
appe blan &&添加新记录到空白记录
replace 学号 with a1,姓名 with a2,性别 with a3,出生年月 with ctod(a4),是否团员 with a5
replace 电话 with val(a6),通信地址 with val(a7),邮编 with val(a8),总成绩 with a9,备注with a10 &&替换键盘输入的内容到相应的字段中
y=" " &&将一空格赋给变量y
clea
@14,5 say"继续输入吗?(y/n)"get y &&在第14行第5列显示继续输入吗字样
read &&并将输入的y或n读入内存
if y="N".or.y="n" &&如果变量y值为大写的N或小写的n
kk=.f. &&那么,将逻辑否赋给变量kk
exit &&退出输入界面
endif &&与if相配对
enddo &&与do while相配对
clear &&清屏
do a:\main &&运行A:\main.prg主程序

(2)、修改模块子程序(A:\modify.prg)

功能:提供卡片式的修改数据的功能。
源程序:set talk off
set delimiter off
use a:\xj &&打开数据库文件A:\xj.dbf
kk=.t.
do while kk
clear
go top
yy=space(2)
@4,20 say"请输入学号" get yy
read
loca all for 学号=yy
if eof()
@5,5 say" "
wait"该记录不存在!请按任意键返回!"
y="y"
clea
@6,5 say"继续修改吗?(Y/N)" get y
read
if y="Y".or.y="y"
loop
endi
clea
do a:\main
retu
endi
clea
kk=.t.
do while kk
clear
@row()+1,1 say"学号:" get 学号
@row(),40 say"姓名:" get 姓名
@row()+1,1 say"性别:" get 性别
@row()+1,1 say "出生年月:" get 出生年月
@row(),60 say"是否团员:" get 是否团员
@row()+1,1 say"电话:" get 电话
@row()+1,25 say"通信地址:" get 通信地址
@row(),25 say""邮编:" get 邮编
@row()+1,1 say"总成绩:" get 总成绩
@row(),60 say"备注(双击文本框输入内容):" get 备注
read
y=" "
@9,15 say"修改正确吗?(Y/N)" get y
read
if y="y".or.y="Y"
kk=.f.
else
loop
endi
enddo
clear
y=""
@5,15 say"继续修改吗?(Y/N)" get y
read
if y="n".or.y="N"
kk=.f.
endif
enddo
clea
do a:\main

(3)、查询模块子程序(A:\search.prg)
功能:提供按学号检索、按姓名检索、按学号和姓名检索和按学号、姓名、性别检索三个子模块的查询数据功能。
表单上的按钮功能包括:输入查询条件、查询、显示查询条件、清除查询条件、打印预览、打印和放弃。起初,除输入查询条件、显示查询条件和放弃外按钮均是不能选择的。当单击“输入查询条件”按钮时,表单元上的字段均为空,用户可以输入任意知道的条件做为查询条件,这些条件均是“与”的关系。这时,按钮也可以被选择了,若单击查询,查询结果就显示在表单的逐条浏览页上,同时,在该页上还显示了共查询到几条记录及可用移动记录按钮逐条查看记录。
显示查询条件按钮可以查看本次查询输入的条件;清除查询条件按钮可以清除本次查询的条件以备下一次查询;打印按钮将本次查询结果输出到打印机;放弃按钮则放弃本次查询并释放本表单元。
为了方便查看,还可以在表单的浏览佤页中一次查看到全部查询到的记录;并能在浏览字段设定页中设定佤浏览时该字段的显示与否。
源程序:set talk off
set delimiter off
set safety off &&重建索引时不提示覆盖
use a:\xj
inde on 学号 to a:\xh &&按学号建立索引文件xh.idx
inde on 学号+姓名 to a:\xhxm &&按学号和姓名建立索引文件xhxm.idx
inde on 姓名 to a:\xm &&按姓名建立索引文件xm.idx
stor.t.to c
do while c
clear
text
检索功能表
0---退出检索系统
1---按学号检索
2---按姓名检索
3---按学号和姓名检索
4---按学号、姓名、性别检索
endt
dd=1
@row()+1,17 say"请输入功能号" get dd pict "9" rang 0,4
read
do case
case dd=0
clear
do a:\main
retu
case dd=1
clear
n1=spac(2)
@4,20 say"请输入学号" get n1
read
use a:\xj inde a:\xh &&打开数据库文件xj.dbf并打开按学号建立的索引文件xh.idx
find &n1 &&查找字符串n1,&为宏替换
case dd=2
Clear
n2=spac(6)
@4,10 say"请输入姓名" get n2
read
use a:\xj inde a:\xm
find &n2
case dd=3
clear
n1=spac(2)
n2=spac(6)
@4,10 say"请输入学号" get n1
@5,10 say"请输入姓名" get n2
read
use a:\xj inde a:\xhxm
n4=n1+n2
find &n4
case dd=4
clear
n1=spac(2)
n2=spac(6)
n3=spac(2)
@3,10 say"请输入学号:" get n1
@4,10 say"姓名:" get n2
@5,10 say"性别:" get n3
read
loca for 学号=n1.and.姓名=n2.and.性别=n3 &&查找条件是学号为n1并且姓名为n2并且性别为n3的记录
other
retu
Endc
if eof() &&如果已到文件尾
clear
wait'对不起!没找到。请按任意键返回!'
loop
endif
cc=.t.
y=" "
do while cc
set devi to scre &&设置屏幕显示字符
clea
@row(),5 say"学号:"+学号
@row(),40 say"姓名:"+姓名
@row()+1,5 say"性别:"+性别
@row()+1,5 say"出生年月:"+dtoc(出生年月)
@row()+1,40 say"是否团员:"+是否团员
@row()+1,5 say"电话:"+电话
@row(),40 say"通信地址:"+通信地址
@row()+1,5 say"邮编:"+邮编
@row()+1,5 say"总成绩:"+总成绩
@row()+1,5 say"备注:"+备注
@20,20 say"不继续查找打N,否则打任一键" get y
read
if y="N".or.y="n"
clear
stor.f.to cc
loop
else
Endif
if.not.eof()
loop
Endif
stor.f.to cc
Enddo
stor.f.to c
Enddo
use
do a:\main

(4)、统计模块子程序(A:\total.prg)
功能:提供统计人数、平均成绩和党员人数的功能。
源程序:set talk off
use a:
dd=0
stor.t.to c
do while c
clear
text
统计功能表
0---退出统计系统
1---统计人数
2---统计平均成绩
3---统计党员人数
endt
dd=1
@row()+1,17 say"请输入功能号" get dd pict "9" rang 0,3
read
do case
case dd=0
clear
do a:
case dd=1
clear
coun to aa &&计算记录数并把值赋给aa
@4,20 say"总人数:"
??aa &&显示变量aa的值
a=' '
@7,20 say"按任意键返回!"
read
if a=''
loop
endi
case dd=2
clear
aver 总成绩 to aa &&对总成绩求平均并把平均值分别赋给变量aa
@4,20 say"求总成绩平均成绩为:"
??aa
a=' '
@9,20 say"按任意键返回!"
read
if a=''
loop
endi
case dd=3
clear
coun for 是否团员="是" to aa &&统计党员数,并把值赋给aa
@4,20 say"团员人数为:"
??aa
a=' '
@9,20 say"按任意键返回!"
read
if a=''
loop
endi
endc
return
endd
5、显示模块子程序(A:\dp.prg)
功能:提供卡片式的显示记录的功能。
源程序:set talk off
set devi to scre
use a:\xj
kk=.t.
do while kk
clea
hk=recn()
hk1=str(hk,3)
@row(),5 say"您现在浏览的是第"+hk1+"张卡片"
@row()+1,5 say"学号:"+学号
@row()+1,5 say"姓名:"+姓名
@row()+1,5 say"性别:"+性别
@row()+1,5 say"出生年月:"+dtoc(出生年月)
@row(),40 say"是否团员:"+是否团员
@row()+1,5 say"电话:"+电话
@row()+1,40 say"通信地址:"+通信地址
@row()+1,5 say"邮编:"+邮编
@row()+1,5 say"总成绩:"+总成绩
@row()+1,5 say"备注:"+备注
wait '请按n键浏览下一条记录,按l键浏览上一条记录,按y键返回主程序!' to k
do case
case k='n'
if eof() &&如果已到文件尾
go top &&将文件记录指针移到文件记录的首记录
else
skip &&否则,跳到下一条记录
endi
hk=hk+1
case k='l'
if bof() &&如果已到文件开头
go bott &&将文件记录指针移到文件记录的最后一条记录
else
skip -1 &&否则,跳到上一条记录
endi
hk=hk-1
case k='y'
clear
do a:\main
kk=.f.
endc
endd
6、删除模块子程序(A:\del.prg)
功能:提供逻辑与物理删除的功能。
源程序:set talk off
set devi to scre
use a:\xj
yy=" "
yn=" "
de=spac(2)
clear
@4,20 say"请输入要删除记录的学号" get de
read
loca all for 学号=de
if eof()
wait"查无此卡片!击回车键退出!"
clear
do a:\xj
retu
endi
if.not.eof()
clea
hk=recn()
hk1=str(hk,3)
@row(),5 say"您现在浏览的是第"+hk1+"张卡片"
@row()+1,5 say"学号:"+学号
@row()+1,5 say"姓名:"+姓名
@row()+1,5 say"性别:"+性别
@row()+1,5 say"出生年月:"+dtoc(出生年月)
@row(),40 say"是否团员:"+是否团员
@row()+1,5 say"电话:"+电话
@row(),40 say"通信地址:"+通信地址
@row()+1,5 say"邮编:"+邮编
@row()+1,5 say"总成绩:"+总成绩
@row()+1,5 say"备注:"+备注
endif
@13,20 say"是这个记录吗?(Y/N)" get yn
read
if yn="n".or.yn="N"
clea
do a:\xj
retu
endi
if yn="y"
@14,20 say"真要删除吗?(Y/N)" get yy
read
if yy="y".or.yy="Y"
delete &&删除当前记录(逻辑删除,但不是真正将当前文件记录从VFP中删除)
endif
endi
clear
stor " " to y
@15,15 say"删除的记录从盘中彻底清除吗?(Y/N)" get y
read
if y="y".or.y="Y"
pack &&真正删除当前记录(物理删除)
endif
clea
do a:\xj
温馨提示:答案为网友推荐,仅供参考
相似回答