基于 控制台 简易 学生信息管理系统 (增、删、改)

1、场景

      创建一个学生信息管理系统,具体要求如下:

1.1  数据需求

      学生信息包括:学号、姓名、年龄、性别、专业、班级。

1.2 基本功能需求(每组可以自行完善)

  •   学生信息添加(学生信息从键盘上输入,保存到磁盘文件)
  •   学生信息删除(按学号删除)
  •  学生信息查询(提供两种查询方式:按学号查询、按姓名查询,要求使用方法的重载实现)

2、系统设计

2.1 在新建控制台应用程序,项目名为StudentManagement

2.2 添加一个文件读写类FileAccessOperate,至少包括2个方法,文件的读方法和文件写方法。读方法设计时,需要用到集合类,将读取到的所有学生添加到该集合,例如arraylist;写方法设计时,注意每次向文件写入一行,即每个学生占去一行。        

using System;

using System.Linq;
using System.Text;
//using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace StudentManagement
{
    /*添加一个文件读写类FileAccess,至少包括2个方法,文件的读方法和文件写方法。
     * 读方法设计时,需要用到集合类,将读取到的所有学生添加到该集合,
     * 例如arraylist;写方法设计时,注意每次向文件写入一行,即每个学生占去一行。*/

    class FileAccessOperate
    {             
        static string txtDictionary=@"e:\01111104\";
        //写方法
        public void StuWrite(List<Student> stuList)
        {            
            string path = txtDictionary + "stu.dat";    //学生信息存储路径

            FileInfo fi = new FileInfo(path);

            //判断文件是否存在
            if (fi.Exists == false)
            {
                FileStream fs = new FileStream(path,FileMode.Create);
                fs.Close();
                fi = new FileInfo(path);
            }
            //判断文件是否为空,即是否是第一次序列化存储
            if (fi.Length > 0)
            {
                //如果不为空,即已经进行过序列化存储,需将之前存的信息,反序列化读取,添加到要存储的对象集,覆盖存储
                List<Student> StuListRead = StuRead();

                foreach (Student stu in StuListRead)
                {
                    stuList.Add(stu);
                }
            }

            Stream stream = new FileStream(path, FileMode.Create, FileAccess.Write);
            BinaryFormatter bf = new BinaryFormatter(); //创建序列化对象 

            //序列化
            bf.Serialize(stream, stuList);
            stream.Close();
        }

        //删除学生
        public void DeleteStu(int num)
        {           
            List<Student> stuList = StuRead();

            for (int i = 0; i < stuList.Count; i++)
            {
                if (stuList[i].StuNum == num)
                    stuList.Remove(stuList[i]);
            }

            string path = txtDictionary + "stu.dat";    //学生信息存储路径
            Stream stream = new FileStream(path, FileMode.Create, FileAccess.Write);
            BinaryFormatter bf = new BinaryFormatter(); //创建序列化对象 

            bf.Serialize(stream, stuList);
            stream.Close();
        }

        //读方法
        public List<Student> StuRead()
        {
            string path=txtDictionary+"stu.dat";    //学生信息存储路径
           
            FileStream stream = new FileStream(path,FileMode.Open,FileAccess.Read);
            BinaryFormatter bf = new BinaryFormatter(); //创建序列化对象
            List<Student> stuList;
                      
            stuList = bf.Deserialize(stream) as List<Student>;
            
            stream.Close();
            return stuList;
        }

    }
} 

 

