学生选课系统软件设计

2024-04-10

学生选课系统软件设计(精选6篇)

篇1:学生选课系统软件设计

题目

一、学生选课管理系统

第一部分:课程设计名称、目的、要求

第二部分:程序总体设计思路

第三部分:程序功能划分、图示及流程图

第四部分:程序设计数据、运行结果

第五部分:程序的优缺点

第六部分:心得体会

第七部分:附录(源程序)

第八部分:附录(参考文献)

目录

..............................................................................第一部分:课程设计名称、目的、要求

名称:学生选修课程系统设计

目的:运用C语言提高解决实际问题的能力 实验环境:Microsoft Visual C++ 6.0 内容:

假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。【功能】

系统以菜单方式工作

课程信息录入功能(课程信息用文件保存)--输入 课程信息浏览功能--输出

查询功能:(至少一种查询方式)--算法 按学分查询 按课程性质查询 学生选修课程(可选项)

第二部分:程序总体设计思路

由于C语言是面对过程的语言,故我的设计思路是根据目标程序运行的过程来编写的。

具体的设计思路如下:

程序的要求是设计学生选修课管理系统,对选修课程能够进行录入和修改操作等,要求有菜单界面和退出功能。首先,考虑到程序的数据输入,可以设置一个管理员登陆选项,通过该选项进入管理员界面,进行选修课的录入和修改操作,最后将录入的课程保存到相应的文件中。然后定义各种函数的功能包括查看,查询,删除等。另一个为学生登陆界面,该界面学生可以进行课程选择和浏览查询等操作。在进行该操作之前需要对管理员保存的文件进行读取,然后对其中的内容进行查询等,在学生选好课程以后,可以将其选好的课程保存于相应的文件中,以便下次进行修改。通过函数的层层调用来实现程序的逻辑结构。中间通过文件的打开和关闭实现对文件内部所包含的数据的操作。

整个程序的设计思路到此结束。

第三部分:程序功能划分、图示及流程图

【功能模块划分及其流程图】

本程序功能模块根据程序设计的需求,综合程序的实用性、人性化、智能化的考虑,将程序划分为6个部分分别编写,程序主体功能将由这9个部分来完成。这9个部分依次是:

1.登录界面函数;void login()2.学生登录界面据函数:void stu_login()3.管理员登录界面函数:void man_login()4.退出界面函数:void bye_sys()

5.课程选择函数:void c_select()6.课程浏览函数:void c_view()7.课程查询函数:void c_search()8.课程增加函数:void c_add()9.课程删除函数:void c_delete()10.菜单函数:void index()11.主函数部分; main()

总体设计:

学生选课系统管理员登录学生登录新增课程删除课程课程浏览查询课程学生选课课程浏览课程查询c_add函数c_delete函数c_view函数c_search函数c_select函数c_view函数c_search函数

系统功能模块图

部分函数流程图:

1、课程选择函数:

开始输入要选择的课程的编号j=0;j

2、课程查询函数

开始输入要查询的课程的编号j=0;j

3、课程增加函数

开始输入要增加的课程的编号j=0;j

4、课程删除函数

开始输入要删除的课程的编号nj=0;j

本程序是一款应用软件,故数据设计、程序运行结果应在程序的

运用中得以体现,现在通过一个程序的运用事例来对程序运行结果进行演示与实现。【软件运用举例】

1、程序开始界面如下:

选择某个选项,如进行管理员登录,进行课程的增加 进入管理员界面:

2、再选择所要进行的操作,如进行课程增加,结果如下:

下面可以进行继续增加课程或者退出:

3、选择课程浏览,可以分页查看相应的课程信息: 第一页:

第二页:

4、课程查询

查找结果:

4、管理员课程删除操作:

删除后可以进行浏览,观察删除后的结果:

可见删除后只有一条记录。删除操作完成正确。下面进行学生操作的使用方法:

1、学生登陆界面:

2、选择学生选课选项:

3、学生登陆也可进行课程浏览和查询函数,其结果与管理员登陆相同,不再演示。

第五部分:程序的优缺点

【程序的优点】

算法是程序的灵魂,程序的优点首先表现在算法上的优点,其次才是功能上的。

[算法上的优点]主要体现在以下三点:

1.程序采用main主函数方式设计,程序的主体的功能大都由该功能

完成。程序如此设计有利于程序的进一步改进及有助于程序执行效率的提高。

2.程序对文件数据的读写采用了fread和fwrite块读写函数,能够将文件中的数据完全读出,然后赋到定义的数组中,再在相应的数组中进行一系列操作,最终再写入文件。

3.插入操作在本程序中将课程信息直接插入数组最后一个节点,从而减少了数据的相互移动,节省了时间。

[功能上的优点] 主要体现在以下两点:

1. 简洁明了的程序菜单。程序主要采用了层次不同的菜单,相互独立又相互联系,巧妙相接,符合用户的使用习惯与思维。2. 人性化的程序提示语言,程序提示语言较人性化,不仅大多为祈使语句、疑问句,而且提示明确,具有较强的明确的指导作用。程序提示不仅层次分明,提示方式多样,而且提示信息井然有序,更加有利于用户顺利、准确地看懂程序并进行操作。

【程序的缺点】 主要表现在以下两点:

1、本程序没有进行相应的密码操作,所以对于使用者来说可能存在比较大的不保密性。需要改善。

2、本程序没有使用文本读写函数fscanf和fprintf,所以的到的课程文件和选课文件都是二进制形式。

第六部分:心得体会

选课系统程序比起通讯录程序来讲好写一些,由于本程序用到了数组,对于数组的操作掌握的比较熟练,所以在编写程序的时候困难没有那么多。

本程序在编写的过程中用到了许多通讯录中的模块化设计和函数互相调用的思想,使得编写比较方便和好用。

通过该系统的课程设计分析,我掌握了模块化设计的方法,理解和运用了结构化程序设计的思想和方法,掌握和提高了运用C语言进行程序设计的能力。

程序设计的过程,实际上是确定解决问题的详细步骤,而这个步骤通常叫做流程,在程序设计过程中理清楚整个问题的流程很重要,然后采取逐步细化的方法实现整个程序。

