精华内容
下载资源
问答
  • java 学生信息管理系统

    万次阅读 多人点赞 2015-10-06 14:03:33
    学生信息管理包括添加,删除,修改,查询,显示全部等 具体结构如图 在SQL Server 2005数据库上实现数据操作。使用纯面向对象的java语言作为开发语言 在sql server 2005新建一个名为Student的数据库,在下面新建一...

    只设计了一部分 全部的太多了。会慢慢更新增加。

    学生信息管理包括添加,删除,修改,查询,显示全部等

    具体结构如图

    在SQL Server 2005数据库上实现数据操作。使用纯面向对象的java语言作为开发语言

    在sql server 2005新建一个名为Student的数据库,在下面新建一个名为stu的表

    再新建一个名为login的表 存贮账号 密码

    当然 列名你可以随便写 当然 要有个学号啊。我的修改等等都是根据学号的。

    这是登录界面入口

     

    package 学生信息管理系统;
    import java.sql.*;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.Color;
    public class 学生信息管理系统 {
    	public static void main(String[] args) {
    		new loginFrame();
    	}
    }
    class loginFrame extends JFrame implements ActionListener{
    	Box box1,box2,baseBox;
    	JLabel userName,userPwd,tubiao;
    	JTextField nameField;
    	JPasswordField pwdField;
    	JButton button;
    	JTabbedPane choose;
    	JPanel panel1,panel2;
    	loginFrame(){
    		setBackground(Color.green);
    		tubiao=new JLabel(new ImageIcon("image/4.png"));
    		add(tubiao,BorderLayout.NORTH);
    		userName=new JLabel("账号",JLabel.CENTER);
    		userPwd=new JLabel("密码",JLabel.CENTER);
    		nameField=new JTextField(8);
    		pwdField=new JPasswordField(8);
    		panel1=new JPanel();
    		panel2=new JPanel();
    		choose=new JTabbedPane();
    		choose.add("教师登陆",panel1);
    		choose.add("学生登陆",panel2);
    		panel1.setLayout(new GridLayout(2,2));
    		panel1.add(userName);panel1.add(nameField);
    		panel1.add(userPwd);panel1.add(pwdField);
    		add(choose,BorderLayout.CENTER);
    		button=new JButton("登陆");
    		add(button,BorderLayout.SOUTH);
    		button.addActionListener(this);
    		ImageIcon tubiao=new ImageIcon("image/3.png");
    		setIconImage(tubiao.getImage());
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setVisible(true);
    		setBounds(400,150,300,250);
    		setTitle("登陆");
    		validate();
    	}
    	public void actionPerformed(ActionEvent e){
    		String name,pwd;
    		name=nameField.getText();
    		pwd=pwdField.getText();
    		try{
    			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    		}
    		catch(ClassNotFoundException ex){
    		System.out.println(ex);
    		}
    		try{
    			Connection con;
    			Statement sql;
    			ResultSet rs;
    			String url,userName,userPwd;
    			url="jdbc:sqlserver://localhost:1433;DatabaseName=Student";
    			userName="sa";
    			userPwd="aaascx";
    			con=DriverManager.getConnection(url,userName,userPwd);
    			sql=con.createStatement();
    			rs=sql.executeQuery("select * from login where name ='"+name+"' and pwd='"+pwd+"'");
    			int q=0;
    			while(rs.next()){
    				q++;
    			}
    			if(q>0){
    				JOptionPane.showMessageDialog(this, "登陆成功!","消息对话框",JOptionPane.WARNING_MESSAGE);
    				this.dispose();
    				new CommFrame();
    				
    			}
    			else
    				JOptionPane.showMessageDialog(this, "账号或者密码错误!","消息对话框",JOptionPane.WARNING_MESSAGE);
    		}
    		catch(SQLException exp){
    			System.out.println(exp);
    		}
    	}
    }

     

     

     


    这是登陆界面:

     

     

     

    登陆成功后 点击确定 登陆界面会消失  出现学生信息界面 。我的初始密码是12345 12345 

    你也可以随便设置。

    还有我只设置了教师登陆的界面,学生登陆的界面没有设置。

    然后就是一个集合所有窗口的卡片式布局,称为CommFrame

     

     

    package 学生信息管理系统;
    import javax.swing.*;
    
    import java.awt.color.*;
    import java.awt.*;
    import java.awt.event.*;
    public class CommFrame extends JFrame implements ActionListener{
    	JMenuBar bar;
    	JMenu menu;
    	JMenuItem scanItem,deleteItem,updateItem,insertItem,searchItem;
    	Scan_stu scan;//查看所有学生信息
    	Delete_stu delete;//删除学生信息
    	Update_stu update;//更新学生信息
    	Insert_stu insert;//插入学生信息
    	Search_stu search;//查找学生信息
    	CardLayout card=null;
    	JPanel pCenter;
    	CommFrame(){
    		setLayout(new FlowLayout());
    		scanItem=new JMenuItem("浏览");
    		deleteItem=new JMenuItem("删除");
    		updateItem=new JMenuItem("修改");
    		insertItem =new JMenuItem("添加");
    		searchItem=new JMenuItem("查找");
    		bar=new JMenuBar();
    		menu=new JMenu("菜单");
    		menu.add(scanItem);
    		menu.add(deleteItem);
    		menu.add(updateItem);
    		menu.add(insertItem);
    		menu.add(searchItem);
    		bar.add(menu);
    		setJMenuBar(bar);
    		scanItem.addActionListener(this);
    		deleteItem.addActionListener(this);
    		updateItem.addActionListener(this);
    		insertItem.addActionListener(this);
    		searchItem.addActionListener(this);
    		scan=new Scan_stu();
    		update=new Update_stu();
    		delete=new Delete_stu();
    		insert=new Insert_stu();
    		search=new Search_stu();
    		card=new CardLayout();
    		pCenter=new JPanel();
    		pCenter.setLayout(card);
    		pCenter.add("scanItem", scan);
    		pCenter.add("deleteItem",delete);
    		pCenter.add("updateItem",update);
    		pCenter.add("insertItem",insert);
    		pCenter.add("searchItem",search);
    		add(pCenter,BorderLayout.SOUTH);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setVisible(true);
    		setBounds(400,150,550,400);
    		setTitle("学生信息管理系统");
    		validate();
    	}
    	public void actionPerformed(ActionEvent e){
    		if(e.getSource()==scanItem)
    			card.show(pCenter, "scanItem");
    		else if(e.getSource()==deleteItem)
    			card.show(pCenter, "deleteItem");	
    		else if(e.getSource()==updateItem)
    			card.show(pCenter, "updateItem");
    		else if(e.getSource()==insertItem)
    			card.show(pCenter, "insertItem");
    		else if(e.getSource()==searchItem)
    			card.show(pCenter, "searchItem");
    	}
    
    }
    

    这里是浏览所有学生信息:Scan_stu

     

     

    package 学生信息管理系统;
    import java.awt.*;
    
    import javax.swing.JFrame;
    
    import java.awt.event.*;
    
    import javax.swing.*;
    import javax.swing.table.*;
    public class Scan_stu extends JPanel implements ActionListener{
    	DefaultTableModel update_table;
    	JTable table;
    	Query query;
    	JButton button;
    	Object a[][];
    	String b[];
    	Scan_stu(){
    		setLayout(new FlowLayout());
    		setBackground(Color.green);
    		query=new Query();
    		query.setTableName("stu");
    		a=query.getRecord();
    		b=query.getField();
    		update_table=new DefaultTableModel(a, b);
    		table=new JTable(update_table);
    		button=new JButton("更新");
    		button.addActionListener(this);
    		JScrollPane scrollPane = new JScrollPane(table);
    		scrollPane.setBounds(0,0,550,380);
    		table.setPreferredSize(new Dimension(scrollPane.getWidth() - 50, scrollPane.getHeight()*2));//使表格出现滑动条
    		add(scrollPane);
    		add(button);
    	}
    	public void actionPerformed(ActionEvent e){
    		a=null;b=null;
    		query=new Query();
    		query.setTableName("stu");
    		a=query.getRecord();
    		b=query.getField();
    		update_table.setDataVector(a, b);
    	}
    }
    

    这里是界面

     

     

    再加上Scan_stu调用的Query查找函数

     

    package 学生信息管理系统;
    import java.sql.*;
    public class Query {
    	Object a[][]=null;
    	String b[]=null;
    	String tableName="";
    	int 字段个数;
    	public Query(){
    		try{
    			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    		}
    		catch(ClassNotFoundException e){
    			System.out.println(e);
    		}
    	}
    	public Object[][] getRecord(){//求表格的内容
    		a=null;
    		b=null;
    		Connection con;
    		Statement sql;
    		ResultSet rs;
    		try{
    			String url,userName,userPwd;
    			url="jdbc:sqlserver://localhost:1433;DatabaseName=Student";
    			userName="sa";
    			userPwd="aaascx";
    			con=DriverManager.getConnection(url,userName,userPwd);
    			int 字段个数=getZiDuan();
    			int n=getAmount();
    			a=new Object[n][字段个数];
    			sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
    			rs=sql.executeQuery("select * from "+tableName);
    			int m=0;
    			while(rs.next()){
    				for(int k=1;k<=字段个数;k++){
    					a[m][k-1]=rs.getString(k);
    				}
    				System.out.println();
    				m++;
    			}
    			con.close();
    		}
    		catch(SQLException e){
    			System.out.println("请输入正确的表名"+e);
    		}
    		return a;
    	}
    	public int getAmount(){//求表内容有多少行
    		Connection con;
    		Statement sql;
    		ResultSet rs;
    		try{
    			String url,userName,userPwd;
    			url="jdbc:sqlserver://localhost:1433;DatabaseName=Student";
    			userName="sa";
    			userPwd="aaascx";
    			con=DriverManager.getConnection(url,userName,userPwd);
    			sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
    			rs=sql.executeQuery("select * from "+tableName);
    			rs.last();
    			int rows=rs.getRow();
    			return rows;
    		}
    		catch(SQLException exp){
    			System.out.println(""+exp);
    			return 0;
    		}
    	}
    	public String[] getField(){//求字段名称
    		Connection con;
    		try{
    			String url,userName,userPwd;
    			url="jdbc:sqlserver://localhost:1433;DatabaseName=Student";
    			userName="sa";
    			userPwd="aaascx";
    			con=DriverManager.getConnection(url,userName,userPwd);
    			DatabaseMetaData metadata=con.getMetaData();
    			ResultSet rs1=metadata.getColumns(null, null, tableName, null);
    			int 字段个数=getZiDuan();
    			b=new String[字段个数];
    			int k=0;
    			while(rs1.next()){
    				b[k]=rs1.getString(4);
    				k++;
    			}
    			con.close();		
    		}
    		catch(SQLException e){
    			System.out.println(e);
    		}
    		return b;
    	}
    	public void setTableName(String s){//初试表名
    		tableName=s.trim();
    	}
    	public int getZiDuan(){//求字段个数
    		Connection con;
    		PreparedStatement sql;
    		ResultSet rs;
    		try{
    			String url,userName,userPwd;
    			url="jdbc:sqlserver://localhost:1433;DatabaseName=Student";
    			userName="sa";
    			userPwd="aaascx";
    			con=DriverManager.getConnection(url,userName,userPwd);
    			DatabaseMetaData metadata=con.getMetaData();
    			ResultSet rs1=metadata.getColumns(null, null, tableName, null);
    			字段个数=0;
    			while(rs1.next())
    				字段个数++;
    		}
    		catch(SQLException e){
    			System.out.println(e);
    		}
    		return 字段个数;
    	}
    }
    

     

     

     

     

     

    然后是删除学生信息函数

    Delete_stu

     

    package 学生信息管理系统;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.awt.color.*;
    import java.sql.*;
    public class Delete_stu extends JPanel implements ActionListener{
    	Box box1,box2,baseBox;
    	Query query;
    	JButton button;
    	JTextField field[]=null;
    	String a[]=null;
    	int n,mark;
    	Delete delete;
    	String tableName;
    	Delete_stu(){
    		query=new Query();
    		setBackground(Color.green);
    		query.setTableName("stu");
    		a=query.getField();
    		box1=Box.createVerticalBox();
    		box2=Box.createVerticalBox();
    		n=a.length;
    		field =new JTextField[n];
    		for(int i=0;i<n;i++){
    			field[i]=new JTextField(10);
    			if(a[i].equals("学号")==true)
    				box1.add(new JLabel("* "+a[i]));
    			else
    			box1.add(new JLabel("  "+a[i]));
    			box1.add(Box.createVerticalStrut(8));
    			box2.add(field[i]);
    			box2.add(Box.createVerticalStrut(8));
    		}
    		box1.add(new JLabel("  单击删除"));
    		button=new JButton("删除");
    		button.addActionListener(this);
    		box2.add(button);
    		baseBox=Box.createHorizontalBox();
    		baseBox.add(box1);
    		baseBox.add(Box.createHorizontalStrut(8));
    		baseBox.add(box2);
    		add(baseBox);
    	}
    	public void actionPerformed(ActionEvent e){
    		if(field[mark].getText().toString().equals("")==true)
    			JOptionPane.showMessageDialog(this, "带*号为必填内容","消息对话框",JOptionPane.WARNING_MESSAGE);
    		else
    		{
    			Delete delete=new Delete();
    			delete.setTableName("stu");
    			delete.setField(field);
    			delete.setA(a);
    			delete.Execute_Delete(mark);
    		}
    	}
    }
    


    这是界面

     

    这是调用的删除函数:Delete

     

    package 学生信息管理系统;
    import javax.swing.*;
    
    import java.sql.*;
    import java.awt.*;
    import java.awt.event.*;
    public class Delete extends JFrame{
    	String tableName;
    	JTextField field[]=null;
    	String a[]=null;
    	public void setTableName(String s){
    		tableName=s.trim();
    	}
    	public void setField(JTextField s[]){
    		field=s;
    	}
    	public void setA(String e[]){
    		a=e;
    	}
    	public Delete(){
    		
    	}
    	public void  Execute_Delete(int n){
    		String SQL="";
    		Connection con;
    		Statement sql;
    		SQL="delete from "+tableName+" where "+a[n]+" ='"+field[n].getText().toString()+"'";
    		try{
    			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    		}
    		catch(ClassNotFoundException exp){
    			System.out.println(exp);
    		}
    		try{
    			String url,userName,userPwd;
    			url="jdbc:sqlserver://localhost:1433;DatabaseName=Student";
    			userName="sa";
    			userPwd="aaascx";
    			con=DriverManager.getConnection(url,userName,userPwd);
    			sql=con.createStatement();
    			sql.executeUpdate(SQL);
    			con.close();
    			JOptionPane.showMessageDialog(this, "删除成功","消息对话框",JOptionPane.WARNING_MESSAGE);
    			for(int i=0;i<field.length;i++)
    				field[i].setText(null);;
    		}
    		catch(SQLException ex){
    			System.out.println(ex);
    		}
    	}
    }
    

    然后是修改学生信息的Update_stu函数

     

     

    package 学生信息管理系统;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.awt.color.*;
    import java.sql.*;
    public class Update_stu extends JPanel implements ActionListener{
    	Box box1,box2,baseBox;
    	Query query;
    	JButton button;
    	JTextField field[]=null;
    	String a[]=null;
    	int n,mark;
    	Update update;
    	String tableName;
    	Update_stu(){
    		query=new Query();
    		setBackground(Color.green);
    		query.setTableName("stu");
    		a=query.getField();
    		box1=Box.createVerticalBox();
    		box2=Box.createVerticalBox();
    		n=a.length;
    		field =new JTextField[n];
    		for(int i=0;i<n;i++){
    			field[i]=new JTextField(10);
    			if(a[i].equals("学号")==true)
    				box1.add(new JLabel("* "+a[i]));
    			else
    			box1.add(new JLabel("  "+a[i]));
    			box1.add(Box.createVerticalStrut(8));
    			box2.add(field[i]);
    			box2.add(Box.createVerticalStrut(8));
    		}
    		box1.add(new JLabel("  单击修改"));
    		button=new JButton("修改");
    		button.addActionListener(this);
    		box2.add(button);
    		baseBox=Box.createHorizontalBox();
    		baseBox.add(box1);
    		baseBox.add(Box.createHorizontalStrut(8));
    		baseBox.add(box2);
    		add(baseBox);
    	}
    	public void actionPerformed(ActionEvent e){
    		int i;
    		for(i=0;i<n;i++){
    			if(a[i].equals("学号")==true&&field[i].getText().toString().equals("")==true){
    				mark=i;
    				JOptionPane.showMessageDialog(this, "带*必须填写!!!","消息对话框",JOptionPane.WARNING_MESSAGE);
    				break;
    			}
    		}
    		if(i==n){
    			int choose=JOptionPane.showConfirmDialog(this, "请确保你的学号是正确的,否则会更新失败!!!如果学号错误"
    					+ "请先删除再添加","消息对话框",JOptionPane.WARNING_MESSAGE);
    			if(choose==JOptionPane.YES_OPTION){
    				Update update=new Update();
    				update.setTableName("stu");
    				update.setField(field);
    				update.setA(a);
    				update.Execute_Update(mark);
    				JOptionPane.showMessageDialog(this, "更新成功!!!","消息对话框",JOptionPane.WARNING_MESSAGE);
    			}
    		}
    	}
    
    }
    


    这是界面

     

    这是调用的修改函数Update

     

    package 学生信息管理系统;
    import javax.swing.*;
    
    import java.sql.*;
    import java.awt.*;
    import java.awt.event.*;
    public class Update extends JFrame{
    	String tableName;
    	JTextField field[]=null;
    	String a[]=null;
    	public void setTableName(String s){
    		tableName=s.trim();
    	}
    	public void setField(JTextField s[]){
    		field=s;
    	}
    	public void setA(String e[]){
    		a=e;
    	}
    	public Update(){
    		
    	}
    	public void  Execute_Update(int mark){
    		String SQL[]=new String [a.length];
    		Connection con;
    		Statement sql;
    		for(int i=0;i<a.length;i++)
    		{
    			if(i!=mark)
    			SQL[i]="update "+tableName+" set "+a[i]+" ='"+field[i].getText().toString()+"' where "+a[mark]+" ='"+field[mark].getText().toString()+"'";
    		}
    		try{
    			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    		}
    		catch(ClassNotFoundException exp){
    			System.out.println(exp);
    		}
    		try{
    			String url,userName,userPwd;
    			url="jdbc:sqlserver://localhost:1433;DatabaseName=Student";
    			userName="sa";
    			userPwd="aaascx";
    			con=DriverManager.getConnection(url,userName,userPwd);
    			sql=con.createStatement();
    			for(int i=0;i<field.length;i++)
    				if(i!=mark&&field[i].getText().toString().equals("")==false)
    					sql.executeUpdate(SQL[i]);
    			con.close();
    			for(int i=0;i<field.length;i++)
    				field[i].setText(null);
    		}
    		catch(SQLException ex){
    			System.out.println(ex);
    		}
    	}
    }
    


    添加学生信息函数:Insert_Stu

     

     

    package 学生信息管理系统;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.awt.color.*;
    import java.sql.*;
    public class Insert_stu extends JPanel implements ActionListener{
    	Box box1,box2,baseBox;
    	Query query;
    	JButton button;
    	JTextField field[]=null;
    	String a[]=null;
    	int n,mark;
    	Insert insert;
    	String tableName;
    	Insert_stu(){
    		query=new Query();
    		setBackground(Color.green);
    		query.setTableName("stu");
    		a=query.getField();
    		box1=Box.createVerticalBox();
    		box2=Box.createVerticalBox();
    		n=a.length;
    		field =new JTextField[n];
    		for(int i=0;i<n;i++){
    			field[i]=new JTextField(10);
    			if(a[i].equals("学号")==true)
    				box1.add(new JLabel("* "+a[i]));
    			else
    			box1.add(new JLabel("  "+a[i]));
    			box1.add(Box.createVerticalStrut(8));
    			box2.add(field[i]);
    			box2.add(Box.createVerticalStrut(8));
    		}
    		box1.add(new JLabel("  单击添加"));
    		button=new JButton("添加");
    		button.addActionListener(this);
    		box2.add(button);
    		baseBox=Box.createHorizontalBox();
    		baseBox.add(box1);
    		baseBox.add(Box.createHorizontalStrut(8));
    		baseBox.add(box2);
    		add(baseBox);
    	}
    	public void actionPerformed(ActionEvent e){
    		int i;
    		for(i=0;i<n;i++){
    			if(field[i].getText().toString().equals("")==true){
    				JOptionPane.showMessageDialog(this, "必须全部填写","消息对话框",JOptionPane.WARNING_MESSAGE);
    				break;
    			}
    			if(a[i].equals("学号")==true){
    				mark=i;
    			}
    		}
    		if(i==n){
    				Insert insert=new Insert();
    				insert.setTableName("stu");
    				insert.setField(field);
    				insert.setA(a);
    				insert.Execute_Insert(mark);
    			}
    		}
    
    }
    


     

     

     

    调用的添加函数Insert

     

    package 学生信息管理系统;
    import javax.swing.*;
    
    import java.sql.*;
    import java.awt.*;
    import java.awt.event.*;
    public class Insert extends JFrame{
    	String tableName;
    	JTextField field[]=null;
    	String a[]=null;
    	Update update;
    	public void setTableName(String s){
    		tableName=s.trim();
    	}
    	public void setField(JTextField s[]){
    		field=s;
    	}
    	public void setA(String e[]){
    		a=e;
    	}
    	public Insert(){
    		
    	}
    	public void  Execute_Insert(int mark){
    		String SQL;
    		Connection con;
    		Statement sql;
    		try{
    			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    		}
    		catch(ClassNotFoundException exp){
    			System.out.println(exp);
    		}
    		try{
    			String url,userName,userPwd;
    			url="jdbc:sqlserver://localhost:1433;DatabaseName=Student";
    			userName="sa";
    			userPwd="aaascx";
    			SQL="insert "+tableName+"("+a[mark]+") values ('"+field[mark].getText().toString()+"')";
    			con=DriverManager.getConnection(url,userName,userPwd);
    			sql=con.createStatement();
    			sql.execute(SQL);
    			con.close();
    			update =new Update();
    			update.setTableName(tableName);
    			update.setField(field);
    			update.setA(a);
    			update.Execute_Update(mark);
    			JOptionPane.showMessageDialog(this, "添加成功!!!","消息对话框",JOptionPane.WARNING_MESSAGE);
    			for(int i=0;i<field.length;i++)
    				field[i].setText(null);;
    		}
    		catch(SQLException ex){
    			System.out.println(ex);
    		}
    	}
    }
    


    然后是查找学生信息的Search_stu函数

     

     

    package 学生信息管理系统;
    import java.awt.*;
    import java.awt.event.*;
    
    import javax.swing.*;
    import javax.swing.table.DefaultTableModel;
    
    import java.awt.color.*;
    import java.sql.*;
    public class Search_stu extends JPanel implements ActionListener{
    	Box box[],baseBox;
    	Query query;
    	JButton button;
    	JTextField field[]=null;
    	String a[]=null;
    	int n,mark,m;
    	Search search;
    	String tableName;
    	DefaultTableModel search_table;
    	Object object[][];
    	String b[];
    	Search_stu(){
    		setLayout(new FlowLayout());
    		query=new Query();
    		setBackground(Color.green);
    		query.setTableName("stu");
    		a=query.getField();
    		n=a.length;
    		box=new Box [n+1];
    		field =new JTextField[n];
    		for(int i=0;i<n;i++){
    			box[i]=Box.createHorizontalBox();
    			field[i]=new JTextField(10);
    			if(a[i].equals("学号")==true){
    				box[i].add(new JLabel("  "+a[i]));
    				box[i].add(Box.createHorizontalStrut(8));
    				box[i].add(field[i]);
    			}
    			else{
    				box[i].add(new JLabel("  "+a[i]));
    				box[i].add(Box.createHorizontalStrut(8));
    				box[i].add(field[i]);
    			}
    		}
    		object =new Object[0][0];
    		search_table=new DefaultTableModel(object, a);
    		JTable table=new JTable(search_table);
    		button=new JButton("查找");
    		button.addActionListener(this);
    		box[n-1].add(new JLabel("  单击查找"));
    		box[n-1].add(Box.createHorizontalStrut(8));
    		box[n-1].add(button);
    		baseBox=Box.createVerticalBox();
    		for(int i=0;i<n;i++){
    		baseBox.add(box[i]);
    		baseBox.add(Box.createVerticalStrut(8));
    		}
    		JScrollPane scrollPane=new JScrollPane(table);
    		scrollPane.setBounds(0,0,550,380);
    		table.setPreferredSize(new Dimension(scrollPane.getWidth() - 50, scrollPane.getHeight()*2));
    		baseBox.add(scrollPane); 
    		add(baseBox);
    		table.revalidate();
    		
    	}
    	public void actionPerformed(ActionEvent e){
    		int i,sum=0;
    		for(i=0;i<n;i++){
    			if(field[i].getText().toString().equals("")==true)
    				sum++;
    		}
    		System.out.println(sum);
    		if(sum==n)
    			JOptionPane.showMessageDialog(this, "你未输入任何内容,请重新输入!","消息对话框",JOptionPane.WARNING_MESSAGE);
    		else{
    			Search search=new Search();
    			search.setTableName("stu");
    			search.setField(field);
    			search.setA(a);
    			search.Execute_Search();	
    			object=null;b=null;
    			query=new Query();
    			query.setTableName("stu");
    			object=search.getRecord();
    			search_table.setDataVector(object, a);
    		}
    	}
    }
    


    这是查找界面

     

    然后是查找函数:

     

    package 学生信息管理系统;
    import javax.swing.*;
    
    import java.sql.*;
    import java.awt.*;
    import java.awt.event.*;
    public class Search extends JFrame{
    	String tableName;
    	JTextField field[]=null;
    	String a[]=null;
    	Object object[][];
    	String b[];
    	public void setTableName(String s){
    		tableName=s.trim();
    	}
    	public void setField(JTextField s[]){
    		field=s;
    	}
    	public void setA(String e[]){
    		a=e;
    	}
    	public Search(){
    		
    	}
    	public void  Execute_Search(){
    		String SQL="select * from "+tableName+" where ";
    		Connection con;
    		Statement sql;
    		ResultSet rs;
    		int sum=0;
    		for(int i=0;i<a.length;i++)
    		{
    			if(field[i].getText().toString().equals("")==false){
    				if(sum==0)
    					SQL=SQL+a[i]+" = '"+field[i].getText().toString()+"'";
    				else
    					SQL=SQL+" and "+a[i]+" = '"+field[i].getText().toString()+"'";
    				sum++;
    			}
    			
    		}
    		try{
    			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    		}
    		catch(ClassNotFoundException exp){
    			System.out.println(exp);
    		}
    		try{
    			String url,userName,userPwd;
    			url="jdbc:sqlserver://localhost:1433;DatabaseName=Student";
    			userName="sa";
    			userPwd="aaascx";
    			con=DriverManager.getConnection(url,userName,userPwd);
    			sql=con.createStatement();
    			sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
    			rs=sql.executeQuery(SQL);
    			rs.last();
    			object =new Object[rs.getRow()][a.length];
    			rs.beforeFirst();
    			int ncase=0;
    			while(rs.next()){
    				for(int i=1;i<=a.length;i++){
    					object[ncase][i-1]=rs.getString(i);
    				}
    				ncase++;
    			}
    			con.close();
    			for(int i=0;i<field.length;i++)
    				field[i].setText(null);
    		}
    		catch(SQLException ex){
    			System.out.println(ex);
    		}
    	}
    	public Object[][] getRecord(){
    		return object;
    	}
    }
    


    写的时候没发现  现在看看挺多的。。其实代码不多,我每个删除 更新 添加 查看 查找 之所以又写了一个删除 更新 添加 查找函数 因为我还会往下写的。。在后面更新 会 查找课程信息 成绩信息 什么的直接调用函数就行了。所以不要嫌多。。而且这些函数的内容都是差不多的。

     

    比如写完一个更新操作 把里面的sql语句改改 不就是删除操作吗。。内容看着多 其实都一样。一起加油吧!

     

    展开全文
  • 可视化学生信息管理系统,实现学生信息的增减删改,并能显示头像等多种信息。笔者想做一个可视化的窗体来管理学生信息系统,由于要连接数据库,我说使用的数据库为SQLSERVER。开始是一个登录页面,用于判别你是学生...
  • Android实现学生信息管理系统登录与数据库准备

    千次阅读 多人点赞 2019-07-13 10:56:56
    前一阵自学了一些安卓基础,正好需要交数据库大作业,就拿android做了一个简单的学生信息管理系统。 功能设计 登录界面(入口):后台数据库登录密码验证、登录身份选择、修改密码。 学生端:学生可以选课、可以查看...

    前言

    前一阵自学了一些安卓基础,正好需要交数据库大作业,就拿android做了一个简单的学生信息管理系统。
    Android学生信息管理系统
    代码我已经放到了github上,需要的可以下载
    https://github.com/SunnyBoy-WYH/AndroidDemo
    考虑到大家可能github下载慢,我也在码云放了一份
    https://gitee.com/SunnyBoy-WYH/AndroidDemo

    觉得还可以的可以Star一下…

    功能设计

    登录界面(入口):后台数据库登录密码验证、登录身份选择、修改密码。

    学生端:学生可以选课、可以查看选课结果、查看个人信息、向老师和管理员提出建议、切换账户。

    教师端:查看所教课程信息、管理所教学生成绩、查看学生留言(匿名)、统计学生信息、查看教师个人信息。

    管理员端:查询、管理学生、教师、管理员、课程信息,对学生绩点按照条件排序、查看留言,并且可以看到留言人的信息。

    后台:Sqlite数据库,表的基本设计,触发器、外键依赖、约束等保证表的合理性、完整性,对于账户的md5加密算法设计

    一、数据库表设计

    先来看看总体的E-R图,可能设计的不太好,大家仅供参考。
    在这里插入图片描述

    package com.example.database_manage.database;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    /*
       该界面主要用于建表,以及设定完整性
     */
    public class DBOpenHelper extends SQLiteOpenHelper {
    
            //带全部参数的构造函数,此构造函数必不可少
            public DBOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
                super(context, name, factory, version);
            }
            @Override
            public void onCreate(SQLiteDatabase db) {
    
                //学生信息
                String sql_student = "create table student(" +
                        "id int primary key not null ," +
                        "name varchar(20) not null," +
                        "sex varchar(10) not null,"+
                        "age int check(age<100 and age>0),"+
                        "banji varchar(20) ,"+
                        "phone int ,"+
                        "college varchar(20) default '无'," +
                        "jidian int check(jidian>0 and jidian<5.0)) "
                        ;
                //学生——登陆密码表
                String sql_student_load = "create table load_account(account int primary Key not null ,password varchar(20))";
    			//触发器
                String sql_ctrigger = "CREATE TRIGGER load_add AFTER INSERT ON student  " +
                        "BEGIN INSERT INTO load_account(account,password) VALUES (new.id,'e10adc3949ba59abbe56e057f20f883eWYH'); END;";
                String sql_trigger = "CREATE TRIGGER delete_load BEFORE DELETE ON student BEGIN DELETE  FROM load_account WHERE account =old.id ;END ; ";
                String sql_trigger2 = "CREATE TRIGGER student_load_change " +
                        " AFTER UPDATE ON student BEGIN UPDATE  load_account SET ACCOUNT = NEW.ID WHERE ACCOUNT = OLD.ID; END;";
                db.execSQL(sql_student_load);
                db.execSQL(sql_student);
                db.execSQL(sql_ctrigger);
                db.execSQL(sql_trigger);
                db.execSQL(sql_trigger2);
    
    
                //老师个人信息表
                String sql_teacher ="create table teacher(" +
                        "teacher_id int primary key not null," +
                        "name varchar(20)," +
                        "sex  varchar(20) check(sex = '男' or sex = '女')," +
    
                        "age int check(age>0 and age<100)," +
                        "level varchar(20)," +
                        "phone int ," +
                        "college varchar(20))";
                //老师登录信息表
                String sql_teacher_load = "create table load_teacher(" +
                        "account int primary key not null ," +
                        "password varchar(20))";
    			//触发器
                String sql_ttrigger = "CREATE TRIGGER load_add_teacher AFTER INSERT ON teacher  " +
                        "BEGIN INSERT INTO load_teacher(account,password) VALUES (new.teacher_id,'e10adc3949ba59abbe56e057f20f883eWYH'); END;";
                String sql_dttrigger = "CREATE TRIGGER delete_teacher_load " +
                        " BEFORE DELETE ON teacher BEGIN DELETE FROM load_teacher WHERE ACCOUNT = OLD.TEACHER_ID; END;";
                String sql_dttrigger1 = "CREATE TRIGGER teacher_load_change " +
                        " AFTER UPDATE ON teacher BEGIN UPDATE  load_teacher SET ACCOUNT = NEW.TEACHER_ID WHERE ACCOUNT = OLD.TEACHER_ID; END;";
    
                db.execSQL(sql_teacher_load);
                db.execSQL(sql_teacher);
                db.execSQL(sql_ttrigger);
                db.execSQL(sql_dttrigger);
                db.execSQL(sql_dttrigger1);
    
    
                //学生选课信息表
                String sql_student_course = "create table student_course(" +
                        "student_id int ,"+
                        "course_name varchar(20),"+
                        "teacher_name varchar(10),"+
                        "score int, " +
                        "FOREIGN KEY(course_name) REFERENCES course(course_name)," +
                        "FOREIGN KEY(teacher_name) REFERENCES course(teacher_name)" +
    
                        ")";
                //课程信息表
                String sql_course = "create table course(" +
                        "teacher_name varchar(20) not null,"+
                        "course_name varchar(20) not null," +
                        "course_weight SMALLINT ,"+
                        "course_time varchar(20)," +
                        "course_period varchar(20)," +
                        "primary key(teacher_name,course_name)," +
                        "FOREIGN KEY(teacher_name) REFERENCES teacher(name))";
                db.execSQL(sql_course);
                db.execSQL(sql_student_course);
    
    
    			//留言信息存储表
                String sql_liuyan  = "create table message(" +
                        "student_id int primary key not null," +
                        "message text)";
                db.execSQL(sql_liuyan);
    
    
    
                //管理员表
                String sql_admin = "create table administractor(" +
                        " account varchar(20)," +
                        " password varchar(20))";
                String sql_insert_admin = "insert into administractor values('WYH','c7533ad5fb828c1bedd12608f86f998dWYH')";
    
                db.execSQL(sql_admin);
                db.execSQL(sql_insert_admin);
    
           
                //个人资源配置表,比如更改图片之类的啦
                String personal_resource = "create table personal_resource(" +
                        "id int primary key not null ," +
                        "IMAGE blob)";
    
                db.execSQL(personal_resource);
    
                //触发器
    
                String personal_resource_trigger = "CREATE TRIGGER personal_resource_trigger AFTER INSERT ON student " +
                        "BEGIN INSERT INTO personal_resource(id,IMAGE) VALUES (new.id,null);END;";
                String personal_resource_trigger1 = "CREATE TRIGGER personal_resource_trigger_t AFTER INSERT ON teacher " +
                        "BEGIN INSERT INTO personal_resource(id,IMAGE) VALUES (new.teacher_id,null);END;";
    
                db.execSQL(personal_resource_trigger);
                db.execSQL(personal_resource_trigger1);
    
    
    
    			//插入基本测试数据
                String sql_insert1 = "insert into course(teacher_name,course_name,course_weight,course_time,course_period) values('李xx','电子线路基础',2,'周一上午','1')";
                String sql_insert2 = "insert into course(teacher_name,course_name,course_weight,course_time,course_period) values('高x* 刘x','大学英语4',4,'周五上午','1')";
                String sql_insert3 = "insert into course(teacher_name,course_name,course_weight,course_time,course_period) values('魏xx','数据库原理',3,'周三上午','1')";
                String sql_insert4 = "insert into course(teacher_name,course_name,course_weight,course_time,course_period) values('司xx','数学模型',2,'周一晚上','1')";
                String sql_insert5 = "insert into course(teacher_name,course_name,course_weight,course_time,course_period) values('司xx','运筹学',2,'周三下午','1')";
                String sql_insert6 = "insert into course(teacher_name,course_name,course_weight,course_time,course_period) values('王xx','毛泽东思想概论',4.5,'周五晚上','1')";
                db.execSQL(sql_insert1);
                db.execSQL(sql_insert2);
                db.execSQL(sql_insert3);
                db.execSQL(sql_insert4);
                db.execSQL(sql_insert5);
                db.execSQL(sql_insert6);
    
    
    
    
    			//插入基本测试数据
                String sql_p = "insert into student(id ,name ,sex,age ,banji , phone, college )" +
                        " values(20171302028,'武xx','男',19,'17计科3班',188330,'网络空间安全与计算机学院')";
    
                String sql_p1 = "insert into student(id ,name ,sex,age ,banji , phone, college )" +
                        " values(20180301178,'梁x','女',20,'18新闻2班',188330,'新闻传播学院')";
                String sql_p2 = "insert into student(id ,name ,sex,age ,banji , phone, college )" +
                        " values(20171302029,'台x','男',20,'17计科3班',188330,'网络空间安全与计算机学院')";
                String sql_p3 = "insert into student(id ,name ,sex,age ,banji , phone, college )" +
                        " values(20171302030,'王x','男',20,'17计科3班',188330,'网络空间安全与计算机学院')";
                String sql_p4 = "insert into student(id ,name ,sex,age ,banji , phone, college )" +
                        " values(20171302031,'霍xx','男',20,'17材料2班',188330,'化学与环境科学学院')";
                String sql_p5 = "insert into student(id ,name ,sex,age ,banji , phone, college )" +
                        " values(20171102027,'王xx','男',20,'17材料2班',18812141604,'化学与环境科学学院')";
    
    
                String sql_tp1 = "insert into teacher(teacher_id ,name ,sex,age ,level , phone, college )" +
                        " values(2018,'魏xx','男',20,'高级教师',188330,'网络空间安全与计算机学院')";
                String sql_tp = "insert into teacher(teacher_id ,name ,sex,age ,level , phone, college )" +
                        " values(2017,'司xx','男',19,'高级教师',188330,'网络空间安全与计算机学院')";
                db.execSQL(sql_p);
                db.execSQL(sql_tp);
                db.execSQL(sql_p1);
                db.execSQL(sql_p2);
                db.execSQL(sql_p3);
                db.execSQL(sql_p4);
                db.execSQL(sql_p5);
                db.execSQL(sql_tp1);
    
    
            }
            @Override
            public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    
            }
    
        }
    
    
    

    为了能够快速简单的获取SQLitedatabase对象,设计一个公用类方法

    CommonDatabase.java

    package com.example.database_manage.database;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    
    public class CommonDatabase {
        private DBOpenHelper dbHelper;
        private SQLiteDatabase sqlite;
        public SQLiteDatabase getSqliteObject(Context context, String db_name){
            dbHelper = new DBOpenHelper(context,db_name,null,1);
            sqlite = dbHelper.getWritableDatabase();
            return sqlite;
        }
    
    }
    
    

    我们的登录信息在数据库应该以密文显示,所以我们应该使用一种加密算法,在这里我选择了不可逆的md5算法。然后再登录的时候将密码用md5转换后再与数据库中进行比较。

    MD5demo.java

    package com.example.database_manage.database;
    
    import java.math.BigInteger;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    public class MD5Demo {
        private  static  String key = "WYH";
    
        //写一个md5加密的方法
        public static String md5(String plainText) {
            //定义一个字节数组
            byte[] secretBytes = null;
            try {
                // 生成一个MD5加密计算摘要
                MessageDigest md = MessageDigest.getInstance("MD5");
                //对字符串进行加密
                md.update(plainText.getBytes());
                //获得加密后的数据
                secretBytes = md.digest();
            } catch (NoSuchAlgorithmException e) {
                throw new RuntimeException("没有md5这个算法!");
            }
            //将加密后的数据转换为16进制数字
            String md5code = new BigInteger(1, secretBytes).toString(16);// 16进制数字
            // 如果生成数字未满32位,需要前面补0
            for (int i = 0; i < 32 - md5code.length(); i++) {
                md5code = "0" + md5code;
            }
            return md5code+key;
        }
    
    }
    

    虽然md5算法是不可逆的,但是网上依旧有解密网站,但是解密网站相当于是一个大量存储这种转换信息的数据库,并不是真正的解密了。
    网址如下:
    https://www.cmd5.com/
    它只能解密一些简单的诸如123456789这种密码,但是这里我的初始密码确实是123456,所以我在最后返回的md5密文后增加一个key,如上面代码所示,相当于增加了个人标记。

    二、登录界面与逻辑设计

    效果如图所示
    在这里插入图片描述
    登录布局代码

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="@mipmap/load_new"
    
        tools:context=".start_load.load">
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:layout_marginTop="30dp"
            android:text="河北大学学生信息系统"
            android:textSize="30dp" />
    
        <ImageView
    
            android:layout_width="150dp"
            android:layout_height="150dp"
            app:srcCompat="@mipmap/school_new"
            android:layout_marginTop="60dp"
            android:layout_gravity="center_horizontal"/>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginTop="50dp">
    
            <ImageView
                android:layout_width="30dp"
                android:layout_height="30dp"
                android:layout_gravity="center"
                android:layout_marginLeft="80dp"
                android:src="@mipmap/geren"/>
    
                <android.support.design.widget.TextInputLayout
                    android:layout_width="match_parent"
                    android:hint="请输入您的学号"
                    android:id="@+id/input_id"
    
                    android:layout_marginRight="50dp"
                    android:layout_height="wrap_content">
                    <EditText
                        android:id="@+id/edit_load_zhanghao"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:textSize="20sp"
                        />
    
                </android.support.design.widget.TextInputLayout>
    
    
        </LinearLayout>
    
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
    
    
                android:orientation="horizontal">
    
                <ImageView
                    android:layout_width="30dp"
                    android:layout_height="30dp"
                    android:layout_marginLeft="80dp"
                    android:layout_gravity="center"
                    android:src="@mipmap/suo"/>
                <RelativeLayout
                    android:layout_marginRight="50dp"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">
                <android.support.design.widget.TextInputLayout
                    app:errorEnabled="true"
                    app:counterMaxLength="10"
                    app:counterEnabled="true"
                    android:id="@+id/textinput_p"
                    android:hint="请输入您的密码"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">
    
                        <EditText
                            android:id="@+id/edit_load_password"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:textSize="20dp"
                            />
    
                </android.support.design.widget.TextInputLayout>
                    <ImageButton
                        android:id="@+id/imagebutton"
                        android:layout_width="50dp"
                        android:layout_height="50dp"
                        android:background="#00000000"
                        android:layout_alignParentEnd="true"
                        android:src="@drawable/invisible" />
                    </RelativeLayout>
    
    
            </LinearLayout>
        <RelativeLayout
            android:layout_marginRight="50dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <CheckBox
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"
                android:id="@+id/checkbox_remember"
                android:text="记住密码"/>
    
        </RelativeLayout>
    
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginTop="30dp"
            >
            <RadioGroup
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/load_radiogroup"
                android:gravity="center"
                android:orientation="horizontal">
    
                    <RadioButton
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="学生"
    
                        android:id="@+id/radiobutton_xuesheng"/>
                <RadioButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/radiobutton_teacher"
                    android:text="老师"/>
                    <RadioButton
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:id="@+id/radiobutton_guanliyuan"
                        android:text="管理员"/>
    
            </RadioGroup>
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:layout_marginTop="30dp"
            android:orientation="horizontal">
    
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="登录"
                android:background="@drawable/button_background"
                android:textColor="#ffffffff"
    
    
                android:id="@+id/button_load"/>
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="修改密码"
                android:textColor="#ffffffff"
                android:background="@drawable/button_background"
    
    
                android:id="@+id/button_change_password"/>
        </LinearLayout>
    
    
    
    
    </LinearLayout>
    

    说明:这里我使用了design库的TextInputLayout,觉得好看的可以参考我这篇文章
    TextInputLayout 使用及其属性

    处理登录的逻辑代码

    package com.example.database_manage.start_load;
    
    import android.annotation.SuppressLint;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.graphics.Color;
    import android.os.Build;
    import android.os.Bundle;
    import android.preference.PreferenceManager;
    import android.support.design.widget.TextInputLayout;
    import android.support.v7.app.AppCompatActivity;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.text.method.HideReturnsTransformationMethod;
    import android.text.method.PasswordTransformationMethod;
    import android.view.MotionEvent;
    import android.view.View;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.EditText;
    import android.widget.ImageButton;
    import android.widget.RadioGroup;
    import android.widget.Toast;
    
    import com.example.database_manage.R;
    import com.example.database_manage.administractor.Container;
    import com.example.database_manage.database.CommonDatabase;
    import com.example.database_manage.student.activity_student;
    import com.example.database_manage.teacher.activity_teacher;
    
    import static com.example.database_manage.database.MD5Demo.md5;
    
    
    /***
     * 登陆界面的配置
     */
    public class load extends AppCompatActivity {
    
        //标记是选择了学生还是管理员
        private String state = "";
        private SQLiteDatabase db ;
        private SharedPreferences pref;
        private SharedPreferences.Editor editor;
        private CheckBox rememberPass;
        private boolean isRemember ;
        private EditText edit_load_zhanghao;
        private EditText edit_load_password;
    
    
        @SuppressLint("ClickableViewAccessibility")
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_load);
    
            //用于记住密码的实现
            rememberPass = findViewById(R.id.checkbox_remember);
    
            pref = PreferenceManager.getDefaultSharedPreferences(this);
    
            isRemember = pref.getBoolean("remember_password",false);
    
    
            //状态栏融为一体的方法,这里参考了郭神的博客
            if (Build.VERSION.SDK_INT >= 21) {
                View decorView = getWindow().getDecorView();
                int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
                decorView.setSystemUiVisibility(option);
                getWindow().setStatusBarColor(Color.TRANSPARENT);
            }
    
    
            //轮子TextputLayout
            final TextInputLayout textInputLayout_p = findViewById(R.id.textinput_p);
    
            final TextInputLayout textInputLayout_id = findViewById(R.id.input_id);
    
            //账号密码编辑框
            edit_load_zhanghao = findViewById(R.id.edit_load_zhanghao);
    
            edit_load_password = findViewById(R.id.edit_load_password);
            //获取数据库对象
            CommonDatabase commonDatabase = new CommonDatabase();
    
            db =commonDatabase.getSqliteObject(load.this,"test_db");
    
            //绑定组件
            final Button button_change_password = findViewById(R.id.button_change_password);
    
            RadioGroup load_radiogroup = findViewById(R.id.load_radiogroup);
    
            final ImageButton imageButton = findViewById(R.id.imagebutton);
    
            //眼睛睁开闭上
            edit_load_password.setTransformationMethod(PasswordTransformationMethod.getInstance());//初始为隐藏密文状态
    
            imageButton.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    if(event.getAction() == MotionEvent.ACTION_DOWN) //按下重新设置背景图片
    
                    {
    
                        ((ImageButton)v).setImageDrawable(getResources().getDrawable(R.drawable.visible));
                        edit_load_password.setTransformationMethod(HideReturnsTransformationMethod.getInstance());//显示
    
    
                    }
    
                    else if(event.getAction() == MotionEvent.ACTION_UP) //松手恢复原来图片
    
                    {
    
                        ((ImageButton)v).setImageDrawable(getResources().getDrawable(R.drawable.invisible));
                        edit_load_password.setTransformationMethod(PasswordTransformationMethod.getInstance());//隐藏
    
                    }
                    return false;
                }
            });
    
    
            //单选按钮监听器
            load_radiogroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(RadioGroup group, int checkedId) {
                    switch (group.getCheckedRadioButtonId())
                    {
                        case R.id.radiobutton_xuesheng:
    
                        textInputLayout_id.setHint("请输入您的学号");
                            button_change_password.setVisibility(View.VISIBLE);
                            state = "student";
                            break;
                        case R.id.radiobutton_guanliyuan:
    
                            textInputLayout_id.setHint("请输入您的账号");
                            state = "guanliyuan";
                            break;
                        case R.id.radiobutton_teacher:
    
                            textInputLayout_id.setHint("请输入您的账号");
                            state = "teacher";
                            break;
                         default:
                             break;
    
                    }
                }
            });
    
            //登录按钮
            Button button_load = findViewById(R.id.button_load);
            button_load.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    //获取学生输入的账号密码
                    String account_load = edit_load_zhanghao.getText().toString();
                    
                    //由于我们在数据库中是密文存储的所以这里也要用我们写好的md5方法取转换成密文进行匹配验证
                    String password_load = md5(edit_load_password.getText().toString());
                    if(state=="guanliyuan")
                    {
                        String true_password="";
    
                        Cursor cursor = db.query("administractor", null, "account = ?", new String[]{account_load}, null, null, null);
    
                        while(cursor.moveToNext())
                        {
                            true_password =cursor.getString(cursor.getColumnIndex("password"));
                        }
    
                        if(password_load.equals(true_password))
                        {
                            isr();
                            startActivity(new Intent(load.this, Container.class));
                            Toast.makeText(load.this,"登陆成功",Toast.LENGTH_SHORT).show();
                            finish();
                        }
                        else
                        {
                            Toast.makeText(load.this,"密码错误!",Toast.LENGTH_SHORT).show();
                        }
                    }
                    else if(state.equals("student"))
                    {
    
                        //去数据库中找账号为account的数据
    
                        String true_password="";
    
                        Cursor cursor = db.query("load_account", null, "account = ?", new String[]{account_load}, null, null, null);
    
                        while(cursor.moveToNext())
                        {
                             true_password =cursor.getString(cursor.getColumnIndex("password"));
                        }
    
                        if(password_load.equals(true_password)&&true_password.equals("")==false)
                        {
                            isr();
                            Intent intent = new Intent(load.this, activity_student.class);
                            
                            intent.putExtra("student_id",account_load);
                            
                            startActivity(intent);
                            
                            Toast.makeText(load.this,"登陆成功!",Toast.LENGTH_SHORT).show();
    
                            finish();
                        }
                        else
                        {
                            Toast.makeText(load.this,"密码错误!",Toast.LENGTH_SHORT).show();
                        }
    
                    }
                    else if(state.equals("teacher"))
                    {
                        //去数据库中找账号为account的数据
                        Cursor cursor = db.query("load_teacher", null, "account = ? AND password = ?", new String[]{account_load,password_load}, null, null, null);
    
    
    
                        if(cursor.getCount()==0)
                        {
    
                            Toast.makeText(load.this,"密码错误!",Toast.LENGTH_SHORT).show();
    
                        }
                        else
                        {
                            isr();
                            
                            //登录成功转到老师界面并携带老师的教师号过去
                            Intent intent = new Intent(load.this, activity_teacher.class);
                            
                            intent.putExtra("teacher_id",edit_load_zhanghao.getText().toString());
                            
                            startActivity(intent);
                            
                            Toast.makeText(load.this,"登陆成功!",Toast.LENGTH_SHORT).show();
    
                            finish();
                        }
    
    
                    }
                    else
                    {
                        Toast.makeText(load.this,"您还没有选择任何登录类型!",Toast.LENGTH_SHORT).show();
                    }
    
    
    
                }
            });
            //点击修改按钮进入更改密码的界面
    
            button_change_password.setOnClickListener(new View.OnClickListener() {
                @SuppressLint("ClickableViewAccessibility")
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(load.this, password_change.class);
                    startActivity(intent);
    
    
    
                }
            });
            edit_load_password.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
                }
    
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
    
                }
    
                @Override
                public void afterTextChanged(Editable s) {
                    if(edit_load_password.getText().toString().equals(""))
                    {
                        textInputLayout_p.setError("不能为空!");
                    }
                    else
                    {
                        if(textInputLayout_p.getCounterMaxLength()<edit_load_password.length())
                        {
                            textInputLayout_p.setError("超出字数限制!");
                        }
                        else
                        {
                            textInputLayout_p.setErrorEnabled(false);
                        }
                    }
    
    
                }
            });
            //如果手机有记录
            if(isRemember)
            {
                edit_load_zhanghao.setText(pref.getString("account",""));
                edit_load_password.setText(pref.getString("password",""));
    
                //
                rememberPass.setChecked(true);
            }
    
    
        }
        //用于实现记住密码的方法,这里使用SharedPreference存放临时数据
        private void isr()
        {
            editor = pref.edit();
            //检查复选框是否被选中
            if(rememberPass.isChecked())
            {
                editor.putBoolean("remember_password",true);
                editor.putString("account",edit_load_zhanghao.getText().toString());
                editor.putString("password",edit_load_password.getText().toString());
            }
            else
            {
                editor.clear();
            }
            editor.apply();
        }
    
    }
    
    

    修改密码功能实现

    修改密码页面
    xml布局

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/b2"
        android:orientation="vertical"
        tools:context=".start_load.password_change">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_marginTop="120dp"
            android:orientation="horizontal"
            android:layout_height="wrap_content">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="30dp"
                android:layout_marginLeft="40dp"
                android:text="身份"/>
            <RadioGroup
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/password_radiogroup"
                android:gravity="center"
    
                android:orientation="horizontal">
    
                <RadioButton
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:text="学生"
    
                    android:id="@+id/radiobutton_xuesheng_p"/>
                <RadioButton
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:id="@+id/radiobutton_teacher_p"
                    android:text="老师"/>
                
            </RadioGroup>
        </LinearLayout>
    
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginTop="40dp"
            >
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="账号"
                android:textSize="30dp"
                android:layout_marginLeft="40dp"/>
    
    
            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/et_c_account"
                android:hint="请输入您的账号"
                android:layout_marginLeft="60dp"
                android:layout_marginRight="20dp"/>
    
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginTop="40dp">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="原密码"
                android:textSize="30dp"
    
                android:layout_marginLeft="40dp"/>
    
            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/et_c_oldpassword"
                android:hint="请输入您的旧密码"
                android:inputType="textPassword"
                android:layout_marginLeft="30dp"
                android:layout_marginRight="20dp"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginTop="40dp">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="新密码"
                android:textSize="30dp"
                android:layout_marginLeft="40dp"/>
            <android.support.design.widget.TextInputLayout
                app:errorEnabled="true"
                app:counterMaxLength="10"
                app:counterEnabled="true"
                android:id="@+id/textinput_newpassword"
                android:layout_marginLeft="10dp"
                android:layout_width="wrap_content"
                android:layout_weight="1"
                android:layout_height="wrap_content">
                <EditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:id="@+id/et_c_newpassword"
                    android:hint="请输入您的新密码"
                    android:inputType="textPassword"
                    android:layout_marginLeft="30dp"
                    android:layout_marginRight="20dp"/>
            </android.support.design.widget.TextInputLayout>
    
    
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginTop="40dp">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="新密码"
                android:textSize="30dp"
                android:layout_marginLeft="40dp"/>
    
            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/et_c_confirm_newpassword"
                android:hint="请再次确认新密码"
                android:layout_marginLeft="30dp"
                android:inputType="textPassword"
                android:layout_marginRight="20dp"/>
        </LinearLayout>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/button_change_password_ok"
            android:layout_gravity="center"
            android:layout_marginTop="40dp"
            android:background="#96B8D1"
            android:textSize="30dp"
            android:text="OK"/>
    
    
    
    </LinearLayout>
    

    逻辑代码password_change.java

    package com.example.database_manage.start_load;
    
    import android.content.ContentValues;
    import android.content.Intent;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.os.Bundle;
    import android.support.design.widget.TextInputLayout;
    import android.support.v7.app.AppCompatActivity;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.RadioGroup;
    import android.widget.Toast;
    
    import com.example.database_manage.R;
    import com.example.database_manage.database.CommonDatabase;
    
    import static com.example.database_manage.database.MD5Demo.md5;
    
    
    /***
     * 用于学生/老师修改密码
     */
    
    public class password_change extends AppCompatActivity {
        private  SQLiteDatabase db;
        private  Button button_change;
        private  RadioGroup load_radiogroup;
        private  EditText edit_account;
        private  EditText edit_oldpassword ;
        private  EditText edit_newpassword ;
        private  EditText edit_confirm ;
        private  String true_password ="";
        private  String state = "";
        private  TextInputLayout textInputLayout;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.activity_password_change);
    
            initView();
    
            //当选择不同身份时,state标记选择的身份
            load_radiogroup.setOnCheckedChangeListener(
                    new RadioGroup.OnCheckedChangeListener() {
                        @Override
                        public void onCheckedChanged(RadioGroup group, int checkedId) {
                            switch (group.getCheckedRadioButtonId())
                            {
                                case R.id.radiobutton_xuesheng_p:
    
                                    state="student";
    
                                    break;
                                case R.id.radiobutton_teacher_p:
    
                                    state = "teacher";
                                    break;
                            }
    
    
                        }
                    });
    
            //为按钮设置监听器
            button_change.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if(state.equals("student"))
                        {
                            check("load_account");
    
                        }
                        else if(state .equals("teacher"))
                        {
                            check("load_teacher");
                        }
                        else
                        {
                            Toast.makeText(password_change.this,"您还没有说明身份!",Toast.LENGTH_SHORT).show();
                        }
                }
            });
    
            //为新密码进行检查
            edit_newpassword.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
                }
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
    
                }
                @Override
                public void afterTextChanged(Editable s) {
                    if(textInputLayout.getCounterMaxLength()<edit_newpassword.length())
                    {
                        textInputLayout.setError("超出字数限制!");
                    }
                    else
                    {
                        textInputLayout.setErrorEnabled(false);
                    }
                }
            });
        }
    
        //绑定组件
        public void initView()
        {
            button_change = findViewById(R.id.button_change_password_ok);
    
            edit_account = findViewById(R.id.et_c_account);
    
            edit_oldpassword = findViewById(R.id.et_c_oldpassword);
    
            edit_newpassword = findViewById(R.id.et_c_newpassword);
    
            textInputLayout = findViewById(R.id.textinput_newpassword);
    
            edit_confirm = findViewById(R.id.et_c_confirm_newpassword);
    
            load_radiogroup= findViewById(R.id.password_radiogroup);
    
            db = new CommonDatabase().getSqliteObject(password_change.this,"test_db");
        }
        //检验正确性
        public  void  check(String string)
        {
            if(edit_account.getText().toString().equals("")||edit_confirm.getText().toString().equals("")||edit_newpassword.getText().toString().equals("")||edit_oldpassword.getText().toString().equals(""))
            {
                Toast.makeText(password_change.this,"不能为空!",Toast.LENGTH_SHORT).show();
            }
            else
            {
                //去找真正密码
                Cursor cursor =db.query(string,null,"account = ?",new String[]{edit_account.getText().toString()},null,null,null);
                //如果根本没这个账户
                if(cursor.getCount()==0)
                {
                    Toast.makeText(password_change.this,"没有找到该账户",Toast.LENGTH_SHORT).show();
                }
                else
                {
                    while (cursor.moveToNext())
                    {
                        true_password = cursor.getString(cursor.getColumnIndex("password"));
                    }
    
                    //如果原密码错误
                    if(!md5(edit_oldpassword.getText().toString()).equals(true_password))
                    {
                        Toast.makeText(password_change.this,"原密码错误!",Toast.LENGTH_SHORT).show();
                    }
                    else
                    {
                        //如果用户前后输入密码不同
                        if(!edit_newpassword.getText().toString().equals(edit_confirm .getText().toString()))
                        {
                            Toast.makeText(password_change.this,"前后两次输入与验证密码错误!",Toast.LENGTH_SHORT).show();
                        }
                        else
                        {
                            ContentValues values = new ContentValues();
                            values.put("password",md5(edit_newpassword.getText().toString()));
                            //更新数据库
                            db.update(string, values, "account = ? ", new String[]{edit_account.getText().toString()});
    
                            Toast.makeText(password_change.this,"修改成功!",Toast.LENGTH_SHORT).show();
    
                            startActivity(new Intent(password_change.this, load.class));
                        }
                    }
    
                }
    
    
    
            }
        }
    }
    
    

    登录和数据库准备先到这里了。图片什么的需求可以到我的github上查看获取,大部分来源于阿里巴巴矢量图标库,小部分来源于我个人。

    由于是边学安卓边做的,有些细节问题没有注意,大佬们多多指正。

    展开全文
  • 学生信息管理系统(一)——登录窗体

    千次阅读 热门讨论 2019-01-29 21:38:14
    刚开始信心满满的开始了学生,后来发现并不是想象中的那么简单。出师未捷,遇到了很多问题。 首先我们来整体说一下登录界面需要做点什么(只列举较为重要的几个部分)。 1.录系统界面所需控件 2.模块中连接数据库的...

    刚开始信心满满的开始了学生,后来发现并不是想象中的那么简单。出师未捷,遇到了很多问题。登录界面
    首先我们来整体说一下登录界面需要做点什么(只列举较为重要的几个部分)。

    1.录系统界面所需控件

    2.模块中连接数据库的代码

    Public Function ConnectString() As String
    
    ConnectString = "driver={sql server};server=张建业;uid=sa;pwd=123;database=Student"
    

    3.Text控件查空、查重(查询是否有记录)、检验用户名密码的正确性。

    4.配置ODBC

    问题及解决方法:
    1.配置ODBC
    ODBC32位–>文件dsn–>student.dsn–>配置–>选择服务器–>下一步
    –>使用用户输入登录ID和密码的SQL Server验证(s)–>输入SQL Server ID与密码–>更改默认数据库(Student)–>完成
    2.就是模块代码中连接数据库的时候检查一下代码中是否有错误,服务器名称,ID和密码是否正确。
    3.在这里插入图片描述
    SQL查询语句的形式不能出错,不让不可以识别。判断SQL语句是否出错,可以在运行后窗体下方的立即窗口复制:?+txtSQL
    然后下面就会出现一行直观的SQL语句。如果还不太明显的话就去SQL Server里面新建查询复制上述语句,SQL Server会提示哪有错误。

    总结:每一个小小的错误都有可能停滞你很长时间,养成良好的习惯会让你省去很多烦恼。
    还有一句话:每个程序员最喜欢干的事情就是写代码不写注释,而每个程序员最恨的事情就是看别人没写注释的代码!

    展开全文
  • 学生信息管理系统(C++实现)

    万次阅读 多人点赞 2018-10-13 10:42:17
    上个月程序设计作业做了一个学生信息管理系统,效果如下图   附上源代码。 //由于不熟悉文件读写,有些地方的代码有点奇怪。但是功能是可以实现的。 //虽然是用C++,但主要还是用了面向过程 /* ·File name...

    11月16日对代码进行了一些修改 https://blog.csdn.net/qq_41068877/article/details/84130848

     


    上个月程序设计作业做了一个学生信息管理系统,效果如下图

     

    附上源代码。

    //由于不熟悉文件读写,有些地方的代码有点奇怪。但是功能是可以实现的。

    //虽然是用C++,但主要还是用了面向过程

    /*
    ·File name:	file.h
    ·Description:	所有和文件读写相关的操作
    */
    
    #pragma once
    #include<iostream>
    #include<fstream>
    #include<string>
    #include"student.h"
    
    /*
    函数:read_record()
    功能:从record.txt读入记录,得到现有的记录条数
    参数:学生信息记录条数&m, 成绩条数&n,
    返回值:1
    */
    int read_record(int &m, int &n)
    {
    	std::ifstream fin("record.txt");
    	fin >> m;
    	fin >> n;
    	return 1;
    }
    
    /*
    函数:write_record()
    功能:写入记录到record.txt,更新记录条数
    参数:学生信息记录条数m, 成绩条数n,
    返回值: 0
    */
    int write_record(int m, int n)
    {
    	std::ofstream fout("record.txt");
    	fout << m;
    	fout << " ";
    	fout << n;
    	return 1;
    }
    /*
    函数:save_score()
    功能:保存文件到score.dat
    参数: 学生成绩指针StudentScore*, 学生成绩条数n
    */
    void save_score(StudentScore* stu_score,int n)
    {
    	using namespace std;
    	ofstream fout("score.dat", ios::binary);
    	if (!fout)
    	{
    		cout << "创建文件失败\n";
    		return;
    	}
    	int i = 0;
    	for (int i = 0; i < n; i++)
    	{
    		fout << stu_score[i].ID << "  " << stu_score[i].lesson_number << "  "
    			<< stu_score[i].lesson_name << "  " << stu_score[i].credit<< "  "
    			<< stu_score[i].daily_score << "  " << stu_score[i].exp_score<< "  " 
    			<< stu_score[i].exam_score << "  " << stu_score[i].total_score<< "  "
    			<< stu_score[i].actual_score << "\n";
    	}
    	fout.close();
    }
    /*
    函数:read_to_stu_score()
    功能:从文件score.dat读入分数到数组
    参数:学生成绩数组StudentScore*, 学生成绩条数&n
    */
    int read_to_stu_score(StudentScore* stu_score, int &n)
    {
    	using namespace std;
    	int i = 0;
    	ifstream fin("score.dat", ios::binary);
    	if (!fin)
    	{
    		cout << "读取成绩文件score.dat失败" << endl;
    		return 0;
    	}
    	for (int i = 0; i < n; i++)
    	{
    		fin >> stu_score[i].ID >> stu_score[i].lesson_number
    			>> stu_score[i].lesson_name >> stu_score[i].credit
    			>> stu_score[i].daily_score >> stu_score[i].exp_score
    			>> stu_score[i].exam_score >> stu_score[i].total_score
    			>> stu_score[i].actual_score;
    	}
    	fin.close();
    	return i;
    }
    
    /*
    函数:read_to_stu()
    功能:从文件student.txt读入学生信息到数组
    参数:学生数组Student*, 学生信息条数m
    */
    int read_to_stu(Student* stu, int &m)
    {
    	using namespace std;
    	int i = 0;
    	ifstream fin("student.txt");
    	if (!fin)
    	{
    		cout << "读取学生基本文件student.txt失败" << endl;
    		return 0;
    	}
    	string temp;//临时string,读入第一行的5个字符串
    	for (int i = 0; i < 5; i++)
    	{
    		fin >> temp;
    	}
    	for (int i = 0; i < m; i++)
    	{
    		fin >> stu[i].ID >> stu[i].name >> stu[i].sex >> stu[i].dor_number
    			>> stu[i].phone;
    	}
    	fin.close();
    	return 1;
    }
    /*
    函数:save_stu
    功能:写入学生信息到student.txt
    参数:学生数组Student*,学生信息条数m
    */
    void save_stu(Student* stu, int m)
    {
    	using namespace std;
    	ofstream fout("student.txt");
    	if (!fout)
    	{
    		cout << "创建文件失败\n";
    		return;
    	}
    	fout << "学号 姓名  性别  宿舍号码  电话号码\n";
    	for (int i = 0; i < m; i++)
    	{
    		fout << stu[i].ID << "  " << stu[i].name << "  " << stu[i].sex << "  "
    			<< stu[i].dor_number << "     " << stu[i].phone<<"\n";
    	}
    
    	fout.close();
    }
    
    
    /*
    ·File name:	func.h
    ·Description:	实现学生管理系统的相关函数的声明
    */
    #pragma once
    #include<string>
    #include"student.h"
    
    int read_data_and_calcu(StudentScore* stu_score, int & n);
    int find(Student * stu, StudentScore* stu_score,int m, int n);
    void find_baseinfo(Student* stu, int n);
    void find_baseinfo_by_id_name(Student* stu, int m);
    void find_baseinfo_by_dor(Student* stu, int m);
    void find_score(Student* stu, StudentScore * stu_score,int m, int n);
    int sort_score(StudentScore * stu_score, int n);
    int delete_by_ID(Student * stu, StudentScore * stu_score, int &m, int &n);
    
    
    /*
    ·File name:	menu.h
    ·Description:	菜单相关函数的声明
    */
    #pragma once
    #include"student.h"
    void show_menu();
    bool choose_func(char choice, bool & active, StudentScore * stu_score, Student * stu,
    	int & m, int& n);
    
    /*
    ·File name:	student.h
    ·Description:	学生类和学生成绩类
    */
    #pragma once
    #include<iostream>
    #include<iomanip>
    #include<string>
    using std::string;
    
    
    // StudentScore 存储学生成绩
    class StudentScore
    {
    public:
    	int ID;  //学号
    	string lesson_number; //课程编号
    	string lesson_name; //课程名称
    	int credit;  //学分
    	int daily_score;  //平时成绩
    	int exp_score;  //实验成绩
    	int exam_score; //卷面成绩
    	double total_score;  //综合成绩, 计算得到
    	double actual_score; // 实际得分, 计算得到
    public:
    	StudentScore() ;
    	StudentScore(int ID, string lesson_number,string lesson_name,int credit,
    int daily_score,int exp_score,int exam_score);
    	~StudentScore() ;
    	friend std::ostream& operator<<(std::ostream& os, const StudentScore& score);
    };
    
    //Student类,存储学生信息
    class Student
    {
    public:
    	int ID;  //学号
    	string name; //姓名
    	string sex; //性别
    	int dor_number; //宿舍号码
    	int phone; //电话
    public:
    	Student();
    	~Student();
    	friend std::ostream & operator<<(std::ostream & os, const Student& stu);
    };
    
    
    
    /*
    ·File name:	 func.cpp
    ·Description:   实现菜单的4项功能:1.读入数据; 2.查找; 3.删除; 4.成绩排序
    */
    
    
    #include<iostream>
    #include<iomanip>
    #include<string>
    #include<fstream>
    #include"student.h"
    
    using std::string;
    using std::cin;
    using std::cout;
    
    //下面这4个函数被find调用,故先声明。
    void find_baseinfo(Student* stu, int m);
    void find_baseinfo_by_id_name(Student* stu, int m);
    void find_baseinfo_by_dor(Student* stu, int m);
    void find_score(Student* stu, StudentScore * stu_score,int m,int n);
    
    
    /*
    函数:read_data_and_calcu()
    功能:从键盘读入成绩相关的7项数据,并根据公式计算出综合成绩和实得学分。
    参数:StudentScore*(分数数组地址), &n(已有的成绩条数)
    返回值:写入的条数
    */
    int read_data_and_calcu(StudentScore* stu_score, int & n)
    {
    	int Max_read = 1;       //每次最多读入的条数
    	bool flag_input = true;// 用来判断是否正常输入
    	int id = 0;           //学号
    	string lesson_number;//课程编号
    	string lesson_name; //课程名称
    	int credit;        //学分
    	int daily_score;  //平时成绩
    	int exp_score;   //实验成绩
    	int exam_score; //卷面成绩
    	int i = 0;
    	for( i = n; i< n+Max_read && flag_input; i++)
    	{
    		cout << "开始输入学生数据:\n";
    		cout << "学号,"<< " 课程编号, " << " 课程名称: \n";		
    		cin >> id;
    		cin >> lesson_number;
    		cin >> lesson_name;
    		cout << "学分, " << " 平时成绩, " << " 实验成绩," << " 卷面成绩:\n";
    		cin >> credit>> daily_score >>exp_score>> exam_score;
    		stu_score[i] = StudentScore(id, lesson_number, lesson_name, credit, daily_score,
    			exp_score, exam_score);
    		cout << "录入该学生数据成功";
    	}
    	cout << "\n";
    	n += i;
    	return i;
    }
    
    
    /*
    函数:find()
    功能:查询(总),通过用户选择查询类型调用find_baseinfo()或find_score(),显示对应的信息。
    参数:Student*(学生数组地址), StudentScore*(分数数组地址),int m(学生信息条数), int n(分数条数)
    返回值:0
    */
    int find(Student * stu,StudentScore* stu_score,int m, int n)
    {
    	cout << "输入查询类型:1.学生基本情况查询; 2.成绩查询:";
    	char find_kind;
    	cin >> find_kind;
    	switch (find_kind)
    	{
    	case '1':
    		//学生基本情况查询
    		find_baseinfo( stu, m);
    		break;
    	case '2':
    		//成绩查询
    		find_score(stu, stu_score,m, n);
    		break;
    	default:
    		cout<<"无效选择\n";
    		break;
    	}
    	cout << "\n";
    	return 0;
    };
    
    /*
    函数:find_baseinfo()
    功能:查询_学生基本信息,被find()调用,显示对应的学生信息
    参数:Student*, m
    */
    void find_baseinfo(Student* stu, int m)
    {
    	cout << "输入查询方式:1.按学号或姓名查询   2.按宿舍查询: ";
    	int choice;
    	cin >> choice;
    	switch (choice)
    	{
    	case 1:
    		find_baseinfo_by_id_name(stu, m);
    		break;
    	case 2:
    		find_baseinfo_by_dor(stu, m);
    		break;
    	}
    }
    
    
    /*
    函数:find_baseinfo_by_id_name()
    功能:查询_学生基本信息_通过_id或name,被find_baseinfo()调用
    参数:Student*, m
    */
    void find_baseinfo_by_id_name(Student* stu, int m)
    {
    	cout << "选择:1.使用学号查询  2.使用姓名: ";
    	int choice_2;
    	cin >> choice_2;
    	switch (choice_2)
    	{
    	case 1:
    	  {	
    		//按学号查询,打印结果
    		cout << "输入学号: ";
    		int id;
    		cin >> id;
    		bool flag_find_id = false;
    		for (int i = 0; i < m; i++)
    		{
    			if (id == stu[i].ID)
    			{
    				flag_find_id = true;
    				cout << "学号 姓名    性别  宿舍号码  电话号码\n";
    				cout << stu[i];
    				break;
    			}
    			if (i == m - 1 && !flag_find_id )
    				cout << "  此ID记录不存在\n";
    		}
    	  }
    	  break;
    	case 2:
    	  {
    		//使用姓名查询,打印结果
    		cout << "输入姓名: ";
    		string name;
    		cin >> name;
    		bool flag_find_name = false;
    		for (int i = 0; i < m; i++)
    		{
    			if (name == stu[i].name)
    			{
    				flag_find_name = true;
    				cout << "学号  姓名  性别   宿舍号码  电话号码\n";
    				cout << stu[i];
    				break;
    			}
    			if (i == m - 1 && !flag_find_name)
    				cout << "  此姓名记录不存在\n";
    		}
    		break;
    	  }
    	}
    }
    
    /*
    函数:find_baseinfo_by_dor()
    功能:查询_学生基本信息_通过_宿舍,被find_baseinfo()调用
    参数:Stuent*, m
    */
    void find_baseinfo_by_dor(Student* stu, int m)
    {
    	//按宿舍查询,打印结果
    	cout << "输入宿舍号: ";
    	int dor_number;
    	cin >> dor_number;
    	cout << "学号  姓名  性别   宿舍号码  电话号码\n";
    	bool flag_find_dor = false;
    	for (int i = 0; i < m; i++)
    	{
    		if (dor_number == stu[i].dor_number)
    		{
    			flag_find_dor = true;
    			cout << stu[i];
    			cout << "\n";
    		}
    		if (i == m - 1 && !flag_find_dor )
    			cout << "    宿舍记录不存在\n";
    	}
    }
    
    /*
    函数:find_score()
    功能:查询_分数,被find()调用,显示对应的分数信息
    参数:Student*, StudentScore*,m(学生信息条数),n(分数信息条数)
    */
    void find_score(Student* stu, StudentScore* stu_score, int m, int n)
    {
    	cout << "输入该学生的学号:";
    	int id;
    	cin >> id;
    	bool flag_find_id = false;
    	for (int i = 0; i < m; i++)
    	{
    		if (id == stu[i].ID)
    		{
    			flag_find_id = true;
    			cout << "\t\t\t\t学号: "<<std::setiosflags(std::ios::left) 
    				<<std::setw(10)<< stu[i].ID << "姓名: "
    				<<std::setw(10)<< stu[i].name;
    			break;
    		}
    		if (i == m - 1 && !flag_find_id)
    		{
    			cout << "\n\t\t此ID学生信息记录不存在\n";
    		}
    	}
    	bool flag_find_score = false;
    	int lesson_n = 0;
    	double all_credit = 0;
    	for (int i = 0; i < n; i++)
    	{
    		if (id == stu_score[i].ID)
    		{
    			flag_find_score = true;
    			cout << "\n" << stu_score[i];
    			lesson_n++;
    			all_credit += stu_score[i].actual_score;
    		}
    		if (i == n - 1 && !flag_find_score)
    		{
    			cout << "\n\t\t此ID成绩记录不存在\n";
    		}
    	}
    	cout << "\n\t\t共修: " << lesson_n << "科,实得总学分为: " << all_credit;
    }
    
    /*
    函数:delete_by_ID()
    功能:删除和ID相关的信息
    返回值:0
    */
    int delete_by_ID(Student * stu, StudentScore * stu_score, int &m, int &n)
    {
    	cout << "删除该学号的所有相关信息:\n输入学号:";
    	int ID;
    	cin >> ID;
    	//删除ID相关的学生基本信息
    	for (int i = 0; i < m; i++)
    	{
    		if (stu[i].ID == ID)
    		{
    			int k = i;
    			if (k == m - 1)
    			{
    				stu[i] = Student(); //使其为空
    				m--;
    			}
    			else
    			{
    				for (int j = k+1; j < m; j++)
    				{
    					stu[j-1] = stu[j];
    				}
    				m--;
    			}
    		}
    	}
    	//删除ID相关的成绩信息
    	for (int i = n-1; i >= 0; i--)
    	{
    		if (stu_score[i].ID == ID)
    		{
    			int k = i;
    			if (k == n - 1)
    			{
    				stu_score[i] = StudentScore(); //使其为空
    				n--;
    			}
    			else
    			{
    				for (int j = k + 1; j < n; j++)
    				{
    					stu_score[j - 1] = stu_score[j];
    				}
    				n--;
    			}
    		}
    	}
    	cout << "该学生所有相关信息删除成功\n";
    	return 0;
    };
    
    /*
    函数:sort_score()
    功能:按分数排序,(降序)。
    参数:StudentScore*, n(成绩条数)
    返回值:n(成绩条数)
    */
    int sort_score(StudentScore * stu_score, int n)
    {
    	int choice;
    	cout << "选择:1.按综合成绩排序   2.按实得学分排序";
    	cin >> choice;
    	switch (choice)
    	{
    	 case 1:
    	 { 
    	 StudentScore temp;
    	 for (int i = 0; i < n - 1; i++)
    	 {
    		 for (int j = 0; j < n - i - 1; j++)
    		 {
    			 if (stu_score[j].total_score < stu_score[j + 1].total_score)
    			 {
    				 temp = stu_score[j];
    				 stu_score[j] = stu_score[j+1];
    				 stu_score[j + 1] = temp;
    			 }
    		 }
    	 }
    	 break;
    	 }
    	 case 2:
    	 {
    		 StudentScore temp;
    		 for (int i = 0; i < n - 1; i++)
    		 {
    			 for (int j = 0; j < n - i - 1; j++)
    			 {
    				 if (stu_score[j].actual_score < stu_score[j + 1].actual_score)
    				 {
    					 temp = stu_score[j];
    					 stu_score[j] = stu_score[j + 1];
    					 stu_score[j + 1] = temp;
    				 }
    			 }
    		 }
    		 break;
    	 }
    	}
    
    	for (int i = 0; i < n; i++)
    	{
    	cout<<"学号: "<<std::setiosflags(std::ios::left)<<std::setw(4)
    		<<stu_score[i].ID<<stu_score[i] << "\n";
    	}
    	return n;
    };
    
    /*
    ·File name:	menu.cpp
    ·Description:	所有和菜单相关的操作。
    */
    #include<iostream>
    #include"student.h"
    #include"func.h"
    
    using std::cout;
    using std::cin;
    
    /*
    函数:show_menu()
    功能:显示主菜单
    */
    void show_menu()
    {
    	cout<<"############################\n";
    	cout<<"   学生信息管理系统\n"
    		<<"      选择功能\n"
    		<<"1.数据的录入和计算\n"
    		<<"2.查询功能\n"
    		<<"3.删除功能\n"
    		<<"4.排序功能\n"
    		<<"q.退出程序。\n";
    
    }
    
    /*
    函数:choose_func
    功能:读入选择,执行功能
    返回:程序状态(运行ture,结束false)
    */
    
    bool choose_func(char choice, bool & active,StudentScore * stu_score,Student * stu,
    	int & m, int& n )
    {
    	switch(choice)
    	{
    	case '1' : 
    		n = read_data_and_calcu(stu_score,n);
    		break;
    	case '2':
    	    find( stu, stu_score,m, n);
    		break;
    	case '3':
    		delete_by_ID(stu, stu_score, m, n);
    		break;
    	case '4':
    		sort_score(stu_score, n);
    		break;
    	case 'q':
    		cout<<"quit~\n";
    		active = false;
    		break;
    	default:
    		cout << "无效输入\n";
    	}
     return active;
    }
    
    /*
    ·File name:	student.cpp
    ·Description:	学生类和成绩类的相关函数。
    */
    #include"student.h"
    
    /*
    计算综合成绩,返回综合成绩。 
    传入参数: exp_score,  exam_score, daily_score
    返回值:   total_score
    */
    double calcu_total_score(int exp_score, int exam_score, int daily_score);
    /* 
    计算实得学分,返回实得学分
    传入参数: total_score, credit
    返回值:   actual_score
    */
    double calcu_actual_score(double total_score, int credit);
    
    //分数的默认构造函数,初始化ID = 0,分数为负数,表示无效成绩;
    StudentScore::StudentScore() : ID(0),lesson_number("None"),lesson_name("None"),credit(-1),
    	daily_score(-1),exp_score(-1),exam_score(-1)
    {
    
    }
    //分数的构造函数2,传入参数进行初始化,自动调用calcu_total_score,calcu_actual_score计算 综合成绩和实得学分
    StudentScore::StudentScore(int m_ID, string m_lesson_number, string m_lesson_name, int m_credit,
      int m_daily_score, int m_exp_score, int m_exam_score) :  ID(m_ID),lesson_number(m_lesson_number),
      lesson_name(m_lesson_name),credit(m_credit),daily_score(m_daily_score),
    	exp_score(m_exp_score),exam_score(m_exam_score)
    {
    	total_score = calcu_total_score( m_exp_score, m_exam_score, m_daily_score);
    	actual_score = calcu_actual_score( total_score,  m_credit);
    }
    //分数的析构函数,暂无工作要做
    StudentScore::~StudentScore()
    {
    
    }
    //分数的友元函数<<,用于显示
    std::ostream& operator<<(std::ostream& os, const StudentScore& stu_score)
    {
    	os  << std::setiosflags(std::ios::left)
    		<<"课程编号: " <<std::setw(8)<< stu_score.lesson_number 
    		<< "课程名称: "<<std::setw(12) << stu_score.lesson_name 
    		<< "综合成绩: "<<std::setw(8) << stu_score.total_score 
    		<< "实得学分: " << stu_score.actual_score;
    
    	return os;
    }
    
    
    //学生的默认构造函数,初始化0
    Student::Student(): ID(0), name("None"), sex("None"), dor_number(0), phone(0)
    {
    
    }
    
    //学生的析构函数,暂无工作要做
    Student::~Student()
    {
    
    }
    
    //学生的友元函数<< 用于打印输出.
    std::ostream & operator<<(std::ostream & os, const Student& stu)
    {
    	os <<std::setiosflags(std::ios::left)
    		<<std::setw(5)<< stu.ID 
    		<<std::setw(8)<< stu.name 
    		<< stu.sex << "      " << stu.dor_number << "     "
    		<< stu.phone;
    	return os;
    }
    
    
    
    
    // 计算实得学分
    double calcu_actual_score(double total_score, int credit)
    {
    	double actual_score;
    	int flag_total =total_score/10;
    	switch (flag_total)
    	{
    	case 10: case 9: actual_score = credit;
    		break;
    	case 8: actual_score = credit * 0.8;
    		break;
    	case 7: actual_score = credit * 0.75;
    		break;
    	case 6: actual_score = credit * 0.6;
    		break;
    	default: actual_score = 0;
    		break;
    	}
    	return actual_score ;
    }
    //计算综合成绩
    double calcu_total_score(int exp_score, int exam_score, int daily_score)
    {
    	double total_score;
    	if(exp_score == -1)
    		total_score = daily_score * 0.3 + exam_score * 0.7;
    	else
    		total_score = daily_score * 0.15 + exp_score * 0.15 + exam_score * 0.7;
    	return total_score;
    }
    
    /*
    # File name:    main.cpp
    # Author:       一只大鸽子
    # Date:         2018/9/10
    # Description:  学生信息管理系统的主函数
    */
    
    #include<iostream>
    #include"menu.h"
    #include"student.h"
    #include"file.h"
    
    //主函数main,程序入口
    int main()
    {		
    	char choice = 0;	//choice,让用户输入选择
    	bool active = true;	//active,用来判断程序运行状态,true代表运行中,false代表结束	
    	int	m = 0; //学生基本信息 数量
    	int n = 0; //成绩信息 数量
    	read_record(m, n);//得到学生基本信息、成绩信息条数
    	Student * stu =  new Student[m+10];	//学生数组stu,存储学生信息
    	StudentScore * stu_score = new StudentScore[n+400];//分数数组stu_score,存储成绩信息
    
    	read_to_stu(stu, m); //从student.txt读入数据到数组中
    	read_to_stu_score(stu_score, n); //从score.dat读入数据到数组中
    
    	//显示主菜单
    	show_menu();
    	//进入循环,用户选择菜单上的功能。直到active为false,程序即将结束时,退出循环
    	while(active)
    	{ 
    		std::cin>>choice;
    		choose_func(choice,active,stu_score,stu,m,n);
    		if(active)
    		  show_menu();
    	}
    	/*
    	程序即将结束,将学生信息写入student.txt;将分数信息写入score.dat;
    	写入信息数量到record.txt中;
    	*/
    	save_stu(stu, m);
    	save_score(stu_score, n);
    	write_record(m, n);
    	//归还使用的内存
    	delete[] stu;
    	delete[] stu_score;
    	system("pause"); //暂停
    	return 0;
    }

    小结:

    这是我的第一个C++实践程序,写了大概有两三天。

    中间遇到一些问题,比如文件读写,格式输出。。。。。。第一次运行时还有一些奇奇怪怪的问题。比如stackoverflow...

    最后还是通过看书和百度解决了。

    总结一点经验:

    1.变量和函数的命名很重要,一定要清晰易懂,一看到这个名字就知道它是干什么的,不要随便起 a,b,c或者fun1,fun2之类的名字。

    2.注释很重要

    3.代码格式很重要(对齐缩进)

    4.不要自己钻到一个问题里就不出来了,很浪费时间。 比如排序功能可能你一下子想不出来,就可以上网搜搜(c++排序),

    借鉴一下。如果找不到,也不要一直纠结,先空着,过一会可能就想到了。

    5.代码重构。当你代码写着写着感觉某个函数太长了,或者感觉一些功能可以提取出来,就可以把某个功能做成函数。

    6..注意身体,注意休息,喝水。最好能定时休息。

    展开全文
  • java实现简单学生信息管理系统

    万次阅读 多人点赞 2018-11-10 14:53:08
    ** ## java实现简单学生信息管理系统(6步) ** 1、首先定义一个学生信息主体类 package project; public class Stu_class { String name; String stu_id; String sex; String phone_num; int age; public ...
  • 学生信息管理系统之用户登录:用户登录流程

    千次阅读 热门讨论 2018-05-03 19:18:16
    第一步:获取本计算机用户名 Private Sub Form_Load()重点内容 Dim sBuffer As String '缓冲器 Dim lSize As Long sBuffer = Space$( 255 ) '缓冲器容量255Byte,...第七步:登录成功
  • PHP+MySQL 实现数据库增删改查,学生信息管理系统

    万次阅读 多人点赞 2019-10-28 16:46:20
    通过学生信息管理系统,熟悉PHP+MySQL增删改查,本文介绍了学生信息管理系统。 此项目运行环境:Apache2.4.41 PHP7.3.8 查看演示 http://39.105.0.128/PHP/php_mysql_student/ 项目地址 ...
  • 学生信息管理系统——c实现 为了给我个人博客(www.gaoyuelong.cn)增加一点价值,我打算写一些小的管理程序或项目放在上面。同时也复习一下之前学的。花了大概三个晚上的时间把之前c语言课设的内容写了一遍。 第一...
  • Java实现学生信息管理系统

    万次阅读 多人点赞 2021-03-28 11:12:43
    学生信息管理系统,要求完成以下基本任务: 1.有良好程序风格(文档注释,函数注释,语句注释)。 2.将功能补充完全(基于文件处理,完成刷新和保存功能)。 3.将学生信息改为更好的数据组织,而非离散形式...
  • 版本 面向对象版本的学生信息管理系统 第一版: import os # 面向对象的方式分析学生管理管理系统 # 1. 添加学生的功能 # 2. 修改学生的功能 # 3. 删除学生的功能 # 4. 查询学生的功能 # 定义类 # 1. 学生管理...
  • 学生信息管理系统

    千次阅读 2017-06-17 23:17:33
    班级信息管理系统 能添加删除学生,查询学生信息 管理指定学生课程,包括添加课程,删除课程 查询某个学生某门课的成绩 统计任意学生的总学分 其他功能: 按学号/总成绩/总学分降序排列学生 student类:   ...
  • 学生信息管理系统C++

    万次阅读 多人点赞 2020-03-08 17:25:52
    int main()//入口函数 { //test(); CList list1;//创建链表对象 Read4File(list1);//将文件数据读取到链表中 int choice = -1;//接收用户选择 while(true) { system("cls");//清屏 MainMenu(); cin>>...
  • 学生信息管理系统(结构化程序)(C语言)

    千次阅读 多人点赞 2019-04-12 21:52:04
    学生信息管理系统(结构化程序)(C语言) 一、实验目的 明确结构化程序设计的基本结构。 2.通过对问题的分析,设计合理的结构化程序解决问题 二、实验内容 对学生信息管理系统,要求完成以下基本任务: 1.改写...
  • 南阳理工学院教务管理系统最新登录入口http://222.139.215.217/jwweb/欢迎登录南阳理工学院教务管理系统系统提供如下功能:1、学生:学籍信息(修改密码)、网上选课、查询个人课表、查看成绩、查看考试安排、网上评教...
  • 简单学生信息管理系统实现 使用win form与sql Server 可进行简单参考
  • 学生信息管理系统的案例 使用函数方法 学生信息使用表格进行保存 显示系统的功能选项- 用户需要根据指定的功能选项完成对应的操作 studentSystem.py代码 from MysqlClient import MysqlClient import pymysql # ...
  • 学生信息管理系统的案例 使用函数方法 1、学生信息使用字典进行保存,每一个字典代表一个学生 2、管理每个学生的信息,可以使用列表进行保存 3、显示系统的功能选项 4、用户需要根据指定的功能选项完成对应的操作 # ...
  • C++ 学生信息管理系统课程设计报告

    千次阅读 2020-06-13 11:22:27
    《面向对象课程设计》报告学生信息管理系统设计一、问题描述二、需求分析和概要设计三、功能模块描述和设计思路四、具体实现过程五、收获与展望 一、问题描述 学生信息管理系统设计 学生信息包括:学号,姓名,年龄...
  • 初探学生信息管理系统

    千次阅读 热门讨论 2013-07-24 20:59:05
    本来学生信息管理系统早就已经开始了,而且为此还延期过好几次,借口当然只能当是借口,没有任何理由。今天听课讲到了代码的规范性瞬间才恍然大悟,或许以前也讲过类似的内容,只是自己并没有太听进去,知道今天。 ...
  • easyui比较流行好用的管理类的前端框架 新建一个登录页面 想要访问成功,犯了一个错误 说页面不存在, 结果一看 是路径我想当然的加上了jsp 应该写纯路径才对 ...
  • 这是一个简单的博客管理系统,它可以实现对学生博客信息的查询和访问,实现每次作业的分数统计功能,希望大家多多支持,提出您宝贵的意见。
  • C# mysql 学生信息管理系统

    千次阅读 2020-04-05 19:41:06
    C# winform mysql实现学生信息管理系统 该程序主要是通过对C#窗体的DataGridView控件的单元格进行修改,实现对mysql数据库的增删查改等操作。 附上C#使用MySql.Data.MySqlClient;命名空间的方法: C# 使用Mysql.Data...
  • 系统实现的功能(1) 学生信息查询功能:管理员通过入口,查询学生学籍信息,课程信息和成绩信息,并进行排序。 (2) 添加功能:管理员可以通过填写表格的形式输入学生学籍信息,课程信息和成绩信息等相关信息,...
  • 界面美观,功能齐全,下载即可使用,用户名和密码是admin主入口是newpanel.java
  • C++实现学生信息管理系统

    万次阅读 多人点赞 2016-01-19 10:55:15
    利用线性链表实现学生成绩管理系统,具体功能:输入、输出、插入、删除、查找、追加、读入、显示、保存、拷贝、排序、索引、分类合计、退出,并能在屏幕上输出操作前后的结果。 1. 写出系统需求分析,并建模。 2. ...
  • C语言链表实现学生信息管理系统

    千次阅读 2020-06-03 08:27:58
    大一做的这个程序,主要是链表的增删查改操作。.../////////////////学生信息管理系统 /////////////////存入、查找、删除、修改、输出学生信息,学生信息包括姓名,性别,年龄,学号,电话; typedef
  • python实现学生信息管理系统

    千次阅读 2020-12-31 15:14:47
    插入学生信息6.保存学生信息到文件7.搜索学生信息并显示8.显示搜索信息9.删除学生信息10.修改学生信息11.对学生信息进行排序12.显示学生人数13.展示所有学生信息三、目的 一、成果展示 示例:在工具框中,包含着本...

空空如也

空空如也

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

学生信息管理系统登录入口