学生管理系统(使用类和封装思想完成)

1. 系统整体架构

该学生管理系统主要由用户管理、学生信息管理两大部分组成,通过 UserManager 类、User 类、StudentManager 类以及 Student 类来分别实现相关功能,Program 类作为程序的入口,负责调用各个类的方法来实现系统的交互操作。

2. 用户管理相关

  • UserManager 类
    • 数据存储与加载:使用 Dictionary<string, User> 来存储用户信息,UserDataFile 定义了用户数据存储的文件名。LoadUsers 方法尝试从文件中读取用户信息并解析,将其存储到 users 字典中;SaveUsers 方法将 users 字典中的用户信息写入文件。
    • 用户注册Register 方法用于用户注册,检查用户名是否已存在,若不存在则创建新用户并保存到文件,同时在控制台输出注册成功信息。
    • 用户认证Authenticate 方法用于用户登录认证,根据输入的用户名和密码在 users 字典中查找用户并验证密码;HasAdmin 方法用于检查系统中是否存在管理员账户。
  • User 类
    • 属性:包含 Username(用户名)、Password(密码)、IsAdmin(是否为管理员)、IsAuthenticated(是否已认证)属性。
    • 认证方法Authenticate 方法用于验证输入的用户名和密码是否与当前用户匹配,更新 IsAuthenticated 属性并返回认证结果。

3. 学生信息管理相关

  • StudentManager 类
    • 学生信息存储:使用 List<Student> 来存储学生信息。
    • 添加学生AddStudent 方法将新的 Student 对象添加到 students 列表中,并在控制台输出添加成功信息。
    • 删除学生RemoveStudent 方法根据输入的学生 ID 查找并从 students 列表中删除对应的学生,同时在控制台输出删除结果。
    • 修改学生信息UpdateStudent 方法根据输入的学生 ID 查找学生并更新其姓名、年龄和专业信息,在控制台输出修改结果。
    • 查询学生信息GetAllStudents 方法遍历 students 列表,输出所有学生的信息;NameStudent 方法根据输入的学生姓名查找并输出匹配的学生信息。
  • Student 类
    • 属性:包含 Id(学号)、Name(姓名)、Age(年龄)、Major(专业)属性。
    • 重写方法:重写了 ToString 方法,用于以特定格式输出学生的信息。

4. 程序入口 Program 类

  • 初始化与账户创建:在 Main 方法中,创建 StudentManager 和 UserManager 的实例。若系统中没有管理员账户,提示创建管理员账户,调用 CreateAdminAccount 方法实现创建功能。
  • 登录与注册操作:提供登录、注册和退出的选项,用户选择后调用相应的方法(Login 方法用于登录,Register 方法用于注册),根据操作结果在控制台输出相应信息。
  • 主菜单操作:用户成功登录后,显示主菜单,包括添加学生信息、删除学生信息、修改学生信息、查询所有学生信息、根据学生姓名查询学生信息和退出管理系统的选项。用户选择后调用对应的方法(如 AddStudentRemoveStudent 等)来执行相应的操作,并在控制台输出操作结果。
  • 密码读取ReadPassword 方法用于安全读取用户输入的密码,通过 ConsoleKeyInfo 捕获用户输入,处理退格键,隐藏密码输入(显示为 *),并返回输入的密码。

5. 系统的特点和优势

  • 功能全面:涵盖了用户管理和学生信息管理的基本功能,包括用户注册、登录,学生信息的增删改查。
  • 数据持久化:用户和学生信息能够保存到文件中,保证数据在程序关闭后不会丢失。
  • 操作安全:密码输入采用隐藏方式,用户信息存储也有一定的保密性,提高了系统的安全性。
  • 操作简便:系统的操作流程和界面设计相对简单,用户可以快速上手进行各项操作。

