简单的学生管理系统详解(附源码)

学生管理系统主要功能是对学生信息的添加、查询、删除、修改
在这里插入图片描述

1、创建项目

2、创建一个具体操作信息的包【bean】并创建用来保存学生信息的java类【Student】

2.1创建用来保存学生学号、姓名、年龄、地址信息的变量

  这些变量不允许被其他访问,需要被定义成私有的。

		//学生学号
		private int stuid;
		//学生姓名
		private String stuname;
		//学生年龄
		private int stuage;
		//学生地址
		private String stuaddress;
2.2创建访问这些私有变量可被访问的公共方法

  由于上面定义保存的学生信息变量都是私有的,就需要为这些私有变量提供可被访问的公共方法。我们对这些变量的操作是设置和获取。setXXXX(参数)—设置变量值,getXXXX()—获取变量值【获取变量不需要参数】
  直接右键 —> Source【AIt+Shift+S】 —> Generate Getters and Setters… —> Select All【全选】—> Generate

		public int getStuid() {
			return stuid;
		}
		public void setStuid(int stuid) {
			this.stuid=stuid;
		}
		
		public String getStuname() {
			return stuname;
		}
		public void setStuname(String stuname) {
			this.stuname=stuname;
		}
		
		public int getStuage() {
			return stuage;
		}
		public void setStuage(int stuage) {
			this.stuage=stuage;
		}
		
		public String getStuaddress() {
			return stuaddress;
		}
		public void setStuaddress(String stuaddress) {
			this.stuaddress=stuaddress;
		}

3、创建service包并创建学生信息业务访问类【StudentService】

  该类主要是对学生信息的操作【什么时候去添加、查询、修改、删除】,利用Switch语句

3.1创建具体业务操作方法
public void service(int setvice_code) {
		switch(setvice_code) {
		case 1:System.out.println("添加学生信息");
			break;
		case 2:System.out.println("查询所有学生信息");
			break;
		case 3:System.out.println("根据学号查询学生信息");
			break;
		case 4:System.out.println("根据学号修改学生信息");
			break;
		case 5:System.out.println("根据学号删除学生信息");
			break;
		case 6:System.out.println("删除所有学生信息");
			break;
		case 0:System.out.println("退出系统");
			break;
		}
	}

  参数【int setvice_code】是键盘输入的具体操作编号
  通过键盘输入的值就会执行相应的操作

输入是业务处理过程中的辅助操作,就需要把输入操作分离出来在具体访问类直接调用

4、创建util包并创建学生信息处理辅助类【StudentHelper】类

4.1得到从键盘输入int型整数值

  为了方便调用,将方法设静态的
  利用Scanner类实现从控制台输入的值

public static int getIntValue(String tipinfo) {
		System.out.println(tipinfo);
		Scanner input=new Scanner(System.in);
		int code=input.nextInt();//保存得到一个int值的变量
		return code;
	}
方法里的参数是String类型,是为了得到int值给用户一个提示信息,声明当前要干什么
4.2给用户提供一个操作菜单方法

  用户不知道输入的值要执行什么样的操作,所以给用户提供一个操作菜单方法。

public static void getMenu() {
		System.out.println("---简单的学生管理系统---");
		System.out.println("1=添加学生信息,2=查询所有学生信息,3=根据学号查询学生信息,4=根据学号修改学生信息5=根据学号删除学生信息,6=删除所有学生信息,0=退出学生系统");
	}

5、创建运行类包【main】并创建主方法的java类【StudentMain】

5.1调用为用户提供的操作菜单方法
StudentHelper.getMenu();
5.2调用具体业务处理【service】方法

  (1)定义setvice_code的int型变量将getIntValue(“请输入对应的编号”)从键盘获取的值保存
  (2)调用service方法将setvice_code作为参数
  但此时代码只能运行一遍

5.3使这个程序持续跑

  加一个while循环就实现了这个程序持续跑

		while(true) {
			StudentHelper.getMenu();
			int setvice_code=StudentHelper.getIntValue("请输入对应的编号");
			StudentService studentService=new StudentService();
			studentService.service(setvice_code);					
		}
5.1实现退出方法
system.exit(int status);
system.exit(int status);是退出方法,将0作为参数

  因为当用户输入0时,退出程序。
  将此方法写入具体业务处理方法中。
如下:

		case 0:System.out.println("退出系统");
			System.exit(0);
			break;

  结构已经搭建完毕,接下来写相对应的操作。

6、完成具体操作动作 - 添加

6.1写添加学生信息方法
为了避免具体操作方法service方法代码过多,我们把具体操作动作分离出来,在service方法里对应的位置一调用即可。

  因为具体操作动作不允许其他方法,因此要设置为私有的

private void insertStudent(Student student) {
}

  我们需要一个学生对象作为参数,业务层要调用数据访问层。所以接下来要提供一个数据访问层。

6.2创建数据访问类

  创建dao包【data access Object】并创建StudentDao类

6.3添加学生信息数据访问方法

  添加就两种结果,成功或失败所以设置参数为boolean型

  要把学生信息添加到集合中

如下

	//保存信息的具体集合
	private static ArrayList studentList=new ArrayList();
	//添加学生信息的数据访问方法
	public boolean insert(Student student) {
		return studentList.add(student);
	}
6.4在StudentService调用insert方法

  insert方法表示添加成功或失败,利用if语句判断,if成功则输出成功;slse失败则输出失败

	//添加学生信息的具体业务处理方法
	private void insertStudent(Student student) {
		StudentDao studao=new StudentDao();
		boolean flag=studao.insert(student);
		if(flag) {
			System.out.println("学生信息添加成功");
		}else {
			System.out.println("学生信息添加失败");
		}
	}
6.5把添加写入具体处理方法相对应的编号下
	case 1:System.out.println("添加学生信息");
			insertStudent(Student student);
			break;
6.6需要一个学生信息
6.7在辅助类下得到一个学生信息
	//键盘输入一个学生信息
	public static Student getInputStudent() {
		Student student=null;//Student对象没有先给一个null
		//得到学生学号
		int stuid=getIntValue("--请输入学生学号--");
		//得到学生姓名此时没有这个方法,需要先创建一个,如下:
		String stuname=getStringValue("--请输入学生姓名--");
		//得到学生年龄
		int stuage=getIntValue("--请输入学生年龄--");
		//得到学生地址
		String stuaddress=getStringValue("--请输入学生地址--");
		//把这四个方法存储在学生对象里
		student=new Student();
		//调用学生set方法,将所需要的参数传入
		student.setStuid(stuid);
		student.setStuname(stuname);
		student.setStuage(stuage);
		student.setStuaddress(stuaddress);
		//返回学生对象
		return student;
	}

  学生姓名是String类型的,没有这个方法,此时把getIntValue整数值方法改为一个String【getStringValue】方法

	public static String getStringValue(String tipinfo) {
		String info=null;
		System.out.println(tipinfo);
		Scanner input=new Scanner(System.in);
		info=input.nextLine();
		info=info.trim();
		return info;
6.8在具体业务操作方法下调用
		case 1:System.out.println("添加学生信息");
			insertStudent(StudentHelper.getInputStudent());
			break;

  添加完成

7、查询所有学生信息具体业务方法

7.1在业务访问类添加查询所有方法
	//查询所有学生信息的具体业务处理方法
	private void selectAllStudent() {
		
	}
7.2调用数据访问层保存数据的集合
		StudentDao studao=new StudentDao();
		ArrayList studentList=studao.selectAll();
7.3遍历集合

  首先判断集合是否有元素,如果有,则遍历;没有则输出没有记录
  利用增强for循环遍历集合,因为数据应是学生对象,而现在有Object对象,要强制类型转换将Object转换成Student对象。

		if(studentList.size()>0) {
			System.out.println("--------------");
			for(Object obj:studentList) {
				Student stu=(Student)obj;
			System.out.println(" "+stu.getStuid()+" "+stu.getStuname()+" "+stu.getStuage()+" "+stu.getStuaddress());
				System.out.println("----------------");
			}
		}else {
			System.out.println("---没有记录---");
		}
7.4在数据访问层添加selectAll方法
	public ArrayList selectAll() {
		return studentList;
	}
7.5在case :2下调用selectAllStudent()方法
	selectAllStudent();

8、根据学号查询学生信息的具体业务处理方法

8.1在业务访问层添加根据学号查询学生信息方法
//根据学号查询学生信息的具体业务处理方法
	private void selectStudentByStuid(int stuid) {
		
	}
8.2调用数据访问层selectByStuid方法
		StudentDao studao=new StudentDao();
		Student student=studao.selectByStuid(stuid);
8.3在数据访问层创建selectByStuid方法
//根据学号查询学生信息的数据方法
	public Student selectByStuid(int stuid) {
		Student student=null;
		for(Object obj:studentList) {
			Student stu=(Student)obj;
			if(stu.getStuid()==stuid) {
				student=stu;
				break;
			}
		}
		return student;
	}
需要一个学生id的参数
将student赋予null是为了对比学号
利用增强for循环遍历对比学号
将Objenc对象转为学生对象
如果学生id等于输入的id则成功
将stu交给student加上break然后return
8.4 完善selectStudentByStuid方法
//根据学号查询学生信息的具体业务处理方法
	private void selectStudentByStuid(int stuid) {
		StudentDao studao=new StudentDao();
		Student student=studao.selectByStuid(stuid);
		if(student!=null) {
			System.out.println(" "+student.getStuid()+" "+student.getStuname()+" "+student.getStuage()+" "+student.getStuaddress());
			System.out.println("----------------");
		}else {
			System.out.println("---没有记录---");
		}
	}
如果通过id获取到的对象不为空,则输出获取到的对象
8.5 在case :3中调用
selectStudentByStuid(StudentHelper.getIntValue("请输入要查询的学生学号"));

9、根据学号修改学生信息

9.1 在业务访问层添加根据学号修改学生信息方法
	//根据学号修改学生信息的具体业务处理方法
	private void updateStudentByStuid(int stuid) {
		StudentDao studao=new StudentDao();
		Student student=studao.selectByStuid(stuid);
		if(student!=null) {
			Student newStudent=StudentHelper.getInputStudent();
			boolean flag=studao.updateByStuid(student,newStudent);
			if(flag) {
			System.out.println("修改成功");
		}else {
			System.out.println("修改失败");
		}
	}else{
		System.out.println("----没有记录----");
	}
	}

  首先通过selectByStuid方法获取id,如果获取到的对象不为空则获取一个新对象
  在数据访问类写updateByStuid(student,newStudent);方法,这个方法用来替换学生对象
  如果替换成功,打印出修改成功。反之修改失败。

9.2 在数据访问类写updateByStuid(student,newStudent);方法
//根据学号修改学生信息数据访问数据方法
	public boolean updateByStuid(Student student,Student newStudent) {
		Object obj=studentList.set(studentList.indexOf(student), newStudent);
		if(obj!=null) {
			return true;
		}
		return false;
	}

  利用集合set方法用来替换,set方法第一个参数是指定位置的元素,第二个参数是指定的元素。如果替换成功即obj不为空,返回true,反之return false;

9.3 在case 4:中调用
updateStudentByStuid(StudentHelper.getIntValue("请输入要修改的学生学号"));

10、根据学号删除学生信息

10.1 在业务访问层添加根据学号删除学生信息方法
//根据学号删除学生信息的具体业务处理方法
	private void deleteStudentByStuid(int stuid) {
		StudentDao studao=new StudentDao();
		Student student=studao.selectByStuid(stuid);
		if(student!=null) {
			boolean flag=studao.deleteByStuid(student);
			if(flag) {
				System.out.println("删除成功");
			}else {
				System.out.println("删除失败");
			}
		}else {
			System.out.println("---没有记录---");
		}
	}

  首先通过id获取一个学生对象
  如果这个对象不为空,调用deleteByStuid方法删除这个对象
  有两种结果,删除成功或失败
  如果删除成功,返回true输出删除成功
  或者输出删除失败

10.2 在数据访问类写deleteByStuid(student);方法
	//根据学号删除学生信息数据访问方法
	public boolean deleteByStuid(Student student) {
		return studentList.remove(student);
	}

  通过remove(Object o)方法从列表中删除指定元素的第一个出现(如果存在)。
  是boolean类型,返回true/false

10.3 在case 5:中调用
		deleteStudentByStuid(StudentHelper.getIntValue("请输入要删除学生的学号"));

11、删除所有学生信息

11.1 在业务访问层添加删除所有学生信息方法
	//删除所有学生信息的具体业务处理方法
	private void deleteAll() {
		StudentDao studao=new StudentDao();
		boolean flag=studao.deleteAll();
		if(flag) {
			System.out.println("删除所有信息成功");
		}else {
			System.out.println("删除所有信息失败");
		}
	}

  调用deleteAll方法,此方法清空集合并返回true,如果没清空返回false

11.2 在数据访问类写deleteByStuid(student);方法
	//删除所有学生信息数据访问方法
	public boolean deleteAll() {
		studentList.clear();
		if(studentList.isEmpty()) {
			return true;
		}
		return false;
	}

  调用集合clear()方法清空集合就相当于把学生信息全部删除,学生信息保存在集合中。判断集合是否为空,利用isEmpty()方法判断。如果为空返回true,反之返回false。

11.3 在case 6:中调用
deleteAll();

12、对输入值进行异常处理

  如果用户不小心输入的值是错误的,例如需要一个整数值却不小心加了一个字符,或者输入一个7等等。我们就需要对输入的异常进行异常处理操作。
12.1 对整数值进行异常操作

  (1)将代码放入try{}语句块中
  (2)给catch语句块输出一条信息提示。
  (3)提示后就需要用户重新输入,直接调用getIntValue(tipinfo)方法。
  (4)此时无返回值,在try{}语句块外定义code并赋值为0;
  (5)将try{}语句块中定义code直接变为赋值。
  (6)然后将return code;放到异常处理外。

	//键盘输入得到一个整数值
	public static int getIntValue(String tipinfo) {
		int code=0;
		try {
			System.out.println(tipinfo);
			Scanner input=new Scanner(System.in);
			code=input.nextInt();
		}catch(Exception e) {
			System.out.println("输入有误,请重新输入");
			code=getIntValue(tipinfo);
		}
		return code;
	}
12.2 对从键盘得到一个String进行异常操作

  字符为空就为异常
  (1)定义info为null
  (2)此时如果输入的info值为null或者长度小于等于0
  (3)利用throw手动引发异常
  (4)进行try{}catch{}操作
  (5)将代码包裹在try{}语句块中
  (6)给catch语句块输出一条信息提示。
  (7)提示后就需要用户重新输入,直接调用getStringValue(tipinfo)方法。
  (8)在输入字符串后去除空格,利用trim()方法。

	//从键盘得到一个String
	public static String getStringValue(String tipinfo) {
		String info=null;
		try {
			System.out.println(tipinfo);
			Scanner input=new Scanner(System.in);
			info=input.nextLine();
			info=info.trim();
			if(info==null ||info.length()<=0) {
				throw new Exception("String不能为空");
			}
		}catch(Exception e) {
			System.out.println("不能为空,请重新输入");
			info=getStringValue(tipinfo);
		}
		return info;
	}
12.3 输入对应编号错误

  给switch语句后面加default语句

此学生信息管理系统缺点是利用集合保存数据,程序一关闭数据就会消失,不能保存。下面是第二版本的学生管理系统,利用IO流保存的数据

简单的学生管理系统优化版

源代码如下:

package com.jindi.bean;
/**
 * 保存学生信息的java类
 */
public class Student {
		//学生学号
		private int stuid;
		//学生姓名
		private String stuname;
		//学生年龄
		private int stuage;
		//学生地址
		private String stuaddress;
		//由于上面定义保存学生信息的变量是私有的
		//我们就需要为这些私有的变量提供可被访问的公共方法
		//setXXXX(参数)---设置变量值
		//getXXXX()---获取变量值
		public int getStuid() {
			return stuid;
		}
		public void setStuid(int stuid) {
			this.stuid=stuid;
		}
		
		public String getStuname() {
			return stuname;
		}
		public void setStuname(String stuname) {
			this.stuname=stuname;
		}
		
		public int getStuage() {
			return stuage;
		}
		public void setStuage(int stuage) {
			this.stuage=stuage;
		}
		
		public String getStuaddress() {
			return stuaddress;
		}
		public void setStuaddress(String stuaddress) {
			this.stuaddress=stuaddress;
		}
}

package com.jindi.dao;

import java.util.ArrayList;
import com.jindi.bean.Student;
	/**
	 * 提供学生信息的数据访问类
	 */
public class StudentDao {
	//保存信息的具体集合
	private static ArrayList studentList=new ArrayList();
	//添加学生信息的数据访问方法
	public boolean insert(Student student) {
		return studentList.add(student);
	}
	//查询所有学生信息的数据访问方法
	public ArrayList selectAll() {
		return studentList;
	}
	//根据学号查询学生信息的数据方法
	public Student selectByStuid(int stuid) {
		Student student=null;
		for(Object obj:studentList) {
			Student stu=(Student)obj;
			if(stu.getStuid()==stuid) {
				student=stu;
				break;
			}
		}
		return student;
	}
	//根据学号修改学生信息数据访问数据方法
	public boolean updateByStuid(Student student,Student newStudent) {
		Object obj=studentList.set(studentList.indexOf(student), newStudent);
		if(obj!=null) {
			return true;
		}
		return false;
	}
	//根据学号删除学生信息数据访问方法
	public boolean deleteByStuid(Student student) {
		return studentList.remove(student);
	}
	//删除所有学生信息数据访问方法
	public boolean deleteAll() {
		studentList.clear();
		if(studentList.isEmpty()) {
			return true;
		}
		return false;
	}
}

package com.jindi.service;

import java.util.ArrayList;

import com.jindi.bean.Student;
import com.jindi.dao.StudentDao;
import com.jindi.util.StudentHelper;
/**
 * 学生信息的业务访问类
 * @author wemme
 *
 */
public class StudentService {
	//添加学生信息的具体业务处理方法
	private void insertStudent(Student student) {
		StudentDao studao=new StudentDao();
		boolean flag=studao.insert(student);
		if(flag) {
			System.out.println("学生信息添加成功");
		}else {
			System.out.println("学生信息添加失败");
		}
	}
	//查询所有学生信息的具体业务处理方法
	private void selectAllStudent() {
		StudentDao studao=new StudentDao();
		ArrayList studentList=studao.selectAll();
		if(studentList.size()>0) {
			System.out.println("--------------");
			for(Object obj:studentList) {
				Student stu=(Student)obj;
				System.out.println(" "+stu.getStuid()+" "+
				stu.getStuname()+" "+stu.getStuage()+" "
						+stu.getStuaddress());
				System.out.println("----------------");
			}
		}else {
			System.out.println("---没有记录---");
		}
	}
	//根据学号查询学生信息的具体业务处理方法
	private void selectStudentByStuid(int stuid) {
		StudentDao studao=new StudentDao();
		Student student=studao.selectByStuid(stuid);
		if(student!=null) {
			System.out.println(" "+student.getStuid()+" "+student.getStuname()+" "+student.getStuage()+" "+student.getStuaddress());
			System.out.println("----------------");
		}else {
			System.out.println("---没有记录---");
		}
	}
	//根据学号修改学生信息的具体业务处理方法
	private void updateStudentByStuid(int stuid) {
		StudentDao studao=new StudentDao();
		Student student=studao.selectByStuid(stuid);
		if(student!=null) {
			Student newStudent=StudentHelper.getInputStudent();
			boolean flag=studao.updateByStuid(student,newStudent);
			if(flag) {
			System.out.println("修改成功");
		}else {
			System.out.println("修改失败");
		}
	}else{
		System.out.println("----没有记录----");
	}
	}
	//根据学号删除学生信息的具体业务处理方法
	private void deleteStudentByStuid(int stuid) {
		StudentDao studao=new StudentDao();
		Student student=studao.selectByStuid(stuid);
		if(student!=null) {
			boolean flag=studao.deleteByStuid(student);
			if(flag) {
				System.out.println("删除成功");
			}else {
				System.out.println("删除失败");
			}
		}else {
			System.out.println("---没有记录---");
		}
	}
	//删除所有学生信息的具体业务处理方法
	private void deleteAll() {
		StudentDao studao=new StudentDao();
		boolean flag=studao.deleteAll();
		if(flag) {
			System.out.println("删除所有信息成功");
		}else {
			System.out.println("删除所有信息失败");
		}
	}
	/**
	 * 具体业务处理方法
	 * 【根据键盘输入操作具体编号】
	 */
	public void service(int setvice_code) {
		switch(setvice_code) {
		case 1:System.out.println("添加学生信息");
			insertStudent(StudentHelper.getInputStudent());
			break;
		case 2:System.out.println("查询所有学生信息");
			selectAllStudent();
			break;
		case 3:System.out.println("根据学号查询学生信息");
			selectStudentByStuid(StudentHelper.getIntValue("请输入要查询的学生学号"));
			break;
		case 4:System.out.println("根据学号修改学生信息");
			updateStudentByStuid(StudentHelper.getIntValue("请输入要修改的学生学号"));
			break;
		case 5:System.out.println("根据学号删除学生信息");
			deleteStudentByStuid(StudentHelper.getIntValue("请输入要删除学生的学号"));
			break;
		case 6:System.out.println("删除所有学生信息");
			deleteAll();
			break;
		case 0:System.out.println("退出系统");
			System.exit(0);
			break;
		default:System.out.println("请输入正确编号");
			break;
		}
	}
}

package com.jindi.util;

import java.util.Scanner;

import com.jindi.bean.Student;
/**
 * 学生信息处理帮助类
 * @author wemme
 *
 */
public class StudentHelper {
	public static void getMenu() {
		System.out.println("---简单的学生管理系统---");
		System.out.println("1=添加学生信息,2=查询所有学生信息,3=根据学号查询学生信息,4=根据学号修改学生信息5=根据学号删除学生信息,6=删除所有学生信息,0=退出学生系统");
	}
	//键盘输入得到一个整数值
	public static int getIntValue(String tipinfo) {
		int code=0;
		try {
			System.out.println(tipinfo);
			Scanner input=new Scanner(System.in);
			code=input.nextInt();
		}catch(Exception e) {
			System.out.println("输入有误,请重新输入");
			code=getIntValue(tipinfo);
		}
		return code;
	}
	//从键盘得到一个String
	public static String getStringValue(String tipinfo) {
		String info=null;
		try {
			System.out.println(tipinfo);
			Scanner input=new Scanner(System.in);
			info=input.nextLine();
			info=info.trim();
			if(info==null ||info.length()<=0) {
				throw new Exception("String不能为空");
			}
		}catch(Exception e) {
			System.out.println("不能为空,请重新输入");
			info=getStringValue(tipinfo);
		}
		return info;
	}
	//键盘输入一个学生信息
	public static Student getInputStudent() {
		Student student=null;
		//得到学生学号
		int stuid=getIntValue("--请输入学生学号--");
		//得到学生姓名
		String stuname=getStringValue("--请输入学生姓名--");
		//得到学生年龄
		int stuage=getIntValue("--请输入学生年龄--");
		//得到学生地址
		String stuaddress=getStringValue("--请输入学生地址--");
		student=new Student();
		student.setStuid(stuid);
		student.setStuname(stuname);
		student.setStuage(stuage);
		student.setStuaddress(stuaddress);
		return student;
	}
}

package com.jindi.main;

import com.jindi.service.StudentService;
import com.jindi.util.StudentHelper;

public class StudentMain {
	public static void main(String[] args) {
		while(true) {
			StudentHelper.getMenu();
			int setvice_code=StudentHelper.getIntValue("请输入对应的编号");
			StudentService studentService=new StudentService();
			studentService.service(setvice_code);					
		}
	}
}

运行结果:

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

  • 18
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
vs2015+数据库,需要建的数据表如下: 1. “考试成绩管理系统用户登录”功能 具体要求: (1) 按照图示排列相应的控件,控件名称自定义,其中,界面中的图片可以不加; (2) 当输入正确的用户名和密码时,登录到主系统,如图所示,并且用户名或密码输入不正确时系统有所提示;当单击【取消】按钮时,用户名和密码被清空; (3) 程序中用到的数据库名为SCOREINFO,数据表名为userinfo,数据表结构如下图所示: (4) 数据表中的用户名和密码如下图。 2. 点击主窗体的“密码修改”菜单,完成“密码修改”功能,程序运行如下图所示: 具体要求: (1)此题必须使用数据库连接完成,原始密码必须为数据表里原有的数据,不使用数据库完成的为0分。 (2)需要建立数据库SCOREINFO及数据表userinfo,表的结构及数据第一部分的内容: (3)要有“原始密码输入错误”、“原始密码不能为空”及“两次输入密码不一致”的错误提示; (4)当单击【保存】按钮,新密码被更新到数据表中,不能更新的为0分; (5)单击【关闭】按钮,窗口关闭。 (6)3个Label;3个TextBox;2个Button 3. 完成“成绩查询”功能,程序运行如下图所示: 具体要求: (1) 按照图示排列相应的控件,界面下方是DataGridView控件; (2)程序用到的数据库名为SCOREINFO,数据表名为score,表结构如下: (3)完成的MainForm_Load事件处理程序:当加载窗体时,直接在窗体的dataGridView1控件中显示数据表的所有记录; (4)可以设查询条件:首先在组合框comboBox1中选择查询条件,并在textBox1中输入条件值(可以模糊查询,如按照姓名查询时,输入“王”,可以查所有姓王的同学的成绩),单击查询将结果显示在dataGridView1控件中。 (5)所需控件及属性:1个GroupBox,1个Label,Text为选择查询条件;1个ComboBox(Items:学号、姓名);1个TextBox;1个Button,Text为查询;1个DataGridView 4. 完成“课程信息修改”功能,程序运行如下图所示: 具体要求: (1)按照图示排列相应的控件,控件名称自定义,其中,程序刚开始运行时,“学分”和“课程编码”的文本框是只读的; (2)在数据库名为SCOREINFO中,创建数据表名为course,表结构如下: (3)当单击【查询】时,直接在窗体的dataGridView2控件中显示数据表的所有记录; (4)当选中DataGridView控件中的某一行记录时(DataGridView控件的Mouse_Click事件),“课程名字”、“学分”、“课程代码”文本框中分别显示该项对应的课程信息; (5)当选中某一行记录并单击【编辑】按钮时,【编辑】按钮变为【保存修改】,同时“学分”和“课程编码”的文本框恢复正常(ReadOnly属性为false);在文本框中修改相应的信息后单击【保存修改】,将修改后的数据更新到数据表中。 (6)所需控件及属性:1个GroupBox,3个Label;3个TextBox(textBox2属性ReadOnly为True,textBox3属性ReadOnly为True);2个Button;1个DataGridView 5. 完成“课程信息删除”功能,程序运行如下图所示: 具体要求: (1)按照图示排列相应的控件,控件名称自定义,其中,程序刚开始运行时,“学分”和“课程编码”的文本框是只读的; (2)数据表名为course,表结构同第4部分: (3)当单击【查询】时,直接在窗体的dataGridView控件中显示数据表的所有记录; (4)当选中DataGridView控件中的某一行记录时,“课程名字”、“学分”、“课程代码”文本框中分别显示该项对应的课程信息; (5)当选中某一行记录并单击【删除】按钮时,则该行从数据表中删除。 (6)所需控件:3个Label;3个TextBox(textBox2属性ReadOnly为True,textBox3属性ReadOnly为True);2个Button;1个DataGridView 6. 完成“课程信息添加”功能,程序运行如下图所示: 具体要求: (1)按照图示排列相应的控件,控件名称自定义; (2)程序用到的数据库和数据表名为course,表结构如下同第四部分: (3)当单击【查询】时,直接在窗体的dataGridView1控件中显示数据表的所有记 (4)当选中DataGridView控件中的某一行记录时,“课程名字”、“学分”、“课程代码”文本框中分别显示该项对应的课程信息; (5)当单击【添加】按钮时,在文本框中添加新的内容并将新内容添加到数据表中,并且在DataGridView控件中显示出新的课程信息 (6)所需控件:3个Label;3个TextBox;2个Button;1个DataGridView
学生管理系统程序 #include <iostream> using namespace std; #include <stdlib.h> double avg=0;//统计总分和加平均分权 const int mathp=4;//数学学分 const int cppp=5;//C++学分 const sum=70;//设置总学分 class Student { private: int num; char *name; char *sex; char *phone; char *rphone; double math; double cpp; Student* next; public: Student() {next=NULL;} ~Student(); void Push(Student **refhead,int num,char *name,char *sex,char *phone,char *rphone,double math,double cpp); void Delete(Student *head,int data); Student* Find(Student* head,int data); void Display(Student* head); int Length(Student* head); void Math(Student* head,int data); void Update(Student* head,int data); void Insert(); }; Student* head=new Student;//带头结点的头指针 void Student::Push(Student **refhead,int num,char *name,char *sex,char *phone,char *rphone,double math,double cpp) { Student* newnode=new Student;//新增加结点 newnode->num=num; newnode->name=name; newnode->sex=sex; newnode->phone=phone; newnode->rphone=rphone; newnode->math=math; newnode->cpp=cpp; newnode->next=*refhead; *refhead=newnode;//重置表头 } //遍历 void Student::Display(Student* head) { Student* temp; temp=head; if(temp->next==NULL)//判断空表 cout<<"没有学生!"; else {while(temp!=NULL)// { cout<<"学号:"<<temp->num<<"姓名:"<<temp->name<<"性别:"<<temp->sex<<"手机:"<<temp->phone<<"宿舍电话:"<<temp->rphone<<"数学成绩:"<<temp->math<<"C++成绩:"<<temp->cpp<<endl; temp=temp->next; } } return; } //人数 int Student::Length(Student* head) { Student* cur; cur=head; int count=0; while(cur!=NULL) { count++;//通过累加统计人数 cur=cur->next; } return count; } //查找 Student* Student::Find(Student* head,int data) { Student* cur=head; bool bo=false; while(cur!=NULL) { if(cur->num=data) { bo=true;//如果找到则改变bo的值 cout<<"学号:"<<cur->num<<"姓名:"<<cur->name<<"性别:"<<cur->sex<<"手机:"<<cur->phone<<"宿舍电话:"<<cur->rphone<<"数学成绩:"<<cur->math<<"C++成绩:"<<cur->cpp<<endl; break; } cur=cur->next; } if(bo==false)//通过判断bo的值判断找到与否 cout<<"没有这个人!"<<endl; return cur; } //删除 void Student::Delete(Student* head,int data) { Student *bef,*cur; bef=cur=head; while(cur!=NULL) { if(cur->num==data) break; else {bef=cur;cur=cur->next;} } if(cur==head)//如果是头结点则删除头结点 { head=cur->next; delete cur; } else { bef->next=cur->next; delete cur; } } //修改 void Student::Update(Student* head,int data) { Student* cur=head; bool bo=false; while(cur!=NULL) { if(cur->num==data) { bo=true; int a,b; char *c; double d; for(;;) //找到后提供各字段的修改 { cout<<"1修改学号|2修改姓名|3修改性别|4修改手机号|5修改宿舍电话号|6修改数学成绩|7修改C++成绩|8退出\n"; cin>>a; switch(a) { case 1:cout<<"输入新学号:"; cin>>b; cur->num=a; break; case 2:cout<<"输入新姓名:"; cin>>c; cur->name=c; break; case 3:cout<<"输入新性别:"; cin>>c; cur->sex=c; break; case 4:cout<<"输入新手机号:"; cin>>c; cur->phone=c; break; case 5:cout<<"输入新宿舍电话号:"; cin>>c; cur->rphone=c; break; case 6:cout<<"输入新数学成绩:"; cin>>d; cur->math=d; break; case 7:cout<<"输入C++成绩:"; cin>>d; cur->cpp=d; break; case 8:exit(1); break; default:cout<<"操作错误"; break; } } break; } } if(bo==false) cout<<"没有这个人!"<<endl; return; } //统计 void Student::Math(Student* head,int data) { Student* cur=head; bool bo=false; while(cur!=NULL) { if(cur->num=data) { bo=true; avg=cur->math*(mathp/sum)+cur->cpp*(cppp/sum);//计算总分和加平均分权的公式 break; } cur=cur->next; } if(bo==false){ cout<<"没有这个人!"<<endl; return; } cout<<"该生的总分和加平均分权="<<avg<<endl; return; } //录入 void Student::Insert() { head=NULL; int num; char name[8]; char sex[4]; char phone[11]; char rphone[7]; double math; double cpp; cout<<"请输入基本信息:\n"; cout<<"学号:"; cin>>num; cout<<"姓名:"; cin>>name; cout<<"性别:"; cin>>sex; cout<<"手机号:"; cin>>phone; cout<<"宿舍电话:"; cin>>rphone; cout<<"数学成绩:"; cin>>math; cout<<"C++成绩:"; cin>>cpp; Push(&head,num,name,sex,phone,rphone,math,cpp);//调用函数Push建立有序链表 } //用释构函数逐个释放空间 Student::~Student() { while(head!=NULL) { delete head; head=head->next; } } //程序主入口 void main() { for(;;) { head=NULL; Student s; int x; int data; cout<<"|1录入|2查找|3删除|4修改|5统计|6退出|\n"; cout<<"请作选择:\n"; cin>>x; switch(x) { case 1: start: s.Insert(); cout<<"继续吗?[Y/N]"; char ch; cin>>ch; if(ch=='y' || ch=='Y') goto start; s.Display(head); int l; l=s.Length(head); cout<<"一共有"<<l<<"个学生。"<<endl; break; case 2: cout<<"请输入你要查找的学生的学号:"; cin>>data; s.Find(head,data); break; case 3: cout<<"请输入你要删除的学生的学号:"; cin>>data; s.Delete(head,data); break; case 4: cout<<"请输入你要修改的学生的学号:"; cin>>data; s.Update(head,data); break; case 5: cout<<"请输入你要统计的学生的学号:"; cin>>data; s.Math(head,data); break; case 6: exit(1); break; default:cout<<"操作错误!"<<endl; break; } }}
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值