学生成绩管理系统(课程设计)

#include <iostream>
#include <fstream>
#include <string.h>
#include <stdio.h>
#include <conio.h>
using namespace std;
class Goods
{
 public:
   Goods()
      {
      }
   char num[200];
  char name[20];
   int Math;
   int English;
   int C;
   int Sport;
   int Sum;
   Goods * Next;
   
void InputAll()//输入所有信息
{
  InputNum();
  InputName();
  InputMath();
  InputEnglish();
  InputC();
  InputSport();
  InputSum();
}

void InputNum()
{
  cout<<"\t\t请输入学生编号:";cin>>num;
}
void InputName()
{
  cout<<"\t\t请输入学生的姓名:";  cin>>name;
}
void InputMath()
{
  cout<<"\t\t请输入学生的数学成绩:";  cin>>Math;
}
void InputEnglish()
{
  cout<<"\t\t请输入学生的英语成绩:"; cin>>English;
}
void InputC()
{
  cout<<"\t\t请输入学生的C语言成绩:"; cin>>C;
}
void InputSport()
{
  cout<<"\t\t请输入学生的体育成绩:"; cin>>Sport;
}
void InputSum()
{
  Sum=(Math+English+C+Sport);
  cout<<"\t\t该学生的总成绩为:"; cout<<Sum;
}

void ReadFile(istream & in) //将输入的东西存入文件
{
  Sum=(Math+English+C+Sport);
   in>>num>>name>>Math>>English>>C>>Sport>>Sum;
}

void Show()//输出信息
{
  Sum=(Math+English+C+Sport);
   cout<<"编号: "<<num<<endl<<"姓名:"<<name<<endl<<"数学成绩: "<<Math<<endl<<"英语成绩 "<<English<<endl<<"C语言成绩 "<<C<<endl<<"体育成绩: "<<Sport<<endl<<"总成绩:"<<Sum<<endl;
}
};

