| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1067 人关注过本帖, 1 人收藏
标题:无聊写了半个学生管理系统,控制台的需要交作业的应该够了
只看楼主 加入收藏
shitcai
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2008-1-17
结帖率:100%
收藏(1)
 问题点数:0 回复次数:7 
无聊写了半个学生管理系统,控制台的需要交作业的应该够了
就只有一点点功能,没有用任何简洁的算法。不过需要交作业的话应该够了,不够的话自己加功能。需要优化的自己优化。
代码在dev-C++和vs2008编译通过。
注释也少啊。
代码如下:
subject.h
程序代码:
//科目类
#include <iostream>
#include <string>

class Subject
{
public:
       Subject();
      
       void Display();                       //   显示信息,科目名称和成绩
      
       void setsjName(std::string sjName);  //    设置科目名称
       std::string getsjName();             //    获取科目名称
       void setRes(float theRes);           //    设置科目成绩
       float getRes();                      //    获取科目成绩
private:
        std::string sjName;    //科目名称字符串
        float theRes;           //科目成绩变量
};
subject.cpp
程序代码:
#include "subject.h"

using namespace std;

Subject::Subject()
{
   sjName="";                 
}

void Subject::setsjName(string sjName)
{
   this->sjName=sjName;
}

string Subject::getsjName()
{
   return  this->sjName;
}

void Subject::setRes(float theRes)
{
   this->theRes=theRes;
}

float Subject::getRes()
{
   return  this->theRes;
}

void Subject::Display()
{
   cout<<getsjName()<<":"<<getRes()<<endl;
}


student.h
程序代码:
//学生类
#include <iostream>
#include <string>
#include "subject.h"



 const int maxJect=5; //最多科目数
class Student
{
public:
      
      
       Student();
      
       void Display();      //显示学生信息
      
       Subject& addRes(float res); //添加学生成绩
       Subject& addJect(std::string ject); //添加科目

       void setstuClass(std::string stuClass); //设置学生班级
       std::string getstuClass();  //获取学生班级
      
       void setstuName(std::string stuName); //设置学生名称
       std::string getstuName(); //获取学生名称
      
       void setSex(std::string sex); //设置学生性别
       std::string getSex(); //获取学生性别
      
       void setstuNumber(int stuNumber);//设置学生学号
       int getstuNumber();//获取学生学生
protected:
          Subject  mSubject[maxJect]; //定义科目类
          int nextJect; //下一个科目名称
          int nextRes;//下一个科目成绩
private:
        std::string stuClass; //学生班级
        std::string stuName;//学生姓名
        std::string sex; //学生性别
        int stuNumber;     //学生学号
     
};

student.cpp
程序代码:
#include "student.h"

using namespace std;


 Student::Student()

 {
  stuNumber=nextRes=nextJect=0;

 }

 Subject& Student::addRes(float res)

 {
  if (nextRes >= maxJect) {
  cerr << "越界错误" << endl;
  throw exception();
  }
  Subject& theSubject=mSubject[nextRes++];
  theSubject.setRes(res);
  return theSubject;     

 }


 Subject& Student::addJect(string ject)

 {
     if (nextJect >= maxJect) {
         cerr << "越界错误" << endl;
         throw exception();
     }
     Subject& theSubject=mSubject[nextJect++];
     theSubject.setsjName(ject);
     return theSubject;     

 }


 void Student::setstuClass(string stuClass)

 {
      this->stuClass=stuClass;

 }


 string Student::getstuClass()

 {
      return stuClass;

 }


 void Student::setstuName(string stuName)

 {
     this->stuName=stuName; 

 }


 string Student::getstuName()

 {
      return stuName;

 }


 void Student::setSex(string sex)

 {
    
     this->sex=sex;

 }


 string Student::getSex()

 {
      return sex;

 }


 void Student::setstuNumber(int stuNumber)

 {
      this->stuNumber=stuNumber;

 }


 int Student::getstuNumber()

 {
      return stuNumber;

 }


 void Student::Display()

 {
      cout<<getstuClass()<<"  *   "<<getstuName()<<"  *   "<<getSex()<<"  *   "<<getstuNumber()<<endl;
      for (int i=0;i<nextJect;i++)
      {
        cout<<mSubject[i].getsjName()<<":"<<mSubject[i].getRes()<<endl;
      }
     

 }   

