c++课程作业

#include<iostream> 
#include<string> 
#include<fstream>
#include<iomanip>
using namespace std; 
class Student //通过定义一个类来定义数据录入的函数 
{ 
  char name[20]; 
  char number[20]; 
  float maogai,modian,shudian,cpp,english,average,sum; 
  int tag;//删除标记:1为删除,0为未删
public: 
  Student()
  {tag=0;}; 
  Student ( char n[20], char num[20],float mao,float mo,float shu,float cj,float eng) ;
  float getsum();//得到总分的函数 
  float getaver(); //得到平均分的函数 
  char *getname(){return name;}//得到姓名//*号不可删除
  int gettag(){return tag;}//获取删除状态
  void display()//显示学生信息
  {
	  if(tag==0)//如果Tag==0,表示数据为未删除状态,进行显示,但数据只是被隐藏,而未被真正删除!
	  cout<<setw(12)<<name<<"  "
	      <<setw(12)<<number
		  <<setw(12)<<maogai
		  <<setw(12)<<modian
		  <<setw(12)<<shudian
		  <<setw(12)<<cpp
		  <<setw(12)<<english
		  <<setw(12)<<getsum()
		  <<endl;
  }
 //将函数定义为友元函数,方便访问类中的成员
 friend void Zfcx();
 friend void Xmcx();
 friend void Xhcx();
 friend void Average();
 friend void Unpassed();

 void del(){tag=1;}//删除操作

 void input(ifstream &is)
 {
	 is>>name>>number>>maogai>>modian>>shudian>>cpp>>english; 

 }
 void output(ofstream &os) //输出参数函数,作用把信息输出
 {
	 os<<setw(12)<<name
	   <<setw(12)<<number
	   <<setw(12)<<maogai
	   <<setw(12)<<modian
	   <<setw(12)<<shudian
	   <<setw(12)<<cpp
	   <<setw(12)<<english
	   <<endl;//此处endl并非为真正的结束符,读取时会继续读取空白行
 }
 ~Student(){};
};
 
 Student::Student ( char n[20], char num[20],float mao,float mo,float shu,float cj,float eng ) 
 { 
  strcpy(name,n); //得到姓名 
  strcpy(number,num); //得到学号 
  maogai=mao; //得到毛概成绩
  modian=mo;//得到模电成绩
  shudian=shu;//得到数电成绩
  cpp=cj; //得到c++成绩 
  english=eng; //得到英语成绩 
  tag=0;//设为未删
 }
 float Student::getsum() //得到总分的函数 
 { 
  sum=cpp+english+maogai+modian+shudian; 
  return sum; 
 } 
 float Student::getaver() //得到平均分的函数 
 { 
  average=getsum()/5; 
  return average; 
 }
 Student *s[32]; //类定义的指针将所录入的数据按类中的形式分别存储
 int p=0; //全局变量,用于选择菜单时的输入  
 char w;//全局变量,用于在大项中选择是否继续操作
 char c; //用于在小项中选择是否继续操作
 int i=0; //全局变量,用于做每个录入数据的下标 
 int j=0; 
 int flag=0; //用于判断do-while语句
void get()//将文件f1.txt的数据读到数组中
{
	           Student *p;
			   ifstream is("f1.txt");
			   if(!is)
				   return;
				   while(!is.eof())//判断是否到达文件尾部,以防止出现文件读取错误。
				   {
					   p=new Student;
					   p->input(is);
					   
					   if(is.eof())//判断是否为文件尾
						   break;//若为文件尾则跳出,避免将文件中的空白行读取进来
					   
					   s[i]=p;
					   i++;

				   }
				   is.close();
}
void outfile()//将数组中的数据写入文件f1.txt
{
	ofstream os("f1.txt");
	for(j=0;j<i;j++)
	{
	if(!s[j]->gettag())//如果数据为未被删除状态,则将其存入文件中
		s[j]->output(os);
	}
}

