摘要
在学习数据库原理之前很多小伙伴可能都会接触文件系统管理,现在我们用一个实例来理解一下它。假如我们有一个教学管理系统,所有的数据都用csv文件保存,我们如何模拟对这个系统的一系列操作呢?且听我慢慢道来
目录
1.首先是记录学生选课信息的文件StudentClassChoose.csv
2.其次是记录学生每门课程分数的文件CourseGrades.csv
6.如果我们需要约束每个学生每个选课的学分不能低于20,如何实现?
压缩文件说明
我将我用到的所有代码都保存为了一个R脚本文件FonctionCode.R并放在了文件夹中,里面的csv文件是我在模拟过程中用到的文件,读者也可以删除以后自己调用函数来模拟~
文件的随机生成
为了模拟文件系统的管理方式,在这里我使用R语言作为工具,首先假设有一个教学管理系统,我们先为它随机生成一些数据文件:
1.首先是记录学生选课信息的文件StudentClassChoose.csv
假设我们有100个学生,这里用一个6位的学号作为其唯一标识,假设有八门课程分别为Chinese,Mathematics,English,Physical,Chemistry,Biology,History和Geography,为便于读者模拟,我把它放到函数StudentChooseClass中,调用StudentChooseClass(),即可生成文件StudentClassChoose.csv,模拟学生选课的这一过程,表中0表示为选课,1表示已选课:
StudentChooseClass <- function(){
studentID <- as.character(sample(100000:999999,100))
Chinese <- sample(0:1,100,replace = T)
Mathematics <- sample(0:1,100,replace = T)
English <- sample(0:1,100,replace = T)
Physical <- sample(0:1,100,replace = T)
Chemistry <- sample(0:1,100,replace = T)
Biology <- sample(0:1,100,replace = T)
History <- sample(0:1,100,replace = T)
Geography <- sample(0:1,100,replace = T)
StdClsChos <- data.frame(studentID,Chinese,Mathematics,English,Physical,Chemistry,History,Geography,Biology)
rownames(StdClsChos) <- paste("student",1:100,sep = "")
write.csv(StdClsChos,"StudentClassChoose.csv")
}
可以看一下随机生成的结果(这里只展示前20条):
2.其次是记录学生每门课程分数的文件CourseGrades.csv
在这里需要注意的是,学生只有在选了课程以后相应的课程才会有分数,所以在随机生成这一文件的时候是有一定的条件的,需要参照StudentClassChoose.csv里的选课信息来赋予分数,在这里我用两重循环来实现,未选的课程用NA来表示,并放到了函数RandomCourseGrades()中:
RandomCourseGrades <- function(){
CourseGrades <- StdClsChos
for(i in 1:nrow(CourseGrades)){
for(j in 2:ncol(CourseGrades)){
if(StdClsChos[i,j]==1)CourseGrades[i,j] <- sample(0:100,1)
else if(StdClsChos[i,j]==0)CourseGrades[i,j] <- NA
}
}
write.csv(CourseGrades,"CourseGrades.csv")
}
我们看一下随机生成的结果:
3.然后是课程信息文件CourseInfo.csv
假设每个课程包含课程学分和任课教师的信息,我们也同样可以通过模拟生成一个文件:
RandCourseInfo <- function(){
AllTeacher <- paste("teacher",1:9,sep = "")
course <- c("Chinese","Mathematics","English","Physical","Chemistry","History","Geography","Biology")
teacher <- sample(AllTeacher,8,replace = T)
credit <- sample(5:8,8,replace = T)
CourseInfo <- data.frame(credit,teacher)
row.names(CourseInfo) <- course
write.csv(CourseInfo,"CourseInfo.csv")
}
这里假设课程学分从5到8分不等,我们可以看看生成的结果: