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

📄 sqlist(hard).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 *fScore;
   float fTotal;
};

typedef struct student ElemType;

struct sqlist{
	ElemType *elem;
	int length;
};

struct course
{
	char **name;
	int cnum;
};     //待用

typedef struct course Course;
Course course;

struct statistic{
    int iA;
    int iB;
    int iC;
    int iD;
    int iE;
};

typedef struct statistic Level;

typedef int status;

status Init(sqlist &sl)
{
	sl.elem = NULL;
	sl.elem = new ElemType[MAXSIZE+1];
	sl.length = 0;

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

void Destroy(sqlist &sl)
{
	if(sl.elem)
		delete []sl.elem;
	sl.elem = NULL;

}

status Creat(sqlist &sl)
{

	if(!sl.elem) return 0;

	printf("输入表的长度:");
	scanf("%d",&sl.length);
	
	if(sl.length > MAXSIZE)
	{
		printf("表需要空间太大,发生溢出!");
		return 0;
	}

	for(int i=1;i<sl.length+1; i++)
	{
		sl.elem[i].fScore = new float[course.cnum];

        printf("输入学号,名字和各课程成绩(输入提示:数据之间加空格):\n");
		printf("课程包括:");

		for(int j=1;j<=course.cnum;j++)
		  printf("%s ",course.name[i]);
		printf("\n");
		
		scanf("%s%s",sl.elem[i].sNo,sl.elem[i].sName);
		for(j=1;j<=course.cnum;j++)
		  scanf("%f",&sl.elem[i].fScore[j]);
        sl.elem[i].fTotal = 0;
	}

	return 1;
}

status OutPut(sqlist sl)
{
	if(!sl.length)
	{
		printf("表为空!");
		return 0;
	}

	printf("表包含%d个记录:\n",sl.length);
	printf("\n学号\t姓名");
	for(int i=1;i<=course.cnum;i++)
		printf("\t%s",course.name[i]);
	printf("\n");

	for(i=1;i<sl.length+1;i++)
	{
		printf("%s\t%s\t",sl.elem[i].sNo,sl.elem[i].sName);
		for(int j=1;j<=course.cnum;j++)
		  printf("%.2f\t",sl.elem[i].fScore[i]);
		printf("\n");
	}
	return 1;
}

status Insert(sqlist &sl,int iPos,ElemType elem)
{
	if(sl.length == MAXSIZE) 
	{
		printf("表满,不能插入");
		return 0;
	}
    
	if(iPos >sl.length+1)
	{
		printf("插入位置不正确!");
		return 0;
	}

	if(iPos == sl.length+1 )
	{
		sl.elem[sl.length+1] = elem;
		sl.length++;
		return 1;
	}
	
	for(int i=sl.length;i>=iPos;i--)
	{
		sl.elem[i+1] = sl.elem[i];
	}

	sl.elem[iPos] = elem;
	sl.length++;
	return 1;
}

status Delete(sqlist &sl,int iPos,ElemType &elem)
{
	if(!sl.length) 
	{
		printf("表空,不能删除");
		return 0;
	}
	
	if(iPos > sl.length)
	{
		printf("删除位置不正确!");
		return 0;
	}
	if(iPos == sl.length)
	{
		elem = sl.elem[sl.length];
		sl.length--;
		return 1;
	}

	elem = sl.elem[iPos];

	for(int i=iPos+1;i<=sl.length;i++)
	{
		sl.elem[i-1] = sl.elem[i];
	}

	sl.length--;
	return 1;
}

status Find(sqlist sl,char *no)
{
	for(int i=1;i<=sl.length;i++)
		if(strcmp(sl.elem[i].sNo,no)==0)
		{
			printf("找到的学生成绩信息\n%s\t%s\t",sl.elem[i].sNo,sl.elem[i].sName);
			for(int j=1;j<=course.cnum;j++)
				printf("%.2f",sl.elem[i].fScore[i]);
			printf("\n");
		return 1;
		}
	if(i>sl.length)
	{
		printf("没有该记录!");
		return 0;
	}
}

void GetLevel(sqlist sl,int flag,Level &lev)
{
	int i;

	for(i=1;i<=sl.length;i++)
		{
		if(sl.elem[i].fScore[flag] >=90)
			lev.iA++;
		else if(sl.elem[i].fScore[flag]>=80)
			lev.iA++;
		else if(sl.elem[i].fScore[flag]>=70)
			lev.iC++;
		else if(sl.elem[i].fScore[flag]>=60)
			lev.iD++;
		else
			lev.iE++;
		}
}

void SetTotalScore(sqlist &sl)
{
	for(int i=1;i<=sl.length; i++)
		for(int j=1;j<=course.cnum;j++)
		sl.elem[i].fTotal += sl.elem[i].fScore[j];

}

main()
{
	char ch;
	int flag,i,j;
	sqlist sl;
	int iPos;
	ElemType elem;
	char *name = new char[10];
	Level lev;


	printf("/******学生成绩管理系统*****/\n");
	printf("\n/******本系统基本操作如下:\n/******0:退出\n/******1:初始化\n");
	printf("/******2:课程门数和课程名称\n");
	printf("/******3:创建新表\n/******4:输出\n");
	printf("/******5:增加新学生\n/******6:删除学生\n/****7:按学号查询\n/****8:总分\n");

	printf("请输入操作提示:(0~7)");

	while(1)
	{
		ch = getchar();
		switch(ch)
		{
		case '0':
			Destroy(sl);
			delete []name;
	        exit(1);
			break;
		case '1':
			flag = Init(sl);
			if(flag) printf("初始化成功!");
			else printf("初始化失败!");
			break;
		case '2':
			printf("\n输入课程数和课程名称:\n");
			scanf("%d",&course.cnum);
			course.name = new char*[course.cnum+1];
			for(i=1;i<=course.cnum;i++)
			{
				scanf("%s",course.name[i]);
			}
		case '3':
			flag = Creat(sl);
			if(flag) printf("创建成功!");
			else printf("创建失败!");
			break;
		case '4':
			OutPut(sl);
			break;
		case '5':
			printf("输入插入位置:");
			scanf("%d",&iPos);
			printf("输入插入元素:学号 姓名 各门课成绩");
		    scanf("%s%s",sl.elem[i].sNo,sl.elem[i].sName);
		    for(j=1;j<=course.cnum;j++)
		       scanf("%f",&sl.elem[i].fScore[j]);
            sl.elem[i].fTotal = 0;
			flag = Insert(sl,iPos,elem);
			if(flag) printf("插入成功!");
			else printf("插入失败!");
			break;
		case '6':
			printf("输入删除位置:");
			scanf("%d",&iPos);
			flag = Delete(sl,iPos,elem);
			if(flag) printf("删除成功!");
			else printf("删除失败!");
			break;
		case '7':
			printf("输入学号:");
			scanf("%s",name);
			flag = Find(sl,name);

			break;
		case '8':
			
			printf("确定要计算总成绩?");
			scanf("%d",&flag);
			if(flag)
				SetTotalScore(sl);
            break;
    	case '9':
			printf("输入统计的课程:");
            scanf("%s",i);
            GetLevel(sl,i,lev);
			printf("\n>90\t80~90\t70~80\t60~70\t<60\t\n");
			printf("\n%d\t%d\t%d\t%d\t%d\n",lev.iA,lev.iB,lev.iC,lev.iD,lev.iE);
			break;
			
		case 'a':
		    

		default:
			continue;
		}

	    printf("请输入操作提示:(0~7)");
		
	}


}


⌨️ 快捷键说明

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