database.h
程序代码:
#include <iostream>
#include <string>
#include "student.h"

using namespace std;

namespace mydb{


 const int maxStu=100; /*最多学生数量*/

class Database
{
public:
    Database();
    Student& addStudent(string stuClass,string stuName,string sex,int stuNumber); //添加一个学生
    Student& InitJect(int i,string ject); //初始化科目
    Student& AddRes(int i,float res); 

    Student& getStudent(string stuName);    //通过姓名查询学生
    Student& getStudent(int stuNumber);     //通过学号查询学生

    void DisPlayStu(string stuName);
    void DisPlayStu(int stuNumber);

    /*void delStudent(string stuName);*/
    void delStudent(int stuNumber);

    bool IsStuNumber(int stuNumber);
    void displayall();  //显示所有学生信息,包括成绩
private:
    Student  mStudent[maxStu];
    int nextStu;
    int nextDbRes;
    int nextDbJect;
    int cDbRes;
    int cDbJect;
    int stuplase;//学生在链表的位置
};
}
database.cpp
程序代码:
#include "database.h"

using namespace mydb;

Database::Database()
{
    nextDbRes=nextDbJect=nextStu=0;
    cDbRes=0;
    cDbJect=0;
}
Student& Database::addStudent(string stuClass,string stuName,string sex,int stuNumber)
{
    if (nextStu >= maxStu) {
        cerr << "达到人数上限"  << endl;
        throw exception();
    }
    Student& theStudent=mStudent[nextStu++];
    theStudent.setstuClass(stuClass);
    theStudent.setstuName(stuName);
    theStudent.setSex(sex);
    theStudent.setstuNumber(stuNumber);
    return theStudent; 
}
Student& Database::AddRes(int i,float res)
{
    if (nextDbRes >= i&&nextDbRes>=maxJect) {
        cerr << "达到科目上限"  << endl;
        throw exception();
    }
    if (cDbRes==i)
    {
        nextDbRes++;
        cDbRes=0;
    }
    cDbRes++;
    Student& theStudent=mStudent[nextDbRes];
    theStudent.addRes(res);
    return theStudent;
}
Student& Database::getStudent(string stuName)
{
    for (int i=0;i<maxStu;i++)
    {
        if (mStudent[i].getstuName()==stuName)
        {
            stuplase=i;
           return mStudent[i];
        }
    }
    throw exception();
}
Student& Database::getStudent(int stuNumber)
{
    for (int i=0;i<maxStu;i++)
    {
        if (mStudent[i].getstuNumber()==stuNumber)
        {
            stuplase=i;
           return mStudent[i];
        }
    }
    throw exception();
}
void Database::DisPlayStu(string stuName)
{
    getStudent(stuName).Display();
}
void Database::DisPlayStu(int stuNumber)
{
    getStudent(stuNumber).Display();
}
void Database::delStudent(int stuNumber)
{
    getStudent(stuNumber);
    if (stuplase==nextStu)
    {
        nextStu--;
    }
    else
    {
        for (int i=stuplase;i<nextStu;i++)
        {
            mStudent[i]=mStudent[i+1];
        }
        nextStu--;
    }
}
//void Database::delStudent(string stuName)
//{
//    getStudent(stuName);
//    for (int i=stuplase;i<maxStu;i++)
//    {
//        mStudent[i]=mStudent[i+1];
//    }
//    nextStu--;
//}
Student& Database::InitJect(int i,string ject)
{
    if (nextDbJect >= i&&nextDbJect>=maxJect) {
        cerr << "达到科目上限"  << endl;
        throw exception();
    }
    if (cDbJect==i)
    {
        nextDbJect++;
        cDbJect=0;
    }
    cDbJect++;
    Student& theStudent=mStudent[nextDbJect];
    theStudent.addJect( ject);
    return theStudent;
}

