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

📄 main.cpp

📁 学生管理系统 能够实现基本的SQL语句查询 一个小系统
💻 CPP
字号:
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#include <string.h>
#include <math.h>
#include "student.h"

class RANGE//值域
{
public:
	RANGE()
	{num=0;}
	char str[10];//值域的字符串值
	int num;//若值为整数,保存该值的位数
	int thenum()//若值为整数,则返回值为将字符串转化为整数的值
	{
		int i,result=0;
		for(i=0;i<num;i++)
		result=result+(str[num-i-1]-'0')*(int(pow(10,i)));
		return result;
	}
};
	
main()
{
	/////////////////////////////////////////////////////////////////////////////////////////////////////
	///////////////////////////////将文件内容写入缓冲区并按成绩高低进行排序//////////////////////////////
	FILE* fp;
	int record_num=0;//记录的个数
	
	char r_order,enter;//接收键盘命令,和回车符
	/////////////////////////
	if((fp=fopen("data.txt","a+"))==NULL)
	{
		printf("cannot open file\n");
		exit(0);
	}
	else printf("打开文件成功\n");
	student stud[1000],studtemp;
	int i=0;
	int num,gra;
	char stuno[10],names[20],stusex[10],studept[10];
	while(!feof(fp))            //读入数据
	{
		fscanf(fp,"%d%s%s%s%s%d\n",&num,stuno,names,stusex,studept,&gra);
		{
			record_num++;
			stud[i].SetNo(num);
			stud[i].SetStuNo(stuno);
			stud[i].SetName(names);
			stud[i].SetSex(stusex);
			stud[i].SetDept(studept);
			stud[i].SetGrade(gra);
			i++;
		}
		
		
	}
	

	
		
		printf("文件载入成功!\n请选择操作:\n(A).全部显示 (S).输入查询语句 (I)插入记录 (X).退出\n");
		
	
	
		scanf("%c",&r_order);//获得键盘命令;
		enter=getchar();//接收回车符
	//////////////////////////////////////////处理输入的命令/////////////////////////////
	while(1)
	{
		
		
		if(r_order=='A'||r_order=='a')
		{
			for(i=0;i<record_num;i++)
				stud[i].print();
			printf("请选择操作:\n(A).全部显示 (S).输入查询语句 (I)插入记录 (X).退出\n");
			scanf("%c",&r_order);
			enter=getchar();//接收回车符
		}
		else 
			if(r_order=='X'||r_order=='x')
			{
				fclose(fp);
				exit(0);
			}
			else
				if(r_order=='S'||r_order=='s')
				{
					printf("请输入命令:\n");

	/////////////////////////////////////////////////////////////////////////////////////////////////
	///////////////////////将简单的查询语句存入缓冲区///////////////////////////////////////////
	char order[10][100];
	int ii=0,space=0;
	char c;
	scanf("%s",&order[ii]);
	ii++;
	c=getchar();
	while(c!='\n')
	{
		if(c==' ')
		{
			space++;
			scanf("%s",&order[ii]);
			ii++;
		}
		c=getchar();
	}
	////////////////////////处理查询语句将语句分解成字段域,条件域和值域////////////////////////////////////////////////////////
	char field[10],oper[10];//字段域,条件域
	int num_order=0,j=0;//用于记录命令的长度和field,oper和值域的下标
	
	RANGE range;
	
	///////分解字段域
	for(i=0;i<sizeof(order[1]);i++)
		if(order[1][i]=='>'||order[1][i]=='='||order[1][i]=='<')
			break;
		else
		{
			field[j]=order[1][i];
			j++;
			num_order++;
			
		}
	field[j]='\0';
	//////分解条件域
	j=0;
	for(i=num_order;i<sizeof(order[1]);i++)
		if(order[1][i]!='>'&&order[1][i]!='='&&order[1][i]!='<')
			break;
		else
		{
			oper[j]=order[1][i];
			j++;
			num_order++;
		}
	oper[j]='\0';
	//////分解得到值域
	j=0;
	for(i=num_order;i<sizeof(order[1]);i++)
		if(order[1][i]=='\0')
			break;
		else
		{
			range.str[j]=order[1][i];
			range.num++;
			j++;
			num_order++;
		}
	range.str[j]='\0';
	
////////////////////////////////////根据字段域和值域分别进行处理//////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	////////////////////////////////////////////////////值域为字符串/////////////////////////////////////
	if(strcmp("sex",field)==0)
	{
		for(i=0;i<record_num;i++)
			if(strcmp(stud[i].GetSex(),range.str)==0)
				stud[i].print();
	}

	else
		if(strcmp("stuno",field)==0)
		{
			for(i=0;i<record_num;i++)
				if(strcmp(stud[i].GetStuNo(),range.str)==0)
					stud[i].print();
		}
	
		else
			if(strcmp("dept",field)==0)
			{
				for(i=0;i<record_num;i++)
					if(strcmp(stud[i].GetDept(),range.str)==0)
						stud[i].print();
			}
		
			else
				if(strcmp("name",field)==0)
				{
					for(i=0;i<record_num;i++)
						if(strcmp(stud[i].GetName(),range.str)==0)
							stud[i].print();
				}
	//////////////////////////////////////////////值域为整数时//////////////////////////////
	            else
					if(strcmp("grade",field)==0)
					{
						
						if(strcmp(">",oper)==0)
						{
							for(i=0;i<record_num;i++)
								if(stud[i].GetGrade()>range.thenum())
									stud[i].print();
						}
						if(strcmp("<",oper)==0)
						{
							for(i=0;i<record_num;i++)
								if(stud[i].GetGrade()<range.thenum())
									stud[i].print();
						}
						if(strcmp(">=",oper)==0)
						{
							for(i=0;i<record_num;i++)
								if(stud[i].GetGrade()>=range.thenum())
									stud[i].print();
						}
						if(strcmp("<=",oper)==0)
						{
							for(i=0;i<record_num;i++)
								if(stud[i].GetGrade()<=range.thenum())
									stud[i].print();
						}
						if(strcmp("=",oper)==0)
						{
							for(i=0;i<record_num;i++)
								if(stud[i].GetGrade()==range.thenum())
									stud[i].print();
						}
					}
					else 
						if(strcmp("no",field)==0)
						{
							int k;
							if(strcmp(">",oper)==0)
							{
								for(i=0;i<record_num;i++)
									if(stud[i].GetNo()==range.thenum())
									{
										k=i;
										break;
									}
								for(i=k+1;i<record_num;i++)
									stud[i].print();
							}
							if(strcmp("<",oper)==0)
							{
								for(i=0;i<record_num;i++)
									if(stud[i].GetNo()==range.thenum())
									{
										k=i;
										break;
									}
								for(i=0;i<k-1;i++)
									stud[i].print();
							}
							if(strcmp(">=",oper)==0)
							{
								for(i=0;i<record_num;i++)
									if(stud[i].GetNo()==range.thenum())
									{
										k=i;
										break;
									}
								for(i=k;i<record_num;i++)
									stud[i].print();
							}
							if(strcmp("<=",oper)==0)
							{
								for(i=0;i<record_num;i++)
									if(stud[i].GetNo()==range.thenum())
									{
										k=i;
										break;
									}
								for(i=0;i<k;i++)
									stud[i].print();
							}
							if(strcmp("=",oper)==0)
							{
								for(i=0;i<record_num;i++)
									if(stud[i].GetNo()==range.thenum())
									{
										stud[i].print();
									}
								
							}
						}
			printf("请选择操作:\n(A).全部显示 (S).输入查询语句 (I)插入记录 (X).退出\n");
			
			scanf("%c",&r_order);
			enter=getchar();//接收回车符
			}
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////
					else 
						if(r_order=='i'||r_order=='I')
						{
							record_num++;
							stud[record_num-1].SetNo(record_num);
							printf("学号:\n");
							scanf("%s",stuno);
							stud[record_num-1].SetStuNo(stuno);
							printf("姓名:\n");
							scanf("%s",names);
							stud[record_num-1].SetName(names);
							printf("性别:\n");
							scanf("%s",stusex);
							stud[record_num-1].SetSex(stusex);
							printf("班级:\n");
							scanf("%s",studept);
							stud[record_num-1].SetDept(studept);
							printf("成绩:\n");
							scanf("%d",&gra);
							stud[record_num-1].SetGrade(gra);
							printf("请选择操作:\n(A).全部显示 (S).输入查询语句 (I).插入记录 (X)退出\n");
							fprintf(fp,"\n%d %s %s %s %s %d",stud[record_num-1].GetNo(),stud[record_num-1].GetStuNo(),
														   stud[record_num-1].GetName(),stud[record_num-1].GetSex(),
														   stud[record_num-1].GetDept(),stud[record_num-1].GetGrade());
							enter=getchar();
							scanf("%c",&r_order);
							enter=getchar();//接收回车符
						}
						else 

							{
								printf("输入命令有误,请重新选择:\n(A).全部显示 (S).输入查询语句 (I).插入记录 (X)退出\n");
								scanf("%c",&r_order);
								enter=getchar();//接收回车符
							}
	}
					

	fclose(fp);
	return(0);
}

⌨️ 快捷键说明

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