⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 implement.h

📁 翰林版成绩管理系统,功能比较全面
💻 H
字号:
#include "head.h"

/*..................................函数说明........................................*/
void   readme();                                 //操作说明
void   readoneline( FILE *fp,Student A[],int i); //读取一条记录
void   readfile();                               //将文件内容读入内存
void   query();                                  //查询模块
void   addrecord();                              //添加模块
void   deleterecord();                           //删除模块
void   savechange();                             //保存
void   display();                                //显示当前内存中的记录
void   sortrecord();                             //对学生成绩进行排名

/*..................................................................................*/



void readme(){ 
  cout<<"..............................欢迎进入本程序................................"<<endl;
  cout<<"    本程序是一个成绩管理程序,能方便地对学生成绩进行记录,保存,检索,修改。"<<endl;
  cout<<endl<<"    操作提示:"<<endl;
  cout<<"按 c或C 键进入查询操作界面"<<endl;
  cout<<"按 t或T 键进入添加操作界面"<<endl;
  cout<<"按 d或D 键进入删除操作界面"<<endl;
  cout<<"按 i或I 键显示当前内存中的数据"<<endl;
  cout<<"按 s或S 键保存对文件进行的更新和修改"<<endl;
  cout<<"按 o或O 键进入排序界面"<<endl;
  cout<<"按 q或Q 键进入退出程序"<<endl;
  cout<<"............................................................................."<<endl;

  char ch='w';

  while(ch!='q'&&ch!='Q') // 输入的操作符控制块
  {
 
  ch=getchar();
       if(ch=='c'||ch=='C')    query();
  else if(ch=='t'||ch=='T')    addrecord();
  else if(ch=='d'||ch=='D')    deleterecord();
  else if(ch=='i'||ch=='I')    display();
  else if(ch=='s'||ch=='S')    savechange();
  else if(ch=='o'||ch=='O')    sortrecord();
  else if(ch=='q'||ch=='Q')  { cout<<"是否保存对文件的修改 Y/N";
                               cin>>ch;  if(ch=='Y'||ch=='y')  savechange();
                               ch=getchar();
                               if(ch=='Y'||ch=='y')  { savechange(); exit(-1);}
						       else exit(-1); 
  }
  else if(ch!='\n') { 
	      cout<<endl<<"...."<<"错误的操作符"<<"..."<<endl; readme(); 
	 }
  }
     
 

}

/*.........................................................................*/


void   readoneline( FILE *fp,Student A[],int i){
 
  fscanf(fp,"%8s",A[i].name); 
 
  fscanf(fp,"%9s",A[i].num);
 
  fscanf(fp,"%s",A[i].cla);

  fscanf(fp,"%d",A[i].mark+0);
 
  fscanf(fp,"%d",A[i].mark+1);
 
  fscanf(fp,"%d",A[i].mark+2);
 
  fscanf(fp,"%d",A[i].mark+3);
 
  fscanf(fp,"%d",A[i].mark+4);

}



int line_num=0;  //用来存储文件中的学生记录条数
Student A[300];   //用来存储学生记录的对象
FILE *fp;        //文件指针
char filename[30]; //用来存储文件路径及名字

/*....................................................................*/
  
void readfile(){ 
  int i;
  char ch;
  

  cout<<endl<<"是否对默认文件进行操作? Y/N (默认值为E:\\1.txt)"<<endl; 
  if((ch=getchar())=='n'||ch=='N') {
	  cout<<"请输入您要进行操作的文件路径及名字:";
      cin>>filename;
  }
  if(ch=='y'||ch=='Y')   strcpy(filename,"E:\\1.txt");
  
 
  if((fp=fopen(filename,"rb"))==NULL){ 
	  cerr<<"open unsuccess."<<endl;
      exit(-1);
  } 
 
  while((ch=fgetc(fp))!=EOF)  { 
	 if(ch=='\n') { if((ch=fgetc(fp))!='\n'&&(ch!=' ')) line_num++;
	 }
  }

  rewind(fp);

  while(fgetc(fp)!='\n');
   for(i=0;i<=line_num-1;i++)
    readoneline(fp,A,i);

 
}

/*.........................................................................*/


