学生档案管理系统c语言[小编推荐]

时间:2019-05-14 04:49:10下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《学生档案管理系统c语言[小编推荐]》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《学生档案管理系统c语言[小编推荐]》。

第一篇:学生档案管理系统c语言[小编推荐]

学生档案管理系统 内容与要求

【问题描述】

设计一个学生档案管理系统,对学生档案进行管理。每个学生的信息包括:学号、姓名、性别、出生年月、是否党员、手机号码、家庭住址、各门课成绩(每门课包括课程名与成绩)。系统要求包含如下功能:

1。创建功能:初始输入每个学生的信息(学号、姓名、性别、出生年月、是否党员、手机号码、家庭住址)并保存。

2。显示功能:显示全部学生的信息(包括各门课的成绩)。

3。输入某课程成绩功能:按学号、成绩输入选修某门课的所有学生的成绩(说明:并不是所有学生都选同一门课,每个学生选的课可不一样)。

4。统计平均成绩功能:计算每个学生的平均成绩。5。查找功能:按姓名或学号查找学生记录,并显示。6。排序功能:按学号或平均成绩进行排序,并显示。7。插入功能:插入一条学生记录。8。删除功能:删除指定学生的记录。

要求提供一个界面来调用各个功能,界面应尽可能清晰美观。【具体要求】

1。系统应以菜单方式工作,举例如下:

程序运行后显示如下主界面:

****************************************

1--------------创建

2--------------显示

3--------------输入成绩

4--------------统计成绩

5--------------查找

6--------------排序

7--------------插入

8--------------删除

9--------------退出

****************************************

通过选择1-9来确定要做哪一个操作。

若选5,则出现如下界面:

****************************************

1----------按学号查询

2----------按姓名查询

**************************************** 2。要求采用顺序存储结构存储学生基本信息,每个学生的信息是一个数据元素,而其中每个学生各门课的成绩用单链表存储结构存储。【实现提示】

顺序表每个数据元素包括学号、姓名、性别、出生年月、是否党员、手机号码、家庭住址、成绩链表的头指针;成绩链表每个结点的数据域包括课程名与成绩。

【测试数据】

自己设计,报告上要求给出各种情况的数据测试结果。【实现说明】

有能力的同学在完成上述功能的基础上,可以充分发挥自己的想象力增加并完善该系统的功能,如采用文件来存储学生信息,增加输出某门课的成绩记录单功能等等。总体设计

一、设计步骤

分析问题,给出数学模型,设计相应的数据结构。

(1)按照课程要求,可以将学生基本信息以顺序存储方式存放在一数组中,而学生基本信息由于有多个项目,可以将单个学生的信息以结构体的方式存储;

(2)输入的成绩可以在每个通过在结构体中加入一链表来实现存储多门课程的目的,为避免每插入一门课程就需要遍历一次链表,此处应以队列的方式来存储课程;

(3)统计成绩计算出成绩之后为方便后续的显示平均成绩及排序须在每个学生的信息中再加入平均成绩一项; 二.功能模块及调用关系说明

(1)创建基本信息:通过fopen()以读的方式打开“basedata.dat”文件,再用fscanf()将文档中的基本信息存储到p1数组中;

(2)显示学生信息:可以通过遍历数组p1来进行输出,若基本信息为空,则提示先创建信息,若学生课程信息未存入则不进行显示,若课程信息已存入,则在遍历数组的基础上再对每个数组元素中的链表进行遍历输出;

(3)输入成绩:先输入课程代号,通过strcmp()字符串比较判断再同(1)打开相应文件并将信息写入一中间变量里,再通过中间变量中写入的学号查找到该学生,并将这条课程信息用EnQueue()存到该学生的课程链表中,若该课程已存在与该学生的课程链表中则不进行重复写入,其中用isExitcNo()判断是否存在该课程;

(4)统计成绩:通过遍历每个学生的课程链表计算并存储每个学生的平均成绩,若未录入基本信息则提示先创建基本信息,若课程链表为空,则提示先输入成绩;

(5)查找:1.按学号查询:建立一个for循环,通过输入的学号找到相应的学生,并输出该学生的信息,2.按姓名查询:建立一个for循坏,通过输入的姓名找到相应学生,并输出该学生的信息,若并未创建基本信息,则提示先创建基本信息;

(6)排序:1.按学号排序:先将学号用sscanf()转化为int型,再用插入排序法对数组进行排序;

2.按平均成绩排序:利用插入排序法对数组元素中的平均值比较从而对数组进行排序;

若并未创建基本信息,则提示先创建基本信息;(7)插入:

先输入一个学号,用isNo()判断输入的是否为数字,若输入的并不为数字,则提示其重新输入,输入学号后,若该学号已经存在,则提示重新输入;

在学号输入正确无误的前提下,再输入姓名,再输入性别,用isGender()判断输入的是否是性别,若不为性别,则提示重新输入,再输入出生日期,用isNo判断是否为数字,若不为数字则提示重新输入,再输入是否为党员用isYN()判断格式是否正确,若格式错误则提示重新输入,再输入手机号码,并用isNo()判断是否为数字,若不为数字则提示重新输入,最后再输入地址; 学生基本信息输入完成后再输入课程信息,课程信息记录到数组元素的课程链表中;

输入完成后再用InsertFile()将学生信息写回到学生基本信息文档及课程文档中;

(8)删除:

若学生信息为空,则提示先创建学生信息,学生信息不为空,则输入学号,再通过输入的学号查找到相应的学生并删除数组中该条学生信息,若无法找到该学号则提示无该学生,要求其重新输入;

删除成绩后再用reWFile()将数组中的信息重新写回到学生基本信息文档及课程文档中;

(9)退出程序。详细设计 1)实现概要设计中定义数据的存储结构 struct student{ char No[10];

char name[10];

//学生信息 //学生学号 //学生姓名

char gender[5];//学生性别

char brithday[8];//学生生日

char tpartym[5];//是否为党员

char phoneNo[15];//手机号码

char addr[20];

//学生地址

courses *front;//学生课程队列的队首

courses *rear;int average;} struct courses{ char cNo[15];char sNo[10];int degree;

//课程信息 //课程代号 //课程中学生学号 //相应学号学生的成绩 //学生课程队列的队首 //学生所有课程的平均成绩

courses *next;} 2)函数的算法实现

(1)InitQueue(student &Q)函数的实现(初始化队列)

形参为队列名称;在函数中将用new生成新的节点,并将队头和对位指向此节点,再将头节点的指针域置空。

(2)EnQueue(student &Q,courses e)入队函数的实现

形参一个为队列名称,另一个为插入元素;先为入队元素分配节点空间并用指针p指向该节点,再将节点的数据域置为e然后将新节点插入到队尾并修改队尾指针,使队尾指针指向下一个节点。

(3)GetLine(student Q)输出队列函数的实现

形参为队列名称;先设一个中间变量r作为节点指针,当对首与队尾相等时,即队列为空,则提示课程信息为空,当对列不为空时,将r赋值为队首所指向的指针域,在while循环中当r不为空时分别输出课程名称及对应课程的成绩,再将r指向下一个节点,当r为空时即遍历对列完成则结束循环。

(4)CalculateAve(student &Q)计算平均成绩的实现 形参为队列名称,即为单个数组元素;设置一个变量n并置初值为0用于课程数的计数,设一个中间变量r作为节点指针,将r赋值为队首所指向的指针域,在while循环中当r不为空时将每门课程成绩相加,加完所有成绩之后再将总成绩除以课程数并将所得平均成绩赋值给数组元素。

(5)isExitcNo(student Q,char *cNo)判断该课程是否存在于数组元素队列中

设一个flag做为标志值设置初值为0,在for循环中对每个数组元素进行遍历,在循环过程中用strcmp()将该数组元素中已有课程代号与输入课程代号进行比较,若有相等的课程,则将flag值置为1,并直接结束循环,最后返回flag(6)isNo(char *No)判断是否为数字

若字符串全为数字,则函数返回1,若字符串中有一个不为数字,则返回0.(7)isGender(char *gender)判断是否为性别

若字符串判断为“男“或”女“,则函数返回1,反之则返回0.(8)InsertFile(student Q)插入文件

将文件用fopern()以添加的方式打开,用fprintf()将插入的信息写入文件(9)reWFile(student *p1,int i)写回文件

将文件用fopen()以写的方式打开,用fprintf()将删除信息后的数组重新写回到文件中

3)创建基本信息的算法实现

先用fopen()以读方式打开学生基本信息文档,并将返回地址赋值给文件指针型变量fp,若打开文件错误则提示文件打开错误,用feof()判断是否为文件结尾,用fscanf()将文档中读出的信息赋值分别赋值给p1[i]中的各项数据项,用fscanf()!=EOF防止读入文件中的回车空白行,读入信息后用isExistNo()判断该学号是否已经存在,若存在则不读入该行信息,若不重复则用InitQueue()初始化每个数组元素的队列,读完所有信息后提示创建成功并用fclosef()关闭前面打开的基本信息文件; 4)显示学生信息的算法实现

先通过判断数组长度i来判断学生信息数组是否为空,若i为0,即数据为空,则提示“信息为空,请先创建基本信息“,若数据不为空,则利用for循环对每个数组元素的数据信息进行输出,分别输出p1[j].No,p1[j].name,p1[j].gender p1[j].brithday,p1[j].phoneNo,p1[j].tpartym,p1[j].addr,再在每次循环中用GetLine(p1[j])对该学生的各门课程名及成绩进行输出;若还未存储成绩则 不对课程成绩进行输出; 5)输入成绩的算法实现 先通过判断数组长度i来判断学生信息数组是否为空,若i为0,即数据为空,则提示“请先创建基本信息”,若数据不为空,先定义一个courses类型的中间变量e,并将e的next指针域设置为空,之后输入课程代号,将输入的课程代号存入e.cNo中,在通过strcmp(_)去与已知的课程代号相比较,找到满足条件的课程代号后用fopen()打开对应的课程文件并将文件地址赋值给fp1,打开文件后用fscanf()将文件中的数据赋值给e.sNo,e.degree,赋值完成后通过e.sNo找到对应的数组元素,并用isExitcNo()判断该门课程是否存在于该数组元素的队列中,若不存在则用EnQueue(p1[j],e)将该课程的信息存入数组元素的队列中,若已经存在该门课程的信息,则不将该课程信息存入数组元素的队列中,存入所有成绩完成后用fclose(fp1)关闭相应的文件; 6)统计成绩的算法实现

先通过判断数组长度i来判断学生信息数组是否为空,若i为0,即数据为空,则提示“请先创建基本信息“,若数据不为空,则通过建立一个for循环,在循环过程中先判断成绩信息是否为空,若成绩信息为空则提示先输入成绩,反之则用CalculateAve(p1[j])计算每个学生所有课程成绩的平均值,并将函数返回值赋值给p1[j].average;7)查找学生信息的算法实现

先通过判断数组长度i来判断学生信息数组是否为空,若i为0,即数据为空,则提示“请先创建基本信息”,若数据不为空,通过输入一选择值来选择进行学号搜索或按姓名搜索,若该值为1,先输入一个学号存储于r中,再通过建立一个for循环来对数组进行遍历(设立一个flag值用于判断是否能找到该条学生信息,flag初值定为0),每次循环将数组元素中的学号与r进行比较,若学号相等,则对该学生的信息进行输出,并将flag赋值为1,若结束循环后flag值仍为0,即数组中无该条学生的信息,则提示“查无此人”

若选择值为2则先输入一个姓名存储于r中,再通过建立一个for循环来对数组进行遍历(设立一个flag值用于判断是否能找到该条学生信息,flag初值定为0),每次循环将数组元素中的姓名与r进行比较,若相等,则对该学生的信息进行输出,并将flag赋值为1,若结束循环后flag值仍为0,即数组中无该条学生的信息,则提示“查无此人” 8)排序的算法实现

先通过判断数组长度i来判断学生信息数组是否为空,若i为0,即数据为空,则提示“请先创建基本信息“,若数据不为空,则通过输入一选择值来选择进行学号排序或按平均成绩排序,若该值为1,则进行按学号排序,因此处的学号为字符型,故无法直接进行大小比较,因此需用sscanf()将字符型变量转化为int型变量再进行大小比较,此处以插入法排序对数组进行排序

若选择值为2,则通过比较数组中平均值的大小对数组进行排序,若成绩信息为空则提示先输入成绩,若不为空则以插入法排序对数组进行排序;

总结

1.在一周的时间里,不断地对程序及各模块进行修改、编译、调试、运行,其间遇到很 多问题,但通过自己的努力及询问同学的帮助都一一解决了。2.程序是写出来的,不是想出来的。开始阶总是在想,总感觉很困难做不了,但是真正 投入其中之后才发觉其实只要用心,只要有克服一切的勇气和信心就可以把程序做好,错误总是越改越少的。

3.要用愉悦的心情去做,从编程的过程中体会乐趣,兴趣是最好的老师就是这么回事

4.要善于利用编程软件的调试功能调试自己的程序,通过程序的调试我发现并解决了许多问题

5.通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一 步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。

6.通过实践,我也发现我的很多不足之处,首先是自己平时上机练习太少,知识的积压给编程带来了一定的麻烦。另外我对数据结构的一些标准库函数还不太了解,如开始进入系统后发现操作的界面很乱,如果能够及时的清屏那样就会变的很明了。查阅了相关的资料和问同学后我知道只要在程序中调用库函数system(”cls“)就可以了,知道了这个函数的基本用法;还有对数据结构中经常出现的错误也不了解,通过实践,使我独自处理错误的能力也有了很大的提高。

7.编写程序需要考虑到程序运行的各种状况,这样才能使程序使用的长久,不易出现bug。

附录

[单击此处添加程序源代码] 主程序: #include #include #include #include #define OK 1 #define ERROR 0 typedef int Status;using namespace std;#include”test1.h“ int main(){ student p1[100];FILE *fp;int choice;int i=0;

