前言:这个是老师让我们使用C#做一个简单的学生管理信息系统,老师明确不让我们使用数据库,因为我们没学,让我们保存在文本中,所有我把信息保存在了文本中,每一行代码一个学生信息,中间使用分隔符进行分隔。
一、首先明确需求,需要完成什么功能
二、项目模块图
2.1数据实体类
由上面的逻辑图中,数据实体类包含User和Student类
User:
public class User
{
string userName;
string pwd;
public User(string userName,string pwd)
{
this.userName = userName;
this.pwd = pwd;
}
public User()
{
}
public string UserName
{
get { return userName; }
set { userName = value; }
}
public string Pwd
{
get { return pwd; }
set { pwd = value; }
}
}
Stduent:
public class Student
{
string name;//姓名
string gender;//性别
string ID;//身份证号
string school_id;//学号
string admission_time;//入学时间
string ethnic;//民族
string major;//录取专业
string political;//政治面貌
string address;//家庭住址
string fileName;//图片名称
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public string ID1
{
get
{
return ID;
}
set
{
ID = value;
}
}
public string Admission_time
{
get
{
return admission_time;
}
set
{
admission_time = value;
}
}
public string Ethnic
{
get
{
return ethnic;
}
set
{
ethnic = value;
}
}
public string Major
{
get
{
return major;
}
set
{
major = value;
}
}
public string Political
{
get
{
return political;
}
set
{
political = value;
}
}
public string Address
{
get
{
return address;
}
set
{
address = value;
}
}
public string Gender
{
get
{
return gender;
}
set
{
gender = value;
}
}
public string FileName
{
get
{
return fileName;
}
set
{
fileName = value;
}
}
public string SchoolId
{
get
{
return school_id;
}
set
{
school_id = value;
}
}
}
2.2 工具类
工具类中最主要的就是读文本中读取数据
//获取到所有的登录和密码信息
public static void getUser()
{
//通过Common类中的登录帐号密码的文件地址创建字节读入流
StreamReader sr = new StreamReader(Common.loginPath);
//保存每行的数据
string line;
//一次读取每行,直至读取到的line为空
while ((line = sr.ReadLine()) != null)
{
//每行为一个用户,用'-'进行分隔
User u = new User();
//使用'-'切割,返回一个数组,数组第一个元素为帐号,
//第二个元素为密码
u.UserName = split(line, '-')[0];
u.Pwd = split(line, '-')[1];
//把每次查询到的用户添加到list中
Common.users.Add(u);
}
//关闭数据流
sr.Close();
}
//向帐号文本中新添一条记录
public static void addUser(string s)
{
//以追加的方式通过登录文件的信息创建一个文件流
FileStream fs = new FileStream(Common.loginPath, FileMode.Append);
//创建一个写入流
StreamWriter sw = new StreamWriter(fs);
//将传过来的信息写入到文本中
sw.WriteLine(s);
//关闭文件流和写入流
sw.Close();
fs.Close();
}
//获取到所有的学生信息
public static void getStudent()
{
//先清空学生信息中的所有数据
Common.stus.RemoveRange(0,Common.stus.Count);
int j = 0;
//通过Common类中的用户信息的文件地址创建字节读入流
StreamReader sr = new StreamReader(Common.infoPath);
//保存每行的数据
string line;
//一次读取每行,直至读取到的line为空
while ((line = sr.ReadLine()) != null)
{
//j用来记录每次切割完的下标,
j = 0;
//每行都为一个学生的信息
Student s = new Student();
//使用'-'切割,返回一个数组
//数组元素对应的是相应的信息
string[] info = line.Split('-');
s.Name = info[j++];
s.Gender = info[j++];
s.ID1 = info[j++];
s.SchoolId = info[j++];
s.Admission_time = info[j++];
s.Ethnic = info[j++];
s.Major = info[j++];
s.Political = info[j++];
s.Address = info[j++];
s.FileName = info[j];
//把每次查询到的用户添加到list中
Common.stus.Add(s);
}
//关闭数据流
sr.Close();
}
//向信息文本中新增一条记录
public static void addInfo(string s)
{
//以追加的方式通过登录文件的信息创建一个文件流
FileStream fs = new FileStream(Common.infoPath, FileMode.Append);
//创建一个写入流
StreamWriter sw = new StreamWriter(fs);
//将传过来的信息写入到文本中
sw.WriteLine(s);
//关闭文件流和写入流
sw.Close();
fs.Close();
}
2.3 窗体实体类
在窗体实体中,分为两个实体。
实体一为用户:功能为登录和注册.
实体二为学生:相关的窗体实体为信息添加、信息查询、信息查看。
信息添加:当用户输完信息,进行健壮性判断之后,执行工具类中的添加一条记录的函数就可以了.
信息查看:当用户初始化这个界面时,从文本中读取所有的用户信息,并且默认显示第一个
//设置上一个和下一个按钮是否可以被点击
public void setNextOrPre()
{
//如果是第一个,button2不可点击
if (Common.showIndex == 0)
{
button2.Enabled = false;
}
else
{
button2.Enabled = true;
}
//如果是最后,button3不可点击
if (Common.showIndex == Common.stus.Count - 1)
{
button3.Enabled = false;
}
else
{
button3.Enabled = true;
}
}
难点:当显示第一个用户记录时,上一个按钮不能点击;当显示最后一个用户时,下一个按钮不能点击;
信息查询:打开本页面时,从文本中读取所有的学生信息,并让输入的学号和每条学生记录中拆分的学号对比,有相同的,就记录是第几条记录;如果不存在,就提示用户没有相同的记录.
Gif演示:
下载地址:https://github.com/Han-YLun/sampleStuManager
总结:1.这个删除和更新其实是可以做的,但是课程比较多,并没有深入研究关于文本怎么修改其中一个的数据和删除其中某一行.
2.这学期应该老师会教使用数据库连接,可以在这个项目技术上再完善。
没有完美的系统,只有贪婪的人性!