void Input()
{ 
           char name[20]; 
           char number[20]; 
           float maogai,modian,shudian,cpp,english; 
		   fstream outfile,infile; //作一个文本文档在文件夹中用于显示所录入的数据
      do{ 
          cout<<"请输入姓名:"<<endl; 
          cin>>name; 
          cout<<"请输入学号:"<<endl; 
          cin>>number; 
          cout<<"请输入毛概成绩:"<<endl; 
          cin>>maogai; 
		   cout<<"请输入模电成绩:"<<endl; 
          cin>>modian; 
		  cout<<"请输入数电成绩:"<<endl; 
          cin>>shudian; 
          cout<<"请输入C++成绩:"<<endl; 
          cin>>cpp; 
          cout<<"请输入英语成绩:"<<endl; 
          cin>>english;
          /*
		  outfile.open("f1.txt"); 
          if(!outfile)
		  {  cout<<"f1.txt 打开错误!"<<endl; 
             return; 
		  } */
            s[i]=new Student(name, number,maogai,shudian,modian, cpp, english); 
            i++; 
		   outfile.close();
          
          cout<<"数据录入成功,想继续录入吗(y/n)"<<endl;
		  cin>>c; 
          flag=0; 
          do{ 
            if(c!='y'&&c!='n') 
			{ 
				cout<<"指令错误!请重新输入!"<<endl; 
				cin>>c;
			} 
            else 
            flag=1; 
			}while(flag==0); 
	  }while(c=='y'); //重复输入 
}
void Delete()
{
				  char name[20]; 
				  
				  do
				  {   
					  int flag=0;
                      cout<<"请输入您要删除的学生的姓名:"<<endl;          
                      cin>>name; 
					 
					for(int j=0;j<i;j++)
					 {
						 if(strcmp(name,s[j]->getname())==0)
						 {
							 flag=1;
							 s[j]->del();//找到对应的学生进行删除操作,并跳出循环
                             cout<<"数据删除成功!"<<endl;
							 break;
						 }
					}
                      if(flag==0)
							cout<<"您要删除的学生不存在,请查证后再删除!"<<endl;
					  cout<<"请问是否继续删除?(y/n)"<<endl;
                       
                      cin>>c;
					  do
					  {
						  if(c!='y'&&c!='n')
						  { 
						  cout<<"指令错误!请重新输入!"<<endl; 
                          cin>>c; 
						  } 
                          else
						     flag=1;
					  }while(flag==0);
				  }while(c=='y'); 
}
void Correct()
{   
	            char name[20];
				char nu[20];
				float mao,mo,shu,cj,eng;
				do
				 {
					 flag=0;
					 cout<<"请输入您要修改的学生的姓名:";
					 cin>>name;
					 for(int j=0;j<i;j++)
					 {
						 if(strcmp(name,s[j]->getname())==0)
						 {
							 flag=1;
							 break;
						 }
					 }
					 if(flag==1)
					 {
						cout<<"请输入修改学生姓名:"<<endl;
						cin>>name;
						cout<<"请输入修改学生新学号:"<<endl;
						cin>>nu;
						cout<<"请输入修改学生毛概:"<<endl;
					    cin>>mao;
						cout<<"请输入修改学生模电:"<<endl;
					    cin>>mo;
						cout<<"请输入修改学生数电:"<<endl;
					    cin>>shu;
						cout<<"请输入修改学生c++:"<<endl;
						cin>>cj;
						cout<<"请输入修改学生英语成绩:"<<endl;
						cin>>eng;
						cout<<endl;
						s[j]=new Student(name,nu,mao,mo,shu,cj,eng);//将修改后的数据赋给该数组
						j++;
					 }
					 if(flag==0)
						 cout<<"对不起,您要修改的学生不存在!请查证后输入!"<<endl;

				 cout<<"想继续修改吗(y/n)";
			     cin>>c;
			     flag=0; 
                 do
				 { 
					 if(c!='y'&&c!='n') 
					 { 
						 cout<<"指令错误!请重新输入!"<<endl; 
						 cin>>c; 
					 } 
                     else 
                        flag=1; 
				 }while(flag==0);
			}while(c=='y');
}
void Zfcx()
{
				float SUM;
				 if(i==0)
				{
				cout<<"系统中没有输入数据,请先输入数据!"<<endl;
				}
				 do
				 {
					 flag=0;
					 cout<<"请输入您要查询的学生的总成绩:"<<endl;
					 cin>>SUM;
					 for(int j=0;j<i;j++)
					 {
						 if(s[j]->getsum()==SUM)
						 {
							flag=1;
							cout<<"您要查询的学生是:"<<(*s[j]).name<<endl;
							cout<<"该生的信息为:"<<endl;
							cout<<"  学号:"<<(*s[j]).number
								<<"  毛概分数:"<<(*s[j]).maogai
								<<"  模电分数:"<<(*s[j]).modian
								<<"  数电分数:"<<(*s[j]).shudian
								<<"  c++ 分数:"<<(*s[j]).cpp
								<<"  英语分数:"<<(*s[j]).english
								<<endl;
				          //此处可能有多个学生是相同总分,不用break跳出循环
						 }
					 }
					if(flag==0)
						cout<<"对不起!您要查询的学生不存在!"<<endl;

					cout<<"是否继续查?(y/n):";
					cin>>c;
					 do
					 {
						 if(c!='y'&&c!='n')
						 {
							 cout<<"指令错误!请重新输入!"<<endl; 
							 cin>>c; 
						 }
						 else
							 flag=1;
					 }while(flag==0);
				 }while(c=='y');
}
void Xmcx()
{
	            char n[20];
				 if(i==0)
				{
				cout<<"系统中没有输入数据,请先输入数据!"<<endl;
				}
				 do
				 {
					 flag=0;
					 cout<<"请输入要查询的名字: "<<endl;
					 cin>>n;
					 for(int j=0;j<i;j++)
					 {
						if(strcmp(n,(*s[j]).name)==0)
						{
							flag=1;
							cout<<"您要查询的学生是:"<<(*s[j]).name<<endl;
							cout<<"该生的信息是:学号:"<<(*s[j]).number
								<<"  毛概分数:"<<(*s[j]).maogai
								<<"  模电分数:"<<(*s[j]).modian
								<<"  数电分数:"<<(*s[j]).shudian
								<<"  c++ 分数:"<<(*s[j]).cpp
								<<"  英语分数:"<<(*s[j]).english
								<<endl;
						}
					 }
						if(flag==0)
						cout<<"对不起您要查询的学生不存在,请查证后再输入!"<<endl;
						
						cout<<"您想继续查询吗?(y/n):";
						cin>>c;
						do
						{
						 if(c!='y'&&c!='n')
						 {
							 cout<<"指令错误!请重新输入!"<<endl; 
							 cin>>c; 
						 }
						 else
							 flag=1;
						}while(flag==0);

				 }while(c=='y');
}
void Xhcx()
{
				 char nu[20];
				 if(i==0)
				{
				cout<<"系统中没有输入数据,请先输入数据!"<<endl;
				}
				 do
				 {
					 flag=0;
					 cout<<"请输入要查询的学号: "<<endl;
					 cin>>nu;
					 for(int j=0;j<i;j++)
					 {
						if(strcmp(nu,(*s[j]).number)==0)
						{
							flag=1;
							cout<<"您要查询的学生是:"<<(*s[j]).name<<endl;
							cout<<"该生的信息是:学号:"<<(*s[j]).number
								<<"  毛概分数:"<<(*s[j]).maogai
								<<"  模电分数:"<<(*s[j]).modian
								<<"  数电分数:"<<(*s[j]).shudian
								<<"  c++ 分数:"<<(*s[j]).cpp
								<<"  英语分数:"<<(*s[j]).english
								<<endl;
						}
					 }
						if(flag==0)
						cout<<"对不起您要查询的学生不存在,请查证后再输入!"<<endl;
						cout<<"您想继续查询吗?(y/n):";
						cin>>c;
						do
						{
						if(c!='y'&&c!='n')
						{
							cout<<"指令错误!请重新输入:"<<endl;
							cin>>c;
						}
						else
							flag=1;
						}while(flag==0);
				 }while(c=='y');
			 }