do{

cout<<”*******************************************************************************“<

cout<<”

1--------------创建“<

cout<<”

2--------------显示“<

cout<<”

3--------------输入成绩“<

cout<<”

4--------------统计成绩“<

cout<<”

5--------------查找“<

cout<<”

6--------------排序“<

cout<<”

7--------------插入“<

cout<<”

8--------------删除“<

cout<<”

9--------------退出“<

cout<<”*******************************************************************************“<

cin>>choice;

system(”CLS“);

switch(choice){

case 1:{

if(!(fp=fopen(”e:mysbasedata.dat“,”r“))){

cout<<”打开文件错误“<

exit(0);}

while(!feof(fp))

if((fscanf(fp,”%s %s %s %s %s %s %s“,p1[i].No,p1[i].name,p1[i].gender,p1[i].brithday,p1[i].phoneNo,p1[i].tpartym,p1[i].addr))!=EOF){

if(isExistNo(p1,p1[i].No,i))

continue;

else{

InitQueue(p1[i]);

i++;

p1[i].average=0;

}}

if(i==0)

cout<<”文件为空,请检查文件“<

else

cout<<”创建成功“<

fclose(fp);

break;}

case 2:

if(i==0)

cout<<”信息为空,请录入信息“<

else

for(int j=0;j

cout<

p1[j].name<<” “<<

p1[j].gender<<” “<<

p1[j].brithday<<” “<<

p1[j].phoneNo<<” “<<

p1[j].tpartym<<” “<<

p1[j].addr<

GetLine(p1[j]);

}

break;

case 3:

if(i==0)

cout<<”请先创建基本信息“<

else{

char c[10];

FILE *fp1;

courses e;

e.next=0;

//student Q;

//InitQueue(Q);

cout<<”请输入课程代号,若要返回上层请输入0“<

do{

//cout<<”请输入课程代号,若要返回上层请输入0“<

cin>>c;

if(strcmp(c,”c01“)!=0&&strcmp(c,”c02“)!=0&&strcmp(c,”c03“)!=0&&strcmp(c,”c04“)!=0&&strcmp(c, ”0“)!= 0){

cout<<”课程代号出错,请重新输入“<

continue;

}

if(strcmp(c,”c01“)==0){

strcpy(e.cNo,”c01“);

strcpy(e.cname,”原理基础“);

if(!(fp1=fopen(”e:mysc01.txt“,”r“))){

cout<<”打开文件错误“<

exit(0);

}

else{

while(!feof(fp1))

if((fscanf(fp1,”%s %d“,e.sNo,&e.degree))!=EOF){

for(int j=0;j

if((strcmp(e.sNo,p1[j].No)==0)&&(isExitcNo(p1[j],e.cNo)==0))

EnQueue(p1[j],e);

}

}

fclose(fp1);

}

else if(strcmp(c,”c02“)==0){

strcpy(e.cNo,”c02“);

strcpy(e.cname,”数据结构“);

if(!(fp1=fopen(”e:mysc02.txt“,”r“))){

cout<<”打开文件错误“<

exit(0);}

else{

while(!feof(fp1))

if((fscanf(fp1,”%s %d“,e.sNo,&e.degree))!=EOF){

for(int j=0;j

if((strcmp(e.sNo,p1[j].No)==0)&&(isExitcNo(p1[j],e.cNo)==0))

EnQueue(p1[j],e);

}

}

fclose(fp1);

}

else if(strcmp(c,”c03“)==0){

strcpy(e.cNo,”c03“);

strcpy(e.cname,”数学建模“);

if(!(fp1=fopen(”e:mysc03.txt“,”r“))){

cout<<”打开文件错误“<

exit(0);}

else{

while(!feof(fp1))

if((fscanf(fp1,”%s %d“,e.sNo,&e.degree))!=EOF){

for(int j=0;j

if((strcmp(e.sNo,p1[j].No)==0)&&(isExitcNo(p1[j],e.cNo)==0))

EnQueue(p1[j],e);

}

}

fclose(fp1);

}

else if(strcmp(c,”c04“)==0){

strcpy(e.cNo,”c04“);

strcpy(e.cname,”微观经济“);

if(!(fp1=fopen(”e:mysc04.txt“,”r“))){

cout<<”打开文件错误“<

exit(0);}

else{

while(!feof(fp1))

if((fscanf(fp1,”%s %d“,e.sNo,&e.degree))!=EOF){

for(int j=0;j

if((strcmp(e.sNo,p1[j].No))==0&&(isExitcNo(p1[j],e.cNo)==0))

EnQueue(p1[j],e);

}

}

fclose(fp1);

}

//else

// cout<<”请输入正确的课程代号“<

}while((strcmp(c,”0“))!=0);}

break;

case 4:

if(i==0)

cout<<”信息为空,请先创建基本信息“<

else{

for(int j=0;j

cout<

p1[j].name<<” “;

if(!(p1[j].front->next))

cout<<”成绩为空,请先输入成绩“<

else{

CalculateAve(p1[j]);

cout<

cout<

}

}

break;

case 5:

if(i==0)

cout<<”信息为空,请先创建信息“<

else{

int a;

do{

system(”CLS“);

cout<<”****************************************“<

cout<<”1----------按学号查询“<

cout<<”2----------按姓名查询“<

cout<<”0----------返回上层“<

cout<<”****************************************“<

cin>>a;

system(”CLS“);

char r[10];

if(a==1)do{

strcpy(r,”1“);

int flag=0;

cout<<”请输入学号,返回上层请按0“<

cin>>r;

for(int j=0;j

if(strcmp(p1[j].No,r)==0){

cout<

p1[j].name<<” “<<

p1[j].gender<<” “<<

p1[j].brithday<<” “<<

p1[j].phoneNo<<” “<<

p1[j].tpartym<<” “<<

p1[j].addr<

GetLine(p1[j]);

flag=1;}

if(!flag)

cout<<”查无此人,请重新输入“<

}while(strcmp(r,”0“)!=0);

else if(a==2)

do{

strcpy(r,”1“);

int flag=0;

cout<<”请输入姓名,返回上层请按0“<

cin>>r;

for(int j=0;j

if(strcmp(p1[j].name,r)==0){

cout<

p1[j].name<<” “<<

p1[j].gender<<” “<<

p1[j].brithday<<” “<<

p1[j].phoneNo<<” “<<

p1[j].tpartym<<” “<<

p1[j].addr<

GetLine(p1[j]);

flag=1;}

if(!flag)

cout<<”查无此人,请重新输入“<

}while(strcmp(r,”0“)!=0);

else if(a==0)

break;

else{

cout<<”请重新选择“<

system(”pause“);}

}while(1);}

break;

case 6:

if(i==0)

cout<<”信息为空,请先创建基本信息“<

else{

int r;

do{

cout<<”****************************************“<

cout<<”1----------按学号排序“<

cout<<”2----------按平均成绩排序“<

cout<<”0----------返回上层“<

cout<<”****************************************“<

cin>>r;

if(r==1){

for(int k=1;k

{

int a,b;

sscanf(p1[k].No,”%d“,&a);

student temp=p1[k];//temp标记为未排序第一个元素

int j=k;

元素

sscanf(p1[j-1].No,”%d“,&b);while(j>=0&&b>a){ p1[j]=p1[j-1];j--;sscanf(p1[j-1].No,”%d“,&b);} p1[j]=temp;} for(int j=0;j

cout<

} } else if(r==2){ for(int k=1;k

int a;

a=p1[k].average;student temp=p1[k];//temp标记为未排序第一个 int j;for(j=k;j>0&&p1[j-1].average>temp.average;j--){ p1[j]=p1[j-1];} p1[j]=temp;} for(int j=0;j

cout<

next))

cout<<”成绩信息为空,请输入该学生成绩“;else{

if(p1[j].average==0)

cout<<”请先计算平均成绩“;

else

cout<

cout<

}

}

else if(r==0)

break;

else{

cout<<”请重新选择“<

system(”pause“);} }while(1);} break;case 7:{

int a=-1;

do{

cout << ”请输入学号“ << endl;

while(1){

cin >> p1[i].No;

if(isNo(p1[i].No))

break;

else

cout<<”格式错误,请重新输入“<

}

if(isExistNo(p1,p1[i].No,i)){

cout<<”该学号已存在“<

continue;}

cout << ”请输入姓名“ << endl;

cin >> p1[i].name;

cout << ”请输入性别“ << endl;

while(1){

cin >> p1[i].gender;

if(isGender(p1[i].gender)==1)

break;

else

cout<<”格式错误,请重新输入“<

}

cout << ”请输入出生年月“ << endl;

while(1){

cin >> p1[i].brithday;

if(isNo(p1[i].brithday))

break;

else

cout<<”格式错误,请重新输入“<

}

cout << ”是否为党员“ << endl;while(1){

cin >> p1[i].tpartym;if(isYN(p1[i].tpartym))

break;else

cout<<”格式错误,请重新输入“<

cout << ”请输入手机号码“ << endl;while(1){

cin >> p1[i].phoneNo;if(isNo(p1[i].phoneNo))

break;else

cout<<”格式错误,请重新输入“<

cout << ”请输入地址“ << endl;cin >> p1[i].addr;InitQueue(p1[i]);p1[i].average=0;

//if(!(fp=fopen(”e:mysbasedata.dat“,”a“)))//cout<<”打开文件错误“<

cout << ”请输入课程代号,输0结束“ << endl;cin >> e.cNo;

//if(isExitcNo(p1[i],e.cNo))

// cout<<”该课程已存在,请勿重新输入“<

if(strcmp(e.cNo,”c01“)==0)

strcpy(e.cname,”原理基础“);else if(strcmp(e.cNo,”c02“)==0)

strcpy(e.cname,”数据结构“);else if(strcmp(e.cNo,”c03“)==0)

strcpy(e.cname,”数学建模“);else if(strcmp(e.cNo,”c04“)==0)

strcpy(e.cname,”微观经济“);else if(strcmp(e.cNo, ”0“)== 0)

break;else {

cout<<”课程代号出错,请重新输入“<

continue;}

cout << ”请输入该课程成绩“ << endl;

cin >> e.degree;

if(exiscNoreassign(p1[i],e.cNo,e.degree)==0)

EnQueue(p1[i], e);

//}

}

InsertFile(p1[i]);

cout << ”1.继续添加“ << endl;

cout<<”0.返回“<

cin >> a;

i++;

} while(a!=0);}

break;case 8:{ int a=-1;do{ int flag=0;if(i==0){

cout<<”信息为空,请先创建基本信息“<

a=0;

} else{

char c[10];

student temp;

cout<<”请输入要删除的学号“<

cin>>c;

for(int j=0;j

{

if(strcmp(p1[j].No,c)==0)

{

i--;

for(int k=j;k

p1[k]=p1[k+1];

flag=1;

break;

}

}

if(flag==0)

cout<<”该学号不存在或已被删除“<

else

reWFile(p1,i);

cout<<”1.继续删除“<

cout<<”0.返回上层“<

cin>>a;

}

}while(a!=0);}

break;

case 9:break;

defalult:

cout<<”请输入1-9的数字:“<

system(”pause“);

break;} system(”pause“);system(”CLS“);}while(choice!=9);return 0;}

头文件: typedef struct courses{ char cNo[15];char cname[20];char sNo[10];int degree;courses *next;}courses;typedef struct student{ char No[10];char name[10];char gender[5];char brithday[8];char tpartym[5];char phoneNo[15];char addr[20];//courses a;courses *front;courses *rear;int average;}student;/*typedef struct{ courses *front;courses *rear;}LinkQueue;*/ Status InitQueue(student &Q){ Q.front=Q.rear=new courses;Q.front->next=0;return OK;} Status EnQueue(student &Q,courses e){ courses *r;r=new courses;strcpy(r->cNo,e.cNo);strcpy(r->cname,e.cname);r->degree=e.degree;r->next=0;Q.rear->next=r;Q.rear=r;return OK;} Status DeQueue(student &Q,courses &e){ courses *r;if(Q.front==Q.rear)return ERROR;r=Q.front->next;strcpy(e.sNo,r->sNo);e.degree=r->degree;Q.front->next=r->next;if(Q.rear=r)

Q.rear=Q.front;delete r;return OK;} Status GetLine(student Q){ courses *r;if(Q.front==Q.rear)

cout<<”课程信息为空,请先输入课程信息“;else{

r=Q.front->next;

while(r){

//strcpy(e.cNo,Q.front->next->cNo);

//e.degree=Q.front->next->degree;

cout<cname<<” “<degree<<” “;

r=r->next;}} cout<next;Q.average=0;while(r){

Q.average+=r->degree;

r=r->next;

n++;} Q.average/=n;return OK;} int isExitcNo(student Q,char *cNo){ int flag=0;courses *r;if(Q.front==Q.rear)return ERROR;r=Q.front->next;while(r){ if(strcmp(r->cNo,cNo)==0){

flag=1;

break;} r=r->next;} return flag;} int isExistNo(student *p1,char *No,int i=0){ int j=0,flag=0;for(j=0;j

if(strcmp(p1[j].No,No)==0)

{

flag=1;

break;

} return flag;} int exiscNoreassign(student &Q,char *cNo,int degree){ int flag=0;courses *r;if(Q.front==Q.rear)return ERROR;r=Q.front->next;while(r){ if(strcmp(r->cNo,cNo)==0){

r->degree=degree;

flag=1;

break;} r=r->next;} return flag;} int isNo(char *No){ int j,flag=1;for(j=0;No[j]!='';j++){

if(No[j]<'0'||No[j]>'9'){

flag=0;

break;

} } return flag;} int isGender(char *gender){ int flag=0;if((strcmp(gender,”男“)==0)||(strcmp(gender,”女“)==0))

flag=1;return flag;} int isYN(char *YN){ int flag=0;

if((strcmp(YN,”是“)==0)||(strcmp(YN,”否“)==0))

flag=1;return flag;} Status InsertFile(student Q){ FILE *fp1;if(!(fp1 = fopen(”e:mysbasedata.dat“, ”a“)))

cout << ”打开文件错误“ << endl;fprintf(fp1,”%s %s %s %s %s %s %sn“,Q.No,Q.name,Q.gender,Q.brithday,Q.phoneNo,Q.tpartym,Q.addr);fclose(fp1);courses *r;if(Q.front == Q.rear)return ERROR;r = Q.front->next;while(r){

if(strcmp(r->cNo, ”c01“)== 0){

if(!(fp1 = fopen(”e:mysc01.txt“, ”a“)))

cout << ”打开文件错误“ << endl;

else

fprintf(fp1, ”%s %dn“, Q.No, r->degree);

fclose(fp1);

}

else if(strcmp(r->cNo, ”c02“)== 0){

if(!(fp1 = fopen(”e:mysc02.txt“, ”a“)))

cout << ”打开文件错误“ << endl;

else

fprintf(fp1, ”%s %dn“, Q.No, r->degree);

fclose(fp1);

}

else if(strcmp(r->cNo, ”c03“)== 0){

if(!(fp1 = fopen(”e:mysc03.txt“, ”a“)))

cout << ”打开文件错误“ << endl;

else

fprintf(fp1, ”%s %dn“, Q.No, r->degree);

fclose(fp1);

}

else if(strcmp(r->cNo, ”c04“)== 0){

if(!(fp1 = fopen(”e:mysc04.txt“, ”a“)))

cout << ”打开文件错误“ << endl;

else

fprintf(fp1, ”%s %dn“, Q.No, r->degree);

fclose(fp1);

}

r = r->next;

} return OK;} Status reWFile(student *p1,int i){ FILE *fp,*fp1,*fp2,*fp3,*fp4;if(!(fp = fopen(”e:mysbasedata.dat“, ”w“))){

cout << ”打开文件basedata错误“ << endl;

exit(0);} if(!(fp1 = fopen(”e:mysc01.txt“, ”w“))){

cout << ”打开文件c01错误“ << endl;

exit(0);} if(!(fp2 = fopen(”e:mysc02.txt“, ”w“))){

cout << ”打开文件c02错误“ << endl;

exit(0);} if(!(fp3 = fopen(”e:mysc03.txt“, ”w“))){

cout << ”打开文件c03错误“ << endl;

exit(0);} if(!(fp4 = fopen(”e:mysc04.txt“, ”w“))){

cout << ”打开文件c04错误“ << endl;

exit(0);} for(int j=0;jnext;while(r){

if(strcmp(r->cNo, ”c01“)== 0)

fprintf(fp1, ”%s %dn“, p1[j].No, r->degree);

else if(strcmp(r->cNo, ”c02“)== 0)

fprintf(fp2, ”%s %dn“, p1[j].No, r->degree);

else if(strcmp(r->cNo, ”c03“)== 0)

fprintf(fp3, ”%s %dn“, p1[j].No, r->degree);

else if(strcmp(r->cNo, ”c04“)== 0)

fprintf(fp4, ”%s %dn", p1[j].No, r->degree);

r = r->next;

} } fclose(fp);fclose(fp1);fclose(fp2);fclose(fp3);fclose(fp4);return OK;}

第二篇:C语言课程设计学生选课系统

题目

一、学生选课管理系统

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

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

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

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

第五部分:程序的优缺点

第六部分:心得体会

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

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

目录

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

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

目的:运用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;}

第三篇:学生档案管理系统

目录 摘要 ABSTRACT 前言

第一章 为什么要开发一个学生档案管理系统? 第二章 计算机已经成为我们学习和工作的得力助手 1.1 在中小学中用计算机管理学生档案的意义 1.2 为将来学校上网做好准备 1.4 学生档案的设计分析

第三章 怎样开发一个学生档案管理系统? 2.1 编程环境的选择 2.2 关系型数据库的实现 2.3 二者的结合(DBA)

第四章 Windows下的Visual Basic 编程环境简介 3.1 告别“hello world”的年代 3.2 面对对象的编程 3.3 实现菜单选项 3.4 实现工具栏 3.5 帮助 3.6关于系统

第五章 使用Access2000 实现关系型数据库 4.1 数据库的概念 4.2 新建一个数据库 4.3 修改已建的数据库 4.4 实现数据库之间的联系 第五章 系统总体规划 5.1 系统功能 5.2 流程图

第六章 系统具体实现 6.1 用户界面的实现 6.1.1 封面 6.1.2 主界面 6.1.3 帮助系统 6.2 数据库的实现 6.2.1 学籍数据库 6.2.2 学生成绩库 6.2.3 课程库 6.3 与VB的连接 第七章 结束语 第八章 主要参考文献 附录

--------------摘要--------------学生档案管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。

经过分析,我们使用 MICROSOFT公司的 VISUAL BASIC开发工具,利用其提供的各种面向对象的开发工具,尤其是数据窗口这一能方便而简洁操纵数据库的智能化对象,首先在短时间内建立系统应用原型,然后,对初始原型系统进行需求迭代,不断修正和改进,直到形成用户满意的可行系统。

关键字:控件、窗体、域。

--------------ABSTRACT--------------The system of managing student file is a typical application of managing information system(know as MIS),which mainly includes building up data-base of back-end and developing the application interface of front-end.The former required consistency and integrality and security of data.The later should make the application powerful and easily used.By looking up lots of datum, we selected Visual Basic presented by Microsoft because of its objective tools in Win32.VB offered a series of ActiveX operating a data-base.It can give you a short-cut to build up a prototype of system application.The prototype could be modified and developed till users are satisfied with it.Keywords: ActiveX , Form , Field.--------------前言--------------学生档案管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生档案管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。

作为计算机应用的一部分,使用计算机对学生档案信息进行管理,具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学生档案管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。

因此,开发这样一套管理软件成为很有必要的事情,在下面的各章中我们将以开发一套学生档案管理系统为例,谈谈其开发过程和所涉及到的问题及解决方法。第一章

为什么要开发一个学生档案管理系统?

计算机已经成为我们学习和工作的得力助手:

今天,计算机的价格已经十分低廉,性能却有了长足的进步。它已经被应用于许多领域,计算机之所以如此流行的原因主要有以下几个方面: 首先,计算机可以代替人工进行许多繁杂的劳动; 其次,计算机可以节省许多资源;

第三,计算机可以大大的提高人们的工作效率; 第四,计算机可以使敏感文档更加安全,等等。

在中小学中用计算机管理学生档案的意义

现在我国的中小学校中档案的管理水平还停留在纸介质的基础上,这样的机制已经不能适应时代的发展,因为它浪费了许多人力和物力,在信息时代这种传统的管理方法必然被计算机为基础的信息管理所取代。

我作为一个计算机应用的本科生,希望可以在这方面有所贡献。改革的总设计师邓小平同志说过“科学技术是第一生产力”,我希望能用我四年的所学编制出一个实用的程序来帮助中小学进行更有效的学籍管理。

归纳起来,好处大约有以下几点:

1. 可以存储历届的学生档案,安全、高效;

2. 只需一到二名档案录入员即可操作系统,节省大量人力; 3. 可以迅速查到所需信息。

为将来学校上网做好准备

跟据1999年中国电信的调查报告显示我国的上网人数已达到890万,互联网已经十分普及,学校往界的毕业生希望能在世界的任何一个角落查到自己校友的信息,本系统为学校将来的上网作了先期工作,比如数据库的建立。

学生档案的设计分析

根据实际情况,我们使用原型法(Rapid Prototyping)即以少量代价快速地构造一个可执行的软件系统模型。使用户和开发人员可以较快地确定需求,然后采用循环进化的开发方式,对系统模型作连续的精化,将系统需具备的性质逐渐增加上去,直到所有的性质全部满足。此时模块也发展成为最终产品了。第二章

怎样开发一个学生档案管理系统?

编程环境的选择

微软公司的Visual Basic 6.0是Windows应用程序开发工具,使目前最为广泛的、易学易用的面向对象的开发工具。Visual Basic提供了大量的控件,这些控件可用于设计界面和实现各种功能,减少了编程人员的工作量,也简化了界面设计过程,从而有效的提高了应用程序的运行效率和可靠性。故而,实现本系统VB是一个相对较好的选择。

关系型数据库的实现

Access2000 就是关系数据库开发工具,数据库能汇集各种信息以供查询、存储和检索。Access 的优点在于它能使用数据表示图或自定义窗体收集信息。数据表示图提供了一种类似于 Excel 的电子表格,可以使数据库一目了然。另外,Access 允许创建自定义报表用于打印或输出数据库中的信息。Access也提供了数据存储库,可以使用桌面数据库文件把数据库文件置于网络文件服务器,与其他网络用户共享数据库。Access 是一种关系数据库工具,关系数据库是已开发的最通用的数据库之一。如上所述,Access 作为关系数据库开发具备了许多优点,可以在一个数据包中同时拥有桌面数据库的便利和关系数据库的强大功能。

二者的结合(DBA)

微软的JET数据库引擎提供了与数据库打交道的途径,我们是通过它以及Visual Basic 来访问数据库并对其进行各种操作。Visual Basic、Access以及其他微软的软件产品都是通过共用JET数据库引擎,从而给用户提供了丰富的数据类型。

DATA 控件在数据库中的信息与将信息显示给用户看的Visual Basic程序之间架起了一座桥梁。我们可以设置DATA控件的各个属性,告诉它要调用那个数据库的哪个部分。缺省情况下,DATA控件根据数据库中的一个或多个数据表建立一个dynaset-type(动态集合)类型的记录集合。一个记录集合是动态的也就意味着,当原来的数据表中的容改变了以后,该记录集合中的记录也会随之改变。DATA控件还提供了用来浏览不同记录的各种跳转按钮。将DATA控件放置在窗体中之后,我们还必须在该控件与要处理的数据库之间建立联系。

Visual Basic应用程序基本的构建块是用户所创建的对象,每一个对象都具有一些特性和行为(属性、事件和 方法)。开发人员可以最有效利用所创建的每一个对象。使用应用程序具有可通用性可说扩展性和强有力的功能。

Visual Basic应用由一系列对象组成,包括有函数、菜单、函数、结构和数据窗口、用户对象、用户事件等等,对象中又包含若干控件如命令按钮、单行编辑器等这些对象和控件都可在许多应用中重复使用。实现菜单选项

菜单是程序最重要的特性之一,大多数程序都依赖一个定义良好的菜单使程序易于使用和维护,Visual Basic也提供了强大的创建菜单功能是程序更加标准。

您可以使用Visual Basic的Application Wizard也可以使用Visual Basic 的菜单编辑器建立菜单或者修改已经存在的菜单。

实现工具栏

CoolBar控件与Office97种看到的CoolBar是类似的。CoolBar就是一个可以在窗体上浮动的工具,同时也是其他ActiveX的容器。通过在CoolBar中迁入其他空间你局可以向用户提供更好的灵活性和义用性。

Toolbar 是工具条控件,是实现工具条的主体。其中的按钮可以显示图像和标题,并按功能分组或加入分隔符,还可以围棋设置鼠标停留在其上显示的提示字符。Toolbar也是一个控件容器且具有Style属性,并可以为其增加下拉按钮和平滑按钮等。

选择“工程”下拉菜单中的“部件”选项,显示“部件”对话框。在“控件”选项卡列表中选择“Microsoft Windows Common Controls 6.0”后工具相中增加改控件。其属性及对象如下: 1. Align属性定义工具条在窗体中的位置

2. ToolTipText属性是字符串类型,定义控件的提示字符 3. Style属性定义按钮外观。

4. ImageList属性定义与数据条对应的ImageList控件名,该控件定义工具条按钮显示的图像。5. HotImangeList属性设置一个ImageList控件名,该控件定义按钮获得热点时显示的图像。6. DisabledImageList属性定义工具条按钮无效时显示的图像。创建工具条包括ImageList和Toolbar控件

ImageList用于为其他控件提供图像库,将ImageList控件加入到工具箱的操作于前述Toolbar控件相同。

帮助

专业水平的软件通常都带有联机帮助功能。无论写出来的程序是要给大量的用户使用,还是仅仅局限于公司内部有限的使用者,我们都应该为用户提供详细的、易于理解的联机帮助文档。微软的Help Workshop4.0 是一套独立于Visual Basic 的用来协助我们创建、运行于32位Windows 操作系统下的帮助文件的工具。使用它我们可以为我们编写的应用程序生成一组帮助文件。

关于版本

为了是程序显得更具有专业风格,首先可以在其中加入通常的应用程序信息。这些信息包括公司名称、版本号、修订号以及其他类似信息。Visual Basic允许你使用APP对象来保存这些信息,APP对象是一个预定义对象,不需要在程序中创建它。APP对象的大多数属性被应用程序用来提供常规的信息,通过使用这些APP提供的属性,可以在应用程序和用户之间交流重要信息,在项目属性框中可以设置它的属性。第四章

使用Access2000 实现关系型数据库

数据库的概念

数据库是一种存储数据并对数据进行操作的工具。数据库的作用在于组织和表达信息,简而言之,数据库就是信息的集合。计算机的数据库可以分为两类:非关系数据库(flat-file)和关系数据库(relational)。关系数据库中包含了多个数据表的信息,数据库含有各个不同部分的术语,象记录、域等。新建一个数据库

创建任何一个数据库的第一步是仔细的规划数据库,设计必须是灵活的、有逻辑的。创建一个数据库结构的过程被认为是数据模型设计。1. 标识需要的数据;

2. 收集被标识的字段到表中; 3. 标识主关键字字段; 4. 绘制一个简单的数据图表; 5. 规范数据;

6. 标识指定字段的信息; 7. 创建物理表。

修改已建的数据库

数据库的修改分为:添加、编辑和删除记录。这三种操作均可由Visual Basic 创建的程序来完成,下面的章节将详细描述实现的具体方法。

实现数据库之间的联系

数据库之间的关系指明两个库之间共享一个共同的关键字值。一个连接是指一种虚拟的表,这种表是在当用户要求从相互关联的各个不同的表中获取信息时建立的,关键字段用于在相互连接的不同表中查找匹配的记录。一个更高级的连接形式称为自连接。这种连接是指一个表被连接到它自己的一个字段,或在不同的纪录中由重复数据的组合字段。数据库中有三种不同类型的关键字:主关键字、组合关键字和外关键字。在表中使用的关键字类型用于描述库表示什么以及在数据库中如何与其它的库建立关系。第五章 系统总体规划

系统功能

1. 可以进行文本操作; 2. 添加一个数据库项目; 3. 删除一个数据库项目; 4. 修改一个数据库项目; 5. 查询信息; 6. 察看课程表。

流程图

第六章 系统具体实现

用户界面的实现 6.1.1 封面 具体实现见 图_6.1.1 图_6.1.1 6.1.2 主界面

具体实现见.图_6.1.2 图_6.1.2 主界面包含三方面的内容,以下一一介绍: 1.记录操作

打开记录操作,进入记录操作菜单项分别由文件、视图及帮助三个选项。1.1文件包括:新建 打开

打开写字板---------如图<6.1.4>(源程序见附录清单6.1)保存 另存 打印 退出 <图6.1.4> 1.2视图包括:状态条 工具栏 背景颜色 显示

课程表---------如图<6.1.5> 文本编辑器 网络浏览 <图6.1.5> 1.3帮助包括:内容 关于帮助 2.记录操作

打开记录操作进入记录操作选项页分别由浏览记录、查找等三个选项组成。2.1浏览记录: 学生学籍库 课程库 成绩库 2.2查找记录 2.3备注 3.系统信息

打开系统信息进入选项页分别由系统信息、信息采集等组成。6.1.3 帮助系统 具体实现见6.1.3

图6.1.3 数据库的实现 6.2.1学籍数据库

学籍数据库里存储了学生的档案包括:学号、姓名、年龄等 表如<6.2.6> 列名(中文)列名(英文)数据类型宽度小数点位数是否为空姓名Name Date8No学号CodeInteger6No性别SexDate2No年龄AgeDate6No民族NationDate6No政治面貌Visage...Date2...Yes...家庭住址AddressDate10No备注RecordDate15No 表<6.2.6> 学籍模块:

该模块主要完成学生基本信息的录入、删除、更新等功能。在此模块中定义了八个域名来进行学生的信息存储。如果用户修改某一纪录中的某一项,可单添加按钮进行学生记录的编辑,此窗口使用数据窗口的FREEDOM风格(典型的录入界面)。该种风格特点是列标题紧挨着数据列在此窗口还可以增加新学生纪录。6.2.2成绩数据库

成绩数据库里存储了学生的成绩包括:学号、成绩、等如表<6.2.7 > 列名(中文)列名(英文)数据类型宽度小数点位数是否为空姓名Name Date8No学号CodeInteger6No成绩ScoreDate10No备注RecordDate15No 表<6.2.7> 成绩模块:

该模块主要完成学生成绩的基本信息的录入、删除、更新等功能。在此模块中定义了四个域名来进行学生的信息存储。6.2.3课程数据库

课程数据库利存储了课程的信息:课程名、作者、出版社等如表<6.2.8> 列名(中文)列名(英文)数据类型宽度小数点位数是否为空课程IDCourseDate8No课程名NameDate15No出版社PublisherDate20No作者ScoreDate18No备注RecordDate15No 表<6.2.8> 与VB的连接

Visual Basic提供了与底层数据库系统紧密的连接。Visual Basic 支持不同的关系数据库管理系统并充分发挥每一个数据库的特长。生成独立应用或脱离服务器运行的服务以上的应用,Visual Basic连接数据库的方式有两种: ·通过使用Visual Basic的 DATA控件。

·通过使用由Visual Basic提供的专用的直接与数据库相连的接口 第七章 结束语 经过三个多月的设计和开发,中小学档案管理系统基本开发完毕。其功能基本符合用户需求,能够完成学生学籍的存储和成绩的查询以及各类相关报表的打印。并提供部分系统维护功能,使用户方便进行数据备份和恢复、数据删除。,对于数据的一致性的问题也通过程序进行了有效的解决。

但是由于毕业设计时间较短,所以该系统还有许多不尽如人意的地方,比如联机文档比较少,用户界面不够美观,出错处理不够等多方面问题。这些都有待进一步改善。致谢

在本次毕业设计中,我从指导老师雷震甲老师身上学到了很多东西。雷老师认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我收益匪浅。他无论在理论上还是在实践中,都给与我很大的帮助,使我得到不少的提高这对于我以后的工作和学习都有一种巨大的帮助,感谢他耐心的辅导。

另外,在系统开发过程中雷老师的助手张彦明老师也给于我很大的帮助,帮助解决了不少的难点,使得系统能及时开发完成,还有同组的同学同样给与我不少帮助,这里一并表示感谢。

第八章

主要参考文献

[1] Visual Basic 6.0 使用指南

作者:Bob Reselman , Richard Peasley , Wayne Pruchniak.出版社:电子工业出版社

[2] 中文版Microsoft Office 97 自学通 作者:Ned Snell 出版社:机械工业出版社

[3] Visual Basic 6.0 中文版控件大全 作者:Microsoft 出版社;电子工业出版社

[4] 中文Access 2000 24学时教程 作者:Craig Eddy,Timothy Buchanan 出版社:机械工业出版社

第四篇:学生档案管理系统

目录 摘要

ABSTRACT 前言

第一章 为什么要开发一个学生档案管理系统? 第二章 计算机已经成为我们学习和工作的得力助手 1.1 在中小学中用计算机管理学生档案的意义 1.2 为将来学校上网做好准备 1.4 学生档案的设计分析

第三章 怎样开发一个学生档案管理系统? 2.1 编程环境的选择 2.2 关系型数据库的实现 2.3 二者的结合(DBA)

第四章 Windows下的Visual Basic 编程环境简介 3.1 告别“hello world”的年代 3.2 面对对象的编程 3.3 实现菜单选项 3.4 实现工具栏 3.5 帮助 3.6关于系统

第五章 使用Access2000 实现关系型数据库 4.1 数据库的概念 4.2 新建一个数据库 4.3 修改已建的数据库 4.4 实现数据库之间的联系 第五章 系统总体规划 5.1 系统功能 5.2 流程图

第六章 系统具体实现 6.1 用户界面的实现 6.1.1 封面 6.1.2 主界面 6.1.3 帮助系统 6.2 数据库的实现 6.2.1 学籍数据库 6.2.2 学生成绩库 6.2.3 课程库 6.3 与VB的连接 第七章 结束语

第八章 主要参考文献 附录

--------------摘要--------------

学生档案管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。

经过分析,我们使用 MICROSOFT公司的 VISUAL BASIC开发工具,利用其提供的各种面向对象的开发工具,尤其是数据窗口这一能方便而简洁操纵数据库的智能化对象,首先在短时间内建立系统应用原型,然后,对初始原型系统进行需求迭代,不断修正和改进,直到形成用户满意的可行系统。

关键字:控件、窗体、域。

--------------ABSTRACT--------------

The system of managing student file is a typical application of managing information system(know as MIS),which mainly includes building up data-base of back-end and developing the application interface of front-end.The former required consistency and integrality and security of data.The later should make the application powerful and easily used.By looking up lots of datum, we selected Visual Basic presented by Microsoft because of its objective tools in Win32.VB offered a series of ActiveX operating a data-base.It can give you a short-cut to build up a prototype of system application.The prototype could be modified and developed till users are satisfied with it.Keywords: ActiveX , Form , Field.--------------前言--------------

学生档案管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生档案管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。

随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。

作为计算机应用的一部分,使用计算机对学生档案信息进行管理,具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学生档案管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。因此,开发这样一套管理软件成为很有必要的事情,在下面的各章中我们将以开发一套学生档案管理系统为例,谈谈其开发过程和所涉及到的问题及解决方法。

--------------------下面就让我们开始正文的介绍 第一章

为什么要开发一个学生档案管理系统?

计算机已经成为我们学习和工作的得力助手:

今天,计算机的价格已经十分低廉,性能却有了长足的进步。它已经被应用于许多领域,计算机之所以如此流行的原因主要有以下几个方面: 首先,计算机可以代替人工进行许多繁杂的劳动; 其次,计算机可以节省许多资源;

第三,计算机可以大大的提高人们的工作效率; 第四,计算机可以使敏感文档更加安全,等等。

在中小学中用计算机管理学生档案的意义

现在我国的中小学校中档案的管理水平还停留在纸介质的基础上,这样的机制已经不能适应时代的发展,因为它浪费了许多人力和物力,在信息时代这种传统的管理方法必然被计算机为基础的信息管理所取代。

我作为一个计算机应用的本科生,希望可以在这方面有所贡献。改革的总设计师邓小平同志说过“科学技术是第一生产力”,我希望能用我四年的所学编制出一个实用的程序来帮助中小学进行更有效的学籍管理。

归纳起来,好处大约有以下几点:

1. 可以存储历届的学生档案,安全、高效;

2. 只需一到二名档案录入员即可操作系统,节省大量人力; 3. 可以迅速查到所需信息。

为将来学校上网做好准备

跟据1999年中国电信的调查报告显示我国的上网人数已达到890万,互联网已经十分普及,学校往界的毕业生希望能在世界的任何一个角落查到自己校友的信息,本系统为学校将来的上网作了先期工作,比如数据库的建立。

学生档案的设计分析

根据实际情况,我们使用原型法(Rapid Prototyping)即以少量代价快速地构造一个可执行的软件系统模型。使用户和开发人员可以较快地确定需求,然后采用循环进化的开发方式,对系统模型作连续的精化,将系统需具备的性质逐渐增加上去,直到所有的性质全部满足。此时模块也发展成为最终产品了。第二章

怎样开发一个学生档案管理系统?

编程环境的选择

微软公司的Visual Basic 6.0是Windows应用程序开发工具,使目前最为广泛的、易学易用的面向对象的开发工具。Visual Basic提供了大量的控件,这些控件可用于设计界面和实现各种功能,减少了编程人员的工作量,也简化了界面设计过程,从而有效的提高了应用程序的运行效率和可靠性。故而,实现本系统VB是一个相对较好的选择。

关系型数据库的实现

Access2000 就是关系数据库开发工具,数据库能汇集各种信息以供查询、存储和检索。Access 的优点在于它能使用数据表示图或自定义窗体收集信息。数据表示图提供了一种类似于 Excel 的电子表格,可以使数据库一目了然。另外,Access 允许创建自定义报表用于打印或输出数据库中的信息。Access也提供了数据存储库,可以使用桌面数据库文件把数据库文件置于网络文件服务器,与其他网络用户共享数据库。Access 是一种关系数据库工具,关系数据库是已开发的最通用的数据库之一。如上所述,Access 作为关系数据库开发具备了许多优点,可以在一个数据包中同时拥有桌面数据库的便利和关系数据库的强大功能。

二者的结合(DBA)

微软的JET数据库引擎提供了与数据库打交道的途径,我们是通过它以及Visual Basic 来访问数据库并对其进行各种操作。Visual Basic、Access以及其他微软的软件产品都是通过共用JET数据库引擎,从而给用户提供了丰富的数据类型。

DATA 控件在数据库中的信息与将信息显示给用户看的Visual Basic程序之间架起了一座桥梁。我们可以设置DATA控件的各个属性,告诉它要调用那个数据库的哪个部分。缺省情况下,DATA控件根据数据库中的一个或多个数据表建立一个dynaset-type(动态集合)类型的记录集合。一个记录集合是动态的也就意味着,当原来的数据表中的容改变了以后,该记录集合中的记录也会随之改变。DATA控件还提供了用来浏览不同记录的各种跳转按钮。将DATA控件放置在窗体中之后,我们还必须在该控件与要处理的数据库之间建立联系。第三章

Windows下的Visual?

? ??? ?

? ?)。Visual Basic应用程序基本的构建块是用户所创建的对象,每一个对象都具有一些特性和行为(属性、事件和 方法)。开发人员可以最有效利用所创建的每一个对象。使用应用程序具有可通用性可说扩展性和强有力的功能。

Visual Basic应用由一系列对象组成,包括有函数、菜单、函数、结构和数据窗口、用户对象、用户事件等等,对象中又包含若干控件如命令按钮、单行编辑器等这些对象和控件都可在许多应用中重复使用。

实现菜单选项

菜单是程序最重要的特性之一,大多数程序都依赖一个定义良好的菜单使程序易于使用和维护,Visual Basic也提供了强大的创建菜单功能是程序更加标准。

您可以使用Visual Basic的Application Wizard也可以使用Visual Basic 的菜单编辑器建立菜单或者修改已经存在的菜单。

实现工具栏

CoolBar控件与Office97种看到的CoolBar是类似的。CoolBar就是一个可以在窗体上浮动的工具,同时也是其他ActiveX的容器。通过在CoolBar中迁入其他空间你局可以向用户提供更好的灵活性和义用性。

Toolbar 是工具条控件,是实现工具条的主体。其中的按钮可以显示图像和标题,并按功能分组或加入分隔符,还可以围棋设置鼠标停留在其上显示的提示字符。Toolbar也是一个控件容器且具有Style属性,并可以为其增加下拉按钮和平滑按钮等。

选择“工程”下拉菜单中的“部件”选项,显示“部件”对话框。在“控件”选项卡列表中选择“Microsoft Windows Common Controls 6.0”后工具相中增加改控件。其属性及对象如下:

1. Align属性定义工具条在窗体中的位置

2. ToolTipText属性是字符串类型,定义控件的提示字符 3. Style属性定义按钮外观。

4. ImageList属性定义与数据条对应的ImageList控件名,该控件定义工具条按钮显示的图像。5. HotImangeList属性设置一个ImageList控件名,该控件定义按钮获得热点时显示的图像。6. DisabledImageList属性定义工具条按钮无效时显示的图像。创建工具条包括ImageList和Toolbar控件 ImageList用于为其他控件提供图像库,将ImageList控件加入到工具箱的操作于前述Toolbar控件相同。

帮助

专业水平的软件通常都带有联机帮助功能。无论写出来的程序是要给大量的用户使用,还是仅仅局限于公司内部有限的使用者,我们都应该为用户提供详细的、易于理解的联机帮助文档。微软的Help Workshop4.0 是一套独立于Visual Basic 的用来协助我们创建、运行于32位Windows 操作系统下的帮助文件的工具。使用它我们可以为我们编写的应用程序生成一组帮助文件。

关于版本

为了是程序显得更具有专业风格,首先可以在其中加入通常的应用程序信息。这些信息包括公司名称、版本号、修订号以及其他类似信息。Visual Basic允许你使用APP对象来保存这些信息,APP对象是一个预定义对象,不需要在程序中创建它。APP对象的大多数属性被应用程序用来提供常规的信息,通过使用这些APP提供的属性,可以在应用程序和用户之间交流重要信息,在项目属性框中可以设置它的属性。

第四章

使用Access2000 实现关系型数据库

数据库的概念

数据库是一种存储数据并对数据进行操作的工具。数据库的作用在于组织和表达信息,简而言之,数据库就是信息的集合。计算机的数据库可以分为两类:非关系数据库(flat-file)和关系数据库(relational)。关系数据库中包含了多个数据表的信息,数据库含有各个不同部分的术语,象记录、域等。

新建一个数据库

创建任何一个数据库的第一步是仔细的规划数据库,设计必须是灵活的、有逻辑的。创建一个数据库结构的过程被认为是数据模型设计。1. 标识需要的数据;

2. 收集被标识的字段到表中; 3. 标识主关键字字段;

4. 绘制一个简单的数据图表; 5. 规范数据;

6. 标识指定字段的信息; 7. 创建物理表。

修改已建的数据库

数据库的修改分为:添加、编辑和删除记录。这三种操作均可由Visual Basic 创建的程序来完成,下面的章节将详细描述实现的具体方法。

实现数据库之间的联系

数据库之间的关系指明两个库之间共享一个共同的关键字值。一个连接是指一种虚拟的表,这种表是在当用户要求从相互关联的各个不同的表中获取信息时建立的,关键字段用于在相互连接的不同表中查找匹配的记录。一个更高级的连接形式称为自连接。这种连接是指一个表被连接到它自己的一个字段,或在不同的纪录中由重复数据的组合字段。数据库中有三种不同类型的关键字:主关键字、组合关键字和外关键字。在表中使用的关键字类型用于描述库表示什么以及在数据库中如何与其它的库建立关系。第五章

系统总体规划

系统功能

1. 可以进行文本操作; 2. 添加一个数据库项目; 3. 删除一个数据库项目; 4. 修改一个数据库项目; 5. 查询信息; 6. 察看课程表。

流程图

第六章

系统具体实现

用户界面的实现 6.1.1 封面

具体实现见 图_6.1.1

图_6.1.1 6.1.2 主界面

具体实现见.图_6.1.2 图_6.1.2

主界面包含三方面的内容,以下一一介绍: 1.记录操作

打开记录操作,进入记录操作菜单项分别由文件、视图及帮助三个选项。1.1文件包括:新建 打开

打开写字板---------如图<6.1.4>(源程序见附录清单6.1)保存 另存 打印 退出

<图6.1.4> 1.2视图包括:状态条 工具栏 背景颜色 显示

课程表---------如图<6.1.5> 文本编辑器

网络浏览 <图6.1.5> 1.3帮助包括:内容 关于帮助 2.记录操作

打开记录操作进入记录操作选项页分别由浏览记录、查找等三个选项组成。2.1浏览记录: 学生学籍库 课程库 成绩库

2.2查找记录 2.3备注 3.系统信息

打开系统信息进入选项页分别由系统信息、信息采集等组成。

6.1.3 帮助系统 具体实现见6.1.3

图6.1.3

数据库的实现

6.2.1学籍数据库

学籍数据库里存储了学生的档案包括:学号、姓名、年龄等 表如<6.2.6>

列名(中文)列名(英文)数据类型宽度小数点位数是否为空姓名Name Date8No学号CodeInteger6No性别SexDate2No年龄AgeDate6No民族NationDate6No政治面貌Visage...Date2...Yes...家庭住址AddressDate10No备注RecordDate15No 表<6.2.6> 学籍模块:

该模块主要完成学生基本信息的录入、删除、更新等功能。在此模块中定义了八个域名来进行学生的信息存储。如果用户修改某一纪录中的某一项,可单添加按钮进行学生记录的编辑,此窗口使用数据窗口的FREEDOM风格(典型的录入界面)。该种风格特点是列标题紧挨着数据列在此窗口还可以增加新学生纪录。

6.2.2成绩数据库

成绩数据库里存储了学生的成绩包括:学号、成绩、等如表<6.2.7 >

列名(中文)列名(英文)数据类型宽度小数点位数是否为空姓名Name Date8No学号CodeInteger6No成绩ScoreDate10No备注RecordDate15No 表<6.2.7> 成绩模块:

该模块主要完成学生成绩的基本信息的录入、删除、更新等功能。在此模块中定义了四个域名来进行学生的信息存储。

6.2.3课程数据库

课程数据库利存储了课程的信息:课程名、作者、出版社等如表<6.2.8>

列名(中文)列名(英文)数据类型宽度小数点位数是否为空课程IDCourseDate8No课程名NameDate15No出版社PublisherDate20No作者ScoreDate18No备注RecordDate15No 表<6.2.8> 课程模块:

该模块主要完成存储课程的所有信息及录入、删除、更新等功能

与VB的连接

Visual Basic提供了与底层数据库系统紧密的连接。Visual Basic 支持不同的关系数据库管理系统并充分发挥每一个数据库的特长。生成独立应用或脱离服务器运行的服务以上的应用,Visual Basic连接数据库的方式有两种: ·通过使用Visual Basic的 DATA控件。

·通过使用由Visual Basic提供的专用的直接与数据库相连的接口 第七章

结束语

经过三个多月的设计和开发,中小学档案管理系统基本开发完毕。其功能基本符合用户需求,能够完成学生学籍的存储和成绩的查询以及各类相关报表的打印。并提供部分系统维护功能,使用户方便进行数据备份和恢复、数据删除。,对于数据的一致性的问题也通过程序进行了有效的解决。

但是由于毕业设计时间较短,所以该系统还有许多不尽如人意的地方,比如联机文档比较少,用户界面不够美观,出错处理不够等多方面问题。这些都有待进一步改善。

致谢

在本次毕业设计中,我从指导老师雷震甲老师身上学到了很多东西。雷老师认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我收益匪浅。他无论在理论上还是在实践中,都给与我很大的帮助,使我得到不少的提高这对于我以后的工作和学习都有一种巨大的帮助,感谢他耐心的辅导。另外,在系统开发过程中雷老师的助手张彦明老师也给于我很大的帮助,帮助解决了不少的难点,使得系统能及时开发完成,还有同组的同学同样给与我不少帮助,这里一并表示感谢。

第八章

主要参考文献

[1] Visual Basic 6.0 使用指南

作者:Bob Reselman , Richard Peasley , Wayne Pruchniak.出版社:电子工业出版社

[2] 中文版Microsoft Office 97 自学通 作者:Ned Snell 出版社:机械工业出版社

[3] Visual Basic 6.0 中文版控件大全 作者:Microsoft 出版社;电子工业出版社

[4] 中文Access 2000 24学时教程

作者:Craig Eddy,Timothy Buchanan 出版社:机械工业出版社

附录程序清单及注释 程序清单6.1 Option Explicit Dim FileName As String '文件名,用于打开、保存文件 Dim UndoString As String '用于 Undo 操作 Dim UndoNew As String '用于 Undo 操作

Private Sub ImgUndoDisable()'禁用“Undo”按钮 UndoString = “" UndoNew = ”“ ImgUndo.Enabled = False ImgUndo.Picture = ImageDisable.ListImages(”Undo“).Picture End Sub

Private Sub ImgUndoEnable()'有效“Undo”按钮

ImgUndo.Enabled = True ImgUndo.Picture = ImageUp.ListImages(”Undo“).Picture End Sub

Private Sub Check_ImgPaste()'设置粘贴按钮

If Len(Clipboard.GetText)> 0 Then ImgPaste.Enabled = True ImgPaste.Picture = ImageUp.ListImages(”Paste“).Picture Else ImgPaste.Enabled = False ImgPaste.Picture = ImageDisable.ListImages(”Paste“).Picture End If End Sub

Private Sub Check_ImgCutCopy()'设置剪切、复制按钮

If Text1.SelLength > 0 Then ImgCut.Enabled = True ImgCut.Picture = ImageUp.ListImages(”Cut“).Picture ImgCopy.Enabled = True ImgCopy.Picture = ImageUp.ListImages(”Copy“).Picture Else ImgCut.Enabled = False ImgCut.Picture = ImageDisable.ListImages(”Cut“).Picture ImgCopy.Enabled = False ImgCopy.Picture = ImageDisable.ListImages(”Copy“).Picture End If End Sub Private Sub BackColor_Click()CommonDialog1.ShowColor Text1.BackColor = CommonDialog1.Color End Sub

Private Sub Box_Click()'显停工具栏

If Box.Checked Then '将停显工具栏

Box.Checked = False CoolBar1.Visible = False Else Box.Checked = True CoolBar1.Visible = True End If

Form_Resize '重新调整控件位置 End Sub

Private Sub Close_Click()Dim FileNum As Integer

If Len(FileName)> 0 Then '有输入文件名

FileNum = FreeFile()'获得可用文件号

Open FileName For Output As FileNum '打开输出文件 '如果无指定文件,则创建新文件 Print #FileNum, Text1.Text '输出文本 Close FileNum '关闭文件 End If

Text1.Text = ”“ FileName = ”“ End Sub

Private Sub ComboSize_Click()Text1.FontSize = Val(ComboSize.Text)End Sub

Private Sub ComboFont_Click()Text1.FontName = ComboFont.Text End Sub

Private Sub Copy_Click()Clipboard.SetText Text1.SelText '复制文本到剪裁板 End Sub

Private Sub Cut_Click()Clipboard.SetText Text1.SelText '复制文本到剪裁板 Text1.SelText = ”“ '清选择的文本 End Sub

Private Sub DataTime_Click()Text1.SelText = Now End Sub

Private Sub Delete_Click()Text1.SelText = ”“ '清选择的文本 End Sub

Private Sub Edit_Click()'当程序显示“编辑”子菜单前,触发该程序 If Text1.SelLength > 0 Then '文本框中有选中的文本 Cut.Enabled = True Copy.Enabled = True Delete.Enabled = True Else Cut.Enabled = False Copy.Enabled = False Delete.Enabled = False End If

If Len(Clipboard.GetText())> 0 Then '剪裁板中有文本数据 Paste.Enabled = True Else '没有可粘贴的文本 Paste.Enabled = False End If End Sub

Private Sub Exit_Click()Unload Me End Sub Private Sub FindText_KeyPress(KeyAscii As Integer)Dim BeginPos As Long

If KeyAscii = 13 Then BeginPos = InStr(1, Text1.Text, FindText.Text, vbTextCompare)If BeginPos > 0 Then Text1.SelStart = BeginPos1 ComboFont.AddItem Screen.Fonts(i)Next i End Sub

Private Sub Form_Resize()Dim TextTop As Long

'修改工具条大小

CoolBar1.Top = Me.ScaleTop ? ?? ??? ?? ??? ?? ? Me.ScaleLeft Text1.Width = Me.ScaleWidth If Me.ScaleHeight > CoolBar1.Height Then Text1.Height = Me.ScaleHeight” + FileName '修改标题显示 End If End Sub

Private Sub Paste_Click()Text1.SelText = Clipboard.GetText End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)Label1 = “工具栏” End Sub

Private Sub Picture1_Resize()If Picture1.Width > Label1.Left Then Label1.Width = Picture1.ScaleWidth" + FileName '修改标题显示 ImgUndoDisable End If End Sub

Private Sub Text1_Change()If Not ImgUndo.Enabled Then '使“Undo”按钮可用 ImgUndoEnable End If UndoString = UndoNew UndoNew = Text1 End Sub

Private Sub Text1_Click()Check_ImgCutCopy End Sub

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)Check_ImgCutCopy End sub

第五篇:学生档案管理系统

本科生毕业设计

高校数据中心—基于WEB的学生档案管理系统开发

University Data Center — Development of Student File Management System which based on WEB

学生姓名 所在专业 所在班级 申请学位 指导教师 副指导教师 答辩时间

职称 职称

2011 年 6 月 4 日

目录

目 录

设计总说明............................................................................................................................I INTRODUCTION..............................................................................................................II 1 绪论..............................................................................................................................1 1.1 1.2 1.3 1.4 2 立项背景..............................................................................................................1 项目目的和意义..................................................................................................1 国内外现状及其存在的问题..............................................................................2 研究目标..............................................................................................................2

系统开发技术综述......................................................................................................3 2.1.NET技术综述........................................................................................................3 2.2 ADO.NET...................................................................................................................4 2.2.1 ADO.NET概述...................................................................................................4 2.2.2 ADO数据访问接口...........................................................................................5 2.3 关于B/S架构......................................................................................................5 2.3.1 B/S架构简介...................................................................................................5 2.3.2 B/S体系的三层结构.......................................................................................6 需求分析......................................................................................................................7 3.1 3.2 3.3 功能需求分析......................................................................................................7 系统的实现目标..................................................................................................7 可行性分析..........................................................................................................7

经济可行性...................................................................................................8 技术可行性...................................................................................................8 性能需求分析...............................................................................................8 运行需求分析...............................................................................................9 3.3.1 3.3.2 3.4 3.4.1 3.4.2 3.5 4 4.1 4.2 4.4 系统配置需求......................................................................................................8

用例分析..............................................................................................................9 数据流图............................................................................................................11 数据库概念结构设计........................................................................................11 数据库详细实现................................................................................................15

存储过程.....................................................................................................15 触发器.........................................................................................................16

数据库设计................................................................................................................11

4.3 E-R图....................................................................................................................14 4.4.1 4.4.2

目录 系统设计....................................................................................................................18 5.1 5.2 5.3 系统体系结构....................................................................................................18 系统模块划分....................................................................................................18 主要功能模块简介............................................................................................19 登陆界面............................................................................................................21 系统首页............................................................................................................21 用户管理............................................................................................................22 类别管理............................................................................................................22

年级管理.....................................................................................................22 学院管理.....................................................................................................23 专业管理.....................................................................................................23 班级管理.....................................................................................................23 学生档案信息录入.....................................................................................24 学生档案信息管理.....................................................................................24 学生档案信息导入.....................................................................................25 学生信息统计.............................................................................................25 数据库备份.................................................................................................26 数据库还原.................................................................................................27 系统空间占用信息.....................................................................................27 6 系统详细设计与实现................................................................................................21 6.1 6.2 6.3 6.4

6.4.1 6.4.2 6.4.3 6.4.4 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 7 7.1 7.2 学生档案管理....................................................................................................24

系统管理............................................................................................................26

系统测试....................................................................................................................28

测试目标............................................................................................................28 模块测试............................................................................................................28

登陆测试.....................................................................................................28 用户管理测试.............................................................................................29 班级管理测试.............................................................................................29 学生档案管理测试.....................................................................................29 系统管理测试.............................................................................................30 7.2.1 7.2.2 7.2.3 7.2.4 7.2.5 8 总结............................................................................................................................31

鸣 谢.................................................................................................................................32 参考文献.............................................................................................................................33

设计总说明

设计总说明

随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。基于 Web 的学生档案管理系统正是作为计算机应用的一部分,使用计算机对学生档案信息进行管理,具有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学生档案管理的效率,也是教育的科学化、正规化管理,与世界接轨的重要条件。因此,开发这样一套管理系统成为必要。

学生档案管理系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前端界面的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库,而对于后者则要求功能完备、易使用、界面美观等特点。工作主要内容包括: 1)设计并实现一个学生档案管理系统。

2)本系统采用的是基于.NET的Web应用框架构架模式,实现了B/S架构。开发工具使用了Microsoft公司的visualstudio2008,利用其提供的各种面向对象的开发工具,并结合SQL Server与IIS,开发出一个动态、交互、高效的Web学生档案管理系统。

3)本系统的用户对象针对不同用户的需求把用户类别划分为学生、教师、系统管理员三种。系统功能主要有用户管理、年级管理、学院(系)管理、专业管理、班级管理以及学生档案管理,同时还实现了学生档案的导入导出、学生人数统计、数据库远程备份还原等功能。

4)系统的主要技术及特点有:系统基于C#.NET语言开发,主要采用ASP.NET技术实现,页面与业务逻辑分离,能够结合多种开发语言开发,可采用可扩展的分层配置基本结构,实现灵活多样的安全配置与设计。系统开发和维护都在服务器端,用户只需要打开浏览器就可以通过网络远程管理、查询学生档案。

目前,该系统在本地测试运行正常,系统功能完善、应用方便灵活,界面友好,达到了预期的目标,提高了档案部门的管理水平。

关键词:学生档案管理系统;管理信息系统;ASP.NET;SQL Server;C#.NET

I

INTRODUCTION

INTRODUCTION As science and technology's improvement, computer science was also getting mature and it's great feature was deeply knowed by people.It had entered human society in fields and playing more and more important role.Student file management system that base on Web is a part of computer application.Management of student file information in computer, make several advantages which manual managing can't compare with.For example: quick search, convenient seeking, high dependability, huge memory space, excellent confidentiality, long service life, low cost etc.These advantages can improve the efficiency of student's file administration greatly, and it is important condition of education on it's way to socialization and regularization and connecting with the world.So, it's necessary to develop such a management of system.Student file management system is a typical management information system(MIS),which mainly includes building up data-base of back-end and developing the application interface of front-end.The former require consistency, integrality and security of data.The later should make the application powerful and easily used.It mainly include: 1)Designed and implemented a student file management system.2)The system used web application framework structuring mode that base on.NET and it realized the B/S structure.VisualStudio2008 of Microsoft was used here.Object-oriented developing tools was joined with SQL and IIS in programing a Dynamic,interactive ,efficient Web students file management system.3)User Object of the system divided user into student, teacher and system administrator for the needs of different user.The main system function includes user management, grade management, college management, major management, class management and student file management.In addition, the system realized import & export of student file, amount of student number and remote & reduction of data base.4)Main technology and characteristic of the system: it's development base on C#.NET language and was realized by ASP.NET.Pageframe and service logic of system was divided so it can be developed by different developing language, and the system used expandable Layered configuration basic structure with flexible security configure and design.System development and maintenance were operated in server so users just need to open the browser of network in distance if they want to manage or search student file.So far, the system's normal running in local test, and it performed perfect system function, flexible and convenient application, friendly interface.These advantages improved the management standard of the archives department.Keywords: Management system of student file;Information management system;ASP.NET;SQL Server;C#.NET

