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

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

    学生成绩管理系统

    开发语言:C语言
    开发工具:Visual Studio 2019
    开发时间:2019.4.14
    开发者:summer

    商业合作可淘宝搜索店铺“程序员夏天的小店”

    @一、系统使用展示

    @二、系统功能

    @三、菜单

    @四、录入学生信息

    @五、打印学生信息

    @六、保存学生信息

    @七、读取学生信息

    @八、统计所有学生人数

    @九、查找学生信息

    @十、修改学生信息

    @十一、删除学生信息

    @十二、退出系统

    @十三、出错

    一、系统使用展示

    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");    //清屏
    

    展开全文
  • 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语言程序设计》实训报告

     

    展开全文
  • c#学生成绩管理系统c#学生成绩管理系统c#学生成绩管理系统c#学生成绩管理系统c#学生成绩管理系统c#学生成绩管理系统c#学生成绩管理系统c#学生成绩管理系统c#学生成绩管理系统
  • 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);
    	}
    
    }
    






    展开全文
  • 学生成绩管理管理系统

    万次阅读 多人点赞 2020-06-23 15:18:26
    学生成绩管理管理系统 一,需求分析 1、编写目的 为了明确软件需求、安排项目规划与进度、组织软件开发与测试,撰写本文档。本文档供项目经理、设计人员、开发人员参考。 2、项目背景 使用计算机对学生信息进行管理...

    学生成绩管理管理系统

    一,需求分析

    1、编写目的

    为了明确软件需求、安排项目规划与进度、组织软件开发与测试,撰写本文档。本文档供项目经理、设计人员、开发人员参考。

    2、项目背景

    使用计算机对学生信息进行管理,拥有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、成本低等。这些优点能够极大地提高学生信息的效率,也是管理科学化、正规化的重要支撑。
    学生信息管理系统能够方便地查询和变更学生的基本数据(包括学籍数据和成绩数据),节省大量工作时间,有效地提高学生信息管理的效率。而查询信息的直观显示将有助于系统的用户一目了然地掌握学生的情况。

    3、开发计划

    分阶段完成任务:
    第一阶段实现快速界面原型,并进行相应的补充修改以满足客户的需求;
    第二阶段完成界面的进一步设计求精,形成最终的设计样式;
    第三阶段:完成数据库的开发;
    第四阶段:整合管理系统并进行各项测试改正出现的各种问题。

    4、实现的内容

    学生信息管理系统属于应用系统。学生信息管理系统的使用者是教务处管理员和学生。它的功能就是教师通过输入用户名和口令登陆到教学管理数据库中,从而实现对各门选课人数限制,对学生信息的维护限制。每个新学年的开始,都有新生的进入,和毕业生离校,每个学期学生的课程会发生改变以及有些学生因为不同的原因离校或者有新来的转校生。系统要对这些情况做相应的改变。离校的将学生信息删除,新来的要将学生信息存入系统,课程改变了,要将其修改。教务处访问该系统将学生信息填入、删除或修改,学生可以在系统上查询本人信息。该系统是一个集成多功能的信息管理系统,有教师资料管理、学生管理、班级管理、院系管理、课程管理和成绩管理功能模块。本系统将大大提高学生信息的管理效率,带来数据共享、网络查询和网络管理等便利,实现学生信息管理的数字化和智能化。
    教师管理模块:本模块主要对教师的资料信息进行查询,删除,修改和添加。
    学生管理模块:本模块主要对学生资料信息进行相应的查询,删除,修改和添加。添加了学生所在院系资料与学生所在专业资料,同时可对院系资料与专业资料进行相应的添加,修改,查询。
    课程管理模块:本模块主要对课程资料进行管理,对其进行查询,添加,修改和删除。又详细划分了课程类别资料,对其进行如上操作。
    成绩管理模块:本模块对学生成绩进行查询操作,如发现成绩有输入错误,可对其进行相应的修改,还可对学生的成绩进行录入
    班级管理模块:本模块班级资料信息进行管理,对其进行相应的查询,修改,删除和添加。

    根据实际问题,本系统要实现以下功能:
    (1)用户认证。本系统用户有教务处管理员和学生,所以用户必须通过认证才能登入系统。系统能够自动识别用户类型,能够给不同的用户分配不同的权限。教务处管理员用户成功登入后可以进入操作界面,学生成功登入后即可进入学生本人信息界面。
    (2)数据维护。可以对学生的成绩和课程等数据进行维护。
    (3)信息管理。允许教务处管理员修改学生信息,允许学生在任何时候登入查询本人信息。
    如图所示:

    在这里插入图片描述
    在这里插入图片描述

    二. 概念结构设计

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    资源已上传至☞:https://download.csdn.net/download/weixin_43510203/12545832

    展开全文
  • C++ 学生成绩管理系统

    万次阅读 多人点赞 2019-10-04 20:26:09
    用c++实现学生成绩管理系统,此系统可以提供成绩的录入,可以按学生成绩进行排名,求总分和平均分以及提供成绩查询功能等。 实现功能 提供成绩录入 统计每个学生的总分和平均分 按总分由大到小排出名次 提供成绩...
  • 学生成绩管理系统

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

    万次阅读 多人点赞 2018-11-29 06:58:56
    C语言实现了学生成绩管理系统,可以对学生成绩进行录入、查询、修改、删除和排序。 #include &amp;amp;lt;stdio.h&amp;amp;gt; #include &amp;amp;lt;stdlib.h&amp;amp;gt; #include &amp;amp;...
  • 学生成绩管理系统(C语言)

    万次阅读 多人点赞 2018-06-26 23:36:31
    一设计项目:学生成绩管理系统 二总体设计: 1程序设计组成框图: 学生成绩管理系统 输入学生成绩查看学生成绩及成绩 排序 通过学号查询学生成绩 统计成绩信息 通过学号修改学生成绩 添加学生成绩 通过学号...
  • 学生成绩管理系统——JAVA

    万次阅读 多人点赞 2020-07-18 14:31:21
    学生成绩管理系统具有录入学生成绩、查询学生成绩、输出学 生按成绩的排名、输出学科的分数四个功能,其中后两个功能在“输出成绩”这一目录下。 此系统可以实现学生成绩管理的一些基本操作。 1.1各模块功能简介 ...
  • java学生成绩管理系统

    万次阅读 多人点赞 2016-04-12 14:33:51
    *@name:java学生成绩管理系统. *@功能:学生相关信息,录入,查询,统计,修改等.... *@PS:图形界面的学生管理系统不要求就不做了. */ import java.util.Scanner; import java.lang.*; import ja
  • java 学生成绩管理系统

    千次阅读 多人点赞 2017-05-30 23:29:01
    用java实现学生成绩管理系统,可实现学生成绩的增加、删除、修改、查询功能
  • MFC课程设计 --学生成绩管理系统

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

    万次阅读 多人点赞 2020-12-24 23:23:45
    1. 管理员登录,登录成功可以对成绩进行管理; 2. 显示成绩信息; 3.添加成绩信息; 4.修改成绩信息; 5.删除成绩信息; 6.查询成绩信息。 代码实现 目录 效果 核心代码 MenuService类(菜单...
  • 用数据库Access 2000 .Visual Basic 6.0制作一个类似学生成绩管理查询系统的程序,要求可以使用 有大神帮忙吗,求求!
  • 基于javaweb实现学生成绩管理系统,实现了学生信息管理,课程管理,教师信息管理,学生成绩汇总,学生登录注册,教师和管理员的登录,个人信息修改等。 系统功能大致描述:基于javaweb实现学生成绩管理系统,实现了学生信息...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,974
精华内容 26,789
关键字:

学生成绩查询管理系统