class Goodsmessage : public Goods
{
  public:
    Goodsmessage();
    ~Goodsmessage();
    void showMenu(int n);
    void Find();
    void Save();
    void Swap(Goods *,Goods *);
    void Paixu();
    void Average();
    int ListCount();
 
void AddItem()//从键盘添加学生信息
{
   system("cls");
   End->InputAll();
   End->Next = new Goods;
   End=End->Next;
   cout<<"添加成功!"<<endl;
   Save();
   cout<<"输入任意字符!继续……";
   getch();
}
 
void Display()//显示所有信息
{
   system("cls");
   i=0;
   for(Goods *p=Head->Next;p!=End;p=p->Next)
   {
    p->Show();
    i++;
   }
   cout<<"共有"<<i<<"个学生"<<"\n"<<endl;
   cout<<"输入任意字符!继续……";
   getch();
}
 
void Max_Min()//最值成绩
{
   system("cls");
   for(Goods * p=Head->Next;p!=End;p=p->Next)
   {
    if(p==Head->Next)
    cout<<"成绩最低学生是:"<<p->name<<endl;
    if(p->Next==End)
    cout<<"成绩最高学生是:"<<p->name<<endl;
   }
   cout<<"输入任意字符!继续……"<<endl;
   getch();
}

void great()//优秀学生
{
   system("cls");
   for(Goods * p=Head->Next;p!=End;p=p->Next)
   {
    if(p->Sum>340&&p->Math>80&&p->English>80&&p->C>80&&p->Sport>80)
      {
    cout<<"优秀学生姓名:"<<p->name<<endl;
       out.open("优秀学生.txt");
    for(Goods *q=Head->Next;q!=End;q=q->Next)
    if(q->Sum>340&&q->Math>80&&q->English>80&&q->C>80&&q->Sport>80)
       out<<"编号:"<<q->num<<"\t姓名:"<<q->name<<"\t数学:"<<q->Math<<"\t英语:"<<q->English<<"\tC语言:"<<q->C<<"\t体育:"<<q->Sport<<"\t总成绩:"<<q->Sum<<'\n';
       out.close();
   }
   }
   cout<<"输入任意字符!继续……"<<endl;
   getch();
}
 
void Fail() //补考学生
{
   system("cls");
   for(Goods * p=Head->Next;p!=End;p=p->Next)
   {
    if(p->Math<60||p->English<60||p->C<60||p->Sport<60)
      {
    cout<<p->name<<"同学需要补考"<<endl;
       out.open("补考学生.txt");
    for(Goods *q=Head->Next;q!=End;q=q->Next)
       if(q->Math<60||q->English<60||q->C<60||q->Sport<60)
       out<<"编号:"<<q->num<<"\t姓名:"<<q->name<<'\n';
       out.close();
   }
 else
   cout<<p->name<<"同学不需要补考"<<endl;
 }
   cout<<"输入任意字符!继续……"<<endl;
   getch();
}

void AverM()//数学平均分
{
  int averageM=0;
  system("cls");
    i=0;
    for(Goods * p=Head->Next;p!=End;p=p->Next)
    {
     averageM=averageM+p->Math;
     i++;
    }
    cout<<averageM/i<<endl;
    cout<<"输入任意字符!继续……";
    getch();
}

void AverE()//英语平均分
{
 int averageE=0;
 system("cls");
    i=0;
    for(Goods * p=Head->Next;p!=End;p=p->Next)
    {
     averageE=averageE+p->English;
     i++;
    }
    cout<<averageE/i<<endl;
    cout<<"输入任意字符!继续……";
    getch();
}

void AverC()//C语言平均分
{
 int averageC=0;
 system("cls");
    i=0;
    for(Goods * p=Head->Next;p!=End;p=p->Next)
    {
     averageC=averageC+p->C;
     i++;
    }
    cout<<averageC/i<<endl;
    cout<<"输入任意字符!继续……";
    getch();
}

void AverS()//体育平均分
{
 int averageS=0;
 system("cls");
    i=0;
    for(Goods * p=Head->Next;p!=End;p=p->Next)
    {
     averageS=averageS+p->Sport;
     i++;
    }
    cout<<averageS/i<<endl;
    cout<<"输入任意字符!继续……";
    getch();
}

  private:
    Goods * Head,* End;
   int i;
    ifstream in;
   ofstream out;
   
Goods *FindItem(char * name)
{
    for(Goods * p=Head;p->Next!=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
 if(!strcmp(p->Next->name,name))return p;
    return NULL;
}
Goods *FindNum(char * num)
{
 for(Goods * p=Head;p->Next!=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
    if(!strcmp(p->Next->num,num))return p;
    return NULL;
}
};
 
Goodsmessage::Goodsmessage()//构造函数                
{
  Head=new Goods;
  Head->Next=new Goods;
  End=Head->Next;
  in.open("stuf.txt");
  if(!in)
   cout<<"无信息。请先添加。"<<endl;
  else
  {
   while(!in.eof())
   {
    End->ReadFile(in);
    if(End->name[0]=='\0')break;
    End->Next=new Goods;
    End=End->Next;
   }
   in.close();
   cout<<"\t\t\t\t读取信息成功!"<<"\n"<<endl;
  }
}
 
Goodsmessage::~Goodsmessage()//析构函数
 {
  for(Goods * temp;Head->Next!=End;)
  {
   temp=Head->Next;
   Head->Next=Head->Next->Next;
   delete temp;
  }
  delete Head,End;
}
 
 void Goodsmessage::showMenu(int n)//菜单
 {
  switch(n)
  {
  case 1:
   {
   system("cls");
  cout<<"━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━"<<endl;
  cout<<"******************欢迎使用学生成绩管理系统******************"<<endl;
  cout<<endl;
  cout<<"      ┏━━━━━━━━━━━━━━━━━━━━━━━━┓    "<<endl;
  cout<<"      ┃                                                ┃    "<<endl;
  cout<<"      ┃                                                ┃    "<<endl;
  cout<<"      ┃       1---------------增加学生成绩             ┃    "<<endl;
  cout<<"      ┃       2---------------显示学生成绩             ┃    "<<endl;
  cout<<"      ┃       3---------------管理学生成绩             ┃    "<<endl;
  cout<<"      ┃       4---------------输出各科平均数           ┃    "<<endl;
  cout<<"      ┃       5---------------保存学生成绩信息         ┃    "<<endl;
  cout<<"      ┃       0---------------安全退出系统             ┃    "<<endl;
  cout<<"      ┃                                                ┃    "<<endl; 
  cout<<"      ┗━━━━━━━━━━━━━━━━━━━━━━━━┛    "<<endl; 
  cout<<endl;
   cout<<"\t\t\n\t\t\t\t  请选择:0-5"<<endl;
 cout<<"━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━"<<endl;
  break;
   }
   
  case 2:
   {
   system("cls");
   cout<<"************************************************************************************************************************\n"
    <<"\t   0.返回上一步        1.输出最高最低        2.输出优秀学生名单       3.按总分排序       4.输出补考学生名单\n" 
    <<"************************************************************************************************************************"<<endl;
   cout<<"\t\t\n\t\t\t\t  请选择:0-4"<<endl;
   break;
   }
  
   case 3:
    {
    system("cls");
    cout<<"####################################################################################################################"<<endl;    
 cout<<"\t   0.返回上一步        1.计算数学成绩        2.计算英语成绩        3.计算C语言成绩        4.计算体育成绩"<<endl;   
 cout<<"####################################################################################################################"<<endl;  
 }
  }
}

void Goodsmessage::Swap(Goods *p1, Goods *p2)//交换两个学生的数据
{
  Goods *temp=new Goods;
  strcpy(temp->name,p1->name);
  strcpy(temp->num,p1->num);
  temp->Math=p1->Math;
  temp->English=p1->English;
  temp->C=p1->C;
  temp->Sport=p1->Sport;
  temp->Sum=p1->Sum;
 
  strcpy(p1->name,p2->name);
  strcpy(p1->num,p2->num);
  p1->Math=p2->Math;
  p1->English=p2->English;
  p1->C=p2->C;
  p1->Sport=p2->Sport;
  p1->Sum=p2->Sum;
 
  strcpy(p2->name,temp->name);
  strcpy(p2->num,temp->num);
  p2->Math=temp->Math;
  p2->English=temp->English;
  p2->C=temp->C;
  p2->Sport=temp->Sport;
  p2->Sum=temp->Sum;
}
 
int Goodsmessage::ListCount()//统计当前链表的记录总数,返回一个整数
{
  if(! Head)
   return 0;
  int n=0;
  for(Goods * p=Head->Next;p!=End;p=p->Next)
  n++;
  return n;
}
 
void Goodsmessage::Paixu()//排序
{
  showMenu(2);
  int x;
  cin>>x;
  switch(x)
  {
   case 1:
   {
    system("cls");
    Goods *p=NULL,*p1=NULL,*k=NULL;
    int n=Goodsmessage::ListCount();
    if(n<2)
     return;
    for(p=Head->Next;p!=End;p=p->Next)
     for(k=p->Next;k!=End;k=k->Next)
     {
      if(p->Sum>k->Sum)
      {
       Goodsmessage::Swap(p,k);
      }
     }
    Max_Min();
    out.open("最值成绩.txt");
    for(Goods *q=Head->Next;q!=End;q=q->Next)
    {
    out<<"编号:"<<q->num<<"\t姓名:"<<q->name<<"\t数学:"<<q->Math<<"\t英语:"<<q->English<<"\tC语言:"<<q->C<<"\t体育:"<<q->Sport<<"\t总成绩:"<<q->Sum<<'\n';
 }
    out.close();
    cout<<"保存信息成功"<<endl;
    cout <<"完成!"<<endl;
    getch();
    return;
   }
  
   case 2:
   {
    system("cls");
    Goods *p=NULL,*p1=NULL,*k=NULL;
    int n=Goodsmessage::ListCount();
    if(n<2)
     return;
 for(p=Head->Next;p!=End;p=p->Next)
     for(k=p->Next;k!=End;k=k->Next)
     {
      if(p->Sum>k->Sum)
      {
       Goodsmessage::Swap(p,k);
      }
     }
     great();
    cout<<"保存信息成功"<<endl;
    cout <<"完成!"<<endl;
    getch();
    return;
   }
  
   case 3:
   {
    system("cls");
    Goods *p=NULL,*p1=NULL,*k=NULL;
    int n=Goodsmessage::ListCount();
    if(n<2)
     return;
    for(p=Head->Next;p!=End;p=p->Next)
     for(k=p->Next;k!=End;k=k->Next)
     {
      if(p->Sum>k->Sum)
      {
       Goodsmessage::Swap(p,k);
      }
     }
    Display();
    out.open("总分排名.txt");
    for(Goods *q=Head->Next;q!=End;q=q->Next)
    out<<"编号:"<<q->num<<" 姓名:"<<q->name<<" 总成绩:"<<q->Sum<<'\n';
    out.close();
    cout<<"保存信息成功"<<endl;
    cout <<"排序完成!"<<endl;
    getch();
    return;
   }
  
   case 4:
   {
    system("cls");
    Goods *p=NULL,*p1=NULL,*k=NULL;
    int n=Goodsmessage::ListCount();
    if(n<2)
     return;
 for(p=Head->Next;p!=End;p=p->Next)
     for(k=p->Next;k!=End;k=k->Next)
     {
      if(p->Sum>k->Sum)
      {
       Goodsmessage::Swap(p,k);
      }
     }
     Fail();
    cout<<"保存信息成功"<<endl;
    cout <<"完成!"<<endl;
    getch();
    return;
   }
  }
}
 
void Goodsmessage::Average()//平均数函数
{
  showMenu(3);
  int x;
  cin>>x;
  switch(x)
  {
   case 1: AverM();return;
   case 2: AverE();return;
   case 3: AverC();return;
   case 4: AverS();return;
 }
}
 
void Goodsmessage::Save()//保存到文件中
{
  out.open("stuf.txt");
  for(Goods *p=Head->Next;p!=End;p=p->Next)
   out<<p->num<<"\t"<<p->name<<"\t"<<p->Math<<"\t"<<p->English<<"\t"<<p->C<<"\t"<<p->Sport<<"\t"<<p->Sum<<"\t"<<'\n';
  
   out.close();
   cout<<"保存信息成功"<<endl;
}
 
int main()
{
  cout << "\t\t"<<endl;
  for(int i=0;i<3;i++)
  cout<<"\t\t━*\t\t\t\t\t\t━*"<<endl;cout<<"\t\t━*━*━*━*━*━*━*━*━*欢迎使用本系统**━*━*━*━*━*━*━*━*"<<endl;
  for(int i=0;i<3;i++)
  cout<<"\t\t━*\t\t\t\t\t\t━*"<<endl;
  Goodsmessage Grade;
  cout<<"\t\t\t\t按任意键开始……";
  getch();
  int x;
  bool quit =false;
  while(!quit)
 
  {
   Grade.showMenu(1);
   cin>>x;
   switch(x)
   {
   case 0:{quit=true;break;}
   case 1:{Grade.AddItem();break;}
   case 2:{Grade.Display();break;}
   case 3:{Grade.Paixu();break;}
   case 4:{Grade.Average();break;}
   case 5:{Grade.Save();break;}
   }
  }
  return 0;
}

 

摘 要 高校学生成绩管理工作是高等教育中的一个极为重要的环节,是院校学生管理的基础。面对种类繁多的数据和报表,手工处理方式已经很难跟上现代化管理的步伐,传统的文件管理方式进行成绩管理,效率很低,耗时费力,容易出错,安全性也存在问题。特别是在查询上,由于文件过多,带来很多不便。随着计算机及通讯技术的飞速发展,高等教育对教务管理工作提出了更高的要求。尽快改变传统的管理模式,运用现代化手段进行科学管理。 本设计研究的是基于J2EE的高校成绩管理系统的设计与实现。本系统是基于J2EE开发的成绩管理系统,弥补了人工管理的不足,提高了一定的效率。主要功能包括教师对学生成绩的记录,生成总评成绩,成绩单的提交。学生查询相关的成绩信息。管理员对学生、教师,课程、班级进行综合管理。该系统为教务处人员提供了强大的成绩管理功能,为教师提供了对平时成绩和期末成绩方便的管理,为学生提供了一个方便快捷的查询功能。本设计的开发工具使用MyEclipse,数据库使用的MySQL,框架是struts整合hibernate。 关键词:J2EE; 成绩管理; MySQL; MyEclipse Abstract College student grade management is a very important aspect of higher education,is the foundation of college students management. Faced with a wide variety of data and statements, the manual processing methods have been difficult to keep up with the pace of modern management, the traditional document management about grade management, is inefficient, time-consuming effort, error-prone, and also existing security issues. Because too many documents, it brings a lot of inconvenience in the query. With the computer and the rapid development of communication technology, higher education must meet a higher demand. We should change the traditional mode of management and use modern means of scientific management as soon as possible. The design based on J2EE technology mainly research about Implementation of grade management system of universities. The system is based on J2EE platform, cover the deficiencies of manual management, and improve the efficiency of management. Main features including: teachers record the grade of students in the term examines, generate the report card to examine. Students can query their information at any time with this system. Administrator can manage the students, teachers, curriculum, classes together. The system for the Registry staff with a powerful performance management capabilities, provide teachers with the usual results and final results for the management, provide students with a convenient and efficient enquiry function. The development tools is MyEclipse, database is MySQL, integrated framework is struts and hibernate. Key words: J2EE; Grade Management; MySql; MyEclipse 目 录 Abstract II 1 绪论 1 1.1高校学生成绩管理系统实施的背景分析 1 1.2选题的目的及意义 1 2 J2EE平台及其支撑技术 3 2.1 J2EE平台 3 2.1.1 J2EE简介 3 2.1.2 JSP技术 5 2.1.3 Servlet技术 7 2.1.4 EJB技术 8 2.1.5 J2EE发展趋势 9 2.2 MVC模式介绍 10 2.3 Struts框架介绍 14 2.4 Hibernate框架介绍 16 3 基于J2EE技术平台的学生成绩管理分析 18 3.1系统可行性分析. 18 3.1.1技术可行性 18 3.1.2经济可行性 18 3.1.3运行可行性 18 3.2系统需求分析 18 3.3系统整体说明 19 3.4系统模块的功能概述 19 4 系统总体设计 20 4.1.系统结构图 20 4.1.1包组织结构图 20 4.3数据流程图设计 21 4.4.1 E-R图 22 4.3主要功能模块的设计 22 4.2.1用户登录模块设计 22 4.2.2管理员管理模块设计 23 4.2.3教师成绩录入和修改模块设计 23 4.2.4学生管理模块设计 23 5 基于J2EE技术平台的系统详细设计 24 5.1数据库详细设计 24 5.1.1 数据库需求分析 24 5.1.2 数据库概念结构设计 25 5.1.3 数据库逻辑结构设计 26 5.1.4 数据库结构的实现 28 5.1.5数据库模型 30 6 系统编码与测试 31 6.1系统编码说明 31 6.1.1系统配置文件 31 6.1.2系统运行效果图示. 35 6.1.3系统主要功能模块详细实现 40 6.1.3.1管理员管理模块详细介绍 40 6.1.3.2管理员管理模块代码说明 40 6.2 系统开发环境的搭建 47 6.2.1软件环境的配置 47 6.2.2硬件环境的配置 47 6.3系统性能测试 47 6.3.1安全性测试 47 6.3.2稳定性测试 47 7 总结与展望 48 7.1总结 48 7.2展望 48 参考文献: 49 致谢 49
一、课程设计题目 ① 基本要求题目:矩阵乘法。 ② 综合训练:学生成绩管理系统 二、设计要求 矩阵乘法:编写一个函数实现矩阵A(2行3列)与矩阵B 相乘(3行2列),乘积放在C数组中。在主函数中输入相乘的两数组,并输出结果。 学生成绩管理:(结构体数组、函数、指针、算法、流程结构及文件等的综合应用) 程序说明:有N个学生,每个学生的数据包含学号(不重复)、姓名、三门课的成绩及平均成绩,试设计一学生成绩管理系统,使之能提供以下功能: (1)主菜单 (2)各菜单项功能 ① 成绩录入:输入学生的学号、姓名及三门课的成绩; ② 成绩查询:(至少一种查询方式)。  按学号查询学生记录。  查询不及格学生的记录。 ③成绩统计:  计算学生的平均分;  根据学生的平均分高低,对学生的数据进行排序后输出;  对学生单科成绩排序,输出学生姓名与该科成绩; ④退出系统:退出整个系统(即主菜单)。 (3)结构体数组: #define N 30struct student {int num; /* 定义学号*/ char name[20]; /* 定义姓名*/ float score[3]; /* 定义存贮三门课成绩的数组*/ float average; /* 定义平均成绩*/ };struct student stu[N];  /* 定义结构体数组,存贮多个学生的记录*/ 三、数据结构设计描述 系统功能描述 1能够输入学生的学号、姓名、三科成绩并且计算出平均成绩。 2能够以表格的形式输出学生记录 3能够按照学生三科的平均成绩进行排序 4能够按照学生的单科成绩进行排序 5能够按照学号查询学生记录 6往表中插入学生记录 7从表中删除学生记录 8存储记录到文件中 9从文件中读取记录 10退出 数据字典 1数据流条目 数据流名称:全部记录 别名:无 简述:最新更新后所有关于学生成绩的记录 来源:数据库 去向:加工“记录筛选” 数据流量:不限 组成:学号+姓名+SC1+SC2+SC3+平均成绩 数据存储条 数据存储名称:学生成绩记录 别名:无 简述:存放学生所有可供查询的信息 组成:学号+姓名+SC1+SC2+SC3+平均成绩 组织方式:索引文件,以学学号为关键字 查询要求:要求能立即查询 2数据项条目 数据项名称:学号 别名:无 简述:所有学校学生的学号 类型:字符串 3加工条目 加工名:更改的记录 激发条件:学生成绩记录被改动 优先级:普通 输入:新记录 输出:更新数据、数据未改动 加工逻辑:根据现有学生成绩记录 if 新记录旧记录 then 更新数据 else 数据未改动 endif 设计测试流程 1、进入界面 2、输入选项0,回车; 按提示输入数据 3、回到主菜单; 输入选项8,回车; 输入文件名:data,回车; 出现成功提示,则读入文件操作成功。 4、回到主菜单,输入1,回车 每10个暂停显示数据 5、回到主菜单,输入2,回车 出现排序成功信息。 6、回到主菜单,输入3,回车 出现排序成功信息。 7、回到主菜单,输入5,回车 按提示插入一组数据 8、回到主菜单,输入6,回车 按提示输入姓名,删除数据 出现删除成功的信息 9、回到主菜单,输入4,回车 输入学号进行查询 10、回到主菜单,输入1,回车 出现统计信息 11、回到主菜单,输入7,回车 输入result,回车 出现成功写入文件的信息 12、回到主菜单,输入9,回车退出系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值