详细源码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace 学生管理系统
{
    // 用户管理类 - 改进版本,支持多用户和注册功能
    class UserManager
    {
        private Dictionary<string, User> users = new Dictionary<string, User>();
        private const string UserDataFile = "users.dat";

        public UserManager()
        {
            LoadUsers();
        }

        // 加载用户数据
        private void LoadUsers()
        {
            try
            {
                if (File.Exists(UserDataFile))
                {
                    string[] lines = File.ReadAllLines(UserDataFile);
                    foreach (string line in lines)
                    {
                        string[] parts = line.Split('|');
                        if (parts.Length == 3)
                        {
                            users[parts[0]] = new User(parts[0], parts[1], bool.Parse(parts[2]));
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"加载用户数据时出错: {ex.Message}");
            }
        }

        // 保存用户数据
        private void SaveUsers()
        {
            try
            {
                using (StreamWriter writer = new StreamWriter(UserDataFile))
                {
                    foreach (var user in users.Values)
                    {
                        writer.WriteLine($"{user.Username}|{user.Password}|{user.IsAdmin}");
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"保存用户数据时出错: {ex.Message}");
            }
        }

        // 用户注册
        public bool Register(string username, string password, bool isAdmin = false)
        {
            if (users.ContainsKey(username))
            {
                Console.WriteLine("用户名已存在!");
                return false;
            }

            users[username] = new User(username, password, isAdmin);
            SaveUsers();
            Console.WriteLine("注册成功!");
            return true;
        }

        // 用户认证
        public bool Authenticate(string username, string password, out User user)
        {
            user = null;
            if (!users.TryGetValue(username, out user))
            {
                return false;
            }

            return user.Password == password;
        }

        // 检查是否有管理员账户
        public bool HasAdmin()
        {
            return users.Values.Any(u => u.IsAdmin);
        }
    }

    // 用户类 - 改进版本
    class User
    {
        public string Username { get; }
        public string Password { get; }
        public bool IsAdmin { get; }
        public bool IsAuthenticated { get; private set; }

        public User(string username, string password, bool isAdmin)
        {
            Username = username;
            Password = password;
            IsAdmin = isAdmin;
            IsAuthenticated = false;
        }

        public bool Authenticate(string inputUsername, string inputPassword)
        {
            IsAuthenticated = (Username == inputUsername && Password == inputPassword);
            return IsAuthenticated;
        }
    }

    // 学生基本信息
    class Student
    {
        private string id;
        private string name;
        private int age;
        private string major;

        public Student(string id, string name, int age, string major)
        {
            this.id = id;
            this.name = name;
            this.age = age;
            this.major = major;
        }

        public string Id
        {
            get { return id; }
            set { id = value; }
        }

        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        public int Age
        {
            get { return age; }
            set { age = value; }
        }

        public string Major
        {
            get { return major; }
            set { major = value; }
        }

        public override string ToString()
        {
            return $"ID:{id},姓名:{name},年龄:{age},专业:{major}";
        }
    }

    // 学生管理类 用于实现增删改查相关功能
    class StudentManager
    {
        private List<Student> students;

        public StudentManager()
        {
            students = new List<Student>();
        }

        // 添加学生
        public void AddStudent(Student student)
        {
            students.Add(student);
            Console.WriteLine($"已添加学生:{student.Name}");
        }

        // 删除学生 根据学生id来实现删除功能
        public void RemoveStudent(string id)
        {
            Student studentToRemove = students.Find(s => s.Id == id);
            if (studentToRemove != null)
            {
                students.Remove(studentToRemove);
                Console.WriteLine($"删除成功!已删除学生{studentToRemove.Name}");
            }
            else
            {
                Console.WriteLine($"删除失败,没有找到id为{id}的学生");
            }
        }

        // 修改学生信息 根据学生的id修改 学生的姓名 年龄 专业
        public void UpdateStudent(string id, string name, int age, string major)
        {
            Student studentToUpdate = students.Find(s => s.Id == id);
            if (studentToUpdate != null)
            {
                studentToUpdate.Name = name;
                studentToUpdate.Age = age;
                studentToUpdate.Major = major;
                Console.WriteLine($"已更新学生信息{name}");
            }
            else
            {
                Console.WriteLine($"修改失败,未找到学号为{id}的学生");
            }
        }

        // 查询学生信息 全查 
        public void GetAllStudents()
        {
            if (students.Count == 0)
            {
                Console.WriteLine("暂无学生信息");
            }
            else
            {
                Console.WriteLine("所有的学生信息:");
                foreach (Student student in students)
                {
                    Console.WriteLine(student);
                }
            }
        }

        // 查询学生信息 根据学生姓名查询
        public void NameStudent(string name)
        {
            List<Student> foundStudents = students.FindAll(s => s.Name == name);
            if (foundStudents.Count > 0)
            {
                Console.WriteLine($"找到了{foundStudents.Count}名学生");
                foreach (Student student in foundStudents)
                {
                    Console.WriteLine(student);
                }
            }
            else
            {
                Console.WriteLine($"未找到姓名为:{name}的学生");
            }
        }
    }

    public class Program
    {
        static void Main(string[] args)
        {
            StudentManager manager = new StudentManager();
            UserManager userManager = new UserManager();

            // 如果没有管理员账户,提示创建
            if (!userManager.HasAdmin())
            {
                Console.WriteLine("首次使用系统,请创建管理员账户:");
                CreateAdminAccount(userManager);
            }

            User currentUser = null;
            while (currentUser == null)
            {
                Console.Clear();
                Console.WriteLine("**** 学生管理系统 ****");
                Console.WriteLine("1. 登录");
                Console.WriteLine("2. 注册");
                Console.WriteLine("3. 退出");
                Console.Write("请选择: ");

                string choice = Console.ReadLine();
                switch (choice)
                {
                    case "1":
                        currentUser = Login(userManager);
                        if (currentUser == null)
                        {
                            Console.WriteLine("登录失败,请重试。");
                            Console.ReadKey();
                        }
                        break;
                    case "2":
                        Register(userManager);
                        break;
                    case "3":
                        Console.WriteLine("感谢使用,再见!");
                        return;
                    default:
                        Console.WriteLine("无效选择,请重新输入。");
                        Console.ReadKey();
                        break;
                }
            }

            // 用户已登录,显示主菜单
            while (true)
            {
                DisplayMainMenu(currentUser);
                string choice = Console.ReadLine();
                switch (choice)
                {
                    case "1":
                        AddStudent(manager);
                        break;
                    case "2":
                        RemoveStudent(manager);
                        break;
                    case "3":
                        UpdateStudent(manager);
                        break;
                    case "4":
                        manager.GetAllStudents();
                        break;
                    case "5":
                        NameStudent(manager);
                        break;
                    case "6":
                        Console.WriteLine("感谢您使用本系统!期待您的下次使用!");
                        return;
                    default:
                        Console.WriteLine("无效选择,请重新输入。");
                        Console.ReadKey();
                        break;
                }
            }
        }

        // 创建管理员账户
        static void CreateAdminAccount(UserManager userManager)
        {
            while (true)
            {
                Console.Write("管理员用户名: ");
                string username = Console.ReadLine();

                Console.Write("管理员密码: ");
                string password = ReadPassword();

                Console.Write("确认密码: ");
                string confirmPassword = ReadPassword();

                if (password != confirmPassword)
                {
                    Console.WriteLine("两次输入的密码不一致,请重新输入。");
                    continue;
                }

                if (userManager.Register(username, password, true))
                {
                    Console.WriteLine("管理员账户创建成功!");
                    Console.ReadKey();
                    break;
                }
            }
        }

        // 用户登录
        static User Login(UserManager userManager)
        {
            Console.WriteLine("**** 登录 ****");
            Console.Write("用户名: ");
            string username = Console.ReadLine();

            Console.Write("密码: ");
            string password = ReadPassword();

            if (userManager.Authenticate(username, password, out User user))
            {
                Console.WriteLine($"欢迎回来,{username}!");
                Console.ReadKey();
                return user;
            }

            return null;
        }

        // 用户注册
        static void Register(UserManager userManager)
        {
            Console.WriteLine("**** 注册 ****");
            Console.Write("用户名: ");
            string username = Console.ReadLine();

            Console.Write("密码: ");
            string password = ReadPassword();

            Console.Write("确认密码: ");
            string confirmPassword = ReadPassword();

            if (password != confirmPassword)
            {
                Console.WriteLine("两次输入的密码不一致!");
                Console.ReadKey();
                return;
            }

            userManager.Register(username, password);
            Console.ReadKey();
        }

        // 安全读取密码(隐藏输入)
        static string ReadPassword()
        {
            string password = "";
            ConsoleKeyInfo key;

            do
            {
                key = Console.ReadKey(true);

                // 处理退格键
                if (key.Key == ConsoleKey.Backspace && password.Length > 0)
                {
                    password = password.Substring(0, password.Length - 1);
                    Console.Write("\b \b");
                }
                // 处理普通字符
                else if (!char.IsControl(key.KeyChar))
                {
                    password += key.KeyChar;
                    Console.Write("*");
                }
            } while (key.Key != ConsoleKey.Enter);

            Console.WriteLine();
            return password;
        }

        // 显示主菜单
        static void DisplayMainMenu(User user)
        {
            Console.Clear();
            Console.WriteLine($"********* 欢迎 {user.Username} 来到学生管理系统 **********");
            Console.WriteLine("1. 添加学生信息");
            Console.WriteLine("2. 删除学生信息");
            Console.WriteLine("3. 修改学生信息");
            Console.WriteLine("4. 查询所有学生信息");
            Console.WriteLine("5. 根据学生姓名查询学生信息");
            Console.WriteLine("6. 退出管理系统");
            Console.WriteLine("请输入相关操作:");
        }

        // 添加方法
        static void AddStudent(StudentManager manager)
        {
            Console.WriteLine("**** 添加学生 ****");
            Console.Write("学号:");
            string id = Console.ReadLine();
            Console.Write("姓名:");
            string name = Console.ReadLine();
            Console.Write("年龄:");
            int age = int.Parse(Console.ReadLine());
            Console.Write("专业:");
            string major = Console.ReadLine();
            Student student = new Student(id, name, age, major);
            manager.AddStudent(student);
            Console.ReadKey();
        }

        // 删除方法
        static void RemoveStudent(StudentManager manager)
        {
            Console.WriteLine("**** 删除学号 ****");
            Console.Write("输入要删除的学号:");
            string id = Console.ReadLine();
            manager.RemoveStudent(id);
            Console.ReadKey();
        }

        // 修改方法
        static void UpdateStudent(StudentManager manager)
        {
            Console.WriteLine("**** 修改学生信息 ****");
            Console.Write("输入要修改的学生学号:");
            string id = Console.ReadLine();
            Console.Write("姓名:");
            string name = Console.ReadLine();
            Console.Write("年龄:");
            int age = int.Parse(Console.ReadLine());
            Console.Write("专业:");
            string major = Console.ReadLine();
            manager.UpdateStudent(id, name, age, major);
            Console.ReadKey();
        }

        // 根据学生名字查询
        static void NameStudent(StudentManager manager)
        {
            Console.WriteLine("**** 根据姓名查询学生 ****");
            Console.Write("输入学生的姓名:");
            string name = Console.ReadLine();
            manager.NameStudent(name);
            Console.ReadKey();
        }
    }
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值