资源描述
目 录
1、需求和功效分析 3
2、系统总体框架 4
3、模块设计和分析 4
4、类设计和分析 6
5、特色算法分析 7
6、功效测试 10
7、存在不足和对策 13
8、程序源代码 14
9、使用说明 23
10、参考文件 23
1、 需求和功效分析
(1)需求分析
学生成绩管理系统关键提供成绩查询,方便管理网上信息查阅平台,学生能够经过该系统查阅和自己相关信息,查看留言、提交留言。老师能够经过成绩管理系统查阅学生成绩信息,老师信息,查看老师留言、学生留言、提交留言、留言管理等相关操作。系统管理员能够实现以上全部功效,还有对学生添加、删除、修改、老师添加、删除、修改,数据库备份、数据库还原等相关操作。
依据开发要求,学生成绩管理系统关键应用于教育系统,完成对日常教学、教务、老师和学生计算机化管理。开发学生成绩管理系统可使学院教职职员减轻工作压力,比较系统地对教务、教学上各项服务和信息进行管理,同时,能够降低劳动力使用,加紧查询速度、加强管理,和国家各部门相关信息化步伐,使各项管理愈加规范化。现在,学校工作繁杂、资料重多。现在,管理信息系统已进入高校,但还未普及,而对于学生成绩管理来说,现在还没有一套完整、统一系统。所以,开发一套适和大众、兼容性好系统是很有必需。
(2)功效分析
“学生成绩管理系统”包含九个模块:输入学生资料,输出学生资料,学生姓名按次序排列,添加学生资料,按姓名查找,删除该学生资料,查找并显示学生资料,按姓名查找,修改该学生资料,从文件中读入数据,储存学生资料并退出系统。这九个模块既相互联络又相互独立。
本系统依据学生成绩管理需要,而建立一个“学生成绩管理系统”,以方便对成绩各项管理操作。本系统能对成绩进行输入和输出;能按姓名对学生进行排序,并显示学生资料、成绩等,不过得以系统输入学生资料、成绩为前提;能添加学生成绩资料;能依据学生姓名来查询该学生成绩资料,并修改或是删除该学生信息;能够从文件中读取学生信息,而且添加到系统中;能把对系统所进行操作进行保留,以立即更新系统中数据。
2、 系统总体框架
主
菜
单
输入学生资料模块
输出学生资料模块
按学生姓名进行排列模块
添加学生 资料模块
按姓名查找,删除该学生资料模块
查找并显示学生资料模块
按姓名查找,修改学生资料模块
从文件中读入数据模块
储存学生资料并退出系统模块
图1
3、模块设计和分析
(1)输入学生资料模块:
关键功效用来对学生成绩进行搜集和输入。在学生信息保留在系统中前提下,成绩录入需要输入学生资料,比如班级,学号,姓名。在正确输入学生资料后,就能够对该学生各科成绩进行录入。该学生各科成绩输入成功后,系统会提醒是否继续进行操作,假如想继续输入学生成绩就输入y,不想再输入学生成绩话就输入n,再输入n以后,系统返回到主菜单。
(2)输出学生资料模块:
关键功效用来对学生成绩进行输出。在系统已经录入了学生资料成绩前提下,使用该功效能够显示全部学生信息,资料等等。具体包含学生班级,学号,姓名和各科成绩。在查看学生资料,成绩各方面信息后,按任意键就能够返回到主菜单。
(3) 按学生姓名进行排列模块
关键功效是用来对学生资料按姓名进行排序。在系统保留学生资料,成绩前提下,使用此功效能够对学生资料按姓名进行排序,这么就方便查找姓氏相同或是相近同学资料。
(4) 添加学生资料模块
关键功效是用来添加学生资料,成绩。假如系统有保留学生资料情况下,想录入学生成绩话,就不用添加学生资料这模块。假如系统没有保留该学生信息话,就要使用此模块,在成功添加学生资料后,就能够对该学生进行其它操作。
(5)按姓名查找,删除该学生资料模块
关键功效是用来删除学生资料。在系统保留学生资料前提下,想删除某学生资料,能够输入学生姓名,系统查找该学生资料后,就能够删除了。因为学生辍学,毕业等原因,立即对系统进行更新,删除部分没用信息,能够使系统愈加优化
(6)查找并显示学生资料模块
关键功效是用来查找学生资料。在系统保留了某学生资料前提下,想要查找该学生资料,能够输入该学生姓名,这么系统就会显示该学生资料和各科成绩等信息
(7)按姓名查找,修改学生资料模块
关键功效是用来修改学生资料。在系统保留了某学生资料前提下,想要查找该学生资料,能够输入该学生姓名,系统就会显示该学生资料和各科成绩等信息,这么就能够修改该学生资料,成绩等信息。
(8)从文件中读入数据模块
关键功效是用来从文件中读入学生数据。因为部分资料能够用Word文档或Excel表格输入,故在此模块中增加了导入数据功效。这么就方便很多,不用把学生资料一个一个添加,节省了很多时间精力。
(9)储存学生资料并退出系统模块
关键功效是用来储存学生资料。在对系统进行一系列操作,比如添加、删除、修改学生资料后,对系统最新操作进行保留,立即更新系统,方便下一次操作。
4、类设计和分析
Student类类图
student
num
cla
name
byyl
jsjzc
sjk
jsjyy
typedef class
{
public:
char num[10];
char cla[10];
char name[20];
char byyl[10];
char jsjzc[20];
char sjk[10];
char jsjyy[20];
}Student;
表1 Student类说明表
名称
属性
说明
num
数据组员
说明学生学号
cla
数据组员
说明学生班级
name
数据组员
说明学生名字
byyl
数据组员
说明学生编译原理成绩
jsjzc
数据组员
说明学生计算机组成成绩
sjk
数据组员
说明学生数据库成绩
jsjyy
数据组员
说明学生计算机英语成绩
5、特色算法分析
功效:定义菜单函数,经过输出函数显示系统功效。利用switch语句实现多分支选择结构。
算法思绪:switch语句实施步骤是:首先计算switch后面圆括号中表示式值,然后用此值依次和各个case常量表示式比较,若圆括号中表示式值和某个case后面常量表示式值相等,就实施此case后面语句,实施后遇break语句就退出switch语句。
步骤图:
case=2
case=3
case=4
case=5
case=6
case=1
case=7
case=8
case=0
输入学生资料
添加学生资料
按姓名查找,删除该学生资料
查找并显示学生资料
从文件中读入数据
按姓名查找,修改学生资料
储存学生资料并退出系统
按学生姓名进行排列
输出学生资料
yes
no
yes
yes
yes
yes
yes
yes
yes
yes
no
no
no
no
no
no
·
代码:
void main() //主函数调用。
{
int n=0;
for(;;)
{
switch(menu())
{
case 1:
cout<<setw(15)<<" "<<"输入学生资料"<<endl;
n=Input(stu,n);
break;
case 2:
cout<<setw(15)<<" "<<"输出全部学生资料"<<endl;
Display(stu,n);
break;
case 3:
cout<<setw(15)<<" "<<"按姓名排序"<<endl;
Sort(stu,n);
cout<<setw(15)<<" ";
system("pause");
break;
case 4:
cout<<setw(15)<<" "<<"插入学生资料"<<endl;
n=Insert(stu,n);
cout<<setw(15)<<" ";
system("pause");
break;
case 5:
cout<<setw(15)<<" "<<"删除学生资料"<<endl;
cout<<setw(15)<<" "<<"输入她(她)姓名:";
n=Delete(stu,n);
cout<<setw(15)<<" ";
system("pause");
break;
case 6:
cout<<setw(15)<<" "<<"查找学生"<<endl;
Query(stu,n);
cout<<setw(15)<<" ";
system("pause");
break;
case 7:
cout<<setw(15)<<" "<<"修改学生资料"<<endl;
cout<<setw(15)<<" "<<"输入你要修改学生姓名:";
n=Xiugai(stu,n);
system("pause");
break;
case 8:
cout<<setw(15)<<" "<<"从文件中读入数据"<<endl;
n=AddfromText(stu,n);
break;
case 0:
cout<<setw(15)<<" "<<"将全部资料写入文件"<<endl;
WritetoText(stu,n);
cout<<setw(15)<<" ";
system("pause");
break;
}
}
}
6、功效测试
图1 学生成绩管理系统主菜单页面
图二 为输入学生资料模块
图三 为输出学生资料模块
图四 按学生姓名进行排列模块
图五 为添加学生资料模块
图六 为按姓名查找,删除该学生资料模块
图七 为查找并显示学生资料模块
图八 为按姓名查找,修改学生资料模块
图九 为从文件中读入数据模块
图十 为储存学生资料并退出系统模块
7、存在不足和对策
本学生成绩管理系统由九个模块组成,每个模块相互联络又相互独立。这个学生成绩管理系统存在着很多不足之处,因为自己本身编程能力问题,这个系统能够实现功效很有限。只能实现学生管理系统最基础功效,能够进行简单输入、输出学生资料,查询和修改学生信息,能直接从文件中读入数据,能对系统所作修改、操作进行保留等。而且在每个模块也有不足地方,比如在输入学生资料时,对每个信息项没有严格要求,能够输入任何字符。同时有些模块还不能实现本应该有功效,这有待以后努力,争能够实现该有功效。
在二十一世纪科技时代,科学技术突飞猛进,计算机已经不仅是在科技上应用,而且在生活中也是一样得到了广泛在应用。现在,不管是小学、初中、高中、甚至是很多大学生学生成绩管理基础上是靠人工进行管理,但伴随时间改变,学校规模扩大,相关学生成绩管理工作和所包含到数据量越来越大越来越多,大多数学校不得不靠增加人力、物力、财力来进行学生成绩管理。不过人工管理成绩档案含有效率低、查找麻烦、可靠性不高、保密性低等原因。所以开发出一个不仅仅是适适用于大中专院校和其它高校通用学生成绩管理系统是必需。
开发一个学生成绩管理系统,采取计算机对学生成绩进行管理,深入提升了办学效益和现代化水平。为广大老师和学生提升工作效率,实现学生成绩信息管理工作步骤系统化、规范化和自动化。现在中国大中专院校学生成绩档案管理水平普遍全部不是很高,有还停留在全用纸介质基础上,这种管理方法已不能适应时代发展,社会需求,因为它浪费了大量人力物力,也存在着很多不足原因。在今天信息时代这种传统管理方法肯定会被计算机为基础信息管理系统所替换。一个高效学生成绩管理系统能够存放历届学生成绩档案,不需要大量人力,只需要几名专门录入员即可操作系统,节省大量人力,能够快速查到所需信息、高效、安全,学生在能方便查看自己成绩。
8、程序源代码
#include<iostream>
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<iomanip>
using namespace std;
typedef class
{
public:
char num[10];
char cla[10];
char name[20];
char byyl[10];
char jsjzc[20];
char sjk[10];
char jsjyy[20];
}Student;
Student stu[80];
int menu()
{
char c;
for(;c<'0'||c>'8';)
{
system("cls");
cout<<" 欢迎使用本学生成绩管理系统!!"<<endl;
cout<<"编程人员:纪欣吉";
cout<<endl;
cout<<"****************************** 学生成绩管理系统 ****************************** "<<endl;
cout<<setw(32)<<" "<<"1.输入学生资料"<<endl;
cout<<setw(32)<<" "<<"2.输出学生资料"<<endl;
cout<<setw(32)<<" "<<"3.按学生姓名进行排列"<<endl;
cout<<setw(32)<<" "<<"4.添加学生资料"<<endl;
cout<<setw(32)<<" "<<"5.按姓名查找,删除该学生资料"<<endl;
cout<<setw(32)<<" "<<"6.查找并显示学生资料"<<endl;
cout<<setw(32)<<" "<<"7.按姓名查找,修改该学生资料"<<endl;
cout<<setw(32)<<" "<<"8.从文件中读入数据"<<endl;
cout<<setw(32)<<" "<<"0.储存学生资料并退出系统"<<endl;
cout<<setfill('=')<<setw(48)<<"="<<endl;
cout<<setw(15)<<" ";
cout<<"请选择(0-8):";
c=getchar();
}
return(c-'0');
}
int Input(Student stud[],int n) //输入数据。
{
int i=0;
char sign,x[10];
for(;sign != 'n' && sign != 'N';)
{
cout<<setw(15)<<" "<<"班级:";
cin>>stud[n+i].cla;
cout<<setw(15)<<" "<<"学号:";
cin>>stud[n+i].num;
cout<<setw(15)<<" "<<"姓名:";
cin>>stud[n+i].name;
cout<<setw(15)<<" "<<"编译原理:";
cin>>stud[n+i].byyl;
cout<<setw(15)<<" "<<"计算机组成原理:";
cin>>stud[n+i].jsjzc;
cout<<setw(15)<<" "<<"数据库:";
cin>>stud[n+i].sjk;
cout<<setw(15)<<" "<<"计算机英语:";
cin>>stud[n+i].jsjyy;
gets(x);
cout<<setw(10)<<" ";
cout<<"还有要输入信息吗?(y/n)";
cin>>&sign;
i++;
}
return(n+i);
}
void Display(Student stud[], int n) //输出数据。
{
int i;
cout<<setw(15)<<" "<<setfill('-')<<setw(65)<<"-"<<endl;
cout<<setw(15)<<" "<<"班级 学号 姓名 编译原理 计算机组成原理 数据库 计算机英语"<<endl;
cout<<setw(15)<<" ";
cout<<setfill('-')<<setw(65)<<"-"<<endl;
for(i=1;i<n+1;i++)
{
printf("\t\t%-9s%-9s%-9s%-9s%-9s%-9s%-9s\n",stud[i-1].cla,stud[i-1].num,stud[i-1].name,stud[i-1].byyl,stud[i-1].jsjzc,stud[i-1].sjk,stud[i-1].jsjyy);
if(i>1 && i%10==0)
{
cout<<setw(15)<<" "<<setfill('-')<<setw(35)<<"-"<<endl;
cout<<setw(15)<<" ";
system("pause");
cout<<setw(15)<<" "<<setfill('-')<<setw(35)<<"-"<<endl;
}
}
cout<<setw(15)<<" ";
system("pause");
}
void Sort(Student stud[],int n) //按名字排序。
{
int i,j;
char t[20];
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(strcmp(stud[j].num,stud[j+1].num)>0)
{
strcpy(t,stud[j+1].cla);
strcpy(stud[j+1].cla,stud[j].cla);
strcpy(stud[j].cla,t);
strcpy(t,stud[j+1].num);
strcpy(stud[j+1].num,stud[j].num);
strcpy(stud[j].num,t);
strcpy(t,stud[j+1].name);
strcpy(stud[j+1].name,stud[j].name);
strcpy(stud[j].name,t);
strcpy(t,stud[j+1].byyl);
strcpy(stud[j+1].name,stud[j].byyl);
strcpy(stud[j].byyl,t);
strcpy(t,stud[j+1].jsjzc);
strcpy(stud[j+1].name,stud[j].jsjzc);
strcpy(stud[j].jsjzc,t);
strcpy(t,stud[j+1].sjk);
strcpy(stud[j+1].name,stud[j].sjk);
strcpy(stud[j].sjk,t);
strcpy(t,stud[j+1].jsjyy);
strcpy(stud[j+1].name,stud[j].jsjyy);
strcpy(stud[j].jsjyy,t);
}
cout<<setw(15)<<" "<<"排序成功!"<<endl;
}
int Insert(Student stud[],int n) //插入一条学生信息。
{
char x[10];
cout<<setw(15)<<" "<<"班级:";
cin>>stud[n].cla;
cout<<setw(15)<<" "<<"学号:";
cin>>stud[n].num;
cout<<setw(15)<<" "<<"姓名:";
cin>>stud[n].name;
cout<<setw(15)<<" "<<"编译原理:";
cin>>stud[n].byyl;
cout<<setw(15)<<" "<<"计算机组成原理:";
cin>>stud[n].jsjzc;
cout<<setw(15)<<" "<<"数据库:";
cin>>stud[n].sjk;
cout<<setw(15)<<" "<<"计算机英语:";
cin>>stud[n].jsjyy;
gets(x);
n++;
cout<<setw(15)<<" "<<"插入成功!"<<endl;
return(n);
}
int Delete(Student stud[],int n) //按名字查找信息,删除信息。
{
char s[20];
int i=0,j;
cin>>s;
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判定*/
if(i==n)
{
printf("\t\t\t没有发觉该学生资料!\n"); /*返回失败信息*/
return(n);
}
for(j=i;j<n-1;j++) /*删除操作*/
{
strcpy(stud[j].num,stud[j+1].num);
strcpy(stud[j].name,stud[j+1].name);
strcpy(stud[j].cla,stud[j+1].cla);
strcpy(stud[j].byyl,stud[j+1].byyl);
strcpy(stud[j].jsjzc,stud[j+1].jsjzc);
strcpy(stud[j].sjk,stud[j+1].sjk);
strcpy(stud[j].jsjyy,stud[j+1].jsjyy);
}
cout<<setw(15)<<" "<<"目前信息已删除成功!"<<endl; /*返回成功信息*/
return(n-1);
}
void Query(Student stud[],int n) //按名字查找信息
{
char s[20];
int i=0;
cout<<setw(15)<<" "<<"输入她(她)姓名:";
cin>>s;
while(strcmp(stud[i].name,s)!=0&&i<n)
i++; /*查找判定*/
if(i==n)
{
printf("\t\t\t没有发觉该学生资料!\n"); /*输入失败信息*/
return;
}
cout<<setw(15)<<" "<<"学号:"<<stud[i].num<<endl;
cout<<setw(15)<<" "<<"编译原理:"<<stud[i].byyl<<endl;
cout<<setw(15)<<" "<<"计算机组成原理:"<<stud[i].jsjzc<<endl;
cout<<setw(15)<<" "<<"数据库:"<<stud[i].sjk<<endl;
cout<<setw(15)<<" "<<"计算机英语:"<<stud[i].jsjyy<<endl;
}
int Xiugai(Student stud[],int n) //修改信息。
{
n=Delete(stud,n);
cout<<setw(15)<<" "<<"输入你要修改学生资料"<<endl;
n=Insert(stud,n);
cout<<setw(15)<<" "<<"修改完成"<<endl;
return(n);
}
int AddfromText(Student stud[], int n) //从文件中读入数据。
{
int i=0,num;
FILE *fp;
char filename[20];
cout<<setw(15)<<" "<<"输入文件名:";
cin>>filename;
if((fp=fopen(filename,"rb"))==NULL)
{
cout<<setw(15)<<" "<<"无法打开文件"<<endl;
cout<<setw(15)<<" ";
system("pause");
return(n);
}
fscanf(fp,"%d",&num);
for(;i<num;)
{
fscanf(fp,"%s%s%s%s%s%s%s",stud[n+i].cla,stud[n+i].num,stud[n+i].name,stud[n+i].byyl,stud[n+i].jsjzc,stud[n+i].sjk,stud[n+i].jsjyy);
i++;
}
n+=num;
fclose(fp);
cout<<setw(15)<<" "<<"读入成功!"<<endl;
cout<<setw(15)<<" ";
system("pause");
return(n);
}
void WritetoText(Student stud[],int n) //将全部统计写入文件。
{
int i=0;
FILE *fp;
char filename[20];
cout<<setw(15)<<" "<<"将资料输入文件"<<endl;
cout<<setw(15)<<" "<<"输入文件名:";
cin>>filename;
if((fp=fopen(filename,"w"))==NULL)
{
cout<<setw(15)<<" "<<"无法打开文件"<<endl;
system("pause");
return;
}
fprintf(fp,"%d\n",n);
for(;i<n;)
{
fprintf(fp,"%-6s%-5s%-5s%-5s%-5s%-5s%-5s\n",stud[i].cla,stud[i].num,stud[i].name,stud[i].byyl,stud[i].jsjzc,stud[i].sjk,stud[i].jsjyy);
i++;
}
fclose(fp);
cout<<setw(15)<<" "<<"输入成功!"<<endl;
int b;
cout<<setw(15)<<" "<<"请确定是否退出系统:"<<endl;
cout<<setw(15)<<" "<<"0.退出系统"<<endl;
cout<<setw(15)<<" "<<"1.返回"<<endl;
cin>>b;
if(b==0)
{
cout<<setw(15)<<" "<<"谢谢使用!"<<endl;
cout<<setw(15)<<" ";
system("pause");
exit(0);
}
}
void main() //主函数调用。
{
int n=0;
for(;;)
{
switch(menu())
{
case 1:
cout<<setw(15)<<" "<<"输入学生资料"<<endl;
n=Input(stu,n);
break;
case 2:
cout<<setw(15)<<" "<<"输出全部学生资料"<<endl;
Display(stu,n);
break;
case 3:
cout<<setw(15)<<" "<<"按姓名排序"<<endl;
Sort(stu,n);
cout<<setw(15)<<" ";
system("pause");
break;
case 4:
cout<<setw(15)<<" "<<"插入学生资料"<<endl;
n=Insert(stu,n);
cout<<setw(15)<<" ";
system("pause");
break;
case 5:
cout<<setw(15)<<" "<<"删除学生资料"<<endl;
cout<<setw(15)<<" "<<"输入她(她)姓名:";
n=Delete(stu,n);
cout<<setw(15)<<" ";
system("pause");
break;
case 6:
cout<<setw(15)<<" "<<"查找学生"<<endl;
Query(stu,n);
cout<<setw(15)<<" ";
system("pause");
break;
case 7:
cout<<setw(15)<<" "<<"修改学生资料"<<endl;
cout<<setw(15)<<" "<<"输入你要修改学生姓名:";
n=Xiugai(stu,n);
system("pause");
break;
case 8:
cout<<setw(15)<<" "<<"从文件中读入数据"<<endl;
n=AddfromText(stu,n);
break;
case 0:
cout<<setw(15)<<" "<<"将全部资料写入文件"<<endl;
WritetoText(stu,n);
cout<<setw(15)<<" ";
system("pause");
break;
}
}
}
9、使用手册
(1)用户进入系统后,就会看到学生管理系统主菜单页面。系统总共有九个模块,分别由0到8表示,在主菜单页面只能输入数字0到8,输入其它字符无效,假如用户输入无效字符,系统仍停留在主菜单页面。
(2)进入到主菜单页面后,用户能够依据自己需求选择不一样选项,选择后系统就会进入子系统页面,然后用户按系统提醒操作就行了。
10、参考文件
《C++程序设计》 钱能 清华大学出版社
《C++程序设计试验指导》 钱能 清华大学出版社
《C程序设计》 谭浩强 清华大学出版社
展开阅读全文