C++学生管理系统

#include<iostream>
#include<algorithm>
#include<iomanip>
#include<string>
#include<string.h>
#include<cstdlib> 
using namespace std; 
FILE *fp; 
struct stu{
        char name[7];      //注意,输入格式一定要按这个格式 
        char ID[13];       //请按姓名(3位) 学号(12位) 性别(1位) 年龄(2位)
        char sex[3];      //男,女 
        char age[3];
}*p;
class student{
     private:
        stu stud[40];
        stu stud1[40];
     public:
     	student(){};
		~student(){}; 
         int num;
        void addinf();      //增加信息  1     //inf:information
        void showinf();     //显示信息  2     // 
        void seacinf();     //查找信息  3
        void modify();      //修改信息  4
        void delinf();      //删除信息  5      
        void sortinf();     //信息排序  6
        void menu();        //功能主菜单
        void screen();      //界面停留 
};

void student::addinf(){
	        cout<<"请输入添加学生的数量"<<endl<<endl;
	        cin>>num;
	        cout<<"请按姓名、学号、性别、年龄的顺序输入信息"<<endl<<endl; 
	    for(int i=0;i<num;i++)
		{
	        cin>>stud[i].name>>stud[i].ID>>stud[i].sex>>stud[i].age;
		}
	 	fp=fopen("C:\\information8.txt","w+");
			if(fp==NULL)
			{
	 		cout<<"文件打开失败!"<<endl;
	        screen();
			}
	  		for(int i=0;i<num;i++)
		  {
	  		fwrite(&stud[i],sizeof(struct stu),1,fp);
		  }
		    fclose(fp);
		    rewind(fp);//每次文件读取,读入过后要把文件指针归位 
		    getchar();
	        cout<<"输入完毕,请按回车键继续"<<endl<<endl; 
		    getchar();
		    menu();
}
void student::showinf(){
		fp=fopen("C:\\information8.txt","r+");
			if(fp==NULL)
			{
	 		 cout<<"文件打开失败!"<<endl;
	         screen();
			}
			if(num==0){
				cout<<"没有储存信息,请添加后再进行操作!!!"<<endl;
				rewind(fp);
				screen(); 
			}
			else{
	    for(int i=0;i<num;i++)
		{    fread(&stud1[i],sizeof(struct stu),1,fp);
	        cout<<stud1[i].name<<" "<<stud1[i].ID<<" "<<stud1[i].sex<<" "<<stud1[i].age<<endl<<endl;
		}
		fclose(fp);
		rewind(fp);
		screen();}
 }