II

2011届本科生毕业设计

高校数据中心--基于WEB的学生档案管理系统开发

信息管理与信息系统,200711622123,刘鸿辉

指导教师:肖洪生 绪论 1.1 立项背景

随着时间的推移,我们已经进入了21世纪,这是一个信息和数字技术迅猛发展的时代,在全球遍布世界的互联网络正在无时无刻、无所不在的渗透到我们的工作、生活和学习中,成为推动社会发展的强大动力。

在此新世纪的开端,作为培养和造就新世纪人才的教育系统和学校,尤其是高等院校,也面临同样的社会环境变化趋势。只有率先领悟和认识到信息技术在教学和管理中的作用,并且用它来解决教学和管理中的问题,才能在全球的教育竞争中立于不败之地。随着互联网的迅猛发展,为校园的信息化建设提供良好的发展平台,而基于B/S的结构的校园信息管理系统具有很强的开放性和扩展性,模块化设计,集中式管理,灵活开放的平台管理,可方便地为校园信息化提供丰富的信息服务,从而实现以信息化的教学管理手段来实现学校日常教学和教务管理。通过校园信息化、数字化建设,利用互联网的特点和B/S架构的优点,通过信息化系统实现高校各个部门之间的信息交流,实现信息和资源的充分利用,提高高校的竞争力。