对于一个较大的应用程序,一般不可能一次就设计出一个很完善的系统。通常要先设计满足基本要求的系统,然后再测试或者在使用的过程中不断完善,慢慢地做成一个功能很完善选修课程管理系统。所以在进行调试的时候需要对许多变量理解和掌握其变化规律等,这对于我更好的掌握visual C中调试的工具有很大的帮助。

总之经过这次课程设计,我对c语言的使用和理解都有了很大的加深,对于编程的思想也有了很多新的理解和感受。

第七部分:附录

一、参考文献:

1、李丽娟主编,C语言程序设计教程(第二版),人民邮电出版社

2、严蔚敏主编,数据结构(C语言),清华大学出版社

3、崔单主编,C语言程序设计案例精粹,电子工业出版社

4、谭浩强主编,程序设计(第三版),清华大学出版社

二、源程序

#include“stdio.h” #include“stdlib.h” #include“windows.h” #include“string.h”

void index();//首页 void login();void bye_sys();//退出界面

void stu_login();//学生登录菜单

void c_select();void c_view();//课程浏览

void c_add();//增加课程 void c_delete();void c_searchs();//学生查询函数 void c_searchm();//管理员查询函数 void c_viewm();//管理员浏览函数 void c_views();//学生浏览函数

struct course//定义课程结构体

{

int c_num;

char c_name[20];

int c_score;

int c_nelepeo;//课程已选人数

int c_melepeo;//课程人数上限 };struct student { char s_number[10];

char s_password[10];};struct manager { char m_name[10];char m_password[10];};

void index()//首页 {

char input;

printf(“nnttt*****************************n”);

printf(“ttt

湖南大学学生选课系统n”);

printf(“ttt*****************************nnn”);

printf(“ttt*****************************nnn”);

printf(“ttt*****************************nnn”);

printf(“ttt*****************************nnn”);

printf(“ttt**********设计者:刘晓斌******nnn”);

input=getchar();

system(“cls”);} void login()//登陆界面

{

void stu_login();

void man_login();

void bye_sys();

int input;

do

{

system(“cls”);

printf(“nnnt1.学生登录n”);

printf(“t2.管理员登陆n”);

printf(“t3.退出本系统n”);

printf(“t请选择服务类别:”);

scanf(“%d”,&input);

if(input!=1&&input!=2&&input!=3)//输入数不等于选项的时候打印画面

{

printf(“nt输入出错!请重新选择~n”);

printf(“nt按任意键返回选择页面~nt”);

getchar();getchar();

system(“cls”);

}

if(input==3)//如果输入3退出系统

{

bye_sys();

}

}while(input!=1&&input!=2&&input!=3);

switch(input)

{

case 1:stu_login();break;

case 2:man_login();break;

} }

void bye_sys()//退出界面 { exit(0);}

void man_login(){

void c_add();

void c_delete();

void c_view();

void c_searchm();

int in;

do

{

system(“cls”);

printf(“nnt1.新增课程n”);

printf(“t2.删除课程n”);

printf(“t3.课程浏览n”);

printf(“t4.课程查询n”);

printf(“t5.退出n”);

printf(“nnt请选择服务种类:”);

scanf(“%d”,&in);

if(in!=1&&in!=2&&in!=3&&in!=4&&in!=5)

{

printf(“nt没有这项服务t按任意重新选择”);

getchar();getchar();

}

}while(in!=1&&in!=2&&in!=3&&in!=4&&in!=5);

switch(in)

{

case 1:c_add();break;

case 2:c_delete();break;

case 3:c_viewm();break;

case 4:c_searchm();break;

case 5:login();break;

} }

void stu_login()//学生登录菜单

{

void c_select();

void c_view();

void c_searchs();

void login();

int input;

do

{

system(“cls”);

printf(“nnnt--学生登陆--”);

printf(“nnt1.学生选课n”);

printf(“t2.课程浏览n”);

printf(“t3.课程查询n”);

printf(“t4.退出n”);

scanf(“%d”,&input);

if(input!=1&&input!=2&&input!=3&&input!=4)

{

printf(“nt没有这项服务~n”);

printf(“t按任意键重新选择”);

getchar();

getchar();

}

}while(input!=1&&input!=2&&input!=3&&input!=4);

switch(input)

{

case 1:c_select();break;

case 2:c_views();break;

case 3:c_searchs();break;

case 4:login();break;

} }