bool Database::IsStuNumber(int stuNumber)
{
    for (int i=0;i<maxStu;i++)
    {
        if (mStudent[i].getstuNumber()==stuNumber)
        {
            return false;
        }
    }
    return true;
}
void Database::displayall()
{
    cout<<"**班级******姓名******性别******学号**"<<endl;
    for (int i=0;i<nextStu;i++)
    {
        mStudent[i].Display();
    }
}
main.cpp
程序代码:
#include <cstdlib>
#include <iostream>
#include "database.h"

using namespace std;
using namespace mydb;

int gNum; //设置科目数量的全局变量
string className; //班级名称
string initJ[maxJect];//初始化科目

int displayMenu(); //显示操作菜单
int  cerrcin(int& istr);
bool addStudent(Database& adb);//增加学生
void delStudent(Database& adb);
void addRes(Database& adb);
void InitJect(Database& adb);
void getStudentNum(Database& adb);
void getStudentName(Database& adb);

int main(int argc, char *argv[])
{
   Database studentDB;
   bool done=false;

   cout<<"欢迎使用文字版本学生成绩管理系统!\n请输入您所在的班级的名称\n>";
   cin>>className;
   InitJect(studentDB);

 
   while (!done)
   {
       int selection=displayMenu();
       switch(selection)
       {
       case 1:
           if ( addStudent(studentDB))
           {
               addRes(studentDB);
           }
           break;
       case 2:
           delStudent(studentDB);
           break;
       case 3:
           studentDB.displayall();
           break;
       case 4:
            getStudentNum(studentDB);
           break;
       case 5:
            getStudentName(studentDB);
           break;
       case 6:
           cout<<"输入班级名称"<<endl;
           cin>>className;
           InitJect(studentDB);
           break;
       case 0:
           done=true;
           break;
       default:
           cerr<<"未知错误"<<endl;
       }
   }
   
    system("PAUSE");
    return EXIT_SUCCESS;
}
void InitJect(Database& adb)
{
    int num;
    cout<<"请初始化科目\n输入科目数量,最多不能超过5科"<<endl;
    while(cerrcin(num))
    {

            if (num>maxJect)
            {
                cout<<"请重新输入,最多不能超过5科"<<endl;
                continue;
            }
            else
            break;
    }

     gNum=num;
     
     int j;
     string ject;
     for (int i=0;i<num;i++)
     {
         cout<<"输入第"<<i+1<<"科目的名称"<<endl;
         while(cin>>ject)
         {
          for (j=0;j<i;j++)
           {
           if(initJ[j]==ject)
             {
               cout<<"有相同的科目,请重新输入"<<endl;
               break;
             }
           }
           if(j==i)
           {
              j=0;
              initJ[i]=ject;
              break;
           } 
         
         }
     }

 
}
int displayMenu()
{
    int selection;
    cout << endl;
    cout << "学生成绩管理系统" << endl;
    cout << "-----------------" << endl;
    cout << "1) 添加一个学生" << endl;
    cout << "2) 删除一个学生"  << endl;
    cout << "3) 显示所有学生信息"  << endl;
    cout << "4) 通过学号查询学生信息"  << endl;
    cout << "5) 通过姓名查询学生信息"  << endl;
    cout << "6) 换班级"  << endl;
    cout << "0) 退出" << endl;
    cout << endl;
    cout << "---> ";

     cerrcin(selection);

    return selection;
}

bool addStudent(Database& adb)
{
    string stuName;
    string sex;
    int stuNumber;    

    cout<<"输入姓名"<<endl;
    cin>>stuName;
    cout<<"输入性别"<<endl;
    while(cin>>sex)
    {
        if (sex==""||sex=="")
        {
            break;
        }
        cout<<"输入错误,只能输入‘男’或者‘女’\n";
    }
    cout<<"输入学号"<<endl;
    while(cerrcin(stuNumber))
    {
            if (!adb.IsStuNumber(stuNumber))
            {
                cout<<"已经存在这个学号了,请重新输入"<<endl;
                continue;
            }
            else
            break;
    }
    try {
        adb.addStudent(className,stuName,sex,stuNumber);
    } catch (std::exception ex) {
        cerr << "请删除学生" << endl;
        return false;
    }
    return true;
}