void  query(){ 
   int i,j,con=0,s=0;
   char ch;
   char n[9];
   char m[10]; 

   cout<<"...............查询界面................"<<endl;
   cout<<"按 1 键以姓名进行查询"<<endl;
   cout<<"按 2 键以学号进行查询"<<endl;
   cout<<"按 3 键退出查询"<<endl;

   cin>>con;

if(con==1)
{  cout<<"请输入要查询学生的姓名:"; 
  
   cin>>n;
  
    for(i=0;i<=line_num-1;i++)	{   
        for(j=0;j<=strlen(A[0].name)-1;j++)  {  

	       if(A[i].name[j]!=n[j]) break; 
		}
      if(j>=strlen(A[0].name)) {
         cout<<"姓名\t学号\t班级\t排名\t语文\t数学\t外语\tC++"<<endl; 
	     cout<<A[i].name<<"\t"<<A[i].num<<"\t"<<A[i].cla
			<<"\t"<<A[i].mark[0]<<"\t"<<A[i].mark[1]<<"\t"<<A[i].mark[2]
	         <<"\t"<<A[i].mark[3]<<"\t"<<A[i].mark[4]<<endl;  s=1;
	  }  
	               
     
	}//for
	if(  s==0)  cout<<endl<<"....您要查询的记录不存在!..."<<endl; 
	query();
}
else if(con==2){  
  cout<<"请输入要查询学生的学号:"; 
 
   cin>>m;
   

      for(i=0;i<=line_num-1;i++){  
	    for(j=0;j<=strlen(A[0].num)-1;j++) {   

	      if(A[i].num[j]!=m[j]) break; 
		}
     if(j>=strlen(A[0].num)) {
       /*  cout<<"姓名        学号      班级   排名  语文  数学  外语 C++"<<endl; 
	     cout<<A[i].name<<"        "<<A[i].num<<"       "<<A[i].cla
			<< "      "<<A[i].mark[0]<<"      "<<A[i].mark[1]<<"    "<<A[i].mark[2]
	         <<"    "<<A[i].mark[3]<<"    "<<A[i].mark[4]<<endl;  s=1;*/

 cout<<"姓名\t学号\t班级\t排名\t语文\t数学\t外语\tC++"<<endl; 
	     cout<<A[i].name<<"\t"<<A[i].num<<"\t"<<A[i].cla
			<<"\t"<<A[i].mark[0]<<"\t"<<A[i].mark[1]<<"\t"<<A[i].mark[2]
	         <<"\t"<<A[i].mark[3]<<"\t"<<A[i].mark[4]<<endl;  s=1;
	 }  
	
	  } 
	  if(s==0)     cout<<endl<<"....您要查询的记录不存在!..."<<endl;      
	  query();    
     
}
else if(con==3) readme();

else { 
	cout<<"请输入正确的操作符!"<<endl; query();
}


}


/*.........................................................................*/

void addrecord()
{  cout<<"................添加界面..............."<<endl;
   cout<<"按 1 键进行整体添加(如  张三 1001 4 76 54 23 98)"<<endl;
   cout<<"按 2 键进行分别添加"<<endl;
   cout<<"按 3 键退出添加"<<endl;
   cout<<"按 4 键继续添加"<<endl;
   int i;
   cin>>i;
 
   line_num++;

   if(i==2){
   cout<<endl<<"请输入学生姓名:";
   cin>>A[line_num-1].name;
   cout<<endl<<"请输入学生学号:";
   cin>>A[line_num-1].num;
   cout<<endl<<"请输入学生班级:";
   cin>>A[line_num-1].cla;
   cout<<endl<<"请输入语文成绩:";
   cin>>A[line_num-1].mark[1];
   cout<<endl<<"请输入数学成绩:";
   cin>>A[line_num-1].mark[2];
   cout<<endl<<"请输入英语成绩:";
   cin>>A[line_num-1].mark[3];
   cout<<endl<<"请输入C++成绩:";
   cin>>A[line_num-1].mark[4];
   addrecord();
   }
   else if(i==1){
	  
   cin>>A[line_num-1].name;
   
   cin>>A[line_num-1].num;
  
   cin>>A[line_num-1].cla;

   //cin>>A[line_num-1].mark[0];
   
   cin>>A[line_num-1].mark[1];
  
   cin>>A[line_num-1].mark[2];
   
   cin>>A[line_num-1].mark[3];
  
   cin>>A[line_num-1].mark[4];
   addrecord();
   }
   else if(i==3){
   line_num--;
   readme();
   }
   else if(i==4)  addrecord();
   else {
	   cout<<endl<<"控制符输入错误";
	   addrecord();
   }


}