校园信息化的建设对学校的发展有很大的推动作用,其中学校的档案管理系统是校园信息化建设中的重要一环,负担着为整个学校提供详实准确的学生资料,以及一些其它的档案资料,如何做好档案管理工作,如何更好的为学院的日常工作和教学提供最有力的支持,档案管理系统就是在这样的背景下实施开发的。

1.2 项目目的和意义

学生档案管理系统是一间学校不可缺少的部分,它对于学校的决策者和管理者来说都是至关重要的,它能够为使用者提供丰富的信息和方便快捷的查询手段。但一直以来人们使用传统人工的方式管理文件或纸质档案,这种管理方式存在着许多的缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这给查找、更新和维护都带来了不少的困难。这种管理手段很明显已不能适应时代的发展,因为它浪费了了许多的人力和物力,在当今信息时代,这种传统的管理方法必然会被以计算机为基础的信息管理系统所代替。

众所周知,计算机已经成为我们学习和工作的得力助手。时至今日,计算机的价格已经十分低廉,性能却有了长足的进步。由于计算机可以代替人工进行许多繁杂的劳动,具备节省资源、提高

- 1 -

2011届本科生毕业设计

工作效率、使敏感文档更加安全等特点,它已经被应用于许多领域。因此使用计算机来实现学生档案管理的信息化已经成为当今时代发展的需要。应用计算机进行学生档案管理,归纳起来,主要有以下几点优势:

