精华内容
下载资源
问答
  • C语言开发简单的学生成绩管理系统(附源码)

    万次阅读 多人点赞 2019-04-15 21:08:22
    学生成绩管理系统 开发语言:C语言 开发工具:Visual Studio 2019 开发时间:2019.4.14 开发者:summer @一、系统使用展示 @二、系统功能 @三、菜单 @四、录入学生信息 @五、打印学生信息 @六、保存学生信息 @七、...

    学生成绩管理系统

    开发语言:C语言
    开发工具:Visual Studio 2019
    开发时间:2019.4.14
    开发者:summer
    CSDN源码下载:C语言开发简单的学生成绩管理系统
    Github项目源码下载:C语言开发简单的学生成绩管理系统
    百度网盘源码下载:链接:https://pan.baidu.com/s/1nF53PtRtbuFCNvG7hfylPw 提取码:ar5g

    @一、系统使用展示

    @二、系统功能

    @三、菜单

    @四、录入学生信息

    @五、打印学生信息

    @六、保存学生信息

    @七、读取学生信息

    @八、统计所有学生人数

    @九、查找学生信息

    @十、修改学生信息

    @十一、删除学生信息

    @十二、退出系统

    @十三、出错

    一、系统使用展示

    Alt

    二、系统功能

    1. 系统功能介绍
    1.录入学生信息:用户可以自由输入学生信息到系统中。
    2.打印学生信息:格式化展示系统中的学生信息。
    3.保存学生信息:将系统中的学生信息保存到本地文档。
    4.读取学生信息:读取本地文档中的学生信息并显示。
    5.统计所有学生人数
    6.查找学生信息:根据用户给定的信息(学号)在系统中查找该学生的信息
    7.修改学生信息
    8.删除学生信息
    0.退出系统
    
    1. 系统main函数,while循环在外,系统程序能够持续运行,switch判断语句进行功能选择与函数切换。
    int main() {
    	while (1)
    	{
    		//打印菜单
    		Menu();
    		//读取一个字符 整数,字符在内存中映射为ASCII码
    		char ch = _getch();
    
    		switch (ch)
    		{
    		case '1'://1.录入学生信息
    			InputStudent();
    			break;
    		case '2'://2.打印学生信息
    			PrintStudent();
    			break;
    		case '3'://3.保存学生信息
    			SaveStudent();
    			break;
    		case '4'://4.读取学生信息
    			ReadStudent();
    			break;
    		case '5'://5.统计所有学生人数
    			CountStudent();
    			break;
    		case '6'://6.查找学生信息
    			FindStudent();
    			break;
    		case '7'://7.修改学生信息
    			ChangeStudent();
    			break;
    		case '8'://8.删除学生信息
    			DeleteStudent();
    			break;
    		case '0'://0.退出系统
    			return 0;
    			break;
    		default:
    			printf("输入有误,没有该功能\n\n");
    			system("pause");  //暂停
    			system("cls");    //清屏
    			break;
    		}
    	}
    
    	return 0;
    }
    

    三、菜单

    1. 菜单显示
    //菜单
    void Menu() {
    	printf("*************************************************\n");
    	printf("*\t欢迎使用高校学生成绩管理系统V1.0\t*\n");
    	printf("*\t\t请选择功能\t\t\t*\n");
    	printf("*************************************************\n");
    	printf("*\t\t1.录入学生信息\t\t\t*\n");
    	printf("*\t\t2.打印学生信息\t\t\t*\n");
    	printf("*\t\t3.保存学生信息\t\t\t*\n");
    	printf("*\t\t4.读取学生信息\t\t\t*\n");
    	printf("*\t\t5.统计所有学生人数\t\t*\n");
    	printf("*\t\t6.查找学生信息\t\t\t*\n");
    	printf("*\t\t7.修改学生信息\t\t\t*\n");
    	printf("*\t\t8.删除学生信息\t\t\t*\n");
    	printf("*\t\t0.退出系统\t\t\t*\n");
    	printf("*************************************************\n");
    }
    
    1. 打印菜单

    scanf()、getchar()输入后均需要按enter,而getch()不用

    	//打印菜单
    	Menu();
    	//读取一个字符 整数,字符在内存中映射为ASCII码
    	char ch = _getch();
    

    四、录入学生信息

    1. 定义学生结构体、链表节点结构体
    //定义一个学生
    typedef struct tagStudent {
    	char szName[20];	//姓名
    	char szSex[4];		//性别
    	int  nAge;			//年龄
    	int  nStuNo;		//学号
    	int  nScore;		//成绩
    }Student;
    
    //链表
    //节点
    typedef struct tagNode
    {
    	Student stu;			//学生信息
    	struct tagNode* pNext;	//指向下一个节点
    }Node;
    
    //创建头节点
    Node* g_pHead = NULL;		//指向头节点
    
    1. 利用学生结构体,以及链表操作输入学生信息
    //1.录入学生信息
    void InputStudent() {
    	//创建一个人,在堆中分配内存
    	Node* pNewNode = (Node*)malloc(sizeof(Node));
    	//指针下一个指向空
    	pNewNode->pNext = NULL;
    
    	//查找链表的尾结点
    	Node* p = g_pHead;
    	while (g_pHead != NULL && p->pNext != NULL)
    	{
    		p = p->pNext;
    	}
    
    	//把节点插到链表的尾节点
    	if (g_pHead == NULL) {
    		g_pHead = pNewNode;
    	}
    	else {
    		p->pNext = pNewNode;
    	}
    
    	//录入学生信息
    	printf("请输入学生姓名:\n");
    	scanf_s("%s", pNewNode->stu.szName, sizeof(pNewNode->stu.szName));
    	printf("请输入性别:\n");
    	scanf_s("%s", pNewNode->stu.szSex, sizeof(pNewNode->stu.szSex));
    	printf("请输入学生年龄:\n");
    	scanf_s("%d", &pNewNode->stu.nAge);
    	printf("请输入学号:\n");
    	scanf_s("%d", &pNewNode->stu.nStuNo);
    	printf("请输入成绩:\n");
    	scanf_s("%d", &pNewNode->stu.nScore);
    
    	printf("学生信息录入成功。\n\n");
    	system("pause");
    	system("cls");
    }
    

    五、打印学生信息

    1. 读取链表结构,输出学生信息。先进行判空处理,如果无学生信息则输出提示信息,反之则正确输出学生信息。
    //2.打印学生信息
    void PrintStudent() {
    
    	system("cls");
    	//遍历链表
    	Node* p = g_pHead;
    	if (p == NULL) {
    		printf("系统中暂无学生信息,请录入后再来打印查看。\n\n");
    	}
    	else {
    		printf("*********************************************************************************\n");
    		printf("*\t\t\t欢迎使用高校学生成绩管理系统V1.0\t\t\t*\n");
    		printf("*********************************************************************************\n");
    		printf("*\t学号\t*\t姓名\t*\t性别\t*\t年龄\t*\t成绩\t*\n");
    		printf("*********************************************************************************\n");
    
    		while (p != NULL)
    		{
    			printf("*\t%d\t*\t%s\t*\t%s\t*\t%d\t*\t%d\t*\n",
    				p->stu.nStuNo,
    				p->stu.szName,
    				p->stu.szSex,
    				p->stu.nAge,
    				p->stu.nScore
    			);
    
    			//下一个节点
    			p = p->pNext;
    			printf("*********************************************************************************\n");
    		}
    	}
    
    	system("pause");
    	system("cls");
    }
    

    六、保存学生信息

    1. 利用文件对学生信息进行存储
    //3.保存学生信息
    void SaveStudent() {
    	//打开文件
    	FILE* pFile;
    	pFile = fopen(".\\stuinfo.dat", "w");
    	
    	if (pFile == NULL) {
    		printf("打开文件失败。\n");
    		return;
    	}
    
    	//写入数据
    	Node* p = g_pHead;
    	while (p != NULL)
    	{
    		fwrite(&p->stu, sizeof(Node), 1, pFile);
    		p = p->pNext;
    	}
    
    	//关闭文件
    	fclose(pFile);
    
    	printf("数据保存成功。\n");
    	system("pause");
    	system("cls");
    }
    
    1. fopen在vs中会报错,解决方式

    (1)按照vs的提示,将fopen换成fopen_s

    (2)不修改函数,仅仅修改项目的属性。因为fopen_s是一种Microsoft的函数,若纯做Windows开发则直接改为_s也无妨,但是我们尽量还是用标准C++比较好,这样代码有较好的移植性。

    具体操作:

    右键工程名–>属性–>C/C++–>预处理器–>预处理器定义,编辑右边输入框加入: _CRT_SECURE_NO_WARNINGS

    保存(注意用分号隔开)。

    七、读取学生信息

    1. 打开存储学生信息的文本,单个单词读取,判断非分隔符或者空时则赋值给链表中的节点,读取完毕后,直接调用PrintStudent()函数进行打印结果。
    //4.读取学生信息
    void ReadStudent() {
    	system("cls");
    
    	//打开文件
    	FILE* pFile;
    	pFile = fopen(".\\stuinfo.dat", "r");
    
    	if (pFile == NULL) {
    		printf("打开文件失败。\n");
    		return;
    	}
    	
    	//创建一个人,在堆中分配内存
    	Node* p = (Node*)malloc(sizeof(Node));
    	p->pNext = NULL;
    	//重新建立链表
    	g_pHead = p;
    
    	//逐个单词读入文本内容
    	char str[200];
    	int i = 0;
    	while (fscanf(pFile, "%s", str) != EOF) {  //读文件 
    		//单词不是*或者空时,进行赋值
    		if (strcmp(str, "*") && str != NULL) {
    			switch (i)
    			{
    			case 0:
    				p->stu.nStuNo = atoi(str);
    				break;
    			case 1:
    				strcpy(p->stu.szName, str);
    				break;
    			case 2:
    				strcpy(p->stu.szSex, str);
    				break;
    			case 3:
    				p->stu.nAge = atoi(str);
    				break;
    			case 4:
    				p->stu.nScore = atoi(str);
    				break;
    			default:
    				Node* pNewNode = (Node*)malloc(sizeof(Node));
    				pNewNode->pNext = NULL;
    				p->pNext = pNewNode;
    				p = pNewNode;
    				p->stu.nStuNo = atoi(str);
    				i = 0;
    				break;
    			}
    			i++;
    		}
    	}
    	//打印读取结果
    	PrintStudent();
    }
    
    1. 读取文本时,将内容全部赋值给char数组,所有赋值时需特殊处理。
    • char数组赋值给整数

      在<stdlib.h>头文件中有两个函数,int atoi(char *p)和char *itoa(int p),分别将装有整数的char数组转化为整数,和将整数按位数分解依次存入char数组中。

    • char数组赋值给char数组

      用strcpy函数!

      原型声明:extern char *strcpy(char *dest,char *src);

      头文件:string.h

      功能:把src所指由NULL结束的字符串复制到dest所指的数组中。

      说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

      返回指向dest的指针。

      注:不能使用memcpy(a, b, strlen(b)),会导致中文乱码。

    八、统计所有学生人数

    1. 设置计数器,遍历链表
    //5.统计所有学生人数
    void CountStudent() {
    	int countStu = 0;
    
    	//遍历链表
    	Node* p = g_pHead;
    	while (p != NULL)
    	{
    		countStu++;
    		p = p->pNext;
    	}
    	printf("学生总人数:%d\n\n", countStu);
    
    	system("pause");
    	system("cls");
    }
    

    九、查找学生信息

    1. 本次查找以学号为示例,改用姓名等信息查询流程基本一致。

      遍历链表,如果有符合信息的学生则打印,反之则继续下一个节点,若系统中无该学生信息,给予用户无结果提示。

    //6.查找学生信息
    void FindStudent() {
    	system("cls");
    	//以学号为查找示例,其他信息查找流程基本相似
    	int stuNum;
    	printf("请输入查找学生学号:");
    	scanf("%d", &stuNum);
    	//遍历链表查找,查找到后进行信息显示
    	Node* p = g_pHead;
    	//对表头进行展示一次
    	bool isShowHead = false;
    	//记录是否有找到该学号的学生信息
    	bool isFindStu = false;
    	while (p != NULL)
    	{
    		if (stuNum == p->stu.nStuNo) {
    			if (!isShowHead) {
    				printf("*********************************************************************************\n");
    				printf("*\t学号\t*\t姓名\t*\t性别\t*\t年龄\t*\t成绩\t*\n");
    				printf("*********************************************************************************\n");
    				isShowHead = true;
    			}
    			printf("*\t%d\t*\t%s\t*\t%s\t*\t%d\t*\t%d\t*\n",
    				p->stu.nStuNo,
    				p->stu.szName,
    				p->stu.szSex,
    				p->stu.nAge,
    				p->stu.nScore
    			);
    			isFindStu = true;
    			printf("*********************************************************************************\n");
    		}
    		p = p->pNext;
    	}
    
    	if (!isFindStu) {
    		printf("学号输入有误,系统中暂无该学生信息。\n\n");
    	}
    
    	system("pause");
    	system("cls");
    }
    

    十、修改学生信息

    1. 可参考查找学生信息代码段,在查找后进行修改即可
    //7.修改学生信息
    void ChangeStudent() {
    	//以学号为查找示例,其他信息查找流程基本相似
    	int stuNum;
    	printf("请输入欲修改学生的学号:");
    	scanf("%d", &stuNum);
    	//遍历链表查找,查找到后进行信息显示
    	Node* p = g_pHead;
    	//对表头进行展示一次
    	bool isShowHead = false;
    	//记录是否有找到该学号的学生信息
    	bool isFindStu = false;
    	while (p != NULL)
    	{
    		if (stuNum == p->stu.nStuNo) {
    			if (!isShowHead) {
    				printf("*********************************************************************************\n");
    				printf("*\t学号\t*\t姓名\t*\t性别\t*\t年龄\t*\t成绩\t*\n");
    				printf("*********************************************************************************\n");
    				isShowHead = true;
    			}
    			printf("*\t%d\t*\t%s\t*\t%s\t*\t%d\t*\t%d\t*\n",
    				p->stu.nStuNo,
    				p->stu.szName,
    				p->stu.szSex,
    				p->stu.nAge,
    				p->stu.nScore
    			);
    			//修改学生信息
    			printf("请输入学生姓名:\n");
    			scanf_s("%s", p->stu.szName, sizeof(p->stu.szName));
    			printf("请输入性别:\n");
    			scanf_s("%s", p->stu.szSex, sizeof(p->stu.szSex));
    			printf("请输入学生年龄:\n");
    			scanf_s("%d", &p->stu.nAge);
    			printf("请输入学号:\n");
    			scanf_s("%d", &p->stu.nStuNo);
    			printf("请输入成绩:\n");
    			scanf_s("%d", &p->stu.nScore);
    			isFindStu = true;
    			printf("*********************************************************************************\n");
    			printf("学生信息修改成功,请注意及时保存。\n\n");
    		}
    		p = p->pNext;
    	}
    
    	if (!isFindStu) {
    		printf("学号输入有误,系统中暂无该学生信息,无法进行修改。\n\n");
    	}
    
    	system("pause");
    	system("cls");
    }
    

    十一、删除学生信息

    1. 仍然以查找学生信息操作为基础,以学号为线索,查找到则进行删除,未查找到则进行错误提示,删除时需要区分当前节点是头结点、尾节点或者中间节点,不同节点操作不同,同时该删除仅作用于本次操作,需保存学生信息才能长久生效。
    //8.删除学生信息
    void DeleteStudent() {
    	system("cls");
    	//以学号为查找示例,其他信息查找流程基本相似
    	int stuNum;
    	printf("请输入删除学生的学号:");
    	scanf("%d", &stuNum);
    	//遍历链表查找,查找到后进行信息显示
    	Node* p = g_pHead;
    	//记录前一个节点,删除时方便操作
    	Node* beforeNode = g_pHead;
    
    	//对表头进行展示一次
    	bool isShowHead = false;
    	//记录是否有找到该学号的学生信息
    	bool isFindStu = false;
    	while (p != NULL)
    	{
    		if (stuNum == p->stu.nStuNo) {
    			if (!isShowHead) {
    				printf("*********************************************************************************\n");
    				printf("*\t学号\t*\t姓名\t*\t性别\t*\t年龄\t*\t成绩\t*\n");
    				printf("*********************************************************************************\n");
    				isShowHead = true;
    			}
    			printf("*\t%d\t*\t%s\t*\t%s\t*\t%d\t*\t%d\t*\n",
    				p->stu.nStuNo,
    				p->stu.szName,
    				p->stu.szSex,
    				p->stu.nAge,
    				p->stu.nScore
    			);
    			isFindStu = true;
    			printf("*********************************************************************************\n");
    
    			//删除节点为头节点
    			if (p == g_pHead) {
    				g_pHead = p->pNext;
    			}
    			//删除节点为尾节点
    			else if (p->pNext == NULL) {
    				p = beforeNode;
    				p->pNext = NULL;
    			}
    			//删除节点为中间节点
    			else {
    				beforeNode->pNext = p->pNext;
    			}
    			printf("删除成功,请记得保存。\n\n");
    		}
    		beforeNode = p;
    		p = p->pNext;
    	}
    
    	if (!isFindStu) {
    		printf("学号输入有误,系统中暂无该学生信息,无法进行删除操作。\n\n");
    	}
    
    	system("pause");
    	system("cls");
    }
    

    十二、退出系统

    直接在选择0时,设置return即可。

    十三、出错

    用户输入有误时,进行提示信息输出即可。

    	printf("输入有误,没有该功能\n\n");
    	system("pause");  //暂停
    	system("cls");    //清屏
    

    展开全文
  • 成绩管理系统

    2019-06-30 00:20:00
    1、开发的项目:成绩管理系统 2、项目内容和功能描述: 某高校欲开发一个成绩管理系统,记录并管理所有选修课程的学生的平时成绩和考试成绩,其主要功能描述如下: (1)每门课程都有3到6个单元构成,每个单元...

    一、开发的项目内容及要求

    1、开发的项目:成绩管理系统

    2、项目内容和功能描述:

    某高校欲开发一个成绩管理系统,记录并管理所有选修课程的学生的平时成绩和考试成绩,其主要功能描述如下:

    1)每门课程都有3到6个单元构成,每个单元结束后会进行一次测试,其成绩作为这门课程的平时成绩。课程结束后进行期末考试,其成绩作为这门课程的考试成绩。

    2)学生的平时成绩和考试成绩均由每门课程的主讲教师上传给成绩管理系统。

    3)在记录学生成绩之前,系统需要验证这些成绩是否有效。首先,根据学生信息文件来确认该学生是否选修这门课程,若没有,那么这些成绩是无效的;如果他的确选修了这门      课程,再根据课程信息文件和课程单元信息文件来验证平时成绩是否与这门课程所包含的单元相对应,如果是,那么这些成绩是有效的,否则无效。

    4)对于有效成绩,系统将其保存在课程成绩文件中。对于无效成绩,系统会单独将其保存在无效成绩文件中,并将详细情况提交给教务处。在教务处没有给出具体处理意见之    前,系统不会处理这些成绩。

    5)若一门课程的所有有效的平时成绩和考试成绩都已经被系统记录,系统会发送课程完成通知给教务处,告知该门课程的成绩已经齐全。教务处根据需要,请求系统生成相应的成绩列表,用来提交考试委员会审查。

    6)在生成成绩列表之前,系统会生成一份成绩报告给主讲教师,以便核对是否存在错误。主讲教师须将核对之后的成绩报告返还系统。

    7)根据主讲教师核对后的成绩报告,系统生成相应的成绩列表,递交考试委员会进行审查。考试委员会在审查之后,上交一份成绩审查结果给系统。对于所有通过审查的成绩,系统将会生成最终的成绩单,并通知每个选课学生。

     

    一、相关工具平台简介

    1、eclipse

    Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

    Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,通过安装不同的插件Eclipse可以支持不同的计算机语言,比如C++和Python等开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。

    2、MySQL

       MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。

    MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

    MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

     

    二、系统需求分析与总体设计

    1、需求分析

    1)教师客户端功能

    ①可以更改密码。

    ②可以添加学生,并填写学生基本信息。

    ③可以根据学号查询学生基本信息及成绩。

    ④有权限控制,每个管理员只能管理其所在学院的信息。

    ⑤可以添加新课程、新班级。

    ⑥可以控制选课的课程范围,并可以控制选课的时间,即可以  控制选课的开始与结束。

    ⑦可以录入成绩,缓存成绩。检查无误后公布成绩。

    (2)学生客户端功能

      ①学生可以查看自己的基本信息。

      ②学生可以查看自己的成绩。已修学分和不及格成绩信息。

      ③学生可以进行远程选课,并且可以查看课表。

     

    UML用例图

     

    系统结构图

     

    四、数据库设计

    1、数据库设计介绍

    在该数据库中课程表是记录各学院所开设课程的基本信息,包括课程号,课程名,课程学分,所属专业号,所属学院号。

    可选课程信息表是记录本学期安排的课程信息,包括课程号,上课时间,讲次,任课教师,还有一个用于控制选课的字段(onchosing),当该字段值为1说明该课程可选,当该字段为0时说明该课程不可选。

    学生表是用来记录学生的基本信息,包括学生的学号,姓名,性别等信息。

    学生用户表是用来记录学生的学号和登录密码的。

    教师用户表是用来记录教师的用户名和登录密码的。

    1、E-R图

    3、数据表

    数据库中共有九张表:

    数据库中存储的信息如下:

    班级表

     

    学院表、专业表

     

    课程表

     

    学生表

     

    学生用户表、教师用户表

     

    五、系统实现

      教师客户端的功能为:

      其中退出模块为退出该系统

      密码修改模块为修改教师的登录密码

      新生报到模块为填写学生信息,增加一名新的学生

      基本信息查询模块为输入学生学号,查询学生的信息

      成绩查询模块为输入学生学生,查询该学生的课程成绩。

      开课选项设置模块为将课程表中的课加入到可选课程信息表,并且在加入时选定上课时间以及讲次,并设置上课老师,提交该课程之后将该记录加入到可选课程信息表中选课程信息表中。同时也可以从可选课程信息表中移除课程。

      添加课程模块实现往课程表中添加课程。

      增加班级模块实现向该学院的某个专业添加班级。

    学生客户端的功能为:

    其中退出模块为退出该系统。

    密码修改模块为修改当前所登录的学生的登录密码。

    个人基本信息模块为查看自己的信息。

    选课模块为在其所在学院开放选课时选课。

    课表显示模块为显示该学生的课表。

    已修课程成绩为查看该学生已经选修的课程的成绩以及所修得的学分。

    不及格课程成绩为查看该学生的不及格课程的成绩

     

    系统测试

    进入系统后进入登录界面

     

    当用户输入信息,选择身份以后,系统会连接数据库 对照数据库中的学生用户表或教师用户表判断用户名 与密码是否匹配,如果匹配,则进入相应客户端。

    进入教师客户端:

     

    进入学生客户端:

    学生客户端和教师客户端的主界面的设计左边都是基于树状列表控件设计的,右边是一个卡片布局面板的窗体,程序中先对面板和主窗体进行初始化,然后对树的各个结点注册监听器,再调用相应的方法。

    退出登录:

    实现为当用户点击退出时,显示询问对话框

    如果用户选择是的时候调用System.exit(0)退出系统

    修改密码:

    需要判断新密码输入是否为空,不为空则获得该密码,再判断是否符合正则表达式,如果符合则判断新密码与确认新密码是否相同,如果相同则在按下确认键后修改密码。

    新生报到:

    实现向这个数据库里添加一个新来的学生

    一个教师只能向他所在的学院里面添加学生,而不能把学生添加到别的学院去。

    其中班级的下拉列表的实现利用到了三个Map

    一个Map中键是专业名,值是专业号

    一个Map中键是班级名,值是班级号

    另一个Map的键专业号,值是存放班级的那个Map

    当用户选择好专业以后,可以根据第一个Map得到专业号,再用专业号得到存放班级的那个Map,最后再得到所选专业的所有班级名

    基本信息查询

    在教师端和学生端都有,所不同的是教师端可以根据学号查看所有学生的信息,而学生端只能查看自己的信息

    成绩查询

    教师客户端查询成绩                                        学生客户端查询全部成绩

    学生客户端查询不及格成绩

    教师端和学生端都有,所不同的是教师端可以根据学号查看所有学生的成绩,而学生端只能查看自己的成绩。而且学生端还有查询不及格课程成绩的功能。

    教师客户端的开课选项设置

    实现了将课程表中的课安排好上课时间以及讲次,老师,然后添加到可选课程信息表里面。并且控制学生什么时候选课,选什么课,什么时候选课结束。

    课程成绩录入

     

     

    由教师录入学生成绩,在检查无误后,按下公布该科成绩单来完成数据库的更新。

    添加课程:

    允许教师向自己所在学院添加课程。

    增加班级模块允许教师向自己所在学院的任何一个专业增加班级。

     

    允许教师向自己所在学院的任何一个专业增加班级。

    学生客户端的选课

    可以实现学生从教师允许选课的课程中选择课程。

    学生客户端的课表显示

    实现展示该学生所选课程的上课信息。

     

     

    转载于:https://www.cnblogs.com/ku1274755259/p/11108391.html

    展开全文
  • C语言学生成绩管理系统源代码

    万次阅读 多人点赞 2018-03-21 20:27:20
    大学C语言实训课,C语言学生成绩管理系统。 #include<stdio.h> #include<string.h> #include<math.h> struct student { int num; char name[20]; float pingshi; float shiyan; ...

    分享:C语言学生成绩管理系统设计 《C语言程序设计》实训报告

    扫描下方公众号,发送 成绩系统 4个字,获取下载源码

    扫描上方二维码,回复 999 直接获取作者之前收藏的学习资源,谢谢网友们的分享。

    回复 系统大全,即可获得关于C语言管理系统比较全面的文章内容,覆盖全网(有点夸张,但仍在更新补充中)

    以后有时间再给大家继续分享,有任何问题欢迎留言区交流。

    大学C语言实训课,C语言学生成绩管理系统。

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    struct student
    	{
    		int num;
    		char name[20];
    		float pingshi;
    		float shiyan;
    		float kaoshi;
    		double zongping;
    	}stu[4];
    void main()
    {
    	void a();
    	void b();
    	void c();
    	void d();
    	void e();
    	int n;
    	while(n!=6)
    	{	printf("\t大学计算机基础成绩管理系统\n");
    		printf("1:输入一个班学生大学计算机基础成绩记录\n");
    		printf("2:显示所有成绩记录\n");
    		printf("3:计算并输出平均成绩,均方差\n");
    		printf("4:输出成绩与排名\n");
    		printf("5:结果存入文件chengji.txt\n");
    		printf("6:退出系统\n");
    		printf("输入选项代码:");
    		scanf("%d",&n);
    		switch(n)
    		{
    			case 1:a();break;
    			case 2:b();break;
    			case 3:c();break;
    			case 4:d();break;
    			case 5:e();break;
    			case 6:printf("\n*******************谢谢使用!*******************\n");break;
    			break;    
    		}	
    	}
    getchar();
    }
    /* 子  函  数*/
    void a() /* 输入一个班的学生记录*/
    
    {
    	int i;
    
    	for(i=0;i<4;i++)
    
    	{   
    
    		printf("请输入学号 姓名 平时成绩 实验成绩 考试成绩:");
    
    		scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].pingshi,&stu[i].shiyan,&stu[i].kaoshi);
    		
    	}for(i=0;i<4;i++)
    stu[i].zongping=0.1*stu[i].pingshi+0.3*stu[i].shiyan+0.6*stu[i].kaoshi;
    }
    void b()/* 显示所有记录*/
    
    {
    	int i;
    
    	printf("学号        姓名       平时成绩       实验成绩      考试成绩     总评成绩\n");
    
    	for(i=0;i<4;i++)
    
    		printf("%d%14.2s%14.2f%14.2f%14.2f%14.2f\n",stu[i].num,stu[i].name,stu[i].pingshi,stu[i].shiyan,stu[i].kaoshi,stu[i].zongping);
    
    }
    
    void c()/* 求出全班平均成绩,显示均方差*/
    {  
    	int a[4]={0,1,2,3};
        int i,j;
        double total=0,pfc=0,bzc=0;
        double ave;
        for(i=0;i<4;i++)
    	{
    		total=total+stu[i].zongping;
    	}
        ave=total/4.0;
        printf("总评平均成绩是%f\n",ave);
    	for(i=0;i<4;i++)
    	{
    		pfc=pow((stu[i].zongping-ave),2)/4;
    	}
    	bzc=sqrt(pfc);
    	printf("\n平方差是%f\n",pfc);
    	printf("\n标准差是%f\n",bzc);
    }
    void d()
    
    {
    	int a[4]={0,1,2,3};
    	int i,j,temp;
    	for(j=0;j<3;j++)
    	{
    		for(i=0;i<3-j;i++)
    		if(stu[a[i]].zongping>stu[a[i+1]].zongping)
    		{	
    			temp=a[i];a[i]=a[i+1];
    			a[i+1]=temp;
    
    		}
    	}
    
    	printf("顺序为:\n");
    
    	printf("学号     姓名      总评成绩\n");
    
    	for(i=0;i<4;i++)
    
    		printf("%d%10.2s%15.2f\n",stu[a[i]].num,stu[a[i]].name,stu[a[i]].zongping);
    
    	printf("\n");
    
    }
    
    void e()
    {int i;
    FILE *fp;
    fp=fopen("chengji.txt","w");
    
    	fprintf(fp,"学号        姓名       平时成绩       实验成绩      考试成绩     总评成绩\n");
    
    	for(i=0;i<4;i++)
    
    		fprintf(fp,"%d%14.2s%14.2f%14.2f%14.2f%14.2f\n",stu[i].num,stu[i].name,stu[i].pingshi,stu[i].shiyan,stu[i].kaoshi,stu[i].zongping);
    
    printf("\n\n*******************恭喜,保存完成!*******************\n\n");
    }
    

    简单记录。

    关注微信公众号“资料在线”,回复“C语言源码”,即可获得C语言源码包

    更多资源等着你

    最新文章:C语言学生成绩管理系统设计 《C语言程序设计》实训报告

     

    展开全文
  • jsp成绩管理系统
  • 学生成绩管理系统学生成绩管理系统学生成绩管理系统学生成绩管理系统学生成绩管理系统学生成绩管理系统学生成绩管理系统学生成绩管理系统学生成绩管理系统学生成绩管理系统
  • 学生成绩管理系统(基于文件的MFC) mfc学生成绩管理系统 C++学生成绩管理系统
  • 学生成绩管理系统jsp版学生成绩管理系统jsp版学生成绩管理系统jsp版学生成绩管理系统jsp版学生成绩管理系统jsp版学生成绩管理系统jsp版学生成绩管理系统jsp版学生成绩管理系统jsp版学生成绩管理系统jsp版
  • 优索科技教务管理系统主要的功能有基本设置系统,学生管理系统,教师管理系统,课程管理系统,课程表查询,公用信息系统,成绩管理系统,教师评价系统,证书管理系统,在线报名
  • JavaWeb学生成绩管理系统

    万次阅读 多人点赞 2018-07-06 21:12:05
    基于JavaWeb开发的学生成绩,使用MyEclipse2014开发,连接MySQL数据库,存储学生的身份信息、成绩管理员的身份信息,课程信息。功能说明:学生注册。学生身份:跳转到学生登录界面,点击查询成绩按钮,以表格的形式...

    基于JavaWeb开发的学生成绩,使用MyEclipse2014开发,连接MySQL数据库,存储学生的身份信息、成绩,管理员的身份信息,课程信息。

    功能说明:

    学生注册。学生身份:跳转到学生登录界面,点击查询成绩按钮,以表格的形式在该页面显示该学生所有成绩。管理员身份:进入功能选择页面,以列表形式显示超链接,录入成绩、修改成绩、查询成绩。录入成绩页面中,管理员输入学号、课程号和成绩进行录入,点击添加跳出弹框提示是否录入成功;查询成绩界面,可选择按学号查询和按课程号查询,在页面下方以表格形式显示成绩;修改成绩界面,先按学号或课程号查询出成绩,显示当前成绩,可进行修改、删除操作,跳出弹框显示是否修改成功。

    1.编写JavaBean,保存信息:

    1.1学生信息Student.java

    package beans;
    
    public class Student {
    	private String studentid;
    	private String studentname;
    	private String password;
    	public Student(){}
    	public Student(String studentid,String studentname,String password){
    		this.studentid=studentid;
    		this.studentname=studentname;
    		this.password=password;
    	}
    	public String getStudentid(){
    		return studentid;
    	}
    	public void setStudentid(String studentid){
    		this.studentid=studentid;
    	}
    	public String getStudentname(){
    		return studentname;
    	}
    	public void setStudentname(String studentname){
    		this.studentname=studentname;
    	}
    	public String getPassword(){
    		return password;
    	}
    	public void setPassword(String password){
    		this.password=password;
    	}
    }

    1.2管理员信息Admin.java

    package beans;
    
    public class Admin {
    	private String adminid;
    	private String adminname;
    	private String password;
    	public Admin(){}
    	public Admin(String adminid,String adminname,String password){
    		this.adminid=adminid;
    		this.adminname=adminname;
    		this.password=password;
    	}
    	public String getAdminid(){
    		return adminid;
    	}
    	public void setAdminid(String studentid){
    		this.adminid=studentid;
    	}
    	public String getAdminname(){
    		return adminname;
    	}
    	public void setAdminname(String studentname){
    		this.adminname=studentname;
    	}
    	public String getPassword(){
    		return password;
    	}
    	public void setPassword(String password){
    		this.password=password;
    	}
    }

    1.3课程信息Course.java

    package beans;
    
    public class Course {
    	private String courseid;
    	private String coursename;
    	public String getCourseid() {
    		return courseid;
    	}
    	public void setCourseid(String courseid) {
    		this.courseid = courseid;
    	}
    	public String getCoursename() {
    		return coursename;
    	}
    	public void setCoursename(String coursename) {
    		this.coursename = coursename;
    	}
    
    }

    1.4学生分数Score.java

    package beans;
    
    public class Score {
    	private String studentid;
    	private String studentname;
    	private String courseid;
    	private String coursename;
    	private String score;
    	public Score(){}
    	public Score(String studentid,String courseid,String coursename,String score){
    		this.studentid=studentid;
    		this.courseid=courseid;
    		this.coursename=coursename;
    		this.score=score;
    	}
    	public String getStudentid(){
    		return studentid;
    	}
    	public void setStudentid(String studentid){
    		this.studentid=studentid;
    	}
    	public String getScore(){
    		return score;
    	}
    	public void setScore(String score){
    		this.score=score;
    	}
    	public String getStudentname() {
    		return studentname;
    	}
    	public void setStudentname(String studentname) {
    		this.studentname = studentname;
    	}
    	public String getCourseid() {
    		return courseid;
    	}
    	public void setCourseid(String courseid) {
    		this.courseid = courseid;
    	}
    	public String getCoursename() {
    		return coursename;
    	}
    	public void setCoursename(String coursename) {
    		this.coursename = coursename;
    	}
    }

    2.编写DAO,连接数据库,并定义相关查询分数、增加成绩、删除成绩方法

    2.1CourseDAO.java。通过课程号查找课程名方法。

    package DAO;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import beans.Course;
    import beans.Student;
    
    public class CourseDAO {
    	private static Connection conn=null;
    	
    	public static void initConnection() throws Exception{//建立连接
    		Class.forName("com.mysql.jdbc.Driver");
    	    conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/school","root","7277991");
    	}
    	
    	public static Course findclasses(String courseid) throws Exception{//查找课程
    	initConnection();
    	Statement state =null;
    	ResultSet rs = null;
    	Course course=new Course();
    	try{
    	String sql = "select * from course where courseid = '"+courseid+"'";
    	state = conn.createStatement();
    	rs=state.executeQuery(sql);
    	if(rs.next()){
    		course.setCourseid(rs.getString("courseid"));
    		course.setCoursename(rs.getString("coursename"));
    	}
    	}catch(Exception e){
    		e.printStackTrace();
    		}finally{
    		closeConnection();
    	}
    	return course;
    	}
    	
    	public static void closeConnection() throws Exception{//断开连接
    		conn.close();
    	}
    }

    2.2UserDAO.java。登录时通过学号或管理员账号查找学生或管理员进行登录验证。注册时学生信息增加。

     package DAO;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import beans.Admin;
    import beans.Student;
    
    public class UserDAO {
    	private static Connection conn=null;
    	
    	public static void initConnection() throws Exception{//建立连接
    		Class.forName("com.mysql.jdbc.Driver");
    	    conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/school","root","7277991");
    	}
    	
    	public static Student findstudent(String studentid) throws Exception{//查找学生
    	initConnection();
    	Statement state =null;
    	ResultSet rs = null;
    	Student student=new Student();
    	try{
    	String sql = "select * from student where studentid = '"+studentid+"'";
    	state = conn.createStatement();
    	rs=state.executeQuery(sql);
    	if(rs.next()){
    		student.setStudentid(rs.getString("studentid"));
    		student.setPassword(rs.getString("password"));
    		student.setStudentname(rs.getString("studentname"));
    	}
    	}catch(Exception e){
    		e.printStackTrace();
    		}finally{
    		closeConnection();
    	}
    	return student;
    	}
    	
    	public static boolean addStudent(Student student) {//增加学生
    	    boolean flag=false;
    	    int i=0;
    			try {
    				initConnection();
    			} catch (Exception e1) {
    				// TODO Auto-generated catch block
    				e1.printStackTrace();
    			}
    	    Statement state =null;
    	    String sql= "insert into student (studentid,studentname,password) values('"+student.getStudentid()+"','"+student.getStudentname()+"','"+student.getPassword()+"')"; 
    	    try {
    	    	state = conn.createStatement();
    	    	i=state.executeUpdate(sql);
    	      if(i>0){
    	        flag=true;
    	      }
    	    }catch (SQLException e) {
    	      e.printStackTrace();
    	    }
    	    try {
    			closeConnection();
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	    return flag;
    	  }
    
    	
    	public static Admin findadmin(String adminid) throws Exception{//查找管理员
    	initConnection();
    	Statement state =null;
    	ResultSet rs = null;
    	Admin admin=new Admin();
    	try{
    	String sql = "select * from admin where adminid = '"+adminid+"'";
    	state = conn.createStatement();
    	rs=state.executeQuery(sql);
    	if(rs.next()){
    		admin.setAdminid(rs.getString("adminid"));
    		admin.setPassword(rs.getString("password"));
    		admin.setAdminname(rs.getString("adminname"));
    	}
    	}catch(Exception e){
    		e.printStackTrace();
    		}finally{
    		closeConnection();
    	}
    	return admin;
    	}
    	
    	public static void closeConnection() throws Exception{//断开连接
    		conn.close();
    	}
    }

    2.3ScoreDAO.java。通过学号或课程号查找成绩。增加、删除、修改成绩等方法。

    package DAO;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.List;
    import beans.Score;
    import beans.Student;
    
    public class ScoreDAO {
    	private static Connection conn=null;
    	
    	public static void initConnection() throws Exception{//建立连接
    		Class.forName("com.mysql.jdbc.Driver");
    	    conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/school","root","7277991");
    	}
    	
    	public static ArrayList<Score> findscore1(String studentid) throws Exception{//按学号查找成绩
    	initConnection();
    	Statement state =null;
    	ResultSet rs = null;
    	ArrayList<Score> list=new ArrayList<Score>();
    	try{
    	String sql = "select score.*,student.studentname,course.coursename from score,student,course where score.studentid=student.studentid and score.courseid=course.courseid and score.studentid = '"+studentid+"'";
    	state = conn.createStatement();
    	rs=state.executeQuery(sql);
    	while(rs.next()){
    		Score score=new Score();
    		score.setStudentid(rs.getString("studentid"));
    		score.setStudentname(rs.getString("studentname"));
    		score.setCourseid(rs.getString("courseid"));
    		score.setCoursename(rs.getString("coursename"));
    		score.setScore(rs.getString("score"));
    		list.add(score);
    	}
    	}catch(Exception e){
    		e.printStackTrace();
    		}finally{
    		closeConnection();
    	}
    	return list;
    	}
    	
    	public static ArrayList<Score> findscore2(String courseid) throws Exception{//按课程号查找成绩
    	initConnection();
    	Statement state =null;
    	ResultSet rs = null;
    	ArrayList<Score> list=new ArrayList<Score>();
    	try{
    	String sql = "select score.*,student.studentname,course.coursename from score,student,course where score.studentid=student.studentid and score.courseid=course.courseid and score.courseid = '"+courseid+"'";
    	state = conn.createStatement();
    	rs=state.executeQuery(sql);
    	while(rs.next()){
    		Score score=new Score();
    		score.setStudentid(rs.getString("studentid"));
    		score.setStudentname(rs.getString("studentname"));
    		score.setCourseid(rs.getString("courseid"));
    		score.setCoursename(rs.getString("coursename"));
    		score.setScore(rs.getString("score"));
    		list.add(score);
    	}
    	}catch(Exception e){
    		e.printStackTrace();
    		}finally{
    		closeConnection();
    	}
    	return list;
    	}
    	
    	public static int addscore(String studentid,String courseid,String score) throws Exception{//增加成绩
    	initConnection();
    	Statement state =null;
    	int rs = 0;
    	try{
    	String sql = "insert into score(studentid,courseid,score) values('"+studentid+"','"+courseid+"','"+score+"')";
    	state = conn.createStatement();
    	rs=state.executeUpdate(sql);
    	}catch(Exception e){
    		e.printStackTrace();
    		}finally{
    		closeConnection();
    	}
    	return rs;
    	}
    	
    	public static int updatescore(String studentid,String courseid,String score) throws Exception{//修改成绩
    	initConnection();
    	Statement state =null;
    	int rs = 0;
    	try{
    	String sql = "update score set score='"+score+"' where studentid = '"+studentid+"' and courseid='"+courseid+"'";
    	state = conn.createStatement();
    	rs=state.executeUpdate(sql);
    	}catch(Exception e){
    		e.printStackTrace();
    		}finally{
    		closeConnection();
    	}
    	return rs;
    	}
    	
    	public static int deletescore(String studentid,String courseid) throws Exception{//删除成绩
    	initConnection();
    	Statement state =null;
    	int rs = 0;
    	try{
    	String sql = "delete from score where studentid = '"+studentid+"' and courseid='"+courseid+"'";
    	state = conn.createStatement();
    	rs=state.executeUpdate(sql);
    	}catch(Exception e){
    		e.printStackTrace();
    		}finally{
    		closeConnection();
    	}
    	return rs;
    	}
    	
    	public static void closeConnection() throws Exception{//断开连接
    		conn.close();
    	}
    }
    

    3.jsp及相关Servlet的编写

    3.1登录界面的编写

    index.jsp

      <body>
      <div id="top"><p>欢迎登录学生成绩管理系统</p></div>
      <div id="index">
        <form action="servlet\login" method="post">
        <p> 账号<input name="userid" type="text" onBlur="f0()"/><br></p>
       <p> 密码<input name="password" type="password" onBlur="f1()"/><br></p>
        <p><input name="user" type="radio" value="student" checked>学生
        <input name="user" type="radio" value="administrator">管理员<br></p>
        <p><input type="submit" value="登录"></p>
        </form>
        <p><a href="register.jsp">没有账号?点击注册吧</a></p>
        </div>
      </body>

    用CSS简单美化后登录界面长这样


    登录界面的Servlet,login.java

    package servlets;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import DAO.UserDAO;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import beans.Admin;
    import beans.Student;
    
    public class login extends HttpServlet {
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		request.setCharacterEncoding("UTF-8");
    		String userid = request.getParameter("userid");//获取账号
    		String password = request.getParameter("password");//获取密码
    		String user=request.getParameter("user");//判断用户身份,学生还是管理员
    		response.setContentType("text/html;charset=gb2312");
    		PrintWriter out = response.getWriter();
    		if(user==null||password==null){//未输入密码
    			System.out.println("登录失败!");
    			out.print("<script>alert('登录失败!请输入账号和密码');"
    					+ "window.location.href='../index.jsp'</script>");
    		}else{
    			if(user.equals("student")){//学生登录时
    				try {
    					Student student=UserDAO.findstudent(userid);
    					if(student.getPassword().equals(password)){
    						HttpSession session = request.getSession();
    						session.setAttribute("student",student);
    						System.out.println("登录成功!");
    						response.sendRedirect("../stu_showscore.jsp");
    					}else{
    						System.out.println("登录失败!");
    						out.print("<script>alert('登录失败!请确认账号和密码');"
    								+ "window.location.href='../index.jsp'</script>");
    					}
    				} catch (Exception e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			}else{//管理员登录时
    				try {
    					Admin admin=UserDAO.findadmin(userid);
    					if(admin.getPassword().equals(password)){
    						HttpSession session = request.getSession();
    						session.setAttribute("admin",admin);
    						System.out.println("登录成功!");
    						response.sendRedirect("../admin_menu.jsp");
    					}else{
    						System.out.println("登录失败!");
    						out.print("<script>alert('登录失败!请确认账号和密码');"
    								+ "window.location.href='../index.jsp'</script>");
    					}
    				} catch (Exception e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    					
    			}
    		}
    		
    	}
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		doGet(request,response);
    		
    	}
    
    }
    
    3.2注册界面

    注册界面的jsp,利用JavaScript对输入的账号、密码等输入信息进行简单验证,利用Servlet对输入的账号是否已存在、两次密码是否一致进行验证。

     <body>
      <script type="text/javascript">
        var emt = document.getElementsByTagName("em");
        var t=1;
         function  f0(){
         if(register.userid.value.length<6||register.userid.value.length>12){
                    emt[0].innerHTML="账号长度6-12位!";
                    t=0;
                }
          else{
               emt[0].innerHTML="";
               t=1;
          }
        } 
        function  f1(){
         if(register.username.value.length<1||register.username.value.length>4){
                    emt[1].innerHTML="用户名长度1-4位!";
                    t=0;
                }
          else{
               emt[1].innerHTML="";
               t=1;
          }
        } 
        function  f2(){
            var mm=/^[0-9a-zA-Z]{6,12}$/;
         var flag=mm.test(register.password1.value);
         if(!flag){
                    emt[2].innerHTML="密码要求长度6-12位;字母数字的组合,不能有其他字符!";
                    t=0;
                }
          else{
               emt[2].innerHTML="";
               t=1;
          }
        } 
        function  f3(){
           if(register.password1.value != register.password2.value){
                emt[3].innerHTML="密码两次应一致!";
                    t=0;
           }else{
               emt[3].innerHTML="";
               t=1;
          }
        }
    </script>
       <div id="top"><p>欢迎登录学生成绩管理系统</p></div>
         <div id="index">
         <form name="register" action="servlet\register" method="post">
       <p> 账号<input name="userid" type="text" onBlur="f0()"/><br><em></em></p>
       <p> 姓名<input name="username" type="text" onBlur="f1()"/><br><em></em></p>
       <p> 密码<input name="password1" type="password" onBlur="f2()"/><br><em></em></p>
        <p>确认密码<input name="password2" type="password" onBlur="f3()"/><br><em></em></p>
        <p><input type="submit" value="确认"></p>
        </form>
        <p><a href="index.jsp">返回登录</a></p>
        </div>
      </body>

    注册页面的提示效果


    注册界面的Servlet,register.java

    package servlets;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import DAO.UserDAO;
    import beans.Student;
    
    public class register extends HttpServlet {
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		request.setCharacterEncoding("UTF-8");
    		String userid = request.getParameter("userid");//获取账号
    		String password1 = request.getParameter("password1");//获取第一次输入的密码
    		String username = request.getParameter("username");//获取姓名
    		String password2 = request.getParameter("password2");//获取第二次输入的密码
    		response.setContentType("text/html;charset=gb2312");
    		PrintWriter out = response.getWriter();
    		System.out.print(userid);
    		System.out.print(username);
    		System.out.print(password1);
    		System.out.print(password2);
    		if(userid!=null&&username!=null&&password1!=null&&password2!=null){//页面信息是否填写完整
    			if(password1.equals(password2)){//两次输入的密码一致
    				try {
    					Student student = UserDAO.findstudent(userid);
    					if(student.getStudentid()!=null){//账号存在
    						out.print("<script>alert('该账号存在,注册失败!');"
    								+ "window.location.href='../register.jsp'</script><");
    					}else{
    						student.setStudentid(userid);
    						student.setStudentname(username);
    						student.setPassword(password1);
    						boolean flag=UserDAO.addStudent(student);
    						if(flag){
    							out.print("<script>alert('注册成功!现在去登录');"
    									+ "window.location.href='../index.jsp'</script>");
    						}else{
    							out.print("<script>alert('注册失败!稍后重试');"
    									+ "window.location.href='../register.jsp'</script>");
    						}
    					}
    				} catch (Exception e) {
    			// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			}else{
    				out.print("<script>alert('两次密码不一致,请确认');"
    						+ "window.location.href='../register.jsp'</script>");
    		}
    		}else{
    			out.print("<script>alert('请将信息填写完整');"
    					+ "window.location.href='../register.jsp'</script>");
    		}
    	}
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		doGet(request,response);
    	}
    
    }
    

    3.3管理员功能页面

    3.3.1管理员登录成功菜单,登录成功后该页面有三个超链接,分别指向具体的功能页面

    3.3.2管理员查询成绩页面

    成绩查询有两种形式:按学号或按课程号查询,利用表单中的radio进行选择。在servlet中查询,并把结果存到Session中,并在jsp页面判断Session中是否有值,若有,则以表格的形式显示,导入beans包,调用类中的get方法获得相应的值。

    <body>
      <div id="top"><p>学生成绩管理系统-查询成绩</p></div>
      <div id="admin">
        <form action="servlet\showscore" method="post">
        <input name="func" type="hidden" value="show">选择成绩查询方式:
        <input name="flag" type="radio" value="course" checked>课程号查询
        <input name="flag" type="radio" value="stu">学号查询<br>
        <input name="id" type="text">
        <input type="submit" value="查询">
        </form>
        </div>
         <table align="center" cellpadding="15" cellspacing="15">
        <%
        ArrayList<Score> list=(ArrayList<Score>) session.getAttribute("score"); 
        String flag=(String) session.getAttribute("flag");
        if(list!=null&&list.size()!=0){
        if(flag.equals("stu")){%>
            <tr>
         	<td colspan="4" align="center">学号为<%=list.get(0).getStudentid() %>的学生成绩如下</td>
         	</tr>
        <% }else{%>
        <tr>
         	<td colspan="4" align="center">  课程号为<%=list.get(0).getCourseid()%>的全体学生成绩如下</td>
         	</tr>
        <%}%>
        <tr>
             <td>学生学号</td>
             <td>学生姓名</td>
             <td>课程名</td>
             <td>成绩</td>
         	</tr>
        <%
                for(int j=0;j<list.size();j++){%>
                <tr>
                <td><%=list.get(j).getStudentid() %></td>
                <td><%=list.get(j).getStudentname()%></td>
                <td><%=list.get(j).getCoursename()%></td>
                <td><%=list.get(j).getScore()%></td>
                </tr>
    			         <% }}%>
    			         <tr>
    	<td colspan="4" align="center">
    	<form action="servlet\exit" method="post">
    	<input name="exit" type="hidden" value="score">
        <input type="submit" value="返回">
        </form>
    	</td>
    	</tr>
    	</table>
      </body>

    查询结果显示如下


    查询成绩操作的servlet如下

    package servlets;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import DAO.CourseDAO;
    import DAO.ScoreDAO;
    import DAO.UserDAO;
    import beans.Course;
    import beans.Score;
    import beans.Student;
    
    public class showscore extends HttpServlet {
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		request.setCharacterEncoding("UTF-8");
    		response.setContentType("text/html;charset=gb2312");
    		String flag=request.getParameter("flag");//按学号还是课程号查找
    		String id=request.getParameter("id");//获取的id值
    		String func=request.getParameter("func");//从哪个页面传来的表单
    		PrintWriter out = response.getWriter();
    		HttpSession session = request.getSession();
    		if(flag.equals("stu")){//按学号查找成绩
    			session.setAttribute("flag", flag);
    			try {
    				Student student=UserDAO.findstudent(id);
    				if(student.getStudentid()!=null){//输入的学号存在
    					try {
    						ArrayList<Score> list=(ArrayList<Score>) ScoreDAO.findscore1(id);
    						session.setAttribute("score", list); 
    						if(func.equals("show"))//从admin_showscore.jsp传来的值
    							response.sendRedirect("../admin_showscore.jsp");
    						else//从admin_updatescore.jsp传来的值
    							response.sendRedirect("../admin_updatescore.jsp");
    					}catch (Exception e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    					}
    				}else{//学号不存在
    					if(func.equals("show")){
    					out.print("<script>alert('不存在该学生');"
    							+ "window.location.href='../admin_showscore.jsp'</script>");
    					}else{
    						out.print("<script>alert('不存在该学生');"
    								+ "window.location.href='../admin_updatescore.jsp'</script>");
    					}
    				}
    			} catch (Exception e1) {
    				// TODO Auto-generated catch block
    				e1.printStackTrace();
    			}
    					
    		}else{//按课程号查找成绩
    			try {
    				Course course=CourseDAO.findclasses(id);
    				if(course.getCourseid()!=null){
    					ArrayList<Score> list;
    					try {
    						session.setAttribute("flag", flag);
    						list = (ArrayList<Score>) ScoreDAO.findscore2(id);
    						session.setAttribute("score", list); 
    						if(func.equals("show"))
    							 response.sendRedirect("../admin_showscore.jsp");
    						 else
    							 response.sendRedirect("../admin_updatescore.jsp");
    					} catch (Exception e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					}
    				}else{
    					if(func.equals("show")){
    						out.print("<script>alert('不存在该课程');"
    								+ "window.location.href='../admin_showscore.jsp'</script>");
    						}else{
    							out.print("<script>alert('不存在该课程');"
    									+ "window.location.href='../admin_updatescore.jsp'</script>");
    						}
    					
    				}
    			} catch (Exception e1) {
    				// TODO Auto-generated catch block
    				e1.printStackTrace();
    			}
    			
    			 
    		}
    	}
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    				doGet(request,response);
    	}
    
    }
    

    3.3.3管理员录入成绩页面

    管理员需输入学生号、课程号、成绩,利用form表单,把其提交到servlet中,在servlet中要判断学生号和课程号是否在数据库中存在,不存在则跳出相应的警告框。

      <body>
      <div id="top"><p>学生成绩管理系统-录入成绩</p></div>
      <div id="admin">输出下列信息进行分数录入</div>
      <table align="center" cellpadding="15" cellspacing="15">
      <tr>
             <td>学生学号</td>
             <td>课程号</td>
             <td>成绩</td>
         	</tr>
       <tr>
       <form action="servlet\addscore" method="post">
       <td><input type="text" name="studentid"></td>
       <td><input type="text" name="courseid"></td>
       <td><input type="text" name="score"></td>
       </tr>
       <tr>
       <td colspan="3" align="center"><input type="submit" value="添加"></td>
       </form>
    	</tr>
    	<tr>
    	<td colspan="3" align="center">
    	<form action="servlet\exit" method="post">
    	<input name="exit" type="hidden" value="score">
        <input type="submit" value="返回">
        </form></td>
    	</tr>
        </table>
      </body>

    页面如下


    录入成绩的servlet

    package servlets;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import DAO.CourseDAO;
    import DAO.ScoreDAO;
    import DAO.UserDAO;
    import beans.Course;
    import beans.Score;
    import beans.Student;
    
    public class addscore extends HttpServlet {
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		request.setCharacterEncoding("UTF-8");
    		response.setContentType("text/html;charset=gb2312");
    		String studentid=request.getParameter("studentid");//获取学号
    		String courseid=request.getParameter("courseid");//获取课程号
    		String score=request.getParameter("score");//获取成绩
    		PrintWriter out = response.getWriter();
    		try {
    			Student student=UserDAO.findstudent(studentid);//查找学生
    			Course course=CourseDAO.findclasses(courseid);//查找课程
    			System.out.print(student.getStudentid());
    			if(student.getStudentid()!=null){//存在该学生
    				if(course.getCourseid()!=null){//存在该课程
    				 try {
    			        	int i=ScoreDAO.addscore(studentid,courseid,score);
    						if(i!=0){
    							out.print("<script>alert('添加成功');"
    									+ "window.location.href='../admin_addscore.jsp'</script>");
    						}else{
    							out.print("<script>alert('添加失败');"
    									+ "window.location.href='../admin_addscore.jsp'</script>");
    						}
    					} catch (Exception e1) {
    						// TODO Auto-generated catch block
    						e1.printStackTrace();
    					}
    				}else{
    					out.print("<script>alert('课程不存在,添加失败');"
    							+ "window.location.href='../admin_addscore.jsp'</script>");
    				}
    			}else{
    				out.print("<script>alert('学生不存在,添加失败');"
    						+ "window.location.href='../admin_addscore.jsp'</script>");
    			}
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		doGet(request,response);
    	}
    
    }
    

    3.3.4管理员修改、删除成绩

    管理员首先通过学号或课程号查询成绩,查询成绩的servlet是3.3.2中的servlet,在提交表单时,定义了一个名为func的隐藏表单,判断是哪个页面传来的查询操作,并在查询结束后,返回到该页面,在本页面显示成绩,成绩为一个输入框,且在每行成绩后有修改和删除两个按钮。两个按钮分别对应两个表单,提交表单时把隐藏表单中的相应学生信息传入servlet中处理。

    页面jsp代码

    <body>
        <div id="top"><p>学生成绩管理系统-修改成绩</p></div>
      <div id="admin">
        <form action="servlet\showscore" method="post">
        <input name="func" type="hidden" value="update">选择方式进行查询修改
        <input name="flag" type="radio" value="course" checked>课程号查询
        <input name="flag" type="radio" value="stu">学号查询<br>
        <input name="id" type="text">
        <input type="submit" value="查询">
        </form>
        </div>
        <table align="center" cellpadding="15" cellspacing="15">
        <%
        ArrayList<Score> list=(ArrayList<Score>)session.getAttribute("score"); 
        String flag=(String) session.getAttribute("flag");
        if(list!=null&&list.size()!=0){
        
        if(flag.equals("stu")){%>
            <tr>
         	<td colspan="6" align="center">学号为<%=list.get(0).getStudentid() %>的学生成绩如下</td>
         	</tr>
        <% }else{%>
        <tr>
         	<td colspan="6" align="center">  课程号为<%=list.get(0).getCourseid()%>的全体学生成绩如下</td>
         	</tr>
      <br>
        <%}%><tr>
             <td>学生学号</td>
             <td>学生姓名</td>
             <td>课程名</td>
             <td>成绩</td>
             <td>修改</td>
             <td>是否删除</td>
         	</tr>
        <%
                for(int j=0;j<list.size();j++){%>
                
                <tr>
                <td><%=list.get(j).getStudentid() %></td>
                <td><%=list.get(j).getStudentname()%></td>
                <td><%=list.get(j).getCoursename()%></td>
                <form action="servlet\updatescore" method="post">
                <input type="hidden" name="studentid" value="<%=list.get(j).getStudentid() %>">
                <input type="hidden" name="courseid" value="<%=list.get(j).getCourseid() %>">
                <td><input name="score" type="text" value="<%=list.get(j).getScore()%>"></td>
                <td><input type="submit" value="修改"></td>
                </form>
                <form action="servlet\deletescore" method="post">
                <input type="hidden" name="studentid" value="<%=list.get(j).getStudentid() %>">
                <input type="hidden" name="courseid" value="<%=list.get(j).getCourseid() %>">
                <td><input type="submit" value="删除"></td>
                </form>
                </tr>
    			<%}
            } %>
            <tr>
    	<td colspan="6" align="center">
    	<form action="servlet\exit" method="post">
    	<input name="exit" type="hidden" value="score">
        <input type="submit" value="返回">
        </form>
    	</td>
    	</tr>
            </table>
    </body>

    页面如下


    修改成绩的servlet代码

    package servlets;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import DAO.ScoreDAO;
    import beans.Score;
    
    public class updatescore extends HttpServlet {
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		request.setCharacterEncoding("UTF-8");
    		response.setContentType("text/html;charset=gb2312");
    		String studentid=request.getParameter("studentid");//获取学号
    		String courseid=request.getParameter("courseid");//获取课程号
    		String score=request.getParameter("score");//获取成绩
    		int i = 0;
    		PrintWriter out = response.getWriter();
    		HttpSession session = request.getSession();
            ArrayList<Score> list = (ArrayList<Score>) session.getAttribute("score");
            try {
    			i=ScoreDAO.updatescore(studentid,courseid,score);
    		} catch (Exception e1) {
    			// TODO Auto-generated catch block
    			e1.printStackTrace();
    		}
             for(int j=0;j<list.size();j++){
                 if(list.get(j)==null){
                     list.remove(j);
                 }
                 if(list.get(j)!=null && list.get(j).getStudentid().equals(studentid)&&list.get(j).getCourseid().equals(courseid)){
                	     list.get(j).setScore(score);
                		 break;
                	 }
                 }
             if(i!=0){
            	 out.print("<script>alert('修改成功');"
     					+ "window.location.href='../admin_updatescore.jsp'</script>");
    			}else{
    				out.print("<script>alert('修改失败');"
    						+ "window.location.href='../admin_updatescore.jsp'</script>");
    			}
            
            //response.sendRedirect("../admin_updatescore.jsp");
    	}
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		doGet(request,response);
    	}
    
    }
    

    删除成绩的servlet

    package servlets;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import DAO.ScoreDAO;
    import beans.Score;
    
    public class deletescore extends HttpServlet {
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		request.setCharacterEncoding("UTF-8");
    		response.setContentType("text/html;charset=gb2312");
    		String studentid=request.getParameter("studentid");//获取学号
    		String courseid=request.getParameter("courseid");//获取课程号
    		int i=0;
    		PrintWriter out = response.getWriter();
    		HttpSession session = request.getSession();
            ArrayList<Score> list = (ArrayList<Score>) session.getAttribute("score");
            try {
    			i=ScoreDAO.deletescore(studentid,courseid);//进行删除操作
    		} catch (Exception e1) {
    			// TODO Auto-generated catch block
    			e1.printStackTrace();
    		}
             for(int j=0;j<list.size();j++){
                 if(list.get(j)==null){
                     list.remove(j);
                 }
                 if(list.get(j)!=null && list.get(j).getStudentid().equals(studentid)&&list.get(j).getCourseid().equals(courseid)){
                		 list.remove(j);
                		 break;
                	 }
                 }
             if(i!=0){
            	 out.print("<script>alert('删除成功');"
     					+ "window.location.href='../admin_updatescore.jsp'</script>");
             }else{
            	 out.print("<script>alert('删除失败');"
     					+ "window.location.href='../admin_updatescore.jsp'</script>");
             }
             
           // response.sendRedirect("../admin_updatescore.jsp");
    	}
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		doGet(request,response);
    	}
    
    }
    

    3.4学生页面

    学生在登录时,登录信息存储在session中,session中的学号以隐藏表单形式存在,学生点击查询成绩时,跳转到相应的servlet页面。与管理员查询成绩操作相同,就不赘述了。

    3.5返回、退出界面

    返回或登录时,利用表单传入servlet中进行操作,在session中把相应的session值进行清除再返回上个页面

    package servlets;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    public class exit extends HttpServlet {
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		request.setCharacterEncoding("UTF-8");
    		response.setContentType("text/html;charset=gb2312");
    		String exit=request.getParameter("exit");
    		HttpSession session = request.getSession();
    		if(exit.equals("user")){
    			session.invalidate();
    			response.sendRedirect("../index.jsp");
    		}else{
    			session.removeAttribute("score");
    			response.sendRedirect("../admin_menu.jsp");
    		}
    	}
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		doGet(request,response);
    	}
    
    }
    






    展开全文
  • C# 成绩管理系统

    2020-05-05 18:22:22
    C# 成绩管理系统
  • c#学生成绩管理系统c#学生成绩管理系统c#学生成绩管理系统c#学生成绩管理系统c#学生成绩管理系统c#学生成绩管理系统c#学生成绩管理系统c#学生成绩管理系统c#学生成绩管理系统
  • c++成绩管理系统

    2018-06-27 11:05:37
    成绩管理系统
  • Access学生成绩管理系统Access学生成绩管理系统Access学生成绩管理系统
  • 管理员页面设计 学生成绩管理系统 MF11 图1-1管理员登陆 学生成绩管理系统 Copyri^ri 甜1 Copyri^ri 甜1打商0砖 1-2管理员首页 学生成绩管理系统 1-3管理员密码修改 学生成绩管理系统 腳学性用户忖庄的看丽?...
  • 学习成绩管理系统

    2019-04-27 16:54:43
    学生成绩管理系统是一个学校不可缺少的重要部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生成绩管理系统应该为用户提供充足的信息和快捷的查询手段。当前成教学院没有一个完善的成绩信息管理平台,...
  • 华创学生档案与成绩管理系统是用华创快速开发平台搭建的,可管理学生档案、课程、成绩、作业、教师、班级、缴费、学校资产等信息,具有手机短信、自动提醒功能。与同类产品相
  • 高校成绩管理系统

    2018-07-15 21:43:05
    数据库c#高校成绩管理系统,数据库大型实验,该学生信息管理系统涉及到学生、教师、系统管理员、班级、学生成绩、课程。设置一个系统管理员对系统进行管理。所有用户需输入账号、密码登录进入系统;管理员进入系统后...
  • 具才教务与成绩管理系统,含有自动分班、考场座次编排、监考编排、考试成绩统计、成绩通知单制作、准考证制作等二十三个子软件。软件特点:①对Excel进行深度开发,利用VBA语言
  • java成绩管理系统

    2018-12-29 09:05:46
    学生成绩管理系统java代码嵌入数据库,原报告没有上传,希望对你们有用
  • java web学生成绩管理系统 java web学生成绩管理系统 java web学生成绩管理系统 java web学生成绩管理系统 java web学生成绩管理系统 java web学生成绩管理系统
  • 成绩管理系统心得.doc

    2021-01-15 12:24:14
    成绩管理系统心得 学生成绩管理系统是一功能十分強大的管理系统,它集各种功用于一身,可以完成教学中的各种操作,如对学生的成绩的添加.删除等。学生成绩管理系统功能大, 程序编写也十分复杂,工作量很大,编写...
  • 学生成绩管理系统 java+sql 学生成绩管理系统 java+sql 学生成绩管理系统 java+sql 学生成绩管理系统 java+sql
  • 成绩管理系统.zip

    2020-08-17 16:55:02
    功能介绍 本源码是一个成绩管理系统源码,分为教师登录和学生登录,有不同的权限 三、菜单功能 教师管理 1、学生信息管理:添加学生;删除学生;查看所有学生信息;评价 2、学生成绩管理:录入成绩;修改成绩 3、...
  • JAVA 实现简单的学生成绩管理系统

    万次阅读 多人点赞 2018-04-15 10:27:23
    2.掌握简单的信息管理系统的设计与实现。二、实验环境实验建议在安装了以下软件的计算机上完成:1.Windows xp/win7/win8/win10操作系统2.JDK 1.6以上版本3.Eclipse或NetBeans IDE或EditPlus或其它开发工具三、实验...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,699
精华内容 4,679
关键字:

成绩管理系统