2.3 添加一个学生类Student,该类封装学生的一些基本信息(学号、姓名、年龄等字段),重载一个带参数的构造函数,为学生的基本信息字段初始化。

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace StudentManagement
{
    /*
       添加一个学生类Student,该类封装学生的一些基本信息(学号、姓名、年龄等字段),
     * 重载一个带参数的构造函数,为学生的基本信息字段初始化。*/
    [Serializable]
    class Student
    {
        private int stuNum;  //学号

        public int StuNum
        {
            get { return stuNum; }
            set { stuNum = value; }
        }

        private string stuName;  //姓名

        public string StuName
        {
            get { return stuName; }
            set { stuName = value; }
        }

        private string stuSex;     //性别

        public string StuSex
        {
            get { return stuSex; }
            set { stuSex = value; }
        }

        private string stuMajor;    //专业

        public string StuMajor
        {
            get { return stuMajor; }
            set { stuMajor = value; }
        }

        private string stuClass;    //班级

        public string StuClass
        {
            get { return stuClass; }
            set { stuClass = value; }
        }
        
        //构造函数初始化
        public Student(int stuNum, string stuName, string stuSex, string stuMajor, string stuClass)
        {
            this.stuNum = stuNum;
            this.stuName = stuName;
            this.stuSex = stuSex;
            this.stuMajor = stuMajor;
            this.stuClass = stuClass;
        }
    }
}


2.4添加一个学生管理类StudentManger,主要包含以下几个方法:第一,添加学生信息方法;第二,显示所有学生信息方法;第三,计算身体质量指数BMI方法(计算方法:BMI=w/h2 ,w是以千克为单位的体重值,h是以米为单位的身高值。BMI的值在20至25之间是正常的)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace StudentManagement
{
    /*4.	添加一个学生管理类StudentManger,主要包含以下几个方法:
     * 第一,添加学生信息方法;
     * 第二,显示所有学生信息方法;
     * 第三,计算身体质量指数BMI方法
        (计算方法:BMI=w/h2,w是以千克为单位的体重值,h是以米为单位的身高值。BMI的值在20至25之间是正常的)*/
    class StudentManger
    {
        FileAccessOperate faOper = new FileAccessOperate();

        //添加学生信息方法
        public void AddStudent()
        {
            List<Student> stuList=new List<Student>();

            Console.Write("请输入要添加学生的人数:");
            int totalAdd = 0; //每次输入的学生数
            int count=0;  //记录一个输入的学生数
            //Student[] stuArr=new Student[100];  //记录学生的数组
            int stuNum; //学生属性,初始化
            string stuName,stuSex,stuMajor,stuClass;
         
            //判断输入是否正确           
            try
            {
                totalAdd = int.Parse(Console.ReadLine());
                if (totalAdd < 1)
                    throw new Exception();
            }
            catch
            {
                Console.WriteLine("请输入一个正整数");
            }

            while(totalAdd>0)
            {
                int countSort = count + 1;
                Console.Write("请输入第{0}学生的学号:", countSort);
                stuNum=int.Parse(Console.ReadLine());

                Console.Write("请输入第{0}学生的姓名:", countSort);
                stuName=Console.ReadLine();

                Console.Write("请输入第{0}学生的性别:", countSort);
                stuSex=Console.ReadLine();

                Console.Write("请输入第{0}学生的专业:", countSort);
                stuMajor=Console.ReadLine();

                Console.Write("请输入第{0}学生的班级:", countSort);
                stuClass=Console.ReadLine();

                List<Student> stuListQuery = new List<Student>();
                int isExist = 0;
                foreach (Student stu in stuListQuery)
                {
                    if (stu.StuNum == stuNum)
                    {
                        Console.WriteLine("学生的学号不可相同!");
                        isExist++;
                        break;
                    }
                }
                if (isExist == 1)
                    continue;
                stuList.Add(new Student(stuNum, stuName, stuSex, stuMajor, stuClass)); //创建一个学生对象
                count++;
                totalAdd--;
               
            #region
                if(totalAdd==0)   //输入学生到最后一个时提醒是否继续输入
                {
                    Console.Write("你已经输入{0}个学生,是否继续<y> OR <n>?",count);
                    string isContunue=Console.ReadLine();

                    if(isContunue=="y"||isContunue=="Y")
                    {
                        try
                        {
                            totalAdd = int.Parse(Console.ReadLine());
                            if (totalAdd < 1)
                                throw new Exception();
                        }
                        catch
                        {
                            Console.WriteLine("请输入一个正整数");
                        }
                    }

                }
            #endregion               
            }
            faOper.StuWrite(stuList);  //将数组中的学生信息写到文件中
        }

        //读取学生信息
        public void ReadAllStu()
        {
            List<Student> stuList = new List<Student>();

            stuList = faOper.StuRead();
            Console.WriteLine("\t学号\t姓名\t性别\t专业\t班级");

            if (stuList.Count == 0)
            {
                Console.WriteLine("数据库中没有学生!");
                return;
            }

           foreach(Student stu in stuList)
           {
                Console.WriteLine("\t{0}\t{1}\t{2}\t{3}\t{4}", stu.StuNum, stu.StuName, stu.StuSex, stu.StuMajor, stu.StuClass);    
           }
        }

        //删除指定学生信息
        public void DeleteNum(int num)
        {
            faOper.DeleteStu(num);

        }

        //按学号查询学生信息
        public void QueryStu(int num)
        {
            List<Student> stuList = faOper.StuRead();
            int count = 0;

            Console.WriteLine("\t学号\t姓名\t性别\t专业\t班级");
            foreach (Student stu in stuList)
            {
                if (stu.StuNum == num)
                {
                    Console.WriteLine("\t{0}\t{1}\t{2}\t{3}\t{4}", stu.StuNum, stu.StuName, stu.StuSex, stu.StuMajor, stu.StuClass);
                    count++;
                }
            }
            if(count==0)
            {
                Console.WriteLine("\t数据库中没该学生!");
            }
        }
        //按姓名查询学生信息
        public void QueryStu(string name)
        {
            List<Student> stuList = faOper.StuRead();
            int count = 0;

            Console.WriteLine("\t学号\t姓名\t性别\t专业\t班级");
            foreach (Student stu in stuList)
            {
                if (stu.StuName==name)
                {
                    Console.WriteLine("\t{0}\t{1}\t{2}\t{3}\t{4}", stu.StuNum, stu.StuName, stu.StuSex, stu.StuMajor, stu.StuClass);
                    count++;
                }
            }
            if (count == 0)
            {
                Console.WriteLine("\t数据库中没该学生!");
            }
        }
        // 第三,计算身体质量指数BMI方法
        //计算方法:BMI=w/h2,w是以千克为单位的体重值,h是以米为单位的身高值。BMI的值在20至25之间是正常的)*/
        public void Health()
        {
            Console.Write("请输入你的体重(单位:千克):");
            int weight = int.Parse(Console.ReadLine());

            Console.Write("请输入你的身高(单位:米):");
            double high = double.Parse(Console.ReadLine());

            double BMI = weight / high;

            if (BMI >= 20 && BMI <= 25)
            {
                Console.WriteLine("你的身体健康指数正常!");
                return;            
            }
            else if (BMI < 20)
            {
                Console.WriteLine("你的身体健康指数偏瘦!");
                return;
            }
            else
            {
                Console.WriteLine("你的身体健康指数偏胖!");
            }
        }
    }
}

 

