精华内容
下载资源
问答
  • 主要采集信息指标分类 这篇博文简单记录一下最近做的一个关于数据库监控的相关内容,通常数据库监控是通过jdbc链接读取库表以及视图的一些信息实现对于数据库相关指标信息采集。这次做的数据库是一个国产化产品...

    这篇博文简单记录一下最近做的一个关于数据库监控的相关内容,通常数据库监控是通过jdbc链接读取库表以及视图的一些信息实现对于数据库相关指标信息的采集。
    
    这次做的数据库是一个国产化产品,神通数据库[Shentong7.0][http://www.shentongdata.com/]属于大型通用关系型数据库管理系统。此产品相对比较成熟稳定,安装简单,使用操作遵循通用数据库的习惯。
    
    同时本文也会介绍一下监控其他数据库的相关链接方式信息。
    

    1. 部署环境信息

    • 部署所在主机配置
      飞腾CPU(16核phytium ft1500a)
      银河麒麟OS(Linux)服务器

    • 神通数据库版本
      ShenTong7.0_20160731_02_pack2016_Arm64

    • java -version
      java version “1.7.0_65”

    2. 安装

    下载对应版本,直接运行安装文件,按照需要安装对应的组件,第一次建议全都装了吧,有些工具还是很好用的。需要最高权限进行安装。

    安装后测试是否安装成功,可以直接输入isql,如下图:
    shentong_isql1

    相关指标也可以通过show语句进行获取。

    接下来可以通过神通自带的管理工具进行管理。我个人的电脑是Mac,所以又在另一台windows系统的机器上又安装了一个神通数据库,通过其自带的管理工具连接到安装在Linux系统下的神通数据库进行表及视图的查看,选取有用的指标数据。

    官网下载的压缩包中含有丰富的帮助文档,建议详细研读,最暖心的是国产化产品产品说明书的中文的!中文的!中文的!相比较之前查看外文文档节省很多时间。

    3. 神通数据库及其他数据库监控链接方式

    • 神通数据库
        String url = jdbc:oscar://ip:2003/OSRDB
        try {
            Class.forName(driver).newInstance();
            DriverManager.setLoginTimeout(Integer.parseInt(timeout));
            connection = DriverManager.getConnection(url.toString(), user, pass);
            st = connection.createStatement();
            rs = st.executeQuery(***);
            } catch (Exception e) {
                connection = null;
                throw new PluginSessionException(e);
            }
    • oracle数据库
        String url = jdbc:oracle:thin:@ip:port:db;
    • MySQL
        String url = jdbc:mysql://ip:port/db;
    • SQLServer
        String url = jdbc:sqlserver://ip:port;DatabaseName=db;
    • Sybase
        String url = jdbc:sybase:Tds:ip:port/db;
    • Kingbase
        String url = jdbc:postgresql://ip:port/db;
    • PostgreSql(金仓数据库)
        String url = jdbc:PLUGIN_NAME://ip:port/db;
    • Informix
        String url = jdbc:informix-sqli://ip:port/db:informixserver=informixServerName;
    • DB2
        String url = jdbc:db2://ip:port/db;
    • Dameng
        String url = jdbc:dm://ip:port;

    4. 主要采集的信息指标分类

    数据库监控采集的主要信息指标包括一下几类:

    • 部署所在机器的相关信息监控,通常包括信
      静态标有:主机名称、操作系统、IP地址、物理内存容量等;
      动态指标:系统内存利用率、系统CPU利用率等;

    • 关于被监控数据库的信息指标:
      静态指标:数据库实例名称、实例状体、数据库版本、总内存、端口、数据库大小等;
      动态指标:数据库内存利用率、数据库CPU利用率、缓存、锁数、数据文件大小、事物会滚速率等;
      分类子系:表空间相关信息、数据文件相关信息、日志文件相关信息、用户相关信息、文件系统相关信息、数据库会话相关信息、索引相关信息、锁的相关信息等;

    考量数据库的各种性能进行相关信息的采集,以提高数据库良好运行为宗旨,及时预测并能告警通知用户。准确的选定指标信息很重要。


    注意: 此文仅可作为参考。

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

    万次阅读 多人点赞 2019-06-06 21:40:37
    登录、添加学生信息、修改学生信息、删除学生信息、查询学生信息 三、实现步骤 1、登陆界面功能实现 老规矩,先贴下主要代码: //构造方法 public Login() { InitializeComponent(); this.label3.Parent = ...

    一、运行环境windows,使用vs编译软件
    在这里插入图片描述
    二、主要功能
    登录、添加学生信息、修改学生信息、删除学生信息、查询学生信息
    三、实现步骤
    1、登陆界面功能实现
    老规矩,先贴下主要代码:

    		//构造方法
    		public Login()
            {
                InitializeComponent();
                this.label3.Parent = this;
                this.label1.BackColor = Color.Transparent;
                this.label2.BackColor = Color.Transparent;
                this.label3.BackColor = Color.Transparent;
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            }
            //对登录按钮的事件实现代码
            private void button1_Click(object sender, EventArgs e)
            {
                string ss = ConfigurationManager.ConnectionStrings["Stu"].ToString();
                SqlConnection conn = new SqlConnection(ss);
                try
                {
                     //开启连接           
                     conn.Open();           
                    // MessageBox.Show("数据库连接成功!");           
                }
                catch (Exception)
                {
                     //MessageBox.Show("数据库连接失败!");
                }         
                String uname = txtName.Text.Trim();
                string pword = txtPass.Text.Trim();
                if(uname == ""|| pword == "")
                {
                    MessageBox.Show("请输入用户名或密码!");
                    return;
                }
                else
                {
                    SqlCommand cmd = conn.CreateCommand();
                    SqlDataAdapter adp = new SqlDataAdapter();
                    string sql2 = "select * from account where name='"+ uname + " 'and pass='" + pword + " ' ";
                    cmd.CommandText = sql2;
                    adp.SelectCommand = cmd;
                    DataSet dat = new DataSet();
                    adp.Fill(dat, "account");
                    if(dat.Tables["account"].Rows.Count == 0)
                    {
                        MessageBox.Show("用户名或密码错误!");
                        return;
                    }
                    else
                    {
                        Form1.isLogin = true;
                        Form1.username = this.txtName.Text;
                        this.Close();
                    }
                    cmd.Clone();
                }
                conn.Close();
               
            }
            //实现按ESC键关闭该窗口
            protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
            {
                switch (keyData)
                {
                    case Keys.Escape:
                        this.Close();//esc关闭窗体
                        break;
                }
                return false;
            }
            //重置按钮清空文本框
            private void button2_Click(object sender, EventArgs e)
            {
                txtName.Text = "";
                txtPass.Text = "";
            }     
            //密码输入完成后实现敲击enter键触发登录按钮
            private void txtPass_KeyDown(object sender, KeyEventArgs e)
            {
                if(e.KeyCode == Keys.Enter)
                {
                    this.button1_Click(sender, e);
                }
            }
    		//实现按enter键使焦点转移到下一文本框,与tab键通用
            private void txtName_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar == (char)Keys.Enter)
                {
                    SendKeys.Send("{tab}");
                }
            }
    

    效果如下图:
    在这里插入图片描述
    2、主界面功能实现
    主要代码如下:

    		public static bool isLogin = false;
            int id;
            SqlConnection conn;
            SqlCommand cmd;
            SqlDataAdapter adp;
            DataSet dat;
            public static string username
            {
                get;
                set;
            }
            public Form1()
            {
                InitializeComponent();
                this.label1.BackColor = Color.Transparent;
                this.groupBox1.BackColor = Color.Transparent;
                this.groupBox2.BackColor = Color.Transparent;
                this.dataGridView1.BorderStyle = BorderStyle.None;
                this.dataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.None;
                
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
                this.Text += "| 管理员:" + username;
                string ss = ConfigurationManager.ConnectionStrings["Stu"].ToString();
                //建立数据库连接
                conn = new SqlConnection(ss);
                try
                {
                    //开启连接           
                    conn.Open();
                    // MessageBox.Show("数据库连接成功!");           
                }
                catch (Exception)
                {
                    MessageBox.Show("数据库连接失败!");
                }
                
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                DataGridViewDataLoad();
                
                //this.stu_dentTableAdapter.Fill(this.students.Stu_dent);
    
            }
    
            private void DataGridViewDataLoad()
            {
                String sql1 = "select * from Stu_dent";
                adp = new SqlDataAdapter(sql1,conn);
                dat = new DataSet();
                adp.Fill(dat);
                dataGridView1.DataSource = dat.Tables[0];
            }
    
            private void button5_Click(object sender, EventArgs e)
            {
                string num = textBox1.Text.Trim();
                string name = textBox2.Text.Trim();
                String sql4 = "Select * from Stu_dent where 1=1";
                if(!String.IsNullOrEmpty(num))
                {
                    sql4 += " and StuNum=" + num;
                }
                if(!String.IsNullOrEmpty(name))
                {
                    sql4 += " and StuName like '%" + name + "%'";
                }
                adp = new SqlDataAdapter(sql4, conn);
                dat = new DataSet();
                adp.Fill(dat);
                dataGridView1.DataSource = dat.Tables[0];
                
            }
            protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
            {
                switch (keyData)
                {
                    case Keys.Escape:
                        this.Close();//esc关闭窗体
                        break;
                }
                return false;
            }
            private void button1_Click(object sender, EventArgs e)
            {
                AddStudent addStudent = new AddStudent();
                addStudent.StartPosition = FormStartPosition.CenterScreen;
                //addStudent.Show();
                addStudent.ShowDialog();
                DataGridViewDataLoad();
            }
    
            private void button4_Click(object sender, EventArgs e)
            {
                this.Close();
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                MessageBox.Show("请在学生信息显示框中双击所要删除学生所在的那一行即可!!!","提示");
            }
            private void button3_Click(object sender, EventArgs e)
            {
                MessageBox.Show("请在学生信息显示框中单击所要删修改学生所在的那一行的任意文字区域即可!", "提示");
            }
            private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
            {
                DialogResult result = MessageBox.Show("确定删除该学生信息?", "删除", MessageBoxButtons.OKCancel);
                if(result == DialogResult.OK)
                {
                    id = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[0].Value);
                    Console.WriteLine(id);
                    string sql2 = "delete from Stu_dent where ID=" + id;
                    cmd = new SqlCommand(sql2, conn);
                    cmd.ExecuteNonQuery();
    
                }
                DataGridViewDataLoad();
            }
    
            private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
                id = Convert.ToInt32(this.dataGridView1.Rows[e.RowIndex].Cells[0].Value);
                UpdateStudent updatestudent = new UpdateStudent(id);
                updatestudent.StartPosition = FormStartPosition.CenterScreen;
                updatestudent.ShowDialog();
                DataGridViewDataLoad();
            }
    

    效果如下:
    在这里插入图片描述
    3、添加学生信息功能实现
    主要代码如下:

    public AddStudent()
            {
                InitializeComponent();
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
                string ss = ConfigurationManager.ConnectionStrings["Stu"].ToString();
                //建立数据库连接
                conn = new SqlConnection(ss);
                try
                {
                    //开启连接           
                    conn.Open();
                    // MessageBox.Show("数据库连接成功!");           
                }
                catch (Exception)
                {
                    MessageBox.Show("数据库连接失败!");
                }
    
            }
    
            private void AddStudent_Load(object sender, EventArgs e)
            {
                
            }
    
            private void label1_Click(object sender, EventArgs e)
            {
    
            }
            protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
            {
                switch (keyData)
                {
                    case Keys.Escape:
                    this.Close();//esc关闭窗体
                    break;
                }
                return false;
            }
            private void button1_Click(object sender, EventArgs e)
            {
                string StuNum = textBox1.Text.Trim();
                string StuName = textBox2.Text.Trim();
                int StuAge;
                Int32.TryParse(textBox3.Text.Trim(), out StuAge);
                string StuClass = textBox5.Text.Trim();
                string StuPhone = textBox6.Text.Trim();
                string StuSex = radioButton1.Checked ? "男" : "女";
                if (String.IsNullOrEmpty(StuNum))
                {
                    MessageBox.Show("学号不能为空!");
                }
                if (String.IsNullOrEmpty(StuName))
                {
                    MessageBox.Show("姓名不能为空!");
                }
                
                if (String.IsNullOrEmpty(StuClass))
                {
                    MessageBox.Show("班级不能为空!");
                }
                if (String.IsNullOrEmpty(StuPhone))
                {
                    MessageBox.Show("联系方式不能为空!");
                }
                string sql = string.Format("insert into Stu_dent values ('{0}','{1}','{2}','{3}','{4}','{5}')", StuNum, StuName,StuAge,StuSex, StuClass, StuPhone );
                cmd = new SqlCommand(sql, conn);
                int count = cmd.ExecuteNonQuery();
                if (count > 0)
                {
                    MessageBox.Show("添加成功!");
                }
                else
                {
                    MessageBox.Show("添加失败!");
                }
                this.Close();
            }
    

    在这里插入图片描述
    4、删除学生信息功能实现
    在这里采用双击所要删除学生所在的那一行的任意位置即可
    主要代码如下:

    private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
            {
                DialogResult result = MessageBox.Show("确定删除该学生信息?", "删除", MessageBoxButtons.OKCancel);
                if(result == DialogResult.OK)
                {
                    id = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[0].Value);
                    Console.WriteLine(id);
                    string sql2 = "delete from Stu_dent where ID=" + id;
                    cmd = new SqlCommand(sql2, conn);
                    cmd.ExecuteNonQuery();
    
                }
                DataGridViewDataLoad();
            }
    

    效果如下图(双击第一行进行删除):
    删除前:
    在这里插入图片描述
    删除后:
    在这里插入图片描述
    5、修改学生信息功能实现
    在这里采用单击所要修改学生所在行任意文字处即可
    主要代码如下:

    public UpdateStudent(int id)
            {
                this.id = id;
                string ss = ConfigurationManager.ConnectionStrings["Stu"].ToString();
                conn = new SqlConnection(ss);
                try
                {
                    //开启连接           
                    conn.Open();
                    // MessageBox.Show("数据库连接成功!");           
                }
                catch (Exception)
                {
                    MessageBox.Show("数据库连接失败!");
                }
                InitializeComponent();
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            }
            protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
            {
                switch (keyData)
                {
                    case Keys.Escape:
                        this.Close();//esc关闭窗体
                        break;
                }
                return false;
            }
            private void UpdateStudent_Load(object sender, EventArgs e)
            {
                cmd = conn.CreateCommand();
                string sql1 = "select * from Stu_dent where ID=" + id;
                cmd.CommandText = sql1;
                reader = cmd.ExecuteReader();
                if(reader.HasRows)
                {
                    reader.Read();
                    textBox1.Text = reader.GetString(1);
                    textBox2.Text = reader.GetString(2);
                    textBox3.Text = reader.GetInt32(3).ToString();
                    if(reader.GetString(4) == "男")
                    {
                        this.radioButton2.Checked = true;
                    }
                    else
                    {
                        this.radioButton1.Checked = true;
                    }
                    textBox5.Text = reader.GetString(5);
                    textBox6.Text = reader.GetString(6);
                }
    
                reader.Close();
                
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                string StuNum = textBox1.Text.Trim();
                string StuName = textBox2.Text.Trim();
                int StuAge;
                Int32.TryParse(textBox3.Text.Trim(), out StuAge);
                string StuClass = textBox5.Text.Trim();
                string StuPhone = textBox6.Text.Trim();
                string StuSex = radioButton1.Checked ? "男" : "女";
                if (String.IsNullOrEmpty(StuName))
                {
                    MessageBox.Show("姓名不能为空!");
                }
    
                if (String.IsNullOrEmpty(StuClass))
                {
                    MessageBox.Show("班级不能为空!");
                }
                if (String.IsNullOrEmpty(StuPhone))
                {
                    MessageBox.Show("联系方式不能为空!");
                }
                string sql = string.Format("update Stu_dent set StuName='{0}',StuAge={1},StuSex='{2}',StuClass='{3}',StuPhone='{4}' where StuNum='{5}'", StuName, StuAge, StuSex, StuClass, StuPhone, StuNum);
                cmd = new SqlCommand(sql, conn);
                int count = cmd.ExecuteNonQuery();
                if (count > 0)
                {
                    MessageBox.Show("修改成功!");
                }
                else
                {
                    MessageBox.Show("修改失败!");
                }
                this.Close();
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                cmd = conn.CreateCommand();
                string sql1 = "select * from Stu_dent where ID=" + id;
                cmd.CommandText = sql1;
                reader = cmd.ExecuteReader();
                if (reader.HasRows)
                {
                    reader.Read();
                    textBox1.Text = reader.GetString(1);
                    textBox2.Text = reader.GetString(2);
                    textBox3.Text = reader.GetInt32(3).ToString();
                    if (reader.GetString(4) == "男")
                    {
                        this.radioButton2.Checked = true;
                    }
                    else
                    {
                        this.radioButton1.Checked = true;
                    }
                    textBox5.Text = reader.GetString(5);
                    textBox6.Text = reader.GetString(6);
                }
    
                reader.Close();
            }
    

    (在这里将郭某某的专业班级为例)
    修改前:
    在这里插入图片描述
    修改后:
    在这里插入图片描述
    6、查询学生信息功能实现
    查询功能就写了两种查询方式
    主要代码如下:

    private void button5_Click(object sender, EventArgs e)
            {
                string num = textBox1.Text.Trim();
                string name = textBox2.Text.Trim();
                String sql4 = "Select * from Stu_dent where 1=1";
                if(!String.IsNullOrEmpty(num))
                {
                    sql4 += " and StuNum=" + num;
                }
                if(!String.IsNullOrEmpty(name))
                {
                    sql4 += " and StuName like '%" + name + "%'";
                }
                adp = new SqlDataAdapter(sql4, conn);
                dat = new DataSet();
                adp.Fill(dat);
                dataGridView1.DataSource = dat.Tables[0];
                
            }
    

    效果如下:
    按学号查询:
    在这里插入图片描述
    按姓名查询:
    在这里插入图片描述
    总结:这是上完c#课后,自己无聊整着玩的,功能实现简单易懂,比较容易,希望能对你的学习有所帮助。对了,每个窗体的背景图片是我再网上随便找的,你可以选择你喜欢的背景。
    https://download.csdn.net/download/yang_shuai_/12911668

    展开全文
  • JAVA实现商品信息管理系统

    万次阅读 多人点赞 2019-10-14 20:43:56
    超市商品管理系统 题目要求 超市中商品分为四类,分别是食品、化妆品、日用品和饮料。每种商品都包含商品名称、价格、库存量和生产厂家、品牌等信息主要完成对商品的销售、统计和简单管理。 这个题目相对简单...

    超市商品管理系统

    点此下载源码

    题目要求

    超市中商品分为四类,分别是食品、化妆品、日用品和饮料。每种商品都包含商品名称、价格、库存量和生产厂家、品牌等信息。主要完成对商品的销售、统计和简单管理。这个题目相对简单,可以用一张表实现信息的保存和处理,因此不再给出数据库设计参考。
    功能要求
    (1)销售功能。
      购买商品时,先输入类别,然后输入商品名称,并在库存中查找该商品的相关信息。如果有库存量,输入购买的数量,进行相应计算。如果库存量不够,给出提示信息,结束购买。
    (2)商品简单管理功能。
      添加功能:主要完成商品信息的添加。
      查询功能:可按商品类别、商品名称、生产厂家进行查询。若存在相应信息,输出所查询的信息,若不存在该记录,则提示“该记录不存在!”。
      修改功能:可根据查询结果对相应的记录进行修改。
      删除功能:主要完成商品信息的删除。先输入商品类别,再输入要删除的商品名称,根据查询结果删除该物品的记录,如果该商品不在物品库中,则提示“该商品不存在”。
    (3)统计功能。
      输出当前库存中所有商品的总数及详细信息;可按商品的价格、库存量、生产厂家进行统计,输出统计信息时,要按从大到小进行排序。
    (7)商品信息存盘:将当前程序中的商品信息存入文件中。
    (8)读出信息:从文件中将商品信息读入程序。

    问题的解决方案

    根据系统功能要求,可以将问题解决分为以下步骤:
    (1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
    (2)分析系统中的各个实体及它们之间的关系;
    (3)根据问题描述,设计系统的类层次;
    (4)完成类层次中各个类的描述;
    (5)完成类中各个成员函数的定义;
    (6)完成系统的应用模块;
    (7)功能调试;

    设计思路

    可以对超市商品进行管理的人员主要有超市的商家和顾客,商家可以对超市的商品进行增﹑删﹑改﹑查操作,而顾客只能查询和购买商品。增加商品时,要添加商品的全部信息(编号﹑类别﹑名称﹑价格﹑库存量﹑品牌﹑生产厂家),删除时只需要输入商品编号便可删除该商品的全部信息,修改时要先输入商品编号,然后再确定要修改该商品的哪一个值,以及要将该值修改为什么,查询时只要输入想要查询商品的任意一个信息并选择商品类别便可查出该商品的全部信息。

    实现:

    建立并连接数据库与基本表

    连接数据库时需要用到JDBC,它由Java编程语言编写的类和接口组成,是实现Java与各种数据库连接的关键,提供了将Java与数据库连接起来的程序接口,使用户可以以SQL的形式编写访问请求,然后传给数据库,其结果再由这一接口返回,从而实现对数据库中数据操作的目的。超市商品管理系统采用了MySQL作为数据库,所建的系统数据库名为“goods”。通过需求分析、概念设计与逻辑设计,可知该系统数据库只需建立一个商品表即可

    结构设计

    该系统用于对商品的基本信息进行管理,主要包括添加、修改、查询和删除商品基本信息,为了方便,全部操作均在界面中完成。由此,将该系统结构设计为登录模块、顾客模块、商家模块。由于涉及界面设计,因此调用了java.awt.、java.awt.event.、javax.swing.、java.util.、javax.swing.event.*、java.sql.*等包。

    实现登录模块

    要生成一个界面,可应用AWT知识。设置其名字为商品信息管理系统;设置布局管理器为(null)布局管理器,方便往其中放组件;设置窗口大小和位置,还要设置窗口可见性。
    生成界面后,接下来就需要实现每个功能,第一个功能就是要对操作对象的身份进行选择,这里要用下拉列表的形式进行选择,也可以用单选按钮来完成这个功能。在这项功能中,首先要选择身份,所以要定义一个JLabel来说明,定义完JLabel后,就需要定义一个JComoBox,下拉列表框。 
    输入用户名和密码。需要用两个JLabel来指明需要输入用户名和密码。输入用户名需要定义一个JTextField,单文本框。同时输入文本,但输入密码和输入用户名是不一样的,它需要定义成JPasswordField,它的输出结果为“*****”这样的形式。 
    创建两个按钮,一个是登录按钮,另一个是取消登录按钮,用来输入的用户名和密码及选择的身份进行提交,然后根据选择的身份来选择需要进入那个界面,其代码如下:

    public class info_Manage extends JFrame implements ActionListener{
    	private JLabel username = new JLabel("用户名");
    	private JTextField userName = new JTextField();		
    	private JLabel psw = new JLabel("密码");	
    	private JPasswordField Psw = new JPasswordField();
    	JLabel jlp=new JLabel("身份");
    	String str[]={"顾客","商家"};
    	JComboBox jcb=new JComboBox(str);	
    	private JButton jb1 = new JButton("登录");
    	private JButton jb2 = new JButton("取消");	
    	public info_Manage(){		
    		this.setTitle("商品信息管理系统");
    		this.setLayout(null);
    		username.setBounds(100,50,100,20);
    		this.add(username);		
    		userName.setBounds(150,50,100,20);
    		this.add(userName);
    		psw.setBounds(100,100,100,20);
    		this.add(psw);
    		Psw.setBounds(150,100,100,20);
    		this.add(Psw);
    		jlp.setBounds(100,150,100,20);
    		this.add(jlp);
    		jcb.setBounds(150,150,100,20);
    		this.add(jcb);
    		jcb.addActionListener(this);
    		jb1.setBounds(100,210,60,20);
    		this.add(jb1);
    		jb1.addActionListener(this);
    		jb2.setBounds(200,210,60,20);
    		this.add(jb2);     
    		jb2.addActionListener(this);
    		this.setVisible(true);
    		this.setBounds(10,10,390,330);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	}
    	public static void main(String[] args) {
    		new info_Manage();
    	}
    	public void actionPerformed(ActionEvent e) {		
    		if (e.getSource() == jb1) {
    			String name=userName.getText();
    			String password = new String(Psw.getPassword());
    			if(name.length()==0&&password.length()!=0)
    				JOptionPane.showMessageDialog( null, "请输入用户名");
    			else  if(name.length()!=0&&password.length()==0)
    				JOptionPane.showMessageDialog( null, "请输入密码");
    			else if(name.length()==0&&name.length()==0)
    					JOptionPane.showMessageDialog( null, "请输入用户名和密码");
    			else if(jcb.getSelectedIndex()==0&&name.length()!=0&&name.length()!=0)
    				new custom_Manage();
    			else if(jcb.getSelectedIndex()==1&&name.length()!=0&&password.length()!=0)
    				new seller_Manage();
    		}
    		else if(e.getSource()==jb2)
    			System.exit(0);
    	}
    }
    

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

    实现顾客操作界面

    当选择“顾客”时,单击“登录”按钮就可以进入顾客操作系统了,然后就可以对摸个学生的信息进行输入、修改和删除,也能对同学的信息进行查询和对程序进行查询。当打算离开时,还要有一个选项用来退出学生信息管理系统。根据设计构想,首先要搭建一个界面,然后把顾客的操作分为2大块,分别是商品信息查询和退出登录,其部分代码如下:

    class custom_Manage extends JFrame implements ActionListener{
    	JMenu cm=new JMenu("请选择您需要的操作:");
    	JButton cm1=new JButton("商品信息查询");
    	JButton cm2=new JButton("退出登录");
    	public void actionPerformed(ActionEvent e){
    		 if(e.getSource()==cm1)new SetGoods();
    		else if(e.getSource()==cm2)	this.setVisible(false);
    	}
    }
    

    运行结果
    在这里插入图片描述
    商家操作界面相比顾客操作界面多了商品信息的增加﹑删除和修改功能,其实现方法与顾客操作界面类似,在此不再赘述。

    添加商品信息

    每个按钮都对应着一个操作界面,当点击商家操作下的“增加商品信息”按钮时,将弹出如图所示的界面,它调用了AddGoods.java类实现该功能。通过对“增加信息”这一子菜单设置监听,弹出界面。AddGoods.java的部分代码如下:

    class AddGoods extends JFrame implements ActionListener {
    	JLabel JL = new JLabel("添加基本信息:");
    	JLabel number = new JLabel("商品编号");
    	JTextField Number = new JTextField();
    	
    	JLabel JClass=new JLabel("类别");
    	String str[]={"食品","化妆品","日用品","饮料"};
    	JComboBox jcb=new JComboBox(str);
    	
    	JLabel name = new JLabel("商品名称");
    	JTextField Name = new JTextField();
    	JLabel price=new JLabel("商品价格");
    	JTextField Price = new JTextField();
    	JLabel storage= new JLabel("库存量");
    	JTextField Storage = new JTextField();
    	JLabel brand= new JLabel("品牌");
    	JTextField Brand = new JTextField();
    	JLabel vender = new JLabel("生产厂家");
    	JTextField Vender = new JTextField();
    	
    	JTextField jt=new JTextField(10);
    	JButton Add = new JButton("添加");
    	JButton Reset = new JButton("重置");
    	JButton Exit = new JButton("退出");
    	String sql = "";
    
    	public void actionPerformed(ActionEvent e) {
    		if(e.getSource()==Add) {
    			String snumber=Number.getText();
    			String svender=Vender.getText();
    			String sname=Name.getText();
    			String sprice=Price.getText();
    			String sstorage=Storage.getText();
    			String sbrand=Brand.getText();
    			try {
    				Connection cot=ConnectionFactory.getConnection();
    				Statement stm=cot.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE ,ResultSet.CONCUR_UPDATABLE );
    				int s=jcb.getSelectedIndex();
    				String jc=null;
    				if(s==0)jc="食品";
    				else if(s==1)jc="化妆品";
    				else if(s==2)jc="日用品";
    				else if(s==3)jc="饮料";
    sql="insert into goods values('"+snumber+"','"+jc+"','"+sname+"',"+sprice+","+sstorage+",'"+sbrand+"','"+svender+"')";
    				int n=stm.executeUpdate(sql);
    				if(n!=0)JOptionPane.showMessageDialog(null,"添加成功!");
    				else JOptionPane.showMessageDialog(null,"该商品已存在!");
    			}catch(Exception ee) {
    				ee.printStackTrace();
    			}
    		}
    		if(e.getSource()==Reset) {
    			Number.setText(null);
    			Name.setText(null);
    			Vender.setText(null);
    			Price.setText(null);
    			Storage.setText(null);
    			Brand.setText(null);
    		}
    		if(e.getSource()==Exit) {
    			this.setVisible(false);
    		}
    	}
    }
    

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

    删除商品信息

    当选择商家操作系统下的删除商品信息的按钮时,将弹出图4-4所示的界面,它调用了DeleteGoodst.java类实现该功能,其部分代码如下:

    class DeleteGoods extends JFrame implements ActionListener {
    	JMenu JL = new JMenu("删除基本信息");
    	JLabel number = new JLabel("商品编号");
    	JTextField Number = new JTextField();
    	JButton Del = new JButton("删除");
    	JButton Reset = new JButton("重置");
    	JButton Exit = new JButton("退出");
    	String sql = "";
    
    public void actionPerformed(ActionEvent e) {
    		if (e.getSource() == Del) {
    			Statement stm=null;
    			Connection cot;
    			try {
    				cot=ConnectionFactory.getConnection();
    				stm= cot.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE ,ResultSet.CONCUR_UPDATABLE );
    				sql ="delete from goods where number='"+Number.getText()+"'";
    				int n = stm.executeUpdate(sql);
    				if (n!=0)
    					JOptionPane.showMessageDialog(null, "删除成功!");
    				else
    				JOptionPane.showMessageDialog(null, "删除失败!");
    			} catch (SQLException e1) {
    				JOptionPane.showMessageDialog(null, "此商品不存在!");
    				e1.printStackTrace();
    			}
    		}
    		if (e.getSource() == Reset) {
    			Number.setText(null);
    		}
    		if (e.getSource() == Exit)
    			this.setVisible(false);
    	}
    }                     
    

    如图,只需输入商品编号便可删除该商品的全部信息。
    在这里插入图片描述

    修改商品信息

    当选择商家操作系统下的“修改信息”按钮时,将弹出界面,只要输入商品的编号,然后选择所要修改的该编号商品的列名,最后输入想要将其修改成为的值,即可修改该商品的某一项信息。用了GetGoods.java类实现该功能。其部分代码如下:

    class GetGoods extends JFrame implements ActionListener{
    	JLabel JL = new JLabel("修改商品信息", JLabel.CENTER);
    	JLabel number = new JLabel("请输入您要修改的商品编号");
    	JTextField Number = new JTextField();	
    	JLabel massage = new JLabel("请输入您要修改的商品信息");
    	JTextField Massage = new JTextField();	
    	JLabel afterget=new JLabel("您想要将该列信息修改为:");
    	JTextField Afterget = new JTextField();	
    	JTextField jt=new JTextField(10);
    	JButton Get = new JButton("修改");
    	JButton Reset = new JButton("重置");
    	JButton Exit = new JButton("退出");
    	String sql = "";
    public void actionPerformed(ActionEvent e){
    		if(e.getSource()==Get){
    			Statement stm=null;
    			Connection cot;
    			try{
    				cot=ConnectionFactory.getConnection();				stm=cot.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE ,ResultSet.CONCUR_UPDATABLE );
    				sql="update goods set "+Massage.getText()+"='"+Afterget.getText()+"' where number='"+Number.getText()+"'";
    				int n=stm.executeUpdate(sql);
    				if(n!=0)JOptionPane.showMessageDialog(null,"修改成功!");
    				else JOptionPane.showMessageDialog(null,"修改失败!");
    			}catch(Exception er){
    				er.printStackTrace();
    			}
    		}
    		if(e.getSource()==Reset){
    			Number.setText(null);
    			Massage.setText(null);
    			Afterget.setText(null);
    		}
    		if(e.getSource()==Exit) {
    			this.setVisible(false);
    		}
    	}
    }
    

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

    查询商品信息

    当选择顾客或者商家操作系统下的“查询商品信息”按钮时,将弹出如图所示的界面,它调用了SetGoods.java类实现该功能,部分代码如下:

    class SetGoods extends JFrame implements ActionListener {
    	JLabel JL = new JLabel("请用以下任意一种方式查询您想要的东西", JLabel.CENTER);
    	JLabel number = new JLabel("商品编号");
    	JTextField Number = new JTextField();	
    	JLabel JClass=new JLabel("类别");
    	String str[]={"无","食品","化妆品","日用品","饮料"};
    	JComboBox jcb=new JComboBox(str);	
    	JLabel name = new JLabel("商品名称");
    	JTextField Name = new JTextField();
    	JLabel price=new JLabel("商品价格");
    	JTextField Price = new JTextField();
    	JLabel brand= new JLabel("品牌");
    	JTextField Brand = new JTextField();
    	JLabel vender = new JLabel("生产厂家");
    	JTextField Vender = new JTextField();	
    	JTextField jt=new JTextField(10);
    	JButton Set = new JButton("查询");
    	JButton purchase = new JButton("购买");
    	JButton Reset = new JButton("重置");
    	JButton Exit = new JButton("退出");
    	String sql = "";
    public void actionPerformed(ActionEvent e) {
    		if (e.getSource() == Set) {
    			Statement stm=null;
    			Connection cot;
    			try{
    				cot=ConnectionFactory.getConnection();
    stm=cot.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE ,ResultSet.CONCUR_UPDATABLE );
    				if(Number.getText()!=null)
    					sql="select * from goods where number='"+Number.getText()+"'";
    				else if(Name.getText()!=null)
    					sql="select * from goods where name='"+Name.getText()+"'";
    				else if(Price.getText()!=null)
    					sql="select * from goods where price='"+Price.getText()+"'";
    				else if(Brand.getText()!=null)
    					sql="select * from goods where brand='"+Brand.getText()+"'";
    				else if(Vender.getText()!=null)
    					sql="select * from goods where vender='"+Vender.getText()+"'";
    				ResultSet rs=stm.executeQuery(sql);
    				while(rs.next()) {
    					System.out.println("商品编号: "+Number.getText());
    					int s=jcb.getSelectedIndex();
    					if(s==0)
    					JOptionPane.showMessageDialog( null, "请选择商品类别!" );
    					else if(s==1)System.out.println("商品类别: 食品");
    					else if(s==2)System.out.println("商品类别: 化妆品");
    					else if(s==3)System.out.println("商品类别: 日用品");
    					else if(s==4)System.out.println("商品类别: 饮料");
    					System.out.println("商品名称: "+rs.getString("name"));
    					System.out.println("价格: "+rs.getString("price"));
    					System.out.println("库存量: "+rs.getString("storage"));
    					System.out.println("品牌: "+rs.getString("brand"));
    					System.out.println("生产厂家: "+rs.getString("vender"));
    				}
    			}catch(Exception ee){
    				JOptionPane.showMessageDialog( null, "该商品不存在!" );
    				ee.printStackTrace();
    			}
    		}
    		else if(e.getSource()==purchase){new Purchase();}
    		else if(e.getSource()==Reset){
    			Number.setText(null);
    			Name.setText(null);
    			Vender.setText(null);
    			Price.setText(null);
    			Brand.setText(null);
    		}
    		else if(e.getSource()==Exit) {
    this.setVisible(false);
    }}}
    

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

    退出系统

    当在对商品进行增加﹑删除﹑修改和查询的界面时,点击“退出”按钮,即可弹出如图4-7所示界面,它调用了UsingExit.java类实现该功能,部分代码如下:

    class UsingExit extends JFrame implements ActionListener{
    	JLabel Info=new JLabel("确认退出?");
    	JButton JExit=new JButton("确认");
    	JButton Cancel=new JButton("取消");
    public void actionPerformed(ActionEvent e){
    		if(e.getSource()==JExit)
    			System.exit(0);
    		else if(e.getSource()==Cancel)
    			setVisible(false);
    	}
    }
    

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

    点此下载源码

    展开全文
  • 基于python的学生信息管理系统

    千次阅读 多人点赞 2020-11-25 20:39:44
    学生管理系统主要包括录入学生信息、查找学生信息、删除学生信息、修改学生信息、排序学生信息、统计学生总数、显示学生信息,这几项功能。其中录入学生的信息包括学号、姓名、英语成绩、python成绩、数学成绩、总...

    最近在学python,用了几天跟着网上的视频学完基础知识之后,做了一个学生管理系统,写的比较普通,没太大亮点,希望可以给初学者一些参考经验,另外,如有不恰当的地方还请各位指正。

    学生管理系统主要包括录入学生信息、查找学生信息、删除学生信息、修改学生信息、排序学生信息、统计学生总数、显示学生信息,这几项功能。其中录入学生的信息包括学号、姓名、英语成绩、python成绩、数学成绩、总成绩;查询学生信息分为按学号和按姓名查找两种;删除学生信息是输入学号进行查找,查找到学生信息之后,对学生信息进行删除;修改学生信息是输入学号后,查询到学生信息之后,对学生信息进行修改;排序学生信息的排序方式可选择升序和降序,可选择按英语、python、数学成绩以及总成绩进行排序;统计学生总数 就是输出信息管理系统中有几个学生的信息。

    首先,运行结果部分截图如下图所示:

     

    下面开始介绍代码,我把主要的代码处都给出了详细注释,如若有不懂的地方,请在评论区留言。

    1、主界面函数代码部分,此函数主要就是使用print打印出主界面。

    def show_choose():
        print("==========================学生信息管理系统==========================")
        print()
        print("-----------------------------功能菜单------------------------------")
        print()
        print("                         1.录入学生信息")
        print("                         2.查找学生信息")
        print("                         3.删除学生信息")
        print("                         4.修改学生信息")
        print("                         5.排序学生信息")
        print("                         6.统计学生总数")
        print("                         7.显示学生信息")
        print("                         0.退出信息管理系统")
        print()
        print("------------------------------------------------------------------")

    2、录入学生信息函数代码部分,在这个函数中实现的功能是录入学生信息,包括学号、姓名、英语成绩、python成绩、数学成绩、总成绩等,并将其写入文件中,每一行为一个学生的信息存储。

    # 录入学生信息
    # 录入学生的信息包括学号、姓名、英语成绩、python成绩、数学成绩、总成绩
    def input_info():
        infile_info = open('infile.txt', 'a')  # 以追加的方式向文件中写入数据,如果文件不存在就创建一个文件
        flag = 'y'
        # 向文件中录入学生信息,每一个学生的信息单独占一行
        while flag == 'y' or flag == 'Y':
            stu_id = input("请输入学生学号(如2020001):")
            stu_name = input("请输入学生姓名:")
            stu_score_eng = input("请输入学生英语成绩:")
            stu_score_py = input("请输入学生Python成绩:")
            stu_score_math = input("请输入学生数学成绩:")
            stu_sum_score = int(stu_score_eng) + int(stu_score_py) + int(stu_score_math)
            stu_info = stu_id + '\t' + stu_name + '\t' + stu_score_eng + '\t' + stu_score_py + '\t' + \
                       stu_score_math + '\t' + str(stu_sum_score) + '\n'
            infile_info.write(stu_info)
            flag = input("是否继续添加学生信息?y/n")
        print("信息录入完毕!!!")
        infile_info.close()

    3、查询学生信息函数代码部分,此函数主要功能是查询时分为按学号和按姓名查询两种,若查无此人则输出提示信息。

    # 查询学生信息
    # 查询时分为按学号和按姓名查找两种
    def find_info():
        flag = 'y'
        while flag == 'y' or flag == 'Y':
            n = 0
            m = 0  # 定义m,n是为了用作判断文件中是否有此人信息的标记
            findfile_info = open('infile.txt', 'r')  # 以可读方式打开文件
            line_info = findfile_info.readlines()
            find_nid = input("按学号查找请输入1,按姓名查找请输入2:")  # 查询方式分为按学号和按姓名
            if find_nid == '1':
                find_id = input('请输入学生学号:')
                for line in line_info:
                    if find_id in line:
                        print(line)
                        n = n + 1
                if n == 0:
                    print("没有查询到学生信息,无数据显示!!!")
            if find_nid == '2':
                find_name = input('请输入学生姓名:')
                for line in line_info:
                    if find_name in line:
                        print(line)
                        m = m + 1
                if m == 0:
                    print("没有查询到学生信息,无数据显示!!!")
            findfile_info.close()
            flag = input("是否继续查询学生信息?y/n")

    4、删除学生信息函数代码部分,此函数主要功能是执行删除操作,输入学号进行查找,查找到学生信息之后,对学生信息进行删除。

    # 删除学生信息
    # 输入学号进行查找,查找到学生信息之后,对学生信息进行删除
    def del_info():
        flag = 'y'
        while flag == 'y' or flag == 'Y':
            n = 0  # 用以查无此人时的标记
            defile_info1 = open('infile.txt', 'r')  # 以可读方式打开文件
            line_info = defile_info1.readlines()  # 将文件的信息按行全部读取出来,此时line_info是一个列表,每一行是一个元素
            defile_info2 = open('infile.txt', 'w')  # 以可写方式打开文件,用来将删除后的信息写入文件
            del_id = input("请输入要删除的学生的学号:")
            for line in line_info:  # 如果要删除的学生学号在文件存储的信息中,就将后面的信息向前移动覆盖这条信息
                if del_id in line:
                    continue
                defile_info2.write(line)
                n = n + 1
            if n == len(line_info):
                print("无此学生信息,请核对后再操作!!!")
            else:
                print("学号为{0}的学生信息已被删除!!!".format(del_id))
            defile_info1.close()
            defile_info2.close()
            flag = input("是否继续删除学习信息?y/n")

    5、修改学生信息函数代码部分,此函数的主要功能是对学生信息进行修改,当输入学号后,查询到学生信息之后,对学生信息进行修改。

    def mod_info():
        flag = 'y'
        while flag == 'y' or flag == 'Y':
            n = 0  # 用以查无此人时的标记
            mod_id = input("请输入要修改的学生学号:")
            modfile_file1 = open('infile.txt', 'r')  # 以可读方式打开文件,读取到line_info中,每一行就是一个列表的元素
            line_info = modfile_file1.readlines()
            modfile_file2 = open('infile.txt', 'w')  # 用以写入修改后的数据
            for line in line_info:  # 遍历列表
                if mod_id in line:  # 如果修改的学生信息存在,就重新写入学生信息
                    print("已找到学生,请修改信息!")
                    mod_name = input("请输入姓名:")
                    mod_score_eng = input("请输入英语成绩:")
                    mod_score_py = input("请输入python成绩:")
                    mod_score_math = input("请输入数学成绩:")
                    mod_sum_score = int(mod_score_eng) + int(mod_score_py) + int(mod_score_math)
                    mod_stu_info = mod_id + '\t' + mod_name + '\t' + mod_score_eng + '\t' + mod_score_py + '\t' + \
                                   mod_score_math + '\t' + str(mod_sum_score) + '\n'
                    modfile_file2.write(mod_stu_info)
                    print("修改成功!!!")
                    continue
                modfile_file2.write(line)  # 由于w方式打开的文件重新后会覆盖原有数据,所以需要将原有数据写入
                n = n + 1
            if n == len(line_info):
                print("无此学生信息,请核对后再操作!!!")
            else:
                print("学号为{0}的学生信息已修改!!!".format(mod_id))
            modfile_file1.close()
            modfile_file2.close()
            flag = input("是否继续修改学习信息?y/n")

    6、排序学生信息函数部分,此函数功能是对学生信息进行排序,排序方式可选择升序和降序,排序条件可选择按英语、python、数学成绩以及总成绩进行排序。

    # 排序学生信息
    # 排序方式可选择升序和降序
    # 可选择按英语、python、数学成绩以及总成绩进行排序
    def sort_info():
        flag = 'y'
    
        # 此方法用来排序,返回列表的2,3,4,5的元素,也就是分别依据英语、python、数学、总成绩进行排序
        # 例如列表[['1','2','3'],['1','2','3'],['1','2','3']]
        # 则take_eng就是以每个列表的第三个元素为依据排序,也就是3,2,1
        def take_eng(elem):
            return int(elem[2])
    
        def take_py(elem):
            return int(elem[3])
    
        def take_math(elem):
            return int(elem[4])
    
        def take_sum(elem):
            return int(elem[5])
    
        # 此方法用来进行排序后的输出操作
        def output_sort(sort_list):
            for m in sort_list:
                for n in m:
                    print("%+10s" % n, end=' ')
                print()
    
        while flag == 'y' or flag == 'Y':
            sortfile_info = open('infile.txt', 'r')  # 可读方式打开文件,并读取信息line_info中
            line_info = sortfile_info.readlines()
            # 定义列表,用来将读取出来的字符串信息,转化为列表
            # 例如['2020001\t李一一\t75\t86\t89\t250\n', '2020002\t王大伟\t85\t96\t99\t280\n']
            # 转化为[['2020001', '李一一', '75', '86', '89', '250'], ['2020002', '王大伟', '85', '96', '99', '280']]
            lst = []
            for i in range(0, len(line_info)):
                lst.append('lst' + str(i))
            i = 0
            for line in line_info:  # 遍历列表,将信息转化为单独的列表,并去掉\t和\n,方便接下来的排序比较
                line = line.replace('\n', '')
                lst[i] = line.split('\t')
                i = i + 1
    
            sort_up_down = input("请选择(0升序,1降序):")
            print("1.按英语成绩排序,2.按python成绩排序")
            print("3.按数学成绩排序,4.按学生总成绩排序")
            sort_term = input("请选择:")
            if sort_up_down == '0':  # 升序
                if sort_term == '1':
                    lst.sort(key=take_eng, reverse=False)  # 以英语成绩升序排序
                if sort_term == '2':
                    lst.sort(key=take_py, reverse=False)
                if sort_term == '3':
                    lst.sort(key=take_math, reverse=False)
                if sort_term == '4':
                    lst.sort(key=take_sum, reverse=False)
                output_sort(lst)
            if sort_up_down == '1':  # 降序
                if sort_term == '1':
                    lst.sort(key=take_eng, reverse=True)  # 以英语成绩降序排序
                if sort_term == '2':
                    lst.sort(key=take_py, reverse=True)
                if sort_term == '3':
                    lst.sort(key=take_math, reverse=True)
                if sort_term == '4':
                    lst.sort(key=take_sum, reverse=True)
                output_sort(lst)
            flag = input("是否继续排序信息?y/n")

    7、统计学生总数函数代码部分,此函数主要是输出信息管理系统中有几个学生的信息。

    # 统计学生总数
    # 输出信息管理系统中有几个学生的信息
    def sum_info():
        sumfile_info = open('infile.txt', 'r')
        line_info = sumfile_info.readlines()
        sum_stu = len(line_info)  # 写出列表中的元素个数
        print("一共有{0}名学生。".format(sum_stu))
        sumfile_info.close()

    8、显示学生信息函数代码部分,此函数是将文件存储的学生信息全部显示出来。

    # 显示学生信息
    def show_info():
        print("学号", end='\t\t')
        print("姓名", end='\t\t')
        print("英语成绩", end='\t\t')
        print("Python成绩", end='\t\t')
        print("数学成绩", end='\t\t')
        print("总成绩", end='\t\t')
        print('\n')
        showfile_info = open('infile.txt', 'r')
        line_info = showfile_info.readlines()
        for line in line_info:  # 遍历列表,输出各个元素
            print(line)
        showfile_info.close()

    以上就是每个功能函数的代码,完成这些函数的编写之后,需要进行调用才能够执行,所以主函数代码如下。

    def main():
        show_choose()
        choose_menu = input("请选择:")
        while choose_menu != '0':
            if choose_menu == '1':
                input_info()
            if choose_menu == '2':
                find_info()
            if choose_menu == '3':
                del_info()
            if choose_menu == '4':
                mod_info()
            if choose_menu == '5':
                sort_info()
            if choose_menu == '6':
                sum_info()
            if choose_menu == '7':
                show_info()
            choose_menu = input("请选择:")
    
        print("欢迎您再次使用!!!")

    最后,需要在程序末尾执行main(),完成后运行函数,就可以正常执行了。

    下面是全部的代码,一共250行,不算简洁,也不是太冗余,复制后直接可用,如有瑕疵和bug请指正,谢谢。

    # 开发者:杨健林
    # 开发日期:2020/11/24 19:02
    # 学生管理系统,包括录入学生信息、查找学生信息、删除学生信息、修改学生信息、排序学生信息、统计学生总数、显示学生信息。
    
    # 录入学生信息
    # 录入学生的信息包括学号、姓名、英语成绩、python成绩、数学成绩、总成绩
    def input_info():
        infile_info = open('infile.txt', 'a')  # 以追加的方式向文件中写入数据,如果文件不存在就创建一个文件
        flag = 'y'
        # 向文件中录入学生信息,每一个学生的信息单独占一行
        while flag == 'y' or flag == 'Y':
            stu_id = input("请输入学生学号(如2020001):")
            stu_name = input("请输入学生姓名:")
            stu_score_eng = input("请输入学生英语成绩:")
            stu_score_py = input("请输入学生Python成绩:")
            stu_score_math = input("请输入学生数学成绩:")
            stu_sum_score = int(stu_score_eng) + int(stu_score_py) + int(stu_score_math)
            stu_info = stu_id + '\t' + stu_name + '\t' + stu_score_eng + '\t' + stu_score_py + '\t' + \
                       stu_score_math + '\t' + str(stu_sum_score) + '\n'
            infile_info.write(stu_info)
            flag = input("是否继续添加学生信息?y/n")
        print("信息录入完毕!!!")
        infile_info.close()
    
    
    # 查询学生信息
    # 查询时分为按学号和按姓名查找两种
    def find_info():
        flag = 'y'
        while flag == 'y' or flag == 'Y':
            n = 0
            m = 0  # 定义m,n是为了用作判断文件中是否有此人信息的标记
            findfile_info = open('infile.txt', 'r')  # 以可读方式打开文件
            line_info = findfile_info.readlines()
            find_nid = input("按学号查找请输入1,按姓名查找请输入2:")  # 查询方式分为按学号和按姓名
            if find_nid == '1':
                find_id = input('请输入学生学号:')
                for line in line_info:
                    if find_id in line:
                        print(line)
                        n = n + 1
                if n == 0:
                    print("没有查询到学生信息,无数据显示!!!")
            if find_nid == '2':
                find_name = input('请输入学生姓名:')
                for line in line_info:
                    if find_name in line:
                        print(line)
                        m = m + 1
                if m == 0:
                    print("没有查询到学生信息,无数据显示!!!")
            findfile_info.close()
            flag = input("是否继续查询学生信息?y/n")
    
    
    # 删除学生信息
    # 输入学号进行查找,查找到学生信息之后,对学生信息进行删除
    def del_info():
        flag = 'y'
        while flag == 'y' or flag == 'Y':
            n = 0  # 用以查无此人时的标记
            defile_info1 = open('infile.txt', 'r')  # 以可读方式打开文件
            line_info = defile_info1.readlines()  # 将文件的信息按行全部读取出来,此时line_info是一个列表,每一行是一个元素
            defile_info2 = open('infile.txt', 'w')  # 以可写方式打开文件,用来将删除后的信息写入文件
            del_id = input("请输入要删除的学生的学号:")
            for line in line_info:  # 如果要删除的学生学号在文件存储的信息中,就将后面的信息向前移动覆盖这条信息
                if del_id in line:
                    continue
                defile_info2.write(line)
                n = n + 1
            if n == len(line_info):
                print("无此学生信息,请核对后再操作!!!")
            else:
                print("学号为{0}的学生信息已被删除!!!".format(del_id))
            defile_info1.close()
            defile_info2.close()
            flag = input("是否继续删除学习信息?y/n")
    
    
    # 修改学生信息
    # 输入学号后,查询到学生信息之后,对学生信息进行修改
    def mod_info():
        flag = 'y'
        while flag == 'y' or flag == 'Y':
            n = 0  # 用以查无此人时的标记
            mod_id = input("请输入要修改的学生学号:")
            modfile_file1 = open('infile.txt', 'r')  # 以可读方式打开文件,读取到line_info中,每一行就是一个列表的元素
            line_info = modfile_file1.readlines()
            modfile_file2 = open('infile.txt', 'w')  # 用以写入修改后的数据
            for line in line_info:  # 遍历列表
                if mod_id in line:  # 如果修改的学生信息存在,就重新写入学生信息
                    print("已找到学生,请修改信息!")
                    mod_name = input("请输入姓名:")
                    mod_score_eng = input("请输入英语成绩:")
                    mod_score_py = input("请输入python成绩:")
                    mod_score_math = input("请输入数学成绩:")
                    mod_sum_score = int(mod_score_eng) + int(mod_score_py) + int(mod_score_math)
                    mod_stu_info = mod_id + '\t' + mod_name + '\t' + mod_score_eng + '\t' + mod_score_py + '\t' + \
                                   mod_score_math + '\t' + str(mod_sum_score) + '\n'
                    modfile_file2.write(mod_stu_info)
                    print("修改成功!!!")
                    continue
                modfile_file2.write(line)  # 由于w方式打开的文件重新后会覆盖原有数据,所以需要将原有数据写入
                n = n + 1
            if n == len(line_info):
                print("无此学生信息,请核对后再操作!!!")
            else:
                print("学号为{0}的学生信息已修改!!!".format(mod_id))
            modfile_file1.close()
            modfile_file2.close()
            flag = input("是否继续修改学习信息?y/n")
    
    
    # 排序学生信息
    # 排序方式可选择升序和降序
    # 可选择按英语、python、数学成绩以及总成绩进行排序
    def sort_info():
        flag = 'y'
    
        # 此方法用来排序,返回列表的2,3,4,5的元素,也就是分别依据英语、python、数学、总成绩进行排序
        # 例如列表[['1','2','3'],['1','2','3'],['1','2','3']]
        # 则take_eng就是以每个列表的第三个元素为依据排序,也就是3,2,1
        def take_eng(elem):
            return int(elem[2])
    
        def take_py(elem):
            return int(elem[3])
    
        def take_math(elem):
            return int(elem[4])
    
        def take_sum(elem):
            return int(elem[5])
    
        # 此方法用来进行排序后的输出操作
        def output_sort(sort_list):
            for m in sort_list:
                for n in m:
                    print("%+10s" % n, end=' ')
                print()
    
        while flag == 'y' or flag == 'Y':
            sortfile_info = open('infile.txt', 'r')  # 可读方式打开文件,并读取信息line_info中
            line_info = sortfile_info.readlines()
            # 定义列表,用来将读取出来的字符串信息,转化为列表
            # 例如['2020001\t李一一\t75\t86\t89\t250\n', '2020002\t王大伟\t85\t96\t99\t280\n']
            # 转化为[['2020001', '李一一', '75', '86', '89', '250'], ['2020002', '王大伟', '85', '96', '99', '280']]
            lst = []
            for i in range(0, len(line_info)):
                lst.append('lst' + str(i))
            i = 0
            for line in line_info:  # 遍历列表,将信息转化为单独的列表,并去掉\t和\n,方便接下来的排序比较
                line = line.replace('\n', '')
                lst[i] = line.split('\t')
                i = i + 1
    
            sort_up_down = input("请选择(0升序,1降序):")
            print("1.按英语成绩排序,2.按python成绩排序")
            print("3.按数学成绩排序,4.按学生总成绩排序")
            sort_term = input("请选择:")
            if sort_up_down == '0':  # 升序
                if sort_term == '1':
                    lst.sort(key=take_eng, reverse=False)  # 以英语成绩升序排序
                if sort_term == '2':
                    lst.sort(key=take_py, reverse=False)
                if sort_term == '3':
                    lst.sort(key=take_math, reverse=False)
                if sort_term == '4':
                    lst.sort(key=take_sum, reverse=False)
                output_sort(lst)
            if sort_up_down == '1':  # 降序
                if sort_term == '1':
                    lst.sort(key=take_eng, reverse=True)  # 以英语成绩降序排序
                if sort_term == '2':
                    lst.sort(key=take_py, reverse=True)
                if sort_term == '3':
                    lst.sort(key=take_math, reverse=True)
                if sort_term == '4':
                    lst.sort(key=take_sum, reverse=True)
                output_sort(lst)
            flag = input("是否继续排序信息?y/n")
    
    
    # 统计学生总数
    # 输出信息管理系统中有几个学生的信息
    def sum_info():
        sumfile_info = open('infile.txt', 'r')
        line_info = sumfile_info.readlines()
        sum_stu = len(line_info)  # 写出列表中的元素个数
        print("一共有{0}名学生。".format(sum_stu))
        sumfile_info.close()
    
    
    # 显示学生信息
    def show_info():
        print("学号", end='\t\t')
        print("姓名", end='\t\t')
        print("英语成绩", end='\t\t')
        print("Python成绩", end='\t\t')
        print("数学成绩", end='\t\t')
        print("总成绩", end='\t\t')
        print('\n')
        showfile_info = open('infile.txt', 'r')
        line_info = showfile_info.readlines()
        for line in line_info:  # 遍历列表,输出各个元素
            print(line)
        showfile_info.close()
    
    
    def show_choose():
        print("==========================学生信息管理系统==========================")
        print()
        print("-----------------------------功能菜单------------------------------")
        print()
        print("                         1.录入学生信息")
        print("                         2.查找学生信息")
        print("                         3.删除学生信息")
        print("                         4.修改学生信息")
        print("                         5.排序学生信息")
        print("                         6.统计学生总数")
        print("                         7.显示学生信息")
        print("                         0.退出信息管理系统")
        print()
        print("------------------------------------------------------------------")
    
    
    def main():
        show_choose()
        choose_menu = input("请选择:")
        while choose_menu != '0':
            if choose_menu == '1':
                input_info()
            if choose_menu == '2':
                find_info()
            if choose_menu == '3':
                del_info()
            if choose_menu == '4':
                mod_info()
            if choose_menu == '5':
                sort_info()
            if choose_menu == '6':
                sum_info()
            if choose_menu == '7':
                show_info()
            choose_menu = input("请选择:")
    
        print("欢迎您再次使用!!!")
    
    
    main()
    

     

     

     

     

    展开全文
  • 基于SSM的学生信息管理系统(选课)

    万次阅读 多人点赞 2019-04-15 19:40:52
    由SpringMVC+MyBatis为主要框架,mysql8.0配置主从复制实现读写分离,主机丛机分别为腾讯云的服务器,而项目部署在阿里云上。前端主要由bootstrap完成,背景用particles.js插件。数据库交互查询用到pagehelper分页。...
  • 医院信息管理系统

    千次阅读 2019-10-04 15:07:21
    医院信息管理系统 一、导言 1.1 编写目的 本需求说明文档描述了医院管理系统项目的要求,作为系统设计、项目目标...本文档主要涉及“医院信息管理系统”的应用模型和功能需求描述 1.3 参考资料 《软件工程案例教程...
  • C语言:学生信息管理系统(详解+源码)

    万次阅读 多人点赞 2020-05-30 21:56:40
    主要方式 :结构体、链表和文件读取结合 功能模块 : 1、用户界面,给予用户更好的视觉体验 2、录入信息,通过链表开辟内存空间进行录入学生的基本信息 3、存入文件,采用二进制的方式对学生的信息存储...
  • 学生信息管理系统

    万次阅读 多人点赞 2018-11-15 20:29:43
    一个简单的学生信息管理系统 主要步骤: 一、添加学生对话框的设计 1.建窗口 (1)布局各个控件,并更改名称,应当注意的是当布局中的label占据较大位置影响整体布局的时候,考虑对layout进行垂直策略的fixed. ...
  • 用VUE实现一个简单的学生信息管理系统

    万次阅读 多人点赞 2021-01-11 21:43:56
    用VUE实现一个简单的学生信息管理系统用VUE实现一个学生信息管理系统一、主要功能二、实现思路三、代码实现四、效果展示五、总结 用VUE实现一个学生信息管理系统 一、主要功能 本次任务主要是使用VUE来实现一个简单...
  • WinForm-教师信息管理系统

    千次阅读 2015-06-23 13:51:05
    WinForm-教师信息管理系统
  • 人员信息管理系统

    千次阅读 2017-04-02 17:43:34
    基本描述这个系统主要实现基本的业务功能:增加用户,修改用户,删除用户,查询单个用户,查询全部用户和退出系统的功能。 工厂模式,代理模式,MySQL数据库连接方式数据库连接方式:JDBC程序结构框架表的信息id ...
  • C++ 校园管理系统、高校人员信息管理系统

    万次阅读 多人点赞 2017-09-13 13:43:53
    “高校人员信息管理系统设计” 1、问题描述 某高校有四类员工教师、实验员、行政人员教师兼行政人员共有的信息包括编号、姓名、性别、年龄等。其中教师还包含的信息有所在系部、专业、职称实验员还...
  • 基于springboot的学生信息管理系统

    万次阅读 热门讨论 2019-07-10 10:00:56
    系统使用 MySQL作为数据库,MySQL数据库是一款开源的免费的关系型数据库,功能非常强大,拥有图形用户界面,一般应用于大型的公司作为数据存储。由于开源并且是免费的,因此广受大家的青睐[1]。 (2) SpringBoot ...
  • 医院信息管理系统需求分析

    万次阅读 多人点赞 2019-10-04 01:44:22
    医院信息管理系统 一、导言 1.1 编写目的 本需求说明文档描述了医院管理系统项目的要求,作为系统设计、项目目标...本文档主要涉及“医院信息管理系统”的应用模型和功能需求描述 1.3 参考资料 《软件工程案例教程...
  • 该项目主要实现对学生信息的管理,通过学生信息管理系统能够进行学生信息的增加、查看,查询,删除等功能,实现学生管理工作的系统化和自动化。 该项目已经上传到github了,想看源码请移步:...
  • 人事管理信息系统

    千次阅读 2016-04-12 10:23:57
    人事信息管理系统 人事信息管理系统是一种典型的管理信息系统。管理信息系统(MIS)是一门跨越若干领域的新学科。在强调管理,强调信息的现代社会中越来越普及。管理系统能够实现管理信息系统化是一个企事业...
  • 数据库课程设计——学生宿舍信息管理系统

    万次阅读 多人点赞 2018-09-17 23:33:00
    数据库课程设计——学生宿舍信息管理系统 目录  1.设计目的... 2 2、任务与要求... 2 3、学生宿舍管理系统课程设计... 2 3.1 引言... 2 3.2需求分析... 2 3.2.1....
  • 学生信息管理系统总结

    万次阅读 热门讨论 2017-07-25 11:38:40
    学生信息管理系统总算初步告一段落了,个人认为这个程序经典,为以后的学习奠定了坚实的基础,它淋漓尽致的体现了我们生活中离不开的基本功能,它让我学到了很多。它时不时的会出现一堆BUG,让我找到它的根本原因,...
  • 管理信息系统5种主要开发方法

    万次阅读 2005-12-30 00:07:00
    管理信息系统5种主要开发方法:1.结构化生命周期法:把系统的建立看作是一种生命物种的成长过程。 由6个开发阶段组成:系统定义 -> 需求分析 -> 系统设计 -> 编写代码 -> 安装调试 -> 系统维护 系统定义阶段为开发...
  • 学生宿舍信息管理系统

    千次阅读 多人点赞 2020-12-31 15:20:16
    本系统专门针对学校的公寓管理而开发的一个功能齐全、操作简单的学生公寓管理系统。适合学校的宿舍管理人员使用。本系统实现以下基本功能:管理员可以对公寓进行全程管理,不仅可以管理学生,还可以管理寝室人员及...
  • C++ 学生信息管理系统课程设计报告

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

    万次阅读 多人点赞 2015-12-15 21:08:23
     学生的学籍信息是记录学生的重要信息档案,如何以电子文档形式记录下学生的学籍信息是每个学校必须做的事情,该学生学籍信息管理系统就是为了方便学校记录下每一个学生的基本信息,生成电子数据库,并且能够做到...
  • 小白成长记,不喜勿喷,请多多指教 源代码已上传到github:https://github.com/LazyTraveller/Mycat ...
  • Zabbix支持的主要监控方式

    万次阅读 2016-07-12 17:30:36
    Zabbix支持的主要监控方式Zabbix主要有Agent, Trapper, SNMP, JMX, IPMI这几种监控方式,下面主要就监控原理和优缺点介绍一下这几种方式。 Zabbix支持的主要监控方式 Agent监控方式 Trapper监控方式 SNMP监控方式 ...
  • 本课程演示的是一套基于JavaWeb实现的学生信息管理系统主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的java人群。 详细介绍了学生信息管理系统的实现,包括: 1.项目介绍 2.环境搭建 3.系统功能 4....
  • 基于SpringBoot+Mybatis+Thymeleaf商品信息管理系统

    万次阅读 多人点赞 2018-04-30 11:29:30
    基于SpringBoot+Mybatis+Thymeleaf商品信息管理系统 主要用到的技术: - 1、使用maven进行项目构建 - 2、使用Springboot+Mybatis搭建整个系统 - 3、使用Thymeleaf模板技术实现页面静态化 - 4、使用框架...
  • 软件工程 教师信息管理系统

    千次阅读 2018-05-04 18:40:38
    软件工程课程设计 工学院教师信息管理系统设计与分析 项目名称: 工学院教师信息管理系统 院 - 系: 工学院 –计科系 年 级: 2015级 Project ...
  • 设备管理信息系统

    万次阅读 多人点赞 2016-04-08 19:26:29
    设备管理系统(Equipment Management System)是将信息化了设备技术信息与现代化管理相结合,是实现研究级管理信息化的先导。设备管理软件是设备管理模式与计算机技术结合的产物,设备管理的对象是研究所中各种各样...
  • 随着人们生活水平的不断提高...所以,医院急需满足健康体检需要的信息管理系统来提高体检工作效率。健康体检信息管理系统是一套专业的体检管理软件,是医院、疾控中心等单位开展体检业务的得力助手。它将以往人工操作...
  • 电力管理信息系统

    千次阅读 2016-04-23 09:38:40
    所谓设备管理就是对所有设备进行全过程的动态管理,实现对设备相关信息的存储、加工、反馈、查询和检索,以便不断提高设备管理水平和发挥设备的最大效益. 其中主要包括设备台账管理、设备缺陷管理、设备评级管理等....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,020,037
精华内容 408,014
关键字:

信息采集的主要方式