void Print()
{
				 cout<<"所有学生数据如下:"<<endl;
				 cout<<setw(12)<<"姓名"<<"  "
					 <<setw(12)<<"学号"
					 <<setw(12)<<"毛概成绩:"
					 <<setw(12)<<"模电成绩:"
					 <<setw(12)<<"数电成绩:"
					 <<setw(12)<<"C++ 成绩:"
					 <<setw(12)<<"英语成绩:"
					 <<setw(12)<<"总分成绩:"
					 <<endl;
				 for(j=0;j<i;j++)
				 {
					 s[j]->display();
				 }
}
void Average()
{  
                 if(i==0)
				{
				  cout<<"系统中没有输入数据,请先输入数据!"<<endl;
				}
				 for(int m=0;m<i;m++)
				 {
					 cout<<(*s[m]).name<<"  学号:"
						 <<(*s[m]).number<<"  总分:"
						 <<(*s[m]).getsum()<<"  均分:"
						 <<(*s[m]).getaver()<<endl;
				 }
}
void Unpassed()
{
				 if(i==0)
				{
				  cout<<"系统中没有输入数据,请先输入数据!"<<endl;
				}
				 int m,n,o,p,q,j;
				 m=0;n=0;o=0;p=0;q=0;
				 for(j=0;j<i;j++)
				 {
					 if(s[j]->maogai<60)  m++;
					 if(s[j]->modian<60)  n++;
					 if(s[j]->shudian<60) o++;
					 if(s[j]->cpp<60)     p++;
					 if(s[j]->english<60) q++;
				 }
				 cout<<"毛概不及格人数为:"<<m<<"  "<<"不及格率为:"<<((float)m/j)*100<<"%"<<endl;
				 cout<<"模电不及格人数为:"<<n<<"  "<<"不及格率为:"<<((float)n/j)*100<<"%"<<endl;
				 cout<<"数电不及格人数为:"<<o<<"  "<<"不及格率为:"<<((float)o/j)*100<<"%"<<endl;
				 cout<<"c++ 不及格人数为:"<<p<<"  "<<"不及格率为:"<<((float)p/j)*100<<"%"<<endl;
				 cout<<"英语不及格人数为:"<<q<<"  "<<"不及格率为:"<<((float)q/j)*100<<"%"<<endl;
}
int main()
{
	get();//将数据读入
	   cout<<"*****************************************************************************:"<<endl;
       cout<<"*************************欢迎使用高校学籍管理系统!***************************:"<<endl;
       cout<<"********                      1.录入学生信息                            ********"<<endl;
       cout<<"********                      2.删除学生信息                            ********"<<endl;
       cout<<"********                      3.修改学生信息                            ********"<<endl;
       cout<<"********                      4.按总成绩查询                            ********"<<endl;
       cout<<"********                      5.按姓名查询                              ********"<<endl;
       cout<<"********                      6.按学号查询                              ********"<<endl;
       cout<<"********                      7.查询学生总分和平均成绩                  ********"<<endl;
       cout<<"********                      8.各科不及格人数和不及格率                ********"<<endl;
       cout<<"********                      9.输出所有学生数据                        ********"<<endl;
       cout<<"********                      10.退出程序                               ********"<<endl;
    do
	{
		cin>>p;
	 if(p>=1&&p<=11)
		flag=1;
	 else 
		 cout<<"输入错误,请重新输入!"<<endl;
	}while(flag==0);
do
{
	switch(p)
	{
	case 1:Input();break;
	case 2:Delete();break;
	case 3:Correct();break;
	case 4:Zfcx();break;
	case 5:Xmcx();break;
	case 6:Xhcx();break;
	case 7:Average();break;
	case 8:Unpassed();break;
	case 9:Print();break;
	case 10:outfile();
		cout<<"感谢您的使用!再见!"<<endl;
		return 0;break;//退出时将数据进行保存
	default :cout<<"输入错误,请重新输入!"<<endl;
	}
	cout<<"  您想继续进行其他操作吗?(y/n)";
   do
   {
       cin>>w;
       cout<<endl;
       if(w!='y'&&w!='n')
       cout<<"  指令错误!请重新输入!"<<endl;
       else
       flag=1;
   }while(flag==0);
    if(w=='y')
    {
	   cout<<"*****************************************************************************:"<<endl;
       cout<<"*************************欢迎使用高校学籍管理系统!***************************:"<<endl;
       cout<<"********                      1.录入学生信息                            ********"<<endl;
       cout<<"********                      2.删除学生信息                            ********"<<endl;
       cout<<"********                      3.修改学生信息                            ********"<<endl;
       cout<<"********                      4.按总成绩查询                            ********"<<endl;
       cout<<"********                      5.按姓名查询                              ********"<<endl;
       cout<<"********                      6.按学号查询                              ********"<<endl;
       cout<<"********                      7.查询学生总分和平均成绩                  ********"<<endl;
       cout<<"********                      8.各科不及格人数和不及格率                ********"<<endl;
       cout<<"********                      9.输出所有学生数据                        ********"<<endl;
       cout<<"********                      10.退出程序                               ********"<<endl;
	   cin>>p;
	}
    if(w=='n')
	   outfile();//不继续进行其他操作则保存退出程序
}while(w=='y');
}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值