精华内容
下载资源
问答
  • 算法实验 学生管理系统 线性表实现

    千次阅读 2014-03-13 18:40:00
    简单学生信息管理系统 实现一个简单的学生信息管理系统。 学生的主要信息包括学号、姓名,其上能完成添加、删除、查找、显示等基本功能; 分别用顺序表、链表方式实现。 首先用线性表实现,及其类数组实现 首先定义...

    1 题目:

    简单学生信息管理系统
    实现一个简单的学生信息管理系统。
    学生的主要信息包括学号、姓名,其上能完成添加、删除、查找、显示等基本功能;
    分别用顺序表、链表方式实现。

    首先用线性表实现,及其类数组实现

    首先定义一下头文件和类库

    #include<iostream>
    #include<cstdio>
    #include<string>
    using namespace std;
    class Student
    {
    public :
    	string name;
    	int  id;
    };
    class StuList
    {
    private :
    	Student s[100];
    	int length;
    public :
    	StuList(){}
    	StuList(int len)
    	{
    		length=len;
    		for(int i=1;i<=len;i++)
    		{
    			s[i].id=i;
    			s[i].name="";
    		}
    	}
    	StuList(int len,Student *stu)
    	{
    		length=len;
    		for(int i=1;i<=length;i++)
    		{
    			s[i].id=stu[i-1].id;//注意数组的尾数 下标
    			s[i].name=stu[i-1].name;
    		}
    	}
    	//void SetId(int i){return s[i].id;} //id 不需要变更
    	int GetId(int i){return s[i].id;}
    	void SetName(int i,string str){s[i].name=str;}
    	string GetName(int i){return s[i].name;}
    	void SortStu()
    	{
    		for(int i=1;i<=length;i++)
    		{
    			for(int j=i;j<=length;j++)
    			{
    				if(s[i].id>s[j].id)
    				{
    					Student temp;
    					temp.id=s[i].id;
    					temp.name=s[i].name;
    					s[i].id=s[j].id;
    					s[i].name=s[j].name;
    					s[j].id=temp.id;
    					s[j].name=temp.name;
    				}
    			}
    		}
    	}
    	void AddStu(int,string);
    	void DeleteStu(int );//按学号删除
    	void DeleteStu(string);//按姓名删除
    	string SelectStu(int );//按学号查找
    	int SelectStu(string );//按姓名查找
    	void PrintStu();
    	void ChangeID(int ,string);
    };
    void StuList::AddStu(int _id,string _name)
    {
    	s[++length].id=_id;
    	s[length].name=_name;
    	SortStu();
    }
    void StuList::ChangeID(int _id,string _name)
    {
    	int temp=-1;
    	for(int i=1;i<=length;i++)
    	{
    		if(s[i].name==_name){temp=i;break;}
    	}
    	if(temp==-1){return;}	
    	else
    	{
    		s[temp].id=_id;
    	}
    }
    void StuList::DeleteStu(int _id)
    {
    	int temp=1;
    	for(int i=1;i<=length;i++)
    	{
    		if(s[i].id==_id){temp=i;}
    	}
    	for(int j=temp+1;j<=length;j++)
    	{
    		s[j-1].id=s[j].id;
    		s[j-1].name=s[j].name;
    	}
    	length--;
    }
    void StuList::DeleteStu(string _name)
    {
       int temp=-1;
       for(int i=1;i<=length;i++)
       {
    	   if(s[i].name==_name){temp=i;break;}
       }
       for(int j=temp+1;j<=length;j++)
    	{
    		s[j-1].id=s[j].id;
    		s[j-1].name=s[j].name;
    	}
    	length--;
    }
    string StuList::SelectStu(int _id)
    {
    	int temp=-1;
    	for(int i=1;i<=length;i++)
    	{
    		if(s[i].id==_id){temp=i;break;}
    	}
    	if(temp==-1){return "";}
    	else {return s[temp].name; } 
    }
    int StuList::SelectStu(string _name)
    {
    	int temp=-1;
    	for(int i=1;i<=length;i++)
    	{
    		if(s[i].name==_name){temp=i;break;}
    	}
    	if(temp==-1){return -1;}
    	else {return s[temp].id;}
    }
    void StuList::PrintStu()
    {
    	cout<<"length="<<length<<endl;
    	for(int i=1;i<=length;i++)
    	{
    		cout<<s[i].id<<'\t'<<s[i].name<<endl;
    	}
    }

    然后相对应的main函数Cpp文件如下所示

    /*2014-3-12 学生管理系统 顺序表*/
    
    #include<cstdio>
    #include"hTest1_1.h"
    #include<iostream>
    #include<string>
    using namespace std;
    //选择的人性化界面提示
    void Choice(StuList &sl)
    {
    	int flag=true;
    	while(flag)
    	{
    		cout<<"请选择您所需要的服务1-增加 2-删除(按ID) 3-删除(按姓名) 4-查询(按ID) "<<endl<<"5-查询(按姓名) 6-修改(按姓名) 7-排序(按ID 降序)  8-输出显示 9-退出"<<endl;
    		int choice=0,id=0;
    		string name="";
    		cin>>choice;
    		switch(choice)
    		{
    		  case 1:
    			  {
    				  cout<<"请输入需要的添加的 ID 和 Name"<<endl;
    				  cin>>id>>name;
    				  (sl).AddStu(id,name);break;
    			  }
    		  case 2:
    			  {
    				  cout<<"请输入需要删除的ID号"<<endl;
    				  cin>>id;
    				  sl.DeleteStu(id);
    				  break;
    			  }
    		  case 3:
    			  {
    				  cout<<"请输入需要删除的人的姓名"<<endl;
    				  cin>>name;
    				  sl.DeleteStu(name);
    				  break;
    			  }
              case 4:
    			  {
    				  cout<<"请输入需要查询的人的ID"<<endl;
    				  cin>>id;
    				  cout<<"ID:"<<id<<" 姓名:"<<sl.SelectStu(id)<<endl;
    				  break;
    			  }
    		  case 5:
    			  {
    				  cout<<"请输入需要查询的人的名字"<<endl;
    				  cin>>name;
    				  cout<<"姓名:"<<name<<" ID:"<<sl.SelectStu(name)<<endl;
    				  break;
    			  }
    		  case 6:
    			  {
    				  cout<<"请输入需要修改的人的姓名 和 修改后的ID号"<<endl;
    				  //Getline();
    				  cin>>name;
    				  cin>>id;//为什么会出问题 读取String类型需要注意的事项
    				  sl.ChangeID(id,name);
    				  sl.SortStu();
    				  sl.PrintStu();
    				  break;
    			  }
    		  case 7:
    			  {
    				  sl.SortStu();
    				  sl.PrintStu();
    				  break;
    			  }
    		  case 8:{sl.PrintStu();break;}
    		  case 9:{flag=0;break;}
    		}
    		cout<<endl;
    	}
    }//选择的人性化界面
    int main()
    {
    	Student s[3]={{"张三",12},{"李四",25},{"王五",8}};注意数组的尾数 下标
    	StuList sl(3,s);
    	//sl.PrintStu();
    	Choice(sl);
    	return 1;
    }
    
    


     


     

    展开全文
  • 自己写的学生信息管理系统,如有错误还望指正。主要就是用了链表,grade文件格式可以参照输出的来写,主要支持win10/8,ios暂不支持
  • 运用学生信息管理系统可以减轻学院教学人员的工作量,缩小开支,提高工作效率与准确率,能够合理安排时间,能够尽快的知道自己的考试成绩,投入新的课程的学习或复习这次没有考过的课程。而学生信息管理系统的应用...
  • #include <stdio.h> #include <string.h> #define MAXSIZE 100 #include<malloc.h> #include<stdlib.h> typedef struct{ char num[8];/*学号*/ char name[9];/*姓名*/ char gender[3];/*性别*/ int score;...
  • 线性表) 基本概念与设计思路:链表的每个元素称为一个节点,每个节点都可以存储在内存中的不同的位置,为了表示每个元素与后继元素的逻辑关系,以便构成“一个节点链着一个节点”的链式存储结构,除了存储元素...

    点此去下载
    运行截图:在这里插入图片描述
    在这里插入图片描述

    (线性表)
    基本概念与设计思路:链表的每个元素称为一个节点,每个节点都可以存储在内存中的不同的位置,为了表示每个元素与后继元素的逻辑关系,以便构成“一个节点链着一个节点”的链式存储结构,除了存储元素本身的信息外,还要存储其直接后继信息,因此,每个节点都包含两个部分,第一部分称为链表的数据区域,用于存储元素本身的数据信息,这里用data表示,它不局限于一个成员数据,也可是多个成员数据,第二部分是一个结构体指针,称为链表的指针域,用于存储其直接后继的节点信息,这里用next表示,next的值实际上就是下一个节点的地址,当前节点为末节点时,next的值设为空指针
    在这里插入图片描述

                                    图1--1
    

    为了方便对链表各项操作的理解,把链表应用到具体的实例中,
    我选的程序为:学生信息管理系统
    问题描述:
    学生信息管理对于学校管理中异常重要的一个环节,作为学校,除了育人,就是育知,学生信息管理的计算机化是在整个学校教务管理中的重要一部分,能否实现这一步关系到学校办学整体效率的高低,由于它的重要性,学生信息管理系统的开发与应用就逐渐提入议程,并占着越来越重要的份量。 运用学生信息管理系统可以减轻学院教学人员的工作量,缩小开支,提高工作效率与准确率,能够合理安排时间,能够尽快的知道自己的考试成绩,投入新的课程的学习或复习这次没有考过的课程。而学生信息管理系统的应用也为今天的民办教育在未来市场的竞争力有所提高。从大的方向说,就是为了加速我国四化建设的发展,实现全部的自动化,使我国发展成为通讯网络化,决策科学化,办公自动化的国家。 在现代,高科技的飞跃发展,人们工作习惯的改变,特别是电脑的大量普及,人们生活节奏越来越快,怎样提高工作效率是人们首先考虑的问题。学生信息管理是一个非常繁琐与复杂的一项工作,一个原因就是工作量大不好管。对于一个学校而言,更应该运用一些本地资源,提高管理的力度,对学生负责,对国家负责。
    程序功能:

    1. 添加学生成绩信息

    2. 根据学号将学生信息插入到指定位置

    3. 显示所有学生的信息

    4. 删除指定学生成绩信息

    5. 修改指定学生成绩信息

    6. 查询当前链表中有多少为同学

    7. 查询指定分数的学生个数,并输出查询的学生信息

    8. 退出程序

              图1-2
      

    详细设计:
    声明程序中关于需要的变量
    class StudentLinkNode
    {
    public int stuno;//学生学号
    public String name;//学生姓名
    public int score;//学生班级
    public int mathscore;//数学分数
    public int englishscore;//英语分数
    public int computerscore;//计算机分数
    public StudentLinkNode next;//指向下一个结点的指针
    //构造器
    public StudentLinkNode() {}
    public StudentLinkNode(int stuno,String name,int score,int mathscore,int englishscore,int computerscore) {
    this.stuno = stuno;
    this.name = name;
    this.score = score;
    this.mathscore = mathscore;
    this.englishscore = englishscore;
    this.computerscore = computerscore;
    }
    为了显示方法,重写toString方法
    public String toString() {
    return "学号: “+stuno+” “+“姓名”+name+” "+“班级”+score "+“数学分数”+mathscore "+“英语分数”+englishscore "+“计算机分数”+computerscore;
    }
    }
    遇到的困难——最重要的关于链表的操作:
    有两种插入方式,先初始化一个头节点,头节点不要动,不存放具体的数据,添加结点到单向链表,不考虑编号顺序时,找到当前链表的最后结节点,将最后这个节点的next 指向 新的结点,head节点不能动,因此我们需要一个辅助遍历的节点 temp,找到链表的最后的节点,如果遍历的当前结点不是尾结点,将temp节点向后移动,当退出while循环时,表示temp就指向了链表的尾节点另一种添加方式,在添加学生时根据学号将学生插入到指定位置此我们仍然通过一个辅助指针(变量)来帮助找到添加的位置
    因为是单链表,我们找的temp是位于添加位置的前一个节点,否则插入不了
    class LinkedList{

    private StudentLinkNode head = new StudentLinkNode(0,"",0);
    
    
    public void add(StudentLinkNode stuNode)
    {
    
    	StudentLinkNode temp = head;
    	while(true) {
    		
    		if(temp.next == null)
    		{ 
    			break;
    		}
    		
    		temp = temp.next;
    	}
    	
    	temp.next = stuNode;
    }
    
    
    public void addBystuno(StudentLinkNode stuNode)
    {
    
    	StudentLinkNode temp = head;
    	boolean flag = false;
    	while(true)
    	{
    		if(temp.next == null) 
    		{
    			break;
    		}
    		if(temp.next.stuno > stuNode.stuno) 
    		{
    			break;
    		}
    		else if(temp.next.stuno == stuNode.stuno) 
    		{
    			flag = true;
    			break;
    		}
    		temp = temp.next;
    	}
    
    	if(flag)
    	{   
    		System.out.println("准备添加的学生的学号:"+stuNode.stuno+"已经存在不能添加了");
    	}else {
    		
    		stuNode.next = temp.next;
    		temp.next = stuNode;
    	}
    }
    

    删除结点:根据学生学号删除指定学生节点
    head不能动,因此我们需要一个temp辅助节点找到待删除节点的前一个节点
    说明我们在比较时,是temp.next.stuno和需要删除的节点的stuno比较
    public void del(int stuno)
    {
    StudentLinkNode temp = head;
    boolean flag =false;
    while(true)
    {
    if(temp.next == null)
    {
    break;
    }
    if(temp.next.stuno == stuno)
    {

    			flag = true;
    			break;
    		}
    		temp = temp.next; 
    	}
    	if(flag)
    	{ 
    	
    		temp.next = temp.next.next;
    	}else {
    		System.out.println("学号"+stuno+"的学生不存在");
    	}	
    }
    

    遍历链表

    public void showlist() {
    if(head.next == null)
    {
    System.out.println(“链表为空”);
    return;
    }
    因为头节点,不能动,因此我们需要一个辅助变量来遍历
    StudentLinkNode temp = head.next;
    while(true)
    {
    判断是否到链表最后
    if(temp == null)
    {
    break;
    }
    输出节点的信息
    System.out.print(temp);前面StudentLinkNode类中已经重写toString方法
    System.out.println();

    		temp = temp.next;
    	}
    }
    返回链表中共有多少个学生的信息
    public int len()
    {
    	int count=0;
    	判断链表是否为空
    	if(head.next == null)
    	{
    		System.out.println("链表为空");
    		return 0;
    	}
    	因为头节点,不能动,因此我们需要一个辅助变量来遍历
    	StudentLinkNode temp = head.next;
    	while(true)
    	{
    		判断是否到链表最后
    		if(temp == null)
    		{
    			break;
    		}
    		输出节点的信息
    		count++;
    		将temp后移
    		temp = temp.next;
    	}
    	return count;
    	
    }
    删除结点:根据学生学号删除指定学生节点
    head不能动,因此我们需要一个temp辅助节点找到待删除节点的前一个节点
    说明我们在比较时,是temp.next.stuno和需要删除的节点的stuno比较
    public void del(int stuno)
    {
    	StudentLinkNode temp = head;
    	boolean flag =false; 
    	while(true)
    	{
    		if(temp.next == null)
    		{
    			break;//已经到链表的最后
    		}
    		if(temp.next.stuno == stuno)
    		{
    			//找到待删除的节点的前一个节点temp
    			flag = true;
    			break;
    		}
    		temp = temp.next;//temp后移,遍历
    	}
    	//判断flag
    	if(flag)
    	{//找到
    	//可以删除
    		temp.next = temp.next.next;
    	}else {
    		System.out.println("学号"+stuno+"的学生不存在");
    	}	
    }
    
    修改节点信息,根据stuno 编号来修改
    public void update(StudentLinkNode stuNode)
    {
    	//判断是否为空
    	if(head.next == null)
    	{
    		System.out.println("链表为空");
    		return;
    	}
    	找到需要修改的节点,根据stuno编号
    	定义一个辅助变量
    	StudentLinkNode temp = head.next;
    	boolean flag =false;//表示是否找到该节点
    	while(true)
    	{
    		if(temp == null)
    		{
    			break;//已经遍历完链表
    		}
    		if(temp.stuno == stuNode.stuno)//找到
    		{
    			flag = true;
    			break;
    		}
    		temp = temp.next;
    	}
    	根据flag判断是否找到要修改的节点
    	if(flag) {
    		temp.name = stuNode.name;
    		temp.score = stuNode.score;
    		temp.mathscore = stuNode.mathscore;
    		temp.englishscore = stuNode.englishscore;
    		temp.computerscore = stuNode.computerscore;
    	}else {
    		System.out.println("没有找到学号为"+stuNode.stuno+"的学生");
    	}
    }
    查询指定班级的学生个数,并输出查询的学生信息
    public void getbyScore(int score)
    {
    	StudentLinkNode temp = head;
    	int count=0;
    	System.out.println("班级为"+score+"的学生有:");
    	while(temp != null)
    	{
    		if(temp.score == score)
    		{
    			count++;
    			System.out.println("学号:"+temp.stuno+"姓名:"+temp.name);
    		}
    		temp = temp.next;
    	}
    	System.out.println("共上面"+count+"个");
    }
    

    不足与改进:学生信息管理系统有诸多信息,所以对输入的信息没有一个甄别的话,很容易造成问题,所以改进的地方就是给数据的合法性进行检验。
    特色功能:在本程序中最大的特色就是有多种查找学生信息的方式

    展开全文
  • cout请确认是否删除此学生信息?"<>flag; if(flag == 1) { table.Delete(id); break; } break; case 3: system("cls"); cout请输入需要修改的学生的序号:"<>id; table.modify(id); break; case 4: system("cls"); ...
    #include <iostream>
    #include <iomanip>
    #include <cstdlib>
    #include <cstdio>
    using namespace std;
    
    struct Student
    {
        string ID;
        string Name;
        string Sex;
        string Dept_name;
        string _Class;
        void describe();
        void set(string id,string name,string sex,string dept_name,string _class);
        void Help();
    };
    void Student::describe()
    {
        cout<<setw(15)<<ID;
        cout<<setw(15)<<Name;
        cout<<setw(15)<<Sex;
        cout<<setw(15)<<Dept_name;
        cout<<setw(15)<<_Class<<endl;
    }
    
    void Student::set(string id,string name,string sex,string dept_name,string _class)
    {
        ID = id;
        Name = name;
        Sex = sex;
        Dept_name = dept_name;
        _Class = _class;
    }
    
    void Student::Help()
    {
        string id;
        string name;
        string sex;
        string dept_name;
        string _class;
        cout<<"学号:"<<endl;
        cin>>id;
        cout<<"姓名:"<<endl;
        cin>>name;
        cout<<"性别:"<<endl;
        cin>>sex;
        cout<<"系名:"<<endl;
        cin>>dept_name;
        cout<<"班级:"<<endl;
        cin>>_class;
        set(id,name,sex,dept_name,_class);
    }
    
    class SqList
    {
    private:
        int count;
        int maxsize;
        Student *students;
    public:
        SqList(int size=40);
        virtual~SqList();
        void Clear();
        void Traverse()const;
        bool Insert();
        bool Delete(string id);
        bool modify(string id);    //修改
        bool inquiry(string id,Student &e)const;    //查找
        Student* getarr();
        int getcount();
        int Partition(Student *students,int low,int high);
        void QuickSortHelp(Student *students,int low,int high);
    };
    
    SqList::SqList(int size)
    {
        maxsize = size;
        students = new Student[maxsize];
        count = 0;
    }
    
    SqList::~SqList()
    {
        delete []students;
    }
    
    void SqList::Clear()
    {
        count = 0;
    }
    
    bool SqList::Insert()
    {
        if(count == maxsize)
        {
            cout<<"内存空间不足!"<<endl;
            return false;
        }
        Student tmp;
        cout<<"请输入学生相关信息:"<<endl;
        tmp.Help();
        students[count++] = tmp;
        cout<<"添加成功!"<<endl;
        return true;
    }
    
    bool SqList::inquiry(string id,Student &e)const
    {
        int i;
        for(i=0; i<count; i++)
        {
            if(students[i].ID == id)
            {
                e = students[i];
                return true;
            }
        }
        cout<<"尚无此学生信息!"<<endl;
        return false;
    }
    
    bool SqList::modify(string id)
    {
        int i;
        for(i=0; i<count; i++)
        {
            if(students[i].ID ==id)
            {
                cout<<"请重新输入相关数据:"<<endl;
                students[i].Help();
                return true;
            }
        }
        cout<<"暂无此学生信息!"<<endl;
        return false;
    }
    
    bool SqList::Delete(string id)
    {
        int i;
        for(i=0; i<count; i++)
        {
            if(students[i].ID == id)
                break;
        }
        if(i == count)
        {
            cout<<"暂无此学生信息!"<<endl;
            return false;
        }
        for(int j=i+1; j<count; j++)
        {
            students[i] = students[j];
        }
        cout<<"删除成功!"<<endl;
        return true;
    }
    
    void SqList::Traverse()const
    {
        for(int i=0; i<count; i++)
        {
            students[i].describe();
            cout<<endl;
        }
    }
    
    Student* SqList::getarr()
    {
        return students;
    }
    
    int SqList::getcount()
    {
        return count;
    }
    
    int SqList::Partition(Student *students,int low,int high)
    {
        while(low<high)
        {
            while(low<high&&students[high].ID>=students[low].ID)
            {
                high--;
            }
            swap(students[low],students[high]);
            while(low<high&&students[low].ID<=students[high].ID)
            {
                low++;
            }
            swap(students[low],students[high]);
        }
        return low;
    }
    
     void SqList::QuickSortHelp(Student *students,int low,int high)
     {
         if(low<high)
         {
             int pivotLoc = Partition(students,low,high);
             QuickSortHelp(students,low,pivotLoc-1);
             QuickSortHelp(students,pivotLoc+1,high);
         }
     }
    
    void menu()
    {
        cout<<"|--------------------------------------------------|"<<endl;
        cout<<"|              1.添加学生相关信息                  |"<<endl;
        cout<<"|              2.删除同学相关信息                  |"<<endl;
        cout<<"|              3.编辑同学相关信息                  |"<<endl;
        cout<<"|              4.查找同学相关信息                  |"<<endl;
        cout<<"|              5.展示全部学生信息                  |"<<endl;
        cout<<"|              6.删除全部联系信息                  |"<<endl;
        cout<<"|              7.退 出                             |"<<endl;
        cout<<"|--------------------------------------------------|"<<endl;
    }
    
    int main()
    {
        cout<<setw(30)<<"学生信息管理系统"<<endl;
        int i,flag;
        SqList table(40);
        Student e;
        while (1)
        {
            menu();
            cout<<"请输入你的操作:"<<endl;
            cin>>i;
            string id;
            switch (i)
            {
            case 1:
                system("cls");
                table.Insert();
                break;
            case 2:
                system("cls");
                cout<<"请输入所删除学生的序号:"<<endl;
                cin>>id;
                system("cls");
                table.inquiry(id,e);
                cout<<"请确认是否删除此学生信息?"<<endl;
                e.describe();
                cout<<"删除请按1,返回请按任意数字"<<endl;
                cin>>flag;
                if(flag == 1)
                {
                    table.Delete(id);
                    break;
                }
                break;
            case 3:
                system("cls");
                cout<<"请输入需要修改的学生的序号:"<<endl;
                cin>>id;
                table.modify(id);
                break;
            case 4:
                system("cls");
                cout<<"请输入查找学生的序号:"<<endl;
                cin>>id;
                system("cls");
                table.inquiry(id,e);
                e.describe();
                break;
            case 5:
                system("cls");
                cout<<"按1选择序列化输出,按任意键乱序输出"<<endl;
                cin>>flag;
                if(flag == 1)
                {
                    table.QuickSortHelp(table.getarr(),0,table.getcount()-1);
                    table.Traverse();
                    break;
                }
                table.Traverse();
                break;
            case 6:
                system("cls");
                table.Clear();
                cout<<"全部清除成功!"<<endl;
                break;
            case 7:
                system("cls");
                cout<<"谢谢使用!"<<endl;
                return 0;
            default:
                system("cls");
                cout<<"输入错误!"<<endl;
                break;
            }
        }
    }
    
    展开全文
  • 项目名称:学生信息管理系统项目内容:设计一个学生信息管理系统,实现对学生基本信息的添加、删除、修改和查询等操作,其中每个学生信息包含学号,姓名和绩点。要求系统完成以下主要功能: (1)显示:显示当前...

    1.内容

    项目名称:学生信息管理系统项目内容:设计一个学生信息管理系统,实现对学生基本信息的添加、删除、修改和查询等操作,其中每个学生信息包含学号,姓名和绩点。要求系统完成以下主要功能:
    (1)显示:显示当前所有学生信息记录;
    (2)录入:从键盘输入一条学生信息记录,插入到表中指定的位置;
    (3)查找:根据学号或者记录的位置查找学生的各项信息;
    (4)删除:删除指定位置的学生信息记录;
    (5)更新:更新指定位置的学生信息记录;
    (6)统计:统计表中学生人数。
    (7) 排序:按照学号或者绩点进行排序
    (8)清空:清空表中所有记录

    2.顺序表的实现

    
    #include<iostream>
    #include"SqList.hpp"
    #include<cstring>
    using namespace std;
    
    int main() {
     SqList<student>* list = new SqList<student>();
     while (1) {
      system("cls");
      show_list();
      int choise;
      cin >> choise;
      if (!(choise < 10 && choise>0))
       continue;
      switch (choise) {
      case 1: {
       show_student(*list);
       system("pause");
       break;
      }
      case 2: {
       set_massage(*list);
       system("pause");
       break;
      }
      case 3: {
       find(*list);
       system("pause");
       break;
      }
      case 4: {
       delete_him(*list);
       system("pause");
       break;
      }
      case 5: {
       change(*list);
       system("pause");
       break;
      }
      case 6: {
       sum_student(*list);
       system("pause");
       break;
      }
      case 7: {
       sort(*list);
       system("pause");
       break;
      }
      case 8: {
       clear_all(*list);
       system("pause");
       break;
      }
      case 9: {
       return 0;
       break;
      }
      }
     }
     system("pause");
     return 0;
    }

    结构体定义:

    
    typedef struct student {
     student() {
     }
     string name;
     string number;
     double performance;
    public:
     void set_student() {
      cout << "输入姓名:" << endl;
      cin >> this->name;
      cout << "输入学号:" << endl;
      cin >> this->number;
      cout << "输入绩点:" << endl;
      cin >> this->performance;
     }
    }student;

    成员函数的实现:

    
    void print_student(const student& a) {
     cout << "姓名:" << a.name << " 学号:" << a.number << " 绩点:" << a.performance << endl;
    }
    void show_list() {
     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;
    }
    //显示:显示当前所有学生信息记录;
    void show_student(SqList<student>& a) {
     if (a.IsEmpty())
      cout << "没有学生" << endl;
     else {
      a.Traverse(print_student);
     }
    }
    //录入:从键盘输入一条学生信息记录,插入到表中指定的位置;
    void set_massage(SqList<student>& a) {
     system("cls");
     int sign = 0;
     cout << "1.在尾部插入" << endl;
     cout << "2.输入插入位置" << endl;
     cin >> sign;
     if (sign == 1) {
      student m;
      m.set_student();
      a.InsertElem(m);
     }
     else if (sign == 2) {
      cout << "输入位置:(在1-" << a.GetLength() << "之间)" << endl;
      int i = 0;
      cin >> i;
      if (i<1 && i>a.GetLength()){
       cout << "输入错误" << endl;
      }
      else {
       student m;
       m.set_student();
       a.InsertElem(i, m);
      }
     }
     else {
      cout << "输入错误" << endl;
     }
     
    }
    //查找:根据学号或者记录的位置查找学生的各项信息;
    void find(SqList<student>& a) {
     system("cls");
     int sign = 0;
     student s;
     cout << "1.位置查找" << endl;
     cout << "2.学号查找" << endl;
     cout << "3.姓名查找" << endl;
     cin >> sign;
     if (sign == 1) {
      int m = 0;
      cout << "输入位置:(在1-" << a.GetLength() << "之间)" << endl;
      cin >> m;
      if (m > 0 && m <= a.GetLength()) {
       a.GetElem(m, s);
      }
      else {
       cout << "位置查找错误" << endl;
      }
      print_student(s);
     }
     else if (sign == 2) {
      string m;
      int ok = 0;
      cout << "输入学号:" << endl;
      cin >> m;
      for (int i = 1; i <= a.GetLength(); i++) {
       a.GetElem(i, s);
       if (s.number == m) {
        print_student(s);
        ok = 1;
        break;
       }
      }
      if (ok == 0)
       cout << "没找到" << endl;
     }
     else if (sign == 3) {
      string m;
      int ok = 0;
      cout << "输入姓名:" << endl;
      cin >> m;
      for (int i = 1; i <= a.GetLength(); i++) {
       a.GetElem(i, s);
       if (s.name == m) {
        print_student(s);
        ok = 1;
        break;
       }
      }
      if (ok == 0)
       cout << "没找到" << endl;
     }
     else {
      cout << "输入错误,请按序号输入" << endl;
     }
    }
    //删除:删除指定位置的学生信息记录;
    void delete_him(SqList<student>& a) {
     int sign = 0;
     student s;
     cout << "输入位置:(在1-" << a.GetLength() << "之间)" << endl;
     cin >> sign;
     if (sign > 0 && sign <= a.GetLength()) {
      a.DeleteElem(sign, s);
      cout << "删除成功" << endl;
      cout << "信息:";
      print_student(s);
     }
     else {
      cout << "位置查找错误" << endl;
     }
    }
    //更新:更新指定位置的学生信息记录;
    void change(SqList<student>& a) {
     system("cls");
     int sign = 0;
     student s;
     cout << "输入位置:(在1-" << a.GetLength() << "之间)" << endl;
     cin >> sign;
     if (sign > 0 && sign < a.GetLength()) {
      a.GetElem(sign, s);
      cout << "原学生信息为:" << endl;
      print_student(s);
      cout << "更改为:" << endl;
      s.set_student();
      a.SetElem(sign, s);
      cout << "更新成功" << endl;
     }
     else {
      cout << "输入错误" << endl;
     }
    }
    //统计:统计表中学生人数。
    void sum_student(SqList<student>& a) {
     system("cls");
     cout << "学生人数为:" << a.GetLength() << endl;
    }
    //排序:按照学号或者绩点进行排序
    void sort(SqList<student>& a) {
     system("cls");
     if (a.GetLength() < 2) {
      cout << "人数过少,无法排序" << endl;
      return;
     }
     int sign = 0;
     cout << "1.按学号排列" << endl;
     cout << "2.按绩点排列" << endl;
     cin >> sign;
     if (sign < 1 && sign>2) {
      cout << "输入错误" << endl;
     }
     else {
      for (int i = 0; i < a.GetLength(); i++) {
       for (int j = 1; j < a.GetLength() - i; j++) {
        student s1, s2;
        a.GetElem(j, s1);
        a.GetElem(j + 1, s2);
        if (sign == 2) {
         if (s1.performance > s2.performance)
          a.change_two(j);
        }
        else {
         if (s1.number > s2.number) {
          a.change_two(j);
         }
        }
       }
      }
     }
     cout << "排序完成" << endl;
    }
    //清空:清空表中所有记录
    void clear_all(SqList<student>& a) {
     for (int i = a.GetLength(); i > 0; i--) {
      student s;
      a.DeleteElem(i, s);
     }
     cout << "清空完成" << endl;
    }

    头文件SqList.hpp:

    #pragma once
    #ifndef __SQ_LIST_H__
    #endif
    #define __SQ_LIST_H__
    // ANSI C++标准库头文件
    #include <cstring>     // 标准串操作
    #include <iostream>     // 标准流操作
    using namespace std;
    // 宏定义
    #define DEFAULT_SIZE 1000   // 缺省元素个数
    #define DEFAULT_INFINITY 1000000 // 缺省无穷大
    
    template <class ElemType>
    class SqList
    {
    protected:
     // 顺序表的数据成员
     int length;     // 顺序表的当前长度 
     int maxLength;    // 顺序表的最大容量
     ElemType* data;   // 元素存储空间的首地址 
    public:
    // 顺序表的函数成 构造一个空表 
     SqList(int size = DEFAULT_SIZE) {
      this->length = 0;
      this->maxLength = size;
      data = new ElemType[DEFAULT_SIZE];
     }
    // 根据数组v的内容构造顺序表 
     template <class ElemType>
     SqList(ElemType v[], int n, int size = DEFAULT_SIZE) {
      this->data = new ElemType(DEFAULT_SIZE);
      this->length = n;
      this->maxLength = size;
      for (int i = 0; i < n; i++) {
       ElemType* a = new ElemType;
       *a = v[i];
       data[i] = *a;
      }
     }
     // 析构函数
     virtual ~SqList() {
     }
     // 取顺序表长度 
     int GetLength() const {
      return this->length;
     }
     // 判断顺序表是否为空
     bool IsEmpty() const {
      return this->length == 0;
     }
     // 将顺序表清空
     void Clear() {
      delete[] data;
      this->length = 0;
     }
     // 遍历顺序表
     template <class ElemType>
     void Traverse(void (*Visit)(const ElemType&)) const {
      for (int i = 0; i < this->length; i++) {
       (*Visit)(data[i]);
      }
      if (this->length == 0)
       cout << "没有成员" << endl;
     }
     // 元素定位,求指定元素在顺序表中的位置
     template <class ElemType>
     int LocateElem(const ElemType& e) {
      int sign = 0;
      for (int i = 0; i < this->length; i++) {
       if (this->data[i] == e) {
        sign = 1;
        return i+1;
       }
      }
      if (sign == 0)
       cout << "没有找到" << endl;
      return -1;
     }
     // 取顺序表中第i个元素的值
     template <class ElemType>
     int GetElem(int i, ElemType& e) const {
      
      if ((i - 1 <= this->length-1)&&i>=0)
       e = data[i - 1];
      else
       cout << "没有找到" << endl;
      return 0;
     }
     // 修改顺序表中第i个元素的值
     template <class ElemType>
     int SetElem(int i, const ElemType& e) {
      if ((i  <= this->length) && i >= 0)
       this->data[i-1] = e;
      else
       cout << "没有找到" << endl;
      return 0;
     }
     // 删除顺序表中第i个元素  
     template <class ElemType>
     int DeleteElem(int i, ElemType& e) {
      e = this->data[i - 1];
      if ((i <= this->length) && i >= 0) {
       for (int j = i - 1; j < this->length - 1; j++)
        this->data[j] = this->data[j + 1];
       this->length--;
      }
      else
       cout << "没有找到" << endl;
      return 0;
     }
     // 在顺序表第i个位置插入元素
     template <class ElemType>
     int InsertElem(int i, const ElemType& e) {
      if (((i-1 <= this->length) && i > 0)) {
       for (int j = this->length; j > i - 1; j--) {
        this->data[j] = this->data[j - 1];
       }
       this->data[i - 1] = e;
      }
      else
       cout << "没有找到" << endl;
      this->length++;
      return 0;
    }
    void change_two(int m) {
      ElemType a;
      a=this->data[m -1];
      this->data[m-1]= this->data[m + 1-1];
      this->data[m + 1-1]=a;
     }
     // 在顺序表表尾插入元素
     template <class ElemType>
     int InsertElem(const ElemType& e) {
      this->data[this->length] = e;
      this->length++;
      return 0;
     }
     // 复制构造函数
     template <class ElemType>
     SqList(const SqList<ElemType>& sa) {
      for (int i = 0; i < sa.GetLength(); i++) {
       this->data[i] = sa.data[i];
      }
      this->length = sa.GetLength();
     }
     // 赋值语句重载
    template <class ElemType>
    SqList<ElemType>& operator =(const SqList<ElemType>& sa) {
     SqList(sa);
     return *this;
    }
    };
    展开全文
  • 数据结构线性表实现学生信息管理系统

    千次阅读 多人点赞 2019-10-22 18:52:03
    数据结构线性表实现学生信息管理系统 方法一:顺序表实现 #include <stdio.h> #include <iostream> #include <stdlib.h> #include <string.h> #define MAXSIZE 1000 #define OVERFLOW -1 ...
  • printf("请输入需要插入的学生信息的位置\n"); int i; scanf("%d",&i); if((i)||(i>=L.length+1)) {printf("列表共%d个人。",L.length); return 0;} //i值不合法 //if(L.length == MAXSIZE) return ERROR; //...
  • 项目名称:学生信息管理系统项目 内容:设计一个学生信息管理系统,实现对学生基本信息的添加、删除、修改和查询等操作,其中每个学生信息包含学号,姓名和绩点。要求系统完成以下主要功能: (1)显示:显示当前...
  • 首先我们要先想好一个学生应有的信息:姓名、年龄、性别、学号、出生日期等一些基本信息。然后创建一个学生结构,其次我们还要创建出生日期的结构:年月日。这些结构是属于数据域的,然后要创建一个节点
  • 学生信息管理系统----线性表

    千次阅读 2016-09-19 20:44:19
    数据结构线性表实验,学生管理系统,c语言的时候不是自己写的,现在又有机会自己写一份,定义了全局的链表,老师说函数没参数,最好用ADT,就到这吧,不想改了,看来以后写程序要考虑函数的通用性,应该系统的学学...
  • 用线性链表完成信息的存储、删除、遍历、修改,用线性表的直接选择排序完成学生信息按学号排序
  • /* 文件名称:1_1_2_8.cpp ... if (Listdelete(rl, i) == 1)//调用删除函数删除第i个学生的学生信息 printf("成功删除该学生信息\n"); else printf("删除失败\n"); break; } } }
  • 定义一个包含学生信息(学号,姓名,成绩)的的 顺序表和链表,使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 根据姓名进行查找,返回此学生的学号和...
  • "\t\t* 学生信息管理系统 *\n" ) ; printf ( "\t\t* 1.查询学生信息 *\n" ) ; printf ( "\t\t* 2.增加学生信息 *\n" ) ; printf ( "\t\t* 3.删除学生信息 *\n" ) ; printf ( "\t\t* 4.显示全部信息 *\n...

空空如也

空空如也

1 2 3 4 5
收藏数 85
精华内容 34
关键字:

学生信息管理系统线性表