void c_select(){

int n,in,i=0,j;int flag=0;

FILE *fp;

FILE *fp1;

char input;

struct course courses[10];

if((fp=fopen(“course.dat”,“rb”))==NULL)//判断是否存在课程

{

printf(“nnnt课程不存在nn”);

printf(“t<按任意键返回管理菜单>nt”);

input=getchar();

input=getchar();

stu_login();//进入学生登陆菜单

}

else//存在的话循环读取文件中的信息直到文件指针到文件尾部

{

do

{

fread(&courses[i],sizeof(struct course),1,fp);

i=i+1;

}

while(!feof(fp));

fclose(fp);//文件读完后关闭

}

printf(“nntt请输入你要选课程的编号:”);

scanf(“%d”,&n);

if((fp1=fopen(“courseselect.dat”,“rb”))==NULL)

{

fp1=fopen(“courseselect.dat”,“wb”);

}

else

{

fclose(fp1);

fp1=fopen(“courseselect.dat”,“ab”);

}

for(j=0;j

if(courses[j].c_num==n)

flag++;

if(flag==0)

{

printf(“nntt不存在对应课程n”);

printf(“nntt继续选课请按1,退出请按2:n”);

scanf(“%d”,&in);

switch(in)

{

case 1:c_select();break;

case 2:stu_login();break;

default:

printf(“输入错误,将返回登录界面!n”);

login();break;

}

}

else

{

fwrite(&courses[j],sizeof(struct course),1,fp1);

fclose(fp1);

printf(“nntt选课成功t请选择:”);

printf(“nntt1.继续选课”);

printf(“nntt2.退出,返回登录界面!”);

scanf(“%d”,&in);

switch(in)

{

case 1:c_select();break;

case 2:stu_login();break;

default:break;

}

} }

void c_viewm()//课程浏览

{

void stu_login();

void c_view();

int

inp,i=0,n=0;

FILE *fp;

char input;

struct course courseview[10];

if((fp=fopen(“course.dat”,“rb”))==NULL)//判断是否存在课程

{

system(“cls”);

printf(“nnnt课程不存在nn”);

printf(“t<按任意键返回管理菜单>nt”);

getchar();getchar();

stu_login();//进入学生登陆菜单

}

else//存在的话循环读取文件中的信息直到文件指针到文件尾部

{

do

{

fread(&courseview[i],sizeof(struct course),1,fp);

i=i+1;

}

while(!feof(fp));

fclose(fp);//文件读完后关闭

do

{

system(“cls”);

if(i==1)

{

printf(“nnnttt没有记录!n”);

getchar();getchar();

man_login();

}

else

{

printf(“nt------共有%d条记录-------”,i-1);

printf(“nnt课程编号: %dn”,courseview[n].c_num);

printf(“nnt课程名字: %sn”,courseview[n].c_name);

printf(“nnt课程学分: %dn”,courseview[n].c_score);

printf(“nnt课程已选人数: %dn”,courseview[n].c_nelepeo);

printf(“nnt课程人数上限: %dn”,courseview[n].c_melepeo);

printf(“nnt1.上一页t2.下一页t3.回目录”);

printf(“n请选择:”);

scanf(“%d”,&inp);

switch(inp)

{

case 1:

{

if(n==0)

{

printf(“nt已到达首页 t按任意键返回”);

input=getchar();

input=getchar();

}

else

{

n=n-1;

}

break;

}

case 2:

{

if(n==i-2)

{

printf(“nt已到达尾页t按人意见返回”);

input=getchar();

input=getchar();

}

else

{

n=n+1;

}

break;

}

case 3:{man_login();break;}

default:

{

printf(“nt操作错误t按任意键返回”);

getchar();getchar();

break;

}

}

}

}while(inp!=3);

} }

void c_views()//课程浏览

{

void stu_login();

void c_view();

int

inp,i=0,n=0;

FILE *fp;

char input;

struct course courseview[10];

if((fp=fopen(“course.dat”,“rb”))==NULL)//判断是否存在课程

{

system(“cls”);

printf(“nnnt课程不存在nn”);

printf(“t<按任意键返回管理菜单>nt”);

getchar();getchar();

stu_login();//进入学生登陆菜单

}

else//存在的话循环读取文件中的信息直到文件指针到文件尾部

{

do

{

fread(&courseview[i],sizeof(struct course),1,fp);

i=i+1;

}

while(!feof(fp));

fclose(fp);//文件读完后关闭

do

{

system(“cls”);

if(i==1)

{

printf(“nnnttt没有记录!n”);

getchar();getchar();

stu_login();

}

else

{

printf(“nt------共有%d条记录-------”,i-1);

printf(“nnt课程编号: %dn”,courseview[n].c_num);

printf(“nnt课程名字: %sn”,courseview[n].c_name);

printf(“nnt课程学分: %dn”,courseview[n].c_score);

printf(“nnt课程已选人数: %dn”,courseview[n].c_nelepeo);

printf(“nnt课程人数上限: %dn”,courseview[n].c_melepeo);

printf(“nnt1.上一页t2.下一页t3.回目录”);

printf(“n请选择:”);

scanf(“%d”,&inp);

switch(inp)

{

case 1:

{

if(n==0)

{

printf(“nt已到达首页 t按任意键返回”);

input=getchar();

input=getchar();

}

else

{

n=n-1;

}

break;

}

case 2:

{

if(n==i-2)

{

printf(“nt已到达尾页t按人意见返回”);

input=getchar();

input=getchar();

}

else

{

n=n+1;

}

break;

}

case 3:{stu_login();break;}

default:

{

printf(“nt操作错误t按任意键返回”);

getchar();getchar();

break;

}

}

}

}while(inp!=3);

} }

void c_searchs(){

void stu_login();

void c_searchs();

int id,i=0,j,inp,k;

int flag=0;

FILE *fp;

struct course coursesear[10];

if((fp=fopen(“course.dat”,“rb”))==NULL)

//判断课程信息是否存在 {

system(“cls”);

printf(“nnt课程不存在t按任意键返回”);

getchar();getchar();

stu_login();

}

else//存在的话循环读取文件中的信息直到文件指针到文件尾部

{

do

{

fread(&coursesear[i],sizeof(struct course),1,fp);

i=i+1;

}while(!feof(fp));

fclose(fp);

}

system(“cls”);

printf(“nnttt请输入你要查询的课程编号:”);

scanf(“%d”,&id);

do//检查输入是否符合要求

{

for(j=0;j

{

if(id==coursesear[j].c_num)

{

flag++;

k=j;

}

}

if(flag==1)

{

system(“cls”);

printf(“nnt课程编号:%dn”,coursesear[k].c_num);

printf(“nnt课程名字:%sn”,coursesear[k].c_name);

printf(“nnt课程学分:%dn”,coursesear[k].c_score);

printf(“nnt课程已选人数:%dn”,coursesear[k].c_nelepeo);

printf(“nnt课程人数上限:%dn”,coursesear[k].c_melepeo);

getchar();getchar();

printf(“nnt1.回目录继续查询t2.退出查询系统n”);

printf(“请选择:”);

scanf(“%d”,&inp);

switch(inp)

{

case 1:c_searchs();

case 2:stu_login();

default:

{

printf(“nt没有这项服务t请按任意键重新输入”);

getchar();getchar();

}

}

}

else

{

system(“cls”);

printf(“nnt不存在对应记录n”);

printf(“nnt1.回目录继续查询t2.退出查询系统n”);

printf(“请选择:”);

scanf(“%d”,&inp);

switch(inp)

{

case 1:c_searchs();

case 2:stu_login();

default:

{

printf(“nt没有这项服务t请按任意键重新输入”);

getchar();getchar();

}

}

}

}while(inp!=1);

}

void c_searchm(){

void stu_login();

void c_searchm();

int id,i=0,j,inp,k;

int flag=0;

FILE *fp;

struct course coursesear[10];

if((fp=fopen(“course.dat”,“rb”))==NULL)

//判断课程信息是否存在 {

system(“cls”);

printf(“nnt课程不存在t按任意键返回”);

getchar();getchar();

stu_login();

}

else//存在的话循环读取文件中的信息直到文件指针到文件尾部

{

do

{

fread(&coursesear[i],sizeof(struct course),1,fp);

i=i+1;

}while(!feof(fp));

fclose(fp);

}

system(“cls”);

printf(“nnttt请输入你要查询的课程编号:”);

scanf(“%d”,&id);

do//检查输入是否符合要求

{

for(j=0;j

{

if(id==coursesear[j].c_num)

{

flag++;

k=j;

}

}

if(flag==1)

{

system(“cls”);

printf(“nnt课程编号:%dn”,coursesear[k].c_num);

printf(“nnt课程名字:%sn”,coursesear[k].c_name);

printf(“nnt课程学分:%dn”,coursesear[k].c_score);

printf(“nnt课程已选人数:%dn”,coursesear[k].c_nelepeo);

printf(“nnt课程人数上限:%dn”,coursesear[k].c_melepeo);

getchar();getchar();

printf(“nnt1.回目录继续查询t2.退出查询系统n”);

printf(“请选择:”);

scanf(“%d”,&inp);

switch(inp)

{

case 1:c_searchm();

case 2:man_login();

default:

{

printf(“nt没有这项服务t请按任意键重新输入”);

getchar();getchar();

}

}

}

else

{

system(“cls”);

printf(“nnt不存在对应记录n”);

printf(“nnt1.回目录继续查询t2.退出查询系统n”);

printf(“请选择:”);

scanf(“%d”,&inp);

switch(inp)

{

case 1:c_searchm();

case 2:man_login();

default:

{

printf(“nt没有这项服务t请按任意键重新输入”);

getchar();getchar();

}

}

}

}while(inp!=1);}

void c_add()//增加课程 {

void c_add();

void man_login();

int i=0,j,inp;

FILE *fp;

struct course course_new;

struct course courses[10];

system(“cls”);

printf(“nntt请输入课程信息”);

printf(“nntt1.课程编号:”);

scanf(“%d”,&course_new.c_num);

printf(“nntt2.课程名字:”);

scanf(“%s”,course_new.c_name);

printf(“nntt3.课程学分:”);

scanf(“%d”,&course_new.c_score);

printf(“nntt4.课程已选人数:”);

scanf(“%d”,&course_new.c_nelepeo);

printf(“nntt5.课程人数上限:”);

scanf(“%d”,&course_new.c_melepeo);

if((fp=fopen(“course.dat”,“rb”))!=NULL)

{

do

{

fread(&courses[i],sizeof(struct course),1,fp);

i=i+1;

}while(!feof(fp));

fclose(fp);

for(j=0;j<=i-1;j++)

if(course_new.c_num==courses[j].c_num)

{

system(“cls”);

printf(“nnttt对不起,这个编号已经使用过nntt按任意键返回管理菜单”);

getchar();getchar();

man_login();

break;

}

}

if((fp=fopen(“course.dat”,“rb”))==NULL)

{

fp=fopen(“course.dat”,“wb”);

}

else

{

fclose(fp);

fp=fopen(“course.dat”,“ab”);

}

fwrite(&course_new,sizeof(struct course),1,fp);

fclose(fp);

printf(“nntt信息输入完毕t按任意键继续”);

getchar();getchar();

do

{

system(“cls”);

printf(“nntt1.继续输入”);

printf(“nntt2.返回管理菜单”);

printf(“nntt请选择”);

scanf(“%d”,&inp);

if(inp!=1&&inp!=2)

{

printf(“输入不符合要求t按任意键重新选择”);

getchar();getchar();

}

}while(inp!=1&&inp!=2);

switch(inp)

{

case 1:c_add();break;

case 2:man_login();break;

} }