void student::seacinf(){
	 	fp=fopen("C:\\information8.txt","r+");
			if(fp==NULL)
			{
	 		cout<<"文件打开失败!"<<endl;
	        screen();
			}
	        int flag=0,l;
	        char  s[13];   //可以添加从姓名,年龄来找 
	        cout<<"请输入要查找学生的学号"<<endl<<endl;
			   for(int i=0;i<12;i++)
	               cin>>s[i];
	   for(int i=0;i<num;i++)
	   { fread(&stud1[i],sizeof(struct stu),1,fp);
	    if(strcmp(s,stud1[i].ID)==0)
		{
	        flag=1;
	        l=i;
	    }
	   }
	   rewind(fp);
	   if(!flag)
	   {
	        cout<<"没有该学生的信息"<<endl<<"请按回车键继续"<<endl<<endl;
	        screen();
	   }
	   if(flag==1)
	   {    cout<<"找到了!!!"<<endl; 
	   	    cout<<stud1[l].name<<" "<<stud1[l].ID<<" "<<stud1[l].sex<<" "<<stud1[l].age<<endl;
	   	    screen();
	   }
	   fclose(fp);
}
void student::modify(){
	 	fp=fopen("C:\\information8.txt","r+");
			if(fp==NULL)
			{
	 		 cout<<"文件打开失败!"<<endl;
	        screen();
			}
	        int flag=0,l,n;
	        char  s[13];
	        cout<<"请输入要修改学生的学号"<<endl<<endl;
			   for(int i=0;i<12;i++)
	               cin>>s[i];
	   for(int i=0;i<num;i++)
	   { 
	    fread(&stud1[i],sizeof(struct stu),1,fp);}
	    rewind(fp);
	    for(int i=0;i<num;i++)
	    {
		if(strcmp(s,stud1[i].ID)==0)
		{
	        flag=1;
	        l=i;
	    }
	   }
	   if(!flag)
	   {
	        cout<<"没有该学生的信息"<<endl<<"请按回车键继续"<<endl<<endl;
	        screen();
	   }
	   if(flag==1)
	   {   
	   	    cout<<stud1[l].name<<" "<<stud1[l].ID<<" "<<stud1[l].sex<<" "<<stud1[l].age<<endl;
	   	    cout<<"是否要修改该信息"<<endl<<"1:是  "<<endl<<"0:否"<<endl;
			   cin>>n;
			   if(n==0) 
	   	       screen();
	   	       if(n==1){
	   	       	 cout<<"请按姓名(3位) 学号(12位) 性别(1位) 年龄(2位)(中间以空格隔开)的顺序输入修改后的信息"<<endl;
	   	       	 cin>>stud1[l].name>>stud1[l].ID>>stud1[l].sex>>stud1[l].age;
	   	       	 for(int i=0;i<num;i++)
		  {
	  		fwrite(&stud1[i],sizeof(struct stu),1,fp); //重新读入一次 
		  }
		  rewind(fp);
	   	       	 	cout<<"修改完毕!"<<endl; 
				  }
	   }
	   fclose(fp); 
	   screen();
}
void student::delinf(){
	 	fp=fopen("C:\\information8.txt","r+"); 
			if(fp==NULL)
			{
	 		 cout<<"文件打开失败!"<<endl;
	        screen();
			}
	        int flag=0,l,n;
	        char  s[13];
	        cout<<"请输入要删除信息学生的学号"<<endl<<endl;
			   for(int i=0;i<12;i++)
	               cin>>s[i];
	   for(int i=0;i<num;i++)
	   { 
	    fread(&stud[i],sizeof(struct stu),1,fp);}
	    rewind(fp);
	    for(int i=0;i<num;i++)
	    {
		if(strcmp(s,stud[i].ID)==0)
		{
	        flag=1;
	        l=i;
	    }
	   }
	   if(!flag)
	   {
	        cout<<"没有该学生的信息"<<endl<<"请按回车键继续"<<endl<<endl;
	        screen();
	   }
	   if(flag==1)
	   {   
	   	    cout<<stud[l].name<<" "<<stud[l].ID<<" "<<stud[l].sex<<" "<<stud[l].age<<endl;
	   	    cout<<"是否要删除该信息"<<endl<<"1:是  "<<endl<<"0:否"<<endl;
			   cin>>n;
			   if(n==0) 
	   	       screen();
	   	       if(n==1){
	   	       
	   	   for(int i=l;i<num-1;i++)
		  {
	  		strcpy(stud[i].name,stud[i+1].name);
   		    strcpy(stud[i].ID,stud[i+1].ID);
   		   strcpy(stud[i].sex,stud[i+1].sex);
   		   strcpy(stud[i].age,stud[i+1].age);
		  } 
		  
		  for(int i=0;i<num-1;i++)
		  {
		   fwrite(&stud[i],sizeof(struct stu),1,fp); //重新读入一次 
			   } 	
			   num=num-1;
	   	       	 	cout<<"删除成功!"<<endl; 
				  }
	   }
	   rewind(fp);
	   fclose(fp); 
	   screen();
}
bool cmp(stu a,stu b){          //愚笨的暴力排序 
	if(a.ID[0]==b.ID[0]){
		if(a.ID[1]==b.ID[1]){
			if(a.ID[2]==b.ID[2]){
				if(a.ID[3]==b.ID[3]){
					if(a.ID[4]==b.ID[4]){
					    if(a.ID[5]==b.ID[5]){
					    	if(a.ID[6]==b.ID[6]){
					    		if(a.ID[7]==b.ID[7]){
					    			if(a.ID[8]==b.ID[8]){
					    				if(a.ID[9]==b.ID[9]){
					    					if(a.ID[10]==b.ID[10]){
					    					return a.ID[11]<=b.ID[11];
										}return a.ID[10]<b.ID[10];
									}return a.ID[9]<b.ID[9];
								}return a.ID[8]<b.ID[8];
							}return a.ID[7]<b.ID[7];
						}return a.ID[6]<b.ID[6];
					}return a.ID[5]<b.ID[5];
				}return a.ID[4]<b.ID[4];
			}return a.ID[3]<b.ID[3];
		}return a.ID[2]<b.ID[2];	
	}return a.ID[1]<b.ID[1];
}return a.ID[0]<b.ID[0];
}
void student::sortinf(){
	       int y;
	 	fp=fopen("C:\\information8.txt","r+");
			if(fp==NULL)
			{
	 		cout<<"文件打开失败!"<<endl;
	        screen();
			}
		for(int i=0;i<num;i++)
	   { 
	    fread(&stud[i],sizeof(struct stu),1,fp);
	   }
	    rewind(fp);
		//cout<<"请选择排序方式"<<endl<<"1 : 按学号排序"<<endl<<"2 : 按年龄排序"<<endl;
		//cin>>y;
		//if(y==1)	   
		sort(stud,stud+num,cmp);
//		else if(y==2)
//		{sort(stud,stud+num,cmp1);}
//		else {
//			cout<<"没有此选项!!"<<endl;
//			screen(); 
//		}
		for(int i=0;i<num;i++)
	   { 
	    fwrite(&stud[i],sizeof(struct stu),1,fp);
	   }
	   cout<<"排序完成,请按2查看!!"<<endl;	    
	   rewind(fp);
	   fclose(fp); 
	   screen();
}
void student ::screen(){
 	getchar();
 	getchar();
 	menu();
} 
 
void student::menu()
{
 	system("cls");
 	   cout<<"             ---------学生信息管理系统---------              "<<endl<<endl;
	   cout<<"                1 : 增加信息     4 : 修改信息                "<<endl<<endl;	 
 	   cout<<"                2 : 显示信息     5 : 删除信息                "<<endl<<endl;
 	   cout<<"                3 : 查找信息     6 : 信息排序                "<<endl<<endl;
 	   cout<<"                0 : 退出程序                                 "<<endl;
 	   cout<<"             ----------------------------------              "<<endl<<endl;
 	   cout<<"请选择(0——6)"<<endl; 
      int chioce;
      cin>>chioce;
      switch(chioce)
	  {
      case 1: addinf(); break;
      case 2: showinf();break;    
      case 3: seacinf();break;
      case 4: modify(); break;     
      case 5: delinf(); break;     
      case 6: sortinf();break;
      case 0: exit(0);            //直接退出 
      default : cout<<"选择错误!!!请重新选择 "<<endl;screen(); 
      }
}
int main(){
    student ss;
    ss.menu();
    return 0;
}

阅读更多

扫码向博主提问

本该如此

非学,无以致疑
去开通我的Chat快问
个人分类: 学习小文件
上一篇CSU1100一二三(长记性)
下一篇Vector的一般用法
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