void addRes(Database& adb)
{
    float res;
    string ject;
    for (int i=0;i<gNum;i++)
    {
        ject="a";
        cout<<"输入 ’"<<initJ[i]<<"‘科目的成绩"<<endl;
        while(cin >> res,!cin.eof())
        {
            if (cin.bad())
            {
                cerr<<"输入出现严重错误,将退出程序";
                exit(0);
            }
            if (cin.fail())
            {
                cerr<<"输入错误重新输入,只能输入数字\n";
                cin.clear();
                cin.sync();
                continue;
            }
            if (cin.good())
            {
                if (res<0)
                {
                    cout<<"请重新输入,没有负数分数"<<endl;
                    continue;
                }
                break;
            }
        }
        adb.InitJect(gNum,initJ[i]);
        adb.AddRes(gNum,res);
    }

}

void getStudentNum(Database& adb)
{
    int studentNumber;
    cout <<"输入学生学号";
    cerrcin(studentNumber);
    try {
        adb.DisPlayStu(studentNumber);
    } catch (std::exception ex) {
        cerr << "没有这个学生" << endl;
}
}
void getStudentName(Database& adb)
{
    string studentName;
    cout <<"输入学生姓名";
    cin >> studentName;
    try {
        adb.DisPlayStu(studentName);
    } catch (std::exception ex) {
        cerr << "没有这个学生" << endl;
}
}
void delStudent(Database& adb)
{
    int studentNumber;
    cout <<"输入学生学号";
    cerrcin(studentNumber);
    try {
        adb.delStudent(studentNumber);
    } catch (std::exception ex) {
        cerr << "没有这个学生" << endl;
    }
}
int cerrcin(int& istr)
{
    while(cin >> istr,!cin.eof())
    {
        if (cin.bad())
        {
            cerr<<"输入出现严重错误,将退出程序";
            exit(0);
        }
        if (cin.fail())
        {
            cerr<<"输入错误重新输入,只能输入数字\n--->";
            cin.clear();
            cin.sync();
            continue;
        }
        if (cin.good())
        {
            break;
        }
    }
    return 1;
}
顺便上传一个附件:可以用dev-c++4.9.9.2直接打开编译......
学生成绩管理系统.rar (128.28 KB)





搜索更多相关主题的帖子: 控制台 作业 系统 学生 管理 
2010-07-02 18:54
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
very good!

南国利剑
2010-07-03 03:17
qingmeisu200
Rank: 4
等 级:业余侠客
帖 子:113
专家分:215
注 册:2010-3-16
收藏
得分:0 
支持

我能!
2010-07-03 10:20
zglcx123
Rank: 2
等 级:论坛游民
帖 子:60
专家分:10
注 册:2007-7-2
收藏
得分:0 
学什么课的,我看到论坛里,到处都是学生信息管理系统
2010-07-03 12:36
见于心
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-7-13
收藏
得分:0 
恩啊  必须要交的啊  都不会呢   无从下手啊  
2010-07-15 14:20
lillew
Rank: 2
等 级:论坛游民
帖 子:12
专家分:17
注 册:2010-7-16
收藏
得分:0 
大牛~
2010-07-16 15:17
gq198718
Rank: 4
等 级:业余侠客
威 望:1
帖 子:86
专家分:200
注 册:2010-6-6
收藏
得分:0 
........................
2010-07-20 09:22
ozc2701
Rank: 1
等 级:新手上路
帖 子:12
专家分:1
注 册:2010-5-14
收藏
得分:0 
研究下。。。。
2010-07-20 14:52
快速回复:无聊写了半个学生管理系统,控制台的需要交作业的应该够了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042245 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved