摘 要采用VB开发环境,搭配Access小型数据库进行开发。该系统采用按照教师名字来排课,一个教师可以任同一年级的不同班级的课程。关键是,同一时刻,一个教师不能同时教两个班,这样可以减少检查课程冲突的时间,提高排课效率。该系统分三大模块:条件设置、课表管理、账户管理。其中,条件设置包含班级设置、教师设置、时间设置;课表管理包含课程安排、课表调整、课表查询打印;账户管理包含密码管理和权限管理。
关键词课程安排;VB;Access数据库
一、模块设计
模块是软件结构的基础,软件结构的好坏完全由模块的属性体现出来,把软件模块化的目的是为了降低软件复杂性,使软件设计,测试,调试,维护等工作变得简易,但随着模块数目的增加,通过接口连接这些模块的工作量也随之增加。基于上述原因,在进行总体规划的初步设想中,以中学各种资源和资源的分配为依据,综合多种相关因素,将该系统划分成以下四个子功能模块:用户管理子系统、数据管理子系统、排课管理子系统、课表查询子系统。在数据库设计上,遵循“功能分离,数据共享”的原则。
二、功能分解
1用户管理子系统功能:用户密码的设置和修改,用户权限的设置,用户重新登陆。2数据管理子系统功能:包括对教室、教师、班级和课表数据的保存、查询、更新、删除。3排课管理子系统功能:包括手动排课、修改课表这一部分。4课表查询子系统功能:对于具体的班级、教师、进行课表查询,打印。
三、数据库设计
1班级信息表。班级信息表负责维护班级信息,主要包括班级名称、班级人数、所在教室、班主任(每一班只能有一个班主任)。
2账户信息管理表。账户信息管理表包括用户名称、用户密码、用户权限。管理员可以使用所有功能,但是普通用户不能运行条件设置等功能,只能修改密码和查询课表。
3教师信息表。教师信息表是维护教师的信息表,包括教师编号、教师姓名、所任年级及课程、电话、邮箱等。系统规定每个任课教师只能任一门课,不允许跨级代课,但是一个教师可以任多个班级的课程。此系统最终是按照老师名字来排课的,所以在教师所任课程这个字段里,年级和课程同时显示,这样排课的时候,冲突可以减少很多。
4时间段信息表。时间段信息表负责维护学校每天的教学时间安排,包括节号、时间段。
5排课信息表。排课信息表负责对课程进行安排,包括班级名称、节号、星期一、星期二、星期三、星期四、星期五。因为一个老师是带两个班的,所以按老师名字来排课,这样冲突就比较少。但是课程输出时候课程名和老师名是同时显示的。
四、用户界面设计
1登陆模块的设计。登录界面是用户最先看到的系统的界面,所以直观上给用户的感觉很重要,所以做一个好的界面,提高软件的亲和力。
2主窗体界面的设计。主窗体全部采用jcbutton按钮过渡到其他窗体,是便于使用,清晰明了。
这张图标题显示是super管理员,是因为是以管理员身份登录的。
图1-1系统主窗体界面
3系统管理模块的设计。出于安全考虑,此系统设置了访问权限。不一样的用户的账户管理界面是不一样的。此系统共设置了两类用户:普通用户和管理员。普通用户的账户管理仅限于修改密码,管理员的账户管理包含密码管理和用户信息的管理。此外,普通用户不能运用条件设置等功能,但管理员可以运用。
4条件设置模块的设计。条件设置模块总共包含班级设置、教师设置、时间设置这三个子模块。班级设置模块负责班级信息的添加、删除、查询等 *** 作;教师设置模块负责教师信息的添加、删除、查询等 *** 作;时间设置模块负责时间的修改 *** 作等。条件设置功能仅限于管理员使用,普通用户没有访问权限。
五、系统总结
此排课系统是针对初中或者以下的学校,所以比较简单。主要是排课算法的设计,这部分解决了,其他就相对简单了。系统已经经过测试,可以进行简单的排课。但由于本人水平有限,系统还是存在一些缺陷,没有方方面面都考虑到。比如说,像微机课这类课,一般都是全班学生去机房的,而不是在固定的教室上,那么排课的时候,就多了限制条件,都由于本人的水平有限而被忽略了。系统创新的地方是,在排课的时候考虑到,如果两个班的某节课是自习课,也就是说不排课,那这不应该算为课程重复。系统的设计过程经历了两种方案,第一种方案是按照课程名来排课,后来发现如果以课程名来排课,那么课程冲突就比较厉害,达不到提高排课效率的目的。第二种方案,也就是现在这种,是以老师名字来排课,规定老师只能带同一年级的多个班(一般情况下是两个班),所任课程仅限一门,那么一个班的课表出来后,另一个班排课时冲突的地方就比较少。最后课表生成时,班主任以及课表和任课老师同时显示。
参考文献:
[1]李玉林VB毕业设计指南与项目实践[M]北京:科学出版社,2007
[2]杨诚忠 Access 2003快速入门教程[M]北京:航空工业出版社,2000
[3]黄诚 Access数据库开发[J]凯里学院学报,2008,26(06):79-81
#include <stringh>
#include <iostreamh>
class Book{ // 书籍基类
protected:
char Title[40]; // 书名
long Code; // 条码
int Type; // 0表示书,1表示杂志
public:
Book();
Book(char title,long code);
void SetCode(long code){ Code = code; }
void SetTitle(char tl){ strcpy(Title,tl); }
void SetType(bool type){Type = type; }
int GetType(){ return Type; }
long GetCode(){ return Code;}
virtual void Show(); // 显示书的信息
friend ostream& operator<<(ostream& , Book&); // 重载插入运算符
friend istream& operator>>(istream& is, Book&); // 重载提取运算符
Book Next; // 为创建每个读者所借书链表而定义指针
};
class Item :public Book{ //书的款目
// char Title[40]; // 书名
char Author[20]; // 著者名
char IndexCode[10]; // 分类号
// long Code; // 条码
public:
Item();
Item(char author,char title,char index,int code);
Item(Item &);
void SetAuthor(char);
void SetIndexCode(char);
virtual void Show(); // 显示书的信息
friend ostream& operator<<(ostream& os, Item&); // 重载插入运算符
friend istream& operator>>(istream& is, Item&); // 重载提取运算符
public:
};
class Magazine:public Book { //杂志类
int Volume;
enum LANG {CHINESE=1,ENGLISH} Lang; // 枚举变量,确定语言类别
public:
Magazine():Book(){Volume = 0; Lang = CHINESE; Type = 1; }
Magazine(char title,int vol,LANG lang,int code);
Magazine(Magazine&);
void SetVolume(int vol){Volume = vol;}
void SetLang(int lang){Lang = (LANG)lang;}
virtual void Show(); // 显示杂志的信息
friend ostream& operator<<(ostream& os, Magazine&); // 重载插入运算符
friend istream& operator>>(istream& is, Magazine&); // 重载提取运算符
};
class Reader{ // 读者信息类
char Name[20]; // 姓名
char Position[20]; // 职务
int Age; // 年龄
long Code; // 借书证号
Book items; // 所借书链表
public:
Reader();
Reader(char name,char posi,int age,int code);
// Reader(Reader&);
~Reader();
long GetCode(){return Code;}
void SetName(char);
void SetPosition(char);
void SetAge(int);
void SetCode(long);
void AddBook(Item); // 添加所借书
void AddBook(Magazine); // 添加所借杂志
void DelBook(Book it); // 还书后减少所借书
void ShowBooks(); // 显示所借书
void Show(); // 显示读者信息
friend ostream& operator<<(ostream& os, Reader&); // 重载插入运算符
friend istream& operator>>(istream& is, Reader&); // 重载提取运算符
public:
int Counter; //计数器,统计所借书数目
};
class Manager{ // 管理员类
char Name[20]; // 姓名
int Age; // 年龄
int Code; // 工号
friend class Library; // 将图书馆类声明为友元
public:
Manager(){}
Manager(char,int,int);
long GetCode(){ return Code;}
void Show();
friend ostream& operator<<(ostream& os, Manager&); // 重载插入运算符
friend istream& operator>>(istream& is, Manager&); // 重载提取运算符
};
class Loan { // 借阅信息类
int Type; // 0表示书,1表示杂志
Item item; // 借阅书
Magazine mag; // 借阅杂志
Reader reader; // 借阅者
Manager manager; // 借书 *** 作员
int Code;
friend class Library; // 将图书馆类声明为友元
public:
Loan(){ }
Loan(Loan & l);
int GetCode(){ return Code;}
void Show();
friend ostream& operator<<(ostream& os, Loan&); // 重载插入运算符
friend istream& operator>>(istream& is, Loan&); // 重载提取运算符
};
、、、、、、、、、、、、、、、、、、、、、、、
#include<iostreamh>
#include<stringh>
class Reader;
template<typename T> class DblList;
template<typename T> class DblNode{
public:
T Info;//数据域
DblNode<T> llink,rlink; //前驱(左链)、后继(右链)指针
public:
DblNode(T data);//一般结点
DblNode();//头结点
T GetInfo(){return Info;};
friend class DblList<T>;
friend class Library;
};
template<typename T>class DblList{
DblNode<T> head,current;
public:
DblList();
~DblList();
void Insert(const T& data);
DblNode<T> Remove(DblNode<T> p);
void Print();
int Length();//计算链表长度
DblNode<T> Find(T data);//搜索数据与定值相同的结点
DblNode<T> Find(int data);//按某个关键字查找
void MakeEmpty(); //清空链表
void ShowList(); //显示链表各结点
friend istream& operator>>(istream&, DblList<typename T>&); // 重载输入流运算符
friend ostream& operator<<(ostream& os, DblList<typename T>& dlist); // 重载输出流运算符
friend class Library;
//其它 *** 作
};
template<typename T> DblNode<T>::DblNode(){
llink=rlink=NULL;
}
template<typename T> DblNode<T>::DblNode(T data){
info=data;
llink=NULL;
rlink=NULL;
}
template<typename T> DblList<T>::DblList(){//建立表头结点
head=new DblNode<T>();
head->rlink=head->llink=head;
current=NULL;
}
template<typename T> DblList<T>::~DblList(){
MakeEmpty();//清空链表
delete head;
}
template<typename T> void DblList<T>::MakeEmpty(){
DblNode<T> tempP;
while(head->rlink!=head){
tempP=head->rlink;
head->rlink=tempP->rlink;//把头结点后的第一个节点从链中脱离
tempP->rlink->llink=head;//处理左指针
delete tempP; //删除(释放)脱离下来的结点
}
current=NULL; //current指针恢复
}
template<typename T> void DblList<T>::Insert(const T & data){//新节点在链尾
current=new DblNode<T>;
current->Info=data;
current->rlink=head;//注意次序
current->llink=head->llink;
head->llink->rlink=current;
head->llink=current;//最后做
}
template<typename T> DblNode<T> DblList<T>::Remove(DblNode<T> p){ // 删除结点
current=head->rlink;
while(current!=head&¤t!=p) current=current->rlink;
if(current==head) current=NULL;
else{//结点摘下
p->llink->rlink=p->rlink;
p->rlink->llink=p->llink;
p->rlink=p->llink=NULL;
}
return current;
}
template<typename T> DblNode<T> DblList<T>::Find(T data){ // 按结点查找
current=head->rlink;
while(current!=head&¤t->Info!=data) current=current->rlink;
if(current==head) current=NULL;
return current;
}
template<typename T> DblNode<T> DblList<T>::Find(int data){ // 按数据值查找结点
current=head->rlink;
int temp =current->InfoGetCode();
while(current!=head&&temp!=data){
current=current->rlink;
temp = current->InfoGetCode();
}
if(current==head) current=NULL;
return current;
}
template<typename T> void DblList<T>::Print(){ // 输出链表
current=head->rlink;
while(current!=head){
cout<<current->Info<<'\t';
current=current->rlink;
}
cout<<endl;
}
template<typename T> int DblList<T>::Length(){ // 取得链表长度
int count=0;
current=head->rlink;
while(current!=head){
count++;
current=current->rlink;
}
return count;
}
template<typename T> void DblList<T>::ShowList(){ // 输出链表各结点
int count=0;
current=head->rlink;
while(current!=head){
current->GetInfo()Show();
current=current->rlink;
}
return ;
}
template<typename T>
istream& operator>>(istream& is, DblList<typename T> &dlist){
int len;
T tt; // 定义局部变量读入一个结点
is>>len;
for(int i= 0 ;i<len; i++){ // 循环读入链表各结点
is>>tt;
dlistInsert(tt);
}
return is;
}
template<typename T>
ostream& operator<<(ostream& os, DblList<typename T> &dlist){
DblNode<T> tempP;
int len = dlistLength();
os<<len<<' ';
tempP=dlisthead->rlink;
while(tempP!=dlisthead){ // 循环输出链表各结点
os<<tempP->Info;
tempP = tempP->rlink;
}
return os;
}
#include "classh"
#include "dblisth"
#include <fstreamh>
class Library{ // 封装图书馆流通业务的类
DblList<Item> item; // 在馆图书链表
DblList<Magazine> mag; // 在馆杂志链表
DblList<Reader> reader; // 读者链表
DblList<Loan> loan; // 借阅信息链表
DblList<Manager> manager; // 管理员信息链表
int itemNum; // 记录在馆图书数目
int magNum; // 记录在馆杂志数目
int readerNum; // 记录读者数目
int loanNum; // 记录借阅信息数目
int managerNum; // 记录管理员数目
ofstream itemFileOut; // 文件流对象,保存图书馆书籍数据
ifstream itemFileIn; // 文件流对象,读入图书馆书籍数据
ofstream magFileOut; // 文件流对象,保存图书馆杂志数据
ifstream magFileIn; // 文件流对象,读入图书馆杂志数据
ofstream readerFileOut; // 文件流对象,保存图书馆读者数据
ifstream readerFileIn; // 文件流对象,读入图书馆读者数据
ofstream loanFileOut; // 文件流对象,保存图书馆借阅信息数据
ifstream loanFileIn; // 文件流对象,读入图书馆借阅信息
ofstream managerFileOut; // 文件流对象,保存图书馆管理员数据
ifstream managerFileIn; // 文件流对象,读入图书馆管理员数据
public:
Library(); // 构造函数
~Library(); //析构函数
void Run(); // 图书馆类的运行函数
void CreateBibliotheca(); // 创建书目
void CreateReader(); // 创建读者库
void CreateManager(); // 创建管理员信息
int ShowMainMenu(); // 显示主菜单函数
void Borrow(); // 借书 *** 作
void Return(); // 还书 *** 作
void Require(); // 查询 *** 作
void SaveInfo(); // 保存图书馆信息
void OpenInfo(); // 读入图书馆信息
};
如果你想学好c#的话,我还是建议你自己多动手写写,在写的过程中有不懂不会的地方再向人求助,不要一上来就要别人做,这样对你有什么好处呢?别人写的代码你看不懂还不是白搭。
多写写,多练练才会有收获。
说实话,你这个项目还是算得上是一个比较大的项目了,如果你忍忍真真的把这根项目做完,那么对你的变成能力一定有所提升的。这个项目肯定是要使用三层来做的了,不然后期不好维护。
还是建议你自己动手写,在开发的过程中有不懂的不会的再来针对具体的疑问提出问题求助!
个人建议,也希望你能接受!
以上就是关于图书馆管理系统数据库【基于VB环境下中学排课管理系统的开发】全部的内容,包括:图书馆管理系统数据库【基于VB环境下中学排课管理系统的开发】、数据库系统原理课程设计 -----图书借阅管理系统、数据库课程设计:图书管理系统要求用C#.NET(vs2008做),数据库用SQL Server2005做。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)