1)可以方便地存储历届的学生档案,管理更为安全、高效;

2)只需一到两名管理员对学生档案信息进行管理,节省大量人力、财力; 3)可以使用户方便、快速地查询及修改相关学生的档案信息。

1.3 国内外现状及其存在的问题

在管理体制与计算机技术相对落后的管理环境下诞生的传统信息管理软件或者系统,由于当时技术水平和管理水平的限制,目的主要是替代、减轻工作人员的劳动强度,提高录入、保存信息的质量,促进档案信息管理工作的规范化,提高管理水平与工作效率等。可是当年开发的系统多数都是基于C/S模式的,只能够在存档方面操作性强,只是单方面的管理系统而已。

新管理时代的到来和计算机技术的高速发展,对系统各方面的要求都与日俱增,不论是安全还是技术,抑或是其他方面的要求都是越来越高。现在的管理系统不仅是要求能够替代、减轻工作人员的劳动强度,提高录入速度、保存信息的质量,这么简单而已,还要求对信息的更新、对档案的规范、对管理操作的流程等都要有技术上的提高,安全上的升级,更要求交互性的增强,比如远程录入、查询等,在基于C/S模式的学生档案管理系统中都不能简单实现。

1.4 研究目标

实现一个基于WEB的学生档案管理系统,促进学生档案管理工作的规范化,提高工作效率;降低学生档案管理维护费用,提高行政工作效率,为学校领导决策提供支持,该系统的设计目标应尽量达到人力与设备的节省,并且提高处理数据的速度。并在系统开发过程中,提高自己对ASP.NET、SQL Server等前沿开发技术的理解、认识,进一步学习和加强自身在管理信息系统开发上的知识和实践经验。

