Java完整的学生选课系统源码
基于java web 的教务管理系统设计与实现

教务管理系统是现代教育管理中必不可少的一部分,它通过信息技术手段帮助学校高效地管理学生信息、教师信息、课程安排、成绩管理等方面。
随着互联网技术的发展,传统的教务管理方式已经无法满足学校管理的需求,因此设计一个基于Java Web的教务管理系统将会带来革命性的改变。
本文将探讨教务管理系统的设计与实现,主要包括系统的需求分析、系统的架构设计、系统模块的实现等方面。
一、需求分析在设计教务管理系统前,首先要对系统的需求进行全面、深入的分析。
主要包括以下几个方面的需求:1. 学生管理:包括学生基本信息的录入、修改、删除,学生课程的选取、查看成绩等功能。
2. 教师管理:包括教师基本信息的录入、修改、删除,教师课程的安排、成绩录入等功能。
3. 课程管理:包括课程信息的录入、修改、删除,课程的排课、教室安排等功能。
4. 成绩管理:包括成绩录入、成绩统计、成绩查询等功能。
5. 班级管理:包括班级信息的录入、修改、删除,班级学生的管理等功能。
6. 系统管理:包括系统用户的权限管理、数据备份、日志管理等功能。
二、系统架构设计基于Java Web的教务管理系统主要分为前台展示系统和后台管理系统两部分。
其中前台展示系统主要提供给学生、教师和家长使用,包括学生信息查询、课程管理、成绩查询等功能;后台管理系统主要提供给教务处老师和管理员使用,包括教师、课程、班级、成绩等信息的管理和维护。
系统采用B/S架构,即浏览器/服务器架构。
前台展示系统通过浏览器访问,后台管理系统通过服务器端进行管理。
系统采用MVC(Model View Controller)设计模式,将业务逻辑、数据模型、用户界面分离,提高系统的可维护性和扩展性。
三、系统模块的实现1. 用户管理模块用户管理模块是整个系统的核心模块,包括用户注册、登入、权限管理等功能。
在系统中,用户分为管理员、教师、学生和家长四种角色,每种角色对应不同的权限和功能。
2. 学生管理模块学生管理模块包括学生基本信息的录入、修改、删除,学生选课、成绩查询等功能。
java web学生管理系统课设报告

Java Web学生管理系统课设报告一、引言1.1 课题背景随着信息化技术的发展,学校需要一种能够方便管理学生信息的系统,以提高管理效率。
因此,开发一款基于Java Web的学生管理系统具有重要意义。
1.2 目的和意义本课题旨在设计和实现一个基于Java Web的学生管理系统,通过该系统实现学生信息的录入、查询、修改、删除等操作,从而方便学校对学生信息的管理,提高管理效率。
1.3 任务和要求本课题的任务是设计和实现一个基于Java Web的学生管理系统,要求系统能够实现以下功能:学生信息录入、查询、修改、删除等操作;学生信息按班级、学号、姓名等条件进行查询;数据持久化存储等。
二、系统分析2.1 系统需求分析根据学校对学生信息管理的实际需求,本系统需要实现以下功能:学生信息录入、查询、修改、删除等操作;学生信息按班级、学号、姓名等条件进行查询;数据持久化存储等。
2.2 业务流程分析学生管理系统的业务流程主要包括:学生信息录入、查询、修改、删除等操作。
其中,学生信息录入是整个业务流程的起点,通过录入学生信息,将数据存储到数据库中。
然后,可以通过查询功能根据不同条件对学生信息进行查询。
当学生信息需要修改或删除时,可以通过相应的操作进行修改或删除。
2.3 数据流程分析学生管理系统的数据流程主要包括:数据输入、数据处理和数据输出三个部分。
其中,数据输入主要是学生信息的录入;数据处理主要是对学生信息进行查询、修改、删除等操作;数据输出主要是将处理后的学生信息展示给用户。
在整个数据流程中,需要保证数据的准确性和完整性。
三、系统设计3.1 系统架构设计本系统采用MVC设计模式进行开发,分为模型层、视图层和控制层三个部分。
模型层主要负责业务逻辑的处理和数据的封装;视图层主要负责用户界面的展示;控制层主要负责接收用户的请求并调用模型层进行处理,然后将结果返回给视图层展示给用户。
3.2 数据库设计本系统采用MySQL数据库进行数据的存储和处理。
学生信息管理系统java功能模块

学生信息管理系统Java功能模块简介学生信息管理系统是一种用于管理学生信息的软件系统。
它可以帮助学校、教育机构或其他组织有效地记录、存储和处理学生的个人和学术信息。
Java是一种面向对象的编程语言,具有广泛的应用领域和强大的开发工具,非常适合用于开发学生信息管理系统。
本文将介绍学生信息管理系统的Java功能模块,包括以下几个方面:用户登录与权限管理、学生信息录入与查询、成绩管理、课程管理以及数据统计与报表生成。
用户登录与权限管理用户登录用户登录是系统的入口,通过输入用户名和密码进行身份验证。
在Java中,可以使用Swing或JavaFX等图形界面库创建一个登录界面,用户输入用户名和密码后,通过数据库验证用户身份。
权限管理不同用户可能具有不同的权限,例如管理员可以对系统进行全面管理,而普通教师只能查看和编辑自己所负责的班级或课程。
在Java中,可以使用角色-权限模型来实现权限管理。
每个用户被分配到一个或多个角色,并且每个角色具有一组特定的权限。
通过为每个操作配置相应的权限,并在代码中进行权限检查,可以确保只有具备相应权限的用户才能执行该操作。
学生信息录入与查询学生信息录入学生信息包括个人基本信息、家庭背景、学习成绩等。
在Java中,可以使用面向对象的思想,创建一个学生类,包含各种属性和方法。
通过用户界面,可以输入学生的各项信息,并将其保存到数据库中。
学生信息查询学生信息查询是系统的核心功能之一。
用户可以通过多种方式进行查询,例如按照学号、姓名、班级等进行精确查询,或者按照年级、性别等进行模糊查询。
在Java中,可以使用SQL语句来实现数据库查询操作,并将结果显示在用户界面上。
成绩管理成绩录入成绩管理是学生信息管理系统的重要组成部分。
教师可以根据课程安排录入学生成绩,并将其与相应的学生和课程关联起来。
在Java中,可以使用面向对象的思想,创建一个成绩类,包含相关属性和方法。
通过用户界面,教师可以输入学生成绩,并将其保存到数据库中。
学生选课系统(UML)

