课程设计教务管理系统.docx
《课程设计教务管理系统.docx》由会员分享,可在线阅读,更多相关《课程设计教务管理系统.docx(19页珍藏版)》请在冰点文库上搜索。
课程设计教务管理系统
课程设计报告
课程名称:
面向对象程序设计C++
设计题目:
教务管理系统
专业:
计算机科学与技术
姓名:
学号:
指导教师:
李晓虹
2015年1月10日
课程设计报告模块内容要求:
1.系统需求分析
1.1系统要求
该系统使用VisualBasic6.0语言进行整体系统设计,且拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易的使用DAO、RDO、ADO连接数据库。
且该系统使用Access来建立数据库,Access多用于中小型企业以及人数相对不是较大的学校来设计中小型数据库。
一般学校的教务系统数据库用Access来设计完全能达到要求。
并通过调查,要求系统需要有一些简单的要求,由于操作人员的计算机知识普遍较差,要求系统要有良好的人机界面,让操作人员一目了然。
鉴于该系统的使用对象为两大部分即教务处管理员和各班主任,要求有较好的权限管理。
因为原始数据修改简单方便,支持相对权限管理者可以直接修改数据。
方便的数据查询,支持多条件查询。
在相应的权限下,管理者删除数据方便简单,数据稳定性较好。
1.2需求分析
本系统的用户主要是教务处管理员和各班级班主任,通过该系统管理员可以对教师或学生的档案信息进行查看和查询,并且还可以对教师和学生的档案信息、成绩信息进行修改、增加或删除等操作,这样在一定程度上做到教务管理信息的安全性,从而使教务管理工作顺利的进行。
教务管理中总是需要面对大量的录入信息如学生个人档案信息、教师个人档案信息、学生班级基本信息、学生基本成绩信息、学生成绩查询,教师档案的查询修改等。
因此需要信息进行及时管理更新,及时了解各个管理环节中信息的变更,力求提高管理效率。
由于本系统管理的对象较为单一,并且都是在校教师学生,况且每个数据内容具有较强的关联性,涉及的计算过程不是很复杂。
本系统力求使系统功能界面操作简洁明了,功能齐全且易于非计算机人员操作。
根据学校教务管理系统需要实现的一些目标来分析,该系统将数据库的设计可以抽象为简单的六大类基本的数据表,即:
总体教师档案信息表、总体学生档案信息表、学校所开设的各年级的班级及班级号信息表、各班级学生信息表、各班级学生成绩信息表、各年级开设的课程管理信息表。
2.总体设计
1.1VisualBasic6.0简介
VisualBasic6.0(VB)[2]是一种由微软公司开发的包含协助开发环境的事件驱动编程语言,是一种我们常用的编程开发工具。
从任何标准来说,VB都是世界上使用人数最多的语言
——不仅是盛赞VB的开发者还是抱怨VB的开发者的数量。
它源自于BASIC编程语言,简单点来说就是微软为了更好的让人们学习编程,应用Basic开发语言的一套工具。
VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易的使用DAO、RDO、ADO连接数据库,或者轻松的创建ActiveX控件。
程序员可以轻松的使用VB提供的组件快速建立一个应用程序。
VB把过往的纯代码编程过度到可视化编程,将一些经常要使用到的功能以一个个的控件的形式出现,例如Label(标签)、TextBox(文本框)等等(都是本系统所用到的)。
利用VB的数据访问特性,用户可以对包括MicrosoftSQLServer、Access和其他企业数据库在内的大部分数据库格式创建数据库和前端应用程序,以及可调整的服务器端部件。
利用ActiveX(TM)技术,VB可使用如MicrosoftWord、MicrosoftExcel及其他Windows应用程序提供的功能,甚至可直接使用VB专业版和企业版创建的应用程序对象。
VB的程序可以包含一个或多个窗体,或者是一个主窗体和多个子窗体,让用户用起来一目了然。
它具有清晰地图形界面,不需编写大量代码去描述界面元素的外观和位置。
本系统所设计的页面可以让用户清晰地看出所有管理的功能,让他们简单轻松地去完成复杂的教务管理工作。
2.2教务管理系统总体设计图
3.详细设计
代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
/*
快速模匹配
*/
voidgetnext(char*p,int*next){
intj,k;
j=0;k=-1;
next[0]=-1;
while(jif(k==-1||p[k]==p[j]){
j++;k++;
next[j]=k;
}
elsek=next[k];
}
}
intKMP(char*s,char*p){
inti,j;
i=j=0;
intnext[100];
getnext(p,next);
while(iif(j==-1||s[i]==p[j]){
i++;j++;
}
elsej=next[j];
if(j==strlen(p))returni-j;
}
return-1;
}
classCourse{
public:
intgrade;
intregular_grade,exeperiment_grade,exam_paper_grade;
charid[10],name[20];
doublecaculateRecord();//计算综合成绩
doublecaculateCredit();//计算实际所得学分
};
/*
计算某一科的综合成绩
*/
doubleCourse:
:
caculateRecord(){
doubleres;
if(exeperiment_grade==-1)res=regular_grade*0.3+exam_paper_grade*0.7;
elseres=regular_grade*0.15+exeperiment_grade*0.15+exam_paper_grade*0.7;
returnres;
}
/*
计算某一刻所得的学分
*/
doubleCourse:
:
caculateCredit(){
doublecre,rec;
rec=caculateRecord();
if(rec>90)cre=grade;
elseif(rec>=80.0&&rec<90.0)cre=grade*0.8;
elseif(rec>=70.0&&rec<80.0)cre=grade*0.75;
elseif(rec>=60.0&&rec<70.0)cre=grade*0.6;
elsecre=0;
returncre;
}
classStudent{
Coursecou;//学生所选的课程
charid[10],name[20];//学号//姓名
intcmdid;//指令代号
intcnt;//所修课程数
charphonenum[18],roomnum[18],sex[18];//电话号码、寝室号、性别
public:
doublecredit;//学生的总学分
doubletotalRecord;//综合成绩
voidtips();//提示内容
voidexecuteCmd();//执行命令函数
voidgetCmd(stringcmd);//获取命令参数函数
voidquery();//查询功能函数
voidcaculateGrade();//计算成绩
voiddelStu();//删除学生功能函数
voidrefresh();//更新数据函数
voidSort(boolcmdnum);//排序功能函数
voidUpdate();
voidExit();
};
/*
功能使用提示
*/
voidStudent:
:
tips(){
cout<<"----------------------------------"<cout<<"学籍管理系统操作指令介绍\n";
cout<<"数据录入功能:
Update\n";
cout<<"查询功能:
\n基本情况查询:
A\n成绩查询:
B\n"<<
"删除功能:
\n先键入del然后输入学生学号/姓名即可\n"<<
"排序功能:
\n升序输入:
up\n降序输入:
down"<cout<<"输入EOF表示退出此系统"<cout<<"----------------------------------"<}
/*
退出系统
*/
voidStudent:
:
Exit(){
system("exit");
}
/*
数据写入功能
*/
voidStudent:
:
Update(){
Studentstu[100];
Studenttempstu;
FILE*file;
intcnt=0;
file=fopen("B.txt","r+");
while
(1){
fscanf(file,"%s\t%s\t%s\t%d\t%d\t%d\t%d\t",id,cou.id,cou.name,&cou.grade,&cou.regular_grade,&cou.exeperiment_grade,&cou.exam_paper_grade);
//strcpy(stu[cnt].id,id);
//strcpy(stu[cnt].cou.id,cou.id);
//strcpy(stu[cnt].cou.name,cou.name);
//stu[cnt].cou.regular_grade=cou.regular_grade;
//stu[cnt].cou.exam_paper_grade=cou.exam_paper_grade;
//stu[cnt].cou.exeperiment_grade=cou.exeperiment_grade;
//stu[cnt].cou.grade=cou.grade;
//cnt++;
if(feof(file))break;
}
printf("按照指定的格式输出学生信息\n");
scanf("%s%s%s%d%d%d%d",tempstu.id,tempstu.cou.id,tempstu.cou.name,&tempstu.cou.grade,&tempstu.cou.regular_grade,&tempstu.cou.exeperiment_grade,&tempstu.cou.exam_paper_grade);
stu[cnt]=tempstu;
fprintf(file,"%s%s%s%d%d%d%d\n",stu[0].id,stu[0].cou.id,stu[0].cou.name,stu[0].cou.grade,stu[0].cou.regular_grade,stu[0].cou.exeperiment_grade,stu[0].cou.exam_paper_grade);
//}
fclose(file);
}
/*
将获取的命令返回给cmdid,并根据cmdid的不同取值、
执行相应的命令
*/
voidStudent:
:
getCmd(stringcmd){
if(cmd[0]=='A')cmdid=1;//查询基本情况
elseif(cmd[0]=='B')cmdid=2;//查询成绩
elseif(cmd[1]=='e')cmdid=3;//删除学生
elseif(cmd[0]=='u')cmdid=4;//升序排列
elseif(cmd[1]=='o')cmdid=5;//降序排列
elseif(cmd[0]=='E'&&cmd[1]=='O'&&cmd[2]=='F')cmdid=6;
elseif(cmd[0]=='U')cmdid=7;//数据录入
}
/*
查询功能的实现
*/
voidStudent:
:
query(){
charinfo[100];
inttmp=-1;
printf("输入学生的学号或宿舍号,查询学生信息或宿舍信息\n");
scanf("%s",id);
printf("\n");
FILE*file;
file=fopen("A.txt","r");
if(file==NULL)perror("Erroropening");
else{
while(tmp==-1){
fgets(info,100,file);
tmp=KMP(info,id);
if(tmp==0){
puts(info);
}
elseif(tmp>=10&&tmp<=26){
puts(info);
tmp=-1;
}
if(feof(file))break;
}
fclose(file);
}
cout<<"----------------------------------"<}
/*
计算成绩
*/
voidStudent:
:
caculateGrade(){
credit=0.0;
cnt=0;
printf("输入学生学号\n");
charids[10];
inttmp1=-1,tmp2=-1;
doubletmpRecord,tmpCredit;
scanf("%s",ids);
printf("\n");
FILE*file1,*file2;
file1=fopen("A.txt","r");
file2=fopen("B.txt","r");
if(file1!
=NULL&&file2!
=NULL){
while(tmp1==-1){
fscanf(file1,"%s\t%s\t%s\t%s\t%s\t",id,name,sex,roomnum,phonenum);
if(ids[1]==id[1]){
tmp1=0;
}
}
printf("学号:
%s姓名:
%s\n",ids,name);
while(tmp2==-1){
fscanf(file2,"%s\t%s\t%s\t%d\t%d\t%d\t%d\t",id,cou.id,cou.name,&cou.grade,&cou.regular_grade,&cou.exeperiment_grade,&cou.exam_paper_grade);
if(ids[1]==id[1]){
cnt++;
tmpRecord=cou.caculateRecord();
tmpCredit=cou.caculateCredit();
printf("课程编号:
%s课程名称:
%8s综合成绩:
%.2lf实得学分:
%.2lf\n",cou.id,cou.name,tmpRecord,tmpCredit);
credit+=tmpCredit;
}
if(feof(file2))break;
}
printf("共修:
%d科,实得总学分为:
%.2lf\n",cnt,credit);
}
}
/*
删除某一个学生
*/
voidStudent:
:
delStu(){
charids[10];
Studentstu[100],stu0[100];
printf("输入要删除的学生的学号\n");
scanf("%s",ids);
FILE*file1,*file2,*file3,*file4;
file3=fopen("A.txt","w");
file4=fopen("B.txt","w");
file1=fopen("A.txt","r");
file2=fopen("B.txt","r+");
intcnt=0,cnt1=0;
if(file1!
=NULL&&file2!
=NULL){
while
(1){
fscanf(file1,"%s\t%s\t%s\t%s\t%s\t",id,name,sex,roomnum,phonenum);
if(ids[1]!
=id[1]){
strcpy(stu0[cnt1].id,id);
strcpy(stu0[cnt1].name,name);
strcpy(stu0[cnt1].sex,sex);
strcpy(stu0[cnt1].roomnum,roomnum);
strcpy(stu0[cnt1].phonenum,phonenum);
cnt1++;
}
if(feof(file1))break;
}
fclose(file1);
if(remove("A.txt")!
=0){
printf("ahgjagkajg\n");
for(inti=0;ifprintf(file3,"%s%6s%s%s%s\n",stu0[i].id,stu0[i].name,stu0[i].sex,stu0[i].roomnum,stu0[i].phonenum);
}
fclose(file3);
}
while
(1){
fscanf(file2,"%s\t%s\t%s\t%d\t%d\t%d\t%d\t",id,cou.id,cou.name,&cou.grade,&cou.regular_grade,&cou.exeperiment_grade,&cou.exam_paper_grade);
if(ids[1]!
=id[1]){
strcpy(stu[cnt].id,id);
strcpy(stu[cnt].cou.id,cou.id);
strcpy(stu[cnt].cou.name,cou.name);
stu[cnt].cou.regular_grade=cou.regular_grade;
stu[cnt].cou.exam_paper_grade=cou.exam_paper_grade;
stu[cnt].cou.exeperiment_grade=cou.exeperiment_grade;
stu[cnt].cou.grade=cou.grade;
cnt++;
}
if(feof(file2))break;
}
if(remove("B.txt")!
=0){
printf("ahgkjaga\n");
for(inti=0;ifprintf(file4,"%s%s%s%d%d%d%d\n",stu[i].id,stu[i].cou.id,stu[i].cou.name,stu[i].cou.grade,stu[i].cou.regular_grade,stu[i].cou.exeperiment_grade,stu[i].cou.exam_paper_grade);
}
fclose(file4);
}
}
}
/*
排序功能:
首先按照实际学分进行排序,实际学分相等的话,按照综合成绩进行排序
cmp1采用从小到大进行排序,cmp2采用从打到小进行排序
*/
boolcmp1(Studenta,Studentb){
return(a.credit==b.credit)?
a.totalRecorda.credit}
boolcmp2(Studenta,Studentb){
return(a.credit==b.credit)?
(a.totalRecord>b.totalRecord):
a.credit>b.credit;
}
/*
学生成绩或学分的升降序排列,cmdnum为true是从大到小,为false是从小到大进行排列
*/
voidStudent:
:
Sort(boolcmdnum){
FILE*file;
file=fopen("B.txt","r");
Studentstu[100];
intcnt=0;
while
(1){
fscanf(file,"%s\t%s\t%s\t%d\t%d\t%d\t%d\t",id,cou.id,cou.name,&cou.grade,&cou.regular_grade,&cou.exeperiment_grade,&cou.exam_paper_grade);
//stu[cnt].id=id;
strcpy(stu[cnt].id,id);
strcpy(stu[cnt].cou.id,cou.id);
strcpy(stu[cnt].cou.name,cou.name);
stu[cnt].totalRecord=cou.caculateRecord();
stu[cnt].credit=cou.caculateCredit();
cnt++;
if(feof(file))break;
}
if(cmdnum)sort(stu,stu+cnt,cmp2);
elsesort(stu,stu+cnt,cmp1);
printf("排序后结果为:
\n");
for(inti=0;iprintf("学号:
%s编号:
%s名称:
%8s综合成绩:
%.2lf实得学分:
%.2lf名次:
%d\n",stu[i].id,stu[i].cou.id,stu[i].cou.name,stu[i].totalRecord,stu[i].credit,i+1);
}
cout<<"----------------------------------"<}
/*
执行命令函数
*/
voidStudent:
:
executeCmd(){
switch(cmdid){
case1:
query();
break;
case2:
caculateGrade();
break;
case3:
delStu();
break;
case4:
Sort(false);
break;
case5:
Sort(true);
break;
case6:
Exit();
case7:
Update();
default:
break;
}
}
intmain(){
FILE*file