- 2 -

2011届本科生毕业设计 系统开发技术综述 2.1.NET技术综述

.NET框架是微软公司全新的开发工具,Web应用程序和传统应用程序的开发者都能用它更高效、更灵活地开发应用程序。.NET框架是.NET平台的基础架构,其强大功能来自于公共语言运行环境和类库紧密结合在一起,提供了不同系统之间交叉与综合的解决方案和服务。.NET框架创造了一个完全可操控的、安全的和特性丰富的应用执行环境,这不但使得应用程序的开发与发布更简单,并且成就了众多语言间的无缝集成。.NET框架由以下三个主要部分组成:

1)公共语言运行时(CLR:Common Language Runtime)公共语言运行时在组件的开发及运行过程中,扮演着非常重要的角色。在组件运行过程中,运行时负责管理内存分配、启动或删除线程和进程、实施安全策略、同时满足当前组件对其他组件的需求。.NET框架的关键作用在于它提供了一个跨编程语言的统一编程环境。

2)统一的编程类

.NET框架为开发人员提供了一个统一、面向对象、层次化、可扩展的类库集(API)。现今,C开发人员使用的是Microsoft基类库,Java开发人员使用的是Windows基类库,而Visual Basic用户使用的又是Visual Basic API集。而.NET框架统一了微软当前的各种不同的框架。这样,开发人员无需学习多种框架就能顺利编程。而且,通过创建跨编程语言的公共API集,.NET框架可实现跨语言继承、错误处理和调试。实际上,从Perl到C++的所有编程语言,都是相互等同的,开发人员可以自由选择理想的编程语言。

3)活动服务器页面(ASP.NET)ASP.NET在原有ASP上添加了许多新特性,并增强了原有的功能。ASP.NET并非仅是ASP的补充。它建立在公共语言运行库上的编程框架,可用于在服务器上生成功能强大的web应用程序。与以前的Web开发模型相比,它具有多个重要的优点:

a)增强的性能。ASP.NET是在服务器上运行的编译好的公共语言运行库代码。与被解释的不同,ASP.NET可利用早期绑定、实时编译、本机优化和缓存服务。这相当于在编写代码之前就显著提供了性能。

b)简易性。ASP.NET使执行常见任务变得容易,从简单的窗体提交和客户端身份验证到部署和站点配置。另外,公共语言运行库利用托管代码服务(如自动引用计数和垃圾回收)简化了开发。

c)可管理性。ASP.NET采用基于文本的分层配置系统,简化了将设置应用于服务器环境和Web应用程序。由于配置信息是以纯文本形式存储的,因此可以在没有本地管理工具帮助的情况下应用新设置。

d)安全性。借助内置的Windows身份验证和基于每个应用程序的配置,可以保证应用程序的安全。

- 3 -

2011届本科生毕业设计

下面给出.NET的体系结构,如图2-1所示。

图2-1.NET的体系结构

2.2 2.2.1 ADO.NET ADO.NET概述

ADO.NET在改进以前ADO的基础上,提供了很多用于以创建数据为中心的应用程序的特性。ADO.NET引入的新特性:对XML的充分支持、新数据对象的引入、语言无关的数据访问、使用和CLR一致的类型。

1)互操作性

互操作性是ADO.NET提供的关键特性之一。由于ADO.NET使用XML交换数据,因此任何支持XML的组件都可以从ADO.NET接收数据。这样就可以在ADO.NET和运行任何平台的应用程序之间传输数据,以支持跨平台应用。而ADO也可以通过使用COM封送处理在应用程序之间传输断开连接的数据集,这就存在数据类型转换的问题,同时COM组件也无法通过防火墙。而XML形式的Dataset组件却可以直接通过防火墙。

2)可扩展性

使用ADO.NET创建的应用程序比ADO创建的应用程序更易于管理和缩放。ADO.NET创建的应用程序使用XML在层之间传输数据,这样就可以很轻松地在已经部署的应用程序中增加层,并实现与新层中的对象无缝地交换数据。而ADO的使用数据集交换数据,要在已有的应用程序结构中增加中间层,就必须改变应用程序,无法实现无缝数据共享。

3)不存在数据类型转换

ADO.NET使用XML交换数据,不存在数据类型转换的需求,可以极大地提高应用程序的性能;而ADO使用COM组件传送数据,就需要进行类型转换,这种类型转换大大降低了应用程序的性能。

- 4 -

2011届本科生毕业设计

2.2.2 ADO数据访问接口

ADO.NET提供了对Microsoft SQL Server等数据源的一致访问。数据库使用者可以使用ADO.NET来连接到这些数据源,并检索、操作和更新数据。

下面给出ADO.NET的关系图,如图2-2所示。

图2-2 ADO.NET关系图

ADO.NET提供了对Microsoft SQL Server等数据源的一致访问。数据库使用者可以使用ADO.NET来连接到这些数据源,并检索、操作和更新数据。ADO.NET有两个核心组件:DataSet和.NET数据提供程序,其中.NET数据提供程序包括:Connection、Command、DataReader和DataAdapter对象。DataSet设计目的是为了实现独立于任何数据源的数据访问,可以用于多种不同的数据源,可以用于XML数据,或用于管理应用程序本地的数据。ADO.NET结构的另一个核心元素是.NET数据提供程序,设计目的是为了实现数据操作和对数据的快速、只读访问。Connection对象提供与数据源的连接。Command对象用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令。

DataReader从数据源中提供高性能的数据流,DataAdapter提供连接DataSet对象和数据源的桥梁。DataAdapter使用Command对象在数据源中执行SQL命令,以便将数据加载到DataSet中,并使对DataSet中数据的更改与数据源保持一致。

2.3 2.3.1 关于B/S架构 B/S架构简介

目前,网络应用软件运行的模式主要有两类:Client/Server 模式和 Browser/Web Server 模式。客户/服务器(C/S)模式主要的缺点是维护、升级较麻烦,浏览器/服务器模式(B/S)是近几年伴随 Internet 迅速发展起来的一种技术,它与客户/服务器方式类似,客户端是一个标准的浏览器,服务器端是网站服务器(Web Server),而 Web Server与数据库和应用服务器的紧密结合,使得这种模

- 5 -

2011届本科生毕业设计

式的应用范围不断扩大,它已不仅仅用于网上查询,有很多部门的业务系统、企业的 MIS系统纷纷采用这种模式。它的主要优点是集中化管理和维护,便于扩充应用、升级维护简便;而客户端的免安装和零维护的特点,极大地降低了日后的维护成本。利用 ASP.NET 技术是开发 B/S 模式软件最方便、最简单的方法。企业使用的各个管理系统的功能将需要不断的扩充和更新,数据库的数据表及其结构也随之需要进行更新,软件也必将不断地更新;同时软件产品本身就要经过一个不断自我完善的过程。基于上述考虑,用 Browser/Web模式来设计管理系统比较合适,服务器端采用 SQL Server 数据库系统和 ASP.NET 组件来构成管理系统的应用服务系统;客户端采用浏览器来完成管理的各项记录和查询的操作,同时可进行远程系统维护和管理。

2.3.2 B/S体系的三层结构

B/S结构是真正的三层结构,它以访问 WEB 数据库为中心,HTTP 为传输协议,客户端通过浏览器(Browser)访问 WEB 服务器和与其相连的后台数据库,我们称之为 B/S(Browser/Server)模式,其三层结构组成如图2-3所示。

客户端WEB服务器客户端图2-3 B/S三层结构图

后台数据库 从左到右,分为三个层次:

第一层是客户端即浏览器,主要完成客户和后台的交互及最终查询结果的输出功能。在客户端向指定的 Web 服务器提出服务器请求,Web 服务器用 HTTP 协议把所需文件资料传给用户,客户端接受并显示在 www.xiexiebang.computerLevel FirstLanguage SecondLanguage

varchar(20)varchar(50)varchar(20)varchar(50)char(10)varchar(50)varchar(20)varchar(20)varchar(20)tinyint varchar(50)varchar(50)varchar(20)varchar(20)varchar(20)varchar(50)varchar(50)varchar varchar(50)varchar(50)varchar(50)varchar(50)varchar(50)varchar(50)varchar(50)varchar(50)varchar(50)varchar(50)varchar(50)

√ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √ √

家庭出身 户籍所在地 籍贯 家庭住址 邮编 健康状况 身高 视力 体重 婚姻情况 就读院校 学历 学制 宿舍号 班主任 职务 生源所在地 培养类别 入学时间 毕业时间 毕业证书编号 入团情况 入团介绍人 入党情况 入党介绍人 第二学历 计算机水平第一外语 第二外语

4.3 E-R图

E-R图是描述概念数据模型的主要工具,E-R图也称为实体-联系模型,由实体,属性,联系三个要素构成。根据系统功能分析后,设计出满足各实体间相互关系的内容就可以用E-R图表达出来,部分实体E-R图如图4-3所示。

- 14 -

2011届本科生毕业设计

年级号年级名学院号学院名称年级1包含n学院1包含1专业n包含个人照片n专业名称专业号专业简介社会关系成绩信息家庭关系班级1包含n学生信息性别班级号班级名称班级简介学生号姓名政治面貌出生日期民族健康状况籍贯 图4-3 系统E-R图

4.4 4.4.1 数据库详细实现 存储过程

存储过程只在创建时进行编译,以后每次执行存储过程都不需再重新编译;使用存储过程一方面减少了浏览器与服务器间的交互,减少了网络传输,另一方面又省去了DBMS对SQL语句的语法检查、查询优化和编译等过程,从而可以明显改善系统的性能。我们在设计系统时,对于复杂的查询、汇总统计等功能采用存储过程实现,而不是由Web服务器或客户机来执行SQL操作。这样,既降低了Web服务器或客户机的负担,又提高了模块的独立性,优化了系统的性能。

1)统计学生人数存储过程

该存储过程的作用是根据输入的年级,统计出总人数,代码如下: create proc FileCount(@StuYear varchar(10))as select StuYear as 年级,StuCollege as 学院,专业数=count(distinct StuProfession),班级数=count(distinct StuClass),人数=count(*)from FileView where StuYear=@StuYear group by StuYear,StuCollege order by StuYear 2)统计年龄分段人数存储过程

该存储过程的作用是统计出各年龄段的人数,代码如下: Create proc AgeCount

- 15 -

2011届本科生毕业设计

As begin select sum(case when cast(datediff(yy,birth,getdate())as nvarchar)<18 then 1 else 0 end)as '18岁以下',sum(case when cast(datediff(yy,birth,getdate())as nvarchar)between 19 and 21 then 1 else 0 end)as '19--21岁',sum(case when cast(datediff(yy,birth,getdate())as nvarchar)between 22 and 24 then 1 else 0 end)as '22--24岁',sum(case when cast(datediff(yy,birth,getdate())as nvarchar)between 25 and 27 then 1 else 0 end)as '25--27岁',sum(case when cast(datediff(yy,birth,getdate())as nvarchar)>28 then 1 else 0 end)as '28岁以上' from StuFile end 4.4.2 触发器

触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(insert,delete,update)时就会激活它执行。

1)登陆日志触发器

该触发器的功能是当用户登陆系统时,自动往日志表里添加登陆名、登陆时间和登陆IP地址,详细代码如下:

create trigger login_tri on dbo.UserInfo for update as insert into LoginLog(userid,logindate,loginip)select U_ID,U_lastdate,U_lastIP from inserted 2)禁止修改登陆日志触发器

该触发器的功能是禁止用户修改日志表,详细代码如下: create trigger tri1 on dbo.LoginLog for update as

raiserror('不能修改日志',16,10)

rollback transaction 3)自动添加学生账号触发器

该触发器的功能是当添加学生档案时,自动添加该学生的系统账号,其中登陆账号为学号,登陆密码为学生的身份证号,详细代码如下:

- 16 -

2011届本科生毕业设计

create trigger insert_user on StuFile for insert as begin declare @userID varchar(20),@userPass varchar(20),@userName varchar(20)select @userID = inserted.StuNo ,@userPass = inserted.IdentityID,@userName=inserted.StuName from inserted insert into UserInfo(U_ID,U_pass,U_name,U_power)values(@userID,@userPass,@userName,'学生')end 4)级联删除账号触发器

该触发器的功能是当删除某一学生的档案信息时,自动删除该学生的登陆账号,详细代码如下: create trigger delete_user on dbo.StuFile for delete as begin delete UserInfo from UserInfo,deleted where UserInfo.U_ID=deleted.StuNo end

- 17 -

2011届本科生毕业设计 系统设计 5.1 系统体系结构

学生档案管理系统采用的是三层体系结构,就是将系统的总体结构分为三层:表示层、业务逻辑层和数据层,将此三层相分离。因此可以对系统进行并行的开发和维护,提高开发和维护的效率,也降低了开发和维护的成本。

学生档案管理系统的体系结构如图5-1所示。

图5-1 学生档案管理系统体系结构图

5.2 系统模块划分

本系统为一个基于WEB平台下的学生档案管理系统,主要有用户管理模块、权限管理模块、年级管理模块、学院管理模块、专业管理模块、班级管理模块、学生档案管理模块、系统管理模块等几部分功能,其基本功能模块图5-2所示。

