c++学生成绩管理系统

代码可通过DevCpp 5.4.1  与 VC 6.0 编译运行,其他编译器未测试. 虽然没有任何实用价值,但在实验要求的逼迫下还是可以学到很多东西.

我想说的是如果有能力的话,在完成要求的前提下,尽可能的将自己的想法用代码完善,哪怕是多么奇葩的想法只要你能实现它,就是有意义的,达到了自己的目的才会体会到编程的快乐,收获的也会更多.并在此感谢,三位在大一给过我帮助的同学…..代码很乱,大牛请绕行..仅供新手参考….

有任何问题欢迎留言,或者联系本人…..

文件介绍:

——main.cpp/主函数的源码

——source.cpp/所有用到的函数代码

——student.cpp/student类的成员函数源码

——student.h/student类的声明

main.cpp/主函数的源码
[php]
#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<windows.h>
#include<fstream.h>
#include<stdio.h>
#include<stdlib.h>
#include"student.h"

/*菜单中的函数声明*/
void menu_input();
void menu_output();
void menu_insert();
void menu_delete();
void menu_modify();
void menu_gradesort();
void menu_search();
void menu_exit();

/*输出的信息*/
void output_menu();
void output_start();

/*选择*/
void choose(char key);

/*常用函数*/
void save();
void instu();
void getdata();

int exit_flag=0;

/*主函数*/
int main()
{
char key;
output_start();
while(1)
{
output_menu();
key=getch();
printf("%c",key);
choose(key);
if(exit_flag) break;
}
printf("\n\n\n");
return 0;
}
[/php]
 

source.cpp/所有用到的函数代码

[php]

#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<windows.h>
#include<fstream.h>
#include<stdio.h>
#include<stdlib.h>
#include"student.h"

/*定义全局变量n 表示学生的当前个数*/
int n;

/*记录退出的全局变量*/
int exit_flag=0;

/*定义数组保存学生信息*/
student stu[100];
char in_num[20],in_name[20],in_sex;
double in_grade[7];

/*开始屏幕输出*/
void output_start()
{
system("title,学生成绩管理系统");
printf("\n\n\n\n");
printf("\t**************************************************************\n");
printf("\t*                                                            *\n");
printf("\t*       C++实训 作业  学生成绩管理系统                       *\n");
printf("\t*         by:liang            版本 v 2.8                     *\n");
printf("\t*                                                            *\n");
printf("\t**************************************************************\n");
printf("\t\t\t\t");
getch();
}

/*输出菜单函数*/
void output_menu()
{
system("cls");
system("color 2f");
printf("\n\n\n\n");
printf("\t**************************************************************\n");
printf("\t*                    学生成绩管理菜单                        *\n");
printf("\t*       1.学生成绩初始化录入                                 *\n");
printf("\t*       2.查看全部学生信息                                   *\n");
printf("\t*       3.插入学生信息                                       *\n");
printf("\t*       4.删除学生信息                                       *\n");
printf("\t*       5.修改学生信息                                       *\n");
printf("\t*       6.按平均成绩排序全部学生                             *\n");
printf("\t*       7.查询学生成绩                                       *\n");
printf("\t*       0.退出学生成绩管理系统                               *\n");
printf("\t**************************************************************\n");
printf("\t  请选择:");
}