组内分工:黄金全:用例图与类图,调查问卷杨铖佳:状态图与顺序图,调查问卷李冰:细化类图与E-R图,调查问卷一,课程设计目的通过这次的设计,主要就是做出一个小型管理系统,来加强JAVA所学知识的巩固与融会贯通,可以说就是对一个学期所学知识的一个小结,加强对JAVA数据库的理解。
二,需求分析功能需求分析:该系统具备管理学生信息,课程信息,选课信息的功能:用户通过输入账号与密码进入该系统后,可以进行一些基础维护(学生信息维护,课程信息维护,选课信息维护)。
全部都可以进行增加,修改,删除,模糊查询。
(1)用例图分析工作流、类图状态图顺序图用户登录(1)用户在登录界面输入用户名与密码后,若登录信息正确,则依据用户权限,用户分别进入学生、老师与管理员界面。
(2)用户可以在登录界面进行密码的修改,密码修改后会保存在用户权限表中。
可能出现的情况:输入用户名或密码错误,系统提示非法用户登录,需要重新输入正确的用户名与密码。
学生选定课程学生选定课程,修改已经选定的课程,保存,提交,退出系统。
老师做出相应操作老师根据相应情况对学生进行增删,增加某些课程,删除某些课程,修改学分等。
老师查瞧学生选课情况老师想瞧学生的选课情况,系统要返回学生选课情况。
设计工作流细化类图数据库设计概念模型学生课程联系E-R图一个学生可以选修多么课程,一个课程可以被多个学生选修。
所以学生与课程就是m:n的关系。
学生的属性有姓名、学号、登录密码与所属院系。
课程的属性有课程号、课程名、课时与学分。
教师课程关系图。
一个老师可以讲授多门课程,一个课程可以有多个老师上,比如很多专业班级要少C语言,全校肯定不止一个C语言老师,所以老师与课程的关系就是n:m、老师的属性有姓名、教师号、密码与所属院系,课程的属性有课程号、课程名、课时与学管理员教师关系实体E-R图一个管理员可以管多个老师,所以管理员与老师就是1:n的关系。
逻辑模型学生(学号(主键),姓名,密码,院系)课程(课程号(主键),课程名,课时,学分)选修(学生,课程,(都就是主键))老师(教师号(主键),姓名,密码,院系)课程(课程号(主键),课程名,课时,学分)讲授(老师,课程,(都就是主键)参考文献1.黄梯云,冯玉强. 管理信息系统.北京:高等教育出版社,2006。
java课程设计题目及代码

java课程设计题目及代码题目:学生成绩管理系统设计一个学生成绩管理系统,能够实现以下功能:1. 添加学生信息:录入学生的姓名、学号、性别等基本信息。
2. 添加学生成绩:录入学生的各门成绩,包括语文、数学、英语等课程。
3. 查找学生成绩:根据学号或姓名查找学生的成绩信息。
4. 修改学生成绩:根据学号或姓名修改学生的成绩信息。
5. 删除学生成绩:根据学号或姓名删除学生的成绩信息。
6. 统计学生成绩:统计全班学生的各门课程的平均分、最高分和最低分。
代码实现如下:```javaimport java.util.ArrayList;import java.util.HashMap;import java.util.Map;import java.util.Scanner;class Student {private String name;private String studentId;private String gender;private Map<String, Integer> scores;public Student(String name, String studentId, String gender) { = name;this.studentId = studentId;this.gender = gender;this.scores = new HashMap<>();}public String getName() {return name;}public String getStudentId() {return studentId;}public String getGender() {return gender;}public Map<String, Integer> getScores() {return scores;}public void addScore(String subject, int score) {scores.put(subject, score);}public void updateScore(String subject, int score) { scores.put(subject, score);}public void removeScore(String subject) {scores.remove(subject);}}class GradeManagementSystem {private ArrayList<Student> students;public GradeManagementSystem() {students = new ArrayList<>();}public void addStudent(String name, String studentId, String gender) {students.add(new Student(name, studentId, gender));}public Student findStudentById(String studentId) {for (Student student : students) {if (student.getStudentId().equals(studentId)) {return student;}}return null;}public Student findStudentByName(String name) {for (Student student : students) {if (student.getName().equals(name)) {return student;}}return null;}public void addScore(String studentId, String subject, int score) {Student student = findStudentById(studentId);if (student != null) {student.addScore(subject, score);}}public void updateScore(String studentId, String subject, int score) {Student student = findStudentById(studentId);if (student != null) {student.updateScore(subject, score);}}public void removeScore(String studentId, String subject) {Student student = findStudentById(studentId);if (student != null) {student.removeScore(subject);}}public void printStudentInfo(Student student) {System.out.println("姓名:" + student.getName());System.out.println("学号:" + student.getStudentId());System.out.println("性别:" + student.getGender());System.out.println("成绩:");for (Map.Entry<String, Integer> entry :student.getScores().entrySet()) {System.out.println(entry.getKey() + ":" +entry.getValue());}}public void printClassStatistics() {int chineseTotal = 0;int mathTotal = 0;int englishTotal = 0;int chineseMax = 0;int mathMax = 0;int englishMax = 0;int chineseMin = Integer.MAX_VALUE;int mathMin = Integer.MAX_VALUE;int englishMin = Integer.MAX_VALUE;for (Student student : students) {Map<String, Integer> scores = student.getScores();if (scores.containsKey("语文")) {int chineseScore = scores.get("语文");chineseTotal += chineseScore;chineseMax = Math.max(chineseMax, chineseScore);chineseMin = Math.min(chineseMin, chineseScore); }if (scores.containsKey("数学")) {int mathScore = scores.get("数学");mathTotal += mathScore;mathMax = Math.max(mathMax, mathScore);mathMin = Math.min(mathMin, mathScore);}if (scores.containsKey("英语")) {int englishScore = scores.get("英语");englishTotal += englishScore;englishMax = Math.max(englishMax, englishScore); englishMin = Math.min(englishMin, englishScore); }}int studentCount = students.size();double chineseAverage = (double) chineseTotal / studentCount;double mathAverage = (double) mathTotal / studentCount; double englishAverage = (double) englishTotal / studentCount;System.out.println("语文最高分:" + chineseMax);System.out.println("数学最高分:" + mathMax);System.out.println("英语最高分:" + englishMax);System.out.println("语文最低分:" + chineseMin);System.out.println("数学最低分:" + mathMin);System.out.println("英语最低分:" + englishMin);System.out.println("语文平均分:" + chineseAverage); System.out.println("数学平均分:" + mathAverage); System.out.println("英语平均分:" + englishAverage); }}public class Main {public static void main(String[] args) {GradeManagementSystem system = new GradeManagementSystem();// 添加学生信息system.addStudent("张三", "001", "男");system.addStudent("李四", "002", "女");system.addStudent("王五", "003", "男");// 添加学生成绩system.addScore("001", "语文", 90);system.addScore("001", "数学", 85);system.addScore("001", "英语", 92);system.addScore("002", "语文", 80);system.addScore("002", "数学", 75);system.addScore("002", "英语", 88);system.addScore("003", "语文", 95);system.addScore("003", "数学", 90);system.addScore("003", "英语", 97);// 查找学生成绩Student student = system.findStudentById("001"); if (student != null) {system.printStudentInfo(student);}// 修改学生成绩system.updateScore("002", "数学", 78);student = system.findStudentById("002");if (student != null) {system.printStudentInfo(student);}// 删除学生成绩system.removeScore("003", "语文");student = system.findStudentById("003");if (student != null) {system.printStudentInfo(student);}// 统计学生成绩system.printClassStatistics();}}```这是一个简单的学生成绩管理系统,通过添加学生信息、添加学生成绩、查找学生成绩、修改学生成绩、删除学生成绩和统计学生成绩等功能,可以对学生的成绩进行管理和操作。
[工学]学生信息管理系统完整源码
![[工学]学生信息管理系统完整源码](https://img.taocdn.com/s3/m/3483296b26284b73f242336c1eb91a37f1113291.png)
学生信息管理系统完整源代码注:本系统采用C/S结构,运用Java GUI知识编写,数据库为SQL SERVER 2005,没有采用典型的三级框架结构,所以代码有冗余,仅供参考。
一、数据表及数据源首先创建数据库,包含数据表如下:数据库创建完成后,新建一个名为SIMS的数据源,不会建数据源的同学可以在去搜索创建数据源的详细步骤,这里的数据名称一定要为SIMS,否则在以后程序连接数据库的语句中会出现错误。
二、操作演示三、代码部分创建Java工程,创建名称为SIMS的包,一下Java类均包含在一个包内。
1.登录界面package SIMS;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.sql.*;import java.text.SimpleDateFormat;import java.util.*;import java.util.Date;public class login extends JFrame implements ActionListener{String userID; //保留用户输入IDString password; //保留用户输入passwordJLabel jlID=new JLabel("用户ID:"); //使用文本创建标签对象 JLabel jlPwd=new JLabel("密码:");JTextField jtID=new JTextField(); //创建ID输入框JPasswordField jpPwd=new JPasswordField(); //创建密码输入框ButtonGroup bg=new ButtonGroup(); //创建ButtonGroup组件对象JPanel jp=new JPanel(); //创建Panel容器JLabel jl=new JLabel();JRadioButton jrb1=new JRadioButton("管理员");JRadioButton jrb2=new JRadioButton("教师");JRadioButton jrb3=new JRadioButton("学生",true);JButton jb1=new JButton("登录");JButton jb2=new JButton("重置");public login(){this.setLayout(null); //设置窗口布局管理器this.setTitle("学生信息管理系统"); //设置窗口标题this.setBounds(200,150,500,300); //设置主窗体位置大小和可见性this.setVisible(true); //设置窗口的可见性this.setResizable(false);jlID.setBounds(150,60,100,20); //设置ID框属性jtID.setBounds(220,60,100,20); //设置ID输入框属性jlPwd.setBounds(150,90,100,20); //设置密码框属性jpPwd.setBounds(220,90,100,20); //设置密码输入框属性jp.setBounds(35,120,400,250); //设置JPanel容器属性jb1.setBounds(160,170,60,20); //设置登录按钮属性jb2.setBounds(250,170,60,20); //设置取消按钮属性jb1.addActionListener(this); //设置登录按钮监听器jb2.addActionListener(this); //设置取消按钮监听器jl.setBounds(340,75,130,20); //设置提示框属性bg.add(jrb1); //将所有空间加入窗体bg.add(jrb2);bg.add(jrb3);this.add(jlID);this.add(jlPwd);this.add(jtID);this.add(jpPwd);this.add(jb1);this.add(jb2);this.add(jl);jp.add(jrb1);jp.add(jrb2);jp.add(jrb3);this.add(jp);centerShell(this);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}private void centerShell(JFrame shell) //窗口在屏幕中间显示{//得到屏幕的宽度和高度int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width;//得到Shell窗口的宽度和高度int shellHeight = shell.getBounds().height;int shellWidth = shell.getBounds().width;//如果窗口大小超过屏幕大小,让窗口与屏幕等大if(shellHeight > screenHeight)shellHeight = screenHeight;if(shellWidth > screenWidth)shellWidth = screenWidth;//让窗口在屏幕中间显示shell.setLocation(( (screenWidth - shellWidth) / 2),((screenHeight - shellHeight) / 2) );}public boolean equals(Object obj){ //重写equals方法判断字符串相等if(obj==null)return false;if(this == obj){return true;}if(obj instanceof String) {String str = (String)obj;return str.equals(userID);}return false;}public void actionPerformed(ActionEvent e){userID=jtID.getText(); //获取用户输入IDpassword=jpPwd.getText(); //获取用户输入密码if(e.getSource()==jb1){ //处理登录事件if(userID.equals("") || password.equals("")){jl.setFont(new Font("red",Font.BOLD,12)); //设置提示字体jl.setForeground(Color.red);jl.setText("请输入用户ID和密码");}else{Connection con=null;try{String url="jdbc:odbc:SIMS"; //连接数据库con=DriverManager.getConnection(url,"","");//获取连接字符串Statement stat=con.createStatement();if(jrb1.isSelected())//如果登录选中的管理员{ResultSet rs=stat.executeQuery("select * from Admin"); //判断输入用户名是否存在int flag=0;while(rs.next()){if(rs.getString(1).equals(userID)){flag=1;break;}}if(flag==0){jl.setFont(new Font("red",Font.BOLD,12));//设置提示字体jl.setForeground(Color.red);jl.setText("用户ID不存在");}if(flag==1){ResultSet rss=stat.executeQuery("selectAdmin_Pwd,Admin_Name from Admin where Admin_ID='"+userID+"'");//从表Admin获取信息while(rss.next()){String str=rss.getString(1);if(str.equals(password)){new admin(rss.getString(2));//创建admin窗口this.dispose(); //释放窗体}else{jl.setFont(new Font("red",Font.BOLD,12)); //设置提示字体jl.setForeground(Color.red);jl.setText("密码错误");}}}}else if(jrb2.isSelected()){ResultSet rs=stat.executeQuery("select * from Teacher_Info"); //判断输入用户名是否存在int flag=0;while(rs.next()){if(rs.getString(1).equals(userID)){flag=1;break;}}if(flag==0){jl.setFont(new Font("red",Font.BOLD,12));//设置提示字体jl.setForeground(Color.red);jl.setText("用户ID不存在");}if(flag==1){ResultSet rss=stat.executeQuery("selectTea_Pwd,Tea_Names from Teacher_Info where Tea_ID='"+userID+"'");//从表Teacher_Info获取信息while(rss.next()){String str=rss.getString(1);if(str.equals(password)){new teacher(rss.getString(2),userID);//创建admin窗口this.dispose(); //释放窗体}else{jl.setFont(new Font("red",Font.BOLD,12));//设置提示字体jl.setForeground(Color.red);jl.setText("密码错误");}}}}else if(jrb3.isSelected()){ResultSet rs=stat.executeQuery("select * from Student_Info"); //判断输入用户名是否存在int flag=0;while(rs.next()){if(rs.getString(1).equals(userID)){flag=1;break;}}if(flag==0){jl.setFont(new Font("red",Font.BOLD,12));//设置提示字体jl.setForeground(Color.red);jl.setText("用户ID不存在");}if(flag==1){ResultSet rsss=stat.executeQuery("selectStu_Pwd,Stu_Name from Student_Info where Stu_ID='"+userID+"'");//从表Student_Info获取信息while(rsss.next()){String str=rsss.getString(1);if(str.equals(password)){new student(rsss.getString(2),userID);//创建admin窗口this.dispose(); //释放窗体}else{jl.setFont(new Font("red",Font.BOLD,12));//设置提示字体jl.setForeground(Color.red);jl.setText("密码错误");}}}}}catch(Exception ex){ex.getStackTrace();}finally{try{con.close();}catch(Exception exc){exc.printStackTrace();}}}}else if(e.getSource()==jb2){ //处理登录事件jtID.setText("");jpPwd.setText("");jrb3.setSelected(true);jl.setText("");}}public static void main(String[] args){new login();}}2.添加课程package SIMS;import javax.swing.*;import java.sql.*;import java.awt.*;import java.awt.event.*;public class add_course extends JFrame implements ActionListener{ static add_course ss;String courseID=""; //课程名String coursename=""; //课程名String count=""; //课时JLabel warning=new JLabel(); //输入信息提示框JLabel title=new JLabel();JLabel note1=new JLabel("*");JLabel note2=new JLabel("*");JLabel jlcourseID=new JLabel("课程号:"); //使用文本框创建标签对象JLabel jlcoursename=new JLabel("课程名:");JLabel jlcount=new JLabel("课时:");JTextField jtcourseID=new JTextField(); //创建文本框对象JTextField jtcoursename=new JTextField();JTextField jtcount=new JTextField();JButton submit=new JButton("添加"); //创建按钮对象JButton reset=new JButton("重置");public add_course(){ //添加教师账号信息this.setTitle("添加课程信息"); //设置窗口标题this.setLayout(null); //设置窗口布局管理器this.add(jlcourseID); //将控件添加到窗体this.add(title);this.add(jlcoursename);this.add(jlcount);this.add(jtcourseID);this.add(jtcoursename);this.add(jtcount);this.add(note1);this.add(note2);this.add(submit);this.add(reset);this.add(warning);title.setFont(new Font("red",Font.BOLD,15)); //设置提示字体title.setForeground(Color.red);note1.setFont(new Font("red",Font.BOLD,20)); //设置提示字体note1.setForeground(Color.red);note2.setFont(new Font("red",Font.BOLD,20)); //设置提示字体note2.setForeground(Color.red);warning.setFont(new Font("red",Font.BOLD,12)); //设置提示字体warning.setForeground(Color.red);title.setText("添加课程信息"); //设置控件及窗体位置大小title.setBounds(222,20,150,20);jlcourseID.setBounds(180,80,100,20);jlcoursename.setBounds(180,140,100,20);jlcount.setBounds(180,200,100,20);jtcourseID.setBounds(250,80,140,20);jtcoursename.setBounds(250,140,140,20);jtcount.setBounds(250,200,140,20);note1.setBounds(400,80,140,20);note2.setBounds(400,140,140,20);submit.setBounds(200,270,60,20);reset.setBounds(300,270,60,20);warning.setBounds(420,140,150,20); //设置提示框位置大小submit.addActionListener(this); //添加监听器reset.addActionListener(this);this.setSize(600,400); //设置窗体大小centerShell(this); //设置窗口位置在屏幕中央this.setResizable(false); //设置窗体不可变大小this.setVisible(true); //设置窗口可见性this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);}public boolean equals(Object obj){ //重写equals方法判断字符串相等if(obj==null)return false;if(this == obj){return true;}if(obj instanceof String) {String str = (String)obj;return str.equals(courseID);}return false;}public void actionPerformed(ActionEvent e){courseID=jtcourseID.getText(); //获取用户输入内容coursename=jtcoursename.getText();count=jtcount.getText();int temp=0,flag=0;Connection con=null;if(e.getSource()==submit){ //判断是否已输入必填信息if(courseID.equals("") || coursename.equals("")){warning.setText("请输入必填信息");}else{try{String url="jdbc:odbc:SIMS"; //连接数据库con=DriverManager.getConnection(url,"",""); //获取连接字符串Statement stat=con.createStatement();ResultSet rs=stat.executeQuery("select Course_ID from Course");while(rs.next()){if(rs.getString(1).equals(courseID)){warning.setText("课程ID已存在");flag=1; //判断用户名唯一break;}}if(flag!=1){if(!count.equals("")){temp=stat.executeUpdate("insert intoCourse(Course_ID,Course_Name,Course_Count)values('"+courseID+"','"+coursename+"','"+count+"')");}else{temp=stat.executeUpdate("insert intoCourse(Course_ID,Course_Name) values('"+courseID+"','"+coursename+"')");}}if(temp==1){JOptionPane.showMessageDialog(ss,"添加成功");warning.setText("");}else{JOptionPane.showMessageDialog(ss,"添加失败");}}catch(Exception ex){ex.getStackTrace();}}}else if(e.getSource()==reset){warning.setText("");jtcourseID.setT ext("");jtcoursename.setText("");jtcount.setText("");}}private void centerShell(JFrame shell) //窗口在屏幕中间显示{//得到屏幕的宽度和高度int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width;//得到Shell窗口的宽度和高度int shellHeight = shell.getBounds().height;int shellWidth = shell.getBounds().width;//如果窗口大小超过屏幕大小,让窗口与屏幕等大if(shellHeight > screenHeight)shellHeight = screenHeight;if(shellWidth > screenWidth)shellWidth = screenWidth;//让窗口在屏幕中间显示shell.setLocation(((screenWidth - shellWidth)/ 2),((screenHeight - shellHeight)/2));}}3.添加学生package SIMS;import javax.swing.*;import java.sql.*;import java.awt.*;import java.awt.event.*;public class add_student extends JFrame implements ActionListener{static add_teacher ss;String userID=""; //用户名String pwd1=""; //密码String pwd2=""; //确认密码String getsdept=""; //院系String name=""; //姓名JLabel warning=new JLabel(); //输入信息提示框JLabel title=new JLabel();JLabel note1=new JLabel("*");JLabel note2=new JLabel("*");JLabel note3=new JLabel("*");JLabel jlID=new JLabel("学号:"); //创建文本框对象 JLabel jlName=new JLabel("姓名:");JLabel jlPwd=new JLabel("密码:");JLabel jlPwd2=new JLabel("确认密码:");JLabel sdept=new JLabel("学院:");JTextField jtID=new JTextField();JTextField jtName=new JTextField();JPasswordField jtPwd=new JPasswordField ();JPasswordField jtPwd2=new JPasswordField ();JTextField jtsdept=new JTextField();JButton submit=new JButton("添加"); //创建按钮对象JButton reset=new JButton("重置");public add_student(){this.setTitle("添加学生账号信息"); //设置窗口标题this.setLayout(null); //设置窗口布局管理器this.add(jlID); //将控件添加到窗体this.add(title);this.add(jlName);this.add(jlPwd);this.add(jlPwd2);this.add(sdept);this.add(jtID);this.add(jtName);this.add(jtPwd);this.add(jtPwd2);this.add(jtsdept);this.add(note1);this.add(note2);this.add(note3);this.add(submit);this.add(reset);this.add(warning);title.setFont(new Font("red",Font.BOLD,15)); //设置提示字体title.setForeground(Color.red);note1.setFont(new Font("red",Font.BOLD,20)); //设置提示字体note1.setForeground(Color.red);note2.setFont(new Font("red",Font.BOLD,20)); //设置提示字体note2.setForeground(Color.red);note3.setFont(new Font("red",Font.BOLD,20)); //设置提示字体note3.setForeground(Color.red);warning.setFont(new Font("red",Font.BOLD,12)); //设置提示字体warning.setForeground(Color.red);title.setText("添加学生账号信息");title.setBounds(222,20,150,20);jlID.setBounds(180,60,100,20);jlName.setBounds(180,100,100,20);jlPwd.setBounds(180,140,100,20);jlPwd2.setBounds(180,180,100,20);sdept.setBounds(180,220,100,20);jtID.setBounds(250,60,140,20);jtName.setBounds(250,100,140,20);jtPwd.setBounds(250,140,140,20);jtPwd2.setBounds(250,180,140,20);jtsdept.setBounds(250,220,140,20);note1.setBounds(400,60,140,20);note2.setBounds(400,140,140,20);note3.setBounds(400,180,140,20);submit.setBounds(200,270,60,20);reset.setBounds(300,270,60,20);warning.setBounds(420,100,150,20);submit.addActionListener(this);reset.addActionListener(this);this.setSize(600,400);centerShell(this);this.setVisible(true);this.setResizable(false); //设置窗体不可变大小this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);}public boolean equals(Object obj){ //重写equals方法判断字符串相等if(obj==null)return false;if(this == obj){return true;}if(obj instanceof String) {String str = (String)obj;return str.equals(pwd1);}return false;}public void actionPerformed(ActionEvent e){userID=jtID.getText(); //获取用户输入内容pwd1=jtPwd.getText();pwd2=jtPwd2.getText();getsdept=jtsdept.getText();name=jtName.getText();int temp=0,flag=0;Connection con=null;if(e.getSource()==submit){if(userID.equals("") || pwd1.equals("") || pwd2.equals("")){ //判断是否已输入必填信息warning.setText("请输入必填信息");}else if(!pwd1.equals(pwd2)){ //判断两次输入密码是否相同warning.setText("两次输入密码不相同");}else{try{String url="jdbc:odbc:SIMS"; //连接数据库con=DriverManager.getConnection(url,"",""); //获取连接字符串Statement stat=con.createStatement();ResultSet rs=stat.executeQuery("select Stu_ID from Student_Info");while(rs.next()){if(rs.getString(1).equals(userID)){warning.setText("用户ID已存在");flag=1; //判断用户名唯一break;}}if(flag!=1){if(!name.equals("") && !getsdept.equals("")){temp=stat.executeUpdate("insert intoStudent_Info(Stu_ID,Stu_Name,Stu_Pwd,Depart)values('"+userID+"','"+name+"','"+pwd1+"','"+getsdept+"')");}else if(!name.equals("") && getsdept.equals("")){temp=stat.executeUpdate("insert intoStudent_Info(Stu_ID,Stu_Name,Stu_Pwd) values('"+userID+"','"+name+"','"+pwd1+"')");}else if(name.equals("") && !getsdept.equals("")){temp=stat.executeUpdate("insert intoStudent_Info(Stu_ID,Stu_Pwd,Depart) values('"+userID+"','"+pwd1+"','"+getsdept+"')");}else{temp=stat.executeUpdate("insert intoStudent_Info(Stu_ID,Stu_Pwd) values('"+userID+"','"+pwd1+"')");}}if(temp==1){JOptionPane.showMessageDialog(ss,"添加成功");}else{JOptionPane.showMessageDialog(ss,"添加失败");}}catch(Exception ex){ex.getStackTrace();}}}else if(e.getSource()==reset){ //重置所有控件warning.setText("");jtID.setText("");jtName.setText("");jtPwd.setText("");jtPwd2.setText("");jtsdept.setText("");}}private void centerShell(JFrame shell) //窗口在屏幕中间显示{//得到屏幕的宽度和高度int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width;//得到Shell窗口的宽度和高度int shellHeight = shell.getBounds().height;int shellWidth = shell.getBounds().width;//如果窗口大小超过屏幕大小,让窗口与屏幕等大if(shellHeight > screenHeight)shellHeight = screenHeight;if(shellWidth > screenWidth)shellWidth = screenWidth;//让窗口在屏幕中间显示shell.setLocation(((screenWidth - shellWidth)/ 2),((screenHeight - shellHeight)/2));}//public static void main(String args[]){// new add_student();//}}4.添加教师package SIMS;import javax.swing.*;import java.sql.*;import java.awt.*;import java.awt.event.*;public class add_teacher extends JFrame implements ActionListener{static add_teacher ss;String userID=""; //用户名String pwd1=""; //密码String pwd2=""; //确认密码String getsdept=""; //院系String name=""; //姓名JLabel warning=new JLabel(); //输入信息提示框JLabel title=new JLabel();JLabel note1=new JLabel("*");JLabel note2=new JLabel("*");JLabel note3=new JLabel("*");JLabel jlID=new JLabel("教工号:"); //使用文本框创建标签对象 JLabel jlName=new JLabel("姓名:");JLabel jlPwd=new JLabel("密码:");JLabel jlPwd2=new JLabel("确认密码:");JLabel sdept=new JLabel("学院:");JTextField jtID=new JTextField(); //创建文本框对象JTextField jtName=new JTextField();JPasswordField jtPwd=new JPasswordField ();JPasswordField jtPwd2=new JPasswordField ();JTextField jtsdept=new JTextField();JButton submit=new JButton("添加"); //创建按钮对象JButton reset=new JButton("重置");public add_teacher(){ //添加教师账号信息this.setTitle("添加教师账号信息"); //设置窗口标题this.setLayout(null); //设置窗口布局管理器this.add(jlID); //将控件添加到窗体this.add(title);this.add(jlName);this.add(jlPwd);this.add(jlPwd2);this.add(sdept);this.add(jtID);this.add(jtName);this.add(jtPwd);this.add(jtPwd2);this.add(jtsdept);this.add(note1);this.add(note2);this.add(note3);this.add(submit);this.add(reset);this.add(warning);title.setFont(new Font("red",Font.BOLD,15)); //设置提示字体title.setForeground(Color.red);note1.setFont(new Font("red",Font.BOLD,20)); //设置提示字体note1.setForeground(Color.red);note2.setFont(new Font("red",Font.BOLD,20)); //设置提示字体note2.setForeground(Color.red);note3.setFont(new Font("red",Font.BOLD,20)); //设置提示字体note3.setForeground(Color.red);warning.setFont(new Font("red",Font.BOLD,12)); //设置提示字体warning.setForeground(Color.red);title.setText("添加教师账号信息"); //设置控件及窗体位置大小title.setBounds(222,20,150,20);jlID.setBounds(180,60,100,20);jlName.setBounds(180,100,100,20);jlPwd.setBounds(180,140,100,20);jlPwd2.setBounds(180,180,100,20);sdept.setBounds(180,220,100,20);jtID.setBounds(250,60,140,20);jtName.setBounds(250,100,140,20);jtPwd.setBounds(250,140,140,20);jtPwd2.setBounds(250,180,140,20);jtsdept.setBounds(250,220,140,20);note1.setBounds(400,60,140,20);note2.setBounds(400,140,140,20);note3.setBounds(400,180,140,20);submit.setBounds(200,270,60,20);reset.setBounds(300,270,60,20);warning.setBounds(420,100,150,20); //设置提示框位置大小submit.addActionListener(this); //添加监听器reset.addActionListener(this);this.setSize(600,400); //设置窗体大小centerShell(this); //设置窗口位置在屏幕中央this.setResizable(false); //设置窗体不可变大小this.setVisible(true); //设置窗口可见性this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);}public boolean equals(Object obj){ //重写equals方法判断字符串相等if(obj==null)return false;if(this == obj){return true;}if(obj instanceof String) {String str = (String)obj;return str.equals(pwd1);}return false;}public void actionPerformed(ActionEvent e){userID=jtID.getText(); //获取用户输入内容pwd1=jtPwd.getText();pwd2=jtPwd2.getText();getsdept=jtsdept.getText();name=jtName.getText();int temp=0,flag=0;Connection con=null;if(e.getSource()==submit){ //判断是否已输入必填信息if(userID.equals("") || pwd1.equals("") || pwd2.equals("")){warning.setText("请输入必填信息");}else if(!pwd1.equals(pwd2)){ //判断两次输入密码是否一致warning.setText("两次输入密码不相同");}else{try{String url="jdbc:odbc:SIMS"; //连接数据库con=DriverManager.getConnection(url,"",""); //获取连接字符串Statement stat=con.createStatement();ResultSet rs=stat.executeQuery("select Tea_ID from Teacher_Info");while(rs.next()){if(rs.getString(1).equals(userID)){warning.setText("用户ID已存在");flag=1; //判断用户名唯一break;}}if(flag!=1){if(!name.equals("") && !getsdept.equals("")){temp=stat.executeUpdate("insert intoTeacher_Info(Tea_ID,Tea_Names,T ea_Pwd,Depart)values('"+userID+"','"+name+"','"+pwd1+"','"+getsdept+"')");}else if(!name.equals("") && getsdept.equals("")){temp=stat.executeUpdate("insert intoTeacher_Info(Tea_ID,Tea_Names,T ea_Pwd)values('"+userID+"','"+name+"','"+pwd1+"')");}else if(name.equals("") && !getsdept.equals("")){temp=stat.executeUpdate("insert intoTeacher_Info(Tea_ID,Tea_Pwd,Depart) values('"+userID+"','"+pwd1+"','"+getsdept+"')");}else{temp=stat.executeUpdate("insert intoTeacher_Info(Tea_ID,Tea_Pwd) values('"+userID+"','"+pwd1+"')");}}if(temp==1){JOptionPane.showMessageDialog(ss,"添加成功");}else{JOptionPane.showMessageDialog(ss,"添加失败");}}catch(Exception ex){ex.getStackTrace();}}}else if(e.getSource()==reset){warning.setText("");jtID.setText("");jtName.setText("");jtPwd.setText("");jtPwd2.setText("");jtsdept.setText("");}}private void centerShell(JFrame shell) //窗口在屏幕中间显示{//得到屏幕的宽度和高度int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width;//得到Shell窗口的宽度和高度int shellHeight = shell.getBounds().height;int shellWidth = shell.getBounds().width;//如果窗口大小超过屏幕大小,让窗口与屏幕等大if(shellHeight > screenHeight)shellHeight = screenHeight;if(shellWidth > screenWidth)shellWidth = screenWidth;//让窗口在屏幕中间显示shell.setLocation(((screenWidth - shellWidth)/ 2),((screenHeight - shellHeight)/2));}// public static void main(String[] args){// new add_teacher();// }}5.添加授课信息package SIMS;import javax.swing.*;import java.sql.*;import java.awt.*;import java.awt.event.*;public class add_tc extends JFrame implements ActionListener{static add_tc ss;String courseID=""; //课程名String teachername=""; //课程名JLabel warning=new JLabel(); //输入信息提示框JLabel title=new JLabel();JLabel note1=new JLabel("*");JLabel note2=new JLabel("*");JLabel jlcourseID=new JLabel("课程号:"); //使用文本框创建标签对象JLabel jlteachername=new JLabel("教师号:");JTextField jtcourseID=new JTextField(); //创建文本框对象JTextField jtteachername=new JTextField();JButton submit=new JButton("添加"); //创建按钮对象JButton reset=new JButton("重置");public add_tc(){ //添加授课信息this.setTitle("添加授课信息"); //设置窗口标题this.setLayout(null); //设置窗口布局管理器this.add(jlcourseID); //将控件添加到窗体this.add(jlteachername);this.add(title);this.add(jtcourseID);this.add(jtteachername);this.add(note1);this.add(note2);this.add(submit);this.add(reset);this.add(warning);title.setFont(new Font("red",Font.BOLD,15)); //设置提示字体title.setForeground(Color.red);note1.setFont(new Font("red",Font.BOLD,20)); //设置提示字体note1.setForeground(Color.red);note2.setFont(new Font("red",Font.BOLD,20)); //设置提示字体note2.setForeground(Color.red);warning.setFont(new Font("red",Font.BOLD,12)); //设置提示字体warning.setForeground(Color.red);title.setText("添加授课信息"); //设置控件及窗体位置大小title.setBounds(222,20,150,20);jlcourseID.setBounds(180,80,100,20);jlteachername.setBounds(180,140,100,20);jtcourseID.setBounds(250,80,140,20);jtteachername.setBounds(250,140,140,20);note1.setBounds(400,80,140,20);note2.setBounds(400,140,140,20);submit.setBounds(200,250,60,20);reset.setBounds(300,250,60,20);warning.setBounds(420,140,150,20); //设置提示框位置大小submit.addActionListener(this); //添加监听器reset.addActionListener(this);this.setSize(600,400); //设置窗体大小centerShell(this); //设置窗口位置在屏幕中央this.setResizable(false); //设置窗体不可变大小this.setVisible(true); //设置窗口可见性this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);}public boolean equals(Object obj){ //重写equals方法判断字符串相等if(obj==null)return false;if(this == obj){return true;}if(obj instanceof String) {String str = (String)obj;return str.equals(courseID);}return false;}public void actionPerformed(ActionEvent e){courseID=jtcourseID.getText(); //获取用户输入内容teachername=jtteachername.getText();int temp=0,flag1=0,flag2=0,flag3=0;Connection con=null;if(e.getSource()==submit){ //判断是否已输入必填信息if(courseID.equals("") || teachername.equals("")){warning.setText("请输入必填信息");}else{try{String url="jdbc:odbc:SIMS"; //连接数据库con=DriverManager.getConnection(url,"",""); //获取连接字符串Statement stat=con.createStatement();ResultSet rs=stat.executeQuery("select Course_ID from Course");while(rs.next()){if(rs.getString(1).equals(courseID)){flag1=1; //判断课程ID存在break;}}ResultSet rss=stat.executeQuery("select Tea_ID fromTeacher_Info");while(rss.next()){if(rss.getString(1).equals(teachername)){flag2=1; //判断教师ID存在break;}}if(flag1!=1){warning.setText("课程ID不存在");}else if(flag2!=1){warning.setText("教师ID不存在");}ResultSet rsss=stat.executeQuery("select Course_ID,T ea_ID from tc");while(rsss.next()){if(rsss.getString(1).equals(courseID) &&rsss.getString(2).equals(teachername)){flag3=1;warning.setText("授课信息重复");。
学生选课管理系统

目录1需求定义描述. ......................... 错误!未定义书签。
2 需求分析与设计 (1)2.1 初步需求分析 (1)2.2 系统数据流图 (2)2.3 核心数据的数据字典 (4)2.4系统E-R图及数据库逻辑设计 (5)根据需求分析,得到如下的E-R图: (5)3详细设计 (8)3.1 系统的命名规格定义 (8)3.2 数据结构及数据库建立 (8)3.3系统总体模块结构 (10)3.4系统主要模块算法实现 (12)4测试报告 (14)4.1测试用例 (14)4.2测试结果 (15)5结论 (16)1需求定义描述在学生选课系统中,用户有学生,教师以及管理员。
●假设学生所能进行的日常活动如下:◆学生可以进行选课;◆学生可以查询所选的课程;◆学生可以修改自己的登录密码;●假设教师可以进行的日常活动如下:◆教师可以查询自己所教课程的学生先看情况;◆教师可以修改自己的登录密码;●假设管理员可以进行的活动如下:◆管理员可以查询所有学生的选课情况;该系统预定的运行环境如下:a)操作系统:Windows xp操作系统;b)数据库系统:Mcrosoft SQL Sever 2000 企业版;2 需求分析与设计2.1 初步需求分析一个小型的学生选课系统中,用户(学号,姓名,年龄,性别,系别,班级,出生年月)可以注册成为会员,注册的用户可以选择要选修的课程,也可以查询已选修的课程(包含课程名、任课教师和上课时间,学分)等,老师(姓名,职位,所教课程)可以查看该门课程的选课人数及上课时间,管理员可以查看所有学生的选课情况,查看各门课程的任课老师的信息,查看各门课程选课人数,查看注册用户信息。
用户的需求具体体现在各种学习成绩的提供、保存、更新和查询方面,这就要求数据库结构能充分满足各种信息的输入和输出。
收集基本数据、数据结构及数据处理的流程,组成一份详尽数据字典,为后面的具体设计打下基础。
通过系统功能分析,针对一般的网上选课系统,总结出如下的需求信息:(1) 学生的需求:网上选课、选课情况查询包括该门课程的老师信息,上课时间以及该门课程的学分,修改密码等;(2) 本系统主要实现学生信息管理和选课查询。
学生选课管理系统 JAVA

1.设计的原始资料及依据查阅有关数据库设计、Java语言程序设计以及案例分析等资料,进一步熟悉面向对象程序设计基本理论以及基本思想。
本设计要求按照软件工程、数据库设计思想及设计步骤设计一个实用程序,并采用Java开发该系统。
通过本设计可以加深对面向对象程序设计基本思想的理解,加强学生研发、调试程序的能力,培养学生分析、解决问题的能力,提高学生的科技写作能力。
2.设计的主要内容及要求(1)写出系统的需求分析。
(2)写出系统的数据库设计过程,包括概念结构设计、逻辑结构设计、物理结构设计。
(数据库应用程序管理系统类设计详细写,其它类设计可以略)(3)写出系统设计思路—工作原理、功能规划。
(4)详细设计—数据分析、算法思路、类设计、功能实现(包括程序流程图、主要代码及注释)、界面等。
(5)运行调试与分析讨论--给出运行屏幕截图,分析运行结果,有何改进等。
3.对设计说明书撰写内容、格式、字数的要求(1)学生应撰写的内容为:中文摘要和关键词、目录、正文、参考文献等。
课程设计说明书(论文)的结构及各部分内容要求参照《沈阳工程学院毕业设计(论文)撰写规范》执行。
应做到文理通顺,内容正确完整,书写工整,装订整齐。
(2)装订格式:封面、任务书、成绩评审意见表、中文摘要和关键词、目录、正文、结论、致谢、参考文献。
(3)课程设计说明书(论文)是体现和总结课程设计成果的载体,一般不应少于3000字。
4.设计完成后应提交成果的种类、数量、质量等方面的要求(1)每组提交一份课程设计报告。
(2)每组提交一份课程设计成品。
5.时间进度安排6.主要参考资料(文献)[1] 耿详义.JA V A2教程.北京:清华大学出版社,2004。
[2] 张仿彦.JA V A项目开发全程实录.北京:清华大学出版社,2007。
[3] 杨小虎.软件工程课程设计.浙江:浙江大学出版社,2007。
[4] 韩万江.软件工程案例教程.北京:机械工业出版社,2007。
学生选课管理系统

/*教师的账号:teacher 密码:teacher*/#include <stdio.h>#include <windows.h>#include <stdlib.h>#include <conio.h>#include <string.h>#define CMAX30//最多可以添加的课程数量#define SMAX30//最大支持的学生数量#define CHMAX3//最大支持的选课数量/*定义两个结构体分别用来储存学生信息和课程的信息*/typedef struct course {int id;//课程编号char name[30]; //课程名char major[30];//专业char ter[30];//任课教师int max;//最大选课人数int sum;//目前选课人数} cor;typedef struct student {int id;//学号char name[30];//学生姓名char collage[30];//所在学院char major[30];//所在专业char Class[30];//所在班级int num;//选课数量cor mine[CHMAX];//学生选课信息}stu;cor listCor[CMAX];//储存从文本中读取的课程信息stu listStu[SMAX];//储存从文本中读取的学生信息int log;//当前登录的学生信息在listStu中的下标int sumCor;//课程数量int sumStu;//学生数量/********************************************函数申明*********************************************/int initStu();//从文件读取学生数据int initCor();//从文件读取课程信息void menuMain();//打印主菜单void menuStu();//学生菜单void menuTer();//教师菜单void logInTer();//老师登录void logInStu();//学生登录void Register();//学生注册void changeStu();//修改学生信息void signUp();//选课void list_ch();//选课情况void list_cor();//课程清单void logOut();//注销void saveStu();//将学生信息保存到文件void saveCor();//将课程信息保存到文件void changeCor();//修改课程void addCor();//添加课程void choose();//学生选课情况int findStu(int n);//查询学生int findCor(int n);//查询课程/********************************************函数定义*********************************************/int main(){sumStu=initStu();sumCor=initCor();while(1){menuMain();}return 0;}int initStu()//从文件读取学生数据{int i=0, j=0;FILE *fp = fopen("student.txt","r");//读取文件中的信息for(i=0 ; !feof(fp) ; i++){fscanf(fp,"%d %s %s %s %s %d \n",&listStu[i].id, listStu[i].name, listStu[i].collage ,listStu[i].major, listStu[i].Class, &listStu[i].num);for(j=0 ; j<listStu[i].num ; j++){fscanf(fp,"%d %s %s %s\n", &listStu[i].mine[j].id, listStu[i].mine[j].name,listStu[i].mine[j].major, listStu[i].mine[j].ter);}fscanf(fp,"\n");}fclose(fp);return i;}int initCor() //从文件读取课程信息{FILE *fp= fopen("course.txt","r");int i;for(i=0 ; !feof(fp) ; i++){fscanf(fp,"%d %s %s %s %d %d\n", &listCor[i].id, listCor[i].name, listCor[i].major, listCor[i].ter, &listCor[i].max, &listCor[i].sum);}fclose(fp);return i;}void menuMain() //打印主菜单{system("cls");printf("主菜单\n");printf("**************************************************\n");printf("\n\n\t\t >1.老师登录<\n\n");printf("\n\n\t\t >2.学生登录<\n\n");printf("\n\n\t\t >3.学生注册<\n\n");printf("\n\n\t\t >0.退出系统<\n\n");printf("\n*************************************************\n");while(1){switch(getch()){case '1':logInTer();break;case '2':logInStu();break;case '3':Register();break;case '0':exit(0);break;default:continue;break;}}}void menuTer()//教师菜单{system("cls");printf("教师菜单\n");printf("**************************************************\n");printf("\n\n\t\t >1.添加课程<\n\n");printf("\n\n\t\t >2.修改或删除课程<\n\n");printf("\n\n\t\t >3.课程菜单<\n\n");printf("\n\n\t\t >4.选课情况<\n\n");printf("\n\n\t\t >0.退出登录<\n\n");printf("\n*************************************************\n");while(1){switch(getch()){case '1':addCor();break;case '2':changeCor();break;case '3':list_cor();break;case '4':choose();break;case '0':return menuMain();default:continue;break;}}}void menuStu()//学生菜单{system("cls");printf("学生菜单\n");printf("**************************************************\n");printf("\n\n\t\t >1.修改信息<\n\n");printf("\n\n\t\t >2.学生选课<\n\n");printf("\n\n\t\t >3.选课情况<\n\n");printf("\n\n\t\t >4.注销用户<\n\n");printf("\n\n\t\t >0.退出登录<\n\n");printf("\n*************************************************\n");while(1){switch(getch()){case '1':changeStu();break;case '2':signUp();break;case '3':list_ch();break;case '4':logOut();break;case '0':return menuMain();default:continue;break;}}}void logInTer() //老师登录{char name[30];char password[30];char ch;int i=0;do{system("cls");printf("管理登录");printf("\n*************************************************\n");printf("\n\n\t\t* 账号:");gets(name);//输入密码以*的形式显示在屏幕上printf("\n\n\t\t* 密码:");while( i<30 && (ch=getch()) != '\r'){password[i++] = ch;putchar('*');}password[i] = '\0';if( (strcmp(name, "teacher") == 0) && (strcmp(password, "teacher") == 0) ){printf("\n\n\n*************************************************\n");printf("* 登陆成功");Sleep(1000);menuTer();}else{printf("\n\n\n*************************************************\n");printf("* 账号或密码输入错误\n* 按esc返回菜单") ;i = 0;}}while( getch() != 27 );return menuMain(); ;}void logInStu()//学生登录{int id;char name[30];do{system("cls");printf("学生登录");printf("\n*************************************************\n");printf("\n\n\t\t* 学号:");scanf("%d", &id);printf("\n\n\t\t* 姓名:");fflush(stdin);gets(name);log=findStu(id);if( strcmp(listStu[log].name,name)==0 && log!=-1 ){printf("\n\n\n*************************************************\n");printf("* 登陆成功");Sleep(1000);return menuStu();}else{printf("\n\n\n*************************************************\n");printf("* 输入错误\n* 按esc返回菜单") ;}}while( getch() != 27 );return menuMain(); ;}void Register()//学生注册(输入学生信息){stu a;printf("\n*************************************************\n");printf("注册\n\t学号:");scanf("%d", &a.id);if(findStu(a.id) != -1){printf("\n*************************************************\n");printf("* 该账号已存在\n* 按esc返回菜单") ;if(getch()==27)return menuMain();return Register();}fflush(stdin);//清空缓冲区printf("\t姓名:");gets();printf("\t学院:");gets(a.collage);printf("\t专业:");gets(a.major);printf("\t班级:");gets(a.Class);a.num=0;listStu[sumStu++] = a;//将新注册的学生信息写入文件saveStu();printf("\n*************************************************\n");printf("* 注册成功") ;system("pause>nul");return menuMain();}int findStu(int n)//查询学生{for(int i=0 ; i<sumStu ; i++){if( n == listStu[i].id){return i;}}return -1;}int findCor(int n){for(int i=0 ; i<sumCor ; i++){if(n == listCor[i].id){return i;}}return -1;}void changeStu()//修改信息{char a[30];system("cls");//先显示当前信息printf("修改学生信息\n");printf("**************************************************\n");printf("\n当前信息:");printf("\n\t\t学号:%d\n",listStu[log].id);printf("\t\t姓名:%s",listStu[log].name);printf("\n\t\t学院:%s",listStu[log].collage);printf("\n\t\t专业:%s",listStu[log].major );printf("\n\t\t班级:%s",listStu[log].Class );printf("\n\n**************************************************\n");//输入修改后的信息printf(" \n请输入修改后的信息(学号无法修改):");printf("\n\t\t姓名:");scanf("%s", a);strcpy(listStu[log].name , a);printf("\n\t\t学院:");scanf("%s", a);strcpy(listStu[log].collage , a);printf("\n\t\t专业:");scanf("%s", a);strcpy(listStu[log].major , a);printf("\n\t\t班级:");scanf("%s", a);strcpy(listStu[log].Class , a);//保存到文件saveStu();printf("\n\n**************************************************\n");printf("修改成功");system("pause");return menuStu();}void signUp()//学生选课{int sum=0, i;system("cls");//先显示当前信息printf("选课\n");printf("**************************************************\n");if(listStu[log].num>=CHMAX){printf("\n\t最大选择%d门课程\n" ,CHMAX);system("pause");return menuStu();}printf("\n\t编号\t\t课程名\t\t任课老师\n");for(i=0 ; i<sumCor ; i++){if((strcmp(listCor[i].major ,listStu[log].major )==0) && (listCor[i].sum<listCor[i].max )){printf("\t%d\t\t%s\t\t%s\n",listCor[i].id ,listCor[i].name ,listCor[i].ter );sum++;}}printf("\n\n当前共有%d门课可选",sum);printf("\n**************************************************\n");printf("输入你要选择的课程编号");scanf("%d",&i);if((findCor(i) == -1) || (strcmp(listCor[i-1].major ,listStu[log].major )!=0) || (listCor[i-1].sum>=listCor[i-1].max )){printf("* 没有该门课程\n* 按esc返回菜单") ;if(getch()==27)return menuStu();return signUp();}else{listStu[log].mine[listStu[log].num] = listCor[i-1];listStu[log].num++;saveStu();listCor[i-1].sum++;saveCor();printf("* 选课成功\n* 按任意键返回") ;system("pause");return menuStu();}}void logOut()//注销用户{stu a;printf("\n确定要注销?(Y/N)");char ch=getch();if(ch == 'y' || ch=='Y'){for(int i=log ; i<sumStu-1 ; i++){listStu[i] = listStu[i+1];}sumStu--;saveStu();return menuMain();}elsereturn menuStu();}void list_ch()// 选课情况{system("cls");printf("选课情况\n");printf("**************************************************\n");printf("\n\t编号\t\t课程名\t\t任课老师\n");for(int i=0 ; i<listStu[log].num ; i++){printf("\t%d\t\t%s\t\t%s\n",listStu[log].mine[i].id,listStu[log].mine[i].name ,listStu[log].mine [i].ter );}printf("\n\n**************************************************\n");printf("共选了%d门课\n最多可选%d门", listStu[log].num,CHMAX);system("pause");return menuStu();}void addCor()//添加课程{cor a;system("cls");printf("添加课程\n");printf("**************************************************\n");printf("\n\t\t课程名:");scanf("%s",);printf("\n\n\t\t任课老师:");scanf("%s",a.ter);printf("\n\n\t\t可选专业:");scanf("%s",a.major );printf("\n\n\t\t最大选课人数:");scanf("%d",&a.max);printf("\n\n\n**************************************************\n* 添加成功\n* 按任意键返回");a.sum = 0;a.id = sumCor+1;//将添加的课程保存下来listCor[sumCor] = a;sumCor++;saveCor();//返回菜单system("pause>nul");return menuTer();}void changeCor()//修改或删除课程{cor a;int i;system("cls");//先显示当前信息printf("修改课程信息\n");printf("**************************************************\n");printf("\n输入要修改的课程编号:");scanf("%d" ,&a.id);i = findCor(a.id);if(i == -1){printf("\n\n**************************************************\n");printf("未找到该课程\n* 按esc返回\n* 其他键继续");if(getch() == 27)return menuTer();return changeCor();}printf("\n课程名:%s",listCor[i].name);printf("\n任课教师:%s",listCor[i].ter);printf("\n可选专业:%s",listCor[i].major );printf("\n最大选课人数:%d",listCor[i].max);printf("\n\n**************************************************\n");//输入修改后的信息printf(" \n请输入修改后的信息(编号无法修改):");printf("\n\t\t课程名:");scanf("%s", );printf("\n\t\t任课教师:");scanf("%s", a.ter);printf("\n\t\t可选专业:");scanf("%s",a.major );printf("\n\t\t最大选课人数:");scanf("%d", &a.max);a.id = i+1;a.sum = listCor[i].sum;listCor[i] = a;//保存到文件saveCor();printf("\n\n**************************************************\n");printf("修改成功");system("pause");return menuTer();}void list_cor()//课程菜单{system("cls");printf("课程菜单");printf("\n**************************************************\n\n");printf("\n\t编号\t课程名\t任课老师\t可选专业\t最大人数\t当前人数\n");for(int i=0 ; i<sumCor ; i++){if( listCor[i].max!=0)printf("\n\t%d\t%s\t%s\t\t\%s\t\t%d\t\t\t%d\n",listCor[i].id ,listCor[i].name,listCor[i].ter,listCor[i ].major,listCor[i].max ,listCor[i].sum );}printf("\n\n**************************************************\n当前共有%d门课\n",sumCor);system("pause");return menuTer();}void saveStu()//将学生信息保存到文件{FILE *fp= fopen("student.txt","w+");//以w+的方式打开文件,即可清空文件再保存for(int i=0 ; i<sumStu ; i++){fprintf(fp,"%d %s %s %s %s %d \n",listStu[i].id, listStu[i].name,listStu[i].collage, listStu[i].major, listStu[i].Class, listStu[i].num);for(int j=0 ; j<listStu[i].num ; j++){fprintf(fp,"%d %s %s %s\n", listStu[i].mine[j].id, listStu[i].mine[j].name, listStu[i].mine[j].major, listStu[i].mine[j].ter);}fprintf(fp,"\n");}fclose(fp);}void saveCor()//将课程信息保存到文件{FILE *fp= fopen("course.txt","w+");int i;for(i=0 ; i<sumCor; i++){if(listCor[i].max!= 0){fprintf(fp,"%d %s %s %s %d %d\n", listCor[i].id, listCor[i].name, listCor[i].major, listCor[i].ter, listCor[i].max, listCor[i].sum);}}fclose(fp);}void choose()//选课情况{int j, k;system("cls");printf("选课情况");printf("\n**************************************************\n\n");printf("请输入要查看的学生学号:");scanf("%d",&j);k = findStu(j);if(k == -1){printf("\n**************************************************\n");printf("未找到该学生\n* 按esc返回\n* 按其他键继续");if(getch() == 27)return menuTer();return choose();}printf("\n学生:%s",listStu[k].name);printf("\n\t编号\t\t课程名\t\t任课老师\n");for(int i=0 ; i<listStu[k].num ; i++){printf("\t%d\t\t%s\t\t%s\n",listStu[k].mine[i].id,listStu[k].mine[i].name ,listStu[k].mine[i].ter );}printf("\n\n**************************************************\n");printf("一共选了%d们课\n* 按esc返回\n* 按其他键继续",listStu[k].num);if(getch()==27)return menuTer();return choose();}。
基于Java的选课管理系统的设计与实现

基于Java的选课管理系统的设计与实现选课管理系统是一个非常重要且实用的教务管理系统,旨在解决学校选课流程中的各种问题。
本文将介绍基于Java的选课管理系统的设计与实现。
1.选课管理系统的功能设计本系统的功能主要包括学生选课、课程管理、教师管理、学生管理、成绩管理等。
(1)学生选课:学生可以根据自己的兴趣和需求选择相应的课程进行学习。
(2)课程管理:管理员可以对课程进行增、删、改、查的操作,包括课程名称、授课教师、学时、课程描述等。
(4)学生管理:管理员可以对学生进行管理,包括添加、修改、删除、查询等,同时可以查看某个学生已经选择的课程。
本系统采用MVC结构进行设计,MVC(Model-View-Controller)是一种软件架构模式,在本系统中,Model(模型)负责业务逻辑、数据的存储和读取,View(视图)负责显示数据和用户交互,Controller(控制器)负责处理用户请求。
以下是选课管理系统的部分代码:(1)课程管理:public class Course{private Integer courseId;private String courseName;private String teacherName;private Integer period;private String description;//省略getter和setter方法}public class CourseDao{public List<Course> findAll() throws SQLException {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;List<Course> courses = new ArrayList<>();try {conn = C3p0Utils.getConnection();String sql = "select * from course";ps = conn.prepareStatement(sql);rs = ps.executeQuery();while (rs.next()) {Course course = new Course();course.setCourseId(rs.getInt("courseId"));course.setCourseName(rs.getString("courseName")); course.setTeacherName(rs.getString("teacherName")); course.setPeriod(rs.getInt("period"));course.setDescription(rs.getString("description")); courses.add(course);}} finally {C3p0Utils.release(conn, ps, rs);}return courses;}}(2)学生选课:(3)管理员查看成绩:以上仅仅是选课管理系统的部分代码,实际上涉及到的技术更加丰富和复杂,包括了Java Web(Servlet、JSP等)、数据库(MySQL、Oracle等)、ORM框架(Hibernate、MyBatis等)、Web容器(Tomcat、Jetty等)等。
java学生管理系统设计说明书

java学生管理系统设计说明书《Java学生管理系统设计说明书》一、引言学生管理系统是针对学校或教育机构的一种信息管理系统,用于管理学生的基本信息、课程信息、成绩信息等。
本文将详细介绍一个基于Java语言开发的学生管理系统的设计和实现。
二、系统需求分析1. 功能需求:(1) 学生信息管理:包括学生的基本信息(学号、姓名、性别、年龄等)的录入、修改、删除和查询功能。
(2) 课程信息管理:包括课程的录入、修改、删除和查询功能。
(3) 成绩管理:包括学生的成绩录入、查询和统计功能。
(4) 数据报表生成:包括学生基本信息报表、课程信息报表和成绩报表的生成功能。
2. 性能需求:(1) 系统响应速度要快,用户在进行操作时不会出现明显的卡顿现象。
(2) 系统要能够处理大量的数据,保证数据的准确性和完整性。
3. 可靠性需求:(1) 系统要具备数据备份和恢复功能,以防数据丢失或损坏。
(2) 系统要能够处理异常情况,保证系统的稳定性和可靠性。
三、系统设计1. 系统结构设计:(1) 前端界面:使用Java Swing或JavaFX等图形界面库实现用户交互界面,包括菜单、按钮、文本框等组件。
(2) 后端逻辑:使用Java编程语言实现系统的各项功能,包括数据的增删改查、数据的统计和报表的生成等。
(3) 数据库:使用关系型数据库(如MySQL、Oracle等)存储学生信息、课程信息和成绩信息等。
2. 系统模块设计:(1) 学生信息管理模块:实现学生信息的录入、修改、删除和查询功能。
(2) 课程信息管理模块:实现课程信息的录入、修改、删除和查询功能。
(3) 成绩管理模块:实现学生成绩的录入、查询和统计功能。
(4) 数据报表生成模块:实现学生基本信息报表、课程信息报表和成绩报表的生成功能。
3. 系统接口设计:(1) 用户界面接口:通过菜单、按钮等用户界面组件与用户进行交互,接收用户输入的指令。
(2) 数据库接口:通过Java JDBC等数据库访问方式与数据库进行交互,实现数据的增删改查操作。
数据库课程设计(学生管理系统)-附代码

数据库课程设计报告题目:学生信息管理系统院系名称:计算机学院专业名称:班级:学生姓名:学号(8位):指导教师:设计起止时间:2011年12月19日~2011年12月30日一. 设计目的1、掌握DBMS的基本工作原理2、培养数据库应用系统设计的基本思路和方法3、培养分析、解决问题的能力二. 设计内容利用数据库实现对学生信息的管理所用数据库:sqlserver 2008开发语言:java、开发工具:eclipse三.概要设计通过访问数据库实现以下功能:1、不同用户权限登陆系统2、用户密码修改3、学生信息的添加、查询、修改、浏览1.功能模块图2.各个模块详细的功能描述。
1、系统用户管理模块管理员和普通用户通过这个模块登陆系统,不同的用户用不同的用户名登陆,通过选择登陆模式(管理员或者普通用户)登陆系统,完成不同的操作。
两种用户都可以对自己的登陆密码进行修改。
新用户可进行注册操作,注册后登陆,并进行信息的完善。
2、学生信息管理模块管理员和普通用户对学生信息由不同的操作。
管理员可以对信息进行增加,删除,修改和列表查看,普通用户对自己的信息可进行查询,和修改。
四.详细设计1.功能函数的调用关系图2.各功能函数的数据流程图3.重点设计及编码、--学生信息表--create table studentinfo(Sid int primary key identity(1,1),Sname varchar(30) not null,Ssex varchar(10) check(Ssex='男' or Ssex='女'),Snumber varchar(8) check(Snumber like '0409[0-9][0-9][0-9][0-9]') not null,Sprofession varchar(30),Sclass varchar(20),Sdate datetime default getDate());--普通用户登陆信息表--create table userinfo(id int primary key identity(1,1),name varchar(30) not null,mima varchar(20) not null);--管理员登陆信息表--create table userinfo(id int primary key identity(1,1),name varchar(30) not null,mima varchar(20) not null);--连接数据库—try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");}catch(ClassNotFoundException e){System.out.print("加载驱动程序失败");}String conURL="jdbc:sqlserver://localhost:1433; DatabaseName=SIMS";try{Connectioncon=DriverManager.getConnection(conURL,"sa","majie");Statement st=con.createStatement();、}catch(SQLException g){System.out.println("错误代码:"+g.getErrorCode());System.out.println("错误内容:"+g.getMessage());}五.测试数据及运行结果1.正常测试数据和运行结果登录信息查询修改信息2.异常测试数据及运行结果六.调试情况,设计技巧及体会1.改进方案本次课程设计实现了系统的基本功能,做的不是很复杂,跟预期想的结果有些差距,数据库表的设计有点简单,下来还要增加表的复杂度,以及触发器的使用。