///

	
void display(){
  int i;
cout<<"姓名\t学号\t班级\t排名\t语文\t数学\t外语\tC++"<<endl;
 // cout<<"姓名        学号       班级      排名      语文      数学       外语       C++"<<endl; 
  for(i=0;i<=line_num-1;i++)

 cout<<A[i].name<<"\t"<<A[i].num<<"\t"<<A[i].cla
			<<"\t"<<A[i].mark[0]<<"\t"<<A[i].mark[1]<<"      "<<A[i].mark[2]
	         <<"       "<<A[i].mark[3]<<"      "<<A[i].mark[4]<<endl; // s=1;
 // cout<<A[i].name<<"        "<<A[i].num<<"       "<<A[i].cla<<"         "<<A[i].mark[0]<<"         "<<A[i].mark[1]<<"      "<<A[i].mark[2]
//	  <<"       "<<A[i].mark[3]<<"        "<<A[i].mark[4]<<endl;
  rewind(fp);
  readme();
}



/*................................................................................*/
void savechange(){
 fclose(fp);
 int i;
 char ch='\n';
char *c="姓名\t学号\t班级\t排名\t语文\t数学\t外语\tC++";
 //char *c="姓名        学号       班级      排名      语文     数学     外语       C++";
 char *d="\t";

  cout<<"已保存到文件"<<endl;
 if((fp=fopen(filename,"wt"))==NULL){
  cerr<<"open unsuccessful";
  exit(-1);
 }
 fclose(fp);

 if((fp=fopen(filename,"a"))==NULL){
  cerr<<"open unsuccessful";
  exit(-1);
 }
  //cout<<"in 2"<<endl;
 fprintf(fp,"%s",c);
 
 fprintf(fp,"%c",ch);
  for(i=0;i<=line_num-1;i++){ 
	fprintf(fp,"%s",A[i].name);
    fprintf(fp,"%s",d);

    fprintf(fp,"%s",A[i].num);
    fprintf(fp,"%s",d);

    fprintf(fp,"%s",A[i].cla);
    fprintf(fp,"%s",d);

    fprintf(fp,"%d",A[i].mark[0]);
    fprintf(fp,"%s",d);

    fprintf(fp,"%d",A[i].mark[1]);
    fprintf(fp,"%s",d);

    fprintf(fp,"%d",A[i].mark[2]);
    fprintf(fp,"%s",d);

    fprintf(fp,"%d",A[i].mark[3]);
    fprintf(fp,"%s",d);

    fprintf(fp,"%d",A[i].mark[4]);
	if(i!=line_num-1)

    fprintf(fp,"%c",ch);
  }
  
fclose (fp);
readme();
}

/*................................................................*/

