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

📄 4.cpp

📁 学生学籍管理 用链表实现 包括创建,查找,删除,修改,输出的功能.
💻 CPP
字号:
#include<iostream>         //定义头文件
using namespace std;       //标准命名空间 
//定义结构体
struct student 
{
	int nNum;
	char cName[10];
	struct student *pNext;
};

static struct student *ptemp = NULL;  //定义静态指针为全局变量 

//创建学生链表
struct student *creat(struct student *head)
{
	struct student *p1,*p2;
	int nNum;
	char Name[10];
	p2 = p1=(struct student *)malloc(sizeof(struct student ));  //申请空间
    scanf("%d",&nNum);         //创建第一个节点
	p1->nNum=nNum;
	scanf("%s",Name);
	strcpy(p1->cName,Name);
    p1->pNext=NULL; 
	while(p1->nNum>0)
    {
		if(head==NULL) 
			head= p1;
		else
		{
			scanf("%d",&nNum);	
			if (nNum==0)
				break;
			p1=(struct student *)malloc(sizeof(struct student ));
			p1->nNum=nNum; 
			scanf("%s",Name);
			strcpy(p1->cName,Name);
			p2->pNext=p1;
			p2=p1;
			
		}
	}
	p2->pNext = NULL;
	ptemp = head;
	return head;
}
//在链表中查找
struct student *search(struct student *head,int num)
{
	struct student *p1;
	p1=head;
	while (p1!=NULL)
	{
		if(p1->nNum==num)
			{
				cout<<" Name :"<<p1->cName<<endl;   //输出学生的姓名
				cout<<" Num :" << p1->nNum<<endl;   //输出学生的学号
			}
		p1=p1->pNext;
	}
	return head;
}
//在链表中修改学生数据
struct student *repeat(struct student *head,int num)
{
	struct student *p1;
	int nNum,k=0;
	char Name[10];
	memset(Name,0,10);
	p1=head;
	while (p1!=NULL)   //查找此人
	{
		if(p1->nNum==num)
			{
				cout<<" Name :"<<p1->cName<<endl;
				cout<<" Num :" << p1->nNum<<endl;
				k=1;
				break;
			}
		p1=p1->pNext;
	}
	if(k)
	{       //输入学生新的姓名学号
		cout<<"New Name:"<<endl;
		cout<<"New Num :" << endl;
		scanf("%d",&nNum);
		p1->nNum=nNum;
		scanf("%s",Name);
		strcpy(p1->cName,Name);
	}
	else
	{
		cout<<"No Reacord."<<endl;  //记录中无此人
	}

	return head;
}
//在链表中插入节点
struct student *Insert(struct student *head,struct student *New,int num)
{
    struct student *p2;
	p2=head;
	while(1)
	{
		if(p2 == NULL)  //在表头插入
		{ 
			New->pNext = head;
			head = New;
			break;
		}
	   if(p2->nNum == num)  //在中间或者表尾插入
	   {
			New->pNext = p2 ->pNext;
			p2->pNext = New;
			break;
	   }
	   p2 = p2->pNext;
	}
	return head;
}

//在链表中删除节点
struct student *Delete(struct student *head,int num)
{
	struct student *p1,*p2=NULL;
	p1 = head;
	while(1)
	{	
		if(p1->pNext == NULL)   //删除头节点
		{
			cout << " No Found!"<<endl;
			break;
		}
		if(head->nNum == num)  //在中间删除
		{
			head = p1 ->pNext;
			free(p1);
			break;
		}
		p2 = p1;
		p1 = p1 ->pNext;
		if(p1->nNum == num)   //在末尾删除
		{
			p2->pNext = p1 ->pNext;
			free(p1);
			break;
		}
	}
	return head;
}
//输出链表
void  putlink(struct student *head)
{
	struct student *p=head;
	do{
		cout<<"Num:"<<p->nNum<<endl;
		cout<<"Name:"<<p->cName<<endl;
		p=p->pNext;
	}while(p!=NULL);
}
//主函数
int main()
{
    struct student *p = NULL;            //声明一个结构体指针并赋值为NULL
	char ch, name[10];
	int  num;
   
	cout <<" 1.  建立  2.  查找"<<endl;          //输出帮助信息
	cout <<" 3.  修改  4.  插入"<<endl;
	cout <<" 5.  删除  6.  输出 "<<endl;
	cout <<" 0.  退出"<<endl;
	struct student *head = NULL;

	while(1==1)
	{
		ch = getchar(ch);

		switch(ch)
		{
			case '1' :                                 //输入1创建链表
				creat(head);
			break;
			case '2' :                                 //输入2查找
				cout <<" 请输入查找的学号:"<<endl;     //输入学号查找
				scanf("%d",&num);
				search(ptemp,num);
				break;
			case '3' :                                 //输入3修改
				cout <<" 请输入修改的学号:"<<endl;     //输入修改的学号
				scanf("%d",&num);
				repeat(ptemp,num);
				break;
			case '4' :                                  //输入4插入
				cout <<" 请输入插入的学号,姓名 :"<<endl;//输入学号,姓名
				scanf("%d",&num);
				scanf("%s",name);
				strcpy(p->cName,name);
				Insert(ptemp,p,num);                     
				break;
			case '5' :                                   //输入5删除
				cout <<" 请输入删除的学号:"<<endl;       //输入删除的学号
				scanf("%d",&num);
				Delete(ptemp,num);
				break;
			case '6' :                                    //输出链表
				putlink(ptemp);
				break;	
			case '0' : exit(1);
			}
      
		}
	

	return 0;
}                                          //程序结束

⌨️ 快捷键说明

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