/*接收学生信息*/
void instu(int t)
{
char in_num[20],in_name[20],in_sex;            //学生学号 姓名 性别
double in_grade[7];                                //学生各科成绩  平均成绩
printf("+++++++++++++++++++++++++                                                  +++");
printf("\n第%d个学生成绩录入\t+                                                    +\n",t);
printf("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("\t|\n");
printf("\t|—->学生学号:");
scanf("%s",in_num);
printf("\t|\n");
printf("\t|—->学生姓名:");
scanf("%s",in_name);getchar();
printf("\t|\n");
printf("\t|—->学生性别(男F/女M):");
scanf("%c",&in_sex);
stu[t].stu_input(in_num,in_name,&in_sex);
printf("\t|\n");
printf("\t|—->请输入【%s】同学的《面向对象的程序设计》成绩:",in_name);
scanf("%lf",&in_grade[1]);
printf("\t|\n");
printf("\t|—->请输入【%s】同学的《计算机工具软件》成绩:",in_name);
scanf("%lf",&in_grade[2]);
printf("\t|\n");
printf("\t|—->请输入【%s】同学的《微积分》成绩:",in_name);
scanf("%lf",&in_grade[3]);
printf("\t|\n");
printf("\t|—->请输入【%s】同学的《思想道德修养与法律基础》成绩:",in_name);
scanf("%lf",&in_grade[4]);
printf("\t|\n");
printf("\t|—->请输入【%s】同学的《英语》成绩:",in_name);
scanf("%lf",&in_grade[5]);
printf("\t|\n\t|\n");
stu[t].stu_ingrade(in_grade[1],in_grade[2],in_grade[3],in_grade[4],in_grade[5]);

}
/*读取文件中的记录到数组stu中*/
void getdata()
{
char line[80];
char in_num[20],in_name[20],in_sex;            //学生学号 姓名 性别
double in_grade[7],temp;
int i,num=0;
fstream _file("student_data.txt",ios::in);
if(!_file)
{
printf("\n文件打开失败,任意键返回主菜单….");
return;
}

else
{
_file.getline(line,80);
/*读取文件中记录的人数*/
i=21;
while(line[i]>=’0’&&line[i]<=’9′)
{
num=num*10+line[i++]-48;
}
n=num;
/*把文件中的记录保存到数组中*/
//    memset(stu,0,sizeof(stu));
_file.getline(line,80);
_file.getline(line,80);
_file.getline(line,80);
for(i=1;i<=num;i++)
{
_file>>in_num>>in_name>>in_sex>>in_grade[1]>>in_grade[2]>>in_grade[3]>>in_grade[4]>>in_grade[5]>>temp;
stu[i].stu_input(in_num,in_name,&in_sex);
stu[i].stu_ingrade(in_grade[1],in_grade[2],in_grade[3],in_grade[4],in_grade[5]);
}
_file.close();
}

}

/*保存当前信息到文件中*/
void save()
{
int i;
fstream _file("student_data.txt",ios::out);
_file<<‘\t'<<‘\t'<<‘\t'<<‘\t'<<"学生成绩单   共 ("<<n<<") 人"<<endl;
_file<<‘\t'<<"********************************************************************"<<endl;
_file<<‘\t'<<"学号"<<‘\t'<<"姓名"<<‘\t'<<"性别"<<‘\t'<<"程序"<<‘\t'<<"工具"<<‘\t'<<"微积分"<<‘\t'<<"思修"<<‘\t'<<"英语"<<‘\t'<<"平均"<<endl;
_file<<‘\t'<<"********************************************************************"<<endl;
for(i=1;i<=n;i++)
_file<<‘\t'<<" "<<stu[i].stu_getnum()<<‘\t'<<stu[i].stu_getname()<<‘\t'<<stu[i].stu_getsex()<<‘\t'<<stu[i].stu_getgrade(1)<<‘\t'<<stu[i].stu_getgrade(2)<<‘\t'<<stu[i].stu_getgrade(3)<<‘\t'<<stu[i].stu_getgrade(4)<<‘\t'<<stu[i].stu_getgrade(5)<<‘\t'<<stu[i].stu_getaveragegrade()<<endl;
_file.close();
return;
}

/*初始化输入学生信息,并保存到文件中*/
void menu_input()
{
int i;
system("cls");
printf("\t\t\t 学生成绩初始录入(将要覆盖以前的记录!!!)");
printf("\n********************************************************************************\n");
printf("请输入学生人数(0为清空原记录):");
scanf("%d",&n);
getchar();
for(i=1;i<=n;i++)
instu(i);
save();
printf("\n********************************************************************\n");
printf("已将学生信息保存在当前目录下student_data.txt内。\n任意键返回主菜单….");
getch();
return;
}

/*输出文件中全部学生的信息*/
void menu_output()
{
char line[80];
//    getchar();
system("cls");
fstream _file("student_data.txt",ios::in);
if(!_file)
{
printf("\n文件打开失败,任意键返回主菜单….");
return;
}
else
{
while(_file.getline(line,80))
printf("%s\n",line);
printf("\t********************************************************************\n");
printf("\n\t任意键返回主菜单….");
}

_file.close();
getch();
}

/*插入学生信息*/
void menu_insert()
{
int i,m;
system("cls");
printf("\t\t\t 学生信息添加");
printf("\n********************************************************************\n");
getdata();
printf("请输入学生人数:");
scanf("%d",&m);
getchar();
for(i=n+1;i<=m+n;i++)
instu(i);
n=n+m;
printf("********************************************************************\n");
if(m==0) printf("未添加新信息。\n任意键返回主菜单….");
else printf("已将%d个学生信息添加。\n任意键返回主菜单….",m);
save();
getch();
return;
}

/*删除学生信息*/
void menu_delete()
{
int i,j;
char del_num[20];
int del_flag=1;
system("cls");
printf("\t\t\t 学生信息删除");
printf("\n********************************************************************\n");
printf("请输入需要删除学生的学号:");
scanf("%s",del_num);
getchar();
for(i=1;i<=n;i++)
{
if(stu[i].stu_isnum(del_num)==true)
{
for(j=i;j<n;j++)
{
stu[i]=stu[i+1];
}
n–;
del_flag=0;
}
}

printf("\n********************************************************************\n");
if(del_flag) printf("未查询到学生 %s 信息,无需删除。\n任意键返回主菜单….",del_num);
else printf("已将学生 %s 信息删除。\n任意键返回主菜单….",del_num);
getch();
save();
return;
}

/*修改学生信息*/
void menu_modify()
{
int i;
char mod_num[20];
int mod_flag=1;
system("cls");
getdata();
printf("\t\t\t 学生信息修改");
printf("\n********************************************************************\n");
printf("请输入需要修改学生的学号:");
scanf("%s",mod_num);
getchar();
for(i=1;i<=n;i++)
{
if(stu[i].stu_isnum(mod_num)==true)
{
instu(i);
mod_flag=0;
}
}
printf("\n********************************************************************\n");
if(mod_flag) printf("没有关于学生 %s 的信息,无法修改。\n任意键返回主菜单….",mod_num);
else printf("已将原学号为 %s 的学生信息修改。\n任意键返回主菜单….",mod_num);
save();
getch();
return;
}

/*按照学生平均成绩排序*/
void menu_gradesort()
{

int i,j;
student temp;
getdata();

for(i=1;i<=n;i++)
{
for(j=i;j<=n;j++)
if((stu[i].stu_getaveragegrade())<(stu[j].stu_getaveragegrade()))
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
system("cls");
printf("\t\t\t 学生排序后成绩单 共 (%d) 人\n",n);
printf("\t********************************************************************\n");
printf("\t学号\t姓名\t性别\t程序\t工具\t微积分\t思修\t英语\t平均");
printf("\n\t********************************************************************");
for(i=1;i<=n;i++)
stu[i].stu_output();
save();
if(n==0) printf("\t\t\t无学生信息….");
printf("\n\t********************************************************************\n");
if(n==0) printf("\t\n\t任意键返回主菜单….");
else printf("\t已将学生信息按平均成绩排序。\n\t任意键返回主菜单….");
getch();
return;
}

/*按名字或学号搜索学生信息*/
void menu_search()
{
int i;
int search_flag=1;
char search_temp[20];
system("cls");
getdata();
printf("\t\t\t 学生信息搜索\n");
printf("\t********************************************************************\n");
printf("\t\t 请输入相关查询信息(学号或名字):");
scanf("%s",search_temp);
printf("\t********************************************************************\n");
printf("\t学号\t姓名\t性别\t程序\t工具\t微积分\t思修\t英语\t平均");
printf("\n\t********************************************************************");

for(i=1;i<=n;i++)
{
if((stu[i].stu_isname(search_temp)==true)||stu[i].stu_isnum(search_temp)==true)
{
stu[i].stu_output();
search_flag=0;
}
}
if(search_flag) printf("\n\t\t      查询不到 %s 相关信息………. ",search_temp);
printf("\n\t********************************************************************\n");
printf("\n\t任意键返回主菜单….");
getch();
}

/*结束整个程序*/
void menu_exit()
{
char temp;
printf("\n\t\t\t确定要退出?(y/n):");
temp=getch();
printf("%c",temp);
if(temp==’y’||temp==’Y’)
{
exit_flag=1;
return;
}
else return;
}

/*菜单选择函数*/
void choose(char key)
{
switch(key)
{
case ‘1’ :    menu_input();        break;
case ‘2’ :    menu_output();        break;
case ‘3’ :    menu_insert();        break;
case ‘4’ :    menu_delete();        break;
case ‘5’ :    menu_modify();        break;
case ‘6’ :    menu_gradesort();    break;
case ‘7’ :    menu_search();        break;
case ‘0’ :    menu_exit();        break;
default :    printf("\n\n\t\t  ┏━━━━━━━━━━━━━━━━━━━┓\n\t\t  ┃  输入错误!按任意键返回管理菜单!     ┃\n\t\t  ┗━━━━━━━━━━━━━━━━━━━┛");
}
}

[/php]

student.cpp/student类的成员函数源码

[php]

#include<string.h>
#include<stdio.h>
#include"student.h"

/*设置学生信息*/
void student::stu_input(char *num,char *name,char *sex)
{
strcpy(stu_num,num);
strcpy(stu_name,name);
strcpy(&stu_sex,sex);
}

/*设置学生成绩*/
void student::stu_ingrade(double g1,double g2,double g3,double g4,double g5)
{
stu_grade[1]=g1;
stu_grade[2]=g2;
stu_grade[3]=g3;
stu_grade[4]=g4;
stu_grade[5]=g5;
stu_averagegrade=(g1+g2+g3+g4+g5)/5.0;
}

/*输出学生信息*/
void student::stu_output()
{
int i;
printf("\n\t%s\t%s\t%c",stu_num,stu_name,stu_sex);
for(i=1;i<=5;i++)
printf("\t%.2f",stu_grade[i]);
printf("\t%.2f",stu_averagegrade);
}

/*返回学生平均成绩*/
double student::stu_getaveragegrade()
{
return stu_averagegrade;
}

/*返回学生单科成绩*/
double student::stu_getgrade(int x)
{
return stu_grade[x];
}

/*判断学生学号*/
bool student::stu_isnum(char *temp)
{
if(strcmp(stu_num,temp)==0) return true;
return false;
}

/*判断学生名字*/
bool student::stu_isname(char *temp)
{
if(strcmp(stu_name,temp)==0) return true;
return false;
}

[/php]

student.h/student类的声明

[php]

class student{
private:
char stu_num[20],stu_name[20],stu_sex;
double stu_grade[7],stu_averagegrade;
public:
void stu_input(char *stu_num,char *stu_name,char *stu_sex);
void stu_ingrade(double g1,double g2,double g3,double g4,double g5);
void stu_output();
bool stu_isnum(char *temp);
bool stu_isname(char *temp);
double stu_getaveragegrade();
double stu_getgrade(int x);
char *stu_getnum()
{
return stu_num;
}
char *stu_getname()
{
return stu_name;
}
char stu_getsex()
{
return stu_sex;
}
};

/*定义学生类
*包括
*
*学号
*姓名
*性别
*上学期期末的五科成绩
*平均成绩
*
*设置学生信息
*设置学生成绩
*输出学生信息
*返回学生平均成绩
*返回学生单科成绩
*判断学生学号
*判断学生名字
*
*/

[/php]

Leave A Comment

Please be polite. We appreciate that. Your email address will not be published and required fields are marked