课程设计名称:C高级语言程序设计课程设计
课程设计题目:学生成绩管理系统的设计与实现
一、问题描述
针对学生成绩管理,应用C语言程序设计的基本理论和方法,从对问题的分析研究开始,到编程调试结束的整个过程进行分析和设计,学生成绩信息至少包括:学号,姓名,若干门课程成绩(至少三门)。
二、基本要求
主要功能:
⑴ 能对学生成绩进行录入和删除;
⑵ 能浏览所有学生的成绩;
⑶ 能按学号或姓名查询某学生成绩信息;
⑷ 统计与排序:根据成绩排序;统计某一分数段的学生人数。
⑸ 结果格式化显示。
要求:使用文件方式存储数据,系统以菜单方式工作,模块化设计。
三、测试要求
(1)设计的程序能够方便地运行,达到设计的目的;
(2)每个模块都要用不少于20条的实际数据加以测试,并给出测试结果;
(3)用户界面友好,功能明确,操作方便。
四、 完整代码:
#include<iostream>
#include<string>
#include<fstream>
#define MAX 1000 //定义学生数组最大容量
using namespace std;
//设计学生信息结构体
struct person
{
long num;//学号
string name;//姓名
int sex;//性别
int age;//年龄
int math;//数学
int chinese;//语文
int english;//英语
int number;//总分
};
//学生成绩管理系统
struct personbook
{
person parry[MAX];//学生数组最大容量
int M_size;//当前容量
};
//1、菜单界面
void showmenu()
{
cout << "*************************" << endl;
cout << "*****1、 学生成绩录入 *****" << endl;
cout << "*****2、 浏览学生成绩 *****" << endl;
cout << "*****3、 删除学生成绩 *****" << endl;
cout << "*****4、 查找学生信息 *****" << endl;
cout << "*****5、 统计学生信息 *****" << endl;
cout << "*****6、 学生信息排序 *****" << endl;
cout << "*****7、 清空学生信息 *****" << endl;
cout << "*****0、 退出管理系统 *****" << endl;
cout << "*************************" << endl;
cout <<endl;
cout << "*****请输入菜单序号******"<<endl;
}
//添加学生信息
void addperson(personbook * abs)
{
person parry[MAX];
ofstream outfile("学生成绩管理系统.dat",ios::app);//创建或打开文件,以输出方式打开文件
if(!outfile)
{
cerr<<"open error!"<<endl;
exit(1);
}
//判断学生成绩管理系统是否已经满了
if (abs->M_size == MAX)
{
cout << "学生成绩管理系统已满,无法添加!" << endl;
return;
}
else
{
//添加学生学号
//long num;
cout<<"请输入学号:"<<endl;
cin >> parry[abs->M_size].num;
abs->parry[abs->M_size].num;
outfile<<parry[abs->M_size].num<<'\t';
//添加学生姓名
//string name;
cout << "请输入姓名:" << endl;
cin >> parry[abs->M_size].name;
abs->parry[abs->M_size].name;
outfile<<parry[abs->M_size].name<<'\t';
//性别
//int sex;
cout << "请输入性别:" << endl;
cout << "1--男" << endl;
cout << "2--女" << endl;
while (true)
{
cin >> parry[abs->M_size].sex;
if (parry[abs->M_size].sex == 1 || parry[abs->M_size].sex == 2)
{
abs->parry[abs->M_size].sex;
outfile<<parry[abs->M_size].sex<<'\t';
break;
}
else
{
cout << "无效输入,请重新输入" << endl;
}
}
//输入年龄
//int age;
cout << "请输入年龄:" << endl;
cin >>parry[abs->M_size].age;
abs->parry[abs->M_size].age;
outfile<<parry[abs->M_size].age<<'\t';
//输入数学成绩
//int math;
cout<<"请输入数学"<<endl;
cin>> parry[abs->M_size].math;
abs->parry[abs->M_size].math;
outfile<<parry[abs->M_size].math<<'\t';
//输入语文成绩
//int chinese;
cout << "请输入语文:" << endl;
cin >> parry[abs->M_size].chinese;
abs->parry[abs->M_size].chinese;
outfile<<parry[abs->M_size].chinese<<'\t';
//输入英语成绩
//int english;
cout << "请输入英语:" << endl;
cin >> parry[abs->M_size].english;
abs->parry[abs->M_size].english;
outfile<<parry[abs->M_size].english<<'\t';
//总分
//int number;
/*cout << "请输入英语/:" << endl;*/
parry[abs->M_size].number=parry[abs->M_size].math + parry[abs->M_size].chinese + parry[abs->M_size].english;
abs->parry[abs->M_size].number;
outfile<<parry[abs->M_size].number<<'\n';
abs->M_size++;
cout << "添加成功!" << endl;
system("pause");
system("cls");//清屏
}
outfile.close();//关闭文件
}
//显示学生成绩信息
void showperson(personbook * abs)
{
person parry[MAX];
ifstream infile("学生成绩管理系统.dat",ios::in||ios::out);//创建或打开文件,以输入方式打开文件
if(!infile)
{
cerr<<"open error!"<<endl;
exit(1);
}
//system("pause");
system("cls");
if (abs->M_size == 0) //判断学生成绩管理系统中人数是否为0,如果为0,提示记录为空;如果不为0,显示记录的学生信息信息
{
cout << "还未添加学生信息" << endl;
system("pause");
system("cls");
}
else
{
for (int i = 0; i < abs->M_size; ++i)
{
infile>>parry[i].num>>parry[i].name>>parry[i].sex>>parry[i].age>>parry[i].math>>parry[i].chinese>>parry[i].english>>parry[i].number;
cout << "学号:" << parry[i].num << "\t";
cout << "姓名:" << parry[i].name << "\t";
cout << "性别:" << (parry[i].sex==1?"男":"女") << "\t";//三步运算符
cout << "年龄:" << parry[i].age << "\t";
cout<< "数学: " << parry[i].math<<"\t";
cout << "语文:" << parry[i].chinese << "\t";
cout << "英语:" << parry[i].english << "\t";
cout << "总分:" << parry[i].number << endl;
}
}
infile.close();//关闭文件
system("pause");
system("cls");
}
//查找学生成绩实现步骤
int isexist(personbook * abs,string name)
{
person parry[MAX];
ifstream infile("学生成绩管理系统.dat",ios::in||ios::out);//创建或打开文件,以输入方式打开文件
if(!infile)
{
cerr<<"open error!"<<endl;
exit(1);
}
for (int i=0; i < MAX; ++i)
{
infile>>abs->parry[i].name;
if (name == abs-> parry[i].name)
{
return i;
}
}
return -1;//如果没查到就返回-1
infile.close();//关闭文件
}
//删除学生信息
void deleteperson(personbook * abs)
{
cout << "请输入您要删除的学生信息" << endl;
string name;
cin >> name;
int ret = isexist(abs,name);
if (ret == -1)
{
cout << "查无此人" << endl;
}
else
{
for (int i = ret; i < abs->M_size; ++i)
{
abs->parry[i] = abs->parry[i + 1];//数据前移
}
abs->M_size--;
cout << "删除成功" << endl;
}
system("pause");
system("cls");
}
//查找学生信息信息
void findperson( personbook * abs)
{
person parry[MAX];
ifstream infile("学生成绩管理系统.dat",ios::in||ios::out);//创建或打开文件,以输入方式打开文件
if(!infile)
{
cerr<<"open error!"<<endl;
exit(1);
}
cout << "请输入您要查找的人:" << endl;
string name;
cin >> name;
int ret = isexist(abs,name);
if (ret != -1)
{
infile>>abs->parry[ret].num>>abs->parry[ret].name>>abs->parry[ret].sex>>abs->parry[ret].age>>abs->parry[ret].math>>abs->parry[ret].english>>abs->parry[ret].english>>abs->parry[ret].number;
cout << "学号:" << abs->parry[ret].num << "\t";
cout << "姓名:" << abs->parry[ret].name << "\t";
cout << "性别:" << (abs->parry[ret].sex == 1 ? "男" : "女") << "\t";//三步运算符
cout << "年龄:" << abs->parry[ret].age << "\t";
cout<< "数学: " << abs->parry[ret].math<<"\t";
cout << "语文:" << abs->parry[ret].chinese << "\t";
cout << "英语:" << abs->parry[ret].english << "\t";
cout << "总分:" << abs->parry[ret].number << endl;
}
else
{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
infile.close();//关闭文件
}
//统计某分数段的所有学生数量
void statistics(personbook* abs)
{
person parry[MAX];
ifstream infile("学生成绩管理系统.dat",ios::in||ios::out);//创建或打开文件,以输入方式打开文件
if(!infile)
{
cerr<<"open error!"<<endl;
exit(1);
}
cout<<"根据总分进行统计,请输入你要统计的分数段"<<endl;
int num_min;
int num_max;
int x=0;//统计数量
cout<<"请输入最低分数:";
cin>>num_min;
cout<<"请输入最高分数:";
cin>>num_max;
for (int i=0; i < MAX; ++i)
{
infile>>abs->parry[i].num>>abs->parry[i].name>>abs->parry[i].sex>>abs->parry[i].age>>abs->parry[i].math>>abs->parry[i].chinese>>abs->parry[i].english>>abs->parry[i].number;
if (num_min < abs->parry[i].number && num_max >= abs->parry[i].number)
{
x++;
cout<<x<<" ";
cout << "学号:" << abs->parry[i].num << "\t";
cout << "姓名:" << abs->parry[i].name << "\t";
cout << "性别:" << (abs->parry[i].sex == 1 ? "男" : "女") << "\t";//三步运算符,水平制表
cout << "年龄:" << abs->parry[i].age << "\t";
cout<< "数学: " <<abs->parry[i].math<<"\t";
cout << "语文:" << abs->parry[i].chinese << "\t";
cout << "英语:" << abs->parry[i].english << "\t";
cout << "总分:" << abs->parry[i].number << endl;
}
}
cout<<endl;
cout<<"该分数段共有 "<<x<<"人"<<endl;
system("pause");
system("cls");
infile.close();//关闭文件
}
//学生信息排序
//按照总成绩从高到低排序
void sortPerson(personbook * abs)
{
person parry[MAX];
int zongfeng[MAX];
int num;
ifstream infile("学生成绩管理系统.dat",ios::in||ios::out);//创建或打开文件,以输入方式打开文件
if(!infile)
{
cerr<<"open error!"<<endl;
exit(1);
}
for (int i=0; i < abs->M_size; ++i)
{
infile>>abs->parry[i].num>>abs->parry[i].name>>abs->parry[i].sex>>abs->parry[i].age>>abs->parry[i].math>>abs->parry[i].chinese>>abs->parry[i].english>>abs->parry[i].number;
zongfeng[i]=abs->parry[i].number;
}
//冒泡排序
for(int m=0;m<abs->M_size-1;++m)
for(int n=0;n<abs->M_size-m;++n)
{
if(zongfeng[n]<zongfeng[n+1])
{
num = zongfeng[n];
zongfeng[n] = zongfeng[n+1];
zongfeng[n+1]=num;
}
}
for (int j=0; j < abs->M_size; ++j)
for (int i=0; i < abs->M_size; ++i)
{
infile>>abs->parry[i].num>>abs->parry[i].name>>abs->parry[i].sex>>abs->parry[i].age>>abs->parry[i].math>>abs->parry[i].chinese>>abs->parry[i].english>>abs->parry[i].number;
if(zongfeng[j]==abs->parry[i].number)
{
cout << "学号:" << abs->parry[i].num << "\t";
cout << "姓名:" << abs->parry[i].name << "\t";
cout << "性别:" << (abs->parry[i].sex == 1 ? "男" : "女") << "\t";//三步运算符,水平制表
cout << "年龄:" << abs->parry[i].age << "\t";
cout<< "数学: " <<abs->parry[i].math<<"\t";
cout << "语文:" << abs->parry[i].chinese << "\t";
cout << "英语:" << abs->parry[i].english << "\t";
cout << "总分:" << abs->parry[i].number << endl;
}
}
infile.close();//关闭文件
system("pause");
system("cls");
}
//清空学生信息
void cleanPerson(personbook * abs)
{
while(true)
{
cout << "如果确定清空学生信息" << endl;
cout << "1--是" << endl;
cout << "2--否" << endl;
int flag;
cin >> flag;
if (flag == 1)
{
abs->M_size = 0;
ofstream outfile("学生成绩管理系统.dat",ios::out);//创建或打开文件,以输出方式打开文件
outfile.close();//关闭文件
cout << "学生信息已清空" << endl;
break;
}
else if(flag == 2)
{
break;
}
else
{
cout << "无效输入,请重新输入" << endl;
break;
}
}
system("pause");
system("cls");
}
//主函数
int main()
{
personbook abs;//初始化学生成绩管理系统
abs.M_size = 0;
int select = 0;
while (true)//无限循环
{
showmenu();
cin >> select;
system("cls");
switch (select)
{
case 1:
addperson(&abs);
break;
case 2:
showperson(&abs);
break;
case 3:
deleteperson(&abs);
break;
case 4:
findperson(&abs);
break;
case 5:
statistics(&abs);
break;
case 6:
sortPerson(&abs);
break;
case 7:
cleanPerson(&abs);
break;
case 0:
cout << "欢迎下次使用" << endl;
return 0;
break;
}
}
return 0;
}