精华内容
下载资源
问答
  • 学生成绩管理系统实战练习之登陆界面

    学生成绩管理系统实战练习之登陆界面


    开发软件:eclips
    使用插件:windowsbuilder
    代码风格:Swing
    源码如下

    
    
    package UI;
    import UI.MySystemUI;
    import java.awt.EventQueue;
    
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.border.LineBorder;
    
    
    import java.awt.Color;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.Font;
    import javax.swing.JPasswordField;
    import javax.swing.JFormattedTextField;
    import java.awt.Button;
    import java.awt.event.ActionListener;
    
    import java.awt.event.ActionEvent;
    
    public class Login extends JFrame {
    
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    	private JPanel LoginPanel;
    	private JPasswordField passwordField;
    	
    	/**
    	 * Launch the application.
    	 */
    	public static void main(String[] args) {
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					Login frame = new Login();
    					frame.setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
    	}
    	
    	/**
    	 * Create the frame.
    	 */
    	public Login() {
    		/**
    		 * 创建并设置登陆界面主面板
    		 */
    		setTitle("学生成绩管理系统登陆界面(1.0)");
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setBounds(100, 100, 485, 343);
    		setResizable(false);//禁止最大化
    		setLocationRelativeTo(null);//居中
    		/**
    		 * 创建主布局Panel
    		 */
    		LoginPanel = new JPanel();
    		LoginPanel.setBorder(new LineBorder(new Color(0, 0, 0)));
    		setContentPane(LoginPanel);
    		LoginPanel.setLayout(null); 
    		/**
    		 * 添加背景图片到JLabel中
    		 */
    		ImageIcon backimg;
    		backimg=new ImageIcon("E:\\JavaECode\\GUIofManagementSystem\\src\\Picture\\Back.jpg");
    		/**
    		 * 创建一个账号标签
    		 */
    		JLabel IDLabel = new JLabel("账  号:");
    		IDLabel.setFont(new Font("新宋体", Font.BOLD, 20));
    		IDLabel.setForeground(Color.LIGHT_GRAY);
    		IDLabel.setBounds(49, 170, 91, 38);
    		IDLabel.setOpaque(false);
    		LoginPanel.add(IDLabel);
    		/**
    		 * 创建一个密码标签
    		 */
    		JLabel PasswordLabel = new JLabel("密  码:");
    		PasswordLabel.setOpaque(false);
    		PasswordLabel.setForeground(Color.LIGHT_GRAY);
    		PasswordLabel.setFont(new Font("新宋体", Font.BOLD, 20));
    		PasswordLabel.setBounds(49, 221, 91, 38);
    		LoginPanel.add(PasswordLabel);
    		/**
    		 * 登陆文本框
    		 */
    		final JFormattedTextField idTextField = new JFormattedTextField();
    		idTextField.setForeground(Color.LIGHT_GRAY);
    		idTextField.setToolTipText("");
    		idTextField.setText("请输入您的账号");
    		idTextField.setBounds(143, 175, 227, 33);
    		//                             添加账号框事件
    		idTextField.addMouseListener(new MouseListener() {
    			
    			public void mouseReleased(MouseEvent e) {
    				// TODO 当用户松开鼠标按钮时发生
    				
    			}
    			
    			public void mousePressed(MouseEvent e) {
    				// TODO 当用户按下鼠标按钮时发生.
    				if(idTextField.getText().equals("请输入您的账号"))
    				idTextField.setText(null);
    				idTextField.setForeground(Color.BLACK);
    				
    			}
    			
    			public void mouseExited(MouseEvent e) {
    				// TODO 当鼠标离开你所监听的组件时发生.
    				
    			}
    			
    			public void mouseEntered(MouseEvent e) {
    				// TODO  当鼠标离开当前组件并进入你所监听的组件时激活事件.
    				
    			}
    			
    			public void mouseClicked(MouseEvent e) {
    				// TODO 鼠标按下后松开
    				
    			}
    		});
    		
    		LoginPanel.add(idTextField);
    		/**
    		 * 密码框
    		 */
    		passwordField = new JPasswordField();
    		passwordField.setBounds(143, 221, 227, 33);
    		LoginPanel.add(passwordField);
    		/**
    		 * 登陆按钮
    		 */
    		Button StdBtn = new Button("\u7BA1\u7406\u5458\u767B\u9646");
    		StdBtn.addActionListener(new ActionListener() {
    			@SuppressWarnings("deprecation")
    			public void actionPerformed(ActionEvent e) {
    				if(idTextField.getText().equals("1")&&passwordField.getText().equals("1")) {
    					/**
    					 * 登陆成功后自动关闭登陆界面进入到信息界面
    					 */
    					System.out.print("登陆成功");
    					dispose();
    					MySystemUI F=new MySystemUI();
    					F.setVisible(true);
    				}
    				else {
    					JOptionPane.showMessageDialog(null,"账户或密码错误,登陆失败!" ,null, JOptionPane.ERROR_MESSAGE);
    				}
    			}
    		});
    		StdBtn.setForeground(Color.DARK_GRAY);
    		StdBtn.setFont(new Font("宋体", Font.BOLD, 17));
    		StdBtn.setBackground(Color.LIGHT_GRAY);
    		StdBtn.setBounds(178, 266, 110, 33);
    		LoginPanel.add(StdBtn);
    		/**
    		 * 背景图片的设置
    		 */
    		JLabel BackgroundLabel = new JLabel(backimg);
    		BackgroundLabel.setBounds(0, 0, 482, 309);
    		LoginPanel.add(BackgroundLabel);
    		
    	}
    }
    

    运行结果:
    在这里插入图片描述在这里插入图片描述

    展开全文
  • 这是一个只可以在黑框框里跑的学生成绩管理系统,只需要C语言编译器就可以运行(几乎适配所有的编译器,且只有一个.c文件和三个作为数据库的txt文件),能够实现录入基础数据、显示奖学金获奖名单、显示成绩排名、...
  • 300来行python代码实现简易版学生成绩管理系统,供大家参考,具体内容如下使用链表来实现class Node(object):def __init__(self, data, pointer):self.data = dataself.next = pointer# 创建单链表class ...

    300来行python代码实现简易版学生成绩管理系统,供大家参考,具体内容如下

    使用链表来实现

    class Node(object):

    def __init__(self, data, pointer):

    self.data = data

    self.next = pointer

    # 创建单链表

    class SingleLinkedList(object):

    def __init__(self):

    self.head = Node(None, None)

    self.point = self.head

    def append(self, data):

    # 末尾追加节点

    new_node = Node(data, None)

    self.point.next = new_node

    self.point = new_node

    def insert(self, data, find):

    # 插入数据(前向插入数据)

    if not self.head.next:

    print('链表为空')

    return None

    new_node = Node(data, None)

    self.point = self.head

    while self.point.next.data != find:

    self.point = self.point.next

    if self.point.next is None:

    print('没有找到该元素')

    return None

    new_node.next = self.point.next

    self.point.next = new_node

    def delete(self, find):

    # 删除节点

    # 空链表

    if not self.head.next:

    print('链表为空')

    return None

    self.point = self.head

    while self.point.next.data != find:

    self.point = self.point.next

    pointer = self.point.next

    self.point.next = self.point.next.next

    del pointer

    def insert_after_head(self, data):

    node = Node(data, None)

    # bug 产生没写 if 返回

    if not self.head.next:

    self.head.next = node

    return None

    node.next = self.head.next

    self.head.next = node

    def reverse(self):

    local_list = SingleLinkedList()

    self.point = self.head

    count = 0

    while self.point.next:

    count += 1

    self.point = self.point.next

    data = self.point.data

    local_list.insert_after_head(data)

    return local_list

    def get_size(self):

    count = 0

    self.point = self.head

    while self.point.next:

    self.point = self.point.next

    count += 1

    return count

    def delete_by_tail(self, num):

    size = self.get_size()

    assert (num <= size)

    assert (num > 0)

    pos = size - num

    count = 0

    self.point = self.head

    while count < size:

    count += 1

    self.point = self.point.next

    if count == pos:

    pointer = self.point.next

    self.point.next = self.point.next.next

    del pointer

    # 求中间节点 只允许遍历一次

    def quick_middle(self):

    slow_point = self.head

    fast_point = self.head

    while fast_point.next.next:

    slow_point = slow_point.next

    fast_point = fast_point.next.next

    if not fast_point.next:

    break

    if fast_point.next:

    slow_point = slow_point.next

    return slow_point.data

    def check_circle(self):

    pass

    def sort(self):

    # get_size()改变了 self.point 的指向

    length = self.get_size()

    i, j = 0, 0

    flag = 1

    while i < length:

    self.point = self.head.next

    while j < length - i - 1:

    if self.point.data > self.point.next.data:

    temp = self.point.data

    self.point.data = self.point.next.data

    self.point.next.data = temp

    self.point = self.point.next

    j += 1

    flag = 0

    if flag:

    break

    i += 1

    j = 0

    def print(self):

    # 打印结点

    self.point = self.head

    while self.point.next:

    self.point = self.point.next

    print('{} ->'.format(self.point.data), end=' ')

    print('')

    class StudentControlSystem(SingleLinkedList):

    # 打印菜单

    def print_menu(self):

    print('*' * 30)

    print('-' * 13 + '菜单' + '-' * 13)

    print('1.增加学生信息')

    print('2.删除学生信息')

    print('3.修改学生信息')

    print('4.查找学生信息')

    print('5.显示所有信息')

    print('6.排序')

    print('0.退出程序')

    print('*' * 30)

    # 用户输入

    def user_input(self, item):

    try:

    item = int(item)

    except:

    pass

    # 增加信息

    if item == 1:

    self.add_info()

    # 删除信息

    elif item == 2:

    find = input('请输入删除的学号:')

    self.del_info(find=find)

    # 修改信息

    elif item == 3:

    self.modify_info()

    # 查找信息

    elif item == 4:

    self.search_info()

    # 显示信息

    elif item == 5:

    self.display_info()

    # 信息排序

    elif item == 6:

    self.rank_info()

    # 退出程序 保存数据

    elif item == 0:

    with open('database.txt', 'w') as f:

    self.point = self.head

    while self.point.next:

    self.point = self.point.next

    f.writelines('{} '.format(self.point.data))

    exit()

    else:

    print('请输入正确的数字')

    # id 保证互异性

    def unique_id(self, std_id):

    self.point = self.head

    while self.point.next:

    self.point = self.point.next

    if self.point.data['id'] == std_id:

    return False

    return True

    # 增加信息

    def add_info(self):

    # id 不能重复

    # 成绩不能超出范围

    name = input('姓名:')

    std_id = input('学生id:')

    while not self.unique_id(std_id=std_id):

    print('id重复')

    std_id = input('学生id:')

    grade = input('学生成绩:')

    if eval(grade) < 0 or eval(grade) > 100:

    print('超出范围')

    grade = input('学生成绩:')

    print(name, std_id, grade)

    print('请确认无误后保存')

    choice = input('y/n')

    items = ['y', 'yes', 'Y', 'Yes']

    if choice in items:

    print(choice)

    data = {'id': std_id, 'name': name, 'grade': grade}

    self.append(data)

    # 删除信息

    def del_info(self, find):

    print('请确认无误后保存')

    choice = input('y/n')

    items = ['y', 'yes', 'Y', 'Yes']

    if choice in items:

    if not self.head.next:

    print('链表为空')

    return None

    self.point = self.head

    while self.point.next.data['id'] != find:

    self.point = self.point.next

    pointer = self.point.next

    self.point.next = self.point.next.next

    del pointer

    # 序列逆序

    def reverse(self):

    local_list = StudentControlSystem()

    self.point = self.head

    count = 0

    while self.point.next:

    count += 1

    self.point = self.point.next

    data = self.point.data

    local_list.insert_after_head(data)

    return local_list

    # 序列排序

    def sort(self, item):

    length = self.get_size()

    i, j = 0, 0

    flag = 1

    while i < length:

    self.point = self.head.next

    while j < length - i - 1:

    if int(self.point.data[item]) > int(self.point.next.data[item]):

    # self.point.data, self.point.next.data =

    # self.point.next.data, self.point.data

    temp = self.point.data

    self.point.data = self.point.next.data

    self.point.next.data = temp

    self.point = self.point.next

    j += 1

    flag = 0

    if flag:

    break

    i += 1

    j = 0

    # 修改信息

    def modify_info(self):

    find = input('输入需要修改的学生的id:')

    if not self.head.next:

    print('链表为空')

    return None

    self.point = self.head

    while str(self.point.next.data['id']) != find:

    self.point = self.point.next

    if self.point.next is None:

    print('没有找到该元素')

    return None

    name = input('姓名:')

    grade = input('学生成绩:')

    self.point.next.data['name'] = name

    self.point.next.data['grade'] = grade

    # 搜索信息

    def search_info(self):

    find = input('输入需要查找的学生的id:')

    if not self.head.next:

    print('链表为空')

    return None

    self.point = self.head

    while str(self.point.next.data['id']) != find:

    self.point = self.point.next

    if self.point.next is None:

    print('没有找到该元素')

    return None

    data = self.point.next.data

    print('ID 姓名 成绩')

    print('{} {} {}'.format(data['id'], data['name'], data['grade']))

    # 信息排序

    def rank_info(self):

    choice = input('1.成绩排序 2.学号排序:')

    order = input('1.升序 2.降序:')

    if choice == '1':

    item = 'grade'

    elif choice == '2':

    item = 'id'

    else:

    return None

    self.sort(item=item)

    if order == '2':

    temp = self.reverse()

    temp.display_info()

    return None

    self.display_info()

    # 显示信息

    def display_info(self):

    self.point = self.head

    print('ID 姓名 成绩')

    while self.point.next:

    self.point = self.point.next

    data = self.point.data

    print('{} {} {}'.format(data['id'], data['name'], data['grade']))

    print('')

    def main():

    SCS = StudentControlSystem()

    try:

    with open('database.txt', 'r') as f:

    for data in f.readlines():

    SCS.append(eval(data))

    except:

    with open('database.txt', 'w') as f:

    pass

    while True:

    SCS.print_menu()

    item = input('请输入你的选择:')

    SCS.user_input(item)

    if __name__ == "__main__":

    main()

    运行后

    2020622160134226.jpg

    然后就可以插入与查询啦

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持python博客。

    展开全文
  • Python题目:学生信息管理系统-高级版(图形界面+MySQL数据库) 使用图形界面显示,选用list、tuple、dictionary或map等数据结构,操作数据库存储X个学生的三门课的成绩(机器学习、Python程序设计、研究生英语)...

    Python题目:学生信息管理系统-高级版(图形界面+MySQL数据库)

           使用图形界面显示,选用list、tuple、dictionary或map等数据结构,操作数据库存储X个学生的三门课的成绩(机器学习、Python程序设计、研究生英语),并实现以下功能:

    1.添加学生信息
    2.修改学生信息
    3.删除学生
    4.添加学生的成绩
    5.修改学生成绩
    6.按姓名或者学号查找学生,显示学生信息及三门课的成绩,以及排名
    7.学生成绩统计(每门课的平均分、最高分、最低分)

    代码里的注释很清楚了,这里不做讲解了,有任何问题可以评论提问。 

    注意:

    • 数据表不存在则创建表,但自动创建的表是空白的,管理员用户名和密码需要自己数据库中添加一个(也可以运行文章最后的sql语句),为什么会出现这个问题,因为这是个课堂作业,当时没有设计好,现在懒得再改代码了╮(╯﹏╰)╭.......
    • 数据库在代码中(代码里有两处需要修改数据库 用户名、密码 的地方第66行第490行),配置为:
    # 打开数据库连接 连接测试
    db = pymysql.connect("localhost", "root", "root", "student")

           分别表示  主机名:localhost,用户名:root,密码:root,数据库名:student 


    下面是界面的截图

     

     管理员操作界面,拥有增删改查功能,甚至拥有排序功能φ(>ω<*) ,快点击标签栏试试

     

     代码:

    #!/usr/bin/python3
    
    import pymysql
    from tkinter import ttk
    import tkinter as tk
    import tkinter.font as tkFont
    from tkinter import * # 图形界面库
    import tkinter.messagebox as messagebox # 弹窗
    
    
    class StartPage:
    	def __init__(self, parent_window):
    		parent_window.destroy() # 销毁子界面
    
    		self.window = tk.Tk()  # 初始框的声明
    		self.window.title('学生信息管理系统')
    		self.window.geometry('300x470') # 这里的乘是小x
    
    		label = Label(self.window, text="学生信息管理系统", font=("Verdana", 20))
    		label.pack(pady=100)  # pady=100 界面的长度
    
    		Button(self.window, text="管理员登陆", font=tkFont.Font(size=16), command=lambda: AdminPage(self.window), width=30, height=2,
    			   fg='white', bg='gray', activebackground='black', activeforeground='white').pack()
    		Button(self.window, text="学生登陆", font=tkFont.Font(size=16), command=lambda: StudentPage(self.window), width=30,
    			   height=2,fg='white', bg='gray', activebackground='black', activeforeground='white').pack()
    		Button(self.window, text="关于", font=tkFont.Font(size=16), command=lambda: AboutPage(self.window), width=30, height=2,
    			   fg='white', bg='gray', activebackground='black', activeforeground='white').pack()
    		Button(self.window, text='退出系统', height=2, font=tkFont.Font(size=16), width=30, command=self.window.destroy,
    			   fg='white', bg='gray', activebackground='black', activeforeground='white').pack()
    
    		self.window.mainloop() # 主消息循环
    
    
    #管理员登陆页面
    class AdminPage:
    	def __init__(self, parent_window):
    		parent_window.destroy() # 销毁主界面
    
    		self.window = tk.Tk()  # 初始框的声明
    		self.window.title('管理员登陆页面')
    		self.window.geometry('300x450')  # 这里的乘是小x
    
    		label = tk.Label(self.window, text='管理员登陆', bg='green', font=('Verdana', 20), width=30, height=2)
    		label.pack()
    
    		Label(self.window, text='管理员账号:', font=tkFont.Font(size=14)).pack(pady=25)
    		self.admin_username = tk.Entry(self.window, width=30, font=tkFont.Font(size=14), bg='Ivory')
    		self.admin_username.pack()
    
    		Label(self.window, text='管理员密码:', font=tkFont.Font(size=14)).pack(pady=25)
    		self.admin_pass = tk.Entry(self.window, width=30, font=tkFont.Font(size=14), bg='Ivory', show='*')
    		self.admin_pass.pack()
    
    		Button(self.window, text="登陆", width=8, font=tkFont.Font(size=12), command=self.login).pack(pady=40)
    		Button(self.window, text="返回首页", width=8, font=tkFont.Font(size=12), command=self.back).pack()
    
    		self.window.protocol("WM_DELETE_WINDOW", self.back)  # 捕捉右上角关闭点击
    		self.window.mainloop()  # 进入消息循环
    
    	def login(self):
    		print(str(self.admin_username.get()))
    		print(str(self.admin_pass.get()))
    		admin_pass = None
    
    		# 数据库操作 查询管理员表
    		db = pymysql.connect("localhost", "root", "root", "student")  # 打开数据库连接
    		cursor = db.cursor()  # 使用cursor()方法获取操作游标
    		sql = "SELECT * FROM admin_login_k WHERE admin_id = '%s'" % (self.admin_username.get())  # SQL 查询语句
    		try:
    		# 执行SQL语句
    			cursor.execute(sql)
    			# 获取所有记录列表
    			results = cursor.fetchall()
    			for row in results:
    				admin_id = row[0]
    				admin_pass = row[1]
    				# 打印结果
    				print("admin_id=%s,admin_pass=%s" % (admin_id, admin_pass))
    		except:
    			print("Error: unable to fecth data")
    			messagebox.showinfo('警告!', '用户名或密码不正确!')
    		db.close()  # 关闭数据库连接
    
    		print("正在登陆管理员管理界面")
    		print("self",self.admin_pass)
    		print("local",admin_pass)
    
    		if self.admin_pass.get() == admin_pass:
    			AdminManage(self.window)  # 进入管理员操作界面
    		else:
    			messagebox.showinfo('警告!', '用户名或密码不正确!')
    
    	def back(self):
    		StartPage(self.window) # 显示主窗口 销毁本窗口
    
    
    #学生登陆页面
    class StudentPage:
    	def __init__(self, parent_window):
    		parent_window.destroy() # 销毁主界面
    
    		self.window = tk.Tk()  # 初始框的声明
    		self.window.title('学生登陆')
    		self.window.geometry('300x450')  # 这里的乘是小x
    
    		label = tk.Label(self.window, text='学生登陆', bg='green', font=('Verdana', 20), width=30, height=2)
    		label.pack()
    
    		Label(self.window, text='学生账号:', font=tkFont.Font(size=14)).pack(pady=25)
    		self.student_id = tk.Entry(self.window, width=30, font=tkFont.Font(size=14), bg='Ivory')
    		self.student_id.pack()
    
    		Label(self.window, text='学生密码:', font=tkFont.Font(size=14)).pack(pady=25)
    		self.student_pass = tk.Entry(self.window, width=30, font=tkFont.Font(size=14), bg='Ivory', show='*')
    		self.student_pass.pack()
    
    		Button(self.window, text="登陆", width=8, font=tkFont.Font(size=12), command=self.login).pack(pady=40)
    		Button(self.window, text="返回首页", width=8, font=tkFont.Font(size=12), command=self.back).pack()
    
    		self.window.protocol("WM_DELETE_WINDOW", self.back)  # 捕捉右上角关闭点击
    		self.window.mainloop()  # 进入消息循环
    
    	def login(self):
    		print(str(self.student_id.get()))
    		print(str(self.student_pass.get()))
    		stu_pass = None
    
    		# 数据库操作 查询管理员表
    		db = pymysql.connect("localhost", "root", "root", "student")  # 打开数据库连接
    		cursor = db.cursor()  # 使用cursor()方法获取操作游标
    		sql = "SELECT * FROM stu_login_k WHERE stu_id = '%s'" % (self.student_id.get())  # SQL 查询语句
    		try:
    			# 执行SQL语句
    			cursor.execute(sql)
    			# 获取所有记录列表
    			results = cursor.fetchall()
    			for row in results:
    				stu_id = row[0]
    				stu_pass = row[1]
    				# 打印结果
    				print("stu_id=%s,stu_pass=%s" % (stu_id, stu_pass))
    		except:
    			print("Error: unable to fecth data")
    			messagebox.showinfo('警告!', '用户名或密码不正确!')
    		db.close()  # 关闭数据库连接
    
    		print("正在登陆学生信息查看界面")
    		print("self", self.student_pass.get())
    		print("local", stu_pass)
    
    		if self.student_pass.get() == stu_pass:
    			StudentView(self.window, self.student_id.get()) # 进入学生信息查看界面
    		else:
    			messagebox.showinfo('警告!', '用户名或密码不正确!')
    
    	def back(self):
    		StartPage(self.window)  # 显示主窗口 销毁本窗口
    
    
    
    # 管理员操作界面
    class AdminManage:
    	def __init__(self, parent_window):
    		parent_window.destroy() # 销毁主界面
    
    		self.window = Tk()  # 初始框的声明
    		self.window.title('管理员操作界面')
    
    		self.frame_left_top = tk.Frame(width=300, height=200)
    		self.frame_right_top = tk.Frame(width=200, height=200)
    		self.frame_center = tk.Frame(width=500, height=400)
    		self.frame_bottom = tk.Frame(width=650, height=50)
    
    		# 定义下方中心列表区域
    		self.columns = ("学号", "姓名", "性别", "年龄")
    		self.tree = ttk.Treeview(self.frame_center, show="headings", height=18, columns=self.columns)
    		self.vbar = ttk.Scrollbar(self.frame_center, orient=VERTICAL, command=self.tree.yview)
    		# 定义树形结构与滚动条
    		self.tree.configure(yscrollcommand=self.vbar.set)
    
    		# 表格的标题
    		self.tree.column("学号", width=150, anchor='center')  # 表示列,不显示
    		self.tree.column("姓名", width=150, anchor='center')
    		self.tree.column("性别", width=100, anchor='center')
    		self.tree.column("年龄", width=100, anchor='center')
    
    		# 调用方法获取表格内容插入
    		self.tree.grid(row=0, column=0, sticky=NSEW)
    		self.vbar.grid(row=0, column=1, sticky=NS)
    
    		self.id = []
    		self.name = []
    		self.gender = []
    		self.age = []
    		# 打开数据库连接
    		db = pymysql.connect("localhost", "root", "root", "student")
    		cursor = db.cursor()  # 使用cursor()方法获取操作游标
    		sql = "SELECT * FROM student_k"  # SQL 查询语句
    		try:
    			# 执行SQL语句
    			cursor.execute(sql)
    			# 获取所有记录列表
    			results = cursor.fetchall()
    			for row in results:
    				self.id.append(row[0])
    				self.name.append(row[1])
    				self.gender.append(row[2])
    				self.age.append(row[3])
    				# print(self.id)
    				# print(self.name)
    				# print(self.gender)
    				# print(self.age)
    		except:
    			print("Error: unable to fetch data")
    			messagebox.showinfo('警告!', '数据库连接失败!')
    		db.close()# 关闭数据库连接
    
    
    		print("test***********************")
    		for i in range(min(len(self.id), len(self.name), len(self.gender), len(self.age))):  # 写入数据
    			self.tree.insert('', i, values=(self.id[i], self.name[i], self.gender[i], self.age[i]))
    
    		for col in self.columns:  # 绑定函数,使表头可排序
    			self.tree.heading(col, text=col,
    							  command=lambda _col=col: self.tree_sort_column(self.tree, _col, False))
    
    		# 定义顶部区域
    		# 定义左上方区域
    		self.top_title = Label(self.frame_left_top, text="学生信息:", font=('Verdana', 20))
    		self.top_title.grid(row=0, column=0, columnspan=2, sticky=NSEW, padx=50, pady=10)
    
    		self.left_top_frame = tk.Frame(self.frame_left_top)
    		self.var_id = StringVar()  # 声明学号
    		self.var_name = StringVar()  # 声明姓名
    		self.var_gender = StringVar()  # 声明性别
    		self.var_age = StringVar()  # 声明年龄
    		# 学号
    		self.right_top_id_label = Label(self.frame_left_top, text="学号:", font=('Verdana', 15))
    		self.right_top_id_entry = Entry(self.frame_left_top, textvariable=self.var_id, font=('Verdana', 15))
    		self.right_top_id_label.grid(row=1, column=0)  # 位置设置
    		self.right_top_id_entry.grid(row=1, column=1)
    		# 姓名
    		self.right_top_name_label = Label(self.frame_left_top, text="姓名:", font=('Verdana', 15))
    		self.right_top_name_entry = Entry(self.frame_left_top, textvariable=self.var_name, font=('Verdana', 15))
    		self.right_top_name_label.grid(row=2, column=0)  # 位置设置
    		self.right_top_name_entry.grid(row=2, column=1)
    		# 性别
    		self.right_top_gender_label = Label(self.frame_left_top, text="性别:", font=('Verdana', 15))
    		self.right_top_gender_entry = Entry(self.frame_left_top, textvariable=self.var_gender,
    											font=('Verdana', 15))
    		self.right_top_gender_label.grid(row=3, column=0)  # 位置设置
    		self.right_top_gender_entry.grid(row=3, column=1)
    		# 年龄
    		self.right_top_gender_label = Label(self.frame_left_top, text="年龄:", font=('Verdana', 15))
    		self.right_top_gender_entry = Entry(self.frame_left_top, textvariable=self.var_age,
    											font=('Verdana', 15))
    		self.right_top_gender_label.grid(row=4, column=0)  # 位置设置
    		self.right_top_gender_entry.grid(row=4, column=1)
    
    		# 定义右上方区域
    		self.right_top_title = Label(self.frame_right_top, text="操作:", font=('Verdana', 20))
    
    		self.tree.bind('<Button-1>', self.click)  # 左键获取位置
    		self.right_top_button1 = ttk.Button(self.frame_right_top, text='新建学生信息', width=20, command=self.new_row)
    		self.right_top_button2 = ttk.Button(self.frame_right_top, text='更新选中学生信息', width=20,
    											command=self.updata_row)
    		self.right_top_button3 = ttk.Button(self.frame_right_top, text='删除选中学生信息', width=20,
    											command=self.del_row)
    
    		# 位置设置
    		self.right_top_title.grid(row=1, column=0, pady=10)
    		self.right_top_button1.grid(row=2, column=0, padx=20, pady=10)
    		self.right_top_button2.grid(row=3, column=0, padx=20, pady=10)
    		self.right_top_button3.grid(row=4, column=0, padx=20, pady=10)
    
    		# 整体区域定位
    		self.frame_left_top.grid(row=0, column=0, padx=2, pady=5)
    		self.frame_right_top.grid(row=0, column=1, padx=30, pady=30)
    		self.frame_center.grid(row=1, column=0, columnspan=2, padx=4, pady=5)
    		self.frame_bottom.grid(row=2, column=0, columnspan=2)
    
    		self.frame_left_top.grid_propagate(0)
    		self.frame_right_top.grid_propagate(0)
    		self.frame_center.grid_propagate(0)
    		self.frame_bottom.grid_propagate(0)
    
    		self.frame_left_top.tkraise() # 开始显示主菜单
    		self.frame_right_top.tkraise() # 开始显示主菜单
    		self.frame_center.tkraise() # 开始显示主菜单
    		self.frame_bottom.tkraise() # 开始显示主菜单
    
    		self.window.protocol("WM_DELETE_WINDOW", self.back)  # 捕捉右上角关闭点击
    		self.window.mainloop()  # 进入消息循环
    
    	def back(self):
    		StartPage(self.window) # 显示主窗口 销毁本窗口
    
    	def click(self, event):
    		self.col = self.tree.identify_column(event.x)  # 列
    		self.row = self.tree.identify_row(event.y)  # 行
    
    		print(self.col)
    		print(self.row)
    		self.row_info = self.tree.item(self.row, "values")
    		self.var_id.set(self.row_info[0])
    		self.var_name.set(self.row_info[1])
    		self.var_gender.set(self.row_info[2])
    		self.var_age.set(self.row_info[3])
    		self.right_top_id_entry = Entry(self.frame_left_top, state='disabled', textvariable=self.var_id,
    										font=('Verdana', 15))
    
    		print('')
    
    	def tree_sort_column(self, tv, col, reverse):  # Treeview、列名、排列方式
    		l = [(tv.set(k, col), k) for k in tv.get_children('')]
    		l.sort(reverse=reverse)  # 排序方式
    		# rearrange items in sorted positions
    		for index, (val, k) in enumerate(l):  # 根据排序后索引移动
    			tv.move(k, '', index)
    		tv.heading(col, command=lambda: self.tree_sort_column(tv, col, not reverse))  # 重写标题,使之成为再点倒序的标题
    
    	def new_row(self):
    		print('123')
    		print(self.var_id.get())
    		print(self.id)
    		if str(self.var_id.get()) in self.id:
    			messagebox.showinfo('警告!', '该学生已存在!')
    		else:
    			if self.var_id.get() != '' and self.var_name.get() != '' and self.var_gender.get() != '' and self.var_age.get() != '':
    				# 打开数据库连接
    				db = pymysql.connect("localhost", "root", "root", "student")
    				cursor = db.cursor()  # 使用cursor()方法获取操作游标
    				sql = "INSERT INTO student_k(id, name, gender, age) \
    				       VALUES ('%s', '%s', '%s', '%s')" % \
    					  (self.var_id.get(), self.var_name.get(), self.var_gender.get(), self.var_age.get())  # SQL 插入语句
    				try:
    					cursor.execute(sql)  # 执行sql语句
    					db.commit()  # 提交到数据库执行
    				except:
    					db.rollback()  # 发生错误时回滚
    					messagebox.showinfo('警告!', '数据库连接失败!')
    				db.close()  # 关闭数据库连接
    
    				self.id.append(self.var_id.get())
    				self.name.append(self.var_name.get())
    				self.gender.append(self.var_gender.get())
    				self.age.append(self.var_age.get())
    				self.tree.insert('', len(self.id) - 1, values=(
    				self.id[len(self.id) - 1], self.name[len(self.id) - 1], self.gender[len(self.id) - 1],
    				self.age[len(self.id) - 1]))
    				self.tree.update()
    				messagebox.showinfo('提示!', '插入成功!')
    			else:
    				messagebox.showinfo('警告!', '请填写学生数据')
    
    	def updata_row(self):
    		res = messagebox.askyesnocancel('警告!', '是否更新所填数据?')
    		if res == True:
    			if self.var_id.get() == self.row_info[0]:  # 如果所填学号 与 所选学号一致
    				# 打开数据库连接
    				db = pymysql.connect("localhost", "root", "root", "student")
    				cursor = db.cursor()  # 使用cursor()方法获取操作游标
    				sql = "UPDATE student_k SET name = '%s', gender = '%s', age = '%s' \
    				 WHERE id = '%s'" % (self.var_name.get(), self.var_gender.get(), self.var_age.get(), self.var_id.get())  # SQL 插入语句
    				try:
    					cursor.execute(sql)  # 执行sql语句
    					db.commit()  # 提交到数据库执行
    					messagebox.showinfo('提示!', '更新成功!')
    				except:
    					db.rollback()  # 发生错误时回滚
    					messagebox.showinfo('警告!', '更新失败,数据库连接失败!')
    				db.close()  # 关闭数据库连接
    
    				id_index = self.id.index(self.row_info[0])
    				self.name[id_index] = self.var_name.get()
    				self.gender[id_index] = self.var_gender.get()
    				self.age[id_index] = self.var_age.get()
    
    				self.tree.item(self.tree.selection()[0], values=(
    					self.var_id.get(), self.var_name.get(), self.var_gender.get(),
    					self.var_age.get()))  # 修改对于行信息
    			else:
    				messagebox.showinfo('警告!', '不能修改学生学号!')
    
    	def del_row(self):
    		res = messagebox.askyesnocancel('警告!', '是否删除所选数据?')
    		if res == True:
    			print(self.row_info[0])  # 鼠标选中的学号
    			print(self.tree.selection()[0])  # 行号
    			print(self.tree.get_children())  # 所有行
    			# 打开数据库连接
    			db = pymysql.connect("localhost", "root", "root", "student")
    			cursor = db.cursor()  # 使用cursor()方法获取操作游标
    			sql = "DELETE FROM student_k WHERE id = '%s'" % (self.row_info[0]) # SQL 插入语句
    			try:
    				cursor.execute(sql)  # 执行sql语句
    				db.commit()  # 提交到数据库执行
    				messagebox.showinfo('提示!', '删除成功!')
    			except:
    				db.rollback()  # 发生错误时回滚
    				messagebox.showinfo('警告!', '删除失败,数据库连接失败!')
    			db.close()  # 关闭数据库连接
    
    			id_index = self.id.index(self.row_info[0])
    			print(id_index)
    			del self.id[id_index]
    			del self.name[id_index]
    			del self.gender[id_index]
    			del self.age[id_index]
    			print(self.id)
    			self.tree.delete(self.tree.selection()[0])  # 删除所选行
    			print(self.tree.get_children())
    
    
    # 学生查看信息界面
    class StudentView:
    	def __init__(self, parent_window, student_id):
    		parent_window.destroy() # 销毁主界面
    
    		self.window = tk.Tk()  # 初始框的声明
    		self.window.title('关于')
    		self.window.geometry('300x450')  # 这里的乘是小x
    
    		label = tk.Label(self.window, text='学生信息查看', bg='green', font=('Verdana', 20), width=30, height=2)
    		label.pack(pady=20)
    
    		self.id = '学号:' + ''
    		self.name = '姓名:' + ''
    		self.gender = '性别:' + ''
    		self.age = '年龄:' + ''
    		# 打开数据库连接
    		db = pymysql.connect("localhost", "root", "root", "student")
    		cursor = db.cursor()# 使用cursor()方法获取操作游标
    		sql = "SELECT * FROM student_k WHERE id = '%s'" % (student_id) # SQL 查询语句
    		try:
    			# 执行SQL语句
    			cursor.execute(sql)
    			# 获取所有记录列表
    			results = cursor.fetchall()
    			for row in results:
    				self.id = '学号:' + row[0]
    				self.name = '姓名:' + row[1]
    				self.gender = '性别:' + row[2]
    				self.age = '年龄:' + row[3]
    		except:
    			print("Error: unable to fetch data")
    		db.close()		# 关闭数据库连接
    
    		Label(self.window, text=self.id, font=('Verdana', 18)).pack(pady=5)
    		Label(self.window, text=self.name, font=('Verdana', 18)).pack(pady=5)
    		Label(self.window, text=self.gender, font=('Verdana', 18)).pack(pady=5)
    		Label(self.window, text=self.age, font=('Verdana', 18)).pack(pady=5)
    
    		Button(self.window, text="返回首页", width=8, font=tkFont.Font(size=16), command=self.back).pack(pady=25)
    
    		self.window.protocol("WM_DELETE_WINDOW", self.back)  # 捕捉右上角关闭点击
    		self.window.mainloop()  # 进入消息循环
    
    	def back(self):
    		StartPage(self.window)  # 显示主窗口 销毁本窗口
    
    
    # About页面
    class AboutPage:
    	def __init__(self, parent_window):
    		parent_window.destroy() # 销毁主界面
    
    		self.window = tk.Tk()  # 初始框的声明
    		self.window.title('关于')
    		self.window.geometry('300x450')  # 这里的乘是小x
    
    		label = tk.Label(self.window, text='学生信息管理系统', bg='green', font=('Verdana', 20), width=30, height=2)
    		label.pack()
    
    		Label(self.window, text='作者:清晨的光明', font=('Verdana', 18)).pack(pady=30)
    		Label(self.window, text='blog.csdn.net/kdongyi', font=('Verdana', 18)).pack(pady=5)
    
    		Button(self.window, text="返回首页", width=8, font=tkFont.Font(size=12), command=self.back).pack(pady=100)
    
    		self.window.protocol("WM_DELETE_WINDOW", self.back)  # 捕捉右上角关闭点击
    		self.window.mainloop()  # 进入消息循环
    
    	def back(self):
    		StartPage(self.window)  # 显示主窗口 销毁本窗口
    
    
    if __name__ == '__main__':
    	try:
    		# 打开数据库连接 连接测试
    		db = pymysql.connect("localhost", "root", "root", "student")
    		# 使用cursor()方法获取操作游标
    		cursor = db.cursor()
    		# 如果数据表不存在则创建表 若存在则跳过
    		# 设置主键唯一
    		sql = """CREATE TABLE IF NOT EXISTS student_k(
    				id char(20) NOT NULL,
    				name char(20) default NULL,
    				gender char(5) default NULL,  
    				age char(5) default NULL,
    				PRIMARY KEY (id)
    				
    				) ENGINE = InnoDB 
    				DEFAULT	CHARSET = utf8
    				"""
    		cursor.execute(sql)
    		# 如果数据表不存在则创建表 若存在则跳过
    		sql = """CREATE TABLE IF NOT EXISTS admin_login_k(
    						admin_id char(20) NOT NULL,
    						admin_pass char(20) default NULL,
    						PRIMARY KEY (admin_id)
    						) ENGINE = InnoDB 
    						DEFAULT	CHARSET = utf8
    						"""
    		cursor.execute(sql)
    		# 如果数据表不存在则创建表 若存在则跳过
    		sql = """CREATE TABLE IF NOT EXISTS stu_login_k(
    						stu_id char(20) NOT NULL,
    						stu_pass char(20) default NULL,
    						PRIMARY KEY (stu_id)
    						) ENGINE = InnoDB 
    						DEFAULT	CHARSET = utf8
    						"""
    		cursor.execute(sql)
    
    		# 关闭数据库连接
    		db.close()
    
    		# 实例化Application
    		window = tk.Tk()
    		StartPage(window)
    	except:
    		messagebox.showinfo('错误!', '连接数据库失败!')
    
    

     下面是我从我电脑数据库转储的SQL文件:

    /*
    Navicat MySQL Data Transfer
    
    Source Server         : mysql
    Source Server Version : 50532
    Source Host           : localhost:3306
    Source Database       : student
    
    Target Server Type    : MYSQL
    Target Server Version : 50532
    File Encoding         : 65001
    
    Date: 2019-11-28 15:09:36
    */
    
    SET FOREIGN_KEY_CHECKS=0;
    
    -- ----------------------------
    -- Table structure for `admin_login_k`
    -- ----------------------------
    DROP TABLE IF EXISTS `admin_login_k`;
    CREATE TABLE `admin_login_k` (
      `admin_id` char(20) NOT NULL,
      `admin_pass` char(20) DEFAULT NULL,
      PRIMARY KEY (`admin_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of admin_login_k
    -- ----------------------------
    INSERT INTO `admin_login_k` VALUES ('admin', 'admin');
    
    -- ----------------------------
    -- Table structure for `student_k`
    -- ----------------------------
    DROP TABLE IF EXISTS `student_k`;
    CREATE TABLE `student_k` (
      `id` char(20) NOT NULL,
      `name` char(20) DEFAULT NULL,
      `gender` char(5) DEFAULT NULL,
      `age` char(5) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of student_k
    -- ----------------------------
    INSERT INTO `student_k` VALUES ('182085211003', 'a', '女', '22');
    INSERT INTO `student_k` VALUES ('182085211004', 'b', '女', '18');
    INSERT INTO `student_k` VALUES ('182085211005', 'abc', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211006', 'abc', '女', '24');
    INSERT INTO `student_k` VALUES ('182085211008', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211009', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211010', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211011', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('1820852110111', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211012', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211013', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211014', 'Tom2', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211015', 'Tom1', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211016', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211017', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211018', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211019', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211020', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211021', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('1820852110211', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211022', 'Tom1', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211023', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211024', 'Tom', '男', '23');
    INSERT INTO `student_k` VALUES ('182085211034', 'Tom', '男', '23');
    
    -- ----------------------------
    -- Table structure for `stu_login_k`
    -- ----------------------------
    DROP TABLE IF EXISTS `stu_login_k`;
    CREATE TABLE `stu_login_k` (
      `stu_id` char(20) NOT NULL,
      `stu_pass` char(20) DEFAULT NULL,
      PRIMARY KEY (`stu_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of stu_login_k
    -- ----------------------------
    INSERT INTO `stu_login_k` VALUES ('182085211000', '123456');
    
    -- ----------------------------
    -- Table structure for `t_course`
    -- ----------------------------
    DROP TABLE IF EXISTS `t_course`;
    CREATE TABLE `t_course` (
      `SNO` char(255) NOT NULL,
      `COURSE` char(255) DEFAULT NULL,
      `CREDIT` char(255) DEFAULT NULL,
      `GRADE` char(255) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of t_course
    -- ----------------------------
    INSERT INTO `t_course` VALUES ('08300205', '程序设计', '4', '88');
    INSERT INTO `t_course` VALUES ('08300205', '数据库', '2.5', '90');
    INSERT INTO `t_course` VALUES ('08300205', '力学', '5', '92');
    INSERT INTO `t_course` VALUES ('08080929', '数据库', '2.5', '85');
    INSERT INTO `t_course` VALUES ('09350124', '数据库', '2.5', '92');
    INSERT INTO `t_course` VALUES ('09620233', '数据库', '2.5', '80');
    INSERT INTO `t_course` VALUES ('09300218', '数据库', '2.5', '78');
    INSERT INTO `t_course` VALUES ('09010122', '数据库', '2.5', '87');
    INSERT INTO `t_course` VALUES ('08080929', '程序设计', '4', '86');
    INSERT INTO `t_course` VALUES ('09010122', '程序设计', '4', '80');
    INSERT INTO `t_course` VALUES ('08300516', '程序设计', '4', '76');
    
    -- ----------------------------
    -- Table structure for `t_st`
    -- ----------------------------
    DROP TABLE IF EXISTS `t_st`;
    CREATE TABLE `t_st` (
      `SNO` char(11) NOT NULL,
      `SNAME` char(255) DEFAULT NULL,
      `SSEX` char(255) DEFAULT NULL,
      `AGE` char(255) DEFAULT NULL,
      `DEPT` char(255) DEFAULT NULL,
      PRIMARY KEY (`SNO`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of t_st
    -- ----------------------------
    INSERT INTO `t_st` VALUES ('08080929', '刘超世', '男', '19', '计算机应用技术');
    INSERT INTO `t_st` VALUES ('08300205', '李媛媛', '女', '19', '软件工程');
    INSERT INTO `t_st` VALUES ('09300218', '王海超', '男', '19', '软件工程');
    INSERT INTO `t_st` VALUES ('09350124', '王彤', '女', '19', '通信原理');
    INSERT INTO `t_st` VALUES ('09620233', '陈晓丽', '女', '21', '通信工程');
    

    觉得有用,点个赞再走吧^_^

    展开全文
  • 简单java学生成绩管理系统,无UI界面,连接SQL数据库 import java.sql.*; import java.util.Scanner; public class StudentManagement { //取得数据库的连接 String driverName=&amp;quot;...

    简单java学生成绩管理系统,无UI界面,连接SQL数据库

    学生成绩管理,设计学生成绩管理数据库应用程序,对课程表和学生成绩表进行数据插入、修改、删除、查询和成绩统计等操作,并从学生信息表中获得相关数据。
    StudentManagement.java

    import java.sql.*;
    import java.util.Scanner;
    public class StudentManagement {
    	//取得数据库的连接
        String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";//加载JDBC驱动" 
        String dbURL="jdbc:sqlserver://localhost:1433; DatabaseName=StudentManagement"; //JDBC协议 
        String userName = "test";   //用户名 (确保该用户和数据库有映射关系,即有权限访问)    
        String userPwd = "123456";   //密码     
        Connection dbConn=null;  
        PreparedStatement stmt=null;//Statement 提供执行基本SQL语句操作的功能
        Scanner sc = new Scanner(System.in);
    	public void AddScore() {
    		String stuno;
    		String couno;
    		String score;
    		try {      
    	        Class.forName(driverName);      
    	        dbConn = DriverManager.getConnection(dbURL, userName, userPwd); //连接服务器和数据库    
    	        System.out.println("Connection Successful!");   //如果连接成功 控制台输出Connection Successful!      
    	        }
    	    catch (Exception e) {      
    	            e.printStackTrace();     
    	            } 
            try {
    			System.out.print("请输入学生的学号: ");
    			stuno = sc.next();
    			System.out.print("请输入课程号:");
    			couno = sc.next();
    			System.out.print("请输入学生的成绩:");
    			score = sc.next();
    			String addsc = "INSERT INTO [SC]([Sno],[Cno],[Grade]) VALUES(?,?,?);";
    			stmt = dbConn.prepareStatement(addsc);
    			stmt.setString(1,stuno);
    			stmt.setString(2,couno);
    			stmt.setString(3,score);
    			stmt.executeUpdate();
    			System.out.println("添加成功!");
    		}
    		catch(SQLException e) {
    			System.out.println("添加失败!");
    			e.printStackTrace();
    		}
    	}
    	public void AddCourse() {
    		String couname;
    		String couno;
    		String cpno;
    		String credit;
    		try {      
    	        Class.forName(driverName);      
    	        dbConn = DriverManager.getConnection(dbURL, userName, userPwd); //连接服务器和数据库    
    	        System.out.println("Connection Successful!");   //如果连接成功 控制台输出Connection Successful!      
    	        }
    	    catch (Exception e) {      
    	            e.printStackTrace();     
    	            } 
            try {
    			System.out.print("请输入课程名: ");
    			couname = sc.next();
    			System.out.print("请输入课程号:");
    			couno = sc.next();
    			System.out.print("请输入该课程的基础课(无基础课填0000):");
    			cpno = sc.next();
    			System.out.print("请输入该课程的学分:");
    			credit = sc.next();
    			String addcou = "INSERT INTO [Course]([Cno],[Cname],[Cpno],[Ccredit]) VALUES(?,?,?,?)";
    			stmt = dbConn.prepareStatement(addcou);
    			stmt.setString(1,couno);
    			stmt.setString(2,couname);
    			stmt.setString(3,cpno);
    			stmt.setString(4,credit);
    			stmt.executeUpdate();
    			System.out.println("添加成功!");
    		}
    		catch(SQLException e) {
    			System.out.println("添加失败!");
    			e.printStackTrace();
    		}
    	}
    	public void DeleteCourse() {
    		String couno;
    		try {      
    	        Class.forName(driverName);      
    	        dbConn = DriverManager.getConnection(dbURL, userName, userPwd); //连接服务器和数据库    
    	        System.out.println("Connection Successful!");   //如果连接成功 控制台输出Connection Successful!      
    	        }
    	    catch (Exception e) {      
    	            e.printStackTrace();     
    	            } 
            try {
    			System.out.print("请输入课程号:");
    			couno = sc.next();
    			String delecou = "DELETE Course where Cno=?";
    			stmt = dbConn.prepareStatement(delecou);
    			stmt.setString(1,couno);
    			stmt.executeUpdate();
    			System.out.println("删除成功!");
    		}
    		catch(SQLException e) {
    			System.out.println("删除失败!");
    			e.printStackTrace();
    		}
    	}
    	public void DeleteScore() {
    		String couno;
    		String stuno;
    		try {      
    	        Class.forName(driverName);      
    	        dbConn = DriverManager.getConnection(dbURL, userName, userPwd); //连接服务器和数据库    
    	        System.out.println("Connection Successful!");   //如果连接成功 控制台输出Connection Successful!      
    	        }
    	    catch (Exception e) {      
    	            e.printStackTrace();     
    	            } 
            try {
            	System.out.print("请输入学号:");
    			stuno = sc.next();
    			System.out.print("请输入课程号:");
    			couno = sc.next();
    			String delesc = "DELETE SC where Grade in(SELECT Grade FROM SC where Sno=? and Cno=?)";
    			stmt = dbConn.prepareStatement(delesc);
    			stmt.setString(1,stuno);
    			stmt.setString(2,couno);
    			stmt.executeUpdate();
    			System.out.println("删除成功!");
    		}
    		catch(SQLException e) {
    			System.out.println("删除失败!");
    			e.printStackTrace();
    		}
    	}
    	public void UpdateScore() {
    		String couno;
    		String stuno;
    		String score;
    		try {      
    	        Class.forName(driverName);      
    	        dbConn = DriverManager.getConnection(dbURL, userName, userPwd); //连接服务器和数据库    
    	        System.out.println("Connection Successful!");   //如果连接成功 控制台输出Connection Successful!      
    	        }
    	    catch (Exception e) {      
    	            e.printStackTrace();     
    	            } 
            try {
            	System.out.print("请输入学号:");
    			stuno = sc.next();
    			System.out.print("请输入课程号:");
    			couno = sc.next();
    			System.out.print("请输入要改成的分数:");
    			score = sc.next();
    			String updatesc = "UPDATE SC SET Grade=? where Sno=? and Cno=?";
    			stmt = dbConn.prepareStatement(updatesc);
    			stmt.setString(1,score);
    			stmt.setString(2,stuno);
    			stmt.setString(3,couno);
    			stmt.executeUpdate();
    			System.out.println("修改成功!");
    		}
    		catch(SQLException e) {
    			System.out.println("修改失败!");
    			e.printStackTrace();
    		}
    	}
    	public void UpdateCourse() {
    		String couno;
    		String couname;
    		String precou;
    		String credit;
    		try {      
    	        Class.forName(driverName);      
    	        dbConn = DriverManager.getConnection(dbURL, userName, userPwd); //连接服务器和数据库    
    	        System.out.println("Connection Successful!");   //如果连接成功 控制台输出Connection Successful!      
    	        }
    	    catch (Exception e) {      
    	            e.printStackTrace();     
    	            } 
            try {
    			System.out.print("请输入课程号:");
    			couno = sc.next();
    			System.out.print("请输入要改成的课程名:");
    			couname = sc.next();
    			System.out.print("请输入要改成的基础课的课程号(无基础课填0000):");
    			precou = sc.next();
    			System.out.print("请输入要改成的学分:");
    			credit = sc.next();
    			String updatecou = "UPDATE Course SET Cname=?  where Cno=?;UPDATE Course SET Cpno=?  where Cno=?;UPDATE Course SET Ccredit=?  where Cno=?";
    			stmt = dbConn.prepareStatement(updatecou);
    			stmt.setString(1,couname);
    			stmt.setString(3,precou);
    			stmt.setString(5,credit);
    			stmt.setString(2,couno);
    			stmt.setString(4,couno);
    			stmt.setString(6,couno);
    			stmt.executeUpdate();
    			System.out.println("修改成功!");
    		}
    		catch(SQLException e) {
    			System.out.println("修改失败!");
    			e.printStackTrace();
    		}
    	}
    	public void SearchScore() {
    		String couno;
    		String stuno;
    		try {      
    	        Class.forName(driverName);      
    	        dbConn = DriverManager.getConnection(dbURL, userName, userPwd); //连接服务器和数据库    
    	        System.out.println("Connection Successful!");   //如果连接成功 控制台输出Connection Successful!      
    	        }
    	    catch (Exception e) {      
    	            e.printStackTrace();     
    	            } 
            try {
            	System.out.print("请输入学号:");
    			stuno = sc.next();
    			System.out.print("请输入课程号:");
    			couno = sc.next();
    			ResultSet rs=null;
    			String seasc = "SELECT * FROM SC where Sno=? and Cno=?";
    			stmt = dbConn.prepareStatement(seasc);
    			stmt.setString(1,stuno);
    			stmt.setString(2,couno);
    			rs=stmt.executeQuery();
    			System.out.println("查询结果如下:");
            	System.out.println("课程号"+"\t"+"学号"+"\t"+"分数");
            	System.out.println("------------------------");
            	String counum=null;
            	String stunum=null;
            	String score=null;
            	//没到数据库最后一条记录就继续
            	while(rs.next()) {
            		counum=rs.getString("Cno");
            		stunum=rs.getString("Sno");
            		score=rs.getString("Grade");
            		System.out.println(counum+"\t"+stunum+"\t"+score);
            	}
            	rs.close();
    		}
    		catch(SQLException e) {
    			System.out.println("查询失败!");
    			e.printStackTrace();
    		}
    	}
    	public void SearchCourse() {
    		String couno;
    		try {      
    	        Class.forName(driverName);      
    	        dbConn = DriverManager.getConnection(dbURL, userName, userPwd); //连接服务器和数据库    
    	        System.out.println("Connection Successful!");   //如果连接成功 控制台输出Connection Successful!      
    	        }
    	    catch (Exception e) {      
    	            e.printStackTrace();        
    	            } 
            try {
    			System.out.print("请输入课程号:");
    			couno = sc.next();
    			ResultSet rs=null;
    			String seacou = "SELECT * FROM Course where Cno=?";
    			stmt = dbConn.prepareStatement(seacou);
    			stmt.setString(1,couno);
    			rs=stmt.executeQuery();
    			System.out.println("查询结果如下:");
            	System.out.println("课程号"+"\t"+"课程名"+"\t"+"\t"+"基础课课程号"+"\t"+"学分");
            	System.out.println("----------------------------------------");
            	String counum=null;
            	String couname=null;
            	String precou=null;
            	String credit=null;
            	//没到数据库最后一条记录就继续
            	while(rs.next()) {
            		counum=rs.getString("Cno");
            		couname=rs.getString("Cname");
            		precou=rs.getString("Cpno");
            		credit=rs.getString("Ccredit");
            		System.out.println(counum+"\t"+couname+precou+"\t"+credit);
            	}
            	rs.close();
    		}
    		catch(SQLException e) {
    			System.out.println("查询失败!");
    			e.printStackTrace();
    		}
    	}
    	public void Statisticse() {
    		String couno;
    		try {      
    	        Class.forName(driverName);      
    	        dbConn = DriverManager.getConnection(dbURL, userName, userPwd); //连接服务器和数据库    
    	        System.out.println("Connection Successful!");   //如果连接成功 控制台输出Connection Successful!      
    	        }
    	    catch (Exception e) {      
    	            e.printStackTrace();     
    	            } 
            try {
    			System.out.print("请输入课程号:");
    			couno = sc.next();
    			ResultSet rs=null;
    			String sta = "SELECT * FROM SC where Cno=?";
    			stmt = dbConn.prepareStatement(sta);
    			stmt.setString(1,couno);
    			rs=stmt.executeQuery();
    			System.out.println("查询结果如下:");
            	System.out.println("课程号"+"\t"+"学号"+"\t"+"分数");
            	System.out.println("------------------------");
            	String counum=null;
            	String stunum=null;
            	int score=0;
            	int sum = 0;
            	int max = 0;
            	int min = 101;
            	double count = 0;
            	//没到数据库最后一条记录就继续
            	while(rs.next()) {
            		counum=rs.getString("Cno");
            		stunum=rs.getString("Sno");
            		score=rs.getInt("Grade");
            		sum=sum+score;
            		max=Math.max(score, max);
            		min=Math.min(score, min);
            		count++;
            		System.out.println(counum+"\t"+stunum+"\t"+score);
            	}
            	System.out.println("本门课程平均分为:"+sum/count);
            	System.out.println("最高分为:"+max);
            	System.out.println("最低分为:"+min);
            	rs.close();
    		}
    		catch(SQLException e) {
    			System.out.println("查询失败!");
    			e.printStackTrace();
    		}
    	}
    }
    

    Test.java

    import java.util.Scanner;
    public class Test {
    	public static void main(String[] args) {
    		Scanner input = new Scanner(System.in);
    		String choice = "1";
    		StudentManagement sm = new StudentManagement();
    		System.out.println("**********学生成绩管理系统********");
    		while(choice.equals("0") == false) {
    			System.out.println("1.添加某位学生成绩记录");
    			System.out.println("2.修改某位学生成绩记录");
    			System.out.println("3.删除某位学生成绩记录");
    			System.out.println("4.查看某位学生成绩记录");
    			System.out.println("5.查看课程记录");
    			System.out.println("6.添加课程记录");
    			System.out.println("7.删除课程记录");
    			System.out.println("8.修改课程记录");
    			System.out.println("9.统计某门课平均分,最高分和最低分");
    			System.out.println("0.退出程序");
    			System.out.print("Enter your choice: ");
    			choice = input.next();
    			switch(choice) {
    			    case "0": 
    			    	System.out.println("谢谢您的使用,欢迎下次光临!\n" + "**********按任意键结束程序**********"); 
    			    	input.close();
    			        break;
    			    
    			     case "1":
    			    	int j = 1;
    			    	do {
    			    	sm.AddScore();
    			    	System.out.println("\n是否继续添加?" + "\n" + "0.否" + "\n" + "1.是");
    			    	j = input.nextInt();
    			    	}while(j == 1);
    			    	System.out.println("请问您还需要什么服务?\n");
    			    	break;
    				
    			    case "2":
    			    	int i = 1;
    			    	do {
    			    	sm.UpdateScore();
    			    	System.out.println("\n是否继续修改?" + "\n" + "0.否" + "\n" + "1.是");
    			    	i = input.nextInt();
    			    	}while(i == 1);
    			    	System.out.println("请问您还需要什么服务?\n");
    			    	break;
    			    	
    			    case "3": 
    			    	sm.DeleteScore();
    			    	System.out.println("请问您还需要什么服务?\n");
    			    	break;
    				
    			    case "4":
    			    	sm.SearchScore();
    			    	System.out.println("请问您还需要什么服务?\n");
    			    	break;
    				
    			    case "5":
    			    	sm.SearchCourse();
    			    	System.out.println("请问您还需要什么服务?\n");
    			    	break;
    				
    			    case "6":
    			    	int k = 1;
    			    	do {
    			    	sm.AddCourse();
    			    	System.out.println("\n是否继续添加?" + "\n" + "0.否" + "\n" + "1.是");
    			    	k = input.nextInt();
    			    	}while(k == 1);
    			    	System.out.println("请问您还需要什么服务?\n");
    			    	break;
    				
    			    case "7":
    			    	sm.DeleteCourse();
    			    	System.out.println("请问您还需要什么服务?\n");
    			    	break;
    				case "8":
    			    	int l = 1;
    			    	do {
    			    	sm.UpdateCourse();
    			    	System.out.println("\n是否继续修改?" + "\n" + "0.否" + "\n" + "1.是");
    			    	l = input.nextInt();
    			    	}while(l == 1);
    			    	System.out.println("请问您还需要什么服务?\n");
    			    	break;
    			    case "9":
    			    	sm.Statisticse();
    			    	System.out.println("请问您还需要什么服务?\n");
    			    	break;	
    				default: 
    					System.out.println("Invalid input! Please enter again."); 
    				    break;
    			}
    			
    		}
    	}
    }
    

    数据库

    数据库代码借用前辈的代码后稍加修改
    数据库建表代码

    create table Student
    (
        Sno char(10)primary key,
        Sname char(10) unique,
        Ssex char(2) check (Ssex in ('男','女')), 
        Sage smallint check(Sage between 18 and 20),
        Sdept char(20),
    );
    create table Course(
    	Cno char(4) primary key, 
    	Cname char(20) not null,  
    	Cpno char(4),
    	Ccredit smallint,
    	foreign key (Cpno) references Course(Cno), 
    );
    create table SC(
    	Sno char(10),  
    	Cno char(4),
    	Grade smallint,
    	primary key(Sno,Cno), 
    	foreign key(Sno) references Student(Sno) on delete cascade,
    	foreign key(Cno) references Course(Cno) on delete cascade
    );
    insert into dbo.Student(Sno, Sname, Ssex, Sage, Sdept)
    values('60001','zhangsan','女',18,'art'),
    	  ('60002','lisi','女',18,'it'),
    	  ('60003','wangwu','女',18,'art'),
    	  ('60004','chenliu','女',18,'pe'),
    	  ('60005','tisi','女',18,'pe');
    	  
    INSERT INTO [Course]([Cno],[Cname],[Cpno],[Ccredit])
         VALUES	('0000','0000',null,0),		
         		('1000','c#','1002',100),
    			('1001','asp.net','1000',100),
    			('1002','c',null,100),
    			('1003','HTML',null,100),
    			('1004','python',null,100),
    			('1005','django','1004',100)
         
    GO
     
     
    INSERT INTO [SC]([Sno],[Cno],[Grade])
         VALUES('60001','1000','48'),
    			('60002','1003','98'),
    			('60001','1001','56'),
    			('60001','1004','83'),
    			('60001','1003','35'),
    			('60002','1002','71'),
    			('60003','1005','49'),
    			('60005','1002','37')
    GO
     
    	Cno char(4) primary key, 
    	Cname char(20) not null,  
    	Cpno char(4),
    	Ccredit smallint,
    	foreign key (Cpno) references Course(Cno), 
    );
    create table SC(
    	Sno char(10),  
    	Cno char(4),
    	Grade smallint,
    	primary key(Sno,Cno), 
    	foreign key(Sno) references Student(Sno),
    	foreign key(Cno) references Course(Cno)
    );
    insert into dbo.Student(Sno, Sname, Ssex, Sage, Sdept)
    values('60001','zhangsan','女',18,'art'),
    	  ('60002','lisi','女',18,'it'),
    	  ('60003','wangwu','女',18,'art'),
    	  ('60004','chenliu','女',18,'pe'),
    	  ('60005','tisi','女',18,'pe');
    	  
    INSERT INTO [Course]([Cno],[Cname],[Cpno],[Ccredit])
         VALUES('1000','c#','1002',100),
    			('1001','asp.net','1000',100),
    			('1002','c',null,100),
    			('1003','HTML',null,100),
    			('1004','python',null,100),
    			('1005','django','1004',100)
         
    GO
    
    
    INSERT INTO [SC]([Sno],[Cno],[Grade])
         VALUES('60001','1000','48'),
    			('60002','1003','98'),
    			('60001','1001','56'),
    			('60001','1004','83'),
    			('60001','1003','35'),
    			('60002','1002','71'),
    			('60003','1005','49'),
    			('60005','1002','37')
    GO
     
    
    

    无UI界面的简单学生管理系统就完成了
    仅供新手参考
    成绩表课程表学生表

    运行结果:
    学生成绩管理系统
    1.添加某位学生成绩记录
    2.修改某位学生成绩记录
    3.删除某位学生成绩记录
    4.查看某位学生成绩记录
    5.查看课程记录
    6.添加课程记录
    7.删除课程记录
    8.修改课程记录
    9.统计某门课平均分,最高分和最低分
    0.退出程序
    Enter your choice: 1
    Connection Successful!
    请输入学生的学号: 60003
    请输入课程号:1002
    请输入学生的成绩:99
    添加成功!

    是否继续添加?
    0.否
    1.是
    0
    请问您还需要什么服务?

    1.添加某位学生成绩记录
    2.修改某位学生成绩记录
    3.删除某位学生成绩记录
    4.查看某位学生成绩记录
    5.查看课程记录
    6.添加课程记录
    7.删除课程记录
    8.修改课程记录
    9.统计某门课平均分,最高分和最低分
    0.退出程序
    Enter your choice: 2
    Connection Successful!
    请输入学号:60002
    请输入课程号:1003
    请输入要改成的分数:96
    修改成功!

    是否继续修改?
    0.否
    1.是

    展开全文
  • Java 图形界面开发--图文并茂建立学生管理系统

    万次阅读 多人点赞 2016-03-19 19:52:28
    图形用户界面(Graphics User Interface,GUI)是用户与程序交互的窗口,比命令行的界面更加直观并且更好操作。 关注微信公众号(文强的技术小屋),学习更多技术知识,一起遨游知识海洋~ ...
  • 学生成绩管理系统 方案设计说明书 专业 年级班级 系统名称 学生成绩管理系统 成员 XXX 指导教师 ...
  • 学生成绩管理系统

    2018-02-20 20:32:42
    java web学生成绩管理系统 该系统的用户分为教师和学生。教师的功能有:管理某一学生或课程的信息以及成绩,包括增、删、查、报表打印等;学生用户只能查看个人的信息以及成绩。 系统有一个较好的图形用户界面,...
  • 【简答题】[说明] 某高校欲开发一个成绩管理系统,记录并管理所有选修课程的学生的平时成绩和考试成绩,其主要功能描述如下。 (1)每门课程都由3~6个单元构成,每个单元结束后会进行一次测试,其成绩作为这门课程的...
  • JAVA学生成绩管理系统

    2009-04-21 01:24:01
    本系统为JAVA学生成绩管理系统,能够正常运行
  • 针对学院学生成绩的管理情况,以LabWindows CVI和Access软件为开发平台,设计了学生成绩管理系统。该系统具有查询、添加、修改、删除、打印学生成绩,以及生成学生成绩统计的功能。系统经过测试,运行效果良好,...
  • 【Python课程设计】学生成绩管理系统

    万次阅读 多人点赞 2020-06-30 20:14:05
    学生成绩管理系统1、需求分析2、功能设计与分析1、使用数据库对数据进行存取(1)使用PyMySQL模块操作数据库对数据进行存取(2)创建数据库school,创建数据表student_sore、teacher_login(3)使用xlrd模块从Excel...
  • 一个学生信息管理系统,里面有表格,树状,右击菜单,日期校验,上传图片,用JFreeChart画的3D统计饼图等功能,课程设计得了98分
  • Javafx+MySQL 学生成绩管理系统

    千次阅读 2020-09-20 00:06:12
    做项目经常有各种做GUI的管理,像什么图书馆管理系统,学生成绩管理系统。都曾使大部分人头疼不已。而作为新时代好少年,自然不能坐视不管。本着学习的原则,对这个程序进行了开发。欢迎交流学习 下载链接: github:...
  • 学生成绩管理系统主要包括前台用户界面的开发和后台数据库的开发,对于后台数据库要求建立起数据一致性和完整性强、数据安全性好的数据库。而对于前端应用程序的开发则要求应用程序能提供强大的数据操纵功能,界面...
  • 本次毕业设计根据学生在校的基本情况,分析现状各个学校的基本需求情况,进行设计的一款学生成绩管理系统,通过本系统可以方便的管理学校的基本情况,包括院系管理,考试成绩管理等等,基本情况的管理。本次设计包括...
  • 这是一个学生成绩管理系统,其中 “i”表示插入, “l”表示浏览, “q”表示查询, “e”表示退出, “d”表示删除, “m”表示修改, “c”表示统计各分数段人数, “p”表示打印...
  • 学生成绩管理系统 doc

    2011-01-19 15:24:53
    第一章 系统规划 3 1.1 可行性分析(简述) 3 1.1.1 运行可行性 3 ...4.1.3学生信息管理 16 第五章 系统测试 22 5.1. 概述 22 5.2 测试方法 22 5.2.1 界面测试 22 5.2.2 功能测试 23 第六章 结束语 24 参考文献 25
  • 学生成绩信息管理系统 系统设计文档; 体系结构设计报告 一软件系统概述 ;二影响设计的约束因素 ;三设计策略;四系统总体结构 ;教师;实体属性表;五系统的结构与模块功能 1子系统结构;课程信息表;班级信息表;管理员信息...
  • 01-java学生成绩管理系统(单链表+java的GUI)

    千次阅读 多人点赞 2019-07-16 18:11:43
    学生成绩管理系统(单链表+java的GUI) 说明: 1.我所说的保存到数据库并没有保存到数据库。保存数据的生命周期仅仅是运行到关闭之间时间。 2.用的是单链表,所涉及的功能有:增加,删除,修改,查看。 3.无论你之前...
  • 2.2 学生成绩管理系统功能描述 2.2.1 管理员界面 2.2.2 教师界面 2.2.3 学生界面 2.2 学生成绩管理系统功能描述 为把项目任务说明的更加清楚在以上功能结构表述之后我们以下向大家展示EMS的具体操作工程的运行界面 ...
  • 学生成绩管理系统 1. 功能模块与界面 (1)教师,学生登录 (2)学生显示自己的全部信息 (3)教师选择功能:课程管理,成绩录入,成绩查询,成绩修改,成绩删除,学生管理。 (4)课程管理中可以添加,修改,...
  • C语言详细学生成绩管理系统

    千次阅读 多人点赞 2019-03-28 16:15:13
    C语言 学生成绩管理系统 简述:该学生管理系统数据结构采用结构体 1、系统需求分析 1.1系统介绍 本学生管理系统是为教师人员提供管理班级成绩的工具,该系统可以实现的对学生的成绩进行增、删、改、查、信息保存和...
  • 基于wampsever的学生成绩管理系统的开发教程 一.安装wampsever1.下载wampsever,一路next...next...2. 安装完成后双击运行wampsever。3.配置wampsever二.数据库操作1.建立数据库pxscj2.用SQLyog导入数据库pxscj(==...
  • MySQL学生成绩管理系统设计实验报告

    千次阅读 多人点赞 2020-12-01 21:46:15
    主要介绍学生成绩管理系统项目开发的背景、目的、对象以及研究内容。 1.1项目背景 每个学校都需要在期末进行考试成绩的统计分析工作,而这些工作都必须在考试结束后一个星期的时间内完成。大量的成绩数据的统计工作...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,032
精华内容 2,412
关键字:

学生成绩管理系统界面运行图