精华内容
下载资源
问答
  • C++学生信息管理系统

    千次阅读 多人点赞 2019-11-06 11:20:30
    我大一时,使用C++写了一个简单的学生管理系统,主要是为了完成老师布置的课程设计。现在又快到那个验收课程设计的时候了,现在分享给大家。如果你要的是用C写的代码,这个也是可以参考的,你可以自己进行修改成C的...

    我大一时,使用C++写了一个简单的学生信息管理系统,现在又快到那个验收课程设计的时候了,现在分享给大家。如果你要的是用C写的代码,这个也是可以参考的,你可以自己进行修改成C的代码。

    先上截图简单的介绍下这个程序

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    大致上就这12个功能,你们也可以自己测试测试,像年龄的范围可以设置成18-24岁,性别设置成只可以输入男或女,这些你们都可以在完善下。
    我的IDE是DEV C++,为了测试的一致性,最好和我选用一样的IDE。
    好了,最后附上源代码。

    /*题目 
    新生基本信息统计软件 
    链表类实现并写入文件和实现登录 
    */ 
    #include<iostream>
    #include<fstream>
    #include<cstring> 
    using namespace std;
    struct Student_Node //单链表的结点的定义 
    {
    	    //数据域 
    	    int num; 
    	    int age;
    	    char name[20];
    		char sex[10];
    	    char major[10];
    	    char born[10];
    	    char address[10];
    	    int English;
    	    //指针域 
    	    struct Student_Node *next;
    };
    //定义学生类 
    class Student
    {	    
    public:
              Student()
             {
            	  head=new Student_Node;
             	  head->next=NULL;
    		 }
    		void menu();//主菜单 
    	    void create();//录入学生的信息 
            void add();//增添学生信息 
    	    void pass();//删除学生信息
    		void seek();//查找学生的信息
    		void insert();//插入学生的信息 
    		void rewrite();//修改学生的信息 
    	    void sort();//按照学生的英语成绩进行排序 
    	    void show();//显示全部学生的信息 
    	    void getfile();//将学生的信息写入文件之中
    		void putfile();//将学生的信息显示在终端上 
    	    virtual void count()=0;//统计学生的信息
    	    void major_();
            void sex_();
            void age_();
    private:
            struct Student_Node *head;
    };
    			
    class Freshman:public Student
    {
    public:		
    	    void count()//统计学生的信息 
    	    {
    	    	cout<<"\t\t\t\t1.按专业统计学生的信息"<<endl;
    	        cout<<"\t\t\t\t2.按性别统计学生的信息"<<endl;
    	        cout<<"\t\t\t\t3.按年龄统计学生的信息"<<endl; 
    	        cout<<"\t\t\t\t请输入您的选择......."<<endl<<"\t\t\t\t";
    	  		int i;cin>>i;
    	  		switch(i)
    	  		{
    		  	    case 1: major_(); break;	  	    	
    		  	    case 2: sex_(); break;	
    		  	    case 3: age_(); break; 		  	    	
    	 		}
    		}
    private:
           	struct Student_Node *head;
    };
    void Student::major_()
    {
    	    		struct Student_Node *p1=head->next;
    	            cout<<"\t\t\t\t专业:";
    	            int cnt=0;char c[20];cin>>c;
    				while(p1)
    				{
    					if(strcmp(c,p1->major)==0)
    					{
    		    		 cnt++;
    					}
    					p1=p1->next;
    				}
    				cout<<"\t\t\t\t"<<c<<":"<<cnt<<"人"<<endl;getchar();
    }
    void Student::sex_()
    {
    			struct Student_Node *p1=head->next; 
    			cout<<"\t\t\t\t性别:";
    			int cnt=0;char c[10];cin>>c;
    			while(p1)
    			{
    				if(strcmp(c,p1->sex)==0)
    				{
    				     cnt++;
    				}
    				p1=p1->next;
    			}
    			cout<<"\t\t\t\t"<<c<<":"<<cnt<<"人"<<endl;getchar();		
    }
    void Student::age_()
    {
    			struct Student_Node *p1=head->next; 
    			cout<<"\t\t\t\t年龄:";
    			int cnt=0;int c;cin>>c;
    			while(p1)
    			{
    				if(p1->age==c)
    				{
    				     cnt++;
    				}
    				p1=p1->next;
    			}
    			cout<<"\t\t\t\t"<<c<<"岁"<<":"<<cnt<<"人"<<endl;getchar();
    }		
    //类成员函数的实现 
    void Student::create()//创建一个链表,用来录入学生的信息 
    {
    	cout<<"\t\t\t\t请输入您要创建的学生的数量:"<<endl<<"\t\t\t\t";
    	int i;
    	cin>>i; 
    	struct Student_Node *p1=head;
        struct Student_Node *p2;
       	for(int j=1;j<i+1;j++)
    	{
    		p2=new Student_Node;
    		cout<<"\t\t\t\t请输入第"<<j<<"个学生的学号:"<<endl<<"\t\t\t\t";
    		cin>>p2->num;
    		cout<<"\t\t\t\t请输入第"<<j<<"个学生的年龄:"<<endl<<"\t\t\t\t";
    		cin>>p2->age;
    		cout<<"\t\t\t\t请输入第"<<j<<"个学生的姓名:"<<endl<<"\t\t\t\t";
    		cin>>p2->name;
    		cout<<"\t\t\t\t请输入第"<<j<<"个学生的性别:"<<endl<<"\t\t\t\t";
    		cin>>p2->sex; 
        	cout<<"\t\t\t\t请输入第"<<j<<"个学生的专业:"<<endl<<"\t\t\t\t";
    		cin>>p2->major;
    		cout<<"\t\t\t\t请输入第"<<j<<"个学生的出生日期:"<<endl<<"\t\t\t\t";
    		cin>>p2->born;
    		cout<<"\t\t\t\t请输入第"<<j<<"个学生的家庭住址:"<<endl<<"\t\t\t\t";
    		cin>>p2->address;
    		cout<<"\t\t\t\t请输入第"<<j<<"个学生的英语成绩:"<<endl<<"\t\t\t\t";
    		cin>>p2->English;
    	    p2->next=NULL;
    		p1->next=p2;
    		p1=p2;
    	}
    	getchar();
    }
    void Student::add()//增加学生的信息 
    {
    	struct Student_Node *p1=head->next;
    	struct Student_Node *p2;
    	int a=1,b=1;
    	int c; //学生的学号                
    	while(p1->next!=NULL)
    	{
    		p1=p1->next;
    		a++;
    	}
    	cout<<"\t\t\t\t请输入学生的学号:"<<endl<<"\t\t\t\t";
    	cin>>c;
    	p1=head->next;
    	for(int i=1;i<=a;i++)//判断学生的学号是否重复 
    	{
    		if(p1->num==c)
    		{
    			cout<<"\t\t\t\t出错:学号重复!!!"<<endl;
    			b=0;
    			break; 
    		}
    		p1=p1->next; 
    	} 
    	  if(b!=0)//判断 
    	  {
    	  	 p1=head;
    	  	 while(p1->next!=NULL)
    	  	 {
    	  	 	 p1=p1->next;	   
    	     }
    	        p2=new Student_Node;                 
    	  	    p2->num=c; 	    
        	cout<<"\t\t\t\t请输入学生的年龄:"<<endl<<"\t\t\t\t";cin>>p2->age;	   
    	    cout<<"\t\t\t\t请输入学生的姓名:"<<endl<<"\t\t\t\t";cin>>p2->name;	
         	cout<<"\t\t\t\t请输入学生的性别:"<<endl<<"\t\t\t\t";cin>>p2->sex; 	
            cout<<"\t\t\t\t请输入学生的专业:"<<endl<<"\t\t\t\t";cin>>p2->major;	
    	    cout<<"\t\t\t\t请输入学生的出生日期:"<<endl<<"\t\t\t\t";cin>>p2->born;	
    	    cout<<"\t\t\t\t请输入学生的家庭住址:"<<endl<<"\t\t\t\t";cin>>p2->address;	
    	    cout<<"\t\t\t\t请输入学生的英语成绩:"<<endl<<"\t\t\t\t";cin>>p2->English;	
    		p2->next=NULL;
    		p1->next=p2;
    		p1=p2;    
        }
    	getchar();
    }		
    void Student::pass()//删除学生的信息 
    {
    	struct Student_Node *p1;
    	p1=head;
    	struct Student_Node *p2;
    	int i=1;
    	if(p1->next==NULL)
    	{
    		cout<<"\t\t\t\t删除失败!!!"<<endl;
    		cout<<"\t\t\t\t无可用的数据!!!"<<endl;
    		i=0;
    	}
    	if(i==1)
    	{	 
    	     int j;
    		 cout<<"\t\t\t\t请输入您想要删除的学生的学号:"<<endl<<"\t\t\t\t";
    		 cin>>j;
    		 while(p1->next!=NULL)
    		 {
    		 	if(p1->next->num==j)
    		 	{
    		 		cout<<"\t\t\t\t******删除成功********"<<endl;
    		 		getchar();
    		 		p2=p1->next;
    		 		p1->next=p2->next;
    		 		delete p2;
    		 		return ;
    		 		
    			}
    			p1=p1->next;	
    		 }
    		 cout<<"\t\t\t\t删除错误!!!无法找到此学生的信息!!!"<<endl;	
    	}
    	getchar();
    }
    void Student::seek() //查找学生的信息 
    {
    	int  i=0;
    	struct Student_Node *p1=head->next;
    	int j;
    	cout<<"\t\t\t\t|--------------------------|"<<endl;
    	cout<<"\t\t\t\t|                          |"<<endl;
    	cout<<"\t\t\t\t|【1】请输入学生的学号查询 |"<<endl;
    	cout<<"\t\t\t\t|【2】请输入学生的姓名查询 |"<<endl;
    	cout<<"\t\t\t\t|                          |"<<endl;
    	cout<<"\t\t\t\t|--------------------------|"<<endl;
    	cout<<"\t\t\t\t";
    	cin>>j; 
    	switch(j)
          {
               case 1:
    		   int a;
    		   cout<<"\t\t\t\t请输入学生的学号:"<<endl<<"\t\t\t\t";
    		   cin>>a;
    		   while(p1!=NULL)
    		   {
    		   	  if(p1->num==a)
    		   	  {
    		   	  	  	cout<<"\t\t\t\t该学生的学号:\t\t\t\t";
    				    cout<<p1->num<<endl;
    				    cout<<"\t\t\t\t该学生的年龄:\t\t\t\t";
    				    cout<<p1->age<<endl;
    				    cout<<"\t\t\t\t该学生的姓名:\t\t\t\t";
    					cout<<p1->name<<endl;
    					cout<<"\t\t\t\t该学生的性别:\t\t\t\t";
    					cout<<p1->sex<<endl; 
    				    cout<<"\t\t\t\t该学生的专业:\t\t\t\t";					
    					cout<<p1->major<<endl;
    					cout<<"\t\t\t\t该学生的出生日期:\t\t\t";
    					cout<<p1->born<<endl;
    					cout<<"\t\t\t\t该学生的家庭住址:\t\t\t";					
    					cout<<p1->address<<endl;
    					cout<<"\t\t\t\t该学生的英语成绩:\t\t\t";
    					cout<<p1->English<<endl;	
    					i++;		   	  	  
    			  }
    			        p1=p1->next;
    		   }
    		           if(i==0)
    	                {
    	                	cout<<"\t\t\t\t查询错误!!!"<<endl; 
    	                	cout<<"\t\t\t\t没有此学生的数据!!!"<<endl; 
    				    } 
    			break; 
    		case 2:	
    		char xingming[20];
    		cout<<"\t\t\t\t请输入学生的姓名:"<<endl;
    		cout<<"\t\t\t\t";	
    		cin>>xingming;	
    		while(p1!=NULL)
    		{
    			 if(strcmp(p1->name,xingming)==0)
    			 {
    			 	    
    			 	    cout<<"\t\t\t\t该学生的学号:\t\t\t\t";
    				    cout<<p1->num<<endl;
    				    cout<<"\t\t\t\t该学生的年龄:\t\t\t\t";
    				    cout<<p1->age<<endl;
    				    cout<<"\t\t\t\t该学生的姓名:\t\t\t\t";
    					cout<<p1->name<<endl;
    					cout<<"\t\t\t\t该学生的性别:\t\t\t\t";
    					cout<<p1->sex<<endl; 
    				    cout<<"\t\t\t\t该学生的专业:\t\t\t\t";					
    					cout<<p1->major<<endl;
    					cout<<"\t\t\t\t该学生的出生日期:\t\t\t";
    					cout<<p1->born<<endl;
    					cout<<"\t\t\t\t该学生的家庭住址:\t\t\t";					
    					cout<<p1->address<<endl;
    					cout<<"\t\t\t\t该学生的英语成绩:\t\t\t";
    					cout<<p1->English;						
    		            i++;
    			 }
    			 p1=p1->next;
    		}	
    		 if(i==0)	
    			{
    				
    				cout<<"\t\t\t\t查询错误!!!"<<endl; 
    	            cout<<"\t\t\t\t没有此学生的数据!!!"<<endl;
    			}
    			break;
    			default:
    			cout<<"\t\t\t\t信息错误!!!"<<endl;	
          }
    	getchar();
    }
    void Student::insert() //插入学生的信息 
    {
    	struct Student_Node *p1,*p2;
    	struct Student_Node *p3; 
    	int i;
    	cout<<"\t\t\t\t请输入要在哪个学号之后插入学生信息:"<<endl<<"\t\t\t\t";
    	cin>>i;
    	p1=new Student_Node;
    	cout<<"\t\t\t\t请输入待插入学生的学号:"<<endl<<"\t\t\t\t";
    	cin>>p1->num;
    	cout<<"\t\t\t\t请输入待插入学生的年龄:"<<endl<<"\t\t\t\t";
    	cin>>p1->age;
    	cout<<"\t\t\t\t请输入待插入学生的姓名:"<<endl<<"\t\t\t\t";
    	cin>>p1->name; 
    	cout<<"\t\t\t\t请输入待插入学生的性别:"<<endl<<"\t\t\t\t";
    	cin>>p1->sex;
    	cout<<"\t\t\t\t请输入待插入学生的专业:"<<endl<<"\t\t\t\t";
    	cin>>p1->major;
    	cout<<"\t\t\t\t请输入待插入学生的出生日期:"<<endl<<"\t\t\t\t";
    	cin>>p1->born;
    	cout<<"\t\t\t\t请输入待插入学生的英语成绩:"<<endl<<"\t\t\t\t";
    	cin>>p1->English;
    	cout<<"\t\t\t\t请输入待插入学生的家庭住址:"<<endl<<"\t\t\t\t";
    	cin>>p1->address;
    	p2=head->next;
    	p3=head;
    	while(p2)
    	{
    		p3=p2;
    		if(p3->num==i)
    		{
    			break;
    		}
    		p2=p2->next;	
    	}
        p1->next=p3->next; 
    	p3->next=p1;
    	getchar();
    }
    void Student::rewrite()//修改学生的信息   
    {
    	struct Student_Node *p1=head->next;
    	struct Student_Node *p2=head->next;
    	cout<<"\t\t\t\t请输入需要修改的学生的学号:"<<endl;
    	int i;
    	int j=0;
    	int k=1;
    	cout<<"\t\t\t\t";
    	cin>>i;
    	while(p1)
    	{
    		if(p1->num==i)//对是否有该生的信息进行判断 
    		{
    			j=1;
    		}
    		p1=p1->next; 
    	}
    	 if(j==0)
    	 {
    	 	cout<<"\t\t\t\t错误!!!"<<endl;
    	 	cout<<"\t\t\t\t没有该生的信息!!!"<<endl;
    	 }
    	 if(j==1)
    	 {
    	    p1=head->next; 
    		while(p1)
    		{
    			if(p1->num==i)
    			 {
    			 	cout<<"\t\t\t\t-----------------------------"<<endl;
    			 	cout<<"\t\t\t\t|---【1】修改学生的学号------"<<endl; 
    				cout<<"\t\t\t\t|---【2】修改学生的姓名------"<<endl;
    		 		cout<<"\t\t\t\t|---【3】修改学生的性别------"<<endl;
    		 		cout<<"\t\t\t\t|---【4】修改学生的专业------"<<endl;
    			 	cout<<"\t\t\t\t|---【5】修改学生的出生日期--"<<endl;
    			    cout<<"\t\t\t\t|---【6】修改学生的家庭住址--"<<endl;                      
    			 	cout<<"\t\t\t\t|---【7】修改学生的英语成绩--"<<endl; 
    				cout<<"\t\t\t\t|---【8】修改学生的年龄------"<<endl;                    
                    cout<<"\t\t\t\t|----------------------------"<<endl;     
    				int x;
    				cout<<"\t\t\t\t";
    				cin>>x;
    				switch(x)
    				{
    					case 1:
    					cout<<"\t\t\t\t请输入修改后的学号:"<<endl;
    					int y;
    					cout<<"\t\t\t\t";
    					cin>>y; 
    					while(p2)
    					{
    						if(p2->num==y)
    						{
    							cout<<"\t\t\t\t出错!!!"<<endl;
    							cout<<"\t\t\t\t学号重复!!!"<<endl; 
    							break; 
    							k=0;	
    						}
    						p2=p2->next;
    					}
    					if(k!=0)
    					{
    						p1->num=y;
    					}
    					break;
    					case 2:
    					cout<<"\t\t\t\t请输入姓名:"<<endl<<"\t\t\t\t";
    					cin>>p1->name;
    					break;
    					case 3:
    					cout<<"\t\t\t\t请输入性别:"<<endl<<"\t\t\t\t";
    					cin>>p1->sex;
    					break;
    					case 4:
    					cout<<"\t\t\t\t请输入专业:"<<endl<<"\t\t\t\t";
    					cin>>p1->major;
    					break;
    					case 5:
    					cout<<"\t\t\t\t请输入出生日期:"<<endl<<"\t\t\t\t";
    					cin>>p1->born;
    					break;
    					case 6:
    					cout<<"\t\t\t\t请输入家庭住址:"<<endl<<"\t\t\t\t";	
    					cin>>p1->address;
    					break;
    					case 7:
    					cout<<"\t\t\t\t请输入英语成绩:"<<endl<<"\t\t\t\t";
    					cin>>p1->English;
    					break;
    					case 8:
    					cout<<"\t\t\t\t请输入年龄:"<<endl<<"\t\t\t\t";
    					cin>>p1->age;
    					break;
    				}
    				break;	           			 	
    			 }	 	
    		}	               
    	 }
    	 getchar();
    }
    void Student::sort()// 按照英语成绩排序
    //由高分到低分排列  
    {
    	int i=1;
    	if(head->next==NULL)
    	{
    		i=0;
    	}
    	if(i==0)
    	{
    		cout<<"\t\t\t\t出错!!!"<<endl;
    		cout<<"\t\t\t\t没有找到学生的数据!!!"<<endl; 
    	}
    	if(i==1)
    	{
    		struct Student_Node *p1,*p2;
    	    int num_1;
    	    int age_1;
    	    char name_1[20];
    		char sex_1[10];
    	    char major_1[10];
    	    char born_1[10];
    	    char address_1[10];
    	    int English_1;
    	    int num_2;
    	    int age_2;
    	    char name_2[20];
    		char sex_2[10];
    	    char major_2[10];
    	    char born_2[10];
    	    char address_2[10];
    	    int English_2;
    	    for(p1=head->next;p1!=NULL;p1=p1->next)
    		{
    			for(p2=p1->next;p2!=NULL;p2=p2->next)
    			{
    				if(p1->English<p2->English)
    				{
    					num_1=p1->num;
    					age_1=p1->age;
    					strcpy(name_1,p1->name);
    					strcpy(sex_1,p1->sex);
    					strcpy(major_1,p1->major);
    					strcpy(born_1,p1->born);
    					strcpy(address_1,p1->address);
    					English_1=p1->English;
    					num_2=p2->num;
    					age_2=p2->age;
    					strcpy(name_2,p2->name);
    					strcpy(sex_2,p2->sex);
    					strcpy(major_2,p2->major);
    					strcpy(born_2,p2->born);
    					strcpy(address_2,p2->address);
    					English_2=p2->English;
    					p1->num=num_2;
    					p1->age=age_2;
    					strcpy(p1->name,name_2);
    					strcpy(p1->sex ,sex_2);
    					strcpy(p1->major ,major_2);
    					strcpy(p1->born ,born_2);
    					strcpy(p1->address ,address_2);
    					p1->English=English_2;
    					p2->num=num_1;
    					p2->age=age_1;
    					strcpy(p2->name,name_1);
    					strcpy(p2->sex,sex_1);
    					strcpy(p2->major,major_1);
    					strcpy(p2->born,born_1);
    					strcpy(p2->address,address_1);
    					p2->English=English_1;		
    				}				
    			}
    		}
    		cout<<"\t\t\t\tWonderful*****排序成功*****"<<endl; 		  
    	}getchar(); 
    }
    void Student::show()//显示全部学生信息 
    {
    	struct Student_Node *p1=head->next;int i=1;	
        if(p1==NULL)
    	{
    	    i=0;
    	}	
    	if(i==0)
    	{
    		cout<<"\t\t\t\t出错!!!"<<endl;
    		cout<<"\t\t\t\t没有找到学生的信息!!!"<<endl;
    	}
    	if(i=1)
    	{
    		while(p1)
    		{
    			    cout<<endl;
    		      	cout<<"学生的学号:\t\t\t"<<p1->num<<endl;
    		      	cout<<"学生的年龄:\t\t\t"<<p1->age<<endl;
    			    cout<<"学生的姓名:\t\t\t"<<p1->name<<endl; 	
    				cout<<"学生的性别:\t\t\t"<<p1->sex<<endl;
    			    cout<<"学生的专业:\t\t\t"<<p1->major<<endl;					
    				cout<<"学生的出生日期:\t\t\t"<<p1->born<<endl;
    				cout<<"学生的家庭住址:\t\t\t"<<p1->address<<endl;					
    				cout<<"学生的英语成绩:\t\t\t"<<p1->English;	
    			    p1=p1->next;
    		}
    	}getchar();	
    }
    void Student::getfile()//将学生的信息写入文件之中
    {
    	ofstream outfile(".studentlist.txt");
    	if(!outfile)
    	{
    		 cout<<"打开文件失败!"<<endl;return ;		 
    	}
    	struct Student_Node *p1;
    	p1=head->next;
    	while(p1)
    	{
    	  outfile<<"学号:"<<p1->num<<endl;
    	  outfile<<"年龄:"<<p1->age<<endl;
    	  outfile<<"姓名:"<<p1->name<<endl;
          outfile<<"性别:"<<p1->sex<<endl;
    	  outfile<<"专业:"<<p1->major<<endl;
    	  outfile<<"出生日期:"<<p1->born<<endl;
    	  outfile<<"家庭地址:"<<p1->address<<endl;
    	  outfile<<"英语成绩:"<<p1->English<<endl;
          p1=p1->next;
    	}
    	outfile.close();
    	cout<<"保存成功!"<<endl;
    	getchar();
    }
    void Student::putfile()//将学生的信息显示在终端上 
    {
    	FILE *fp;
    	char str[1024];
    	fp=fopen(".studentlist.txt","r");
    	if(!fp)
    	{
    		return ;
    	}
    	while(fgets(str,1024,fp))
    	{
    		 cout<<str;
    	}
    	fclose(fp);
    	cout<<endl<<endl;
        system("pause");
    }
    void Student::menu()
    {
    	        cout<<"\t\t\t\t------------------------------------"<<endl;
    		   	cout<<"\t\t\t\t|            主菜单                 |"<<endl; 
    	     	cout<<"\t\t\t\t| 【1】创建学生的信息               |"<<endl; 
    		    cout<<"\t\t\t\t| 【2】增添学生信息                 |"<<endl; 
    		    cout<<"\t\t\t\t| 【3】删除学生信息                 |"<<endl; 
    		    cout<<"\t\t\t\t| 【4】查找学生的信息               |"<<endl; 
    		    cout<<"\t\t\t\t| 【5】插入学生的信息               |"<<endl; 
    		    cout<<"\t\t\t\t| 【6】显示学生的信息               |"<<endl;
    		    cout<<"\t\t\t\t| 【7】修改学生的信息               |"<<endl; 		    
    	  	    cout<<"\t\t\t\t| 【8】按照学生的英语成绩进行排序   |"<<endl; 
    	  	    cout<<"\t\t\t\t| 【9】将录入的学生的信息进行保存   |"<<endl; 
    	  	    cout<<"\t\t\t\t| 【10】将所保存的学生的信息进行读取|"<<endl;
    	  	    cout<<"\t\t\t\t| 【11】退出新生基本信息统计软件    |"<<endl; 
    	  	    cout<<"\t\t\t\t| 【12】统计学生的信息              |"<<endl; 
    	    	cout<<"\t\t\t\t------------------------------------|"<<endl; 
    	        cout<<"\t\t\t\t请输入您的选择:"<<endl<<"\t\t\t\t";
    }
    void start_page()
    {
    	   cout<<"\t\t\t\t|------------------------------------|"<<endl;
    	   cout<<"\t\t\t\t|------------------------------------|"<<endl;
    	   cout<<"\t\t\t\t|------------------------------------|"<<endl;
           cout<<"\t\t\t\t|------------------------------------|"<<endl;
    	   cout<<"\t\t\t\t|------------------------------------|"<<endl; 
    	   cout<<"\t\t\t\t|欢迎您使用新生基本信息统计软件!!!|"<<endl;
    	   cout<<"\t\t\t\t|------------------------------------|"<<endl;
    	   cout<<"\t\t\t\t|------------------------------------|"<<endl;
    	   cout<<"\t\t\t\t|------------------------------------|"<<endl;
    	   cout<<"\t\t\t\t|------------------------------------|"<<endl;
    	   cout<<"\t\t\t\t请按Enter进行下一步!!!"<<endl<<"\t\t\t\t";
           getchar();
           system("cls");	
    }
    void selection_function()
    {  
    		Student *p=new Freshman();      
    	    while(1)
    	    {
    	    	p->menu();int i;cin>>i;	    		        
    	    	switch(i)
    	        {
    	        	case 1: p->create();break;
    	        	case 2: p->add();break;
    	        	case 3: p->pass();break;
    	        	case 4: p->seek();break;
    	        	case 5: p->insert();break;
    	        	case 6: p->show();break;
    				case 7: p->rewrite();break;
    				case 8: p->sort();break;
    				case 9: p->getfile();break;
    				case 10: p->putfile();break;
    	        	case 11: cout<<"\t\t\t\t已退出,谢谢您的使用!!!"<<endl;break;
    	        	case 12: p->count();break;
    			}
    			if(i==11)
    			{
    				break;	
    			}
    			cout<<"\t\t\t\t"<<endl<<endl;
    			cout<<"点击Enter键进行下一步";
                getchar();
    			system("cls");	
    		}
    }
    void login()
    {
    	 char username[10],password[10];
    	 cout<<"\t\t\t\t欢迎您进入新生基本信息统计软件的注册界面!"<<endl<<endl;
    	 cout<<"\t\t\t\t【0】我已经注册过了!"<<endl<<endl;
    	 cout<<"\t\t\t\t【1】未注册,现在注册!"<<endl<<endl; 
    	 cout<<"\t\t\t\t请按Entet键继续......";
    	 getchar(); int i; 
    	 cout<<"\t\t\t\t"<<"请输入......"; cin>>i;	
    	 if(i)
    	 {
    	 	   cout<<"\t\t\t\t"<<"欢迎新用户注册!"<<endl<<endl;
    	 	   cout<<"\t\t\t\t"<<"请输入您的用户名:";
    	 	   cin>>username;
    	 	   cout<<"\t\t\t\t"<<"请输入您的密码:";
    	 	   cin>>password;
    	 	   system("pause");
    		   system("cls");
    		   ofstream regist(".login.txt");
    		   regist<<username;
    		   regist<<password;
    		   regist.close();
    		   cout<<"注册成功!"<<endl;
    		   getchar();
    		   system("cls");
    	 }
    	 cout<<"\t\t\t\t"<<"请输入您的用户名:"; 
    	 cin>>username;
    	 cout<<"\t\t\t\t"<<"请输入您的密码:";
    	 cin>>password;
         FILE *fp;
    	 char str[20];
         fp=fopen(".login.txt","r");
    	 if(!fp)
    	 {
    		return ;
    	 }
    	 while(fgets(str,20,fp))
    	 {
    	      
    	 }
    	 fclose(fp);
    	 if(strcmp(strcat(username,password),str)==0)
    	 {
    	 	    selection_function();      
    	 }
    	 else
    	 {
    	      cout<<"\t\t\t\t账号或密码错误,请输入正确的账号和密码!!!"<<endl;
    	      cout<<"\t\t\t\t为了保证您输入的信息的完整性,请您正常退出!!!"<<endl;   
    	 }
         getchar();
    }
    int main()
    {
    	   system("color 1f");
    	   start_page();
    	   login();
    	   return 0;  	
    }
    
    展开全文
  • c++学生信息管理系统

    千次阅读 多人点赞 2020-02-19 10:33:34
    c++学生信息管理系统 引言 这是我写的第一篇博客,是关于一个小的c艹课程设计,其中还有许多不足的地方,例如我使用的是UTF-8编码,但输出中文还是会有乱码的情况;还有就是从文件读出和存入是无法控制格式,以及我...

    c++学生信息管理系统

    引言

    这是我写的第一篇博客,是关于一个小的c艹课程设计,其中还有许多不足的地方,例如我使用的是UTF-8编码,但输出中文还是会有乱码的情况;还有就是从文件读出和存入是无法控制格式,以及我是用的是面向对象的方式但是感觉很多地方都没有体现出OPP的精髓,希望大家能帮我指出错误

    目录

    摘要
    一、需求分析:
    1.1概要
    1.2功能要求
    二、总体设计
    2.1主要功能
    2.2定义类和函数
    2.3程序功能结构图
    三、详细设计
    3.1函数功能介绍
    四、测试结果展示
    五、软件使用说明书
    六、总结
    6.1错误总结
    6.2学习总结
    七、参考资料
    八、开发工具
    九、源代码

    一、需求分析

    1.1 概要:

    学生信息管理的需要,建立一个“学生信息管理系统”,以方便对学校信息数据的录入、修改、删除、查询等一系列功能。

    1.2功能要求:

    (1)有菜单界面并且可以对功能进行选择;
    (2)能录入姓名、性别、学号、成绩(数学、英语、c++、总成绩、平均成绩);
    (3)按成绩对学生信息进行排序;
    (4)按姓名对学生信息进行修改;
    (5)按姓名对学生信息进行删除;
    (6)按姓名或学号对学生信息进行查询;

    二、总体设计

    2.1主要功能:

    (1) 从键盘录入学生个人信息并保存到文件中;
    (2) 从文件中读取学生个人信息;
    (3) 按学号对学生信息进行查找;
    (4) 按姓名对学生信息进行查找;
    (5) 按姓名对学生信息进行修改;
    (6) 按姓名对学生信息进行删除;
    (7) 计算各项成绩的平均成绩以及及格率;

    2.2定义类和函数:

    (1) 主函数main():调用各项实现函数对学生信息进行处理;

    (2) 定义类Student:用于定义成员结构体;

    a) Input()函数提示输入信息并进行输入;
    b) ReadFile()函数定义文件读入格式;
    c) Show1()函数为Display1()函数定义输出格式;
    d) Show2()函数为Display2()函数定义输出格式;

    (3) 定义类Studentmassage:用于实现各项功能函数;
    a) 构造函数Studentmassage():构建链表,判断文件中的信息是否为空,并入文件中的信息;
    b) 析构函数~Studentmassage():清空当前文件所有信息;
    c) 菜单ShowMenu():显示功能并提供选择;
    d) 查找函数Find():通过学生姓名或学号查找特定学生信息;
    e) 修改函数ModifyItem():通过姓名对特定学生的信息进行修改;
    f) 删除函数RemoveItem();通过姓名删除特定学生的信息;
    g) 记录函数ListCount():记录建立链表的数目及当前学生总人数;
    h) 交换函数Swap():排序时对两学生信息进行交换;
    i) 排序函数Sort():成绩对学生信息进行排序;
    j) 保存函数Save():将新建信息存入文件中;
    k) 添加函数AddItem():扩建链表添加学生信息;
    l) 输出信息Display1():输出链表中的各项信息;
    m) 输出信息Display1():输出链表中的各项信息;
    n) 输出信息Displa12():输出排序后的总成绩和排名;
    o) 计算函数Average():计算各项成绩的平均成绩和及格率并根据用户需求输出;

    2.3程序功能结构图:
    在这里插入图片描述

    三、详细设计

    3.1函数功能介绍:

    (1) 主函数main():先调用Studentmassage类的ShowMenu函数为用户提供选择,用户根据需要输入相应的序号调用Studentmassage类的相应函数;
    流程图如下:
    在这里插入图片描述

    (2) 读入学生信息:通过Studentmassage类的构造函数创建链表,由Student类的ReadFile()函数重载cin运算符读取文件信息;
    函数实现代码:

    Studentmassage::Studentmassage()		//构造函数
    {
    	head = new Student;
    	head->Next = new Student;
    	end = head->Next;
    	in.open("sort.txt");
    	if (!in)	cout << "这是一个新系统,无学生信息,请先输入。" << endl;
    	else
    	{
    		while (!in.eof())
    		{
    			end->ReadFile(in);
    			if (end->name[0] == '\0')	break;
    			end->Next = new Student;
    			end = end->Next;
    		}
    		in.close();
    		cout << "\t\t 读取学生信息成功!" << endl;
    	}
    }
    

    流程图如下:

    在这里插入图片描述

    (3) 保存学生信息:Studentmassage类的Save()函数找到相应文件,将当前链表中的所有信息都存入文件中;
    函数实现代码:

    void Studentmassage::Save()
    {
    	out.open("sort.txt");
    	for (Student *p = head->Next; p != end; p = p->Next)
    	{
    		out << p->name << "\t" << p->ID << "\t" << p->CPP << "\t" << p->MATH << "\t" << p->ENGLISH << "\t" << p->sum << p->rank << "\t" << endl;
    		out.close();
    	}
    }
    

    流程图如下:

    在这里插入图片描述

    (4) 添加学生信息:通过Studentmassage类的AddItem()函数在链表结尾添加新的链表,调用Student类的Input()函数进行信息输入;
    函数实现代码:

    void Studentmassage::AddItem()
    {
    	end->Input();
    	//	scpp += end->CPP;
    	//	smath += end->MATH;
    	//	seng += end->ENGLISH;
    	end->Next = new Student;
    	end = end->Next;
    	cout << "添加成功!" << endl;
    	system("pause");
    	//	cout << "请输入任意字符!继续......";
    	//	getchar();
    }
    

    (5) 显示信息(不含排名):通过Studentmassage类的Display1()函数调用Student类的Show1()函数显示最初始未经排名的信息;
    函数实现代码:

    void Studentmassage::Display1()
    {
    	cout << "姓名: \t\t" << "性别: \t\t" << "学号: \t\t"
    		<< "C++: \t" << "数学: \t" << "英语:\t"
    		<< " 总成绩: \t" << "\n\n";
    	for (Student*p = head->Next; p != end; p = p->Next)
    		p->Show1();
    	system("pause");
    	//	cout << "输入任意字符!继续······";
    	//	getchar();
    }
    

    (6) 显示成绩(含排名):通过Studentmassage类的Display2()函数先调用同类的Sort()函数进行排序并添加排名信息,再调用Student类的Show2()函数进行信息输出;
    函数实现代码:
    void Studentmassage::Display2()
    {
    Sort();
    cout << “姓名: \t\t” << “性别: \t\t” << “学号: \t\t”
    << " 总成绩: \t" << "排名: " << “\n\n”;
    for (Student*p = head->Next; p != end; p = p->Next)
    p->Show2();
    system(“pause”);
    // cout << “输入任意字符!继续······”;
    // getchar();
    }
    (7) 查看平均成绩和及格率:Studentmassage类的Average()函数中先创建一个Student类的指针p,用来遍历链表,算出各项成绩的总和并统计不及格人数,通过调用ListCount()函数获得链表个数即当前总人数;
    函数实现代码:

    void Studentmassage::Average()
    {
    	scpp = 0.0, smath = 0.0, seng = 0.0, ssum = 0.0;
    	int c = 0, m = 0, e = 0;	//记录各科不及格人数
    	Student *p;
    	for (p = head->Next; p->Next != end; p = p->Next)
    	{
    		scpp += p->CPP; smath += p->MATH; seng += p->ENGLISH; ssum += p->sum;
    		if (p->CPP < 60) c++;
    		if (p->MATH < 60) m++;
    		if (p->ENGLISH < 60) e++;
    		//		cout << p->CPP << endl;
    	}
    	scpp += p->CPP; smath += p->MATH; seng += p->ENGLISH; ssum += p->sum;
    	int num = Studentmassage::ListCount();
    	//	cout << num << endl;
    	double avcpp = scpp / num;			//c++平均成绩
    	double avmath = smath / num;		//数学平均成绩
    	double aveng = seng / num;			//英语平均成绩
    	double avsum = ssum / num;			//总分平均成绩
    	double procpp = (num - c) / num;	//c++及格率
    	double promath = (num - m) / num;			//数学及格率
    	double proeng = (num - e) / num;			//英语及格率
    //	cout << scpp << "\t" << smath << "\t" << seng << "\t" << ssum << "\n";
    	cout << "\n\t\t*********************************\n";
    	cout << "\t\t※ 0.输出各项平均成绩\n";
    	cout << "\t\t※ 1.输出c++平均成绩 \n\t\t※ 2.输出数学平均成绩 \n";
    	cout << "\t\t※ 3.输出英语平均成绩 \n\t\t※ 4.输出总平均成绩 \n";
    	cout << "\t\t※ 5.输出各科及格率";
    	cout << "\n\t\t*********************************\n\t\t请输入相应序号进行选择: ";
    	int x; cin >> x;
    	switch (x)
    	{
    	case 0: {
    		cout << "\t\tc++平均成绩\t" << "数学平均成绩\t" << "英语平均成绩\t" << "总平均成绩\t\n";
    		cout << "\t\t" << avcpp << "\t\t" << avmath << "\t\t" << aveng << "\t\t" << avsum << endl; break;
    	}
    	case 1:cout << "\t\tc++平均成绩 : " << avcpp << endl; break;
    	case 2:cout << "\t\t数学平均成绩 : " << avmath << endl; break;
    	case 3:cout << "\t\t英语平均成绩 : " << aveng << endl; break;
    	case 4:cout << "\t\t总平均成绩 : " << avsum << endl; break;
    	case 5: {
    		cout << "\t\tc++及格率\t" << "数学及格率\t" << "英语及格率\t" << endl;
    		cout << "\t\t" << procpp * 100 << "%" << "\t\t" << promath * 100 << "%"
    			<< "\t\t" << proeng * 100 << "%" << "\t\t" << endl; break;
    	}
    	}
    	system("pause");
    }
    

    流程图如下:

    在这里插入图片描述

    (8) 查找学生信息:通过FindItem()和FindID()函数判断是否有相对应名字或学号的学生;
    函数实现代码:

    void Studentmassage::Find()
    {
    	char name[10], ID[20];
    	int x;
    	Student *p = NULL;
    	cout << "\n\t\t*********************************\n";
    	cout << "\t\t※ 1.按学生的姓名查找 \n\t\t※ 2.按学生学号查找 ";
    	cout << "\n\t\t*********************************\n 请选择: ";
    	cin >> x;
    	switch (x)
    	{
    	case 1:
    	{
    		cout << "\t\t 请输入要查找学生姓名:  ";
    		cin >> name;
    		if (p = FindItem(name))
    		{
    			p->Next->Show1();
    			system("pause");
    			//			cout << "输入任意字符!继续······ \n";
    			//			getchar();
    		}
    		else
    		{
    			cout << "\t\t 没有找到相匹配的学生!  " << "\n\n";
    			system("pause");
    			//			cout << "请输入任意字符!继续······";
    			//			getchar();
    		}
    	} break;
    	case 2:
    	{
    		cout << "\t\t 请输入要查找的学生的学号: "; cin >> ID;
    		if (p = FindID(ID))
    		{
    			p->Next->Show1();
    			system("pause");
    			//			cout << " 输入任意字符!继续…… ";
    			//			getchar();
    		}
    		else
    		{
    			cout << "\t\t 没有找到相匹配的学生! " << '\n' << endl;
    			system("pause");
    			//			cout << " 输入任意字符!继续…… ";
    			//			getchar();
    		}
    	} break;
    	}
    }
    

    流程图如下:
    在这里插入图片描述

    (9) 删除学生信息:Studentmassage类的RemoveItem()函数通过调用FindItem()函数查找是否有相对应的名字,有则删除该段链表并输出“删除成功!”,没有则输出“没有找到!”。
    函数实现代码:

    void Studentmassage::RemoveItem()
    {
    	char name[20];
    	Student *p = NULL, *temp = NULL;
    	cout << "\t\t 请输入要删除学生的姓名 :" << endl; cin >> name;
    	if (p = FindItem(name))
    	{
    		temp = p->Next;
    		p->Next = p->Next->Next;
    		delete temp;
    		cout << "\t\t 删除成功!" << endl;
    		system("pause");
    		//		cout << "输入任意字符!继续······";
    		//		getchar();
    	}
    	else
    	{
    		cout << "\t\t 没有找到!" << endl;
    		system("pause");
    		//		cout << "输入任意字符!继续······";
    		//		getchar();
    	}
    }
    
    					流程图如下:
    				 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200219102231819.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0MDYxNDY1,size_16,color_FFFFFF,t_70)
    

    (10) 修改学生信息:Studentmassage类ModifyItem()函数通过FindItem()函数查找是否有相对应的名字,有则按提示步骤操作,没有则输出“没有找到”;
    函数实现代码:

    void Studentmassage::ModifyItem()
    {
    	char name[10];
    	Student *p = NULL;
    	cout << "\t\t 请输入需要修改人的姓名 :"; cin >> name;
    	if (p = FindItem(name))
    	{
    		cout << "\t\t 已找到该学生信息,请按步骤输入新的信息!" << endl;
    		p->Next->Input();
    		cout << "修改成功! " << endl;
    		system("pause");
    		//		cout << "请输入任意字符!继续······";
    		//		getchar();
    	}
    	else
    	{
    		cout << "\t\t 没有找到!" << endl;
    		system("pause");
    		//		cout << "请输入任意字符!继续······";
    		//		getchar();
    	}
    }
    
    		流程图如下:
    

    在这里插入图片描述
    (11) 清空学生信息:调用Studentmassage类的析构函数,将链表从头至尾挨个删除即可;
    函数实现代码:

    Studentmassage::~Studentmassage()
    {
    	Save();
    	Student *temp;
    	//	cout << head->Next->CPP << "\n";
    	for (; head->Next != end;)
    	{
    		temp = head->Next;
    		//		cout << temp->CPP << "\t";
    		head->Next = head->Next->Next;
    		delete temp;
    	}
    	//	cout << endl << head->CPP;
    	delete head, end;
    	system("pause");
    }
    

    四、 测试结果:略

    五、 软件使用说明书:

    本软件采用命令行对话方式进行操作,运行后会出现在界面上,按照菜单提示进行操作即可。
    且该软件每个功能都能选择是否需要继续使用,而不需要退回菜单后在重新选择;
    需特别注意本程序中男性表示为male,女性表示为fama。

    六、 源代码:

    #include<iostream>
    #include<fstream>
    #include<cstring>
    #include<conio.h>
    #include<string>
    using namespace std;
    
    //-------------------Student类-------------------//
    class Student
    {
    public:
    	char name[10];
    	char sex[5];
    	char ID[20];
    	double CPP;			//c++得分
    	double MATH;		//数学得分
    	double ENGLISH;		//英语得分
    	double sum;			//所得总分
    	int rank;			//学生排名
    //	double avcpp;		//c++平均成绩
    //	double avmath;		//数学平均成绩
    //	double aveng;		//英语平均成绩
    //	double avsum;		//总分平均成绩
    	Student *Next;
    
    	void Input();				//Input( )函数输入学生信息及成绩
    	void ReadFile(istream &in);	//ReadFile( )函数读取文件内容
    	void Show1();				//Show( )函数显示学生信息(for Display1)
    	void Show2();				//Show( )函数显示学生信息(for Display2)
    };
    //---------------Student类函数实现---------------//
    void Student::Input()
    {
    	cout << "\t\t 请输入学生姓名: ";		cin >> name;
    	cout << "\t\t 请输入学生性别: ";		cin >> sex;
    	cout << "\t\t 请输入学生的学号: ";		cin >> ID;
    	cout << "\t\t 请输入c++课程成绩: ";	cin >> CPP;
    	cout << "\t\t 请输入数学课程成绩: ";	cin >> MATH;
    	cout << "\t\t 请输入英语课程成绩: ";	cin >> ENGLISH;
    	sum = CPP + MATH + ENGLISH;
    }
    void Student::ReadFile(istream &in)
    {
    	in >> name >> sex >> ID >> CPP >> MATH >> ENGLISH >> sum >> rank;
    }
    void Student::Show1()
    {
    /*	bool flag = true;
    	if (flag)
    	{
    		cout << "姓名: \t\t" << "性别: \t\t" << "学号: \t\t"
    			<< "C++: \t" << "数学: \t" << "英语:\t"
    			<< " 总成绩: \t" << "\n\n";
    		flag = false;
    	}*/
    	cout << name << "\t\t" << sex << "\t\t" 
    		<< ID << "\t" << CPP << "\t" << MATH << "\t"
    		<< ENGLISH << "\t" << sum << "\n\n";
    	
    }
    void Student::Show2()
    {
    /*	bool flag = true;
    	if (flag)
    	{
    		cout << "姓名: \t\t" << "性别: \t\t" << "学号: \t\t"
    			<< " 总成绩: \t" << "排名: " << "\n\n";
    		flag = false;
    	}*/
    	cout << name << "\t\t" << sex << "\t\t"
    		<< ID << "\t  " << sum << "\t\t" << rank << "\n\n";
    }
    //-----------------------------------------------------------------------------------//
    
    //-------------------Studentmessage类-------------------//
    class Studentmassage
    {
    public:
    	Studentmassage();
    	~Studentmassage();
    	void ShowMenu();
    	void Find();
    	void Save();
    	void ModifyItem();
    	void RemoveItem();
    	void Swap(Student *, Student *);
    	void Sort();
    	int ListCount();
    	void Average();
    	void Display1();
    	void Display2();
    	void AddItem();
    private:
    	Student *head, *end;
    	ifstream in;
    	ofstream out;
    	Student *FindItem(char *name)			//通过姓名查找
    	{
    		for (Student *p = head; p->Next != end; p = p->Next)
    			if (!strcmp(p->Next->name, name))	return p;
    		return NULL;
    	}
    	Student *FindID(char *ID)				//通过学号查找
    	{
    		for (Student *p = head; p->Next != end; p = p->Next)
    			if (!strcmp(p->Next->ID, ID))	return p;
    		return NULL;
    	}
    };
    
    //-------------------------------Studentmessage类函数实现-------------------------------//
    //-------------------菜单-------------------//
    void Studentmassage::ShowMenu()
    {
    	cout << "\t\t**********************************************************************************" << endl;
    	cout << "\t\t\t〒〒〒〒〒〒〒〒〒〒  ☆ 学生成绩管理系统 ☆  〒〒〒〒〒〒〒〒〒〒" << endl;
    	cout << "\t\t〒〒〒〒〒〒〒★★★★★         ★★★★★★★〒〒〒〒〒〒〒" << endl;
    	cout << "\t\t〒〒〒〒〒〒〒〒〒★  ☆          1.读入学生信息          ☆  ★〒〒〒〒〒〒〒〒〒" << endl;
    	cout << "\t\t〒〒〒〒〒〒〒〒〒★  ☆          2.保存学生信息          ☆  ★〒〒〒〒〒〒〒〒〒" << endl;
    	cout << "\t\t〒〒〒〒〒〒〒〒〒★  ☆          3.添加学生信息          ☆  ★〒〒〒〒〒〒〒〒〒" << endl;
    	cout << "\t\t〒〒〒〒〒〒〒〒〒★  ☆          4.显示学生成绩(不含排名)☆  ★〒〒〒〒〒〒〒〒〒" << endl;
    	cout << "\t\t〒〒〒〒〒〒〒〒〒★  ☆          5.显示学生成绩(不含排名)☆  ★〒〒〒〒〒〒〒〒〒" << endl;
    //	cout << "\t\t〒〒〒〒〒〒〒〒〒★  ☆          6.排序统计成绩          ☆  ★〒〒〒〒〒〒〒〒〒" << endl;
    	cout << "\t\t〒〒〒〒〒〒〒〒〒★  ☆          6.查看平均成绩          ☆  ★〒〒〒〒〒〒〒〒〒" << endl;
    	cout << "\t\t〒〒〒〒〒〒〒〒〒★  ☆          7.查找学生成绩          ☆  ★〒〒〒〒〒〒〒〒〒" << endl;
    	cout << "\t\t〒〒〒〒〒〒〒〒〒★  ☆          8.删除学生成绩          ☆  ★〒〒〒〒〒〒〒〒〒" << endl;
    	cout << "\t\t〒〒〒〒〒〒〒〒〒★  ☆          9.修改学生信息          ☆  ★〒〒〒〒〒〒〒〒〒" << endl;
    	cout << "\t\t〒〒〒〒〒〒〒〒〒★  ☆          10.清空学生信息         ☆  ★〒〒〒〒〒〒〒〒〒" << endl;
    	cout << "\t\t〒〒〒〒〒〒〒〒〒★  ☆          0.安全退出系统          ☆  ★〒〒〒〒〒〒〒〒〒" << endl;
    	cout << "\t\t\t\t系统中规定male为男性,fama为女性,请按该格式进行输入!!!" << endl;
    	cout << "\t\t**********************************************************************************" << endl;
    	cout << "\t\t\n\t\t  →请选择相应的数字进行操作: ";
    }
    
    //-------------------1.Studentmessage构造函数-------------------//
    Studentmassage::Studentmassage()		//构造函数
    {
    	head = new Student;
    	head->Next = new Student;
    	end = head->Next;
    	in.open("sort.txt");
    	if (!in)	cout << "这是一个新系统,无学生信息,请先输入。" << endl;
    	else
    	{
    		while (!in.eof())
    		{
    			end->ReadFile(in);
    			if (end->name[0] == '\0')	break;
    			end->Next = new Student;
    			end = end->Next;
    		}
    		in.close();
    		cout << "\t\t 读取学生信息成功!" << endl;
    	}
    }
    
    //-------------------2.保存信息至文件中-------------------//
    void Studentmassage::Save()
    {
    	out.open("sort.txt");
    	for (Student *p = head->Next; p != end; p = p->Next)
    	{
    		out << p->name << "\t" << p->ID << "\t" << p->CPP << "\t" << p->MATH << "\t" << p->ENGLISH << "\t" << p->sum << p->rank << "\t" << endl;
    	}
    	out.close();
    }
    
    //-------------------3.添加新的学生信息-------------------//
    void Studentmassage::AddItem()
    {
    	end->Input();
    	//	scpp += end->CPP;
    	//	smath += end->MATH;
    	//	seng += end->ENGLISH;
    	end->Next = new Student;
    	end = end->Next;
    	cout << "添加成功!" << endl;
    	system("pause");
    	//	cout << "请输入任意字符!继续......";
    	//	getchar();
    }
    
    //-------------------4.输出信息-------------------//
    void Studentmassage::Display1()
    {
    	cout << "姓名: \t\t" << "性别: \t\t" << "学号: \t\t"
    		<< "C++: \t" << "数学: \t" << "英语:\t"
    		<< " 总成绩: \t" << "\n\n";
    	for (Student*p = head->Next; p != end; p = p->Next)
    		p->Show1();
    	system("pause");
    	//	cout << "输入任意字符!继续······";
    	//	getchar();
    }
    
    //-------------------5.输出只有总成绩和排名的信息-------------------//
    void Studentmassage::Display2()
    {
    	Sort();
    	cout << "姓名: \t\t" << "性别: \t\t" << "学号: \t\t"
    		<< " 总成绩: \t" << "排名: " << "\n\n";
    	for (Student*p = head->Next; p != end; p = p->Next)
    		p->Show2();
    	system("pause");
    	//	cout << "输入任意字符!继续······";
    	//	getchar();
    }
    
    //-------------------6.计算各科平均成绩-------------------//
    void Studentmassage::Average()
    {
    	double scpp = 0.0, smath = 0.0, seng = 0.0, ssum = 0.0;
    	int c = 0, m = 0, e = 0;	//记录各科不及格人数
    	Student *p;
    	for (p = head->Next; p->Next != end; p = p->Next)
    	{
    		scpp += p->CPP; smath += p->MATH; seng += p->ENGLISH; ssum += p->sum;
    		if (p->CPP < 60) c++;
    		if (p->MATH < 60) m++;
    		if (p->ENGLISH < 60) e++;
    		//		cout << p->CPP << endl;
    	}
    	scpp += p->CPP; smath += p->MATH; seng += p->ENGLISH; ssum += p->sum;
    	int num = Studentmassage::ListCount();
    	//	cout << num << endl;
    	double avcpp = scpp / num;			//c++平均成绩
    	double avmath = smath / num;		//数学平均成绩
    	double aveng = seng / num;			//英语平均成绩
    	double avsum = ssum / num;			//总分平均成绩
    	double procpp = (num - c) / num;	//c++及格率
    	double promath = (num - m) / num;			//数学及格率
    	double proeng = (num - e) / num;			//英语及格率
    //	cout << scpp << "\t" << smath << "\t" << seng << "\t" << ssum << "\n";
    	cout << "\n\t\t*********************************\n";
    	cout << "\t\t※ 0.输出各项平均成绩\n";
    	cout << "\t\t※ 1.输出c++平均成绩 \n\t\t※ 2.输出数学平均成绩 \n";
    	cout << "\t\t※ 3.输出英语平均成绩 \n\t\t※ 4.输出总平均成绩 \n";
    	cout << "\t\t※ 5.输出各科及格率";
    	cout << "\n\t\t*********************************\n";
    	char flag = 'n';
    	do
    	{
    		cout << "\t\t →请选择相应的数字进行操作:: ";
    		int x; cin >> x;
    		switch (x)
    		{
    		case 0: {
    			cout << "\t\tc++平均成绩\t" << "数学平均成绩\t" << "英语平均成绩\t" << "总平均成绩\t\n";
    			cout << "\t\t" << avcpp << "\t\t" << avmath << "\t\t" << aveng << "\t\t" << avsum << "\n\n"; break;
    		}
    		case 1:cout << "\t\tc++平均成绩 : " << avcpp << "\n\n"; break;
    		case 2:cout << "\t\t数学平均成绩 : " << avmath << "\n\n"; break;
    		case 3:cout << "\t\t英语平均成绩 : " << aveng << "\n\n"; break;
    		case 4:cout << "\t\t总平均成绩 : " << avsum << "\n\n"; break;
    		case 5: 
    		{
    			cout << "\t\tc++及格率\t" << "数学及格率\t" << "英语及格率\t" << "\n\n";
    			cout << "\t\t" << procpp * 100 << "%" << "\t\t" << promath * 100 << "%"
    				<< "\t\t" << proeng * 100 << "%" << "\t\t" << "\n\n"; break;
    		}
    		}
    		cout << "\t\t请问是否要继续查询?(y/n) : ";
    		cin >> flag;
    	} while (flag == 'y');
    	system("pause");
    }
    
    //-------------------7.查找函数-------------------//
    void Studentmassage::Find()
    {
    	char c = 'n';
    	do
    	{
    		char name[10], ID[20];
    		Student *p = NULL;
    		cout << "\n\t\t*********************************\n";
    		cout << "\t\t※ 1.按学生的姓名查找 \n\t\t※ 2.按学生学号查找 ";
    		cout << "\n\t\t*********************************\n 请选择: ";
    		int x;
    		cin >> x;
    		switch (x)
    		{
    		case 1:
    		{
    			cout << "\t\t 请输入要查找学生姓名:  ";
    			cin >> name;
    			if (p = FindItem(name))
    			{
    				p->Next->Show1();
    				//			cout << "输入任意字符!继续······ \n";
    				//			getchar();
    			}
    			else
    			{
    				cout << "\t\t 没有找到相匹配的学生!  " << "\n\n";
    				//			cout << "请输入任意字符!继续······";
    				//			getchar();
    			}
    		} break;
    		case 2:
    		{
    			cout << "\t\t 请输入要查找的学生的学号: "; cin >> ID;
    			if (p = FindID(ID))
    			{
    				p->Next->Show1();
    				//			cout << " 输入任意字符!继续…… ";
    				//			getchar();
    			}
    			else
    			{
    				cout << "\t\t 没有找到相匹配的学生! " << '\n' << endl;
    				//			cout << " 输入任意字符!继续…… ";
    				//			getchar();
    			}
    		} break;
    		}
    		cout << "\t\t请问是否要继续查找?(y/n) : ";
    		cin >> c;
    	} while (c == 'y');
    	system("pause");
    }
    
    //-------------------8.删除函数-------------------//
    void Studentmassage::RemoveItem()
    {
    	char c = 'n';
    	do
    	{
    		char name[20];
    		Student *p = NULL, *temp = NULL;
    		cout << "\t\t 请输入要删除学生的姓名 :" << endl; cin >> name;
    		if (p = FindItem(name))
    		{
    			temp = p->Next;
    			p->Next = p->Next->Next;
    			delete temp;
    			cout << "\t\t 删除成功!" << endl;
    			//		cout << "输入任意字符!继续······";
    			//		getchar();
    		}
    		else
    		{
    			cout << "\t\t 没有找到!" << endl;
    			//		cout << "输入任意字符!继续······";
    			//		getchar();
    		}
    		cout << "\t\t请问是否要继续删除?(y/n) : ";
    		cin >> c;
    	} while (c == 'y');
    	system("pause");
    }
    
    //-------------------9.修改函数-------------------//
    void Studentmassage::ModifyItem()
    {
    	char c = 'n';
    	do
    	{
    		char name[10];
    		Student *p = NULL;
    		cout << "\t\t 请输入需要修改人的姓名 :"; cin >> name;
    		if (p = FindItem(name))
    		{
    			cout << "\t\t 已找到该学生信息,请按步骤输入新的信息!" << endl;
    			p->Next->Input();
    			cout << "修改成功! " << endl;
    			
    			//		cout << "请输入任意字符!继续······";
    			//		getchar();
    		}
    		else
    		{
    			cout << "\t\t 没有找到!" << endl;
    			//		cout << "请输入任意字符!继续······";
    			//		getchar();
    		}
    		cout << "\t\t请问是否要继续修改?(y/n) : ";
    		cin >> c;
    	} while (c == 'y');
    	
    	system("pause");
    }
    
    //-------------------10.Studentmessage析构函数-------------------//
    Studentmassage::~Studentmassage()
    {
    	Save();
    	Student *temp;
    	//	cout << head->Next->CPP << "\n";
    	for (; head->Next != end;)
    	{
    		temp = head->Next;
    		//		cout << temp->CPP << "\t";
    		head->Next = head->Next->Next;
    		delete temp;
    	}
    	//	cout << endl << head->CPP;
    	delete head;
    	delete end;
    	system("pause");
    }
    
    //-------------------记录当前链表总数并返回一个整数-------------------//
    int Studentmassage::ListCount()
    {
    	if (!head)	return 0;
    	int n = 0;
    	for (Student *p = head->Next; p != end; p = p->Next)	n++;
    	return n;
    }
    
    //-------------------交换Student类的两个变量-------------------//
    void Studentmassage::Swap(Student *p1, Student *p2)
    {
    	Student *temp = new Student;
    	strcpy(temp->name, p1->name);
    	strcpy(temp->sex, p1->sex);
    	strcpy(temp->ID, p1->ID);
    	temp->CPP = p1->CPP;
    	temp->MATH = p1->MATH;
    	temp->ENGLISH = p1->ENGLISH;
    	temp->sum = p1->sum;
    
    	strcpy(p1->name, p2->name);
    	strcpy(p1->sex, p2->sex);
    	strcpy(p1->ID, p2->ID);
    	p1->CPP = p2->CPP;
    	p1->MATH = p2->MATH;
    	p1->ENGLISH = p2->ENGLISH;
    	p1->sum = p2->sum;
    
    	strcpy(p2->name, temp->name);
    	strcpy(p2->sex, temp->sex);
    	strcpy(p2->ID, temp->ID);
    	p2->CPP = temp->CPP;
    	p2->MATH = temp->MATH;
    	p2->ENGLISH = temp->ENGLISH;
    	p2->sum = temp->sum;
    }
    
    //-------------------对当前链表进行排序-------------------//
    void Studentmassage::Sort()
    {
    	cout << "Sorting..." << endl;
    	Student *p = NULL, *p1 = NULL, *k = NULL;
    	int n = Studentmassage::ListCount();
    	if (n < 2)	return;
    	for (p = head->Next; p != end; p = p->Next)
    		for (k = p->Next; k != end; k = k->Next)
    		{
    			if (p->sum < k->sum)	Studentmassage::Swap(p, k);
    		}
    	int i = 1;
    	for (p = head->Next; p != end; p = p->Next)
    	{
    		p->rank = i++;
    	}
    	cout << "排序完成!" << endl;
    	system("pause");
    	//	getchar();
    	return;
    }
    //-----------------------------------------------------------------------------------//
    
    int main()
    {
    	int x, i = 0;
    	bool quit = false;
    	cout << "\t\t §§§§§§§§§§§§§§§§§§§§§§§§§§ \n" << endl;
    	Studentmassage Grade;
    	system("pause");
    	//	cout << "\t\t按任意键开始······";
    	//	getchar();
    	while (!quit)
    	{
    		Grade.ShowMenu();
    		cin >> x;
    		switch (x)
    		{
    		case 0:exit(0); break;
    		case 1:Grade.Studentmassage::Studentmassage(); break;
    		case 2:Grade.Save(); break;
    		case 3:Grade.AddItem(); break;
    		case 4:Grade.Display1(); break;
    		case 5:Grade.Display2(); break;
    //		case 6:Grade.Sort(); break;
    		case 6:Grade.Average(); break;
    		case 7:Grade.Find(); break;
    		case 8:Grade.RemoveItem(); break;
    		case 9:Grade.ModifyItem(); break;
    		case 10:Grade.~Studentmassage(); break;
    		}
    	}
    	return 0;
    }
    
    
    //计算平均成绩有问题(解决)
    //序号选择应添加筛错选项
    //Student类应在添加性别选项
    //析构函数第一个数据无法删除
    //清空链表后Student类Show函数出现异常
    
    展开全文
  • C++ 学生信息管理系统

    2020-03-03 22:11:26
    C++ 文件读写 实现简单的学生信息管理系统 写在前面: 这个程序的逻辑部分比较简单,只要对C++文件操作熟悉即可流畅地完成。 我在CSDN也看了一些其他人写的控制台信息管理系统,我认为我的程序较其他人还是有一些...

    C++ 文件读写 实现简单的学生信息管理系统

    写在前面:
    这个程序的逻辑部分比较简单,只要对C++文件操作熟悉即可流畅地完成。
    我在CSDN也看了一些其他人写的控制台信息管理系统,我认为我的程序较其他人还是有一些优点的。
    比如:可对文件进行多次操作、每完成一步操作都会自动保存到文件中、功能较多、不会因为错误输入崩溃、代码、界面较简洁等。

    技术环节:
    编译环境:Windows VS2019

    需求:
    实现,对文件中的数据进行:添加、输出、根据多条件查找、根据多条件排序、插入、删除、修改、统计操作。

    思路:
    创建文件,循环将文件中的内容读取到list结构容器中,再根据容器中的值对数据进行处理。

    在代码注释中详细标注了程序的实现步骤。

    注意:
    由于程序内部实现原因,由程序操作的文件的第一行,不可以被占用、必须空出来。
    且文件最后一行不可以有多余的空行。
    建议不要直接操作txt文件。

    运行效果:
    在这里插入图片描述

    代码实现:
    #include <iostream>	
    #include <fstream>
    #include <list>
    #include <sstream>		//字符串转换
    
    using namespace std;
    
    //信息管理系统类
    class Mamasys
    {
    private:
    	//学生全局结构
    	struct Student
    	{//虽然学生属性都是字符串类型,但是后面对数据进行处理时,
    	 //也会将部分字符串数据转换为数字类型进行操作
    		string name;		//姓名
    		string age;			//年龄
    		string num;			//学号
    		string CppScore;	//C++成绩
    		string MathScore;	//高等数学成绩
    	};
    
    	list<Student> studlist;	//存储所有学生信息的容器
    
    	string path;			//文件路径
    
    	//将容器中所有信息写入到文件中
    	void ofsallMess()
    	{
    		ofstream ofst;
    		//以清空源文件内容方式打开文件
    		ofst.open(path, ios::trunc);
    
    		//判断文件是否打开成功
    		if (!ofst.is_open())
    		{
    			cout << "文件打开失败" << endl;
    			return;
    		}
    
    		//将容器中的所有信息写入到文件中,这里的endl必须在开头写,末尾不能写,否则会出现一系列问题
    		for (list<Student>::const_iterator it = studlist.begin(); it != studlist.end(); it++)
    			ofst << endl << it->num << endl << it->name << endl << it->age << endl << it->CppScore << endl << it->MathScore;
    		
    		//关闭文件
    		ofst.close();
    	}
    
    public:
    	//构造函数用于将文件中的内容按格式读取到list<Student>中
    	Mamasys()
    	{
    		cout << "输入你的文件路径,加后缀名,一般为txt文件(没有则创建该文件):" << endl;
    		cin >> path;
    
    		ifstream ifstr;
    		ifstr.open(path, ios::in);		//打开文件路径中的文件,如果打开失败则创建该文件
    		if (!ifstr.is_open())
    		{
    			ofstream temp(path);		//创建文件
    			temp.open(path,ios::out);
    			if (!temp.is_open())		//检测是否创建成功
    			{
    				cout << "创建文件失败,退出程序" << endl;
    				exit(-1);
    			}
    			//文件成功创建则关闭文件
    			temp.close();
    		}
    	
    		system("cls");
    
    		//将文件中所有内容读取到list容器中
    		ifstream ifst;
    		ifst.open(path, ios::in);
    
    		char line[14];		//这里必须是字符数组
    		Student temp;
    		
    		//空读取一行因为新文件第一行不保存内容
    		ifst.getline(line, sizeof(line));
    
    		//成行读取文件中的内容
    		//循环读取五行信息,每五行将信息插入到容器中
    		while (!ifst.eof())
    		{
    			//保存到临时学生temp中
    			ifst.getline(line, sizeof(line));
    			temp.num = line;		//学号
    			ifst.getline(line, sizeof(line));
    			temp.name = line;		//姓名
    			ifst.getline(line, sizeof(line));
    			temp.age = line;		//年龄
    			ifst.getline(line, sizeof(line));
    			temp.CppScore = line;	//C++成绩
    			ifst.getline(line, sizeof(line));
    			temp.MathScore = line;	//高数成绩
    
    			//将temp插入到学生容器中
    			studlist.push_back(temp);
    		}
    		Hint();		//显示提示信息
    	}
    
    	//输出提示信息成员函数
    	void Hint()
    	{
    		cout << "--------学生信息管理系统--------" << endl << 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 << endl;
    		cout << "所有功能在执行完毕后,都会自动将当前信息保存进文件" << endl << endl;
    	}
    
    	//添加学生信息
    	bool AddMess()
    	{
    		//创建一个学生结构
    		Student student;
    		
    		L1:
    		//输出提示信息,并输入学生信息,输入-1结束输入
    		cout << "学号:		"; cin >> student.num;
    		if (student.num == "-1") return false;
    
    		//读入学号时,遍历所有的学生学号信息,如果学号相同则输出提示并重新输入
    		for (list<Student>::const_iterator it = studlist.begin(); it != studlist.end(); it++)
    			if (it->num == student.num)
    			{
    				cout << endl << "学号信息重复,请重新输入:" << endl << endl;
    				goto L1;	//返回到输入的地方
    			}
    
    		//返回false则停止添加学生信息
    		cout << "姓名:		"; cin >> student.name;
    		if (student.name == "-1") return false;
    		cout << "年龄:		"; cin >> student.age;
    		if (student.age == "-1") return false;
    		cout << "C++成绩:	"; cin >> student.CppScore;
    		if (student.CppScore == "-1") return false;
    		cout << "高数成绩:	"; cin >> student.MathScore;
    		if (student.MathScore == "-1") return false;
    
    		cout << endl;
    
    		studlist.push_back(student);	//将新添加的学生信息尾插到容器中
    
    		//只将新添加的学生信息追加到文件中
    		//创建写入流对象
    		ofstream ofst;
    		//在文件路径中以追加方式打开文件
    		ofst.open(path, ios::app);	
    
    		//将学生信息按顺序写入到文件中,这里的endl,只能按照这个格式写
    		ofst << endl << student.num << endl << student.name << endl << student.age << endl << student.CppScore << endl << student.MathScore;
    
    		//关闭文件
    		ofst.close();
    
    		//返回true继续录入学生信息
    		return true;
    	}
    
    	//查看所有学生信息
    	void PrintMess()
    	{
    		cout << endl;
    		for (list<Student>::const_iterator it = studlist.begin(); it != studlist.end(); it++)
    		{
    			cout << "学号:		" << it->num << endl;
    			cout << "姓名:		" << it->name << endl;
    			cout << "年龄:		" << it->age << endl;
    			cout << "C++成绩:	" << it->CppScore << endl;
    			cout << "高数成绩:	" << it->MathScore << endl << endl;
    		}
    	}
    
    	//查找(姓名||学号)
    	void FindMess()
    	{
    		char key;
    		cout << "输入1代表按学号查找,其他代表按姓名查找" << endl;
    		cin >> key ;
    		
    		//按学号查找
    		if (key == '1')
    		{
    			string findnum;
    			cout << "请输入需要查找的学生序号:";
    			cin >> findnum;
    
    			for (list<Student>::const_iterator it = studlist.begin(); it != studlist.end(); it++)
    				if (it->num == findnum)
    				{
    					cout << "学号:		" << it->num << endl;
    					cout << "姓名:		" << it->name << endl;
    					cout << "年龄:		" << it->age << endl;
    					cout << "C++成绩:	" << it->CppScore << endl;
    					cout << "高数成绩:	" << it->MathScore << endl << endl;
    					return;		//因为学号具有唯一性,所以找到后输出完信息直接返回
    				}
    
    			//函数没有结束执行到这里说明没有找到学号,输出提示信息
    			cout << "没有找到学号为“ " << findnum << " ”的学生" << endl;
    		}
    		//按姓名查找
    		else
    		{
    			string findname;
    			cout << "请输入需要查找的学生姓名:";
    			cin >> findname;
    			bool sign = false;	//标记是否找到学生
    
    			//输出所有名为findname的学生信息
    			for (list<Student>::const_iterator it = studlist.begin(); it != studlist.end(); it++)
    				if (it->name == findname)
    				{
    					cout << "学号:		" << it->num << endl;
    					cout << "姓名:		" << it->name << endl;
    					cout << "年龄:		" << it->age << endl;
    					cout << "C++成绩:	" << it->CppScore << endl;
    					cout << "高数成绩:	" << it->MathScore << endl << endl;
    					sign = true;
    				}
    
    			//如果没有找到则输出提示信息
    			if (!sign)
    				cout << "没有找到名为“" << findname << "”的学生" << endl;
    		}
    	}
    
    private:
    	//通过二元谓词改变list.stor()的排序规则
    
    	class Studentrule_1_1
    	{//按照学号升序排序
    	public:
    		bool operator()(Student& p1, Student& p2)
    		{
    			//将属性字符转换为数字,然后根据数字排序
    			int temp_1;  stringstream ss_1; ss_1 << p1.num; ss_1 >> temp_1; 
    			int temp_2; stringstream ss_2; ss_2 << p2.num; ss_2 >> temp_2;
    			return temp_1 < temp_2;
    		}
    	};
    	class Studentrule_1_2
    	{//按照学号降序排序
    	public:
    		bool operator()(Student& p1, Student& p2)
    		{
    			//将属性字符转换为数字,然后根据数字排序
    			int temp_1;  stringstream ss_1; ss_1 << p1.num; ss_1 >> temp_1;
    			int temp_2; stringstream ss_2; ss_2 << p2.num; ss_2 >> temp_2;
    			return temp_1 > temp_2;
    		}
    	};
    	class Studentrule_2_1
    	{//按照C++升序排序
    	public:
    		bool operator()(Student& p1, Student& p2)
    		{
    			//将属性字符转换为数字,然后根据数字排序
    			int temp_1;  stringstream ss_1; ss_1 << p1.CppScore; ss_1 >> temp_1;
    			int temp_2; stringstream ss_2; ss_2 << p2.CppScore; ss_2 >> temp_2;
    			return temp_1 < temp_2;
    		}
    	};
    	class Studentrule_2_2
    	{//按照C++降序排序
    	public:
    		bool operator()(Student& p1, Student& p2)
    		{
    			//将属性字符转换为数字,然后根据数字排序
    			int temp_1;  stringstream ss_1; ss_1 << p1.CppScore; ss_1 >> temp_1;
    			int temp_2; stringstream ss_2; ss_2 << p2.CppScore; ss_2 >> temp_2;
    			return temp_1 < temp_2;
    		}
    	};
    	class Studentrule_3_1
    	{//按照高数升序排序
    	public:
    		bool operator()(Student& p1, Student& p2)
    		{
    			//将属性字符转换为数字,然后根据数字排序
    			int temp_1;  stringstream ss_1; ss_1 << p1.MathScore; ss_1 >> temp_1;
    			int temp_2; stringstream ss_2; ss_2 << p2.MathScore; ss_2 >> temp_2;
    			return temp_1 < temp_2;
    		}
    	};
    	class Studentrule_3_2
    	{//按照高数降序排序
    	public:
    		bool operator()(Student& p1, Student& p2)
    		{
    			//将属性字符转换为数字,然后根据数字排序
    			int temp_1;  stringstream ss_1; ss_1 << p1.MathScore; ss_1 >> temp_1;
    			int temp_2; stringstream ss_2; ss_2 << p2.MathScore; ss_2 >> temp_2;
    			return temp_1 < temp_2;
    		}
    	};
    	
    
    public:
    	//指定排序规则
    	//1,按照学号升序
    	//排序
    	void  SortMess()
    	{
    		char key_1 = '0';
    		cout << "输入1代表按学号排序,输入2代表按C++成绩排序,其他代表按高数成绩排序" << endl;
    		cin >> key_1;		//接收键值执行不同的排序规则
    		cout << "输入1代表升序排序,其他代表降序排序" << endl;
    		char key_2 = '0';
    		cin >> key_2;
    		switch (key_1)
    		{
    		case '1': key_2 == '1' ? studlist.sort(Studentrule_1_1()) : studlist.sort(Studentrule_1_2()); break;
    		case '2': key_2 == '1' ? studlist.sort(Studentrule_2_1()) : studlist.sort(Studentrule_2_2()); break;
    		default:  key_2 == '1' ? studlist.sort(Studentrule_3_1()) : studlist.sort(Studentrule_3_2());
    		}
    		
    		//将容器中内容写入文件中
    		ofsallMess();
    
    		cout << "已排序" << endl;
    	}
    
    	//向中间插入学生数据
    	void InsertMess()
    	{
    		string instudnum = "0";
    		bool sign = false;
    	L1:
    		cout << "请输入需要插入在学生前面的该学生的学号:" << endl;
    		cin >> instudnum;
    		list<Student>::const_iterator it;
    		for (it = studlist.begin(); it != studlist.end(); it++)
    			if (instudnum == it->num) break;
    		
    		//如果it==容器末尾迭代器了,则说明没有找到该学号
    		if (it == studlist.end())
    		{
    			cout << "没有找到该学号" << endl;
    			goto L1;
    		}
    			
    		//创建一个学生结点,将该结点信息,插入到容器中
    		Student student;
    
    	L2:
    		//输出提示信息,并输入学生信息
    		cout << "学号:		"; cin >> student.num;
    
    		//读入学号时,遍历所有的学生学号信息,如果学号相同则输出提示并重新输入
    		for (list<Student>::const_iterator it = studlist.begin(); it != studlist.end(); it++)
    			if (it->num == student.num)
    			{
    				cout << "学号信息重复,请重新输入:" << endl;
    				goto L2;	//返回到输入的地方
    			}
    
    		//输入这个学生的信息
    		cout << "姓名:		"; cin >> student.name;
    		cout << "年龄:		"; cin >> student.age;
    		cout << "C++成绩:	"; cin >> student.CppScore;
    		cout << "高数成绩:	"; cin >> student.MathScore;
    
    		//将该结点插入到容器中
    		studlist.insert(it, student);
    
    		//将容器中内容写入文件中
    		ofsallMess();
    		cout << "已插入" << endl;
    	}
    
    	//删除学生的数据
    	void DeteleMess()
    	{
    		char key = '0';
    		cout << "输入1代表按学号删除单个学生数据,其他代表按姓名删除所有学生数据" << endl;
    		cin >> key;
    
    		if (key == '1')
    		{
    			//从容器中查找和需要删除和学生的学号一样的学号,找到则删除,并刷新文件内容
    			string detestunum;
    			cout << "请输入需要删除的学生的学号:" << endl;
    			cin >> detestunum;
    			for (list<Student>::const_iterator it = studlist.begin(); it != studlist.end(); it++)
    				if (it->num == detestunum)
    				{
    					studlist.erase(it);
    					ofsallMess();
    					cout << "已删除" << endl;
    					return;
    				}
    			cout << "没有找到该学号的学生" << endl;
    		}
    		else
    		{
    			string detestuname;
    			cout << "请输入需要删除的学生的姓名:" << endl;
    			cin >> detestuname;
    			bool sign = false;
    
    			//遍历容器寻找与需要删除姓名的学生相同名的学生,找到了则删除
    			for (list<Student>::const_iterator it = studlist.begin(); it != studlist.end(); it++)
    				if (it->name == detestuname)
    				{
    					//这里有点问题,连续的重名无法清除,只能先用笨办法解决了
    					it = studlist.erase(it);
    					if (it->name == detestuname) it = studlist.erase(it);
    					if (it->name == detestuname) it = studlist.erase(it);
    					if (it->name == detestuname) it = studlist.erase(it);
    					if (it->name == detestuname) it = studlist.erase(it);
    					ofsallMess();	//刷新文件
    					sign = true;
    				}
    			//输出提示信息
    			if(sign == false)
    				cout << "没有找到该姓名的学生" << endl;
    			else
    				cout << "已删除" << endl;
    		}
    	}
    
    	//修改学生的信息
    	void ModifyMess()
    	{
    		string Modstudentnum;
    	L1:
    		cout << "请输入需要修改的学生的学号:" << endl;
    		cin >> Modstudentnum;
    
    		//接收学号后,先遍历一遍容器查看是否有该学号,如果没有则重新输入
    		list<Student>::const_iterator it;
    		for (it = studlist.begin(); it != studlist.end(); it++)
    			if (it->num == Modstudentnum) break;
    		if (it == studlist.end())
    		{
    			cout << "没有找到该学号";
    			goto L1;
    		}
    
    		//修改迭代器指向结点的值
    		for (list<Student>::iterator it = studlist.begin(); it != studlist.end(); it++)
    			if (it->num == Modstudentnum)
    			{
    				//先输出原信息
    				cout << endl << "该学生原信息:" << endl << endl;
    				cout << "学号:		" << it->num << endl;
    				cout << "姓名:		" << it->name << endl;
    				cout << "年龄:		" << it->age << endl;
    				cout << "C++成绩:	" << it->CppScore << endl;
    				cout << "高数成绩:	" << it->MathScore << endl << endl;
    				//再修改
    				cout << "需要修改信息:" << endl << endl;
    				cout << "学号:		"; cin >> it->num;
    				cout << "姓名:		"; cin >> it->name;
    				cout << "年龄:		"; cin >> it->age;
    				cout << "C++成绩:	"; cin >> it->CppScore;
    				cout << "高数成绩:	"; cin >> it->MathScore;
    				break;
    			}
    		
    		//刷新文件中的信息
    		ofsallMess();
    		cout << endl << "已修改" << endl;
    	}
    	//C:\\Users\\ASUS\\Desktop\\测试, txt
    	//统计学生数据
    	void StatMess()
    	{
    		//功能:返回学生的总个数
    		//所有学生各成绩的总分、平均分
    		//年龄和、平均年龄
    
    		int cppscoresum = 0, mathscoresum = 0;	//成绩和
    		int cppscoreave = 0, mathscoreave = 0;	//成绩平均值
    		int agesum = 0, ageave = 0, num = 0;	//年龄和、年龄平均值、学生数
    		for (list<Student>::iterator it = studlist.begin(); it != studlist.end(); it++)
    		{
    			//将C++成绩转换为数字
    			int Cpptemp;
    			stringstream ss_1;
    			ss_1 << it->CppScore;
    			ss_1 >> Cpptemp;
    
    			cppscoresum += Cpptemp;		//统计C++成绩和
    
    			//将数学成绩转换为数字
    			int Mathtemp;
    			stringstream ss_2;
    			ss_2 << it->MathScore;
    			ss_2 >> Mathtemp;
    
    			mathscoresum += Mathtemp;	//统计数学成绩和
    
    			//将年龄转换为数字
    			int Agetemp;
    			stringstream ss_3;
    			ss_3 << it->age;
    			ss_3 >> Agetemp;
    
    			agesum += Agetemp;			//统计年龄和
    
    			num++;
    		}
    
    		//C++平均成绩
    		cppscoreave = cppscoresum / num;
    
    		//数学平均成绩
    		mathscoreave = mathscoresum / num;
    
    		//平均年龄
    		ageave = agesum / num;
    
    		cout << "总学生数:" << num << endl << endl;
    		cout << "C++平均成绩:" << cppscoreave << "  C++总成绩:" << cppscoresum << endl << endl;
    		cout << "高等数学平均成绩:" << mathscoreave << "  数学总成绩:" << mathscoresum << endl << endl;
    		cout << "平均年龄:" << ageave << endl << endl;
    	}
    
    };
    
    //主函数
    int main()
    {
    	//设置控制台标题
    	system("title C++ 学生信息管理系统");
    
    	//创建管理系统对象
    	Mamasys mamasys;
    
    	//key接收一个值,根据key的值执行不同的功能
    	char key = '0';
    	cout << endl << "请输入需要执行的功能:" << endl;
    	cin >> key;
    	cout << endl;
    	
    	while (true)
    	{
    		switch (key)
    		{
    		case '1':		//添加学生信息
    			cout << "自动循环添加数据,结束添加请输入-1" << endl << endl;
    			while (mamasys.AddMess());
    			cout << endl << "已添加" << endl << endl;
    			break;
    		case '2':		//输出所有信息
    			mamasys.PrintMess(); 
    			break;
    		case '3':		//查找 姓名||学号
    			mamasys.FindMess();
    			break;
    		case '4':		//排序 学号、C++成绩、高数成绩、升序、降序
    			mamasys.SortMess();
    			break;
    		case '5':		//在中间插入学生数据
    			mamasys.InsertMess();
    			break;
    		case '6':		//删除学生的数据
    			mamasys.DeteleMess();
    			break;
    		case '7':		//修改学生的数据
    			mamasys.ModifyMess();
    			break;
    		case '8':		//修改学生的数据
    			mamasys.StatMess();
    			break;
    		case '9':		//退出程序
    			return 0;
    		}
    
    		system("pause");
    
    		system("cls");			//每次功能执行完,清屏,输出提示信息
    		mamasys.Hint();
    
    		//功能执行完毕,key再接收一个值
    		cout << endl << "请输入需要执行的功能:" << endl;
    		cin >> key;
    		cout << endl;
    	}
    
    	return 0;
    }
    

    不足之处:
    程序正确处理数据对txt文件中的格式有一些要求。
    txt文件过大,可能会导致程序打开文件异常。

    欢迎大家提出批评和建议。


    感谢大家的支持。

    展开全文
  • 顺序表练习——C++学生信息管理系统

    千次阅读 多人点赞 2019-10-04 11:25:26
    C++顺序表简单实现学生信息管理系统,未加入文件输入输出流,界面较简单,编译通过

    C++顺序表简单实现学生信息管理系统,未加入文件输入输出流,界面较简单,编译通过

    #include<stdlib.h>
    #include<string>
    #include<iostream>
    #include<iomanip>
    using namespace std;
    
    #define MAXSIZE 100
    #define OVERFLOW -2
    #define ERROR -1
    #define OK 1
    
    typedef int Status;
    
    typedef struct {
    	string Name;  // 姓名
    	string Num;  // 学号
    	string Sex;  // 性别
    	int Age;  // 年龄
    	string Tele;  // 电话
    	string Addr;  // 地址
    	float Score;  //3 成绩
    }StudentList;
    
    typedef StudentList Elemtype;
    
    typedef struct {
    	Elemtype* elem;  
    	int length;  // 顺序表长度
    }SqList;
    
    // 重载输入运算符
    istream& operator >>(istream& in, Elemtype& Stu)
    {
    	cout << "姓名:";
    	in >> Stu.Name;
    	cout << "学号:";
    	in >> Stu.Num;
    	cout << "性别:";
    	in >> Stu.Sex;
    	cout << "年龄:";
    	in >> Stu.Age;
    	cout << "电话:";
    	in >> Stu.Tele;
    	cout << "地址:";
    	in >> Stu.Addr;
    	cout << "成绩:";
    	in >> Stu.Score;
    	return in;
    }
    
    // 重载输出运算符
    ostream& operator <<(ostream& out, Elemtype& Stu)
    {
    	out << Stu.Name << Stu.Num << Stu.Sex << Stu.Age << Stu.Tele << Stu.Addr << Stu.Score << endl;
    	return out;
    }
    
    
    // 初始化顺序表
    Status InitList_Sq(SqList& L)
    {
    	L.elem = new Elemtype[MAXSIZE];
    	if (!L.elem) exit(OVERFLOW);
    	L.length = 0;
    	cout << "初始化成功!" << endl;
    	return OK;
    }
    
    // 销毁顺序表
    void DestroyList(SqList& L)
    {
    	if (!L.elem)
    		delete[] L.elem;
    	cout << "销毁成功!" << endl;
    }
    
    // 清空顺序表
    void ClearList(SqList& L)
    {
    	L.length = 0;
    	cout << "清空成功!" << endl;
    }
    
    // 返回顺序表的长度
    void GetLength(SqList L)
    {
    	cout << "顺序表的长度为:" << L.length << endl;
    }
    
    // 判断顺序表是否为空
    int IsEmpty(SqList L)
    {
    	if (!L.elem) {
    		cout << "顺序表为空!" << endl;
    		return 1;
    	}
    	else {
    		cout << "顺序表非空!" << endl;
    		return 0;
    	}
    }
    
    // 创建顺序表
    Status CreateList(SqList& L, int length)
    { 
       	// cout << "请输入顺序表的元素:";
    	int i;
    	if (length < 0) return ERROR;
    	if (length >= MAXSIZE) return OVERFLOW;
    	for (i = 1; i < length + 1; i++)
    	{
    		cout << "请输入第" << i << "个学生的信息:" << endl;
    		cin >> L.elem[i - 1];
    	}
    	L.length = length;
    	cout << "创建成功!" << endl;
    	return OK;
    }
    
    // 输出顺序表
    void PrintList(SqList L)
    {
    	int i;
    	cout << setw(10) << "姓名" << setw(10) << "学号" << setw(10) << "性别" <<setw(10) 
    		<< "年龄" << setw(15) << "电话" << setw(28) << "地址" << setw(15) << "成绩" << endl;
    	for (i = 0; i < L.length; i++)
    		cout << setw(10) << L.elem[i].Name << setw(10) <<L.elem[i].Num
    		<< setw(10) << L.elem[i].Sex << setw(10) << L.elem[i].Age 
    		<< setw(15) << L.elem[i].Tele << setw(28) << L.elem[i].Addr << setw(15) << L.elem[i].Score << endl;
    	cout << endl;
    }
    
    // 按学号排序
    void SequenceList(SqList& L)
    {
    	Elemtype Temp;
    	// 冒泡排序
    	for (int i = 0; i < L.length - 1; i++)
    	{
    		for (int j = 0; j < L.length - 1; j++)
    			if (L.elem[j].Num > L.elem[j + 1].Num)
    			{
    				Temp = L.elem[j];
    				L.elem[j] = L.elem[j + 1];
    				L.elem[j + 1] = Temp;
    			}
    	}
    	cout << "排序成功!" << endl;
    }
    
    // 删除顺序表中的某个元素,并将其保存在e中
    Status DeleteList(SqList& L, Elemtype& e)
    {
    	int i;
    	cout << "要删除元素的位置:";
    	cin >> i;
    	if (i < 1 || i > L.length) return ERROR;
    	e = L.elem[i - 1];
    	int j;
    	for (j = i; j < L.length; j++)
    		L.elem[j - 1] = L.elem[j];
    	L.length--;
    	cout << "删除成功!" << endl;
    	return OK;
    }
    
    // 在顺序表中插入元素
    Status InsertList(SqList& L)
    {
    	if (L.length == MAXSIZE) {
    		cout << "溢出!" << endl;
    		return OVERFLOW;
    	}
    	int i;
    	Elemtype e;
    	cout << "请输入您要插入的位置:";
    	cin >> i;
    	if (i < 1 || i > L.length + 1) {
    		cout << "输入错误!" << endl;
    		return ERROR;
    	}
    	cout << "请输入学生信息:" << endl;
    	cout << "姓名:";
    	cin >> e.Name;
    	cout << "学号:";
    	cin >> e.Num;
    	cout << "性别:";
    	cin >> e.Sex;
    	cout << "年龄:";
    	cin >> e.Age;
    	cout << "电话:";
    	cin >> e.Tele;
    	cout << "地址:";
    	cin >> e.Addr;
    	cout << "成绩:";
    	cin >> e.Score;
    	Elemtype* p, * q;
    	q = &(L.elem[i - 1]);
    	for (p = &(L.elem[L.length - 1]); p >= q; p--)
    		* (p + 1) = *p;
    	*q = e;
    	++L.length;
    	cout << "插入成功!" << endl;
    	return OK;
    }
    
    // 修改顺序表元素
    void ChangeList(SqList& L)
    {
    	string num;
    	int i;
    	cout << "请输入要修改的学生的学号:";
    	cin >> num;
    	for (i = 0; i < L.length; i++)
    	{
    		if (L.elem[i].Num == num)
    		{
    			cout << "姓名:";
    			cin >> L.elem[i].Name;
    			cout << "学号:";
    			cin >> L.elem[i].Num;
    			cout << "性别:";
    			cin >> L.elem[i].Sex;
    			cout << "年龄:";
    			cin >> L.elem[i].Age;
    			cout << "电话:";
    			cin >> L.elem[i].Tele;
    			cout << "地址:";
    			cin >> L.elem[i].Addr;
    			cout << "成绩:";
    			cin >> L.elem[i].Score;
    			cout << "修改成功!" << endl;
    		}
    	}
    	if (i == L.length)
    		cout << "查无此人!" << endl;
    }
    
    
    // 按学号查找
    void SearchList_Num(SqList& L)
    {
    	string Num;
    	int i;
    	cout << "请输入要查找的学生的学号:";
    	cin >> Num;
    	for (i = 0; i < L.length; i++)
    	{
    		if (L.elem[i].Num == Num)
    		{
    			cout << setw(10) << "姓名" << setw(10) << "学号" << setw(10) << "性别" << setw(10)
    				<< "年龄" << setw(15) << "电话" << setw(28) << "地址" << setw(15) << "成绩" <<  endl;
    			cout << setw(10) << L.elem[i].Name << setw(10) << L.elem[i].Num << setw(10)
    				<< L.elem[i].Sex << setw(10) << L.elem[i].Age << setw(15)
    				<< L.elem[i].Tele << setw(28) << L.elem[i].Addr << setw(15) << L.elem[i].Score << endl;
    			break;
    		}
    	}
    	if(i == L.length)
    		cout << "查无此人!" << endl;
    }
    
    // 按姓名查找
    void SearchList_Name(SqList& L)
    {
    	string Name;
    	int i;
    	cout << "请输入要查找的学生的姓名:";
    	cin >> Name;
    	for (i = 0; i < L.length; i++)
    	{
    		if (L.elem[i].Name == Name)
    		{
    			cout << setw(10) << "姓名" << setw(10) << "学号" << setw(10) << "性别" << setw(10)
    				<< "年龄" << setw(15) << "电话" << setw(28) << "地址" << setw(15) << "成绩" << endl;
    			cout << setw(10) << L.elem[i].Name << setw(10) << L.elem[i].Num << setw(10)
    				<< L.elem[i].Sex << setw(10) << L.elem[i].Age << setw(15)
    				<< L.elem[i].Tele << setw(28) << L.elem[i].Addr << setw(15) << L.elem[i].Score << endl;
    			break;
    		}
    	}
    	if(i == L.length)
    		cout << "查无此人!" << endl;
    }
    
    // 按电话查找
    void SearchList_Tele(SqList& L)
    {
    	string Tele;
    	int i;
    	cout << "请输入要查找的学生的电话:";
    	cin >> Tele;
    	for (i = 0; i < L.length; i++)
    	{
    		if (L.elem[i].Tele == Tele)
    		{
    			cout << setw(10) << "姓名" << setw(10) << "学号" << setw(10) << "性别" << setw(10)
    				<< "年龄" << setw(15) << "电话" << setw(28) << "地址" << setw(10) << "成绩" << endl;
    			cout << setw(10) << L.elem[i].Name << setw(10) << L.elem[i].Num << setw(10)
    				<< L.elem[i].Sex << setw(10) << L.elem[i].Age << setw(15)
    				<< L.elem[i].Tele << setw(28) << L.elem[i].Addr << setw(10) << L.elem[i].Score << endl;
    			break;
    		}
    	}
    	if(i == L.length)
    		cout << "查无此人!" << endl;
    }
    
    int main()
    {
    	SqList L;
    	int p = 0, i = 0;
    	// int n, i;
    	int Length;
    	Elemtype e;	
    	cout << "请输入顺序表的长度:";
    	cin >> Length;
    	/*  
    	// test
    	// InitList_Sq(L);
    	// cout << "请输入顺序表的长度:";
    	// cin >> length;
    	// CreateList(L, Length);
    
    	// 输出测试
    	// PrintList(L);
    
    	// 排序测试
    	// SequenceList(L);
    	// PrintList(L);
    
    	// 删除测试
    	// cin >> i;
    	// DeleteList(L, e);
    	// cout << e.Name << e.Num << e.Sex << e.Age << e.Tele << e.Addr << e.Score << endl;
    	// PrintList(L);
    
    	// 插入测试
    	// InsertList(L);
    	// PrintList(L);
    	// cout << "顺序表的长度为:" << GetLength(L) << endl;
    	
    	// 修改测试
    	// ChangeList(L);
    	// PrintList(L);
    
    	// 按学号查找测试
    	// SearchList_Num(L);
    
    	// 按姓名查找测试
    	// SearchList_Name(L);
    
    	// 按电话查找
    	// SearchList_Tele(L);
    	*/
    
    	system("cls");
    	while (1)
    	{
    		cout << endl << "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;
    		cout << "11. 清空顺序表" << endl;
    		cout << "12. 销毁顺序表" << endl;
    		cout << "0. 退出" << endl;
    		cout << endl << "请输入您的选择:";
    		cin >> p;
    		system("cls");
    		switch (p)
    		{
    		case 0: exit(-2);
    		case 1: InitList_Sq(L); break;	
    		case 2: CreateList(L, Length);break;
    		case 3: PrintList(L); break; 
    		case 4: SequenceList(L); break;
    		case 5: InsertList(L); break;
    		case 6: DeleteList(L, e); break;
    		case 7: ChangeList(L); break;
    		case 8: SearchList_Num(L); break;
    		case 9: SearchList_Name(L); break;
    		case 10: SearchList_Tele(L); break;
    		case 11: ClearList(L); break;
    		case 12: DestroyList(L); break;
    		default: cout << "输入错误!" << endl;
    		}
    		cout << endl << "输入1返回主界面 \n输入0退出" << endl;
    		cin >> i;
    		switch (i)
    		{
    		case 1: system("cls"); break;
    		case 0: exit(-2); break;
    		}
    	}
    	cout << endl;
    	return 0;
    }
    
    
    展开全文
  • C++ 学生信息管理系统课程设计报告

    千次阅读 2020-06-13 11:22:27
    《面向对象课程设计》报告学生信息管理系统设计一、问题描述二、需求分析和概要设计三、功能模块描述和设计思路四、具体实现过程五、收获与展望 一、问题描述 学生信息管理系统设计 学生信息包括:学号,姓名,年龄...
  • C++学生信息管理系统(完整版)

    千次阅读 多人点赞 2020-06-26 09:29:12
    无法从文件中读取信息,我感觉是格式问题,输出的格式需要改,但是这样的话,保存在文件的信息看起来就不是很方便了 保存新同学的学号与当前记录的学号相同时不会提醒,这个实现起来比较容易,在保存的时候,再加一...
  • C++ 学生信息管理系统(文件存储)

    千次阅读 2019-01-13 15:07:06
    整合后的部分源码: #include &lt;iostream&gt; #include &lt;list&gt; #include &lt;string.h&gt; #include &lt;string&gt; #include &... Course(size_t i...
  • c++学生信息管理系统+项目报告

    万次阅读 多人点赞 2018-08-18 09:23:43
    一.系统分析:1.开发背景: 随着科学技术的发展,计算机管理在日常生活中的地位变得越来越重要。它能够代替人做各种重复,繁琐的劳动,并且拥有操作简单,可信度好,不易...学生信息管理系统,是针对学校人事处的大...
  • 利用ADO技术,使用C++编写的一个学生信息管理系统,里面有附加操作说明及源码
  • //阅读程序“简单C++学生信息管理系统”,找出其中出现构造函数、友元函数、运算符重载、静态数成员语法现象出现的位置,仔细体会其用法,在以后的设计中能够灵活应用有关方法和技巧。 #include #include using ...
  • 二、 实验内容 应用MFC应用程序实现学生信息管理系统 1、(1)设计一个学生类Student,包括数据成员:姓名、学号、二门课程(面向对象程序设计、高等数学)的成绩。 (2)创建一个管理学生的类Management,包括实现...
  • 可以显示,查询,删除,添加,有菜单,可以算平均分等功能的,求助,求助
  • 翻起大一时写过的作业代码——一个学生信息管理系统,当时不会使用QT,不会MFC等库,只会c++,但是又想做一个有界面的,能够实现鼠标操作的程序。于是绞尽脑汁查资料,自己造轮子,最终写出来了下面的这个现在连我...
  • cout请输入学生信息(NO."):\n"; cout姓名:"; cin>>s; name=new char[strlen(s)+1]; strcpy(name,s); cout性别(1-男,0-女):"; cin>>p; if (p) sex=true; else sex=false; cin>>date; cout; } // ...
  • //添加学生信息 void del(); //删除某学生信息 void change(); //修改某学生信息 void search(); //查询某学生信息 void display(); //显示全部学生信息 private: static int num; string name,sex,politic,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,347
精华内容 10,538
关键字:

c++学生信息管理系统

c++ 订阅