精华内容
下载资源
问答
  • 基于java的学生信息管理系统设计报告
  • 学生信息管理系统——总结

    千次阅读 热门讨论 2013-08-10 21:06:12
    总体任务是实现学生信息关系的系统化、科学化、规范化和自动化,其主要任务是用计算机对学生各种信息进行日常管理,如查询、修改、增加、删除,另外还考虑到学生选课,针对这些要求设计学生信息管理系统。...

    学生信息管理系统是针对学校人事处的大量业务处理工作而开发的管理软件,主要用于学校学生信息管理,总体任务是实现学生信息关系的系统化、科学化、规范化和自动化,其主要任务是用计算机对学生各种信息进行日常管理,如查询、修改、增加、删除,另外还考虑到学生选课,针对这些要求设计了学生信息管理系统。用VB 6.0敲了一下,总结如下:

    模块:模块分类为标准模块,窗体模块,类模块,其作用除了声明常数、类型、变量和动态链接库 (DLL) 过程,还能实现公共代码的过程。

    '通过frmLogin窗体打开frmMain
    Sub main()
        Dim fLogin As New frmLogin
        fLogin.Show vbModal                 '模式窗体 show vbmodal
        If Not fLogin.OK Then
            End
        End If
        Unload fLogin
        
        Set fmainform = New frmMain
        fmainform.Show
        
    End Sub
    '判断输入框有没有内容
    Public Function Testtxt(txt As String) As Boolean
        If Trim(txt) = "" Then
            Testtxt = False
        Else
            Testtxt = True
        End If
        
    End Function
    '连接指定的dsn文件
    Public Function ConnectString() As String
        ConnectString = "filedsn=student.dsn;uid=sa;pwd=123"
    End Function
    '通过dsn连接指定的数据库
    Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset

                                                                                                                                                                                                                       登录窗体:可以联系到我们原来做的红皮书的五个例子。

    《数据库开发经典五例总结》:http://haovip123.blog.163.com/blog/static/21110818620135166262142/

    主界面:主界面设计主要用了菜单编辑器和StatusBar控件,其代码比较简单。

    添加数据:在判断完输入文本框等不为空,不重复后,使用数据库添加语句:

    '把相关数据添加进数据库并更新
        mrc.AddNew
        mrc.Fields(0) = Trim(txtcourseno.Text)
        mrc.Fields(1) = Trim(txtCoursename.Text)
        mrc.Fields(2) = Trim(ComboCoursetype.Text)
        mrc.Fields(3) = Trim(txtCoursedes.Text)
        mrc.Update
        mrc.Close
        

    修改数据:把原数据库记录删除(mrc.Delete)以后,添加数据

    删除数据

    Private Sub deleteCommand_Click()
        Dim tankuang As String
        
        mybookmark = mrc.Bookmark   '对要删除的数据做标记
        tankuang = MsgBox("是否确认删除当前记录?")
        If tankuang = vbOK Then
        
            mrc.MoveNext    '数据库中记录向后移动一项
        
            If mrc.EOF Then     '判断被删除的记录是否为最后一项
                mrc.MoveFirst   '如果是最后一条的话,数据库指向第一条记录
                mybookmark = mrc.Bookmark   '对第一条记录进行标记
                mrc.MoveLast    '数据库记录指向最后一条,即被选中要删除项
                mrc.Delete      '删除
                mrc.Bookmark = mybookmark       '把标记的记录送给数据库书签
                Call viewData
            Else
                mybookmark = mrc.Bookmark
                mrc.MovePrevious
                mrc.Delete
                mrc.Bookmark = mybookmark
                Call viewData
            End If
        Else
            mrc.Bookmark = mybookmark
            Call viewData
        End If
             
    End Sub

    查询记录:MSHFlexGrid 控件的使用,及其与数据集的关联

    With MSHFlexGrid1
            .Rows = 2               '默认其行数为2
            .CellAlignment = 4      '单元格的内容居中、居中对齐。
            .TextMatrix(1, 0) = "考试编号"      '命名每一列的列标题
            .TextMatrix(1, 1) = "学号"
            .TextMatrix(1, 2) = "姓名"
            .TextMatrix(1, 3) = "班号"
            .TextMatrix(1, 4) = "课程名称"
            .TextMatrix(1, 5) = "分数"
            
            '循环语句,当数据库中有对应条件的记录时,将对应记录赋给MSHFlexGrid1
            Do While Not mrc.EOF
                .Rows = .Rows + 1
                .CellAlignment = 4
                .TextMatrix(.Rows - 1, 0) = mrc.Fields(0)
                .TextMatrix(.Rows - 1, 1) = mrc.Fields(1)
                .TextMatrix(.Rows - 1, 2) = mrc.Fields(2)
                .TextMatrix(.Rows - 1, 3) = mrc.Fields(3)
                .TextMatrix(.Rows - 1, 4) = mrc.Fields(4)
                .TextMatrix(.Rows - 1, 5) = mrc.Fields(5)
                mrc.MoveNext
            Loop
            
        End With


    学生选课窗体:注意ListBox 控件各属性和正确使用,注意年级、班级和课程直接的相互关联。

    值得注意的一点,排除重复的选课。

    If ListAllcourse.ListIndex <> -1 Then
            '排除重复选课,同一样的课不会选两次
            For i = 0 To ListSelectcourse.ListCount - 1
                If ListAllcourse.List(ListAllcourse.ListIndex) = ListSelectcourse.List(i) Then
                    MsgBox "所选课程重复,请重新选择", vbOKOnly + vbExclamation, "警告"
                    Exit Sub                                   '退出循环
                End If
            Next i
            ListSelectcourse.AddItem ListAllcourse.List(ListAllcourse.ListIndex)
     End If



    展开全文
  • 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

    展开全文
  • 学生信息管理系统——C语言版

    万次阅读 多人点赞 2019-04-06 18:07:13
    1)查询学生信息 2)添加学生信息 3)修改学生信息 4)删除学生信息 5)刷新学生信息 6)保存学生信息 7)输出当前学生信息 2.题目要求: 1)使用结构体建立学生信息体制 2)实现七大基本功能 3)采用文件存储学生...

    一.题目分析:
    1.功能概述:
    1)查询学生信息
    2)添加学生信息
    3)修改学生信息
    4)删除学生信息
    5)刷新学生信息
    6)保存学生信息
    7)输出当前学生信息
    2.题目要求:
    1)使用结构体建立学生信息体制
    2)实现七大基本功能
    3)采用文件存储学生信息
    二.算法构造
    1.难点解析----对文件的操作
    1.1文件读取

    FILE * fp;
    	if ((fp = fopen(filename, "r")) == NULL) return 0;
    	//从文件读取信息 
    	while (fscanf(fp, "%s %s %s %d %d %d %d ", &stu[j].StudentId, &stu[j].StudentName, &stu[j].StudentAge, &stu[j].StudentSex, &stu[j].score[0], &stu[j].score[1], &stu[j].score[2]) == 7) {
    		j++;
    	}
    

    1.2文件写入

    FILE * fp;
    fp = fopen(filename, "w");
    	for (i = 0; i < n; i++){
    		fprintf(fp, "%s%s%d%c%.lf%.lf%.lf\n", stu[i].StudentId, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex,
    			stu[i].score[0], stu[i].score[1], stu[i].score[2]);
    	}
    

    2.流程图
    在这里插入图片描述
    3.七大基本功能----函数实现
    3.1菜单函数:通过菜单建立用户与程序之间的交流

    void menu()/* 界面*/
    {
    	int num;
    	printf(" \n\n                    \n\n");
    	printf("  ******************************************************\n\n");
    	printf("  *                学生信息管理系统                    *\n \n");
    	printf("  ******************************************************\n\n");
    	printf("*********************系统功能菜单*************************       \n");
    	printf("     ----------------------   ----------------------   \n");
    	printf("     *********************************************     \n");
    	printf("     * 0.系统帮助及说明  * *  1.刷新学生信息   *     \n");
    	printf("     *********************************************     \n");
    	printf("     * 2.查询学生信息    * *  3.修改学生信息   *     \n");
    	printf("     *********************************************     \n");
    	printf("     * 4.增加学生信息    * *  5.按学号删除信息 *     \n");
    	printf("     *********************************************     \n");
    	printf("     * 6.显示当前信息    * *  7.保存当前学生信息*     \n");
    	printf("     ********************** **********************     \n");
    	printf("     * 8.退出系统        *                            \n");
    	printf("     **********************                            \n");
    	printf("     ----------------------   ----------------------                           \n");
    	printf("请选择菜单编号:");
    	scanf("%d", &num);
    	switch (num)
    	{
    	case 0:help(); break;
    	case 1:flush(); break;
    	case 2:seek(); break;
    	case 3:modify(); break;
    	case 4:insert(); break;
    	case 5:del(); break;
    	case 6:display(); break;
    	case 7:save(); break;
    	case 8:
    		k = 0; 
    		printf("即将退出程序!\n");
    		break;
    	default:printf("请在0-8之间选择\n");
    	}
    }
    

    3.2系统帮助与说明函数:适用于初次接触学生信息管理系统的用户参考

    void help()
    {
    	printf("\n0.欢迎使用系统帮助!\n");
    	printf("\n1.初次进入系统后,请先选择增加学生信息;\n");
    	printf("\n2.按照菜单提示键入数字代号;\n");
    	printf("\n3.增加学生信息后,切记保存;\n");
    	printf("\n4.谢谢您的使用!\n");
    }
    

    3.3刷新学生信息函数
    功能:调用刷新信息函数后,文件中再无学生信息

    int flush(){
    	char filename[LEN + 1];
    	int i = 0;
    	printf("请输入要刷新学生信息的文件名:\n");
    	scanf("%s", filename);
    	int j = 0;
    	FILE * fp;
    	if ((fp = fopen(filename, "r")) == NULL) return 0;
    	//从文件读取信息 
    	while (fscanf(fp, "%s %s %s %d %d %d %d ", &stu[j].StudentId, &stu[j].StudentName, &stu[j].StudentAge, &stu[j].StudentSex, &stu[j].score[0], &stu[j].score[1], &stu[j].score[2]) == 7) {
    		j++;
    	}
    	n = j;
    	printf("刷新成功!!!");
    	return n;
    }
    
    

    3.4查询学生信息函数
    功能:通过输入要查询的学生学号或者姓名,与系统中的学生信息进行对比,若相等,则输出该学生的基本信息;反之,则输出该学生在该管理系统中不存在
    查询方式:
    1)按照学号查询
    2)按照姓名查询

    void seek() /*查找*/
    {
    	int i, item, flag;
    	char s1[21]; /* 以姓名和学号最长长度+1为准*/
    	printf("------------------\n");
    	printf("-----1.按学号查询-----\n");
    	printf("-----2.按姓名查询-----\n");
    	printf("-----3.退出本菜单-----\n");
    	printf("------------------\n");
    	while (1)
    	{
    		printf("请选择子菜单编号:");
    		scanf("%d", &item);
    		flag = 0;
    		switch (item)
    		{
    		case 1:
    			printf("请输入要查询的学生的学号:\n");
    			scanf("%s", s1);
    			for (i = 0; i<n; i++)
    			if (strcmp(s1,stu[i].StudentId) == 0)
    			{
    				flag = 1;
    				printf("学生学号\t学生姓名\t年龄\t性别\tC语言成绩\t高等数学\t大学英语成绩\n");
    				printf("--------------------------------------------------------------------\n");
    				printf("%s\t%s\t%d\t%6\t%.1f\t%.1f\t%.1f\n", stu[i].StudentId,stu[i].StudentName,stu[i].StudentAge,stu[i].StudentSex,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
    			}
    			if (0 == flag)
    				printf("该学号不存在!\n"); break;
    		case 2:
    			printf("请输入要查询的学生的姓名:\n");
    			scanf("%s", s1);
    			for (i = 0; i<n; i++)
    			if (strcmp(stu[i].StudentName, s1) == 0)
    			{
    				flag = 1;
    				printf("学生学号\t学生姓名\t年龄\t性别\tC语言成绩\t高等数学\t大学英语成绩\n");
    				printf("--------------------------------------------------------------------\n");
    				printf("%s\t%s\t%d\t%c\t%.1f\t%.1f\t%.1f\n", stu[i].StudentId, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
    			}
    			if (0 == flag)
    				printf("该姓名不存在!\n"); break;
    		case 3:return;
    		default:printf("请在1-3之间选择\n");
    		}
    	}
    }
    

    3.5修改学生信息
    功能:通过输入学号来选择要修改的该学号学生的信息内容,从而完成修改信息操作;

    //修改学生信息
    void modify() /*修改信息*/
    {
    	int i, item, num = -1;
    	char sex1, s1[LEN + 1], s2[LEN + 1]; /* 以姓名和学号最长长度+1为准*/
    	float score1;
    	printf("请输入要要修改的学生的学号:\n");
    	scanf("%s", s1);
    	for (i = 0; i < n; i++){
    		if (strcmp(stu[i].StudentId, s1) == 0){/*比较字符串是否相等*/
    			num = i;
    			printf("------------------\n");
    			printf("1.修改姓名\n");
    			printf("2.修改年龄\n");
    			printf("3.修改性别\n");
    			printf("4.修改C语言成绩\n");
    			printf("5.修改高等数学成绩\n");
    			printf("6.修改大学英语成绩\n");
    			printf("7.退出本菜单\n");
    			printf("------------------\n");
    			while (1)
    			{
    				printf("请选择子菜单编号:");
    				scanf("%d", &item);
    				switch (item)
    				{
    				case 1:
    					printf("请输入新的姓名:\n");
    					scanf("%s", s2);
    					strcpy(stu[num].StudentName, s2);
    					break;
    				case 2:
    					printf("请输入新的年龄:\n");
    					scanf("%d", stu[num].StudentAge);
    					break;
    				case 3:
    					printf("请输入新的性别:\n");
    					scanf("%s", &sex1);
    					stu[i].StudentSex = sex1;
    					break;
    				case 4:
    					printf("请输入新的C语言成绩:\n");
    					scanf("%f", &score1);
    					stu[num].score[0] = score1;
    					break;
    				case 5:
    					printf("请输入新的高等数学成绩:\n");
    					scanf("%f", &score1);
    					stu[num].score[1] = score1;
    					break;
    				case 6:
    					printf("请输入新的大学英语成绩:\n");
    					scanf("%f", &score1);
    					stu[num].score[2] = score1;
    					break;
    				case 7:	return;
    				default:printf("请在1-7之间选择\n");
    				}
    			}
    			printf("修改完毕!请及时保存!\n");
    		}
    		else{
    			printf("没有该学生学号!!!");
    		}
    	}
    }
    

    3.6添加学生信息函数
    功能:添加学生信息,并保存至文件中

    //添加学生信息函数
    void insert() /*插入函数*/
    {
    	int i = n, j, flag;
    	printf("请输入待增加的学生数:\n");
    	scanf("%d", &m);
    	if (m > 0){
    		do
    		{
    			flag = 1;
    			while (flag)
    			{
    				flag = 0;
    				printf("请输入第%d位学生的学号:\n", i + 1);
    				scanf("%s", stu[i].StudentId);
    				for (j = 0; j < i; j++){
    					if (strcmp(stu[i].StudentId, stu[j].StudentId) == 0){
    						printf("该学号已存在,请重新输入!\n");
    						flag = 1;
    						break;
    					}
    				}
    			}
    			printf("请输入第%d 个学生的姓名:\n", i+1);
    			scanf("%s", stu[i].StudentName);
    			printf("请输入第%d 个学生的年龄:\n", i+1);
    			scanf("%d", &stu[i].StudentAge);
    			printf("请输入第%d 个学生的性别:\n", i+1);
    			scanf(" %c", &stu[i].StudentSex);
    			printf("请输入第%d 个学生的C语言成绩\n",i+1);
    			scanf("%f", &stu[i].score[0]);
    			printf("请输入第%d 个学生的高等数学成绩:\n", i+1);
    			scanf("%f", &stu[i].score[1]);
    			printf("请输入第%d 个学生的大学英语成绩:\n", i+1);
    			scanf("%f", &stu[i].score[2]);
    			if (0 == flag){
    				i++;
    			}
    		} while (i<n + m);
    	}
    		n += m;
    		printf("学生信息增加完毕!!!\n");
    		system("pause");
    }
    

    3.7删除学生信息函数
    功能:通过输入要删除学生信息的学号,删除该学生在该管理系统中的所有信息;

    //删除学生信息函数
    void del()
    {
    	int i, j, flag = 0;
    	char s1[LEN + 1];
    	printf("请输入要删除学生的学号:\n");
    	scanf("%s", s1);
    	for (i = 0; i < n; i++){
    		if (strcpy(stu[i].StudentId, s1) == 0){
    			flag = 1;
    			//要删除学生后面的学生往前移一位
    			for (j = i; j < n - 1; j++){
    				stu[j] = stu[j + 1];
    			}
    		}
    	}
    		//查找失败
    		if (0 == flag){
    			printf("该学号不存在!!!\n");
    		}
    		if (1 == flag){
    			printf("删除成功!!!");
    			//删除成功,学生人数减1
    			n--;
    		}
    		system("pause");
    }
    

    3.8显示当前学生信息
    功能:可以输出进行多种操作后的学生信息管理系统中的所有学生信息;

    //显示全部数据信息
    void display()
    {
    	int i;
    	printf("共有%d位学生的信息:\n", n);
    	if (0 != n)
    	{
    		printf("学生学号 \t学生姓名 \t年龄   \t性别   \tC语言成绩\t高等数学 \t大学英语成绩\n");
    		printf("--------------------------------------------------------------------\n");
    		for (i = 0; i<n; i++)
    		{
    			printf("%s \t%s \t%d   \t%c   \t%.1f\t%.1f \t%.1f\n", stu[i].StudentId, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex, stu[i].score[0],stu[i].score[1],stu[i].score[2]);
    		}
    	}
    	system("pause");
    }
    

    3.8保存学生信息
    功能:将进行某些操作后的学生信息保存到指定文件中

    void save(){
    	int i;
    	FILE *fp;
    	char filename[LEN + 1];
    	printf("请输入要保存的文件名:\n");
    	scanf("%s", filename);
    	fp = fopen(filename, "w");
    	for (i = 0; i < n; i++){
    		fprintf(fp, "%s%s%d%c%.lf%.lf%.lf\n", stu[i].StudentId, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex,
    			stu[i].score[0], stu[i].score[1], stu[i].score[2]);
    	}
    	printf("保存成功!!!\n");
    	fclose(fp);
    	system("pause");
    }
    
    

    三.源程序代码

    #define _CRT_SECURE_NO_WARNINGS 1
    #include<stdio.h>	/*I/O函数*/
    #include<stdlib.h>	/*其它说明*/
    #include<string.h>	/*字符串函数*/
    
    #define LEN 15		/* 学号和姓名最大字符数,实际请更改*/
    #define N 50		/* 最大学生人数,实际请更改*/
    
    int k = 1, n = 0, m = 0;/* n代表当前记录的学生人数*/
    
    //函数声明
    void readfile();
    void seek();
    void modify();
    void insert();
    void del();
    void display();
    void save();
    void menu();
    
    //结构体保存学生信息
    struct student{
    	char StudentId[LEN+1];
    	char StudentName[LEN+1];
    	int StudentAge;
    	char StudentSex;
    	float score[3];
    }stu[N];
    
    //主函数
    int main()
    {
    	while (k)
    	{
    		menu();
    	}
    	system("pause");
    	return 0;
    }
    
    //系统帮助函数
    void help()
    {
    	printf("\n0.欢迎使用系统帮助!\n");
    	printf("\n1.初次进入系统后,请先选择增加学生信息;\n");
    	printf("\n2.按照菜单提示键入数字代号;\n");
    	printf("\n3.增加学生信息后,切记保存;\n");
    	printf("\n4.谢谢您的使用!\n");
    }
    
    //刷新文件
    int flush(){
    	char filename[LEN + 1];
    	int i = 0;
    	printf("请输入要刷新学生信息的文件名:\n");
    	scanf("%s", filename);
    	int j = 0;
    	FILE * fp;
    	if ((fp = fopen(filename, "r")) == NULL) return 0;
    	//从文件读取信息 
    	while (fscanf(fp, "%s %s %s %d %d %d %d ", &stu[j].StudentId, &stu[j].StudentName, &stu[j].StudentAge, &stu[j].StudentSex, &stu[j].score[0], &stu[j].score[1], &stu[j].score[2]) == 7) {
    		j++;
    	}
    	n = j;
    	printf("刷新成功!!!");
    	return n;
    }
    
    //查找学生信息
    void seek() /*查找*/
    {
    	int i, item, flag;
    	char s1[21]; /* 以姓名和学号最长长度+1为准*/
    	printf("------------------\n");
    	printf("-----1.按学号查询-----\n");
    	printf("-----2.按姓名查询-----\n");
    	printf("-----3.退出本菜单-----\n");
    	printf("------------------\n");
    	while (1)
    	{
    		printf("请选择子菜单编号:");
    		scanf("%d", &item);
    		flag = 0;
    		switch (item)
    		{
    		case 1:
    			printf("请输入要查询的学生的学号:\n");
    			scanf("%s", s1);
    			for (i = 0; i<n; i++)
    			if (strcmp(s1,stu[i].StudentId) == 0)
    			{
    				flag = 1;
    				printf("学生学号\t学生姓名\t年龄\t性别\tC语言成绩\t高等数学\t大学英语成绩\n");
    				printf("--------------------------------------------------------------------\n");
    				printf("%s\t%s\t%d\t%6\t%.1f\t%.1f\t%.1f\n", stu[i].StudentId,stu[i].StudentName,stu[i].StudentAge,stu[i].StudentSex,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
    			}
    			if (0 == flag)
    				printf("该学号不存在!\n"); break;
    		case 2:
    			printf("请输入要查询的学生的姓名:\n");
    			scanf("%s", s1);
    			for (i = 0; i<n; i++)
    			if (strcmp(stu[i].StudentName, s1) == 0)
    			{
    				flag = 1;
    				printf("学生学号\t学生姓名\t年龄\t性别\tC语言成绩\t高等数学\t大学英语成绩\n");
    				printf("--------------------------------------------------------------------\n");
    				printf("%s\t%s\t%d\t%c\t%.1f\t%.1f\t%.1f\n", stu[i].StudentId, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
    			}
    			if (0 == flag)
    				printf("该姓名不存在!\n"); break;
    		case 3:return;
    		default:printf("请在1-3之间选择\n");
    		}
    	}
    }
    
    //修改学生信息
    void modify() /*修改信息*/
    {
    	int i, item, num = -1;
    	char sex1, s1[LEN + 1], s2[LEN + 1]; /* 以姓名和学号最长长度+1为准*/
    	float score1;
    	printf("请输入要要修改的学生的学号:\n");
    	scanf("%s", s1);
    	for (i = 0; i < n; i++){
    		if (strcmp(stu[i].StudentId, s1) == 0){/*比较字符串是否相等*/
    			num = i;
    			printf("------------------\n");
    			printf("1.修改姓名\n");
    			printf("2.修改年龄\n");
    			printf("3.修改性别\n");
    			printf("4.修改C语言成绩\n");
    			printf("5.修改高等数学成绩\n");
    			printf("6.修改大学英语成绩\n");
    			printf("7.退出本菜单\n");
    			printf("------------------\n");
    			while (1)
    			{
    				printf("请选择子菜单编号:");
    				scanf("%d", &item);
    				switch (item)
    				{
    				case 1:
    					printf("请输入新的姓名:\n");
    					scanf("%s", s2);
    					strcpy(stu[num].StudentName, s2);
    					break;
    				case 2:
    					printf("请输入新的年龄:\n");
    					scanf("%d", stu[num].StudentAge);
    					break;
    				case 3:
    					printf("请输入新的性别:\n");
    					scanf("%s", &sex1);
    					stu[i].StudentSex = sex1;
    					break;
    				case 4:
    					printf("请输入新的C语言成绩:\n");
    					scanf("%f", &score1);
    					stu[num].score[0] = score1;
    					break;
    				case 5:
    					printf("请输入新的高等数学成绩:\n");
    					scanf("%f", &score1);
    					stu[num].score[1] = score1;
    					break;
    				case 6:
    					printf("请输入新的大学英语成绩:\n");
    					scanf("%f", &score1);
    					stu[num].score[2] = score1;
    					break;
    				case 7:	return;
    				default:printf("请在1-7之间选择\n");
    				}
    			}
    			printf("修改完毕!请及时保存!\n");
    		}
    		else{
    			printf("没有该学生学号!!!");
    		}
    	}
    }
    
    void sort()//按学号排序
    {
    	int i, j, k, *p, *q, s;
    	char temp[LEN + 1], ctemp;
    	float ftemp;
    	for (i = 0; i<n - 1; i++)
    	{
    		for (j = n - 1; j>i; j--)
    		if (strcmp(stu[j - 1].StudentId, stu[j].StudentId)>0)
    		{
    			strcpy(temp, stu[j - 1].StudentId);
    			strcpy(stu[j - 1].StudentId, stu[j].StudentId);
    			strcpy(stu[j].StudentId, temp);
    			strcpy(temp, stu[j - 1].StudentName);
    			strcpy(stu[j - 1].StudentName, stu[j].StudentName);
    			strcpy(stu[j].StudentName, temp);
    			ctemp = stu[j - 1].StudentSex;
    			stu[j - 1].StudentSex = stu[j].StudentSex;
    			stu[j].StudentSex = ctemp;
    			p = &stu[j - 1].StudentAge;
    			q = &stu[j].StudentAge;
    			s = *q;
    			*q = *p;
    			*p = s;
    			for (k = 0; k<3; k++)
    			{
    				ftemp = stu[j - 1].score[k];
    				stu[j - 1].score[k] = stu[j].score[k];
    				stu[j].score[k] = ftemp;
    			}
    		}
    	}
    }
    
    //添加学生信息函数
    void insert() /*插入函数*/
    {
    	int i = n, j, flag;
    	printf("请输入待增加的学生数:\n");
    	scanf("%d", &m);
    	if (m > 0){
    		do
    		{
    			flag = 1;
    			while (flag)
    			{
    				flag = 0;
    				printf("请输入第%d位学生的学号:\n", i + 1);
    				scanf("%s", stu[i].StudentId);
    				for (j = 0; j < i; j++){
    					if (strcmp(stu[i].StudentId, stu[j].StudentId) == 0){
    						printf("该学号已存在,请重新输入!\n");
    						flag = 1;
    						break;
    					}
    				}
    			}
    			printf("请输入第%d 个学生的姓名:\n", i+1);
    			scanf("%s", stu[i].StudentName);
    			printf("请输入第%d 个学生的年龄:\n", i+1);
    			scanf("%d", &stu[i].StudentAge);
    			printf("请输入第%d 个学生的性别:\n", i+1);
    			scanf(" %c", &stu[i].StudentSex);
    			printf("请输入第%d 个学生的C语言成绩\n",i+1);
    			scanf("%f", &stu[i].score[0]);
    			printf("请输入第%d 个学生的高等数学成绩:\n", i+1);
    			scanf("%f", &stu[i].score[1]);
    			printf("请输入第%d 个学生的大学英语成绩:\n", i+1);
    			scanf("%f", &stu[i].score[2]);
    			if (0 == flag){
    				i++;
    			}
    		} while (i<n + m);
    	}
    		n += m;
    		printf("学生信息增加完毕!!!\n");
    		system("pause");
    }
    
    //删除学生信息函数
    void del()
    {
    	int i, j, flag = 0;
    	char s1[LEN + 1];
    	printf("请输入要删除学生的学号:\n");
    	scanf("%s", s1);
    	for (i = 0; i < n; i++){
    		if (strcpy(stu[i].StudentId, s1) == 0){
    			flag = 1;
    			//要删除学生后面的学生往前移一位
    			for (j = i; j < n - 1; j++){
    				stu[j] = stu[j + 1];
    			}
    		}
    	}
    		//查找失败
    		if (0 == flag){
    			printf("该学号不存在!!!\n");
    		}
    		if (1 == flag){
    			printf("删除成功!!!");
    			//删除成功,学生人数减1
    			n--;
    		}
    		system("pause");
    }
    
    //显示全部数据信息
    void display()
    {
    	int i;
    	printf("共有%d位学生的信息:\n", n);
    	if (0 != n)
    	{
    		printf("学生学号 \t学生姓名 \t年龄   \t性别   \tC语言成绩\t高等数学 \t大学英语成绩\n");
    		printf("--------------------------------------------------------------------\n");
    		for (i = 0; i<n; i++)
    		{
    			printf("%s \t%s \t%d   \t%c   \t%.1f\t%.1f \t%.1f\n", stu[i].StudentId, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex, stu[i].score[0],stu[i].score[1],stu[i].score[2]);
    		}
    	}
    	system("pause");
    }
    
    void save(){
    	int i;
    	FILE *fp;
    	char filename[LEN + 1];
    	printf("请输入要保存的文件名:\n");
    	scanf("%s", filename);
    	fp = fopen(filename, "w");
    	for (i = 0; i < n; i++){
    		fprintf(fp, "%s%s%d%c%.lf%.lf%.lf\n", stu[i].StudentId, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex,
    			stu[i].score[0], stu[i].score[1], stu[i].score[2]);
    	}
    	printf("保存成功!!!\n");
    	fclose(fp);
    	system("pause");
    }
    
    void menu()/* 界面*/
    {
    	int num;
    	printf(" \n\n                    \n\n");
    	printf("  ******************************************************\n\n");
    	printf("  *                学生信息管理系统                    *\n \n");
    	printf("  ******************************************************\n\n");
    	printf("*********************系统功能菜单*************************       \n");
    	printf("     ----------------------   ----------------------   \n");
    	printf("     *********************************************     \n");
    	printf("     * 0.系统帮助及说明  * *  1.刷新学生信息   *     \n");
    	printf("     *********************************************     \n");
    	printf("     * 2.查询学生信息    * *  3.修改学生信息   *     \n");
    	printf("     *********************************************     \n");
    	printf("     * 4.增加学生信息    * *  5.按学号删除信息 *     \n");
    	printf("     *********************************************     \n");
    	printf("     * 6.显示当前信息    * *  7.保存当前学生信息*     \n");
    	printf("     ********************** **********************     \n");
    	printf("     * 8.退出系统        *                            \n");
    	printf("     **********************                            \n");
    	printf("     ----------------------   ----------------------                           \n");
    	printf("请选择菜单编号:");
    	scanf("%d", &num);
    	switch (num)
    	{
    	case 0:help(); break;
    	case 1:flush(); break;
    	case 2:seek(); break;
    	case 3:modify(); break;
    	case 4:insert(); break;
    	case 5:del(); break;
    	case 6:display(); break;
    	case 7:save(); break;
    	case 8:
    		k = 0; 
    		printf("即将退出程序!\n");
    		break;
    	default:printf("请在0-8之间选择\n");
    	}
    }
    

    四.调试、测试以及实验结果
    1.调试:
    在这里插入图片描述
    2.测试:
    输入数据类型与定义时不符合,程序运行过程中会出现错误
    在这里插入图片描述
    3.实验结果:
    (1)~(9)是一个连续的运行实验结果
    (1)运行菜单
    在这里插入图片描述
    (2)添加学生信息
    在这里插入图片描述
    (3)保存学生信息
    在这里插入图片描述

    (4)显示全部信息
    在这里插入图片描述

    (5)修改学生信息
    在这里插入图片描述

    (6)显示修改后全部信息
    在这里插入图片描述

    (7)刷新学生信息
    在这里插入图片描述

    (8)保存学生信息
    在这里插入图片描述

    (9)显示刷新后的全部信息
    在这里插入图片描述
    五、总结:
    编写一个功能齐全的、方便用户操作的学生管理系统,需要长期的实践与积累。
    实践时检验的好办法,学到的知识经过实践的检验,才能更好的被自身吸收。文件的操作的程序编写应用对我来说,是一个没有经过多次实践的问题,所以我在写这部分程序时,还是有些难度。该程序中还存在一个问题就是,当输入一个与定义时不符的数据,程序在运行过程中会出现错误,修改办法还在思考,欢迎大家来与我互相共勉。

    展开全文
  • C++ 学生信息管理系统课程设计报告

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

    一、问题描述

    学生信息管理系统设计
    学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计学生信息管理系统,使之能提供以下功能:
    系统以菜单方式工作
    1、学生信息录入功能(学生信息用文件保存)输入
    2、学生信息浏览功能—输出
    3、查询、排序功能—算法
    按学号查询
    按姓名查询
    4、学生信息的删除与修改

    二、需求分析和概要设计

    题目要求之做一个学生信息管理系统,并且一菜单的形式完成,

    CAboutDlg是“关于”界面的设计;
    CAddDlg是学生信息录入功能界面的设计,并且实现学生消息添加;
    CChangeDlg是学生信息的修改功能界面的设计;
    CDisplayView和CSelectDlg在主窗口上个的两个静态拆分窗口;
    CInfoDlg是学生信息浏览功能界面的实现设计;
    CInfoFile是存放学生信息的类,里面有学生属性,还有一些调用函数;
    CLoginDlg登录窗口界面的设计;
    CMainFrame是主窗口的设计;
    CSearchDlg是学生信息查询界面的设计;
    CSortDlg是学生信息排序界面的设计;
    CstuinfoApp是应用程序类;
    CUserDlg是个人信息界面的设计。

    三、功能模块描述和设计思路

    首先就是学生信息的录入,要求将信息用文件保存,在这里我设计了一个类CInfoFile,构建了一个结构体msg里面有8个成员变量分别是id,name,age,sex,birthday,place,phone,mail,分别表示学号,姓名,年龄,性别,出生年月,地址,电话,E-mail,除了id(自加,且唯一),age是int类型,其他都是string类型,同时CInfoFile里面还有成员函数ReadDocline、WirteDocline分别向程序里面读数据和写入数据,还有负责添一条数据的成员函数Addline()可以添加一条信息,同时我将学生的信息有list容器存放。这个添加信息的界面我设计了一个CCAddDlg类,继承CFormView类,里面不需要填加学号,只需要输入其他七个变量即可,通过编辑框来接收用户输入的信息。

    其次是学生的浏览,我设计了一个CInfoDlg类,它是有CFormView类继承而来的,通过重写OnInitialUpdate();函数来实现界面的初始化,我是用一个List Control控件来显示信息的,当然就要引用CInfoFile的头文件,将文本信息读入,然后在展示出来,大体思路就是这样。

    然后我是先做查询的,因为这有做了查询才能删除和修改,查询我也是按照学号查询和姓名查询,在这里我设计了一个CSearchDlg类,它是有CFormView类继承而来的,也要应用CInfoFile类完成对文件的读写,同时在这个选择方式上,我用了一个下拉框,Combo Box控件来实现选择,查询出来的信息在右边的实例编辑框中展示出来,然后对编辑框进行一些属性的调整,例如可下滑(当文本长度过长时可下滑)、可换行、只读,然后学号和姓名都设置可输入编辑框,只有当对应查询方式有效时才能进行查询,无效会有消息框弹出提示,若有效会进行查询将对应结果输出,无输出结果会有对应的提示框弹出,用MessageBox实现。还有一点需要注意的是按照名字查询的时候可能会出现同名的要将其输出。

    然后我做了删除和修改,这是用按照学号查询的方法来查询的,分别设计了CDelDlg类和CChangeDlg类,都是有CFormView类继承而来的,CDelDlg类的设计类似查询,也是左边输入搜索,右边输出数据,还有一点就是,点击删除按钮后会弹出二次确认,只有当选择确认时才会删除信息,防止误删。

    CChangDlg类的界面类似添加信息界面,但是多了一个学号的选项,这个学号的选项我是用Combo Box做的,原理类似查询的查讯方式选择框,这样就不会弹出未查询到该学号的报错了。在选择学号的时候,会有对应学号信息的提示,以便于对照信息增加可读性。

    最后我写的是排序,这里我新建了一个CSortDlg类,我是用一个List Control控件来完成这个功能的,我写了一个列表表头触发事件OnLvnColumnclickList1()函数、同时写了一个静态函数MyCompareProc()函数用来定义排序的方式,比如某列按照int类型排序,而有的按照CString类型排序。

    然后,我还自己写了一个登陆窗口,用CLoginDlg来实现的,它的父类是CDialogEx,在应用程序类CstuinfoApp的InitInstance()里面的APP创建之前创建登陆对话框只有登陆成功才能进入到主界面,在登录界面还有记录密码的功能,配有提示如密码错误,用户名不存在。还有就是登录到主窗口是会显示个人信息界面,这个我使用CUserDlg来实现的,里面包括修改密码的功能,确定密码。主窗口的设计CMainFrame类的设计,它是CFrameWnd的子类,在这里我还设计了一个右键菜单和快捷键的设计,还有就是关键的两个列CSelectView类和CDisplayView类,CSelectView继承于CTreeView,CDispalyView继承于CFormView,CSelectView类中初始化树视图,获取数的控件,添加树节点,透视对应的结点添加控制事件,OnTvnSelchanged(),来获得自定义消息,在主窗口界面挂载信息。

    四、具体实现过程

    1. 新建项目
      1.1. 根据向导创建项目
      首先,新建MFC项目(stuinfo),基于单文档,MFC标准项目。
      1.2. 添加预处理
      由于微软在VS2013中不建议再使用C/C++的传统库函数scanf,strcpy,sprintf等。
      VS建议采用带_s的函数,如scanf_s、strcpy_s,但这些并不是标准C/C++函数。要想继续使用此函数,需要添加 _CRT_SECURE_NO_WARNINGS这个预定义。
      在项目->属性->C/C+±>预处 ->预处理器定中添加 _CRT_SECURE_NO_WARNINGS,防止报错。
      1.3. 设置主窗口属性
      在CMainFrame的 OnCreate()中添加如下代码:
      在这里插入图片描述
      IDI_ICON_WIN 是自己导入图标。
      在这里插入图片描述
      可以在这里修改左侧标题
    2. 文件处理
      2.1. 文件内容处理和设计文件处理类
      Login.ini中登录用户的信息

    学生信息在stock.txt中

    添加CInfoFile.cpp和CInfoFile.h
    设计结构体格式

    设计类

    1. 登录窗口的设计
      添加控件

    添加类CLoginDlg :public CDialogEx

    重写OnInitDialog函数,判断登录情况进行初始化,通过rem.txt里面的内容来判断是否记住密码,如果是就初始化记住密码

    还有就是登录按钮的实现

    同时这里还有注意两个bug,1是直接点击输入框然后回车会进入主界面,2是直接点x会进入主界面。这里通过重写函数解决。

    这是取消按钮的代码:

    1. 静态拆分窗口
      自定义两个类:CSelectView和CDispalyView(它的基类必须是CFormView类)。
      CSelectView继承于CTreeView,CDispalyView继承于CFormView。
      1)CMainFrame类中,声明CSplitterWnd类型的对象:

    2. 树视图功能的添加
      加载图标,

    在CSelectView类中声明相应变量,

    然后重写CSelectView的OnInitUpdate函数

    在功能节点相应信息的处理:

    1)在CMainFrame 框架类中,添加自定义消息宏

    2)在CMainFrame框架类中添加自定义消息处理函数:
    //自定义消息处理函数

    afx_msg LRESULT OnMyChange(WPARAM wParam, LPARAM lParam);
    3)对应的.cpp定义其函数
    LRESULT CMainFrame::OnMyChange(WPARAM wParam, LPARAM lParam)
    {
    }
    

    4)在CMainFrame框架类BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间添加自定义消息入口,与自定义消息处理函数绑定。

    5)发送自定义信号:
    在CSelectView的OnTvnSelchanged函数中,发送自定义信号:

    在CMainFrame框架类OnMyChange函数中处理相应消息:

    运行结果:

    因为此时并没有挂载个人信息界面,所有不会有右边界面的内容,应该是未定义的初始化内容。
    6. 个人信息管理界面窗口的实现
    6.1. 界面设计

    设计界面,添加控件,并给控件添加变量

    重写函数

    1. 学生信息浏览窗口的实现
      7.1. 界面设计
      设计界面,添加控件,并给控件添加变量

    7.2. 功能的实现

    1. 学生信息添加窗口的实现
      8.1. 界面设计
      设计界面,添加控件,并给控件添加变量

    8.2. 功能实现

    1. 学生信息查询界面
      9.1. 界面设计
      设计界面,添加控件,并给控件添加变量

    9.2. 功能实现

    1. 学生信息删除界面
      10.1. 界面设计
      设计界面,添加控件,并给控件添加变量

    10.2. 功能实现

    1. 学生信息修改界面
      11.1. 界面设计
      设计界面,添加控件,并给控件添加变量

    11.2. 功能实现

    1. 学生信息排序界面
      12.1. 界面设计
      设计界面,添加控件,并给控件添加变量

    12.2. 功能实现

    1. 菜单栏的制作
      13.1. 菜单栏界面的设计

    2)右键菜单栏项,添加事件处理程序,选择COMMAND 消息类型,添加至CMainFrame框架类中
    添加函数
    在这里插入图片描述
    13.2. 右键菜单
    在这里插入图片描述

    五、收获与展望

    还有些图片不想放了,上传到资料了
    一会放链接
    最后的成品展示在

    链接: 视频录制的不好不介意.

    展开全文
  • 我的学生信息管理系统总结

    千次阅读 2014-06-14 23:54:36
    我的学生信息管理系统总结
  • 学生信息管理系统总结

    千次阅读 热门讨论 2017-09-24 19:51:41
    学生托了好长时间,错误也是接连不断的出现,但是在错误中也收获了很多,敲完所有的窗体代码才开始改的错误。这样是很不好的,每个窗体之间都有联系,可以说是牵一发而动全身,一个窗体出现错误也导致其他窗体出现...
  • 题目:基于链表的学生信息管理系统 要求:   (1)插入节点:输入学生信息后,生成节点并插入链表中;   (2)删除节点:根据给定的学生姓名或学号删除该学生节点;   (3)查找节点:根据给定的学生姓名或学号...
  • 对于学生信息管理系,先让我们做个大概的宏观导图。   在这个系统中,大概分为两大块内容,一是对于系统的管理、二是对于用户数据的管理。  系统管理中,主要涉及到的是用户名,及密码的管理,如:用户名、...
  • 基于php学生信息管理系统设计

    千次阅读 2019-04-13 23:42:47
    若干年前,各个学校的学生成绩管理基本上都是靠手工进行,随着学校的规模增大,有关学生信息管理工作所涉及的数据量越来越大,有的学校不得不靠增加人力、物力来进行学生信息管理。但手工管理具有效率底、易出错、检索...
  • Java课程设计学生信息管理系统

    千次阅读 多人点赞 2020-06-01 13:48:20
    课程设计目录一、问题描述二、基本要求三、需求分析四、概要设计1、类...如何实现一个功能简单的学生信息管理系统,能够对学生信息(包括照片)进行添加、删除、修改和查询等操作。 二、基本要求 实现一个功能简单的学
  • 学生信息管理系统-总结

    千次阅读 2018-08-04 16:58:51
    信息管理系统是集计算机技术、网络通信技术为一体的信息系统工程,它能够使运行的数据更加准确、及时、全面、详实。学生信息系统的总体任务使实现学生信息关系的系统化、规范化和自动化 。 上图就是该系统...
  • http://download.csdn.net/download/qq_36326947/9974229 代码下载地址:http://download.csdn.net/download/qq_36326947/9984118 csdn下载需要c币,没有c币可从微信公众号【无心有云】 发送【c语言学生信息管理系统】...
  • 学生信息管理系统总结(一)

    千次阅读 热门讨论 2016-06-01 14:19:36
    学生信息管理系统——自己接触到的第一个系统,我们要学着站在巨人的肩膀上学习,所以这个系统基本是照着源码敲下来的,但是源码中也有错误,我很喜欢这样,源码里的核心知识以及错误正式我们要学习的地方,所以感觉...
  • java+mysql实现学生信息管理系统 数据库课程设计 包含完整的文档一篇(字数4300+)+项目源码+数据库,末尾有下载地址 目录 一、背景及意义............................................... 4 1.引言............
  • 随着计算机技术的飞速发展,高校也...然后是系统设计阶段主要完成了功能模块的划分、阐述了系统设计的思想、数据库的设计和系统设计的工具及技术。该阶段对本系统各个模块的功能进行了详细设计,形成了本系统的功能模块
  • [Python] 学生信息管理系统 总结

    千次阅读 2021-01-22 14:51:26
    [Python] 学生信息管理系统 总结 需求分析:学生信息管理系统的功能 模块调用: 总体展示 def menu(): # 菜单显示 pass def main(): # 主程序 pass def insert(): # 插入学生信息 pass def save(lst): # ...
  • 上海某高校拟开发一套高校信息管理系统,该系统包括学生档案管理、学生成绩管理、教员信息管理、教务排课等模块,实现学生档案录入、修改、查询,成绩录入、修改、查询,教务排课管理等功能。       ...
  • C语言学生成绩信息管理系统课程设计报告

    万次阅读 多人点赞 2016-10-07 22:19:22
    学生成绩管理系统 主要功能: (1)能按学期、按班级完成对学生成绩的录入、 修改,删除 (2)能按班级统计学生的成绩,求学生的总分及 平均分,并能根据学生的平均成绩进行排序 (3)能查询学生...
  • 学生信息管理系统验收总结

    千次阅读 多人点赞 2013-08-09 09:18:32
    学生信息管理系统(VB版)开工已有半个多月,如今已经验收完毕。在刚开始无从下手到第一次验收,再到修复bug,进行不断的优化,一直优化到现在的状态,无论是从思想上,还是从技术上,都获得了一次飞跃的成长。 ...
  • 基于VS Form窗体&SQL Server的学生信息管理系统设计

    千次阅读 热门讨论 2020-06-21 17:26:25
    数据库结构设计2.1数据库表2.2学生信息管理系统的E-R图3.软件运行演示4.功能介绍 1.设计思路介绍 本学生学籍管理系统采用前台应用程序结合后台SQL Server2016数据库的C/S架构的开发模式,运用C#语言为开发语言,通过...
  • 学生成绩管理系统设计》 二、实训目的 (1)掌握结构化程序设计的基本方法,基本掌握面向对象程序设计的基本思路和方法。 (2)掌握C++的基本概念和基础知识。 (3)通过训练能够读懂较为复杂的C++语言源程序...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,536
精华内容 15,014
关键字:

学生信息管理系统设计总结