void  deleterecord(){
   int i,j,con=0,k,l,s=0;
   if(line_num==0)   { cout<<"记录已为空,不能再删除";  readme(); }
   cout<<endl<<"..."<<line_num<<endl;

   cout<<"...............删除操作界面................"<<endl;
   cout<<"按 1 键以姓名进行删除"<<endl;
   cout<<"按 2 键以学号进行删除"<<endl;
   cout<<"按 3 键退出删除操作"<<endl;
   cout<<"按 4 键继续进行删除操作"<<endl;

   cin>>con;
 
   char n[9];
   char m[10]; 

if(con==1)
{  cout<<"请输入要删除学生的姓名:"; 
  
   cin>>n;
   
  line_num--;
   for(i=0;i<=line_num-1;i++)	{   
       for(j=0;j<=strlen(A[0].name)-1;j++)  {  

	     if(A[i].name[j]!=n[j]) break; 
	   }
     if(j==strlen(A[0].name)) {

		 s=1;  cout<<"已成功删除"<<endl;
		  
		   for(k=i;k<=line_num-2;k++){
			   for(l=0;l<=9;l++)
		   A[k].num[l]=A[k+1].num[l]; 

			    for(l=0;l<=8;l++)
	       A[k].name[l]=A[k+1].name[l];

				 for(l=0;l<=3;l++)
		   A[k].cla[l]=A[k+1].cla[l]; 

		   A[k].mark[1]=A[k+1].mark[1]; A[k].mark[2]=A[k+1].mark[2];
		   A[k].mark[3]=A[k+1].mark[3];  A[k].mark[4]=A[k+1].mark[4];
		  
		   
		  }  
	 } //if 

	   } 
   if(s==0) cout<<endl<<"....您要删除的记录不存在!..."<<endl;

   deleterecord();
}
else if(con==2)
{  
  cout<<"请输入要删除学生的学号:"; 
 
   cin>>m;
   line_num--;

    for(i=0;i<=line_num-1;i++){  
	   for(j=0;j<=strlen(A[0].num)-1;j++) {   

	   if(A[i].num[j]!=m[j]) break; 
	   }
     if(j==strlen(A[0].num)) {

		 s=1;  cout<<"已成功删除"<<endl;
		 
		  for(k=i;k<=line_num-1;k++){
			   for(l=0;l<=9;l++)
                A[k].num[l]=A[k+1].num[l]; 
			    for(l=0;l<=8;l++)
	       A[k].name[l]=A[k+1].name[l];
				 for(l=0;l<=3;l++)
		   A[k].cla[l]=A[k+1].cla[l]; 
		   A[k].mark[1]=A[k+1].mark[1]; A[k].mark[2]=A[k+1].mark[2];
		   A[k].mark[3]=A[k+1].mark[3];  A[k].mark[4]=A[k+1].mark[4];
		   
		  
		 } //for 
	 } //if
	 
	               
     
	 }  
	if(s==0) cout<<endl<<"....您要删除的记录不存在!..."<<endl;

   deleterecord();
}

else if(con==3) {  readme(); }

else if(con==4) deleterecord();

else { 
	cout<<"请输入正确的操作符!"<<endl; query();
 }




}

///////

void sortrecord()
{
  int i,j=0,temp,a[60],k=0,l,n,m;
  Student B;

   cout<<"...............排序操作界面................"<<endl;
   cout<<"按 1 键以总成绩进行排序"<<endl;
   cout<<"按 2 键退出排序操作"<<endl;
   cout<<"按 3 键继续进行排序操作"<<endl;
   cin>>n;
 if(n==1) 
 {
  for(i=0;i<=line_num-1;i++)
    A[i].mark[0]=A[i].mark[1]+A[i].mark[2]+A[i].mark[3]+A[i].mark[4];

 
   for(l=0;l<=line_num-1;l++){
      temp=A[0].mark[0];
      for(i=0;i<=line_num-1;i++){
		  if(A[i].mark[0]>=temp)  { 
			  temp=A[i].mark[0];  j=i;
		  }
	  } 
         a[k++]=j;  A[j].mark[0]=0; 
   }//for
   k=1;
   for(i=0;i<=line_num-1;i++){
     for(l=0;l<=line_num-1;l++){
      if(a[i]==l) A[l].mark[0]=k++;
	 }
   }
    k=0;    //display(); 
	/*   for(i=0;i<=line_num-1;i++) {
		  for(j=0;j<=line_num-1;j++){
			  if(A[j].mark[0]==(k+1)){   cout<<endl<<"..."<<j<<"..."<<k<<endl;
	            for(l=0;l<=9;l++)
				{ B.num[l]=A[k].num[l];   A[k].num[l]=A[j].num[l]; A[k].num[l] =B.num[l]; }
			        for(l=0;l<=8;l++)
	                 {B.name[l]=A[k].name[l];   A[k].name[l]=A[j].name[l]; A[k].name[l] =B.name[l]; }
				      for(l=0;l<=3;l++)
		              	{B.cla[l]=A[k].cla[l];   A[k].cla[l]=A[j].cla[l]; A[k].cla[l] =B.cla[l]; }
                       for(l=0;l<=4;l++)
					   { B.mark[l]=A[k].mark[l];   A[k].mark[l]=A[j].mark[l]; A[k].mark[l] =B.mark[l];} 
					     k++;
			 } //if
		  }
	   } */
	  

   sortrecord();
  
 }//if
if(n==2)  readme();
if(n==3)  sortrecord();
 

}
//////////

/*............copyright reserved ......2006-6-9........xiangda 530工作室..............*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -