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

高校学籍管理系统C++程序设计
高校学籍管理系统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

class COURSE //课程类

{

private:

static int coursenum; //课程数量

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

public:

static void LoadCourse() //从文件COURSE.DAT装入课程信息 {

ifstream f("course.dat");

f>>coursenum;

coursename=new char[coursenum][20];

for(int i=0; i

f>>coursename;

f.close();

}

friend class STUDENT;

friend class COLLEGE;

};

int COURSE::coursenum=0;

char (*COURSE::coursename)[20]=0;

class STUDENT //学生类

{

private:

char num[20]; //学号

char name[20]; //姓名

char sex; //性别

char cname[20]; //班级

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

float sum; //各科总分

STUDENT *next;

public:

STUDENT()

{

grade=new float[COURSE::coursenum];

next=0;

}

~STUDENT()

{

delete []grade;

}

void Input()

{

sum=0;

cout<<"学号:"; cin>>num; //输入学生一般信息

cout<<"姓名:"; cin>>name;

cout<<"性别:"; cin>>sex; sex=toupper(sex);

cout<<"班级:"; cin>>cname;

for(int i=0; i

{

cout<>grade;

sum+=grade; //计算总分

}

}

void Input(ifstream &f)

{

f>>num;

f>>name;

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

f>>cname;

for(int i=0; i

f>>grade;

}

f>>sum;

}

static void OutputT()

{

cout<

for(int i=0; i

cout<

cout<

}

void Output()

{

cout<

cout<

cout<

cout<

for(int i=0; i

cout<

}

cout<

}

void Output(ofstream &f)

{

f<

f<

f<

f<

for(int i=0; i

f<

}

f<

}

friend class COLLEGE;

};

class COLLEGE //学校类

{

private:

STUDENT *SL; //学生链表

void Clear();

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

void COLLEGE::ValueS2ToS1(STUDENT &s1,STUDENT &s2); public:

COLLEGE()

{

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

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

}

~COLLEGE()

{

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

while(p)

{

SL=p->next;

delete p;

p=SL;

}

}

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

void Add(); //增加学生

void Delete(); //删除学生

void Modify(); //修改学生

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

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

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

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

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

void Save(); //学生数据存盘

void Load(); //装入学生数据

};

//增加学生

void COLLEGE::Add()

{

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

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

STUDENT *p2=SL; //查找学生链表表尾结点 while(p2->next)p2=p2->next;

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

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

}

//查找学生结点(返回1-找到,0-未找到.结点指针由p1返回,p2为前看指针) int COLLEGE::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;

}

//删除学生

void COLLEGE:elete()

{

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

char No[20];

STUDENT *p1,*p2;

cout<<"学号:"; cin>>No;

if(!Find(No,&p1,&p2))

{

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

}

else

{

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

delete p1;

cout<<"正确删除!\n";

}

}

//修改学生

void COLLEGE::Modify()

{

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

char No[20];

STUDENT *p1,*p2;

cout<<"学号:"; cin>>No;

if(!Find(No,&p1,&p2))

{

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

}

else

{

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

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

cout<<"修改完成!\n";

}

}

/*承上*/

//查询学生信息

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

{

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

STUDENT *p=SL->next;

char No[20];

char Name[20];

char ch;

do

{

cout<<"按学号查1,按姓名查2:"; cin>>ch; }while(ch!='1'&&ch!='2');

int flag=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"; }

//输出所有学生信息

void COLLEGE:rint()

{

cout<<"\n** 输出学生信息**\n"; STUDENT *p=SL->next;

STUDENT::OutputT(); //输出标题 while(p) //循环输出各位学生信息 {

p->Output();

p=p->next;

}

}

//学生数据存盘

void COLLEGE::Save()

{

ofstream f("student.dat");

STUDENT *p=SL->next;

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

{

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

p=p->next;

}

f.close();

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

void COLLEGE::Clear()

{

STUDENT *p=SL->next;

while(p)

{

SL->next=p->next;

delete p;

p=SL->next;

}

}

//装入学生数据

void COLLEGEad()

{

Clear();

ifstream f("student.dat");

STUDENT *p=SL;

STUDENT *p2=new STUDENT;

p2->Input(f);

while(f)

{

p->next=p2;

p=p->next;

p2=new STUDENT;

p2->Input(f);

}

delete p2;

f.close();

}

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

void COLLEGE::Stat()

{

float *sum=new float[COURSE::coursenum]; //各科平均成绩

float *pass=new float[COURSE::coursenum]; //各科合格人数,/n=>合格率

int n=0; //学生人数

for(int i=0; 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

{

cout<

cout<

}

delete []sum;

delete []pass;

}

void COLLEGE::ValueS2ToS1(STUDENT &s1,STUDENT &s2) {

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

strcpy(https://www.360docs.net/doc/134968632.html,,https://www.360docs.net/doc/134968632.html,); //姓名

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

strcpy(https://www.360docs.net/doc/134968632.html,ame,https://www.360docs.net/doc/134968632.html,ame); //班级

for(int i=0; i

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

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

}

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

void COLLEGE::SumSort()

{

STUDENT *p1,*p2;

p1=SL->next;

while(p1)

{

p2=p1->next;

while(p2)

{

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

{

STUDENT t;

ValueS2ToS1(t,*p1);

ValueS2ToS1(*p1,*p2);

ValueS2ToS1(*p2,t);

}

p2=p2->next;

}

p1=p1->next;

}

}

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

{

STUDENT *p1,*p2;

p1=SL->next;

while(p1)

{

p2=p1->next;

while(p2)

{

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

STUDENT t;

ValueS2ToS1(t,*p1);

ValueS2ToS1(*p1,*p2);

ValueS2ToS1(*p2,t);

}

p2=p2->next;

}

p1=p1->next;

}

}

void main()

{

char ch;

COLLEGE c; //定义大学对象

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 22 2

3、3运行结果参考

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

1-增加学生

2-删除学生

3-修改学生

4-查询学生

5-输出学生信息

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

7-总分排序

8-学号排序

S-数据存盘

L-数据装入

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

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

1-增加学生

2-删除学生

3-修改学生

4-查询学生

5-输出学生信息

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

7-总分排序

8-学号排序

S-数据存盘

L-数据装入

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

** 输出学生信息**

学号姓名性别班级 C++ 英语高数总分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 ☆☆ 高校学籍管理系统☆☆

1-增加学生

2-删除学生

3-修改学生

4-查询学生

5-输出学生信息

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

7-总分排序

8-学号排序

S-数据存盘

L-数据装入

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

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

1-增加学生

2-删除学生

3-修改学生

4-查询学生

5-输出学生信息

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

7-总分排序

8-学号排序

S-数据存盘

L-数据装入

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

** 输出学生信息**

学号姓名性别班级 C++ 英语高数总分86103 wubin M M8601 85 87 92 264 86104 shijun M M8601 58 90 85 233 86101 chenkaijun M M8601 77 59 96 232 86105 wangzhuguo M M8601 66 70 86 222 86102 zhaowei F M8601 55 85 77 217

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

1-增加学生

2-删除学生

3-修改学生

4-查询学生

5-输出学生信息

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

7-总分排序

8-学号排序

S-数据存盘

L-数据装入

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

Press any key to continun

//查询学生信息

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

{

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

STUDENT *p=SL->next;

char No[20];

char Name[20];

char ch;

do

{

cout<<"按学号查1,按姓名查2:"; cin>>ch;

}while(ch!='1'&&ch!='2');

int flag=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";

}

//输出所有学生信息

void COLLEGE:rint()

{

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

STUDENT *p=SL->next;

STUDENT::OutputT(); //输出标题

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

{

p->Output();

p=p->next;

}

}

//学生数据存盘

void COLLEGE::Save()

{

ofstream f("student.dat");

STUDENT *p=SL->next;

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

{

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

p=p->next;

}

f.close();

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

void COLLEGE::Clear()

{

STUDENT *p=SL->next;

while(p)

{

SL->next=p->next;

delete p;

p=SL->next;

}

}

//装入学生数据

void COLLEGEad()

{

Clear();

ifstream f("student.dat");

STUDENT *p=SL;

STUDENT *p2=new STUDENT; p2->Input(f);

while(f)

{

p->next=p2;

p=p->next;

p2=new STUDENT;

p2->Input(f);

}

delete p2;

f.close();

}

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

相关主题
相关文档
最新文档