学生档案管理系统用户管理权 限 管 理年 级 管 理学 院 管 理专业管理班 级 管 理学 生 档 案 管 理系 统 管 理添加用户编辑用户删除用户编辑权限添加年级编辑年级删除年级添加学院编辑学院删除学院添加专业编辑专业删除专业添加班级编辑班级删除班级添加学生信息编辑学生信息删除学生信息导入学生信息导出学生信息学生人数统计数据库备份数据库还原 图5-2 系统基本模块图

本系统根据学校管理需要,共分为三种级别的用户,分别为:学生用户、教师用户和管理员用户。不同用户对应着不同的操作权限,其具体操作权限如下述。

1)学生用户:供在校学生使用。学生用户登录后,可以查看有关学生本人的信息,其访问操作包括修改密码、一些简单的查询等。具体操作权限如下: a)学生本人的档案信息查看

- 18 -

2011届本科生毕业设计

b)学生本人档案导出 c)学校相关信息的查看

2)教师用户:供本校教师使用。其操作权限如下:

a)修改个人密码

b)查询和查看学生档案信息 c)学生档案信息的导出 d)查看学生的统计信息

3)管理员用户:管理员用户具有该系统的所有权限,包括数据库的备份、还原等,具体权限如下:

a)用户的添加、删除、修改、查询和导出 b)用户的权限设置

c)年级信息的添加、删除、修改 d)学院信息的添加、删除、修改 e)专业信息的添加、删除、修改 f)班级信息的添加、删除、修改

g)学生档案信息的的添加、删除、修改、查询、导入、导出 h)数据库的远程备份、还原

5.3 主要功能模块简介

1)登陆验证模块

用户身份验证是实现系统安全性和保证系统稳定性的有效措施之一,用户身份验证可以防止非授权用户使用与入侵,同时也可以维护合法用户的权益,本系统采用用户登录方式限制对系统资源随意访问。在该模块中,学生的账号是由触发器自动添加的,对于其他用户,则必须由管理员添加用户信息后方可使用本系统。2)用户管理模块

用户管理模块主要是实现对用户的添加、删除、修改和查询,同时还可以根据需要导出相关用户的信息,如账号、密码等。3)权限管理模块

权限管理模块主要是实现对不同类别用户的权限设置,可对不同类别的用户赋予不同的权限,如学生类别的初始权限就只有修改密码、查看个人信息和导出个人信息,管理员可对其权限进行更改。

4)年级管理模块

年级管理模块主要是实现对年级信息的添加、删除和修改。5)学院管理模块

学院管理模块主要是实现对学院信息的添加、删除和修改。

- 19 -

2011届本科生毕业设计

6)专业管理模块

专业管理模块主要是实现对专业信息的添加、删除、修改和查询,在添加专业信息时必须选择学院,否则无法添加。7)班级管理模块

班级管理模块主要是实现对班级信息的添加、删除、修改和查询,在添加班级信息时必须选择年级、学院和专业,否则无法添加,并且不能添加相同名字的班级。8)学生档案管理模块

学生档案管理模块主要是实现对学生档案信息的录入、删除、修改、查询和EXCEL表格的导入,Word文档的导出等功能,该模块是本系统的核心模块,包含了丰富的学生个人信息,同时在此模块中还实现了复杂查询和模糊查询,可对学生信息进行不同条件的组合查询,并可对查询结果自定义格式查看和导出。此外,该模块还包含学生人数的统计,目前为止已实现的统计有:统计每个年级的人数分布、性别人数统计、政治面貌人数统计、年龄分段人数统计。9)系统管理模块

系统管理模块主要是实现对系统数据库的远程备份和还原,通过此模块可远程备份数据库,备份后还可将备份文件下载到本地,同时下载后可选择是否删除。还原功能则分为普通还原和强制还原,强制还原是强制关闭该数据库的进程,把数据库恢复到备份前状态。

- 20 -

2011届本科生毕业设计 系统详细设计与实现 6.1 登陆界面

系统的登陆界面在系统设计中起着举足轻重的作用,一个设计良好的登陆界面可防止未授权用户非法使用系统,避免个人信息的泄露等。在本系统的登陆界面中,实现了验证码技术,以防止用户信息被暴力破解,用户在输入正确的登陆信息后方可使用本系统,在登陆成功后,会自动往登陆日志表中添加本次登陆用户的用户名、登陆时间、登陆IP,以备管理员查询,而其它界面则采用了Sesssion参数来判断用户是否登陆,登陆界面如图6-1所示。

图6-1 登陆界面

登陆验证的关键代码请见附录。

6.2 系统首页

系统首页主要显示当前登陆用户的登陆信息,如登陆用户的登陆时间、登陆IP地址、累计登陆次数等信息,实现界面如图6-2所示。

图6-2 系统首页

- 21 -

2011届本科生毕业设计

6.3 用户管理

用户管理功能主要包括修改密码、添加用户、查询用户信息、导出用户信息等,实现界面如图6-3到图6-6所示。

图6-3 修改密码界面

图6-4添加用户界面

图6-5 用户管理界面

图6-6 权限管理界面

用户管理的关键代码请见附录。

6.4 类别管理

类别管理主要包括年级管理、学院管理、专业管理、班级管理等,在这些界面的实现中,使用了.NET 2.0新增的服务器控件—GridView。GridView是DataGrid的后继控件,GridView和DataGrid功能相似,都是在Web页面中显示数据源中的数据,将数据源中的一行数据,也就是一条记录,显示为在Web页面上输出表格中的一行。但GridViewd在功能上更加丰富,因为其提供了智能标记面板,更加易用、方便,常用的排序、分页、更新、删除等操作更是可以零代码实现。并且GridView还具有PagerTemplate属性,可以自定义用户导航页面,也就是说对分页的控制更加随心所欲,节省了项目开发的大量时间。

6.4.1 年级管理

年级管理包括年级信息的添加和管理,实现界面如图6-7和图6-8所示。

- 22 -

2011届本科生毕业设计

图6-7年级添加界面

图6-8 年级管理界面

6.4.2 学院管理

学院管理包括学院信息的添加和管理,实现界面如图6-9和图6-10所示。

图6-9 学院添加界面

图6-10 学院管理界面

6.4.3 专业管理

专业管理包括专业信息的添加、管理和查询,实现界面如图6-11和图6-12所示。

图6-11 专业添加界面

图6-12 专业管理界面

6.4.4 班级管理

班级管理包括班级信息的添加、查询和管理,实现界面如图6-13和图6-14所示。

- 23 -

2011届本科生毕业设计

图6-13 班级添加界面

图6-14 班级管理界面

班级管理的关键代码请见附录。

6.5 6.5.1 学生档案管理 学生档案信息录入

学生档案包含了丰富的学生个人信息,为方便浏览和录入信息,该界面使用了网页选项卡技术,把学生的信息分为基本资料

一、基本资料

二、测评信息、阅历及关系、其它情况、学籍变动、备注等七大类。因学生档案信息的严谨性,在此界面的设计中,大量使用了正则表达式来限制用户的输入,以防止错误信息的录入,如身份证号只允许输入15位或18位数字、日期必须是正确的时间格式、联系电话只能输入7位或11位数字等。同时因本系统包含大量的学生信息,为防止照片上传时因文件名相同而被覆盖,所以在此处实现了照片文件上传自动命名的功能。实现界面如图6-15所示。

图6-15 学生信息录入界面

6.5.2 学生档案信息管理

此页面主要负责对学生档案信息的管理,可使用多达10个查询条件组合起来进行学生查询,并可对查询结果自定义格式查看,选择自己需要显示的信息,通过导出功能还可把查询结果导出为word文档。

- 24 -

2011届本科生毕业设计

实现界面如图6-16所示。

图6-16 学生档案信息管理界面

6.5.3 学生档案信息导入

通过此界面可把EXCEL表格里面的学生数据导入到数据库里,实现界面如图6-17所示。

图6-17 学生档案信息导入界面

学生档案信息导入关键代码请见代码。

6.5.4 学生信息统计

本界面主要是实现对学生人数、类别的统计,因时间关系,只实现了年级人数统计、性别人数统计、政治面貌分布人数统计和年龄分段人数统计,其中类别人数统计功能中使用了第三方服务器控件DotNetCharting,DotNetCharting是一个.NET图表控件,对中文的支持非常好,而且操作方便,开发快速,实现效果如图6-18和图6-19所示。

- 25 -

2011届本科生毕业设计

图6-18 年级人数统计界面

图6-19 类别人数统计界面

学生人数统计关键代码请见附录。

6.6 系统管理

数据库作为信息系统的核心,在系统的运行中担当着重要的角色,尽管数据库系统中采取了各种保护措施来防止数据库的安全性和完整性被破坏,保证并发事务的正确执行,但是计算机系统中硬件的故障、软件的错误、操作员的失误以及恶意的破坏仍是不可避免的,这些故障轻则造成运行事务非正常中断,影响数据库中数据的正确性,重则破坏数据库,使数据库中全部或部分数据丢失。因此在系统实现中,数据库的备份和恢复功能显得尤为重要,系统管理模块正是实现了这两个功能,详细内容如下所示。

6.6.1 数据库备份

数据库备份界面主要实现了数据库备份功能,当备份成功后可选择是否把备份文件下载到本机,下载后可删除服务器上的备份文件。实现界面如图6-20所示。

- 26 -

2011届本科生毕业设计

图6-20 数据库备份

数据库备份关键代码请见附录。

6.6.2 数据库还原

数据库还原界面主要实现了数据库还原功能,备份文件可输入服务器上的备份文件名或选择本机上的备份文件,还原方式分普通还原和强制还原两种,当选择强制还原时,会强制中断连接进程,还原数据库。实现界面如图6-21所示。

图6-21 数据库还原界面

数据库还原关键代码请见附录。

6.6.3 系统空间占用信息

通过此界面可查看本系统的空间占用信息,实现界面如图6-22所示。

- 27 -

2011届本科生毕业设计

图6-22 系统空间占用界面 系统测试

7.1 测试目标

系统测试是系统开发周期中一个十分重要而漫长的阶段。其重要性体现在它是保证系统质量与可靠性的最后关口,是对整个系统开发过程包括系统分析,系统设计和系统实现的最终审查。系统测试的对象不仅仅是源程序,而应是整个系统,它把需求分析,概要设计,详细设计以及程序设计各阶段的开发文档,包括需求规格说明,概要设计说明,详细设计说明以及源程序,都作为测试的对象。测试的目的就是发现系统的错误。

7.2 7.2.1 模块测试 登陆测试

打开系统登录页面login.aspx,出现界面如图6-1。输入正确的用户名、密码和验证码,并选择相应的用户类别后文方可登录成功,跳转到系统首页,这样就达到了预期的登陆效果。该模块的测试结果如表7-1所示。

表7-1 登陆模块测试结果

测试操作

不输入任何信息 输入正确的用户信息

输入错误验证码,其他正确 使用学生账号登陆,选择身份“管理员”,其它信息正确 输入正确用户错误密码,其它信息正确

测试取值 无

admin、admin admin、admin 200711622123、123456

admin、1234

系统响应 显示错误提示信息 进入系统首页 显示错误提示信息 弹出错误提示框 弹出错误提示框

错误或提示

“请输入账号”,“请输入密码” 无

“验证码错误!”

“登陆信息错误,请确认!” “登陆信息错误,请确认!”

- 28 -

2011届本科生毕业设计

7.2.2 用户管理测试

登陆成功后,点击左侧导航的修改密码,进入密码修改界面。输入正确的旧密码和连续两次输入新密码后,即可更改当前登陆用户的登陆密码。该页面的测试结果如表7-2所示。用户管理界面的其它功能和学生档案管理类似,经测试运行正常,这里不再介绍,详细内容请见学生档案管理测试。

表7-2 密码修改界面测试结果

测试操作

不输入任何信息 输入错误的旧密码 旧密码为空,其它正确

旧密码正确,新密码和确认密码不一致 输入正确信息

测试取值 无

admin11

admin、admin admin、33、44

admin、1234、1234

系统响应 显示错误提示信息 显示错误提示信息 弹出错误提示框 显示错误提示信息 跳转到操作成功页面

错误或提示 “密码不能为空” “密码错误” “请输入旧密码” “密码不一致” 无

7.2.3 班级管理测试

登陆成功后,点击左侧导航的班级管理,出现界面如图6-14。点击“添加班级”,进入班级添加界面,如图6-13所示。选择该班级所在年级、学院、专业后,输入班级名称和备注说明,若已存在同名班级,则显示错误提示信息。添加成功后跳转到操作成功提示页面,如图7-1所示,显示该页面两秒后则会自动跳转到班级管理页面,如图6-13所示。在该页面可对班级信息进行查询、编辑和删除,点击“删除”将删除该班级的信息,点击“取消”取消删除,点击“确定”,成功删除数据库中的该条记录。如图7-2所示。

图7-1

图7-2

年级管理、学院管理、专业管理等模块与班级管理模块类似,经测试运行正常,这里不再进行叙述。

7.2.4 学生档案管理测试

登陆成功后,点击左侧导航的录入学生信息,出现界面如图6-15,在该界面按照要求正确填入学生信息后,点击右侧确定按钮,若存在相同学号的学生信息,则弹出提示框,如图7-3所示,若添加成功,则跳转到操作成功页面,并且两秒后会自动跳转回学生档案管理页面如图6-16。在该界面可对学生档案信息进行管理,输入查询条件后,下方的GridView显示出正确的查询结果。点击“自

- 29 -

2011届本科生毕业设计

定义格式查看”,可选择需要显示的信息。点击“导出”,则会把当前GridView内显示的信息导出到Word文档中,并弹出文件下载对话框,如图7-4所示。

图7-3 提示框

图7-4 下载对话框

7.2.5 系统管理测试

登陆成功后,点击左侧导航的数据库备份,进入数据库备份界面,如图6-20所示。输入存放备份文件的目录名和备份文件名,若不输入则默认为“DataBackup”和“当前日期_bak”,点击开始备份,备份成功后会显示如图7-5所示界面。点击下载备份文件,则会弹出下载对话框,如图7-6所示。点击删除备份文件,会弹出删除成功的提示框,如图7-7所示。

图7-5 数据库备份界面

图7-6 下载对话框

图7-7 提示框

点击左侧导航的数据库还原,进入数据库还原界面,如图6-21所示。按要求输入备份文件目录和文件名或选择本地备份文件,点击开始还原,还原成功后弹出提示框,如图7-8所示。若同时输

- 30 -

2011届本科生毕业设计

入文件名和选择本地备份文件,则会弹出提示框,如图7-9所示。

图7-8

图7-9

再对本系统其它功能模块进行详细测试,系统的各个能功模块界面、功能均运行正常,程序处理正确,达到了理想的效果。总结

经过了一个多月的学习和努力,我完成了基于WEB的学生档案管理系统的毕业设计。系统的详细设计根据系统分析阶段的结论将系统具体化,并完成了各个模块的功能,直到最后形成了一个完整的可行性高的学生档案管理系统。

本系统使用C#.NET作为开发语言,在开发的过程中采用Microsoft Visual Studio 2008作为开发工具,并选用了Microsoft SQL Server 2005 数据库系统以实现数据的存储,同时还使用了第三方服务器控件,如DotNetCharting。页面的设计则使用了Adobe Dreamweaver CS5 进行设计,同时使用了Adobe Photoshop CS5、光影魔术手等图像处理工具进行图像的处理和美化,最后设计出一个较为美观和人性化的系统。由于时间的限制和本人编程技术的不足,此系统的功能还有待于进一步的加强和完善。例如权限管理功能,原来的设想是把权限细分到每个用户上的,但因时间和技术关系,只能细分到用户类别。

