精华内容
下载资源
问答
  • java学生成绩管理系统界面设计
  • 该文件是数据库课程设计学生成绩管理系统登录界面及学生教师界面的切换,
  • 学生成绩管理系统 用户界面 查询,插入,删除等功能 学生成绩管理系统 用户界面 查询,插入,删除等功能 学生成绩管理系统 用户界面 查询,插入,删除等功能 学生成绩管理系统 用户界面 查询,插入,删除等功能
  • C语言实现学生成绩管理系统(EasyX图形界面)

    多人点赞 热门讨论 2021-07-18 19:18:14
    学生成绩管理系统学生成绩管理系统效果图流程&注意要点代码实现 学生成绩管理系统 效果图 流程&注意要点 核心部分——EasyX显示图形界面,结构体数组和文件操作负责对数据进行各种操作。 只要一进去程序就...

    我的小站——半生瓜のblog

    代码文件下载链接——链接


    在这里插入图片描述

    学生成绩管理系统

    效果图

    在这里插入图片描述

    结构图

    在这里插入图片描述

    流程图

    在这里插入图片描述

    流程&注意要点

    • 核心部分——EasyX显示图形界面,结构体数组和文件操作负责对数据进行各种操作。
    • 只要一进去程序就对存储数据的文件进行读取,如果有数据直接读到学生结构体数组里面,得到当前结构体数组中的数据数量(几个人),并将所有数据打印到屏幕上。
    • 管理员用户
      • 输入密码验证——读取文件——验证用户输入是否正确。
      • 显示所有数据——如果通过文件读到了数据会被打印到屏幕上,反之。如果没有读到数据,在添加数据之前都会在屏幕上显示"当前记录为空!"。
        • 各种方式的排序——对当前结构体数组中成员的数据,依照"按xx排序",重新排序,均采用冒泡排序。其中值得注意的是,貌似EasyX的InputBox只能将你输入的内容保存到字符数组中,所以你需要将录入的成绩数据通过atof函数转化为浮点型,这里我采用的方法是: 先按照结构体数组中数据的存储顺序将每个人的某科成绩转化浮点型存储到一个成绩结构体数组中(在写这句话的时候想到,感觉也可以直接将各科的成绩存储到一个结构体数组中,然后在进行比较,可以缩减一下代码量),然后利用冒泡循环对这个存成绩的结构体数组进行重新排序,要注意的是这个存成绩的结构体数组中元素交换位置的同时存学生各种数据结构体数组中的元素也要交换位置,这两个的数据的存储顺序是一样的,就是说一个结构体数组辅助另一个结构体数组进行排序,两个结构体需要同时发生变化。
      • 增删查改界面
        • 增——添加数据,以学号区分不同的人,姓名可以相同,但是学号每个是单独的一个,如果输入的学号已经存在,则弹窗提示,进行重新输入,直到输入通过限制条件,通过对输入的学号进行遍历,看看它是不是由纯数字组成,如果不是则弹窗提示输入格式错误,进行重新输入,直到格式正确为止。其中学生姓名不做输入格式限制,成绩同学号。完成全部输入之后进行数据保存,当前结构体人数++。如果添加的时候学号和姓名都是空的则判断为无效输入,操作无效。
        • 查——查找数据,(删除数据和修改数据都要依靠查找数据来进行操作,只有先找到结构体里面确实这个人,能对他的数据进行操作),通过输入学号或者姓名来查找一个人,在结构体数组中进行遍历来查找,找到则返回该同学在结构体数组对应的下标,然后将该同学的数据输入到屏幕上。反之,弹窗提示"查无此人"。
        • 删——删除数据进行查找,找到了就弹窗提示是否确认删除,确认删除就利用循环,从要删除的这个人在结构体数组中的下标开始,依次后面的一个数据覆盖到前面,完成后,结构体数组成员数量–。弹窗提示删除成功。
        • 改——修改数据,同样进行查找,找到了,InputBox提示输入新的数据,注意:与上面录入数据不同的是,这里新输入的学号需要先保存到临时创建的一个字符数组中,不能直接就存到要修改学生在结构体数组中对应的数据位置,因为如果是这样的话,下面在进行判断学号是否已经存在的时候就肯定是存在的了,需要在判断是否重复后,如果数据不重复,再把新输入的学号赋给要修改的变量,还需要注意的是:如果用户输入的新学号和原来的一样是可以的,所以这里需要多加一个判断,否则也会因为检查到数据重复而不能进行下一步。
    • 普通用户
      • 显示全部数据及各种排序还有查找同上。
      • 需要注意的是:管理员用户和普通用户公用界面,例如:显示全部数据和查找的输入界面,点击返回键后的跳转需要加以判。宏定义一个全局整型变量,从哪点进来的就在这句之前给它赋一个新值,条件判断语句加以判断。
    • 缺陷
      • 数据显示无法分页,只能在有限的一个界面中最多显示17条数据。
      • 代码量还可以再优化。

    代码实现

    #include<stdio.h>
    #include<stdlib.h>
    #include<graphics.h>
    #include<string.h>
    #include<ctype.h>//检测字符
    
    
    #define RecordNums 15//结构体数组数量
    
    int NowStudentNums = 0;//当前记录人数
    
    
    //不使用数据结构
    //用结构体数组和文件操作来实现
    
    //学生结构体定义
    typedef struct Student
    {
    	char s_Num[64];//学号
    	char s_Name[64];//姓名
    	char s_Chinese[64];//语
    	char s_Math[64];//数
    	char s_English[64];//英
    	double s_SumScore;//总分
    }Student;
    
    
    //创建学生结构体数组
    Student StuArry[RecordNums];
    
    //创建成绩结构体
    typedef struct Score
    {
    	double SuScore;//subject score
    }Score;
    
    //创建成绩结构体——大小同学生结构体数组
    Score SoArry[RecordNums];
    
    //创建管理员结构体
    typedef struct Admin
    {
    	char UserName[64];
    	char PassWord[64];
    }Admin;
    
    //创建一个管理员用户
    Admin AdminUser;
    
    //显示全部数据的页面跳转标识
    int FlagAI = -1;
    //查询找到页面跳转标识
    int FlagFPT = -1;
    /*
    			MainSteps
    	1.先搭处图形窗口的大致形态
    	2.逐步实现里面的内容
    */
    
    /*
    	图形界面实现
    */
    
    //前置声明——查看请跳转到下面查看具体说明
    void AdminPage();
    void AdminSignIn();
    void CommonUserPage();
    void SaveInfor();
    void ReadInfor();
    void ShowAllInfor();
    void InputInfor();
    void S1mplePrint();
    void AdDeSeMoPage();
    void DeleteStuInfor();
    int ReturnPosi();
    void ModifyStudInfor();
    void PrintFoudInfor();
    void DeSomeStu();
    void SortAcChinese();
    void SortAcMath();
    void SortAcEnglish();
    void SortAcSumScore();
    bool ScoreFormat(char PerSuSc[]);
    //首页
    void FirstPage()
    {
    	//只要进入程序就读取数据——获取当前NowStudentNums
    	ReadInfor();
    
    	//窗口大小
    	initgraph(760, 760);
    	//鼠标操作1
    	MOUSEMSG m1;
    
    
    	cleardevice();
    	IMAGE picture1;
    	loadimage(&picture1, "./firstbc.jpg", 760, 760);
    	putimage(0, 0, &picture1);
    	setbkmode(TRANSPARENT);
    
    
    	
    
    	setfillcolor(GREEN);
    
    
    	//大标题
    	char FirstTitle[20] = { "学生成绩管理系统" };
    	settextstyle(60, 0, "黑体");
    	outtextxy(150, 100, FirstTitle);
    
    	//三个选项的背景
    	fillrectangle(230, 445, 560, 490);
    	fillrectangle(230, 505, 560, 550);
    	fillrectangle(230, 565, 560, 610);
    
    	setbkmode(TRANSPARENT);
    
    	//三个选项的文字
    	settextstyle(40, 0, "黑体");
    
    	//三个选项
    	char FirstSelect1[20] = { "管理员操作界面" };
    	char FirstSelect2[20] = { "普通用户操作界面" };
    	char FirstSelect3[20] = { "退出程序" };
    	outtextxy(240, 450, FirstSelect1);
    	outtextxy(240, 510, FirstSelect2);
    	outtextxy(240, 570, FirstSelect3);
    
    	//进入主界面选项操作界面
    	while (1)
    	{
    		m1 = GetMouseMsg();//获取鼠标操作
    		if (m1.x >= 230 && m1.x <= 560 && m1.y >= 445 && m1.y <= 490)//管理员界面
    		{
    			setlinecolor(RED);
    			rectangle(230, 445, 560, 490);
    			if (m1.uMsg == WM_LBUTTONDOWN)
    			{
    				//加入管理员登录
    				AdminSignIn();
    			}
    		}
    		else if (m1.x >= 230 && m1.x <= 560 && m1.y >= 505 && m1.y <= 550)//普通用户界面
    		{
    			setlinecolor(RED);
    			rectangle(230, 505, 560, 550);
    			if (m1.uMsg == WM_LBUTTONDOWN)
    			{
    				cleardevice();
    				CommonUserPage();
    			}
    		}
    		else if (m1.x >= 230 && m1.x <= 560 && m1.y >= 565 && m1.y <= 610)//退出
    		{
    			setlinecolor(RED);
    			rectangle(230, 565, 560, 610);
    			if (m1.uMsg == WM_LBUTTONDOWN)
    			{
    				exit(0);
    			}
    		}
    		//鼠标不在上面悬停
    		else
    		{
    			setlinecolor(WHITE);
    			rectangle(230, 445, 560, 490);
    			rectangle(230, 505, 560, 550);
    			rectangle(230, 565, 560, 610);
    		}
    	}
    
    }
    
    //管理员界面
    void AdminPage()
    {
    	initgraph(760, 760);
    	//先清除一下
    	cleardevice();
    	//定义第二个鼠标操作
    	MOUSEMSG m2;
    
    
    
    	cleardevice();
    	IMAGE picture1;
    	loadimage(&picture1, "./firstbc.jpg", 760, 760);
    	putimage(0, 0, &picture1);
    	setfillcolor(GREEN);
    	setbkmode(TRANSPARENT);
    
    	char SecondTitle1[5] = { "管" };
    	char SecondTitle2[5] = { "理" };
    	char SecondTitle3[5] = { "员" };
    	char SecondTitle4[5] = { "操" };
    	char SecondTitle5[5] = { "作" };
    	char SecondTitle6[5] = { "界" };
    	char SecondTitle7[5] = { "面" };
    
    
    	settextstyle(50, 0, "黑体");
    	outtextxy(50, 150, SecondTitle1);
    	outtextxy(50, 210, SecondTitle2);
    	outtextxy(50, 270, SecondTitle3);
    	outtextxy(50, 330, SecondTitle4);
    	outtextxy(50, 390, SecondTitle5);
    	outtextxy(50, 450, SecondTitle6);
    	outtextxy(50, 510, SecondTitle7);
    
    
    	setbkmode(TRANSPARENT);
    
    
    	//三个选项的背景
    	fillrectangle(230, 240, 560, 285);
    	fillrectangle(230, 370, 560, 415);
    	fillrectangle(230, 500, 560, 545);
    
    	setbkmode(TRANSPARENT);
    
    	//三个选项的文字
    	settextstyle(40, 0, "黑体");
    
    	//三个选项
    	char SecondSelect1[20] = { "显示所有数据" };
    	char SecondSelect2[20] = { "增删查改数据" };
    	char SecondSelect3[20] = { "返回" };
    
    
    	outtextxy(270, 240, SecondSelect1);
    	outtextxy(270, 370, SecondSelect2);
    	outtextxy(350, 500, SecondSelect3);
    
    
    	//进入主界面选项操作界面
    	while (1)
    	{
    		m2 = GetMouseMsg();//获取鼠标操作
    		if (m2.x >= 230 && m2.x <= 560 && m2.y >= 240 && m2.y <= 285)
    		{
    			setlinecolor(RED);
    			rectangle(230, 240, 560, 285);
    			if (m2.uMsg == WM_LBUTTONDOWN)
    			{
    				//显示所有数据
    				FlagAI = 1;
    				cleardevice();
    				ShowAllInfor();
    
    			}
    		}
    		else if (m2.x >= 230 && m2.x <= 560 && m2.y >= 370 && m2.y <= 415)
    		{
    			setlinecolor(RED);
    			rectangle(230, 370, 560, 415);
    			if (m2.uMsg == WM_LBUTTONDOWN)
    			{
    				//增删查改界面
    				cleardevice();
    				AdDeSeMoPage();
    			}
    		}
    		else if (m2.x >= 230 && m2.x <= 560 && m2.y >= 500 && m2.y <= 545)
    		{
    			setlinecolor(RED);
    			rectangle(230, 500, 560, 545);
    			if (m2.uMsg == WM_LBUTTONDOWN)
    			{
    				//返回
    				cleardevice();
    				FirstPage();
    			}
    		}
    		//鼠标不在上面悬停
    		else
    		{
    			setlinecolor(WHITE);
    			rectangle(230, 240, 560, 285);
    			rectangle(230, 370, 560, 415);
    			rectangle(230, 500, 560, 545);
    		}
    	}
    
    }
    
    //普通用户界面
    void CommonUserPage()
    {
    	initgraph(760, 760);记得删
    
    	//先清除一下
    	cleardevice();
    	//定义第二个鼠标操作
    	MOUSEMSG m3;
    
    	cleardevice();
    	IMAGE picture1;
    	loadimage(&picture1, "./firstbc.jpg", 760, 760);
    	putimage(0, 0, &picture1);
    	setbkmode(TRANSPARENT);
    
    
    
    	setfillcolor(GREEN);
    
    
    	char SecondTitle1[5] = { "普" };
    	char SecondTitle2[5] = { "通" };
    	char SecondTitle3[5] = { "用" };
    	char SecondTitle4[5] = { "户" };
    	char SecondTitle5[5] = { "操" };
    	char SecondTitle6[5] = { "作" };
    	char SecondTitle7[5] = { "界" };
    	char SecondTitle8[5] = { "面" };
    
    
    	settextstyle(50, 0, "黑体");
    	outtextxy(50, 150, SecondTitle1);
    	outtextxy(50, 210, SecondTitle2);
    	outtextxy(50, 270, SecondTitle3);
    	outtextxy(50, 330, SecondTitle4);
    	outtextxy(50, 390, SecondTitle5);
    	outtextxy(50, 450, SecondTitle6);
    	outtextxy(50, 510, SecondTitle7);
    	outtextxy(50, 570, SecondTitle8);
    
    
    	setbkmode(TRANSPARENT);
    
    
    	//三个选项的背景
    
    	fillrectangle(230, 240, 560, 285);
    	fillrectangle(230, 370, 560, 415);
    	fillrectangle(230, 500, 560, 545);
    
    	setbkmode(TRANSPARENT);
    
    	//三个选项的文字
    	settextstyle(40, 0, "黑体");
    
    	//三个选项
    	char ThirdSelect1[20] = { "显示所有数据" };
    	char ThirdSelect2[20] = { "查询数据" };
    	char ThirdSelect3[20] = { "返回" };
    
    
    
    	outtextxy(270, 240, ThirdSelect1);
    	outtextxy(310, 370, ThirdSelect2);
    	outtextxy(350, 500, ThirdSelect3);
    
    
    
    
    	//进入主界面选项操作界面
    	while (1)
    	{
    		m3 = GetMouseMsg();//获取鼠标操作
    		if (m3.x >= 230 && m3.x <= 560 && m3.y >= 240 && m3.y <= 285)//选项1
    		{
    			setlinecolor(RED);
    			rectangle(230, 240, 560, 285);
    			if (m3.uMsg == WM_LBUTTONDOWN)
    			{
    				//显示所有数据
    				FlagAI = -1;
    				cleardevice();
    				ShowAllInfor();
    			}
    		}
    		else if (m3.x >= 230 && m3.x <= 560 && m3.y >= 370 && m3.y <= 415)//选项2
    		{
    			setlinecolor(RED);
    			rectangle(230, 370, 560, 415);
    			if (m3.uMsg == WM_LBUTTONDOWN)
    			{
    				//查询数据
    				FlagFPT = -1;
    				PrintFoudInfor();
    				CommonUserPage();
    			}
    		}
    		else if (m3.x >= 230 && m3.x <= 560 && m3.y >= 500 && m3.y <= 545)//选项3——返回
    		{
    			setlinecolor(RED);
    			rectangle(230, 500, 560, 545);
    			if (m3.uMsg == WM_LBUTTONDOWN)
    			{
    				cleardevice();
    				FirstPage();
    			}
    		}
    		//鼠标不在上面悬停
    		else
    		{
    			setlinecolor(WHITE);
    			rectangle(230, 240, 560, 285);
    			rectangle(230, 370, 560, 415);
    			rectangle(230, 500, 560, 545);
    		}
    	}
    }
    
    /*
    	//功能实现//
    */
    
    
    //录入信息——通过弹窗输入&系统自动计算总分
    void InputInfor()
    {
    	//InputBox中的数字参数——限制输入内容的位数
    
    
    	//名字可以重复但是学号不能重复
    	//通过循环来检查是否有重复的
    
    	//输入学号
    	while (1)
    	{
    		TCHAR InputWindow0[] = _T("请输入该学生的学号");
    		InputBox(StuArry[NowStudentNums].s_Num, 9, InputWindow0);
    
    		int FlagInput2 = 0;
    		//计算输入的字符串长度
    		int nums = strlen(StuArry[NowStudentNums].s_Num);
    		//判断输入的是否是纯数字
    		for (int i = 0; i < nums; i++)
    		{
    			if (StuArry[NowStudentNums].s_Num[i] >= '0' && StuArry[NowStudentNums].s_Num[i] <= '9')//如果不是数字
    			{
    
    			}
    			else
    			{
    				FlagInput2 = 1;
    				HWND hwndInput2 = GetHWnd();
    				int isok = MessageBox(hwndInput2, "输入格式有误,请重新输入", "提示", MB_OK);
    				break;
    			}
    		}
    		//判断输入的是否是纯数字
    		for (int e = 0; e < nums; e++)
    		{
    			if (StuArry[NowStudentNums].s_Num[e] >= '0' && StuArry[NowStudentNums].s_Num[e] <= '9')//如果不是数字
    			{
    
    			}
    			else
    			{
    				FlagInput2 = 1;
    				HWND hwndInput2 = GetHWnd();
    				break;
    				int isok = MessageBox(hwndInput2, "输入格式有误,请重新输入", "提示", MB_OK);
    				
    			}
    		}
    
    		if (FlagInput2 == 0)
    		{
    			//判断是否输入重复
    			int FlagInput1 = 0;
    			for (int i = 0; i < NowStudentNums; i++)
    			{
    				if (strcmp(StuArry[NowStudentNums].s_Num, StuArry[i].s_Num) == 0)
    				{
    					FlagInput1 = 1;
    				}
    			}
    			if (FlagInput1 == 1)
    			{
    				HWND hwndInput1 = GetHWnd();
    				int isok = MessageBox(hwndInput1, "该学生已经存在,请重新输入", "提示", MB_OK);
    			}
    			if (FlagInput1 == 0)
    			{
    				break;
    			}
    		}
    	}
    
    
    
    
    	//输入姓名
    	TCHAR InputWindow1[] = _T("请输入该学生的姓名");
    	InputBox(StuArry[NowStudentNums].s_Name, 10, InputWindow1);
    
    
    
    
    	//输入语文成绩
    	while (1)
    	{
    		TCHAR InputWindow2[] = _T("请输入该学生的语文成绩");
    		InputBox(StuArry[NowStudentNums].s_Chinese, 4, InputWindow2);
    
    		if (ScoreFormat(StuArry[NowStudentNums].s_Chinese))//为真跳出循环
    		{
    			break;
    		}
    		
    	}
    	
    
    
    
    
    	//输入数学成绩
    	while (1)
    	{
    		TCHAR InputWindow3[] = _T("请输入该学生的数学成绩");
    		InputBox(StuArry[NowStudentNums].s_Math, 4, InputWindow3);
    
    		if (ScoreFormat(StuArry[NowStudentNums].s_Math))//为真跳出循环
    		{
    			break;
    		}
    
    	}
    	
    
    	//输入英语成绩
    	while (1)
    	{
    		TCHAR InputWindow4[] = _T("请输入该学生的英语成绩");
    		InputBox(StuArry[NowStudentNums].s_English, 4, InputWindow4);
    
    		if (ScoreFormat(StuArry[NowStudentNums].s_English))//为真跳出循环
    		{
    			break;
    		}
    
    	}
    
    
    
    
    	//计算总分
    	StuArry[NowStudentNums].s_SumScore =
    		atof(StuArry[NowStudentNums].s_Chinese) +
    		atof(StuArry[NowStudentNums].s_Math) +
    		atof(StuArry[NowStudentNums].s_English);
    
    	//保存数据
    	SaveInfor();
    }
    
    //判断输入的分数格式是否正确
    bool ScoreFormat(char PerSuSc[])
    {
    	//判断输入的是否是纯数字
    	int nums = strlen(PerSuSc);
    	//判断输入的是否是纯数字
    	for (int i = 0; i < nums; i++)
    	{
    		if (PerSuSc[i] >= '0' && PerSuSc[i] <= '9')//如果不是数字
    		{
    		}
    		else
    		{
    			HWND hwndInput5 = GetHWnd();
    			int isok = MessageBox(hwndInput5, "输入格式有误,请重新输入", "提示", MB_OK);
    			return false;
    		}
    	}
    	return true;
    }
    
    //增删查改界面
    void AdDeSeMoPage()
    {
    
    
    	//鼠标操作
    	MOUSEMSG SL;
    
    	//默认将会按照总分排序
    
    
    	initgraph(860, 760);
    
    	
    	cleardevice();
    	IMAGE picture2;
    	loadimage(&picture2, "./secondbc.jpg", 860, 760);
    	putimage(0, 0, &picture2);
    	setbkmode(TRANSPARENT);
    
    
    
    
    	setfillcolor(GREEN);
    	fillrectangle(690, 90, 850, 140);//增
    	fillrectangle(690, 190, 850, 240);//删
    	fillrectangle(690, 290, 850, 340);//查
    	fillrectangle(690, 390, 850, 440);//改
    	fillrectangle(690, 490, 850, 540);//清空
    	fillrectangle(690, 590, 850, 640);//返回
    
    	//表头文字部分
    	setbkmode(TRANSPARENT);
    	settextstyle(30, 0, "黑体");
    	outtextxy(0, 0, "排名");
    	outtextxy(80, 0, "学号");
    	outtextxy(200, 0, "姓名");
    	outtextxy(300, 0, "语文");
    	outtextxy(400, 0, "数学");
    	outtextxy(500, 0, "英语");
    	outtextxy(600, 0, "总分");
    	outtextxy(740, 0, "选项");
    	outtextxy(740, 100, "添加");
    	outtextxy(740, 200, "删除");
    	outtextxy(740, 300, "查找");
    	outtextxy(740, 400, "修改");
    	outtextxy(740, 500, "清空");
    	outtextxy(740, 600, "返回");
    
    
    	//打印当前已经有的信息——记录为空的提示也在这里面
    	S1mplePrint();
    
    	//进入鼠标操作环节
    	while (1)
    	{
    		SL = GetMouseMsg();
    		if (SL.x >= 690 && SL.x <= 850 && SL.y >= 90 && SL.y <= 140)
    		{
    
    			setlinecolor(RED);
    			rectangle(690, 90, 850, 140);
    			if (SL.uMsg == WM_LBUTTONDOWN)
    			{
    				//添加
    				InputInfor();
    				cleardevice();
    				//完成操作重新载入——刷新
    				AdDeSeMoPage();
    			}
    		}
    		else if (SL.x >= 690 && SL.x <= 850 && SL.y >= 190 && SL.y <= 240)
    		{
    
    			setlinecolor(RED);
    			rectangle(690, 190, 850, 240);
    			if (SL.uMsg == WM_LBUTTONDOWN)
    			{
    				//删除
    				DeSomeStu();
    				//完成操作重新载入——刷新
    				AdDeSeMoPage();
    			}
    		}
    		else if (SL.x >= 690 && SL.x <= 850 && SL.y >= 290 && SL.y <= 340)
    		{
    
    			setlinecolor(RED);
    			rectangle(690, 290, 850, 340);
    			if (SL.uMsg == WM_LBUTTONDOWN)
    			{
    				FlagFPT = 1;
    				//查询
    				PrintFoudInfor();
    				//完成操作重新载入——刷新
    				AdDeSeMoPage();
    			}
    		}
    		else if (SL.x >= 690 && SL.x <= 850 && SL.y >= 390 && SL.y <= 440)
    		{
    			setlinecolor(RED);
    			rectangle(690, 390, 850, 440);
    			if (SL.uMsg == WM_LBUTTONDOWN)
    			{
    				//修改
    				ModifyStudInfor();
    				//完成操作重新载入——刷新
    				AdDeSeMoPage();
    			}
    		}
    		else if (SL.x >= 690 && SL.x <= 850 && SL.y >= 490 && SL.y <= 540)
    		{
    			setlinecolor(RED);
    			rectangle(690, 490, 850, 540);
    			if (SL.uMsg == WM_LBUTTONDOWN)
    			{
    				//确保误删——弹窗加以提示
    				HWND hwndDel = GetHWnd();
    				int isok = MessageBox(hwndDel, "确认清空?", "提示", MB_OKCANCEL);
    				if (isok == IDOK)
    				{
    					//调用清空函数
    					DeleteStuInfor();
    					//完成操作重新载入——刷新
    					AdDeSeMoPage();
    					//弹窗提示
    					int tips1 = MessageBox(hwndDel, "清空成功!", "提示", MB_OK);
    				}
    				else if (isok == IDCANCEL)
    				{
    					//点击取消不做反应
    				}
    			}
    		}
    		else if (SL.x >= 690 && SL.x <= 850 && SL.y >= 590 && SL.y <= 640)
    		{
    			//返回
    			setlinecolor(RED);
    			rectangle(690, 590, 850, 640);
    			if (SL.uMsg == WM_LBUTTONDOWN)
    			{
    				cleardevice();
    				//完成操作重新载入——刷新
    				AdminPage();
    
    
    				//辅助测试——显示当前人数
    				/*char temptps[5];
    				sprintf(temptps, "%d", NowStudentNums);
    
    
    				HWND hwndTemp = GetHWnd();
    				int tips2 = MessageBox(hwndTemp, temptps, "提示", MB_OK);*/
    			}
    		}
    		//鼠标不悬停
    		else
    		{
    			setlinecolor(WHITE);
    			rectangle(690, 90, 850, 140);//增
    			rectangle(690, 190, 850, 240);//删
    			rectangle(690, 290, 850, 340);//查
    			rectangle(690, 390, 850, 440);//改
    			rectangle(690, 490, 850, 540);//清空
    			rectangle(690, 590, 850, 640);//返回
    
    		}
    	}
    }
    
    //保存数据到文件中
    void SaveInfor()
    {
    
    
    	//如果学号和姓名都不是空的才写入文件
    	if (strlen(StuArry[NowStudentNums].s_Num) != 0 && strlen(StuArry[NowStudentNums].s_Name) != 0)
    	{
    		FILE* fp = fopen("StudentInforFile.txt", "a");
    		if (fp == NULL)
    		{
    			return;
    		}
    		fprintf(fp, "%s\t%s\t%s\t%s\t%s\t%lf\n",
    			StuArry[NowStudentNums].s_Num,
    			StuArry[NowStudentNums].s_Name,
    			StuArry[NowStudentNums].s_Chinese,
    			StuArry[NowStudentNums].s_Math,
    			StuArry[NowStudentNums].s_English,
    			StuArry[NowStudentNums].s_SumScore);
    		fclose(fp);
    		//保存完毕人数++
    		NowStudentNums++;
    	}
    
    
    
    }
    
    //抹除全部数据再保存——主要用于修改功能
    void SaveInforModi()
    {
    	//先删掉,但是不将人数置空所以不能调用之前的删除函数
    	remove("StudentInforFile.txt");
    	//如果学号和姓名都不是空的才写入文件
    	FILE* fp = fopen("StudentInforFile.txt", "a");
    	if (fp == NULL)
    	{
    		return;
    	}
    	for (int i = 0; i < NowStudentNums; i++)
    	{
    		if (strlen(StuArry[i].s_Num) != 0 && strlen(StuArry[i].s_Name) != 0)
    		{
    
    			fprintf(fp, "%s\t%s\t%s\t%s\t%s\t%lf\n",
    				StuArry[i].s_Num,
    				StuArry[i].s_Name,
    				StuArry[i].s_Chinese,
    				StuArry[i].s_Math,
    				StuArry[i].s_English,
    				StuArry[i].s_SumScore);
    		}
    	}
    
    	fclose(fp);
    }
    
    //读取文件中的信息-同步到当前结构体数组中,并同步得到NowStudentNums
    void ReadInfor()
    {
    	FILE* fp = fopen("StudentInforFile.txt", "r");
    	if (fp == NULL)
    	{
    		return;
    	}
    	//将文件中的数据读取到当前的结构体数组中
    	for (int i = 0; i < RecordNums; i++)
    	{
    
    		fscanf(fp, "%s\t%s\t%s\t%s\t%s\t%lf\t\n",
    			StuArry[i].s_Num,
    			StuArry[i].s_Name,
    			StuArry[i].s_Chinese,
    			StuArry[i].s_Math,
    			StuArry[i].s_English,
    			&StuArry[i].s_SumScore);
    	}
    
    	int FileStudentNums = 0;//辅助先得到文件中的人数
    
    	//读取出文件中数据的人数个数
    	for (int k = 0; k < RecordNums; k++)
    	{
    		if (strlen(StuArry[k].s_Name) != 0)
    		{
    			//当前人数——FileStudentNums不能设全局变量,否则多次读取的时候会出现问题
    			NowStudentNums = ++FileStudentNums;
    		}
    	}
    	fclose(fp);
    }
    
    //彻底清空——删除文件
    void DeleteStuInfor()
    {
    	//删除文件
    	remove("StudentInforFile.txt");
    	//置空当前人数
    	NowStudentNums = 0;
    }
    
    //通用的单纯在屏幕上的对应位置打印出结构体中的每一个元素
    void S1mplePrint()
    {
    	//如果为空就不往下执行
    	if (NowStudentNums == 0)
    	{
    
    		settextstyle(50, 0, "黑体");
    		outtextxy(200, 200, "当前记录为空!");
    		return;
    	}
    
    	for (int q = 1; q <= NowStudentNums; q++)
    	{
    
    
    		//顺序
    		settextstyle(30, 0, "黑体");
    		char Nums[5];
    		sprintf(Nums, "%d", q);
    
    		//缩放字体
    		settextstyle(25, 0, "黑体");
    		//学号
    
    		outtextxy(80, 40 + 40 * q, StuArry[q - 1].s_Num);
    		//姓名
    		outtextxy(200, 40 + 40 * q, StuArry[q - 1].s_Name);
    		//语文成绩
    		outtextxy(300, 40 + 40 * q, StuArry[q - 1].s_Chinese);
    		//数学成绩
    		outtextxy(400, 40 + 40 * q, StuArry[q - 1].s_Math);
    		//英语成绩
    		outtextxy(500, 40 + 40 * q, StuArry[q - 1].s_English);
    		//输出总分
    		if (strlen(StuArry[q - 1].s_Name) != 0)
    		{
    			outtextxy(0, 40 + 40 * q, Nums);
    			char SuSo[20];
    			sprintf(SuSo, "%.2f", StuArry[q - 1].s_SumScore);//小数点后保留两位
    			outtextxy(600, 40 + 40 * q, SuSo);
    		}
    	}
    }
    
    //显示所有数据-通用
    void ShowAllInfor()
    {
    
    	//鼠标操作
    	MOUSEMSG SA;
    	initgraph(860, 760);
    	//默认只是打印数据到屏幕上
    	cleardevice();
    	IMAGE picture2;
    	loadimage(&picture2, "./secondbc.jpg", 860, 760);
    	putimage(0, 0, &picture2);
    
    	setfillcolor(GREEN);
    	setbkmode(TRANSPARENT);
    
    
    
    
    	fillrectangle(690, 90, 850, 140);
    	fillrectangle(690, 190, 850, 240);
    	fillrectangle(690, 290, 850, 340);
    	fillrectangle(690, 390, 850, 440);
    	fillrectangle(690, 590, 850, 640);
    
    
    
    	//表头文字部分
    	setbkmode(TRANSPARENT);
    	settextstyle(30, 0, "黑体");
    	outtextxy(0, 0, "排名");
    	outtextxy(80, 0, "学号");
    	outtextxy(200, 0, "姓名");
    	outtextxy(300, 0, "语文");
    	outtextxy(400, 0, "数学");
    	outtextxy(500, 0, "英语");
    	outtextxy(600, 0, "总分");
    	outtextxy(700, 0, "排序方式");
    	outtextxy(700, 100, "按语文排序");
    	outtextxy(700, 200, "按数学排序");
    	outtextxy(700, 300, "按英语排序");
    	outtextxy(700, 400, "按总分排序");
    
    	outtextxy(740, 600, "返回");
    
    	S1mplePrint();//默认只是单纯的打印
    
    	while (1)
    	{
    		SA = GetMouseMsg();
    		if (SA.x >= 690 && SA.x <= 850 && SA.y >= 90 && SA.y <= 140)
    		{
    			//按语文排
    			setlinecolor(RED);
    			rectangle(690, 90, 850, 140);
    			if (SA.uMsg == WM_LBUTTONDOWN)
    			{
    				SortAcChinese();
    				//刷新重新载入
    				ShowAllInfor();
    
    			}
    		}
    		else if (SA.x >= 690 && SA.x <= 850 && SA.y >= 190 && SA.y <= 240)
    		{
    			//按数学排
    			setlinecolor(RED);
    			rectangle(690, 190, 850, 240);
    			if (SA.uMsg == WM_LBUTTONDOWN)
    			{
    				SortAcMath();
    				//刷新重新载入
    				ShowAllInfor();
    			}
    		}
    		else if (SA.x >= 690 && SA.x <= 850 && SA.y >= 290 && SA.y <= 340)
    		{
    			//按英语排
    			setlinecolor(RED);
    			rectangle(690, 290, 850, 340);
    			if (SA.uMsg == WM_LBUTTONDOWN)
    			{
    				SortAcEnglish();
    				//刷新重新载入
    				ShowAllInfor();
    			}
    		}
    		else if (SA.x >= 690 && SA.x <= 850 && SA.y >= 390 && SA.y <= 440)
    		{
    			//按照总分排
    			setlinecolor(RED);
    			rectangle(690, 390, 850, 440);
    			if (SA.uMsg == WM_LBUTTONDOWN)
    			{
    				SortAcSumScore();
    				//刷新重新载入
    				ShowAllInfor();
    			}
    
    		}
    		else if (SA.x >= 690 && SA.x <= 850 && SA.y >= 590 && SA.y <= 640)
    		{
    			//返回
    			setlinecolor(RED);
    			rectangle(690, 590, 850, 640);
    			if (SA.uMsg == WM_LBUTTONDOWN)
    			{
    				cleardevice();
    				//判断从哪个窗口点进来的
    				if (FlagAI == 1)
    				{
    					AdminPage();
    				}
    				else if (FlagAI == -1)
    				{
    					CommonUserPage();
    				}
    
    			}
    		}
    		else
    		{
    			setlinecolor(WHITE);
    			rectangle(690, 90, 850, 140);
    			rectangle(690, 190, 850, 240);
    			rectangle(690, 290, 850, 340);
    			rectangle(690, 390, 850, 440);
    			rectangle(690, 590, 850, 640);
    
    		}
    
    	}
    
    }
    
    //返回要查找/修改/删除人所在结构体的下标
    int ReturnPosi()
    {
    	//接收用户输入
    	char ReceInput[64];
    	TCHAR InputWindowFI[] = _T("请输入学号或者姓名进行(查找)(修改)(删除)");
    	InputBox(ReceInput, 10, InputWindowFI);
    
    	//进行循环查找,一旦相同就跳出循环
    	for (int w = 0; w < NowStudentNums; w++)
    	{
    		if (strcmp(StuArry[w].s_Name, ReceInput) == 0 || strcmp(StuArry[w].s_Num, ReceInput) == 0)//返回0表示两个字符串相等
    		{
    			return w;
    		}
    	}
    	//如果没找到这人就返回-1
    	return -1;
    }
    
    
    //打印找到人 的信息
    void PrintFoudInfor(int Position)
    {
    	//鼠标操作
    	MOUSEMSG PFI;
    	initgraph(860, 760);
    
    	
    
    
    
    	cleardevice();
    	IMAGE picture2;
    	loadimage(&picture2, "./secondbc.jpg", 860, 760);
    	putimage(0, 0, &picture2);
    
    	
    	
    
    	setfillcolor(GREEN);
    	fillrectangle(690, 590, 850, 640);
    	setbkmode(TRANSPARENT);
    
    	//表头文字部分
    	settextstyle(30, 0, "黑体");
    	outtextxy(40, 100, "学号");
    	outtextxy(200, 100, "姓名");
    	outtextxy(300, 100, "语文");
    	outtextxy(400, 100, "数学");
    	outtextxy(500, 100, "英语");
    	outtextxy(600, 100, "总分");
    	outtextxy(740, 600, "返回");
    
    	//打印被查找人的信息
    
    
    	//学号
    	outtextxy(40, 140, StuArry[Position].s_Num);
    	//姓名
    	outtextxy(200, 140, StuArry[Position].s_Name);
    	//语文成绩
    	outtextxy(300, 140, StuArry[Position].s_Chinese);
    	//数学成绩
    	outtextxy(400, 140, StuArry[Position].s_Math);
    	//英语成绩
    	outtextxy(500, 140, StuArry[Position].s_English);
    	//输出总分
    	char SuSo[20];
    	sprintf(SuSo, "%.2f", StuArry[Position].s_SumScore);//小数点后保留两位
    	outtextxy(600, 140, SuSo);
    
    	while (1)
    	{
    		PFI = GetMouseMsg();
    		if (PFI.x >= 690 && PFI.x <= 850 && PFI.y >= 590 && PFI.y <= 640)
    		{
    			//返回
    			setlinecolor(RED);
    			rectangle(690, 590, 850, 640);
    			if (PFI.uMsg == WM_LBUTTONDOWN)
    			{
    				cleardevice();
    				if (FlagFPT == 1)
    				{
    					AdDeSeMoPage();
    				}
    				else if (FlagFPT = -1)
    				{
    					CommonUserPage();
    				}
    			}
    		}
    		//鼠标不在选项上
    		else
    		{
    			setlinecolor(WHITE);
    			rectangle(690, 590, 850, 640);
    		}
    
    	}
    }
    
    
    //查询——这个负责最终的调用
    void PrintFoudInfor()
    {
    	//定义一个变量用来接收下标
    	int TempPosi = ReturnPosi();
    	if (TempPosi == -1)//没找到
    	{
    		//获取窗口句柄
    		HWND hndtipsF = GetHWnd();
    		//用一个字符数组来总结句子
    		int isok = MessageBox(hndtipsF, "查无此人!", "提示", MB_OK);
    	}
    	else//找到了——打印输出
    	{
    		cleardevice();
    		PrintFoudInfor(TempPosi);
    	}
    }
    
    //修改学生信息,找到返回下标,重新给他赋值,保存,否则直接弹窗警告
    void ModifyStudInfor()
    {
    	//直接套用上面查找的操作,在此基础上加一行修改前
    	//因为需要得到要修改人在结构体数组中的位置-下标,所以不能将函数直接拿过来用,得粘贴过来
    	//定义一个变量用来接收下标
    	int TempModi = ReturnPosi();
    	if (TempModi == -1)//没找到
    	{
    		//获取窗口句柄
    		HWND hndtipsM = GetHWnd();
    		//用一个字符数组来总结句子
    		int isok = MessageBox(hndtipsM, "查无此人!", "提示", MB_OK);
    	}
    	else//找到了这个学生进行下面的操作
    	{
    		cleardevice();
    		//鼠标操作
    		MOUSEMSG Modi;
    		initgraph(860, 760);
    
    
    
    		IMAGE picture2;
    		loadimage(&picture2, "./secondbc.jpg", 860, 760);
    		putimage(0, 0, &picture2);
    
    
    		setfillcolor(GREEN);
    		fillrectangle(690, 590, 850, 640);
    
    		//表头文字部分
    		setbkmode(TRANSPARENT);
    		settextstyle(50, 0, "黑体");
    		outtextxy(40, 40, "修改前");
    		outtextxy(40, 240, "修改后");
    		settextstyle(30, 0, "黑体");
    		outtextxy(40, 100, "学号");
    		outtextxy(200, 100, "姓名");
    		outtextxy(300, 100, "语文");
    		outtextxy(400, 100, "数学");
    		outtextxy(500, 100, "英语");
    		outtextxy(600, 100, "总分");
    		outtextxy(740, 600, "返回");
    
    		outtextxy(40, 300, "学号");
    		outtextxy(200, 300, "姓名");
    		outtextxy(300, 300, "语文");
    		outtextxy(400, 300, "数学");
    		outtextxy(500, 300, "英语");
    		outtextxy(600, 300, "总分");
    
    		//打印被查找人的信息
    		//学号
    		outtextxy(40, 140, StuArry[TempModi].s_Num);
    		//姓名
    		outtextxy(200, 140, StuArry[TempModi].s_Name);
    		//语文成绩
    		outtextxy(300, 140, StuArry[TempModi].s_Chinese);
    		//数学成绩
    		outtextxy(400, 140, StuArry[TempModi].s_Math);
    		//英语成绩
    		outtextxy(500, 140, StuArry[TempModi].s_English);
    		//输出总分
    		if (strlen(StuArry[TempModi].s_Name) != 0)
    		{
    			char SuSo1[20];
    			sprintf(SuSo1, "%.2f", StuArry[TempModi].s_SumScore);//小数点后保留两位
    			outtextxy(600, 140, SuSo1);
    		}
    
    
    
    
    
    
    
    		//加入输入弹窗——重新书写内容
    
    		//修改学号
    		while (1)
    		{
    			//用于接收输入的学号,先覆盖进去
    			char TempModiNums[64];
    
    			TCHAR InputWindow0[] = _T("请输入该学生的学号");
    			InputBox(TempModiNums, 9, InputWindow0);
    
    			if (strcmp(TempModiNums,StuArry[TempModi].s_Num)==0)//如果输入的学号和本身位置的学号相同
    			{
    				//不作出变化,直接break
    				break;
    			}
    			else//如果输入的学号和本身位置的学号不同,则需要判断与整个结构体中是否有重复的
    			{
    				int FlagInput3 = 0;
    
    				int nums = strlen(TempModiNums);
    
    				//判断输入的是否是纯数字
    				for (int i = 0; i < nums; i++)
    				{
    					if (TempModiNums[i] >= '0' && TempModiNums[i] <= '9')//如果不是数字
    					{
    
    					}
    					else
    					{
    						FlagInput3 = 1;
    						HWND hwndInput3 = GetHWnd();
    						int isok = MessageBox(hwndInput3, "输入格式有误,请重新输入", "提示", MB_OK);
    						break;
    					}
    				}
    
    				if (FlagInput3 == 0)
    				{
    					//为什么这里新输入的学号,会显示在结构体数组中存在,
    					//因为这是修改函数,上面输入的学号已经覆盖到了他应该取得位置,
    					/*
    					思路1.先别把要该的值覆盖进去,先进行判断
    							判断完成符合条件最后再把值赋给它,
    					思路2.将原本的学生结构体数组复制一份
    							 在新的结构体数组中遍历判断
    
    
    							 //这里选择第一种
    					*/
    					//判断是否输入重复
    					int FlagInput4 = 0;
    					for (int i = 0; i < NowStudentNums; i++)
    					{
    						if (strcmp(TempModiNums, StuArry[i].s_Num) == 0)
    						{
    							FlagInput4 = 1;
    							break;
    						}
    					}
    					if (FlagInput4 == 1)
    					{
    						HWND hwndInput4 = GetHWnd();
    						int isok = MessageBox(hwndInput4, "该学生已经存在,请重新输入", "提示", MB_OK);
    					}
    					else if (FlagInput4 == 0)
    					{
    						//覆盖
    						memcpy(TempModiNums, StuArry[TempModi].s_Num, nums);
    						break;
    					}
    				}
    			}
    		}
    
    		//修改姓名
    		TCHAR InputWindow1[] = _T("请输入该学生的姓名");
    		InputBox(StuArry[TempModi].s_Name, 10, InputWindow1);
    
    		//输入语文成绩
    		while (1)
    		{
    			TCHAR InputWindow2[] = _T("请输入该学生的语文成绩");
    			InputBox(StuArry[TempModi].s_Chinese, 4, InputWindow2);
    
    			if (ScoreFormat(StuArry[TempModi].s_Chinese))//为真跳出循环
    			{
    				break;
    			}
    
    		}
    
    
    
    
    
    		//输入数学成绩
    		while (1)
    		{
    			TCHAR InputWindow3[] = _T("请输入该学生的数学成绩");
    			InputBox(StuArry[TempModi].s_Math, 4, InputWindow3);
    
    			if (ScoreFormat(StuArry[TempModi].s_Math))//为真跳出循环
    			{
    				break;
    			}
    
    		}
    
    
    		//输入英语成绩
    		while (1)
    		{
    			TCHAR InputWindow4[] = _T("请输入该学生的英语成绩");
    			InputBox(StuArry[TempModi].s_English, 4, InputWindow4);
    
    			if (ScoreFormat(StuArry[TempModi].s_English))//为真跳出循环
    			{
    				break;
    			}
    
    		}
    
    		//计算总分
    		StuArry[TempModi].s_SumScore =
    			atof(StuArry[TempModi].s_Chinese) +
    			atof(StuArry[TempModi].s_Math) +
    			atof(StuArry[TempModi].s_English);
    
    		//打印被查找人的信息
    		//学号
    		outtextxy(40, 340, StuArry[TempModi].s_Num);
    		//姓名
    		outtextxy(200, 340, StuArry[TempModi].s_Name);
    		//语文成绩
    		outtextxy(300, 340, StuArry[TempModi].s_Chinese);
    		//数学成绩
    		outtextxy(400, 340, StuArry[TempModi].s_Math);
    		//英语成绩
    		outtextxy(500, 340, StuArry[TempModi].s_English);
    		//输出总分-加一个限制条件
    		if (strlen(StuArry[TempModi].s_Name) != 0)
    		{
    			char SuSo2[20];
    			sprintf(SuSo2, "%.2lf", StuArry[TempModi].s_SumScore);//小数点后保留两位
    			outtextxy(600, 340, SuSo2);
    		}
    
    		//保存文件
    		SaveInforModi();
    
    
    
    
    
    		while (1)
    		{
    			Modi = GetMouseMsg();
    			if (Modi.x >= 690 && Modi.x <= 850 && Modi.y >= 590 && Modi.y <= 640)
    			{
    				//返回
    				setlinecolor(RED);
    				setlinecolor(RED);
    
    				rectangle(690, 590, 850, 640);
    				if (Modi.uMsg == WM_LBUTTONDOWN)
    				{
    					cleardevice();
    					//回到增删查改界面
    					AdDeSeMoPage();
    
    					//辅助测试——显示当前人数
    					/*char temptps[5];
    					sprintf(temptps, "%d", NowStudentNums);
    
    
    					HWND hwndTemp = GetHWnd();
    					int tips2 = MessageBox(hwndTemp, temptps, "提示", MB_OK);*/
    				}
    			}
    			//鼠标不悬停
    			else
    			{
    				setlinecolor(WHITE);
    
    				rectangle(690, 590, 850, 640);
    
    			}
    		}
    	}
    }
    
    //删除某个学生的信息
    void DeSomeStu()
    {
    	//先进行查找,找到返回下标,然后依次将该下标后面的数据往前推,最后人数--
    	//没找到就查无此人
    	//查找
    	// 
    	//因为要实现的功能不同,所以不能直接调用查找函数
    	//定义一个变量用来接收下标
    	int TempDelt = ReturnPosi();
    	if (TempDelt == -1)//没找到
    	{
    		//获取窗口句柄
    		HWND hndtipsD = GetHWnd();
    		//用一个字符数组来总结句子
    		int isok = MessageBox(hndtipsD, "查无此人!", "提示", MB_OK);
    	}
    	else//找到了,确认是否删除
    	{
    		//找到了就提示是否确定删除
    		//获取窗口句柄
    		//delete sure?
    		HWND hndtipsDS = GetHWnd();
    		//用一个字符数组来总结句子
    		int isok = MessageBox(hndtipsDS, "确定删除?", "提示", MB_OKCANCEL);
    		if (isok == IDOK)
    		{
    			//确定删除操作
    			//将这个元素的后一个依次迁移
    			for (int d = TempDelt; d < NowStudentNums - 1; d++)
    			{
    				StuArry[d] = StuArry[d + 1];
    			}
    			//现在的人数-1
    			NowStudentNums--;
    			//删除完成只是将当前结构体里面的数据清除了,但是文件中并没有作出更改
    			//更新到文件中
    			SaveInforModi();//用这个全部清空的函数,再对文件进行重写
    		}
    		else if (isok == IDCANCEL)
    		{
    			//取消删除不执行任何操作
    		}
    	}
    
    }
    
    //按照语文成绩进行排序
    void SortAcChinese()
    {
    	//使用冒泡排序针对语文成绩对学生进行排序
    
    
    	//用循环将每个人的成绩都存进成绩的结构体数组
    	for (int i = 0; i < NowStudentNums; i++)
    	{
    		SoArry[i].SuScore = atof(StuArry[i].s_Chinese);
    	}
    	//对结构体进行排序
    
    	//注意:当用两个结构体进行排序时,即一个结构体辅助另一个结构体进行排序时,
    	//注意两个需要同时发生变化,两个结构体都需要发生变化,积累经验
    
    	for (int r = 0; r < NowStudentNums; r++)
    	{
    		Score TempScore;
    		Student TempStudent;
    		for (int j = 1; j < NowStudentNums - r; j++)
    		{
    			if (SoArry[j - 1].SuScore < SoArry[j].SuScore)
    			{
    				TempScore = SoArry[j];
    				TempStudent = StuArry[j];
    
    				SoArry[j] = SoArry[j - 1];
    				StuArry[j] = StuArry[j - 1];
    
    				SoArry[j - 1] = TempScore;
    				StuArry[j - 1] = TempStudent;
    			}
    		}
    	}
    	//不用保存,默认是按照添加的顺序排序
    }
    
    //按照数学成绩进行排序
    void SortAcMath()
    {
    	//每次给成绩结构体数组赋值都会被重新覆盖
    
    	//用循环将每个人的成绩都存进成绩的结构体数组
    	for (int i = 0; i < NowStudentNums; i++)
    	{
    		SoArry[i].SuScore = atof(StuArry[i].s_Math);
    	}
    	//对结构体进行排序
    
    	//注意:当用两个结构体进行排序时,即一个结构体辅助另一个结构体进行排序时,
    	//注意两个需要同时发生变化,两个结构体都需要发生变化,积累经验
    
    	for (int t = 0; t < NowStudentNums; t++)
    	{
    		Score TempScore;
    		Student TempStudent;
    		for (int j = 1; j < NowStudentNums - t; j++)
    		{
    			if (SoArry[j - 1].SuScore < SoArry[j].SuScore)
    			{
    				TempScore = SoArry[j];
    				TempStudent = StuArry[j];
    
    				SoArry[j] = SoArry[j - 1];
    				StuArry[j] = StuArry[j - 1];
    
    				SoArry[j - 1] = TempScore;
    				StuArry[j - 1] = TempStudent;
    			}
    		}
    	}
    	//不用保存,默认是按照添加的顺序排序
    }
    
    //按照英语成绩进行排序
    void SortAcEnglish()
    {
    	//每次给成绩结构体数组赋值都会被重新覆盖
    
    	//用循环将每个人的成绩都存进成绩的结构体数组
    	for (int i = 0; i < NowStudentNums; i++)
    	{
    		SoArry[i].SuScore = atof(StuArry[i].s_English);
    	}
    	//对结构体进行排序
    
    	//注意:当用两个结构体进行排序时,即一个结构体辅助另一个结构体进行排序时,
    	//注意两个需要同时发生变化,两个结构体都需要发生变化,积累经验
    	//因为顺序是一样的,可以把两个想象成一个
    
    	for (int y = 0; y < NowStudentNums; y++)
    	{
    		Score TempScore;
    		Student TempStudent;
    		for (int j = 1; j < NowStudentNums - y; j++)
    		{
    			if (SoArry[j - 1].SuScore < SoArry[j].SuScore)
    			{
    				TempScore = SoArry[j];
    				TempStudent = StuArry[j];
    
    				SoArry[j] = SoArry[j - 1];
    				StuArry[j] = StuArry[j - 1];
    
    				SoArry[j - 1] = TempScore;
    				StuArry[j - 1] = TempStudent;
    			}
    		}
    	}
    	//不用保存,默认是按照添加的顺序排序
    }
    
    //按照总分进行排序
    void SortAcSumScore()
    {
    	for (int i = 0; i < NowStudentNums; i++)
    	{
    		Student TempStudent;
    		for (int j = 1; j < NowStudentNums - i; j++)
    		{
    			if (StuArry[j - 1].s_SumScore < StuArry[j].s_SumScore)
    			{
    
    				TempStudent = StuArry[j];
    
    
    				StuArry[j] = StuArry[j - 1];
    
    
    				StuArry[j - 1] = TempStudent;
    			}
    		}
    	}
    }
    
    
    //管理员登录
    void AdminSignIn()
    {
    	//打开文件将账号和密码读过来
    	FILE* fp = fopen("AdminSignIn.txt", "r");
    	if (fp == NULL)
    	{
    		return;
    	}
    	//读取到对应的管理员结构体数组
    	fscanf(fp, "%s\t%s\t\n", AdminUser.UserName, AdminUser.PassWord);
    
    	//关闭文件
    	fclose(fp);
    
    
    
    
    	char ReceAcctNumber[64];
    	TCHAR InputAcct[] = _T("请输入用户名");
    	InputBox(ReceAcctNumber, 10, InputAcct);
    
    	char ReceAcctPassWord[64];
    	TCHAR InputPass[] = _T("请输入密码");
    	InputBox(ReceAcctPassWord, 10, InputPass);
    
    	//如果用户名和密码都正确才进度到管理员界面
    	//否则弹窗提示错误
    	if (strcmp(AdminUser.UserName, ReceAcctNumber) == 0 && strcmp(AdminUser.PassWord, ReceAcctPassWord) == 0)
    	{
    		cleardevice();
    		AdminPage();
    	}
    	else
    	{
    		HWND SignError = GetHWnd();
    		int isok = MessageBox(SignError, "用户名或密码错误!", "提示", MB_OK);
    	}
    }
    
    
    
    int main(void)
    {
    	FirstPage();
    	return 0;
    }
    
    展开全文
  • php大作业 学生成绩管理系统

    热门讨论 2013-04-18 23:05:58
    学生成绩管理系统 用户界面 查询,插入,删除等功能
  • ##学生成绩管理系统界面比较漂亮,但功能简单)## DEMO示例: ### 1。登录界面 ### 2。主界面 ### 3。浏览界面 ### 4。添加界面 ##简介:界面漂亮,但功能较简单,浏览界面可实现对数据的增删改查,查询可高级...
  • 讲起学生成绩管理系统,从大一C语言的课程设计开始,到大二的C++课程设计都是这个题,最近在学树莓派,好像树莓派常用Python编程,于是学了一波Python,看了一点基本的语法想写点东西练下手。开发环境:Ubuntu+...

    讲起学生成绩管理系统,从大一C语言的课程设计开始,到大二的C++课程设计都是这个题,最近在学树莓派,好像树莓派常用Python编程,于是学了一波Python,看了一点基本的语法想写点东西练下手。

    开发环境:Ubuntu+Python2.7

    代码如下:

    #coding=utf-8

    #保存学生信息

    studentList=[]

    def addInfo(name,addr):

    tempInfo={}

    tempInfo['name']=name

    tempInfo['addr']=addr

    studentList.append(tempInfo)

    print(studentList)

    def delInfo(number):

    if number=0 :

    del studentList[number]

    else:

    print("您输入的序号有误:")

    def changeInfon(modifNum,name,addr):

    if modifNum=0 :

    tempInfo={}

    tempInfo['name']=name

    tempInfo['addr']=addr

    studentList[modifNum]=tempInfo

    else:

    print("您输入的序号有误:")

    def findInfo(findName):

    i=0

    for info in studentList:

    if findName ==info['name']:

    print("您要查找的信息为%i %s %s"%(i,info['name'],info['addr']))

    while True:

    print("-"*30)

    print("请输入您的选项")

    print("1.新增学生信息")

    print("2.删除学生信息")

    print("3.修改学生信息")

    print("4.查询学生信息")

    print("-"*30)

    #等待用户输入选项

    choose=int(raw_input("请输入您的选项:"))

    if 1==choose:

    name=raw_input("请输入学生的姓名:")

    addr=raw_input("请输入学生的籍贯:")

    addInfo(name,addr)

    elif 2==choose:

    if 0==len(studentList):

    print("当前系统没用任何学生信息")

    continue

    i=0

    for info in studentList:

    print("%i %s %s"%(i,info['name'],info['addr']))

    i+=1

    number=int(raw_input("请输入要删除的序号:"))

    delInfo(number)

    print("删除之后的信息为:%s"%studentList)

    elif 3==choose:

    i=0

    for info in studentList:

    print("%i %s %s"%(i,info['name'],info['addr']))

    i+=1

    modifNum=int(raw_input("请输入要修改的序号:"))

    name=raw_input("请输入学生的姓名:")

    addr=raw_input("请输入学生的籍贯:")

    changeInfon(modifNum,name,addr)

    print("修改之后的信息为:%s"%studentList[modifNum])

    elif 4==choose:

    findName=raw_input("请输入要查找的学生的姓名:")

    findInfo(findName)

    else :

    print("您输入的有误,请重新输入")

    continue

    更多学习资料请关注专题《管理系统开发》。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • 简单java学生成绩管理系统,无UI界面,连接SQL数据库 import java.sql.*; import java.util.Scanner; public class StudentManagement { //取得数据库的连接 String driverName=&amp;quot;...

    简单java学生成绩管理系统,无UI界面,连接SQL数据库

    学生成绩管理,设计学生成绩管理数据库应用程序,对课程表和学生成绩表进行数据插入、修改、删除、查询和成绩统计等操作,并从学生信息表中获得相关数据。
    StudentManagement.java

    import java.sql.*;
    import java.util.Scanner;
    public class StudentManagement {
    	//取得数据库的连接
        String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";//加载JDBC驱动" 
        String dbURL="jdbc:sqlserver://localhost:1433; DatabaseName=StudentManagement"; //JDBC协议 
        String userName = "test";   //用户名 (确保该用户和数据库有映射关系,即有权限访问)    
        String userPwd = "123456";   //密码     
        Connection dbConn=null;  
        PreparedStatement stmt=null;//Statement 提供执行基本SQL语句操作的功能
        Scanner sc = new Scanner(System.in);
    	public void AddScore() {
    		String stuno;
    		String couno;
    		String score;
    		try {      
    	        Class.forName(driverName);      
    	        dbConn = DriverManager.getConnection(dbURL, userName, userPwd); //连接服务器和数据库    
    	        System.out.println("Connection Successful!");   //如果连接成功 控制台输出Connection Successful!      
    	        }
    	    catch (Exception e) {      
    	            e.printStackTrace();     
    	            } 
            try {
    			System.out.print("请输入学生的学号: ");
    			stuno = sc.next();
    			System.out.print("请输入课程号:");
    			couno = sc.next();
    			System.out.print("请输入学生的成绩:");
    			score = sc.next();
    			String addsc = "INSERT INTO [SC]([Sno],[Cno],[Grade]) VALUES(?,?,?);";
    			stmt = dbConn.prepareStatement(addsc);
    			stmt.setString(1,stuno);
    			stmt.setString(2,couno);
    			stmt.setString(3,score);
    			stmt.executeUpdate();
    			System.out.println("添加成功!");
    		}
    		catch(SQLException e) {
    			System.out.println("添加失败!");
    			e.printStackTrace();
    		}
    	}
    	public void AddCourse() {
    		String couname;
    		String couno;
    		String cpno;
    		String credit;
    		try {      
    	        Class.forName(driverName);      
    	        dbConn = DriverManager.getConnection(dbURL, userName, userPwd); //连接服务器和数据库    
    	        System.out.println("Connection Successful!");   //如果连接成功 控制台输出Connection Successful!      
    	        }
    	    catch (Exception e) {      
    	            e.printStackTrace();     
    	            } 
            try {
    			System.out.print("请输入课程名: ");
    			couname = sc.next();
    			System.out.print("请输入课程号:");
    			couno = sc.next();
    			System.out.print("请输入该课程的基础课(无基础课填0000):");
    			cpno = sc.next();
    			System.out.print("请输入该课程的学分:");
    			credit = sc.next();
    			String addcou = "INSERT INTO [Course]([Cno],[Cname],[Cpno],[Ccredit]) VALUES(?,?,?,?)";
    			stmt = dbConn.prepareStatement(addcou);
    			stmt.setString(1,couno);
    			stmt.setString(2,couname);
    			stmt.setString(3,cpno);
    			stmt.setString(4,credit);
    			stmt.executeUpdate();
    			System.out.println("添加成功!");
    		}
    		catch(SQLException e) {
    			System.out.println("添加失败!");
    			e.printStackTrace();
    		}
    	}
    	public void DeleteCourse() {
    		String couno;
    		try {      
    	        Class.forName(driverName);      
    	        dbConn = DriverManager.getConnection(dbURL, userName, userPwd); //连接服务器和数据库    
    	        System.out.println("Connection Successful!");   //如果连接成功 控制台输出Connection Successful!      
    	        }
    	    catch (Exception e) {      
    	            e.printStackTrace();     
    	            } 
            try {
    			System.out.print("请输入课程号:");
    			couno = sc.next();
    			String delecou = "DELETE Course where Cno=?";
    			stmt = dbConn.prepareStatement(delecou);
    			stmt.setString(1,couno);
    			stmt.executeUpdate();
    			System.out.println("删除成功!");
    		}
    		catch(SQLException e) {
    			System.out.println("删除失败!");
    			e.printStackTrace();
    		}
    	}
    	public void DeleteScore() {
    		String couno;
    		String stuno;
    		try {      
    	        Class.forName(driverName);      
    	        dbConn = DriverManager.getConnection(dbURL, userName, userPwd); //连接服务器和数据库    
    	        System.out.println("Connection Successful!");   //如果连接成功 控制台输出Connection Successful!      
    	        }
    	    catch (Exception e) {      
    	            e.printStackTrace();     
    	            } 
            try {
            	System.out.print("请输入学号:");
    			stuno = sc.next();
    			System.out.print("请输入课程号:");
    			couno = sc.next();
    			String delesc = "DELETE SC where Grade in(SELECT Grade FROM SC where Sno=? and Cno=?)";
    			stmt = dbConn.prepareStatement(delesc);
    			stmt.setString(1,stuno);
    			stmt.setString(2,couno);
    			stmt.executeUpdate();
    			System.out.println("删除成功!");
    		}
    		catch(SQLException e) {
    			System.out.println("删除失败!");
    			e.printStackTrace();
    		}
    	}
    	public void UpdateScore() {
    		String couno;
    		String stuno;
    		String score;
    		try {      
    	        Class.forName(driverName);      
    	        dbConn = DriverManager.getConnection(dbURL, userName, userPwd); //连接服务器和数据库    
    	        System.out.println("Connection Successful!");   //如果连接成功 控制台输出Connection Successful!      
    	        }
    	    catch (Exception e) {      
    	            e.printStackTrace();     
    	            } 
            try {
            	System.out.print("请输入学号:");
    			stuno = sc.next();
    			System.out.print("请输入课程号:");
    			couno = sc.next();
    			System.out.print("请输入要改成的分数:");
    			score = sc.next();
    			String updatesc = "UPDATE SC SET Grade=? where Sno=? and Cno=?";
    			stmt = dbConn.prepareStatement(updatesc);
    			stmt.setString(1,score);
    			stmt.setString(2,stuno);
    			stmt.setString(3,couno);
    			stmt.executeUpdate();
    			System.out.println("修改成功!");
    		}
    		catch(SQLException e) {
    			System.out.println("修改失败!");
    			e.printStackTrace();
    		}
    	}
    	public void UpdateCourse() {
    		String couno;
    		String couname;
    		String precou;
    		String credit;
    		try {      
    	        Class.forName(driverName);      
    	        dbConn = DriverManager.getConnection(dbURL, userName, userPwd); //连接服务器和数据库    
    	        System.out.println("Connection Successful!");   //如果连接成功 控制台输出Connection Successful!      
    	        }
    	    catch (Exception e) {      
    	            e.printStackTrace();     
    	            } 
            try {
    			System.out.print("请输入课程号:");
    			couno = sc.next();
    			System.out.print("请输入要改成的课程名:");
    			couname = sc.next();
    			System.out.print("请输入要改成的基础课的课程号(无基础课填0000):");
    			precou = sc.next();
    			System.out.print("请输入要改成的学分:");
    			credit = sc.next();
    			String updatecou = "UPDATE Course SET Cname=?  where Cno=?;UPDATE Course SET Cpno=?  where Cno=?;UPDATE Course SET Ccredit=?  where Cno=?";
    			stmt = dbConn.prepareStatement(updatecou);
    			stmt.setString(1,couname);
    			stmt.setString(3,precou);
    			stmt.setString(5,credit);
    			stmt.setString(2,couno);
    			stmt.setString(4,couno);
    			stmt.setString(6,couno);
    			stmt.executeUpdate();
    			System.out.println("修改成功!");
    		}
    		catch(SQLException e) {
    			System.out.println("修改失败!");
    			e.printStackTrace();
    		}
    	}
    	public void SearchScore() {
    		String couno;
    		String stuno;
    		try {      
    	        Class.forName(driverName);      
    	        dbConn = DriverManager.getConnection(dbURL, userName, userPwd); //连接服务器和数据库    
    	        System.out.println("Connection Successful!");   //如果连接成功 控制台输出Connection Successful!      
    	        }
    	    catch (Exception e) {      
    	            e.printStackTrace();     
    	            } 
            try {
            	System.out.print("请输入学号:");
    			stuno = sc.next();
    			System.out.print("请输入课程号:");
    			couno = sc.next();
    			ResultSet rs=null;
    			String seasc = "SELECT * FROM SC where Sno=? and Cno=?";
    			stmt = dbConn.prepareStatement(seasc);
    			stmt.setString(1,stuno);
    			stmt.setString(2,couno);
    			rs=stmt.executeQuery();
    			System.out.println("查询结果如下:");
            	System.out.println("课程号"+"\t"+"学号"+"\t"+"分数");
            	System.out.println("------------------------");
            	String counum=null;
            	String stunum=null;
            	String score=null;
            	//没到数据库最后一条记录就继续
            	while(rs.next()) {
            		counum=rs.getString("Cno");
            		stunum=rs.getString("Sno");
            		score=rs.getString("Grade");
            		System.out.println(counum+"\t"+stunum+"\t"+score);
            	}
            	rs.close();
    		}
    		catch(SQLException e) {
    			System.out.println("查询失败!");
    			e.printStackTrace();
    		}
    	}
    	public void SearchCourse() {
    		String couno;
    		try {      
    	        Class.forName(driverName);      
    	        dbConn = DriverManager.getConnection(dbURL, userName, userPwd); //连接服务器和数据库    
    	        System.out.println("Connection Successful!");   //如果连接成功 控制台输出Connection Successful!      
    	        }
    	    catch (Exception e) {      
    	            e.printStackTrace();        
    	            } 
            try {
    			System.out.print("请输入课程号:");
    			couno = sc.next();
    			ResultSet rs=null;
    			String seacou = "SELECT * FROM Course where Cno=?";
    			stmt = dbConn.prepareStatement(seacou);
    			stmt.setString(1,couno);
    			rs=stmt.executeQuery();
    			System.out.println("查询结果如下:");
            	System.out.println("课程号"+"\t"+"课程名"+"\t"+"\t"+"基础课课程号"+"\t"+"学分");
            	System.out.println("----------------------------------------");
            	String counum=null;
            	String couname=null;
            	String precou=null;
            	String credit=null;
            	//没到数据库最后一条记录就继续
            	while(rs.next()) {
            		counum=rs.getString("Cno");
            		couname=rs.getString("Cname");
            		precou=rs.getString("Cpno");
            		credit=rs.getString("Ccredit");
            		System.out.println(counum+"\t"+couname+precou+"\t"+credit);
            	}
            	rs.close();
    		}
    		catch(SQLException e) {
    			System.out.println("查询失败!");
    			e.printStackTrace();
    		}
    	}
    	public void Statisticse() {
    		String couno;
    		try {      
    	        Class.forName(driverName);      
    	        dbConn = DriverManager.getConnection(dbURL, userName, userPwd); //连接服务器和数据库    
    	        System.out.println("Connection Successful!");   //如果连接成功 控制台输出Connection Successful!      
    	        }
    	    catch (Exception e) {      
    	            e.printStackTrace();     
    	            } 
            try {
    			System.out.print("请输入课程号:");
    			couno = sc.next();
    			ResultSet rs=null;
    			String sta = "SELECT * FROM SC where Cno=?";
    			stmt = dbConn.prepareStatement(sta);
    			stmt.setString(1,couno);
    			rs=stmt.executeQuery();
    			System.out.println("查询结果如下:");
            	System.out.println("课程号"+"\t"+"学号"+"\t"+"分数");
            	System.out.println("------------------------");
            	String counum=null;
            	String stunum=null;
            	int score=0;
            	int sum = 0;
            	int max = 0;
            	int min = 101;
            	double count = 0;
            	//没到数据库最后一条记录就继续
            	while(rs.next()) {
            		counum=rs.getString("Cno");
            		stunum=rs.getString("Sno");
            		score=rs.getInt("Grade");
            		sum=sum+score;
            		max=Math.max(score, max);
            		min=Math.min(score, min);
            		count++;
            		System.out.println(counum+"\t"+stunum+"\t"+score);
            	}
            	System.out.println("本门课程平均分为:"+sum/count);
            	System.out.println("最高分为:"+max);
            	System.out.println("最低分为:"+min);
            	rs.close();
    		}
    		catch(SQLException e) {
    			System.out.println("查询失败!");
    			e.printStackTrace();
    		}
    	}
    }
    

    Test.java

    import java.util.Scanner;
    public class Test {
    	public static void main(String[] args) {
    		Scanner input = new Scanner(System.in);
    		String choice = "1";
    		StudentManagement sm = new StudentManagement();
    		System.out.println("**********学生成绩管理系统********");
    		while(choice.equals("0") == false) {
    			System.out.println("1.添加某位学生成绩记录");
    			System.out.println("2.修改某位学生成绩记录");
    			System.out.println("3.删除某位学生成绩记录");
    			System.out.println("4.查看某位学生成绩记录");
    			System.out.println("5.查看课程记录");
    			System.out.println("6.添加课程记录");
    			System.out.println("7.删除课程记录");
    			System.out.println("8.修改课程记录");
    			System.out.println("9.统计某门课平均分,最高分和最低分");
    			System.out.println("0.退出程序");
    			System.out.print("Enter your choice: ");
    			choice = input.next();
    			switch(choice) {
    			    case "0": 
    			    	System.out.println("谢谢您的使用,欢迎下次光临!\n" + "**********按任意键结束程序**********"); 
    			    	input.close();
    			        break;
    			    
    			     case "1":
    			    	int j = 1;
    			    	do {
    			    	sm.AddScore();
    			    	System.out.println("\n是否继续添加?" + "\n" + "0.否" + "\n" + "1.是");
    			    	j = input.nextInt();
    			    	}while(j == 1);
    			    	System.out.println("请问您还需要什么服务?\n");
    			    	break;
    				
    			    case "2":
    			    	int i = 1;
    			    	do {
    			    	sm.UpdateScore();
    			    	System.out.println("\n是否继续修改?" + "\n" + "0.否" + "\n" + "1.是");
    			    	i = input.nextInt();
    			    	}while(i == 1);
    			    	System.out.println("请问您还需要什么服务?\n");
    			    	break;
    			    	
    			    case "3": 
    			    	sm.DeleteScore();
    			    	System.out.println("请问您还需要什么服务?\n");
    			    	break;
    				
    			    case "4":
    			    	sm.SearchScore();
    			    	System.out.println("请问您还需要什么服务?\n");
    			    	break;
    				
    			    case "5":
    			    	sm.SearchCourse();
    			    	System.out.println("请问您还需要什么服务?\n");
    			    	break;
    				
    			    case "6":
    			    	int k = 1;
    			    	do {
    			    	sm.AddCourse();
    			    	System.out.println("\n是否继续添加?" + "\n" + "0.否" + "\n" + "1.是");
    			    	k = input.nextInt();
    			    	}while(k == 1);
    			    	System.out.println("请问您还需要什么服务?\n");
    			    	break;
    				
    			    case "7":
    			    	sm.DeleteCourse();
    			    	System.out.println("请问您还需要什么服务?\n");
    			    	break;
    				case "8":
    			    	int l = 1;
    			    	do {
    			    	sm.UpdateCourse();
    			    	System.out.println("\n是否继续修改?" + "\n" + "0.否" + "\n" + "1.是");
    			    	l = input.nextInt();
    			    	}while(l == 1);
    			    	System.out.println("请问您还需要什么服务?\n");
    			    	break;
    			    case "9":
    			    	sm.Statisticse();
    			    	System.out.println("请问您还需要什么服务?\n");
    			    	break;	
    				default: 
    					System.out.println("Invalid input! Please enter again."); 
    				    break;
    			}
    			
    		}
    	}
    }
    

    数据库

    数据库代码借用前辈的代码后稍加修改
    数据库建表代码

    create table Student
    (
        Sno char(10)primary key,
        Sname char(10) unique,
        Ssex char(2) check (Ssex in ('男','女')), 
        Sage smallint check(Sage between 18 and 20),
        Sdept char(20),
    );
    create table Course(
    	Cno char(4) primary key, 
    	Cname char(20) not null,  
    	Cpno char(4),
    	Ccredit smallint,
    	foreign key (Cpno) references Course(Cno), 
    );
    create table SC(
    	Sno char(10),  
    	Cno char(4),
    	Grade smallint,
    	primary key(Sno,Cno), 
    	foreign key(Sno) references Student(Sno) on delete cascade,
    	foreign key(Cno) references Course(Cno) on delete cascade
    );
    insert into dbo.Student(Sno, Sname, Ssex, Sage, Sdept)
    values('60001','zhangsan','女',18,'art'),
    	  ('60002','lisi','女',18,'it'),
    	  ('60003','wangwu','女',18,'art'),
    	  ('60004','chenliu','女',18,'pe'),
    	  ('60005','tisi','女',18,'pe');
    	  
    INSERT INTO [Course]([Cno],[Cname],[Cpno],[Ccredit])
         VALUES	('0000','0000',null,0),		
         		('1000','c#','1002',100),
    			('1001','asp.net','1000',100),
    			('1002','c',null,100),
    			('1003','HTML',null,100),
    			('1004','python',null,100),
    			('1005','django','1004',100)
         
    GO
     
     
    INSERT INTO [SC]([Sno],[Cno],[Grade])
         VALUES('60001','1000','48'),
    			('60002','1003','98'),
    			('60001','1001','56'),
    			('60001','1004','83'),
    			('60001','1003','35'),
    			('60002','1002','71'),
    			('60003','1005','49'),
    			('60005','1002','37')
    GO
     
    	Cno char(4) primary key, 
    	Cname char(20) not null,  
    	Cpno char(4),
    	Ccredit smallint,
    	foreign key (Cpno) references Course(Cno), 
    );
    create table SC(
    	Sno char(10),  
    	Cno char(4),
    	Grade smallint,
    	primary key(Sno,Cno), 
    	foreign key(Sno) references Student(Sno),
    	foreign key(Cno) references Course(Cno)
    );
    insert into dbo.Student(Sno, Sname, Ssex, Sage, Sdept)
    values('60001','zhangsan','女',18,'art'),
    	  ('60002','lisi','女',18,'it'),
    	  ('60003','wangwu','女',18,'art'),
    	  ('60004','chenliu','女',18,'pe'),
    	  ('60005','tisi','女',18,'pe');
    	  
    INSERT INTO [Course]([Cno],[Cname],[Cpno],[Ccredit])
         VALUES('1000','c#','1002',100),
    			('1001','asp.net','1000',100),
    			('1002','c',null,100),
    			('1003','HTML',null,100),
    			('1004','python',null,100),
    			('1005','django','1004',100)
         
    GO
    
    
    INSERT INTO [SC]([Sno],[Cno],[Grade])
         VALUES('60001','1000','48'),
    			('60002','1003','98'),
    			('60001','1001','56'),
    			('60001','1004','83'),
    			('60001','1003','35'),
    			('60002','1002','71'),
    			('60003','1005','49'),
    			('60005','1002','37')
    GO
     
    
    

    无UI界面的简单学生管理系统就完成了
    仅供新手参考
    成绩表课程表学生表

    运行结果:
    学生成绩管理系统
    1.添加某位学生成绩记录
    2.修改某位学生成绩记录
    3.删除某位学生成绩记录
    4.查看某位学生成绩记录
    5.查看课程记录
    6.添加课程记录
    7.删除课程记录
    8.修改课程记录
    9.统计某门课平均分,最高分和最低分
    0.退出程序
    Enter your choice: 1
    Connection Successful!
    请输入学生的学号: 60003
    请输入课程号:1002
    请输入学生的成绩:99
    添加成功!

    是否继续添加?
    0.否
    1.是
    0
    请问您还需要什么服务?

    1.添加某位学生成绩记录
    2.修改某位学生成绩记录
    3.删除某位学生成绩记录
    4.查看某位学生成绩记录
    5.查看课程记录
    6.添加课程记录
    7.删除课程记录
    8.修改课程记录
    9.统计某门课平均分,最高分和最低分
    0.退出程序
    Enter your choice: 2
    Connection Successful!
    请输入学号:60002
    请输入课程号:1003
    请输入要改成的分数:96
    修改成功!

    是否继续修改?
    0.否
    1.是

    展开全文
  • 300来行python代码实现简易版学生成绩管理系统,供大家参考,具体内容如下使用链表来实现class Node(object):def __init__(self, data, pointer):self.data = dataself.next = pointer# 创建单链表class ...

    300来行python代码实现简易版学生成绩管理系统,供大家参考,具体内容如下

    使用链表来实现

    class Node(object):

    def __init__(self, data, pointer):

    self.data = data

    self.next = pointer

    # 创建单链表

    class SingleLinkedList(object):

    def __init__(self):

    self.head = Node(None, None)

    self.point = self.head

    def append(self, data):

    # 末尾追加节点

    new_node = Node(data, None)

    self.point.next = new_node

    self.point = new_node

    def insert(self, data, find):

    # 插入数据(前向插入数据)

    if not self.head.next:

    print('链表为空')

    return None

    new_node = Node(data, None)

    self.point = self.head

    while self.point.next.data != find:

    self.point = self.point.next

    if self.point.next is None:

    print('没有找到该元素')

    return None

    new_node.next = self.point.next

    self.point.next = new_node

    def delete(self, find):

    # 删除节点

    # 空链表

    if not self.head.next:

    print('链表为空')

    return None

    self.point = self.head

    while self.point.next.data != find:

    self.point = self.point.next

    pointer = self.point.next

    self.point.next = self.point.next.next

    del pointer

    def insert_after_head(self, data):

    node = Node(data, None)

    # bug 产生没写 if 返回

    if not self.head.next:

    self.head.next = node

    return None

    node.next = self.head.next

    self.head.next = node

    def reverse(self):

    local_list = SingleLinkedList()

    self.point = self.head

    count = 0

    while self.point.next:

    count += 1

    self.point = self.point.next

    data = self.point.data

    local_list.insert_after_head(data)

    return local_list

    def get_size(self):

    count = 0

    self.point = self.head

    while self.point.next:

    self.point = self.point.next

    count += 1

    return count

    def delete_by_tail(self, num):

    size = self.get_size()

    assert (num <= size)

    assert (num > 0)

    pos = size - num

    count = 0

    self.point = self.head

    while count < size:

    count += 1

    self.point = self.point.next

    if count == pos:

    pointer = self.point.next

    self.point.next = self.point.next.next

    del pointer

    # 求中间节点 只允许遍历一次

    def quick_middle(self):

    slow_point = self.head

    fast_point = self.head

    while fast_point.next.next:

    slow_point = slow_point.next

    fast_point = fast_point.next.next

    if not fast_point.next:

    break

    if fast_point.next:

    slow_point = slow_point.next

    return slow_point.data

    def check_circle(self):

    pass

    def sort(self):

    # get_size()改变了 self.point 的指向

    length = self.get_size()

    i, j = 0, 0

    flag = 1

    while i < length:

    self.point = self.head.next

    while j < length - i - 1:

    if self.point.data > self.point.next.data:

    temp = self.point.data

    self.point.data = self.point.next.data

    self.point.next.data = temp

    self.point = self.point.next

    j += 1

    flag = 0

    if flag:

    break

    i += 1

    j = 0

    def print(self):

    # 打印结点

    self.point = self.head

    while self.point.next:

    self.point = self.point.next

    print('{} ->'.format(self.point.data), end=' ')

    print('')

    class StudentControlSystem(SingleLinkedList):

    # 打印菜单

    def print_menu(self):

    print('*' * 30)

    print('-' * 13 + '菜单' + '-' * 13)

    print('1.增加学生信息')

    print('2.删除学生信息')

    print('3.修改学生信息')

    print('4.查找学生信息')

    print('5.显示所有信息')

    print('6.排序')

    print('0.退出程序')

    print('*' * 30)

    # 用户输入

    def user_input(self, item):

    try:

    item = int(item)

    except:

    pass

    # 增加信息

    if item == 1:

    self.add_info()

    # 删除信息

    elif item == 2:

    find = input('请输入删除的学号:')

    self.del_info(find=find)

    # 修改信息

    elif item == 3:

    self.modify_info()

    # 查找信息

    elif item == 4:

    self.search_info()

    # 显示信息

    elif item == 5:

    self.display_info()

    # 信息排序

    elif item == 6:

    self.rank_info()

    # 退出程序 保存数据

    elif item == 0:

    with open('database.txt', 'w') as f:

    self.point = self.head

    while self.point.next:

    self.point = self.point.next

    f.writelines('{} '.format(self.point.data))

    exit()

    else:

    print('请输入正确的数字')

    # id 保证互异性

    def unique_id(self, std_id):

    self.point = self.head

    while self.point.next:

    self.point = self.point.next

    if self.point.data['id'] == std_id:

    return False

    return True

    # 增加信息

    def add_info(self):

    # id 不能重复

    # 成绩不能超出范围

    name = input('姓名:')

    std_id = input('学生id:')

    while not self.unique_id(std_id=std_id):

    print('id重复')

    std_id = input('学生id:')

    grade = input('学生成绩:')

    if eval(grade) < 0 or eval(grade) > 100:

    print('超出范围')

    grade = input('学生成绩:')

    print(name, std_id, grade)

    print('请确认无误后保存')

    choice = input('y/n')

    items = ['y', 'yes', 'Y', 'Yes']

    if choice in items:

    print(choice)

    data = {'id': std_id, 'name': name, 'grade': grade}

    self.append(data)

    # 删除信息

    def del_info(self, find):

    print('请确认无误后保存')

    choice = input('y/n')

    items = ['y', 'yes', 'Y', 'Yes']

    if choice in items:

    if not self.head.next:

    print('链表为空')

    return None

    self.point = self.head

    while self.point.next.data['id'] != find:

    self.point = self.point.next

    pointer = self.point.next

    self.point.next = self.point.next.next

    del pointer

    # 序列逆序

    def reverse(self):

    local_list = StudentControlSystem()

    self.point = self.head

    count = 0

    while self.point.next:

    count += 1

    self.point = self.point.next

    data = self.point.data

    local_list.insert_after_head(data)

    return local_list

    # 序列排序

    def sort(self, item):

    length = self.get_size()

    i, j = 0, 0

    flag = 1

    while i < length:

    self.point = self.head.next

    while j < length - i - 1:

    if int(self.point.data[item]) > int(self.point.next.data[item]):

    # self.point.data, self.point.next.data =

    # self.point.next.data, self.point.data

    temp = self.point.data

    self.point.data = self.point.next.data

    self.point.next.data = temp

    self.point = self.point.next

    j += 1

    flag = 0

    if flag:

    break

    i += 1

    j = 0

    # 修改信息

    def modify_info(self):

    find = input('输入需要修改的学生的id:')

    if not self.head.next:

    print('链表为空')

    return None

    self.point = self.head

    while str(self.point.next.data['id']) != find:

    self.point = self.point.next

    if self.point.next is None:

    print('没有找到该元素')

    return None

    name = input('姓名:')

    grade = input('学生成绩:')

    self.point.next.data['name'] = name

    self.point.next.data['grade'] = grade

    # 搜索信息

    def search_info(self):

    find = input('输入需要查找的学生的id:')

    if not self.head.next:

    print('链表为空')

    return None

    self.point = self.head

    while str(self.point.next.data['id']) != find:

    self.point = self.point.next

    if self.point.next is None:

    print('没有找到该元素')

    return None

    data = self.point.next.data

    print('ID 姓名 成绩')

    print('{} {} {}'.format(data['id'], data['name'], data['grade']))

    # 信息排序

    def rank_info(self):

    choice = input('1.成绩排序 2.学号排序:')

    order = input('1.升序 2.降序:')

    if choice == '1':

    item = 'grade'

    elif choice == '2':

    item = 'id'

    else:

    return None

    self.sort(item=item)

    if order == '2':

    temp = self.reverse()

    temp.display_info()

    return None

    self.display_info()

    # 显示信息

    def display_info(self):

    self.point = self.head

    print('ID 姓名 成绩')

    while self.point.next:

    self.point = self.point.next

    data = self.point.data

    print('{} {} {}'.format(data['id'], data['name'], data['grade']))

    print('')

    def main():

    SCS = StudentControlSystem()

    try:

    with open('database.txt', 'r') as f:

    for data in f.readlines():

    SCS.append(eval(data))

    except:

    with open('database.txt', 'w') as f:

    pass

    while True:

    SCS.print_menu()

    item = input('请输入你的选择:')

    SCS.user_input(item)

    if __name__ == "__main__":

    main()

    运行后

    2020622160134226.jpg

    然后就可以插入与查询啦

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持python博客。

    展开全文
  • 学生成绩管理系统测试用例实验报告姓名:朱娜 学号: 0801102109 班级: 软件081实验内容: 学生成绩所测程序名称: 学生成绩管理所测程序作者: 所测程序作者学号:一 测试结果1.用户登陆界面测试结果用例ID输入...
  • JavaWeb学生成绩管理系统

    万次阅读 多人点赞 2018-07-06 21:12:05
    基于JavaWeb开发的学生成绩,使用MyEclipse2014开发,连接MySQL数据库,存储学生的身份信息、成绩,管理员的身份信息,课程信息。功能说明:学生注册。学生身份:跳转到学生登录界面,点击查询成绩按钮,以表格的形式...
  • 学生成绩管理系统(C语言、C++6.0) 控制台界面,可计算平均成绩等功能
  • C语言学生成绩管理系统

    千次阅读 多人点赞 2019-11-07 14:49:58
    学生成绩管理系统(C语言)需求代码总结 大学正式上课的第一个月10.8~11.7,学到了很多东西,收获颇多,刚入校只会用现成的,只会调用各种函数,把封装好的东西拿来用。...2. 设计“学生成绩管理系统”的用户界面...
  • 学生成绩管理系统实战练习之登陆界面
  • 学生成绩管理系统

    万次阅读 多人点赞 2018-06-02 13:58:58
    基于Jsp+sql server数据库的学生成绩管理系统需求分析学生成绩管理系统需求服务对象为在校学生和在校交工校教工. 整体分为学生模块和教师模块.学生模块 需求 :1:学生个体通过学号登录系统.2:网页页面显示学生信息...
  • JAVA学生成绩管理系统

    2010-06-26 21:31:21
    java写的学生成绩管理系统 用户登陆界面 连接数据库 查询学生成绩
  • MFC课程设计 --学生成绩管理系统

    万次阅读 多人点赞 2018-07-26 21:12:55
    MFC课程设计 ,C++课程设计 --学生成绩管理系统 ps:因为课设完成的过程大家都不太一样,以下的代码仅供学习一下在MFC下各个控件的用法,有问题欢迎留言讨论。     实验目的 使用MFC类库编制应用程序:按钮...
  • 界面学生成绩管理系统

    热门讨论 2010-12-23 20:26:48
    内容:学生成绩管理主要包括如下管理: 1) 学生档案管理 学生档案信息包括学号、姓名、性别、年级、专业、政治面貌 2) 课程管理 课程信息包括课程编号、课程名称、学时、学分、课程性质、开课学期 3) 成绩管理 ...
  • java学生成绩管理系统

    万次阅读 多人点赞 2016-04-12 14:33:51
    *@name:java学生成绩管理系统. *@功能:学生相关信息,录入,查询,统计,修改等.... *@PS:图形界面的学生管理系统不要求就不做了. */ import java.util.Scanner; import java.lang.*; import ja
  • 学生成绩管理系统的实现,通过C++编程语言实现,可以添加、查询、擅长、更改学生成绩 ,可以继续录入学生信息。点击退出按钮后,退出录入界面。点击返回主界面按钮后,返回学生成绩管理系统的主界面
  • WEB课设之学生成绩管理系统

    千次阅读 多人点赞 2019-07-18 17:40:44
    WEB课设之学生成绩管理系统 一、设计内容 学校每年都会有学生基本信息变动,也会举行期中期末考试。如何有效地管理这些学生的基本信息和成绩,帮助学校和老师掌握学生的基本情况,这就是学生成绩管理系统需要完成...
  • python大作业学生成绩管理系统,基于Python+MySQL的GUI界面,增减改查用户注册登录,信息导入导出。
  • 学生成绩管理系统——JAVA

    万次阅读 多人点赞 2020-07-18 14:31:21
    学生成绩管理系统 1.简介 本学生成绩管理系统具有录入学生成绩、查询学生成绩、输出学 生按成绩的排名、输出学科的分数四个功能,其中后两个功能在“输出成绩”这一目录下。 此系统可以实现学生成绩管理的一些基本...
  • (比较简陋,只有几个代码) 写一个小程序:学生管理系统。需求是学生信息录入:姓名,学号,班级,以及其他信息,针对不同课程,...3.以图形界面的方式统计各科学生成绩排名。 4.提供存储和读取学生成绩的图形界面
  • } } class dengru{ private JFrame frame = new JFrame("学生成绩管理系统"); private JButton submit = new JButton("登入"); private JButton reset = new JButton("重置"); private JLabel nameLab = new ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,769
精华内容 3,907
关键字:

学生成绩管理系统用户界面