精华内容
下载资源
问答
  • 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语言程序设计》实训报告

    点击查看 ----> 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语言源码包

    更多资源等着你

    最新文章:

    0、C语言学生成绩管理系统(课程设计报告书)★★★

    1、 C语言学生成绩管理系统源代码 ★★★★★

    2、 C语言学籍管理系统源代码 ★★

    3、C语言学生成绩管理系统设计 《C语言程序设计》实训报告 ★★★

    4、C语言学生信息管理系统源代码 ★★★★

    展开全文
  • 学生成绩管理系统(基于文件的MFC) mfc学生成绩管理系统 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);
    	}
    
    }
    





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

    2020-02-26 18:50:33
    简单的C++学生成绩管理系统,包含学生成绩录入、学生增加以及成绩删改查,所有学生成绩用冒泡排序,各科情况简单分析
  • 学生成绩管理系统是由C#语言编写的, 基于.net技术的简单程序,包含源代码
  • 学生成绩管理系统.rar

    2019-12-16 15:07:30
    包含数据库 ,C#程序源码,打包exe教程。使用三层机构+C#+Sql server 构建的学生成绩管理系统,包含系统管理,成绩管理,学生管理,专业管理,班级管理,教师管理等
  • 学生成绩以学生记录的形式存储的文件中,每个学生记录包含的信息有姓名、学号和各门功课的成绩。 要求编制具有以下几项功能的程序: (1)求出各门课程的总分,平均分; (2)按姓名,按学号寻找其记录并显示,...
  • 学生成绩管理系统

    2017-10-14 15:49:43
    基于C++的一个简单的学生成绩管理系统,包含存储 读取 构造 析构等函数
  • 利用C语言编写了一个学生成绩管理系统,包含实验,和源代码,还有实验报告
  • Java+SQLServer学生成绩管理系统(代码+数据库)
  • 这个是用C语言写出来的学生成绩管理系统,功能非常齐全,该实验报告包含流程,总结在内,要啥有啥
  • 软件工程课程设计 学生成绩管理系统(C++实现)报告+源代码打包
  • 1.学生成绩管理系统分为三个用户角色,登录界面可以选择三种不同的角色进行登录系统 2.管理员角色登录系统可以有以下功能: 管理考试信息:可以对考试批次信息进行增删改查操作 管理教师信息:可以对教师个人信息...
  • linux系统下C语言实现带有图形界面的学生成绩管理系统源代码(包含数据库文件) linux,成绩管理系统,图形界面,C语言,源代码
  • 学生成绩管理系统数据库设计--MySQL

    万次阅读 多人点赞 2020-06-18 13:02:04
    MySQL/SQL Server 数据库设计(学生成绩管理系统) 设计大纲 1. 项目背景及需求分析 1.1 项目背景 1.2 需求分析 1.2.1 信息需求 1.2.2 功能需求 1.2.3 安全性与完整性需求 2. 概念结构设计 2.1 抽象出系统实体 2.2 ...

    MySQL 数据库设计-学生成绩管理系统

    设计大纲

    在这里插入图片描述

    更新时间:2020.6.23

    1. 项目背景及需求分析

    1.1 项目背景

    为了深刻的理解MySQL数据库,以学生成绩信息管理为例,设计一个简单、规范、高效的学生成绩信息管理系统数据库。

    1.2 需求分析

    1.2.1 信息需求

    对学校而言,学生成绩管理是管理工作中重要的一环,但是高校学生的成绩管理工作量大、繁杂,人工处理非常困难。因此,借助于强大计算机的处理能力,能够把人从繁重的成绩管理工作中解脱出来,并且更加准确、安全、清晰的管理环境。

    1.2.2 功能需求

    能够进行数据库的数据定义、数据操纵、数据控制等处理功能。具体功能应包括:可提供课程安排、课程成绩数据的添加、插入、删除、更新、查询,学生及教职工基本信息查询的功能。

    1.2.3 安全性与完整性要求

    对于学生成绩管理系统数据库来讲,由于其主要数据是学生成绩,只能由本人以及所教老师及教务处知道,因此做好数据安全性是重中之重。另外,要求所有在校学生的信息都要录入其中,并且要设计好个别情况。

    2. 概念结构设计

    概念结构设计是整个数据库设计的关键,它通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。
    根据学生成绩信息管理数据库设计需求抽象出学生、教师、课程、成绩四个实体,对四个实体做简化处理,默认一门课程仅被一位老师讲授。因简化后关系结构比较简单,故省略了局部E-R图。对4个实体之间的关系进行分析如下:
    一位学生会被多位老师教导,一位老师会教导多位学生,所有学生与教师之间是多对多(m:n)的关系;
    一位学生可能会选修多门课程,一门课程会被多位学生选修,所以学生与课程之间是多对多(m:n)的关系;
    一位学生会有多项成绩(具体指某学生一门课程的分数),一项成绩仅被一位学生拥有,所以学生与成绩是一对多(1:n)的关系;
    一位教师会讲授多门课程,一门课程会被一位教师讲授,所以教师与课程的关系是一对多(1:n)的关系;
    一门课程拥有多项成绩,一项成绩仅被一门课程拥有,所以课程与成绩的关系是一对多(1:n)的关系;

    2.1 抽象出系统实体

    学生(学号、姓名、班级、性别、专业、出生日期、学分);
    老师(教师编号、姓名、学院);
    课程(课程编号、教师编号、课程名称、课程学分);
    成绩(学号、课程编号、分数);

    2.2 全局E-R图

    在这里插入图片描述

    3. 逻辑结构设计

    3.1 关系模式

    E-R图向关系模型转化要解决的问题是如何将实体型和实体间的联系转化为关系模式,如何确定这些关系模式的属性和码。
    设计学生成绩管理数据库,包括学生(students)、老师(teachers)、课程(courses)、成绩(scores)四个实体,其关系模式中对每个实体定义属性如下:

    students 表:学号(sid)、姓名(sname)、班级(sclass)、性别(sgender)、专业(smajor)、出生日期(sbirthday)、学分(credit_points),此为联系“students表”所对应的关系模式,学号为该关系的候选码,满足第三范式。

    teachers表:教师编号(tid)、姓名(tname)、学院(tschool),此为联系“teachers表”所对应的关系模式,教师编号为该关系的候选码,满足第三范式。

    courses表:课程编号(cid)、教师编号(tid)、课程名称(cname)、学分(credit_point),此为联系“courses表”所对应的关系模式,课程编号和教师编号为该关系的候选码,满足第三范式。

    scores表:学号(sid)、课程编号(cid)、分数(score),此为联系“scores表”所对应的关系模式,学号和课程编号为该关系的候选码,满足第三范式。

    3.2 函数依赖识别

    后续更新补充

    3.3 范式

    后续更新补充

    3.4 表结构

    数据库中包含4个表,即学生(students)、老师(teachers)、课程(courses)、成绩(scores)。

    students表的表结构
    在这里插入图片描述
    teachers表的表结构
    在这里插入图片描述
    courses表的表结构
    在这里插入图片描述
    scores表的表结构
    在这里插入图片描述

    4. 物理设计和实施

    4.1 数据库及表创建

    4.1.1 创建数据库

    -- 如果已有该数据库,则删除
    DROP DATABASE IF EXISTS StudentScore;
    
    -- 创建数据库
    CREATE DATABASE StudentScore CHARSET=UTF8;
    

    4.1.2 创建数据表

    -- 使用数据库
    USE StudentScore;
    
    -- 创建数据表
    -- table 1: students
    DROP TABLE IF EXISTS students;
    CREATE TABLE students(
    sid INT(20) UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,
    sname VARCHAR(20),
    sclass INT(10),
    sgender VARCHAR(10),
    smajor VARCHAR(20),
    sbirthday DATE,
    credit_points INT(5) -- 学生已修学分
    );
    
    -- table 2: teachers
    DROP TABLE IF EXISTS teachers;
    CREATE TABLE teachers(
    tid INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,
    tname VARCHAR(20),
    tschool VARCHAR(20)
    );
    
    -- table 3: courses
    DROP TABLE IF EXISTS courses;
    CREATE TABLE courses(
    cid INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,
    cname VARCHAR(20),
    credit_point INT(5), -- 课程学分
    tid INT(10) UNSIGNED NOT NULL,
    FOREIGN KEY(tid) REFERENCES teachers(tid)
    );
    
    -- table 4: scores
    DROP TABLE IF EXISTS scores;
    CREATE TABLE scores(
    sid INT(10) UNSIGNED NOT NULL,
    cid INT(10) UNSIGNED NOT NULL,
    score DECIMAL(5, 2),
    FOREIGN KEY(sid) REFERENCES students(sid),
    FOREIGN KEY(cid) REFERENCES courses(cid)
    );
    
    

    4.2 表数据增删改查测试

    4.2.1 MySQL基础知识点总结

    在这里插入图片描述

    4.2.2 精选MySQL练习题数据及解析

    点击查看
    4.2.2 精选MySQL练习题数据及答案解析

    4.2.2.1. 连接查询 - 4题

    1.1 查询同时选修了课程 1 和 课程 2 的学生的信息

    1.2 查询课程 1 比 课程 2 成绩高的学生的信息及课程分数

    1.3 查询课程 1 分数小于 60 的学生信息和课程分数,按分数降序排列

    1.4 查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩

    4.2.2.2. 子查询、连接查询 - 4题

    2.1 查询有成绩的学生信息

    2.2 查询学过 孙悟空 老师所授课程的学生信息

    2.3 查询至少有一门课与学号为 1 的同学所学相同的学生信息

    2.4 查询选修了课程 2 但是没有选修课程 1 的学生信息

    4.2.2.3. 聚合分组、连接查询 - 8题

    3.1 查询同名学生名单,并统计同名人数

    3.2 查询选修了 3 门课程的学生信息

    3.3 查询平均成绩大于等于 85 的所有学生的学号、姓名、平均成绩(保留2位小数)

    3.4 查询平均成绩大于等于 60 分的学生学号、姓名、平均成绩(保留2位小数)

    3.5 查询两门及以上课程分数小于60分的学生学号、姓名及平均成绩(保留2位小数)

    3.6 查询姓 赵 的同学的学生信息、总分,若没选课则总分显示为 0

    3.7 查询所有同学的学号、姓名、选课总数、总成绩,没选课的学生要求显示选课总数和总成绩为 0

    3.8 查询所有学生学号、姓名、选课名称、总成绩,按总成绩降序排序,没选课的学生显示总成绩为 0

    4.2.2.4. if 或 case 语句 - 2题

    4.1 若学号sid为学生座位编号,现开始对座位号调整,奇数号和偶数号对调,如1和2对调、3和4对调…等, 如果最后一位为奇数,则不调换座位,查询调换后的学生座位号(sid)、姓名,按sid排序

    4.2 查询各科成绩最高分、最低分和平均分: 以如下形式显示:课程id、课程名、选修人数、最高分、最低分、平均分、及格率、中等率、优良率、优秀率
    及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90
    要求查询结果按人数降序排列,若人数相同,按课程号升序排列,平均分、及格率等保留2位小数

    4.2.2.5. 时间函数 - 6题

    5.1 查询 1990 年出生的学生信息

    5.2 查询各学生的年龄,分别按年份和按出生日期来算

    5.3 查询本周或下周过生日的学生

    5.4 查询本月或下月过生日的学生

    5.5 查询学生信息,要求:学号和年龄同时至少比一位学生的学号和年龄大

    5.6 查询连续相邻3年出生的学生中,学生性别相同的学生信息

    4.2.2.6.综合应用 - 12题

    6.1 查询和学号为 1 的同学学习的课程完全相同的其他同学的信息

    6.2 查询每科均及格的人的平均成绩:学号、姓名、平均成绩(保留2位小数)

    6.3 查询选修 张若尘 老师所授课程的学生中,该门课成绩最高的学生信息及成绩(成绩可能重复)

    6.4 查询各科成绩,按各科成绩进行排序,并显示排名 分数重复时保留名次空缺,即名次不连续

    6.5 查询各科成绩,按各科成绩进行排序,并显示排名 分数重复时不保留名次空缺,即名次连续

    6.6 查询学生 赵雷 的 变形 课程成绩的排名:学生信息,分数,排名 分数重复时不保留名次空缺,即名次连续

    6.7 查询课程 时空穿梭 成绩在第2-4名的学生,要求显示字段:学号、姓名、课程名、成绩 分数重复时不保留名次空缺,即名次连续

    6.8 查询学生的总成绩,并进行排名,总分重复时不保留名次空缺,即名次连续

    6.9 查询学生的总成绩,并进行排名,总分重复时保留名次空缺,及名次不连续 排名名次不连续,不需要去重

    6.10 统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[60-0] 分别所占百分比 结果:保留2位小数

    6.11 查询各科成绩前三名的记录,按照课程编号和分数排序 分数重复时,重复分数按照一名算,即不保留名次空缺,及名次连续

    6.12 查询各科成绩的前两名,列出学生信息、课程名、分数,按照课程名、分数排序 分数重复时,重复分数按照一名算,即不保留名次空缺,及名次连续

    4.2.2.7 MySQL练习题数据及答案解析

    点击查看
    4.2.2 精选36道MySQL练习题数据及答案解析

    4.3 创建视图

    4.3.1 创建一个学生视图,要求显示学生学号、姓名、班级、性别、专业、各科成绩、平均分、总分

    DROP VIEW IF EXISTS v_students_info;
    
    CREATE VIEW v_students_info AS
    SELECT  stu.sid,
    		stu.sname,
    		stu.sclass,
    		stu.sgender,
    		stu.smajor,
    		sum(if(c.cname = "变形", sc.score, 0)) AS "变形",
    		sum(if(c.cname = "时空穿梭", sc.score, 0)) AS "时空穿梭",
    		sum(if(c.cname = "分解术", sc.score, 0)) AS "分解术",
    		sum(if(c.cname = "炼器", sc.score, 0)) AS "炼器",
    		sum(if(c.cname = "炼丹", sc.score, 0)) AS "炼丹",
    		sum(if(c.cname = "飞行", sc.score, 0)) AS "飞行",
    		round(ifnull(avg(sc.score), 0), 2) AS "平均分",
    		ifnull(sum(sc.score), 0) AS "总分"
    FROM 	students stu LEFT JOIN
    		scores sc ON stu.sid = sc.sid LEFT JOIN
    		courses c ON c.cid = sc.cid
    GROUP BY stu.sid;
    

    查看视图:
    在这里插入图片描述
    在这里插入图片描述

    4.4 创建函数

    4.4.1 创建一个通过学号sid获取学生信息的函数

    DROP FUNCTION IF EXISTS get_student_info_by_sid;
    
    DELIMITER //
    CREATE DEFINER = CURRENT_USER FUNCTION get_student_info_by_sid(id INT)
    RETURNS VARCHAR(300)
    DETERMINISTIC
    BEGIN
    RETURN (SELECT CONCAT('姓名: ', sname, ' , ', '性别: ', sgender, ' , ', '专业:', smajor)
    FROM students WHERE sid = id);
    END//
    DELIMITER ;
    -- 调用函数
    SELECT get_student_info_by_sid(8);
    

    调用函数结果:
    在这里插入图片描述
    其中DELIMITER 先定义结束符为 // , 然后又将结束符改为mysql默认的分号结束符。

    了解delimiter 关键字请点击:
    MySQL中 delimiter 关键字详解
    如果出现报错1418:

    Error Code : 1418 This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)

    参考下面:
    MySQL ERROR 1418 的解决方法

    4.4.2 自定义函数 2:要求函数体中包含其中一种流程控制语句,要求输入学生学号sid、课程编号,显示学生姓名、课程名称、成绩是否及格(即成绩>=60)

    
    DROP FUNCTION IF EXISTS get_student_scores_by_id;
    
    DELIMITER //
    CREATE DEFINER = CURRENT_USER FUNCTION get_student_scores_by_id(sid INT, cid INT)
    RETURNS VARCHAR(300)
    DETERMINISTIC
    BEGIN
    	-- 多个变量要分开声明,否则会报错
    	DECLARE score INT;
    	DECLARE name VARCHAR(20);
    	DECLARE course_name VARCHAR(20);
    	SELECT sc.score INTO score
    	FROM scores AS sc
    	WHERE sc.sid = sid AND sc.cid = cid;
    	SELECT sname INTO name FROM students AS stu WHERE stu.sid = sid;
    	SELECT cname INTO course_name FROM courses AS co WHERE co.cid = cid;
    	IF score >= 60 THEN
    		RETURN CONCAT(name, '--', course_name, '--', '及格');
    	ELSEIF score > 0 AND score < 60 THEN
    		RETURN CONCAT(name, '--', course_name, '--', '不及格');
    	ELSE
    		RETURN '找不到该学生、课程或该学生没有选课!';
    	END IF;
    END//
    DELIMITER ;
    
    -- 调用函数
    SELECT get_student_scores_by_id(1, 2);
    
    

    调用函数结果:
    在这里插入图片描述

    4.5 创建存储过程

    4.5.1 学生每选修一门课,如果该门课程成绩达到60分及以上,则把该门课程学分加到学生学分里面,输出该学生姓名、学分

    DROP PROCEDURE IF EXISTS add_scores;
    
    DELIMITER //
    CREATE DEFINER = CURRENT_USER PROCEDURE add_scores(
    	IN stu_id INT, 
    	IN co_id INT, 
    	IN s_score INT,
    	OUT name VARCHAR(20),
    	OUT s_credit_point INT
    )
    DETERMINISTIC
    BEGIN
    -- 多个变量要分开声明,否则会报错
    DECLARE points INT;
    INSERT INTO scores (sid, cid, score)
    VALUES (stu_id, co_id, s_score);
    SELECT credit_point INTO points FROM courses WHERE cid = co_id;
    IF s_score >= 60 THEN
    	UPDATE students 
    	SET credit_points = credit_points + points
    	WHERE sid = stu_id;
    END IF;
    -- 注意:多个输出值一定要用多个SELECT来赋值,否则会报错
    SELECT sname INTO name FROM students WHERE sid = stu_id;
    SELECT credit_points INTO s_credit_point FROM students WHERE sid = stu_id;
    COMMIT;
    END//
    DELIMITER ;
    
    -- 测试调用存储过程
    SELECT * FROM students WHERE sid > 10;
    CALL add_scores(11, 2, 33, @name, @s_credit_point);
    SELECT @name, @s_credit_point;
    CALL add_scores(12, 2, 88, @name, @s_credit_point);
    SELECT @name, @s_credit_point;
    
    

    调用存储过程结果:
    在这里插入图片描述

    4.6 创建触发器

    4.6.1 创建一个更新学生学分的触发器,如果该学生分数>=60,则给该学生加上这门课的学分

    语法
    create trigger triggerName
    after/before insert/update/delete on 表名 for each row #这句话在mysql是固定的 begin
    sql语句;
    end;

    
    DROP TRIGGER IF EXISTS update_credit_point;
    
    DELIMITER //
    CREATE TRIGGER update_credit_point
    AFTER INSERT ON scores FOR EACH ROW
    BEGIN 
    	DECLARE points INT;
    	SELECT co.credit_point INTO points FROM courses AS co WHERE co.cid = new.cid;
    	IF new.score >= 60 THEN
    		UPDATE students SET credit_points = credit_points + points
    		WHERE sid = new.sid;
    	END IF;
    END//
    DELIMITER ;
    
    
    -- 测试数据
    SELECT * FROM students WHERE sid < 3;
    INSERT INTO scores VALUES
    (1, 4, 77),
    (2, 4, 55);
    SELECT * FROM students;
    

    测试结果:
    在这里插入图片描述
    终于写完啦!

    展开全文
  • 编译环境vs2017 用单链表实现学生成绩管理系统 文件包含源代码和可执行文件 为以后算法与数据结构的同学提供帮助
  • UML; 学生成绩管理系统;需求分析;用例;顺序;状态;等 包含源代码 静态建模; 动态建模;制作了一个应用窗口程序,带了数据库,有脚本,可以构建数据库。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,708
精华内容 10,283
关键字:

学生成绩管理系统包图