void c_delete()//查询后删除 {

FILE *fp;

int i=0,j,n,k,flag=0;

struct course courses[10];

void c_delete();

void man_login();

printf(“nntt请输入你要删除的课程编号:”);

scanf(“%d”,&n);

if((fp=fopen(“course.dat”,“rb”))!=NULL)

{

do

{

fread(&courses[i],sizeof(struct course),1,fp);

i=i+1;

}while(!feof(fp));

fclose(fp);

}

else

{

printf(“nntt不存在任何课程t按任意键返回”);

getchar();getchar();

man_login();

}

for(j=0;j

{

if(courses[j].c_num==n)

{

flag=1;

fp=fopen(“course.dat”,“wb”);

for(k=0;k

fwrite(&courses[k],sizeof(struct course),1,fp);

fclose(fp);

fp=fopen(“course.dat”,“ab”);

for(k=j+1;k

{

fwrite(&courses[k],sizeof(struct course),1,fp);

}

printf(“nntt记录已删除!t按任意键返回ntt”);

getchar();getchar();

man_login();

fclose(fp);

}

}

if(flag==0)

{

printf(“nntt不存在对应的课程t按任意键返回”);

getchar();getchar();

man_login();

} // printf(“nntt记录已删除!t按任意键返回ntt”);

}

int main(){

index();login();return 0;}

篇2:学生选课系统软件设计

1、前言

随着社会的发展,学生培养计划已不再一成不变,各个学校纷纷推出了面向全体学生的选课服务,这项旨在为大家提供一个更加宽松自由而且更符合学生意愿的服务已成为当代学生过程中不可缺少的一部分。正式计算机技术的迅速发展使得人们从过去复杂的手工劳动中得以解脱,从而使这种服务在现在才可能迅速普及,同时编写一套完整的学生信息显得尤为重要。

2、学生选课管理系统的组成本系统包括首页,系统公告,学生选课,教师查看,系统管理,系统帮助,联系我们7个部分。

“首页”主要是介绍衡水学院的基本情况。

“系统公告”介绍最近的一些新闻和通知,方面同学们及时了解。

“学生选课”是为学生提供选课界面。该界面要列出搜有课程信息供学生查询和选课。包括未选课程,已选课程,学生选课受一些条件的约束,如课程名额限制,该界面允许学生选课和修改退选。

“教师查看”教师可以查看学生选课情况,有详细的选课名单。

“系统管理”主要是按指定系检索该系的学生信息,维护学生,系,课程和学生选课及成绩等方面基本信息,包括增加,删除,修改

“系统帮助”主要是帮助学生能更好及时的完成选课任务。

3、系统实现

采用了ASP.NET结合SQL Server2008数据库,即将学生选课的有关数据库存放在选用的SQL Server2008作为后台的数据库。

篇3:学生选课系统软件设计

本文使用面向对象的方法, 对选课系统进行分析和设计, 并给出不同阶段的设计模型。UML是面向对象的设计工具, UML不提供任何建模方法, 它仅仅提供给我们可以用于创建模型的可视化语言。[1]运用上述思想和UML工具, 本文对学生选课系统进行分析和设计。

2 系统需求分析

学生选课系统的参与者包括学生, 老师, 系统管理员。系统可以简单描述如下:学生以学生身份用ID登陆系统, 进入学生主界面可以查询个人课表, 进行选课操作;教师选择教师身份用ID登陆系统, 进入教师主界面可以查看课表, 选课学生名单, 并打印;系统管理员具有最高权限, 可以控制选课的开始和结束、增删改课程、管理学生和教师的资料。系统基本功能如下表1所示。

2.1 用况分析

以系统为边界定义系统用况图, 如图1所示。

2.1.1 用况:登陆系统

参与者:学生、教师、管理员

目的:检查登陆者的是否有权登陆, 决定应该进入的界面。

描述:登陆界面有三个入口, 登陆者 (学生或教师或管理员) 选择相应的身份, 输入用户名和密码并提交, 系统验证后, 进入相应的界面, 非法用户将被拒绝。学生、和教师的用户名是事先分配的, 只有本校教师和学生有相应的帐户。

类型:主要的基本的

2.1.2 用况:学生选课

参与者:学生

目的:学生依据培养方案中选定的课程, 从学校开课列表中, 选择自己须上的课程, 并了解课程的相关信息。

描述:学生查看自己的培养方案, 在规定的时间内, 从课程列表中选择本学期要上的课程。同时可删除相关课程。

类型:主要的基本的

2.1.3 用况:查询课表

参与者:学生

目的:学生知道已选课程及上课时间、地点, 任课教师等信息, 名确还需再选的课程。

描述:学生依自己用户名密码登陆系统, 选择相应的学期, 即可看到该学期的课表。

类型:主要的基本的

2.1.4 用况:查询选课名单

参与者:教师

目的:教师了解将要上的课的学生名单及时间、地点。

描述:教师以教师身份登陆系统, 输入相应的学期, 即可看到自己要讲的课及学生名单、时间、地点。

类型:主要的基本的

2.1.5 用况:打印信息

参与者:学生 (教师或管理员)

目的:不同的使用者将系统中的信息打印出来。

描述:学生登陆系统, 在查询课表界面, 可打印课表;教师在选课名单界面可打印选课名单;管理员可打印课表, 学生名单及学校开课情况

类型:次要的

2.1.6 用况:管理相关登陆信息

参与者:系统管理员

目的:管理学生, 教师登陆的用户名和密码。

描述:有新学生、老师来时, 管理员要及时分配相应的用户名和密码;学生、教师走时, 要删除系统中相应的用户名和密码。

类型:次要的

2.1.7 用况:管理选课

参与者:系统管理员

目的:让学生在正确时间段内, 选到要选的课程。

描述:管理员设置选课的时间段, 添加、删除课程, 添加课程的相关信息如上课时间、地点、选课的专业、人数等。

类型:主要的

2.2 概念模型分析

面向对象的领域分析, 可以用概念模型进行描述, UML中用静态结构图的表示法来表示概念模型。分析学生选课系统得到以下概念:Student (学生) 、Teacher (教师) 、Manager (管理员) 、Select course (选课) 、Courselist (课程列表) 、course table (课程表) 、Studentlist (选课学生名单) 、Userlist (用户表) 。下图2表示了学生选课系统的概念模型。

2.3 系统顺序图分析

系统顺序图是对系统行为所作的描述的一部分, 描述了系统作什么, 而不解释系统怎么做。[2]在顺序图中, 从上到下代表时间的流失, 事件的顺序要符合用况中所描述的事件的发生顺序。分析学生选课系统中系统事件发生的顺序, 画出系统顺序图如下图3所示。

2.4 系统操作契约描述

契约是一个描述某个操作应该得到什么结果的文档。它经常采用叙述体, 强调发生了什么而不是如何发生。通常契约是用前置和后置条件中描述的状态变化来表达。[2]学生选课用况中包括的操作有以下几个契约:

2.4.1 名称:LOGIN (Studentno)

职责:学生登陆系统, 初始分配学生的ID和Password都为Studentno

类型:系统

交叉引用:R1.1

注释:快速与存储在系统中的用户列表进行匹配

异常:ID或Password在系统, 中不存在返回对话框提示

输出:成功进入相应界面

前置条件:系统用和列表中存在此用户

后置条件:学生实例被创建

2.4.2 名称:CHECKCOURSELIST (Major, term)

职责:学生查询本学期的开课的课程列表

类型:系统

交叉引用:R1.2

注释:输入专业和学期查询课表

异常:ID或Password在系统, 中不存在返回对话框提示

输出:学生所学专业开课的课程列表

前置条件:学生已成功登陆系统

2.4.3 名称:SELECTCOURSE (Coruseno)

职责:学生选择要上的课程, 添加到自己的课程表中

类型:系统

交叉引用:R1.3、R1.4、R1.5、R1.7

注释:学生根据自己的培养方案选课

异常:如果选课人数超过限制或学生无权选此课, 给出提示消息。

输出:成功选课, 给出提示信息。

前置条件:学生已成功登陆系统

后置条件:新课表被创建

新的学生名单被创建

2.4.4 名称:CHECKCOURSETABLE ()

职责:查询已选中的课程

类型:系统

交叉引用:R1.6

注释:学生查看自己的课表, 确定选课成功, 并了解上课时间、地点等信息。

输出:成功选课, 给出提示信息。

前置条件:学生已成功登陆系统

后置条件:选课实例被撤销。

3 系统设计

面向对象的设计强调职责分配, 职责分配是指为应用系统中的各种软件对象指派任务和职责, 就像给人的角色分配职责和任务一样, 包括交互图和设计类图。

3.1交互图

交互图展示出多个对象之间如何通过消息传递和协作完成任务。UML中定义了两种交互图, 两者都能够用于表达详细的或完全相同的消息交互:协作图和顺序图。[3]通过以上对用况、概念模型以及契约的分析, 可以得到学生选课的顺序图如下图4所示。

3.2设计类图

设计类图说明了软件类的规格说明和应用程序接口, 设计类图所能表达的典型信息包括:类、关联和属性、接口及其操作和常量、方法、属性类型信息、导航、类等元素之间的依赖关系。下图5表示学生选课系统的设计类图。

4 结束语

UML是一种面向对象的标准化的统一的建模语言, 结束了以往的建模语言的不一致和差别, 能够以面向对象图的方式来描述任何类型的系统, 适用于系统开发过程中从需求规格描述到系统完成后测试的不同阶段, 具有很广阔的应用领域。[4]通过描述学社选课系统的UML建模过程, 说明在UML建模机制的实际应用中, 随着系统复杂程度的不同和领域的变化, 可以根据所要创建的目标系统的特点, 将面向对象的思想和系统建模有机地联系起来, 充分利用UML建模机制。

摘要:本文使用统一建模语言 (UML) , 对学生选课系统进行分析与设计, 分别给出系统静态模型图 (用例图、概念模型图) 和动态模型图 (交互图) 及设计类图。并简要介绍系统的设计思想和功能模块, 整个过程贯穿了UML建模思想, 体现了UML的建模机制。

关键词:面向对象,UML,选课系统

参考文献

[1]李洋等.UML和模式应用[M].1版.北京:机械工业出版社, 2010:5-8

[2]Joseph Schmuller.UML基础、案例与应用[M].2版北京:人民邮电出版社, 2004:8

[3]王少华.基于UML对学生选课系统的分析与设计.科技资讯, 2006:31.

篇4:学生选课系统软件设计

【关键词】学校选课系统 后台教务管理 Structs

1 引言

随着中职学校规模的扩大,许多中职学校出现了多个校区并存的局面,且校区之间的地理位置距离较远,给学生的课程选修带来了诸多不便。为了解决这一实际问题,利用学校现有的网络资源,通过开发设计学生选课系统,学生可以轻松的通过网络进行在线选课,而学校教务人员可以通过选课系统方便、快捷的对学生的选课情况作出快速反应,统计掌握各课程的选择情况,并及时作出调整。

2 学校选课系统

学生选课系统能够帮助学校实现教务管理的数字化和网络化改革,减少教务人员的工作量,提高工作效率,减少不必要的重复;能够帮助学生轻松、自由地进行网上选课,操作方便。

通过实际调研,及对需求进行分析后,學校选课系统可以根据不同角色的功能需求进行模块划分,系统可以分为三个模块,分别是用户管理模块,学生个人管理模块和后台教务管理模块。其中,用户管理模块主要功能是学生的注册和密码的修改;学生个人管理模块主要功能是录入学生个人基本信息、查询个人信息、查询可选课程、选择课程、查询已选课程;后台教务管理模块的主要功能是增加专业信息、修改专业信息、增加新课程信息、修改课程信息和统计信息。

3 后台教务管理设计

后台教务管理模块主要实现管理专业信息、课程信息以及对学生的选课情况进行统计输出。

(1)专业管理主要实现对学校现有的设置专业信息进行管理,只有创建了专业信息,学生在填写基本信息时才能注册为该专业学生。在专业管理控制器中,可以使用Struts提供的DispatchAction将含有相关业务操作的一类处理方法放在同一个Action中,这样可以解决控制器出现的.do请求过多而导致的Action大量增加的问题。

(2)课程管理主要实现对专业所属课程信息进行修改,主要分为增加新课程和设置课程不可选。其中,增加新课程就是在指定专业中增加一个新的可选课程;而设置课程不可选是避免学生选择已经开设的课程或者已经结束的课程。课程管理控制器CourseAction.java同样继承DispatchAction,能够处理多个请求;使用insert()方法增加新的课程,updateIsFinish()方法用于课程不可选,findBySearch()用于根据学生输入条件查询课程,showInsert()用于查询所有课程信息,courseInfo()用于根据课程id编号查询课程的详细信息。

(3)信息统计主要通过输入条件查询出符合条件的课程统计信息,并统计出该课程的选课人数及学生名册,输出到文档中。信息统计控制器StatInfoAction.java同样继承DispatchAction,处理与信息统计有关的请求。findBySearch()实现搜索课程功能,stuList()实现查询指定课程学生信息功能,exPDF()和exExcel()实现文档的输出。

(4)退出系统主要在页面中销毁当前用户的会话,跳出框架并返回首页。关键代码如下:<%session.invalidate();response.sendRedirect(“../index.jsp”)%>。

4 Structs体系结构

Struts是开源软件。是基于MVC经典设计模式的框架,其中采用了Servlet技术和JSP来实现,在目前的Web应用开发中非常广泛。Struts把Servlet、JSP以及众多标签库整合到一个统一的框架中,并将显示层中的业务逻辑层和数据库层中抽象和分离出来,利用Struts框架进行开发,开发者不必再重新编写全套MVC框架代码,从而缩短开发周期。本系统采用的MVC模式,能够从教师用户权限、系统功能处理方面实现很好的分工和隔离,前端可以为用户提供风格统一、界面友好的工作面,后端的数据库操作也是可以单独管理,由学校教务人员来管理,确保数据库的完整性和同步性。

5 结论

学生在线选课系统集成计算机技术、电子技术、现代通信技术、现代信息管理技术与自动化处理等多种先进技术,以实现信息的采集、处理、发布、决策,能够高效率改善学校的选课问题,改善学校管理模式和提高服务质量,从而实现教务教学管理的数字化和网络化。

参考文献:

[1]王希饶。基于JAVAEE的设备管理系统的设计与开发[D].山东大学,2007.

[2]王景乐。基于MVC的Struts框架的研究与应用[D].武汉理工大学,2008.

[3]田可伦。基于的数据设计问题的研究与实现[D].燕山大学,2005.

[4]思志学。自己动手写Struts--构建基于MVC的开Web发框架[M].北京:电子工业出版社,2007.

[5]邓子云。JSP+Struts+Hibernaet+Spring实例精解[M].北京:电子工业出版社,2008.

篇5:学生选课管理系统规划报告

1、系统的意义与目标

网络的飞速发展深刻地影响了人们的日常生活和商业运作方式。社会的方方面面渗透着互连网的应用,使得一向烦琐的手工程序变得方便,快捷,而学校网上选课系统正是基于这一思想而发展起来的。传统的手工选课不仅复杂,也牵涉了很多的人力,对管理也造成了诸多不变,而借助网上选课系统,学生在规定选课时间段内,可以不受地点和时间的限制完成系统登录、选修课的申请和查询,而学校也可以方便地对系统进行管理和控制,提高工作效率。

2、系统的用户需求

用户的需求具体体现在各种学习成绩的提供、保存、更新和查询方面,这就要求数据库结构能充分满足各种信息的输入和输出。收集基本数据、数据结构及数据处理的流程,组成一份详尽数据字典,为后面的具体设计打下基础。学生选课管理系统的设计为选课及成绩管理提供了一个良好的工具,此系统基本实现的设计要求有:

(1)用户登录系统

提供良好的用户登录界面,输入用户名,密码进行登录。

(2)学生的需求

网上选课、选课情况查询、成绩查询。

(3)管理员

(录入、查询、修改和删 除)学生、课程基本资料。

(4)教师的需求

(录入、查询、修改和删除)学生所选课程成绩,统计每个学生的总分、平均分以及排名等功能。

3、系统经费概算

初步估算使用经费15万元,包括硬件资源、技术资料、开发费用、培训费用等。其中,开发开发期间约需9万员,调试与运行期间约需6万元。

4、系统开发计划

本系统开发计划由开发小组用10个月完成。具体时间安排计划如下:

(1)系统调研、系统分析:3个月。

(2)系统设计:2个月。

(3)系统程序设计:3个月。

(4)系统调试:1.5个月。

篇6:学生选课系统可行性分析报告

学院:数学计算机学院组长:马琴

组员:许慕霄、伏敏润、王佩军

1.引言

1.1编写目的每学期的课程都是学校安排的,学生没有选择的自由,而且课程的安排由于各方面诸多的原因经常有不适之处,尤其是先行课的问题。另外,每学期考完试,同学们都要一次又一次的往系里跑,大家挤在一个小小的布告栏前面,在几张A4纸上寻找自己的名字和成绩。虽然从去年开始,全学校也改成了“学分制”,但整个选课过程的管理从我们学生的角度来看,变得更加混乱。同学们不知道每学期有什么课可以选,哪些是选修,哪些是必修,哪些是专业课;也不确定每门课多少学分,自己已经修了多少学分;更不用说考虑一下哪门课要先学,哪门课要后学,哪些课属于一系列。所以说,大部分同学都是为了“选课”而选课,完全没有实现鼓励同学发展个性,学各自之所爱的效果。不仅如此,每当选课的时候,同学们忙,老师更忙,学校和系里都需要投入大量的人力、物力对整个选课过程进行管理。

随着科学技术的发展,计算机已经是日常生活中不可或缺的工具,将学生选课系统从人工管理方式转变成为计算机软件控制。具有检索迅速、查找方便、可靠性高、存储量达、保密性好、寿命长、成本低等巨大优点。如今,学生选课系统已成为日常教学工作中必不可少的管理软件,可对学生信息、选修课程、科目成绩进行各方面的管理,为用户提供充足的信息和快捷的查询、修改手段。选课管理系统。既面向教务处,又面向教师和学生。不同的人,不同的身份操作的权限也不同。作为教师,他可以向教务处申请增加、删除、修改课程信息,并随时了解选修本课的学生名单,还可以输入并分析考试成绩。作为教务处管理员,它的权限是最宽的。他可以对教师提出的课程设置申请进行审批,同时对教学进行安排(包括时间和教室分配、选课结果管理)。作为学生,他可以查询可以选什么课,已有多少学分,还差多少学分。最后进行选课,在学期末还可以随时进行成绩查询。现筹划一学生选课系统管理软件以代替人工管理方式,最大程度的满足各方面用户的需求。

1.2 项目背景

项目名称:学生选课系统软件。

项目提出者:宁夏大学

项目开发者:开发小组

用户:宁夏大学

1.3 定义

SQL:结构化查询语言

Eclipse:开发源代码的、基于java的可扩展开发平台。

1.4 参考资料

《软件工程》

2.可行性研究的前提

2.1 要求

主要功能:教师对学生资料、成绩以及所选课程进行修改管理;学生可通过查询自身成绩,自主选择相关课程;管理员(教务处)统管所有学生、教师的相关信息。

性能要求:所有数据实时更新保持同步,且定时备份。

输出要求:简单、快捷、实时。

输入要求:及时的修改和更新学生、教师和课程的信息。

安全与保密要求:系统本身配备一定的安全机制,保证各项数据的完整、正确。

每类用户进入系统时,均需输入唯一的用户名和密码;教师有权对学生所选课程成绩进行录入、查询和修改;学生有权对选修课程进行修改;管理员有权对学生信息、所选课程、科目成绩进行管理、修改。

2.2目标

近几年来,我们宁夏大学一直都在扩招学生,外地生源的比例也比以前大了许多,而且还有日益增多的外国留学生,在管理上更增加了管理人员的劳动量,如此多的档案资料,以原有的工作人员数量要管理好实在不容易,但如果增加工作人员,管理成本必然也会增加,得不偿失,而我们这套系统这时就会发挥出它大大的作用,让实用这领会到它的优越之处,帮助老师轻轻松松管理好学生各方面的资料,无论学生是多是少,一切都会被管理得井井有条。节省更多的人力与设备,让学生选课管理成为一项很直接人性化的管理。

2.3条件、假定何限制

运行环境:Windows98/2000/XP/Vista/7,与Windows office软件高度兼容。硬件环境:奔4以上计算机。

开发环境:SQL Server、eclipse等。

该系统预期寿命五年。

2.4决定可行性的主要因素

学生选课系统软件满足各方用户需求。

成本/效益分析结果:效益>成本。

3.对现有系统的分析

3.1处理流程和数据流程

教师登录:可上传、修改、管理学生选课和成绩的查询。

学生登录:;学生可通过查询自身成绩,自主选择相关课程,查询各科成绩。学校登录:可查询、管理所有信息。

3.2工作负荷

当前系统负担全校将近20000余名教师、学生的日常选课管理工作。

3.3人员

当前系统需要4位管理员,对其专业技术要求不高,熟悉基本的电脑操作即可。

3.4设备

一台服务器,两台PC机。

3.5局限性

由于当前系统开发技术过于老旧,稳定性、安全性能尤为不佳,致使系统频繁遭遇恶意攻击。系统反应过慢,运行效率低。由此分析得出,需要开发新的学生选课系统软件。

4.技术可行性

我们身为首都经济贸易大学信息系的学生,最骄傲的就是拥有令其他系羡慕、向往的系机房。因特尔奔腾四的中央处理器,40G大容量的硬盘,加上256M的内存,配上经久耐用、定位准确的光电鼠标,这都为系统的开发与运行提供了良好的硬件环境,就是这样一台台先进傲人的电脑躺在机房里供我们随时使用,便利程度真是如此了得啊!

身为计算机科学与技术专业大三的学生,通晓一些计算机软件知识是肯定的,运用软件编写程序的能力也是必备的。当然,我们毕竟还是学生,能力还是有限的,但我们计算机系最不缺乏的就是计算机人才,向知识渊博、诲人不倦的郑小玲老师必会给我们以极大的帮助。更何况,俗语说的好:三个臭皮匠赛过诸葛亮。我们组有4个人,起码也顶两个诸葛亮呢。相信通过我们大家的集思广益,相得益彰,我们的系统将会以最完美的姿态展现在大家的面前。

我校自建校至今已有几十年的历史,各种课程比较齐备,且比较有条理。学分制度也比较完善。教师整体水平较高。这使我们开发这一对我们来说比较复杂的系统成为可能。虽然有如此好的客观条件,但始终没有一套完善简单易用的管理系统。现行系统虽然拥有了比较规范、科学的管理方法,并积累了大量的数据信息,具有一定的可行性,但是并不能掩盖其工作量大,管理不够系统的缺点。而我们的系统将充分利用学校为我们提供的宝贵信息,在继承其优点的基础上,开发出一套更为可行的学生管理系统。这套学生选课管理系统在今后的应用中再经过不断的修正与改进,将会使我学生选课更加完善、尽美。

5.经济可行性

成本方面,关于各种软、硬件及辅助设备的购置、调试、机房及辅助设施(电源等)以及系统维护,内务开销这些费用都可以忽略不计,因为我们有自己的电脑。

学生选课管理系统省去了老师为学生展示学校为学生提供的选修课程,并作介绍,考试后把分数抄录多次以做备案和公告这些大量繁杂而由单一枯燥的劳动,可以让老师把精力放在教学和组织教学等更重要更具创造性的事情上,这就显著的提高了他们的工作效率。

取消了抄录成绩后,学校里也不会再出现残破的成绩单一层盖一层的贴在公告栏或黑板上的情景,校园环境也会因此而变得更整洁,而且也为学校省下了大量的纸张,虽然数量并不是很多,但将来系统扩展到整个学校也将是很可观的。况且,在资源日益缺乏的今天,节省纸张已不仅仅是为学校减少办公费用这一单纯的意义。

众所周知,学校的的学生多,管理起来非常困难。相应的也加大了老师的工作量,又因为教学制度的不断变动和改革,因此,总能及时统计出一份内容清晰,条理性强的学籍学分选课分析报表对老师来说真是难于登天。但如果缺少这份报表,同学们就无法清楚了解自己的学分情况,盲目选课,打乱了学习计划,加重了课业负担,而那些基本顺从课程安排的同学则浪费了许多去学习有用知识的时间,甚至临毕业时却发现未修够学分而毕不了业。这个关系到每个人命运的问题绝对马虎不得。不能再坐以待毙了,我们这套学生选课管理系统将提供一份完整的学分选课报表,并会利用管理系统的易修改性及时进行更新,让同学们在选择课程,计算学分中更加游刃有余。

近几年来,我们宁夏大学一直都在扩招学生,外地生源的比例也比以前大了许多,而且还有日益增多的外国留学生,在管理上更增加了管理人员的劳动量,如此多的档案资料,以原有的工作人员数量要管理好实在不容易,但如果增加工作人员,管理成本必然也会增加,得不偿失,而我们这套系统这时就会发挥出它大大的作用,让实用这领会到它的优越之处,帮助老师轻轻松松管理好学生各方面的资料,无论学生是多是少,一切都会被管理得井井有条。

6.社会可行性

经过我们的调查,绝大部分的任课老师,行政人员和校领导都为现行系统的繁琐和冗杂的工作量所深深困扰着。在得知我们开发这套系统的计划后,他们都有一种守得云开见月明的感觉,并表示非常愿意在系统的开发过程中给予全力支持以及积极的配合。

我们这套学生选课管理系统不仅能够让老师更清晰的掌握自己学生的信息,同时也让学生自己更容易的知道如何准确的选课,如何计算学分及尽早得知自己的考试成绩。这就大大的为老师提供了便利。比如,在每学期期末考试后,大多数学生都已回到家中,如果为了获取考试成绩又不得不再返回学校的话,既费时

又费力,学生牢骚满腹,老师也不能提早放假休息。而我们的系统可以提供网上查分,同学们在家中只需要上网就可以在第一时间知道自己的成绩。还有,学生们也可通过我们的系统进行选课来凑够学分完成学业。在系统中会显示出个门课程的性质(如必修、限选、任选),其所占学分及任课老师的资料,其应用性之强得到充分发挥。

我们学校的电脑普及率已达到了很高的水平,尤其是我们系拥有设备先进管理完善的系机房,而学院的老师和学生们对电脑的操作也是驾轻就熟。因此,只要我们这套学生选课系统操作简单,实用,合理,大家肯定是乐于接受并积极响应和支持的。对于这一点,我们是很有信心的。随着信息时代的来临,学籍学分 选课等信息管理的自动化,一体化正是大势所趋。

7.其他可供选择的方案

上一篇:好媳妇典型发言稿下一篇:岭集中学“教学开放周”活动实施方案及通知