学生成绩管理系统课程设计.docx
- 文档编号:8612112
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:16
- 大小:235.24KB
学生成绩管理系统课程设计.docx
《学生成绩管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统课程设计.docx(16页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统课程设计
学生成绩管理系统
1、课题设计的目的与要求
通过软件开发的实际操作,进一步掌握数据库的开发和应用,提高数据库的实用性,培养的工程的设计分析能力
具体如下:
1.学习和实践在分析和设计计算机应用系统所需要的知识,包括面向对象的系统分析与设计,编码和测试方面的知识;
2.进一步加强和提高软件工程文档的编写能力;
2、设计正文
1、系统需求分析
学生成绩管理系统主要满足来自三方面的需求,这三个方面分别是学生用户、教师用户和管理员用户。
(1)学生用户是主要的需求者。
主要的需求功能是查询成绩,查看是否补考,重修,学分等。
(2)教师用户的主要需求功能是登记、查询和修改学生成绩。
(3)管理员用户的功能需求比较复杂,包括对学生信息、教师信息、成绩信息进行管理。
在学生信息管理子模块中,实现对学生信息的添加、修改、删除操作,还可以输入查询条件进行查询操作。
在教师管理子模块中,实现对教师信息的添加、修改、删除等操作。
对其他信息子模块中,要实现编辑院系信息,编辑班级信息,编辑课程信息。
在这个系统中将管理员用户,教师用户,学生用户的权限进行严格的划分,管理员拥有最高的权限,可以查看、维护系统中的所有信息,比如,添加,修改学生信息。
而修改密码的权限是每个用户都有的,用以修改自己的密码信息。
通过进行严格的权限划分,可以更好地进行管理,也可更好地保护用户信息安全。
(4)数据词典
数据流编号:
S001
数据流名称:
管理员登陆信息
简称:
管理员信息
数据流来源:
管理员
数据流去向:
学生成绩管理系统
数据流组成:
管理员账号和密码
数据流量;100/天
高峰流量:
500/天
数据流编号:
S002
数据流名称:
教师登陆信息
简称:
教师信息
数据流来源:
教师
数据流去向:
学生成绩管理系统
数据流组成:
教师姓名,编号、院系
数据流量;1000/天
高峰流量:
10000/天
数据流编号:
S003
数据流名称:
学生成绩查询信息
简称:
学生成绩
数据流来源:
学生
数据流去向:
学生成绩管理系统
数据流组成:
学生姓名、学号、成绩、课程
数据流量;1000/天
高峰流量:
10000/天
2.系统总体设计
2.1设计问题域子系统
学生成绩管理系统时用于学生查询成绩,老师登记成绩和管理员维护信息的一个平台。
整个学生成绩管理系统分为学生模块,教师模块,管理员模块和公共模块四个模块。
以下是学生成绩管理系统的总设计图和各模块的说明
(1)总体设计图
(2)各模块功能
功能模块
子功能模块
功能
管理员模块
学生信息管理
对学生信息进行添加,删除,修改
教师信息管理
对教师信息进行添加,删除,修改
其他信息管理
编辑院系,班级,课程信息
学生模块
通过这个系统查询自己各科成绩
教师模块
通过这个系统登记,修改,查询学生成绩
公共模块
实现用户的身份验证和修改密码,退出系统等功能
3、系统详细设计
学生成绩管理系统是实现学生查询成绩,教师登记成绩,管理员维护信息的平台。
整个学生成绩管理系统分为学生模块,教师模块,管理员模块和公共模块四个模块。
4、数据库设计
4.1概念模型设计
由前面的需求分析得到实体主要有3个:
教师、学生、管理员、课程、成绩
教师属性:
姓名、编号、院系、
学生属性:
姓名、学号、院系、班级
管理员属性:
姓名、编号
课程属性:
课程名称、课程编号、授课教师
成绩属性:
课程名称、学生姓名、教师姓名、成绩
(1)教师与课程的关系
教师与课程的关系是n﹕m,一个教师可以教多个课程,一个课程可以由多个教师教
(2)教师与学生的关系
教师与学生的关系是n﹕m,一个教师可以教多个学生,一个学生由多个老师教
(3)学生与课程的关系
学生与课程的关系是n﹕m,一个学生可以有多个课程,一个课可以有多个学生上
(4)学生与成绩的关系n﹕m
4.2逻辑结构设计
①将E-R图转化为关系模型:
管理员(姓名、编号)
学生(姓名、学号、院系、班级)
教师(姓名、编号、院系)
课程(课程名称、课程编号、授课老师)
成绩(课程名称、学生姓名、老师姓名、成绩)
②数据表设计
①学生表Student的详细数据字段
序号
字段名
字段类型
说明
备注
索引
1
stuName
nvarchar(20)
notnull
学生姓名
2
stuID
nvarchar(20)
notnull
学生学号
关键字
有
3
stuDepart
Int
学生院系号
4
stuClass
Int
学生班级
5
stuPwd
nvarchar(20)
notnull
学生密码
②教师表Teacher的详细数据字段
序号
字段名
字段类型
说明
备注
索引
1
teaName
nvarchar(20)notnull
教师姓名
2
teaID
nvarchar(20)notnull
教师编号
关键字
有
3
teaDepart
Int
教师院系号
4
teaPwd
nvarchar(20)notnull
教师密码
③课程表Course的详细数据字段
序号
字段名
字段类型
说明
备注
索引
1
courseName
nvarchar(20)notnull
课程名称
2
courseID
nvarchar(20)notnull
课程编号
关键字
有
3
teaName
nvarchar(20)notnull
授课老师
④成绩表Score的详细数据字段
序号
字段名
字段类型
说明
备注
索引
1
courseName
nvarchar(20)notnull
课程名称
关键字
有
2
stuName
nvarchar(20)notnull
学生姓名
关键字
有
3
teaName
nvarchar(20)notnull
教师姓名
4
score
Int
成绩
⑤管理员表User的详细数据字段
序号
字段名
字段类型
说明
备注
1
adminName
nvarchar(20)notnull
管理员姓名
2
adminID
nvarchar(20)notnull
管理员编号
关键字
3
adminPwd
nvarchar(20)
管理员密码
4.3物理结构设计
5系统编码
#include
#include
#include
#defineLENsizeof(Student)
#defineNULL0
typedefstructstudent
{
intnum;/*学号*/
charname[20];/*姓名*/
intscore[3];/*成绩*/
structstudent*next;
}Student;
intn;/*声明一个全局变量*/
Student*cin(void);
Student*sort_1(Student*head,int);/*声明按学号排序函数*/
voidprint(Student*head);/*声明显示函数*/
Student*sort_all(Student*head);/*声明排序函数*/
voidfind(Student*head);/*声明查询函数*/
Student*add_new(Student*head);
Student*cin()
{
intflag;
Student*head,*p1,*p2;
n=0;
head=(Student*)malloc(LEN);
p2=head;
printf("\n请输入第%d名学生的学号,学号为0表示结束输入:
",n+1);
scanf("%d",&flag);
while(getchar()!
='\n');
for(;flag;)/*输入每个学生的信息*/
{
n++;
p1=(Student*)malloc(LEN);
p1->num=flag;
printf("请输入第%d名学生的姓名:
",n);/*输入姓名*/
scanf("%s",p1->name);
printf("请输入第%d名学生的成绩:
",n);/*输入成绩*/
scanf("%d",&p1->score[0]);
p1->sum=p1->score[0]+p1->score[1]+p1->score[2];
p2->next=p1;
p2=p1;
printf("\n请输入第%d名学生的学号,没有此学生则输入0表示结束:
",n+1);
scanf("%d",&flag);
}
p2->next=NULL;
printf("\n\n");
returnhead;
}
Student*sort_all(Student*head)/*定义排序函数*/
{
intchoose;
for(;;)
{
printf("\n\t\t#####学生成绩统计排序####\n");
printf("\t\t#\t1.按学生学号排序\t#\n");
printf("\t\t#\t8.显示当前学生成绩\t#\n");
printf("\t\t#\t0.返回上一级菜单\t#\n");
printf("请输入你要执行的操作:
");
scanf("%d",&choose);
while(getchar()!
='\n');
switch(choose)
{
case1:
case2:
case3:
case4:
head=sort_1(head,choose);break;
case5:
print(head);sort_2(head);break;
case6:
print(head);break;
case0:
returnhead;
}
}
}
Student*sort_1(Student*head,intchoose)/*定义按学号排序函数*/
{
Student*p1,*p2=head->next,*pm,*px;
Studentmid;
if(!
p2)returnhead;
for(p1=p2;p1->next!
=NULL;p1=p1->next)
{
pm=p1;
for(p2=p1->next;p2!
=NULL;p2=p2->next)
switch(choose)
{
case1:
if(pm->num>p2->num)pm=p2;break;
case2:
if(pm->sum
case3:
if(pm->score[0]
case4:
if(pm->score[1]
case5:
if(pm->score[2]
}
if(pm!
=p1)
{
mid=*pm;
*pm=*p1;
*p1=mid;
px=pm->next;
pm->next=p1->next;
p1->next=px;
}
}
printf("\n排序后的成绩表为:
\n");
print(head);
returnhead;
}
voidfind(Student*head)/*定义查询函数*/
{
Student*p;
intchoose,fnum;
chartem[20];
if(n==0){printf("\n当前系统没有任何学生数据!
\n");return;}
for(;;)
{
printf("\n请输入您要查询学生的方式:
\n\n");
printf("1、按学号查询;2、按姓名查询;0、我不查询了。
\n\n");
printf("请选择:
");
scanf("%d",&choose);
while(getchar()!
='\n');
if(choose==1)
{
printf("\n请输入你要查询的学生的学号,输入0退出学号查询:
");
scanf("%d",&fnum);
for(;fnum;)
{
for(p=head->next;p!
=NULL&&p->num!
=fnum;p=p->next);
if(!
p)
printf("\n学号为%d学生的数据为:
\n",p->num);
printf("学号\t姓名\t成绩总分\n");/*输出所有的学生信息*/
printf("%d\t%s\t%s\t%d%d%d%d\n",p->num,
p->name,p->sex,p->score[0],p->score[1],p->score[2],p->sum);
printf("\n\n请输入你还要查询的学生的学号,输入0表示不按学号查询了:
");
scanf("%d",&fnum);
}
}
}
elseif(choose==2)
{
printf("\n请输入你要查询的学生的姓名,输入0退出姓名查询:
");
scanf("%s",tem);
for(;strcmp(tem,"0");)
{
for(p=head->next;p!
=NULL&&strcmp(p->name,tem);p=p->next);
if(!
p)
}
}
elseif(choose==0){printf("\n你选择了不查询!
\n");break;}
else{printf("\n你以其他方式选择了不查询!
\n");break;}
}
}
printf("**************************学生成绩统计一览************************\
*****\n");
printf("学号\t姓名\成绩总分\n");
for(;p;p=p->next)
printf("%d\t%s\t%s\t%d%d%d%d\n",
p->num,p->name,p->sex,p->score[0],p->score[1],p->score[2],p->sum=p->score[0]+p->score[1]+p->score[2]);
}
structstudent*del(structstudent*head,longnum)/*定义删除学生信息函数*/
{structstudent*p1,*p2;
if(head==NULL){printf("\nlistnull!
\n");returnhead;}
p1=head;
while(num!
=p1->num&&p1->next!
=NULL)
{p2=p1;p1=p1->next;}
if(num==p1->num)
{if(p1==head)head=p1->next;
elsep2->next=p1->next;
printf("delete:
%ld\n",num);
n=n-1;
}
elseprintf("%ldnotdeenfound!
\n",num);
return(head);
}
intmain()/*主函数即用户的操作界面*/
{
Student*head;
intchoose,i,num;/*声明局部变量*/
head=(Student*)malloc(LEN);
head->next=NULL;
for(;;)
{
printf("\n\t\t*****学生成绩管理系统****\n");/*学生成绩管理系统*/
printf("\t\t*\t3.查询学生数据\t\t*\n");/*.查询学生数据*/
printf("\t\t*\t4.插入学生数据\t\t*\n");/*插入学生数据*/
printf("\t\t*\t5.显示当前成绩表\t*\n");/*显示当前成绩表*/
printf("\t\t*\t6.删除学生数据\t\t*\n");/*删除学生数据*/
printf("\t\t*\t0.退出成绩管理系统\t*\n");/*退出成绩管理系统*/
printf("\n请输入你要执行的操作:
");/*请输入你要执行的操作*/
scanf("%d",&choose);
while(getchar()!
='\n');
switch(choose)
}
}
}
6.系统测试
在系统测试中,我们首先对各个子模块进行单元测试,先判断每个子模块的运行是否正常,每个子模块判断好了,就把他们集成在一起,进行系统测试,查出是否有错误。
最后找几个人进行黑盒子测试。
三、课程设计总结或结论
首先,通过这次的课程设计的实践,让我对软件工程技术有了进一步的了解,提高了软件的运用能力,分析能力和解决问题的能力。
同时,让我对设计、编程等有了不同的认识,让我知道了自己的不足之处。
其次,本系统的实现会有不足之处,但在功能上可以满足用户的需要。
在其他方面的不足,将在今后的学习中不断改进。
然后,通过这次的课程设计,我发现对我的提高很大,编程是一个详细又周密的任务,需要人的周密思考,和高度的耐心,这可以让我克服不细致,没耐心的毛病,在以后的工作和学习中会有很大的帮助。
最后,我还学会了怎样借鉴别人的经验和方法,知道如何查阅资料和整理资料,这为以后的学习打下基础。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统 课程设计