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

📄 stulinklist.cpp

📁 数据结构源程序
💻 CPP
字号:
// sqlist.cpp : 定义控制台应用程序的入口点。
//

//#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include "process.h"

#define MAXSIZE 100

struct student{
   char sNo[10];
   char sName[10];
   float fScore1;
   float fScore2;
   float fScore3;
   float fTotal;
};
struct statistic{
    int iA;
    int iB;
    int iC;
    int iD;
    int iE;
};

typedef struct student ElemType;
typedef struct statistic Level;
typedef int status;

struct LNode{
	ElemType elem;
	LNode *pnext;
};

typedef struct LNode LNode,*LinkList;

status Init(LinkList &sl)
{
	sl = new LNode;
	sl->pnext = NULL;

	if(!sl) return 0;
	else return 1;
}

void Destroy(LinkList &sl)
{
    LNode *pa = sl->pnext,*pb;
    while(pa)
    {
         pb = pa->pnext;
         delete pa;
         pa = pb;    
    }
}
status Creat(LinkList &sl)
{

	int length; //表的长度
	ElemType elem;
    LNode *pnew;

	if(!sl) return 0;
	
	printf("\n\n输入表的长度:");
	scanf("%d",&length);

	for(int i=1;i<= length; i++)
	{
       printf("输入学号 名字 成绩1 成绩2 成绩3\n");
		scanf("%s%s%f%f%f",elem.sNo,elem.sName,&elem.fScore1,
			&elem.fScore2,&elem.fScore3);
		
		pnew = new LNode;   //生成新结点
        pnew->elem = elem;
		pnew->pnext = NULL;

		pnew->pnext = sl->pnext; //插入结点
		sl->pnext = pnew;
	}

	return 1;
}

status OutPut(LinkList sl)
{
	LNode* pnew;

	if(!sl->pnext)
	{
		printf("\n\n表为空!");
		return 0;
	}

//	printf("表如下(包含%d个记录):",Getlength(sl));
	printf("\n学号\t姓名\t成绩1\t成绩2\t成绩3\n ");
	for(pnew = sl->pnext; pnew; pnew = pnew->pnext)
	{
		printf("\n%s\t%s\t%.1f\t%.1f\t%.1f\n",pnew->elem.sNo,pnew->elem.sName,
			pnew->elem.fScore1,pnew->elem.fScore2,pnew->elem.fScore3);
		
	}
	return 1;
}

status Insert(LinkList sl,int iPos,ElemType elem)
{
    
	LNode* pnode = sl;
	LNode* pnew;

	for(int i=0;i<iPos-1 && pnode;i++)
	{
		pnode = pnode->pnext;
	}

	if(!pnode || i>iPos-1)
	{
		printf("插入位置不正确!");
		return 0;
	}

	pnew = new LNode;
	pnew->elem = elem;
	pnew->pnext = NULL;

	pnew->pnext = pnode->pnext;
	pnode->pnext=pnew;
	

	return 1;
}

int GetLength(LinkList sl)
{
	LNode* pnode;
    int length=0;

	for(pnode = sl->pnext; pnode; pnode=pnode->pnext)
		length++;

	return length;
}

status Delete(LinkList sl,int iPos,ElemType &elem)
{
    int length;
    LNode* pnode;
	int i;
	
	if(!sl->pnext) 
	{
		printf("\n\n表空,不能删除");
		return 0;
	}
	
	length = GetLength(sl);
	
	if(iPos > length || iPos < 1)
	{
		printf("\n\n删除位置不正确!");
		return 0;
	}
	
	for(i=0,pnode=sl; i<iPos-1 && pnode; i++,pnode=pnode->pnext);

	if(pnode && pnode->pnext)
	{
		LNode* ptemp = pnode->pnext;
		
		pnode->pnext = ptemp->pnext;
		delete ptemp;
		return 1;
	}

}

status FindStuNo(LinkList sl,char *sno)
{
	LNode* pnode=sl->pnext;

	for(;pnode;pnode = pnode->pnext)
		if(strcmp(pnode->elem.sNo,sno)==0)
		{
			printf("\n\n找到的学生信息\n%s\t%s\t%.1f\t%.1f\t%.1f\n",pnode->elem.sNo,
				pnode->elem.sName,pnode->elem.fScore1,pnode->elem.fScore2,
				pnode->elem.fScore3);
		return 1;
		}

	if(!pnode)
	{
		printf("\n\n没有该记录!");
		return 0;
	}
}

status FindStuName(LinkList sl,char *sname)
{
	int flag=0;
	LNode* pnode;

	for(pnode=sl->pnext; pnode; pnode=pnode->pnext)
	{
		if(strcmp(pnode->elem.sName,sname)==0)
		{
			if(flag == 0)
			{
			    printf("\n\n找到的学生信息\n%s\t%s\t%.1f\t%.1f\t%.1f\n",pnode->elem.sNo,
				     pnode->elem.sName,pnode->elem.fScore1,pnode->elem.fScore2,
				       pnode->elem.fScore3);
				flag=1;
			}
			else 
				printf("\n%s\t%s\t%.1f\t%.1f\t%.1f\n",pnode->elem.sNo,
			    	pnode->elem.sName,pnode->elem.fScore1,pnode->elem.fScore2,
				    pnode->elem.fScore3);
		}
		
	}


	if(pnode)
	{
		printf("\n\n没有该记录!");
		return 0;
	}
	else return 1;
}

main()
{
	char ch;
	int flag;
	LinkList sl = NULL;
	int iPos;
	ElemType elem;

	char *sname = new char[10];
	char *sno = new char[10];

	printf("/******学生成绩管理系统*****/\n");
	printf("\n\t本系统基本操作如下\n\n\t0:退出\n\t1:初始化\n\t2:创建\n\t3:输出\n");
	printf("\t4:插入\n\t5:删除\n\t6:按学号查找\n\t7:按姓名输出\n");

	printf("\n请输入操作提示:(0~6)\n");

	while(1)
	{
		ch = getchar();
		switch(ch)
		{
		case '0':break;
		case '1':
			flag = Init(sl);
			if(flag) printf("初始化成功!");
			else printf("初始化失败!");
			break;
		case '2':
			flag = Creat(sl);
			if(flag) printf("创建成功!");
			else printf("创建失败!");
			break;
		case '3':
			OutPut(sl);
			break;
		case '4':
			printf("\n输入插入位置:\n");
			scanf("%d",&iPos);
			printf("\n输入插入元素:学号 姓名 成绩1 成绩2 成绩3\n");
			scanf("%s%s%f%f%f",elem.sNo,elem.sName,&elem.fScore1,&elem.fScore2,&elem.fScore3);
			flag = Insert(sl,iPos,elem);
			if(flag) printf("\n插入成功!\n");
			else printf("\n插入失败!\n");
			break;
		case '5':
			printf("\n输入删除位置:\n");
			scanf("%d",&iPos);
			flag = Delete(sl,iPos,elem);
			if(flag) printf("\n删除成功!\n");
			else printf("\n删除失败!\n");
			break;
		case '6':
			printf("\n输入学号:\n");
			scanf("%s",sno);
			flag = FindStuName(sl,sno);

			break;
		case '7':
			printf("\n输入学生姓名:\n");
			scanf("%s",sname);
			flag = FindStuName(sl,sname);

			break;
		default:
			continue;
		}

	    printf("\n请输入操作提示:(0~7)\n");
		
		if(ch == '0')
		{
                 Destroy(sl);
	        exit(1);
		}
	}

}


⌨️ 快捷键说明

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