一.实验目的:
熟悉函数设计和模块化程序设计方法。
掌握结构体的使用。
熟悉结构体数组作为函数参数。
二.实验内容:
按以下菜单界面编写学生信息管理系统;
1)录入学生信息首先输入学生人数,然后根据学生人数开辟动态数组;
2)学生信息包括学号、姓名、性别、三门课成绩、总分;其中学号、姓名、
性别、三门课成绩是需要从键盘录入的,而总分是由程序计算的,而不
是用户自己算了再输入。
3)显示结果(学生信息)要以列表的形式显示,注意美观性;
4)要有必要的容错措施,比如输入各科分数要在0-100之间,输入错误给
用户提示,让其重新输入;
CPP源代码
#include "stdafx.h"
#include <iostream>
#include<iomanip>
#include<string>
using namespace std;
struct STU
{
char xuehao[10];
char name[10];
char sex;//f is woman,m is man
float score[3];
float sum;//sum 为总分
};
void fun1(int renshu,STU p[])
{
int i;
for(i=0;i<renshu;i++)
{
cout<<"请输入学号";
cin>>p[i].xuehao;
cout<<"请输入姓名";
cin>>p[i].name;
cout<<"请输入性别";
cin>>p[i].sex;
cout<<"请输入三门的成绩";
int q;
for(q=0;q<3;q++)
{
cin>>p[i].score[q];
}
int ii;
for(ii=0;ii<3;ii++)
{
if(p[i].score [ii]>100||p[i].score[ii]<0)
{
cout<<"请输入正确的分数";
for(q=0;q<3;q++)
{
cin>>p[i].score[q];
}
}
}
p[i].sum=p[i].score[0]+p[i].score[1]+p[i].score[2];
}
cout<<"\n任务1的处理结果\n";
}
void fun2(int renshu,STU p[])
{
int i;
for(i=0;i<renshu;i++)
{
cout<<setw(10)<<p[i].xuehao;
cout<<setw(10)<<p[i].name ;
cout<<setw(5)<<p[i].sex ;
int q;
for(q=0;q<3;q++)
{
cout<<setw(5)<<p[i].score[q];
}
cout<<setw(5)<<p[i].sum;
cout<<"\n";
}
cout << "\n任务2的处理结果\n";
}
void fun3(int renshu,char k[],STU p[])
{
int i;
for(i=0;i<renshu;i++)
{
if(strcmp(k,p[i].xuehao)==0)
{
cout<<setw(10)<<p[i].xuehao;
cout<<setw(10)<<p[i].name ;
cout<<setw(5)<<p[i].sex ;
int q;
for(q=0;q<3;q++)
{
cout<<setw(5)<<p[i].score[q];
}
cout<<setw(5)<<p[i].sum;
}
}
cout << "\n任务3的处理结果\n";
}
void fun4(int renshu,char kk[],STU p[])
{
int i;
for(i=0;i<renshu;i++)
{
if(strcmp(kk,p[i].name)==0)
{
cout<<setw(10)<<p[i].xuehao;
cout<<setw(10)<<p[i].name ;
cout<<setw(5)<<p[i].sex ;
int q;
for(q=0;q<3;q++)
{
cout<<setw(5)<<p[i].score[q];
}
cout<<setw(5)<<p[i].sum;
}
}
cout << "\n任务4的处理结果\n";
}
void fun5(int renshu,STU p[])
{
int max;
max=p[0].sum ;
STU temp;
int i;
int ii;
for(int i=1;i<=renshu;i++)
{
for(ii=0;ii<renshu-i;ii++)
{
if(p[ii].sum<p[ii+1].sum )
{
temp=p[ii];
p[ii]=p[ii+1];
p[ii+1]=temp;
}
}
}
cout<<"排序后的学生信息:\n";
for(i=0;i<renshu;i++)
{
cout<<setw(10)<<p[i].xuehao;
cout<<setw(10)<<p[i].name ;
cout<<setw(5)<<p[i].sex ;
int q;
for(q=0;q<3;q++)
{
cout<<setw(5)<<p[i].score[q];
}
cout<<setw(5)<<p[i].sum;
cout<<"\n";
}
cout << "\n任务5的处理结果\n";
}
void fun6(int renshu,STU p[])
{
int i;
int count=0;
int ii;
cout<<"有两门不及格的同学为:\n";
for(i=0;i<renshu;i++)
{
for(ii=0;ii<3;ii++)
{
if(p[i].score [ii]<60)
count++;
}
if(count==2)
{
cout<<setw(10)<<p[i].xuehao;
cout<<setw(10)<<p[i].name ;
cout<<setw(5)<<p[i].sex ;
int q;
for(q=0;q<3;q++)
{
cout<<setw(5)<<p[i].score[q];
}
cout<<setw(5)<<p[i].sum;
cout<<"\0";
}
}
cout << "\n任务6的处理结果\n";
}
void main()
{
int n=-1 ;//n is mode
int renshu;
STU *p;
while (n != 0)
{
cout << "\n*************************\n";
cout << "1.录入学生信息\n";
cout << "2.显示学生信息\n";
cout << "3.按学号查找\n";
cout << "4.按姓名查找\n";
cout << "5.按总分递减排序\n";
cout << "6.查找有2科目不及格的学生信息\n";
cout << "0.退出\n";
cout << "*************************\n";
while (n<0 || n>6)
{
cout << "请输入正确的功能号0-6:";
cin >> n ;
}
if (n == 1)
{
cout<<"\n请输入学生人数:";
cin>>renshu;
p=new STU[renshu];
fun1(renshu,p);
n=-1;
}
else if (n == 2)
{
fun2(renshu,p);
n=-1;continue;
}
else if (n == 3)
{
char k[10];//k is the xuehao of the stuent you want find
cout<<"\n请输入你想查找学生的学号";
cin>>k;
fun3(renshu,k,p);
n=-1;continue;
}
else if (n == 4)
{
char kk[10];//kk is the name of the student you want find
cout<<"\n请输入你想查找学生的姓名";
cin>>kk;
fun4(renshu,kk,p);
n=-1;continue;
}
else if (n == 5)
{
fun5(renshu,p);
n=-1;continue;
}
else if (n == 6)
{
fun6(renshu,p);
n=-1;continue;
}
}
cout << endl << endl;
system("pause");
}