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

📄 select.cpp

📁 实现:SELECT [ALL|DISTINCT] <属性表达式>[
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define STUDENTSIZE 9
#define COURSESIZE  4
#define GRADESIZE 36
struct student{
	char sname[10];		//学生姓名
	char sex[7];
	int sage;		//年龄
	char sdept[15];		//班级
	int sno;		//学号
}stud[STUDENTSIZE];

struct course{
	char cname[20];		//课程名称
	int cno;			//课程号
	int ccredit;		//学分
	char tname[10];		//教师姓名
}cour[COURSESIZE];

struct grade{
	int sno;		//学号
	int cno;			//课程号
	float score;		//分数
}gra[GRADESIZE];

/****************************************************************/
void readStudent()
{
	int i;
	FILE *fp;
	fp=fopen("student","rb");
	for(i=0;i<STUDENTSIZE;i++)
	{
		fread(&stud[i],sizeof(struct student),1,fp);
		//printf("%-10s %-7s %4d %-15s% 4d\n",stud[i].sname,stud[i].sex,stud[i].sage,stud[i].sdept,stud[i].sno);
	}
	fclose(fp);
}

void readGrade()
{
	int i;
	FILE *fp;
	fp=fopen("Grade","rb");
	for(i=0;i<GRADESIZE;i++)
	{
		fread(&gra[i],sizeof(struct grade),1,fp);
		//printf("%4d %4d %-4f\n",gra[i].sno,gra[i].cno,gra[i].score);
	}
	fclose(fp);
}

void readCourse()
{
	int i;
	FILE *fp;
	fp=fopen("course","rb");
	for(i=0;i<COURSESIZE;i++)
	{
		fread(&cour[i],sizeof(struct course),1,fp);
		//printf("%-20s %4d %4d %-10s\n",cour[i].cname,cour[i].cno,cour[i].ccredit,cour[i].tname);
	}
	fclose(fp);
}

void searchtable()
{
	printf("数据库中的表有:\n");
	printf("\n");
	printf("学生信息表   课程表   成绩表\n");
	printf("\n");
	printf("student      course    grade\n");
	printf("\n");
}

void searchAttr()
{
	char table[10];
	printf("请输入你要查询的表:");
	scanf("%s",table);
	printf("\n");
	//printf("%s\n",table);
	if(!strcmp(table,"student"))
	{
		printf("学生姓名   性别    年龄   班级    学号\n");
		printf("\n");
		printf("sno        sex     sage   sdept   sno\n");
	}
	else if(!strcmp(table,"course"))
	{
		printf("课程名称	课程号   学分   教师姓名\n");
		printf("\n");
		printf(" cname       cno     ccredit   tname\n");
	}
	else if(!strcmp(table,"grade"))
	{
		printf("学号   课程号    分数\n");
		printf("\n");
		printf(" sno   cno       score\n");
	}
}

void outStudent1(int size,char input[6][15])
{
	//printf("姓名      性别      年龄  系别	   学号\n");
	int i;
	for(i=0;i<size;i++){
		if(!strcmp(input[i],"sname")){
			printf("姓名      ");
		}
		else if(!strcmp(input[i],"sex")){
			printf("性别      ");
		}
		else if(!strcmp(input[i],"sage")){
			printf("年龄  ");
		}
		else if(!strcmp(input[i],"sdept")){
			printf("系别     ");
		}
		else if(!strcmp(input[i],"sno")){
			printf("学号");
		}
	}
	printf("\n");
}
void outStudent2(int t,int size,char input[6][15])
{
		//printf("%-10s %-7s %4d %-15s% 4d\n",stud[i].sname,stud[i].sex,stud[i].sage,stud[i].sdept,stud[i].sno);
	int i=0;
	for(i=0;i<size;i++){
		if(!strcmp(input[i],"sname")){
			printf("%-10s ",stud[t].sname);
		}
		else if(!strcmp(input[i],"sex")){
			printf("%-7s ",stud[t].sex);
		}
		else if(!strcmp(input[i],"sage")){
			printf("%4d ",stud[t].sage);
		}
		else if(!strcmp(input[i],"sdept")){
			printf("%-15s ",stud[t].sdept);
		}
		else if(!strcmp(input[i],"sno")){
			printf("%4d ",stud[t].sno);
		}
	}
	printf("\n");
}

void selects()
{
	int i;
	char inputSelect[6][15];
	char inputFrom[2][10];
	char inputWhere[10][15];
	//char inputOrder[2][10];
	int wherelen,selectlen;
/*************************************************/

/*************读入select语句**********************/

/*************************************************/
	printf("select ");
	for(i=0;strcmp(inputSelect[i-1],";");i++)
	{
		scanf("%s",inputSelect[i]);
		//printf("%s ",inputSelect[i]);
	}
	selectlen=i-2;
	printf("  from ");
	for(i=0;strcmp(inputFrom[i-1],";");i++)
	{
		scanf("%s",inputFrom[i]);
		//printf("%s ",inputFrom[i]);
	}
	printf(" where ");
	for(i=0;strcmp(inputWhere[i-1],";");i++)
	{
		scanf("%s",inputWhere[i]);
		//printf("%s ",inputWhere[i]);
	}
	printf("\n");
	wherelen=i-2;
	/*printf(" group by ");
	for(i=0;strcmp(inputOrder[i-1],"end");i++)
	{
		scanf("%s",inputOrder[i]);
		//printf("%s ",inputOrder[i]);
	}*/
/*******************************************************/

/****************处理student表**************************/

/*******************************************************/
	if(!strcmp(inputFrom[0],"student"))
	{
		readStudent();//selectlen inputSelect[]
/*.....................................................*/
/*                查询条件为"="时                     */		
/*.....................................................*/
		if(!strcmp(inputWhere[1],"="))
		{
			if(!strcmp(inputWhere[0],"sname"))
			{
				int flag=0;
				outStudent1(selectlen,inputSelect);
				for(i=0;i<STUDENTSIZE;i++){
					if(!strcmp(inputWhere[2],stud[i].sname)){
						printf("\n");
						outStudent2(i,selectlen,inputSelect);
						flag=1;
						break;
					}
				}
				if(flag==0)
					printf("没有姓名为%s的学生\n",inputWhere[2]);
			}
			else if(!strcmp(inputWhere[0],"sdept"))
			{
				int flag=0;
				outStudent1(selectlen,inputSelect);
				for(i=0;i<STUDENTSIZE;i++){
					if(!strcmp(inputWhere[2],stud[i].sdept)){
						printf("\n");
						outStudent2(i,selectlen,inputSelect);
						//printf("%-10s %-7s %4d %-15s% 4d\n",stud[i].sname,stud[i].sex,stud[i].sage,stud[i].sdept,stud[i].sno);
						flag=1;
					}
				}
				if(flag==0)
					printf("没有%s系的学生\n",inputWhere[2]);
			}
			else if(!strcmp(inputWhere[0],"sex"))
			{
				int flag=0;
				outStudent1(selectlen,inputSelect);
				for(i=0;i<STUDENTSIZE;i++){
					if(!strcmp(inputWhere[2],stud[i].sex)){
						printf("\n");
						outStudent2(i,selectlen,inputSelect);
						//printf("%-10s %-7s %4d %-15s% 4d\n",stud[i].sname,stud[i].sex,stud[i].sage,stud[i].sdept,stud[i].sno);
						flag=1;
					}
				}
				if(flag==0){
					printf("\n");
					printf("没有性别为%s的学生\n",inputWhere[2]);
				}
			}
			else if(!strcmp(inputWhere[0],"sno"))
			{
				int flag=0;
				int intSno=atoi(inputWhere[2]);
				outStudent1(selectlen,inputSelect);
				for(i=0;i<STUDENTSIZE;i++){
					if(intSno==stud[i].sno){
						printf("\n");
						outStudent2(i,selectlen,inputSelect);
						//printf("%-10s %-7s %4d %-15s% 4d\n",stud[i].sname,stud[i].sex,stud[i].sage,stud[i].sdept,stud[i].sno);
						flag=1;
						break;
					}
				}
				if(flag==0)
					printf("没有学号为%s的学生\n",inputWhere[2]);
			}
			else if(!strcmp(inputWhere[0],"sage"))
			{
				int flag=0;
				int intSage=atoi(inputWhere[2]);
				outStudent1(selectlen,inputSelect);
				for(i=0;i<STUDENTSIZE;i++){
					if(intSage==stud[i].sage){
						printf("\n");
						outStudent2(i,selectlen,inputSelect);
						flag=1;
					}
				}
				if(flag==0)
					printf("没有年龄为%s的学生\n",inputWhere[2]);
			}
			else printf("查询条件字段输入错误.\n");
		}
/*.....................................................*/
/*               查询条件为"<"时                     */		
/*.....................................................*/
		else if(!strcmp(inputWhere[1],"<"))
		{
			if(!strcmp(inputWhere[0],"sno"))
			{
				int flag=0;
				int intSno=atoi(inputWhere[2]);
				outStudent1(selectlen,inputSelect);
				for(i=0;i<STUDENTSIZE;i++){
					if(intSno>stud[i].sno){
						printf("\n");
						outStudent2(i,selectlen,inputSelect);
						flag=1;
					}
				}
				if(flag==0)
					printf("没有学号小%s的学生\n",inputWhere[2]);
			}
			else if(!strcmp(inputWhere[0],"sage"))
			{
				int flag=0;
				int intSage=atoi(inputWhere[2]);
				outStudent1(selectlen,inputSelect);
				for(i=0;i<STUDENTSIZE;i++){
					if(intSage>stud[i].sage){
						printf("\n");
						outStudent2(i,selectlen,inputSelect);
						flag=1;
					}
				}
				if(flag==0)
					printf("没有年龄小于%s的学生\n",inputWhere[2]);
			}
			else printf("查询条件字段输入错误.\n");
		}
/*.....................................................*/
/*                查询条件为">"时                     */		
/*.....................................................*/
		else if(!strcmp(inputWhere[1],">"))
		{
			if(!strcmp(inputWhere[0],"sno"))
			{
				int flag=0;
				int intSno=atoi(inputWhere[2]);
				outStudent1(selectlen,inputSelect);
				for(i=0;i<STUDENTSIZE;i++){
					if(intSno<stud[i].sno){
						printf("\n");
						outStudent2(i,selectlen,inputSelect);
						flag=1;
					}
				}
				if(flag==0)
					printf("没有学号大于%s的学生\n",inputWhere[2]);
			}
			else if(!strcmp(inputWhere[0],"sage"))
			{
				int flag=0;
				int intSage=atoi(inputWhere[2]);
				outStudent1(selectlen,inputSelect);
				for(i=0;i<STUDENTSIZE;i++){
					if(intSage<stud[i].sage){
						printf("\n");
						outStudent2(i,selectlen,inputSelect);
						flag=1;
					}
				}
				if(flag==0)
					printf("没有年龄大于%s的学生\n",inputWhere[2]);
			}
			else printf("查询条件字段输入错误.\n");
		}
/*.....................................................*/
/*                查询条件为">="时                     */		
/*.....................................................*/
		else if(!strcmp(inputWhere[1],">="))
		{
			if(!strcmp(inputWhere[0],"sno"))
			{
				int flag=0;
				int intSno=atoi(inputWhere[2]);
				outStudent1(selectlen,inputSelect);
				for(i=0;i<STUDENTSIZE;i++){
					if(intSno<=stud[i].sno){
						printf("\n");
						outStudent2(i,selectlen,inputSelect);
						flag=1;
					}
				}
				if(flag==0)

⌨️ 快捷键说明

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