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
方法用于注册),根据操作结果在控制台输出相应信息。 - 主菜单操作:用户成功登录后,显示主菜单,包括添加学生信息、删除学生信息、修改学生信息、查询所有学生信息、根据学生姓名查询学生信息和退出管理系统的选项。用户选择后调用对应的方法(如
AddStudent
、RemoveStudent
等)来执行相应的操作,并在控制台输出操作结果。 - 密码读取:
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();
}
}
}