通过此次毕业设计,让我知道了系统开发的艰辛与快乐,在设计的过程中,有时为了一个看起来很简单的功能,也要占用大量时间,有时还未必能彻底解决问题。所以在编写程序的过程中一定要有耐心和细心,否则一时的粗心也可能引发一大堆的错误。同时本次设计也让我知道了自己知识、能力、经验的缺乏,还有许多知识需要去了解和学习,从而提高自己的个人能力。ASP.NET的学习中是从无到有,从生疏到熟悉,让人回味无穷的一个过程,不但可以解决自己的问题,还可以帮助同学解决他们的难题,是一个很好的学习过程。

总的来说,本学生档案管理系统基本上可以满足学生档案管理的需要。在以后的日子里,本系统将会得到进一步的提高和完善。

- 31 -

鸣 谢

首先感谢肖洪生老师给予了精心的指导和热情的帮助,然后就是感谢我的同学们的大力帮助!其次感谢家人对我在设计期间的关爱和照顾。在课题设计的构思 阶段和系统的设计阶段,导师提出许多宝贵的设计意见,在最后的论文修改阶段,老师在百忙之中抽出时间帮我指出和解决存在的问题,提供了很多的帮助,最后才得以顺利的完成论文的写作。在短暂的几个月的相处时间里,老师渊博的知识、敏锐的思路和实事求是的工作作风给我留下了深刻的印象,这将使得我终身受益,在此谨向老师表示衷心的感谢和崇高的敬意。同时也感谢07信管的同学们在这次毕业设计中对我的支持和帮助。另外,我要衷心感谢信息学院全体老师对我的教诲,他们不仅使我的知识、能力得到提高,更重要的是教会了我怎样提高自己的自学能力,怎样去适应社会,适应工作。还有网上众多不知名的专家和朋友,我要对他们说声谢谢,他们在网络上的文章帮我解决了许多困难,感谢所有帮助我的老师、朋友及家人。

- 32 -

参考文献

参考文献

[1]王辉,黄红超.ASP.NET实用教程[M].北京:清华大学出版社,2005.12.[2]求是科技.ASP.NET信息管理系统开发实例导航[M].北京:人民邮电出版社,2005.4.[3]金明花,李冉,邹婷.Flash 8从入门到精通[M].北京:中国青年出版社,2006.5.[4]Richard Leinecker.ASP.NET 实用全书[M].北京:电子工业出版社,2003.1.[5]张海藩.软件工程导论[M].北京:清华大学出版社,2008.2.[6]王珊方,萨师煊.数据库系统概论[M].北京:高等教育出版社,2008.4.[7]赵致格.数据库系统与应用(SQL Server)[M].北京:清华大学出版社,2005.9.[8]王志伟,宋晓鹏.突破ASP.NET 编程实例五十讲[M].北京:中国水利水电出版社,2002.5.[9] 杨天奇,王文,何朋,李会锋.ASP.NET网络编程技术[M].北京:机械工业出版社,2007.[10]微软公司.Microsoft ASP.NET标准教程[M].北京: 中国劳动社会保障出版社,2003.5.[11]孙良军.Flash 8入门与实例演练[M].北京:中国青年出版社,2006.3.[12]Louis Davidson.Professional SQL Server 2000 Database Design[M],o'reilly ,2003.- 33 -

附 录

(一)登陆验证的关键代码。String code = CodeTest.Code;

if(!this.tb_code.Text.Trim().Equals(code))

{Label1.Text = “验证码错误!”;}

else

{

String id = tb_id.Text.ToString();

String pass = tb_pass.Text.ToString();

string power = dd_power.SelectedValue.ToString();

StringBuilder sqlstr = new StringBuilder();

sqlstr.Append(“select * from UserInfo”);

sqlstr.Append(“ where U_ID=@id and U_pass=@pass and U_power=@power”);

SqlParameter[] parameters = { new SqlParameter(“@id”, SqlDbType.NVarChar, 20), new SqlParameter(“@pass”, SqlDbType.NVarChar, 20), new SqlParameter(“@power”, SqlDbType.NVarChar, 20)};

parameters[0].Value = id;

parameters[1].Value = pass;

parameters[2].Value = power;

DataSet ds = Query(sqlstr.ToString(), parameters);

DataTable dt = new DataTable();

dt = ds.Tables[0];

if(ds.Tables[0].Rows.Count!= 0)

{

String logindate = DateTime.Now.ToString(“yyyy-MM-dd HH:mm:ss”);

String loginip = Request.UserHostAddress;

Session[“id”] = dt.Rows[0][“U_ID”].ToString();

Session[“name”] = dt.Rows[0][“U_name”].ToString();

Session[“pass”] = dt.Rows[0][“U_pass”].ToString();

Session[“power”] = dt.Rows[0][“U_power”].ToString();

Session[“lastdate”] = dt.Rows[0][“U_lastdate”].ToString();

Session[“loads”] = Convert.ToInt16(dt.Rows[0][“U_loads”].ToString())+1;

Session[“lastip”] = dt.Rows[0][“U_lastIP”].ToString();

Session[“logindate”] = logindate;

Session[“loginip”] = loginip;

string strsql = @“update UserInfo set U_lastdate='” + logindate + “',U_lastIP='” +loginip+“', U_loads=U_loads+1 where U_ID='” + id + “'”;

using(SqlConnection conn = new SqlConnection(connStr))

{

using(SqlCommand comm = new SqlCommand(strsql, conn))

{

conn.Open();

int row = comm.ExecuteNonQuery();

- 34 -

}

if(power == “管理员” | power == “教师”)

Response.Redirect(“Main.aspx”);

else if(power==“学生”)

Response.Redirect(“user/Main.aspx”);

}

}

else

{ShowMessageBox(“登陆信息错误,请确认!”);}

}(二)用户管理关键代码

protected void Button1_Click(object sender, EventArgs e)

{

string q1 = DropDownList2.SelectedValue.ToString();

//用户类别

string q2 = DropDownList3.SelectedValue.ToString();

//查询方式

string qtext = TextBox4.Text.ToString().Trim();

string sqlstr = “select * from UserInfo where”;

if(q1 == “请选择...” & q2 == “请选择...” & qtext == “")

{

sqlstr = ”select * from UserInfo “ + ”order by U_Power,ID“;

SqlDataSource1.SelectCommand = sqlstr;

}

else

{

if(q1!=”请选择...“)

sqlstr = sqlstr + ” U_power='“ + q1 + ”' and “;

if(q2 == ”账号“ & qtext!= ”“)

sqlstr = sqlstr + ”U_ID like '%“ + qtext + ”%' and “;

if(q2==”姓名“& qtext!=”“)

sqlstr = sqlstr + ”U_name like '%“ + qtext + ”%' and “;

if(q2==”请选择...“& qtext!=”“)

sqlstr = sqlstr + ”U_name like '%“ + qtext + ”%' or U_ID like '%“ + qtext + ”%' and “;

sqlstr = sqlstr + ”1=1“;

SqlDataSource1.SelectCommand = sqlstr;

}

if(GridView1.Rows.Count!= 0)

{

Session[”SqlDataSouce1Command“] = SqlDataSource1.SelectCommand;

}

}(三)班级管理关键代码

protected void Button1_Click(object sender, EventArgs e)

{

if(tb_class.Text == ”“)

- 35 -

{

ShowMessageBox(”请输入班级名称“);

}

else if(CustomValidator1.IsValid)

{

string stu_year = DropDownList1.SelectedValue.ToString();

string stu_col = DropDownList2.SelectedValue.ToString();

string stu_pro = DropDownList3.SelectedValue.ToString();

string stu_class = tb_class.Text;

string stu_note = tb_note.Text;

string strsql = ”insert into StuClass(StuClass, Year_ID, College_ID, Profession_ID,Note)values('“ + stu_class + ”',“ + stu_year + ”,“ + stu_col + ”,“ + stu_pro + ”,'“ + stu_note + ”')“;

using(SqlConnection conn = new SqlConnection(connStr))

{

using(SqlCommand comm = new SqlCommand(strsql, conn)){

conn.Open();

int row = comm.ExecuteNonQuery();}

Response.Redirect(”success.aspx?success=5&url=StuClassManage.aspx“);//跳转到汇总页面

}} }(四)学生档案信息导入关键代码 Random number = new Random();

string filename = DateTime.Now.ToString(”yyyyMMddhhmmssfff“)+ ”_“ + number.Next(10000, 99999).ToString()+

”_“

+

FileUpload1.PostedFile.ContentLength

+ System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName);

string path = Request.MapPath(”~/Temp/“);

FileUpload1.SaveAs(path + filename);

string connExcel = ”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/StuFileManage/Temp/“ + filename + ”;Extended Properties=Excel 8.0“;

SqlConnection sqlConnection1 = new SqlConnection(connStr);

OleDbConnection oleDbConnection = new OleDbConnection(connExcel);

try

{

oleDbConnection.Open();

sqlConnection1.Open();

//打开连接

DataTable dataTable = oleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);//获取excel表

string tableName = dataTable.Rows[0][2].ToString().Trim();//获取sheet名,其中[0][1]...[N]: 按名称排列的表单元素

tableName = ”[“ + tableName.Replace(”'“, ”“)+ ”]“;(五)学生人数统计关键代码

private void Drawing()

{

Charting c = new Charting();

c.Title = ”广东海洋大学学生类别统计“;

- 36 -

c.XTitle = ”“;

c.YTitle = ”人数(人)“;

c.PicHight = 400;

c.PicWidth = 1000;

c.SeriesName = ”合计“;

c.PhaysicalImagePath = ”Temp“;//统计图片存放的文件夹名称

c.FileName = ”Statistics“;

c.Type = SeriesType.Cylinder;

c.Use3D = true;

SqlConnection Con = new SqlConnection(connStr);

//数据库连接

Con.Open();

string cmdtxt = ”select count(*)as 人数 from StuFile group by Gender“;

//SqlCommand Com = new SqlCommand(cmdtxt, Con);

DataSet ds = new DataSet();

SqlDataAdapter Da = new SqlDataAdapter(cmdtxt, Con);

Da.Fill(ds);

Con.Close();

SeriesCollection SC = new SeriesCollection();// 生成对比图

Series s = new Series();

s.Name = ”男生人数“;

Element e = new Element();

e.Name = ”性别“;//对应于X轴个尺度的名称

e.YValue = Convert.ToSingle(ds.Tables[0].Rows[0][”人数“]);

s.Elements.Add(e);

SC.Add(s);

Series s1 = new Series();

s1.Name = ”女生人数“;

Element e1 = new Element();

e1.Name = ”性别“;//对应于X轴个尺度的名称

e1.YValue = Convert.ToSingle(ds.Tables[0].Rows[1][”人数“]);

s1.Elements.Add(e1);

SC.Add(s1);

SC[0].DefaultElement.Color

c.DataSource = SC;

c.CreateStatisticPic(this.Chart1);

}(六)数据库备份关键代码

protected void Button1_Click(object sender, EventArgs e)

{

string fullpath = Server.MapPath(TextBox1.Text.Trim().ToString());

if(!Directory.Exists(fullpath))

{

Directory.CreateDirectory(fullpath);

}

string filename = TextBox2.Text.Trim().ToString()+”.bak“;

SqlConnection connection = new SqlConnection(connStr);

SqlCommand command = new

=

Color.FromArgb(255,99,49);

/

SC[1].DefaultElement.Color = Color.FromArgb(0, 156, 255);

- 37 -

SqlCommand(”use master;backup database StuFile to disk=@path;“, connection);

//备份数据库语句

connection.Open();

string path = fullpath + filename;

command.Parameters.AddWithValue(”@path“, path);

command.ExecuteNonQuery();

connection.Close();

bak_down.NavigateUrl = TextBox1.Text.Trim().ToString()+ filename;

bak_down.Visible = true;

bak_delete.Visible = true;

HyperLink4.Visible = true;

TextBox1.ReadOnly = true;

TextBox2.ReadOnly = true;

}(七)数据库还原关键代码

string path=Server.MapPath(TextBox1.Text.Trim().ToString());

System.IO.FileInfo file = new System.IO.FileInfo(path);

if(TextBox1.Text.ToString()!= ”“ & FileUpload1.HasFile)

{

ShowMessageBox(”不能同时选择两个数据库备份文件“);

TextBox1.Text = ”“;

}

else if(!FileUpload1.HasFile &!file.Exists)

{

ShowMessageBox(”备份文件不存在,请重新输入“);

TextBox1.Text = ”“;

}

else if(file.Exists)

{

try

{

SqlConnection connection = new SqlConnection(connStr);

SqlCommand command = new SqlCommand(”use master;restore database StuFile from disk=@path with replace;“, connection);

//还原数据库语句

connection.Open();

command.Parameters.AddWithValue(”@path“, path);

command.ExecuteNonQuery();

connection.Close();

ShowMessageBox(”还原成功");

}

catch(Exception ex)

{

ShowMessageBox(ex.Message);

}

- 38 -

下载学生档案管理系统c语言[小编推荐]word格式文档
下载学生档案管理系统c语言[小编推荐].doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    学生信息管理系统实训(C语言)

    #includevoid lookup(int snum,int sc,int length);void summary(int sc,int length);void change(int n,int snum,int sc,int length); void search(int n,int s......

    学生成绩管理系统毕业论文C语言

    111111111学院 毕 业 论 文 题 目学生成绩管理系统 姓 名 1 1 1 所在系别 计 算 机 系 专业班级 计算机应用技术计算机111班学 号 1111111111 指导教师 1 1 1 日 期......

    c语言 学生信息管理系统(线性表版)

    #include #include #define MAXSIZE 100 #include #include typedef struct{ char num[8];/*学号*/ char name[9];/*姓名*/ char gender;/*性别*/ int score;/*成......

    C语言程序设计学生通讯录管理系统

    #include "stdio.h" #include "stdlib.h" #include "string.h" #include "conio.h" #include "stdlib.h" #define null 0 struct record { char name[20]; char phone[20];......

    学生档案管理系统任务书.

    西安高新科技职业学院 负责人:张琳 批准日期: 毕 业 设 计(论 文任 务 书 专业 班 学生 一、 毕 业设计 (论文 课题 基于 Struts 的图书馆管理系统 二、毕业设计 (论文 工作......

    学生档案管理系统(vb)

    莱 芜 职 业 技 术 学 院 毕业设计(论文) 所 在 系:计算机系 姓 名: 韩坤 论文题目:学生档案管理系统 专 业:软件应用技术 班 级:07级软件一班 指导老师:宋文敏 二零一零 年 四月 月......

    C语言课程设计学生通讯录管理系统设计

    C语言课程设计学生通讯录管理系统设计一、题目内容的描述学生通讯录管理系统设计设计一个学生通信录,学生通迅录数据信息构成内容可自行设计(如:姓名、家庭地址、邮政编码、电......

    c语言实验报告三 学生成绩管理系统

    1. 实验内容 实现一个学生成绩处理程序,先输入多名学生的学号和成绩,然后进入菜单,可以选择打印,添加,修改,删除或查询成绩(学号查询和成绩段查询)。 2. 实验步骤 2.1 程序1 2.1.1......