2.5添加用户操作类。至少包含2个方法:一个用于显示登录菜单;一个用于显示学生信息管理主操作菜单。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace StudentManagement
{
    
    /*
        添加用户操作类。至少包含2个方法:一个用于显示登录菜单;一个用于显示学生信息管理主操作菜单。
     */
    class UserOperate
    {
        //登录判断
        public static  int ShowLogin()
        {
            Console.WriteLine("╭⌒╮┅~ ¤  ╭⌒╮ ╭⌒╮ ");
            Console.WriteLine("╭⌒╭⌒╮╭⌒╮~╭⌒╮︶︶, ︶︶ ");
            Console.WriteLine(",︶︶︶︶,''︶~~ ,''~︶︶  ,'' ");
            Console.WriteLine("╬ ╱◥███◣╬╬╬╬╬╬╬╬╬╬╬"); 
            Console.WriteLine("╬ ︱田︱田 田 ︱          ╬ ");
            Console.WriteLine("╬                 ╬");
            Console.WriteLine("╬ ╭○╮●                 ╬");
           Console.WriteLine(@"╬  /■\/■\                       ╬");
            Console.WriteLine("╬  <| ||                   ╬");

            

            int flag = 0;  // 登陆成功标志位
            for (int i = 0; i < 3; i++)
            {
                Console.Write("请输入登录名:");
                string userName = Console.ReadLine();

                Console.Write("请输入密码:");
                string password = Console.ReadLine();

                if (userName == "sa" && password == "123")
                {
                    Console.WriteLine("现在是{0},恭喜你登陆成功!",DateTime.Now);
                    flag = 1;
                    break;
                }
                else
                {
                    Console.WriteLine("Sorry,用户名或密码错误,你还有{0}次机会",2-i);
                }
            }

            return flag;            
        }

        //程序操作主菜单
        public static int MainMenu()
        {
            string flag = "y"; //结束标志位
            int select = 0; //选择菜单项
            StudentManger sm = new StudentManger();//创建一个学生管理类

            while (flag == "y" || flag == "Y")
            {
                Console.WriteLine("\t1.添加学生信息\n\t2.删除学生信息\n\t3.查询所有学生信息\n\t4.按学号查询学生信息\n\t5.按姓名查询学生信息\n\t6.个人健康指数查询\n\t7.退出系统");
                Console.Write("请选择:");
                try
                {
                    select = int.Parse(Console.ReadLine());
                    if (select < 1 || select > 7)
                        throw new Exception();
                }
                catch
                {
                    Console.WriteLine("请输入1~7的整数");
                    continue;
                }

                switch (select)
                { 
                    case 1:
                        sm.AddStudent();//添加学生信息
                        break;
                    case 2:
                        Console.Write("请输入要删除学生的学号:");
                        int num;
                        while (true)
                        {
                            try
                            {
                                num = int.Parse(Console.ReadLine());
                                break;
                            }
                            catch (Exception)
                            {
                                Console.Write("学号为整数请重新输入:");
                            }             
                        }                                  
                        sm.DeleteNum(num);
                        break;
                        //删除学生信息
                    case 3:
                        sm.ReadAllStu();
                        break;
                        //查询所有学生信息
                    case 4:
                        Console.Write("请输入要查询学生的学号:");
                        int num1;
                        while (true)
                        {
                            try
                            {
                                num1 = int.Parse(Console.ReadLine());
                                break;
                            }
                            catch (Exception)
                            {
                                Console.Write("学号为整数请重新输入:");
                            }             
                        }
                        sm.QueryStu(num1);                        
                        break;
                        //按学号查询学生信息
                    case 5:
                        Console.Write("请输入要查询学生的姓名:");
                        string name = string.Format(Console.ReadLine());
                        sm.QueryStu(name);
                        //按姓名查询学生信息
                         break;
                    case 6:
                         sm.Health();
                        //个人健康指数查询
                         break;
                    case 7:
                         return 0;
                        //退出系统
                    default:
                        Console.WriteLine("你的输入有误");
                        break;
                }
               
            }
            return 1;
        }
    }
}

 

2.6.程序入口类 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace StudentManagement
{
    class Program
    {
        static void Main(string[] args)
        {           
            int flagLogin= UserOperate.ShowLogin();//三次登录机会全失败,返回0
            int flagMenu=UserOperate.MainMenu();//退出程序返回0

            if (flagLogin==0||flagMenu==0)
            {
                return;
            }
            Console.ReadKey();
        }
    }
}

 

3、系统运行界面截图

图1:项目类分布情况(StudentList用不到)

图2:程序登陆界面、程序主菜单

图3:添加学生模块

图4:查询所有学生

图5:按学号查询学生

图6:按姓名查询

图7:按学号删除学生

图8:BMI测试

 

转载于:https://www.cnblogs.com/xiangyangzhu/p/4239802.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值