高校学籍管理系统C++程序设计.docx

上传人:b****8 文档编号:11182086 上传时间:2023-02-25 格式:DOCX 页数:34 大小:20.90KB
下载 相关 举报
高校学籍管理系统C++程序设计.docx_第1页
第1页 / 共34页
高校学籍管理系统C++程序设计.docx_第2页
第2页 / 共34页
高校学籍管理系统C++程序设计.docx_第3页
第3页 / 共34页
高校学籍管理系统C++程序设计.docx_第4页
第4页 / 共34页
高校学籍管理系统C++程序设计.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

高校学籍管理系统C++程序设计.docx

《高校学籍管理系统C++程序设计.docx》由会员分享,可在线阅读,更多相关《高校学籍管理系统C++程序设计.docx(34页珍藏版)》请在冰豆网上搜索。

高校学籍管理系统C++程序设计.docx

高校学籍管理系统C++程序设计

VC++课程设计---高校学籍管理系统

源程序

一、课程设计题目:

学籍管理系统

二、目的与要求:

1、目的:

(1)要求学生达到熟练掌握C++语言的基本知识和技能;

(2)基本掌握面向对象程序设计的基本思路和方法;

(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。

2、基本要求:

(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;

(2)要求在设计的过程中,建立清晰的类层次;

(3)在系统的设计中,至少要用到面向对象的一种机制。

3、创新要求:

在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。

4、写出设计说明书

三、设计方法和基本原理:

1、功能要求

要求完成以下功能:

1)能够从屏幕上读取一个学生的信息并将信息存入到数据文件中。

2)能够将指定的信息从文件中删除。

3)能够按编号、姓名对学生的信息进行检索并将检索结果显示在屏幕上。

4)可以统计全部学生的总成绩,及其在班上的排名。

5)能够统计各科的平均成绩及及格率。

6)要求有错误提示功能,例如性别只能输入男女,输入错误提示重新输入。

7)如果检索不到相应的信息应提示用户。

2、问题的解决方案:

根据系统功能要求,可以将问题解决分为以下步骤:

a)写出需求分析(做什么)

b)分析系统中的各个实体之间的关系及其属性和行为;

c)根据问题描述,设计系统的类层次;

d)完成类层次中各个类的描述(包括属性和方法);

e)完成类中各个成员函数的定义;

f)用户界面的设计

g)分析系统功能模块(系统流程图)

h)代码编写

i)功能调试;

j)完成系统总结报告以及系统使用说明书。

源程序代码如下:

[code]/*

course.dat-课程列表(只读)

student.dat-学生信息

*/

#include

#include

#include

#include

classCOURSE  //课程类

{

private:

  staticintcoursenum;        //课程数量

  staticchar(*coursename)[20];  //课程名称

public:

  staticvoidLoadCourse()  //从文件COURSE.DAT装入课程信息

  {

  ifstreamf("course.dat");

  f>>coursenum;

  coursename=newchar[coursenum][20];

  for(inti=0;  i

    f>>coursename;

  f.close();

  }

  friendclassSTUDENT;

  friendclassCOLLEGE;

};

intCOURSE:

:

coursenum=0;

char(*COURSE:

:

coursename)[20]=0;

classSTUDENT//学生类

{

private:

  charnum[20];  //学号

  charname[20];  //姓名

  charsex;    //性别

  charcname[20];//班级

  float*grade;    //成绩(动态数组)

  floatsum;      //各科总分

  STUDENT*next;

public:

  STUDENT()

  {

  grade=newfloat[COURSE:

:

coursenum];

  next=0;

  }

  ~STUDENT()

  {

  delete[]grade;

  }

  voidInput()

  {

  sum=0;

  cout<<"学号:

";  cin>>num;    //输入学生一般信息

  cout<<"姓名:

";  cin>>name;

  cout<<"性别:

";  cin>>sex;  sex=toupper(sex);

  cout<<"班级:

";  cin>>cname;

  for(inti=0;  i

:

coursenum;  i++)  //输入学生各科成绩

  {

    cout<

:

coursename<<"成绩:

";  cin>>grade;

    sum+=grade;  //计算总分

  }

  }

  voidInput(ifstream&f)

  {

  f>>num;

  f>>name;

  f>>sex;  sex=toupper(sex);

  f>>cname;

  for(inti=0;  i

:

coursenum;  i++)  //输出学生各科成绩,总分

  {

    f>>grade;

  }

  f>>sum;

  }

  staticvoidOutputT()

  {

  cout<

  for(inti=0;  i

:

coursenum;  i++)

    cout<

:

coursename;

  cout<

  }

  voidOutput()

  {

  cout<

  cout<

  cout<

  cout<

  for(inti=0;  i

:

coursenum;  i++)  //输出学生各科成绩,总分

  {

    cout<

  }

  cout<

  }

  voidOutput(ofstream&f)

  {

  f<

  f<

  f<

  f<

  for(inti=0;  i

:

coursenum;  i++)  //输出学生各科成绩,总分

  {

    f<

  }

  f<

  }

  friendclassCOLLEGE;

};

classCOLLEGE  //学校类

{

private:

  STUDENT*SL;  //学生链表

  voidClear();

  intFind(char*ID,STUDENT**p1,STUDENT**p2);

  voidCOLLEGE:

:

ValueS2ToS1(STUDENT&s1,STUDENT&s2);

public:

  COLLEGE()

  {

  COURSEadCourse();  //装入课程信息

  SL=newSTUDENT();    //创建学生链表表头结点

  }

  ~COLLEGE()

  {

  STUDENT*p=SL;  //删除学生链表各个结点

  while(p)

  {

    SL=p->next;

    deletep;

    p=SL;

  }

  }

  

  voidSet();        //课程设置(增,删,改,存)

  voidAdd();        //增加学生

  voidDelete();      //删除学生

  voidModify();    //修改学生

  voidQuery();    //查询学生信息(按姓名,学号)

  voidPrint();    //输出所有学生信息

  voidStat();      //统计课程平均成绩,课程合格率

  voidSumSort();    //按总分排名(高->低)

  voidNumSort();    //按学号排序(低->高)

  voidSave();      //学生数据存盘

  voidLoad();      //装入学生数据

};

//增加学生

voidCOLLEGE:

:

Add()        

{

  cout<<"\n**增加学生信息**\n";

  STUDENT*p=newSTUDENT;    //创建1个新学生结点

  

  STUDENT*p2=SL;        //查找学生链表表尾结点

  while(p2->next)p2=p2->next;

  p2->next=p;            //链接学生结点

  p->Input();            //输入学生信息

}

//查找学生结点(返回1-找到,0-未找到.结点指针由p1返回,p2为前看指针)

intCOLLEGE:

:

Find(char*ID,STUDENT**p1,STUDENT**p2)  

{

  *p1=SL->next;

  *p2=SL;

  while(*p1)

  {

  if(strcmp((*p1)->num,ID)==0)

    break;  //找到

  else

  {

    *p2=*p1;  //继续查找

    *p1=(*p1)->next;

  }

  }

  return*p1?

1:

0;

}

//删除学生

voidCOLLEGE:

elete()      

{

  cout<<"\n**删除学生**\n";

  charNo[20];

  STUDENT*p1,*p2;

  

  cout<<"学号:

";  cin>>No;

  if(!

Find(No,&p1,&p2))

  {

  cout<<"指定的学生没有找到!

\n";

  }

  else

  {

  p2->next=p1->next;  //连接

  deletep1;

  cout<<"正确删除!

\n";

  }

}

//修改学生

voidCOLLEGE:

:

Modify()      

{

  cout<<"\n**修改学生**\n";

  charNo[20];

  STUDENT*p1,*p2;

  

  cout<<"学号:

";  cin>>No;

  if(!

Find(No,&p1,&p2))

  {

  cout<<"指定的学生没有找到!

\n";

  }

  else

  {

  p1->Output();  //输出原来的学生信息(做提示)

  p1->Input();  //输入此学生信息(更新)

  cout<<"修改完成!

\n";

  }

}

/*承上*/

//查询学生信息

//按学号或姓名查找,如果找到显示该学生,如果未找到,也给出相应提示.

voidCOLLEGE:

uery()  

{

  cout<<"\n**查询学生**\n";

  STUDENT*p=SL->next;

  charNo[20];

  charName[20];

  charch;

  do

  {

  cout<<"按学号查1,按姓名查2:

";  cin>>ch;

  }while(ch!

='1'&&ch!

='2');

  intflag=0;  //未找到0,找到1

  if(ch=='1')  //按学号查

  {

  cout<<"学号:

";  cin>>No;

  while(p)

    if(strcmp(p->num,No)==0)

    {

      flag=1;  break;

    }

    else

      p=p->next;

  }

  else  //按姓名查

  {

  cout<<"姓名:

";  cin>>Name;

  while(p)

    if(strcmp(p->name,Name)==0)

    {

      flag=1;  break;

    }

    else

      p=p->next;

  }

  if(flag==1)  //如果找到,显示此同学信息

  {

  p->OutputT();

  p->Output();

  }

  else  //否则给出未找到提出

  cout<<"指定的学生没有找到!

\n";

}

//输出所有学生信息

voidCOLLEGE:

rint()    

{

  cout<<"\n**输出学生信息**\n";

  STUDENT*p=SL->next;

  

  STUDENT:

:

OutputT();  //输出标题

  while(p)  //循环输出各位学生信息

  {

  p->Output();

  p=p->next;

  }

}

//学生数据存盘

voidCOLLEGE:

:

Save()      

{

  ofstreamf("student.dat");

  STUDENT*p=SL->next;

  while(p)  //遍历学生链表

  {

  p->Output(f);  //写入文件

  p=p->next;    

  }

  f.close();

  cout<<"\n**保存数据完成!

**\n";

}

voidCOLLEGE:

:

Clear()

{

  STUDENT*p=SL->next;

  while(p)

  {

  SL->next=p->next;

  deletep;

  p=SL->next;

  }

}

//装入学生数据

voidCOLLEGEad()      

{

  Clear();

  ifstreamf("student.dat");

  STUDENT*p=SL;

  STUDENT*p2=newSTUDENT;

  p2->Input(f);

  while(f)

  {

  p->next=p2;

  p=p->next;

  p2=newSTUDENT;

  p2->Input(f);

  }

  deletep2;

  f.close();

}

//统计课程平均成绩,课程合格率

voidCOLLEGE:

:

Stat()      

{

  float*sum=newfloat[COURSE:

:

coursenum];  //各科平均成绩

  float*pass=newfloat[COURSE:

:

coursenum];  //各科合格人数,/n=>合格率

  intn=0;  //学生人数

  for(inti=0;  i

:

coursenum;  i++)

  {

  STUDENT*p=SL->next;  n=0;

  sum=pass=0;

  while(p)  //遍历学生链表

  {

    n++;                  //人数

    sum=sum+p->grade;  //某科总分

    if(p->grade>=60)pass++;  //某科合格人数

    p=p->next;

  }

  }

  

  for(i=0;  i

:

coursenum;  i++)

  {

  cout<

:

showpoint);

  cout<

:

coursename<<"平均:

"<

"<

  }

  delete[]sum;

  delete[]pass;

}

voidCOLLEGE:

:

ValueS2ToS1(STUDENT&s1,STUDENT&s2)

{

  strcpy(s1.num,s2.num);  //学号

  strcpy(s1.name,s2.name);  //姓名

  s1.sex=s2.sex;    //性别

  strcpy(ame,ame);  //班级

  for(inti=0;  i

:

coursenum;  i++)

  s1.grade=s2.grade;  //成绩指针(动态数组)

  s1.sum=s2.sum;      //各科总分

}

//按总分排名(采用选择法排序),总分高->低

voidCOLLEGE:

:

SumSort()    

{

  STUDENT*p1,*p2;

  p1=SL->next;

  while(p1)

  {

  p2=p1->next;

  while(p2)

  {

    if(p2->sum>p1->sum)

    {

      STUDENTt;

      ValueS2ToS1(t,*p1);

      ValueS2ToS1(*p1,*p2);

      ValueS2ToS1(*p2,t);

    }

    p2=p2->next;

  }

  p1=p1->next;

  }

}

voidCOLLEGE:

:

NumSort()  //按学号排序(低->高)

{

  STUDENT*p1,*p2;

  p1=SL->next;

  while(p1)

  {

  p2=p1->next;

  while(p2)

  {

    if(strcmp(p2->num,p1->num)<0)  //只要修改这里,其余同SumSort

    {

      STUDENTt;

      ValueS2ToS1(t,*p1);

      ValueS2ToS1(*p1,*p2);

      ValueS2ToS1(*p2,t);

    }

    p2=p2->next;

  }

  p1=p1->next;

  }

}

voidmain()

{

  charch;

  COLLEGEc;  //定义大学对象

  cout.setf(ios:

:

left);

  //显示主菜单,接受选择,并分支调用大学类的相应功能的成员函数

  do

  {

  cout<<"\n☆☆高校学籍管理系统☆☆\n";

  cout<<"1-增加学生\n";

  cout<<"2-删除学生\n";

  cout<<"3-修改学生\n";

  cout<<"4-查询学生\n";

  cout<<"5-输出学生信息\n";

  cout<<"6-综合统计(课程平均成绩,课程合格率)\n";

  cout<<"7-总分排序\n";

  cout<<"8-学号排序\n";

  cout<<"S-数据存盘\n";

  cout<<"L-数据装入\n";

  cout<<"Q-退出\t请选择(1-8,SLQ):

";

  cin>>ch;  ch=toupper(ch);

  switch(ch)

  {

    case'1':

  c.Add();  break;

    case'2':

  c.Delete();break;

    case'3':

  c.Modify();break;

    case'4':

  c.Query();break;

    case'5':

  c.Print();  break;

    case'6':

  c.Stat();  break;

    case'7':

  c.SumSort();  break;

    case'8':

  c.NumSort();  break;

    case'S':

  c.Save();  break;

    case'L':

  c.Load();  break;

  }

  }while(ch!

='Q');

}

3、2数据文件

1、course.dat:

3

C++

英语

高数

2、student.dat:

    86101        chenkaijun  M    M8601    77    59    96    232

    86102        zhaowei  F    M8601    55    85    77    217

    86103          wubin    M    M8601    85    87    92    264

    86104          shijun    M    M8601    58    90    85    233

    86105      wangzhuguo    M    M8601    66    70    86    222

3、3运行结果参考

☆☆高校学籍管理系统☆☆

1-增加学生

2-删除学生

3-修改学生

4-查询学生

5-输出学生信息

6-综合统计(课程平均成绩,课程合格率

7-总分排序

8-学号排序

S-数据存盘

L-数据装入

Q-退出请选择(1-8,SLQ)

☆☆高校学籍管理系统☆☆

1-增加学生

2-删除学生

3-修改学生

4-查询学生

5-输出学生信息

6-综合统计

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1