学生学籍系统软件工程报告完成态.docx
《学生学籍系统软件工程报告完成态.docx》由会员分享,可在线阅读,更多相关《学生学籍系统软件工程报告完成态.docx(39页珍藏版)》请在冰豆网上搜索。
![学生学籍系统软件工程报告完成态.docx](https://file1.bdocx.com/fileroot1/2023-2/5/58516f4a-a44c-4eb1-bf08-8ba058b0d648/58516f4a-a44c-4eb1-bf08-8ba058b0d6481.gif)
学生学籍系统软件工程报告完成态
软件工程课程设计报告
课题名称___学生学籍管理系统_
院系信息工程学院
专业计算机科学与技术(嵌入式)
成员_吴森杨坤宋晨光
班级2015级计嵌班
学号宋晨光201541014
杨坤201541016
吴森201541018
序言
学生学籍管理系统是常见的一种管理系统,包括学生的学号、姓名、院系、专业、班级、年龄、性别、民族、出生日期和籍贯信息。
由于目前的学生学籍管理系统并不十分完善,在高等学校的教务管理工作中,学生信息的网上查询都是十分复杂、棘手的工作。
遵从以往的工作方式,该工作的工作量大,管理繁琐,既耗人力,又耗物力;如今面对大量的学生数据、报表,手工处理方式已经很难跟上现代化的步伐。
随着计算机技术及网络通讯技术的飞速发展,许多学校已经有了较好的计算机应用甚至网络硬件建设基础。
因此为提高学校管理工作的现代化、科学化水平,保证信息处理的即时化、准确化,开发一套对学生学籍进行管理的软件是极其重要的,而且是必需的。
本系统正是为解决这一问题而设计的,大大减少了以往学生管理工作的工作量,提高了工作效率,适应时代的步伐。
。
1、可行性分析
1.1问题描述
随着高校规模的不断增加,学生人数的增加,学校对学生管理的难度也越来越大,而学校对学生的管理,其实主要是对学生信息的管理,所以,学生信息管理是高校管理中很重要的一部分,它关系到整个高校的现代化程度。
现代科技的发展,尤其是软件行业的发展使得很多的管理工作都由计算机来完成,这样不仅能节省人力和物力,而且能够得到一些对决策起重要作用的信息。
而高校作为一个人数比较多的单位,也需要开发出相应的软件对学生学籍进行适当的管理。
只有管好学生才能更进一步的做强教育。
现在很多高校都在使用计算机对学生学籍进行管理,运用计算机来管理学生学籍,从而取代了人工管理模式下由于各种原因出现管理漏洞的可能性,因而减少了工作人员的难度性,提高了工作效率。
我们在现行系统初步调查的基础上提出了新系统目标,即新系统建立后所要求达到的运行指标,这是系统开发和评价的依据。
1.2可行性分析研究
1.2.1技术可行性
技术上的可行性分析主要分析现有技术条件能否顺利完成开发工作,硬、软件配置能否满足开发者需要等。
根据客户提出的系统功能、性能及实现系统的各项约束条件,根据新系统目标来衡量所需的技术是否具备,本系统是一个数据库管理和查询的系统,现有的技术以较为成熟,硬件、软件的性能要求、环境条件等各项条件良好,估计利用现有技术条件应完全可以达到该系统的功能目标。
同时,考虑给予的开发期限也较为充裕,预计系统是可以在规定期限内完成开发。
1.2.2经济可行性
主要是对开发学籍管理系统的高校资金进行评价,一方面是估算开发它的支出费用,其中包括设备购置费、软件开发费、管理和维护费、人员工资和培训费等。
另一方面是估算学籍管理系统这个软件可能取得的收益中可以用钱来衡量的那部分。
并对目前的软件市场进行调查,所做软件是否有很大的销售市场和相当规模的用户群。
所做软件的开发成本与客户提出的要求是否可达到双方都满意。
并且,分析系统开发是否会对其它产品或利润带来一定影响。
经过调查我们了解到,现在很多高校都在寻找功能更加齐全的管理系统来取代旧系统,而且这个软件带来的收益远远超过它的开发所花费的代价。
经过对上述几个方面的调查研究和分析,我们得出高校这个软件的市场前景是相当客观的,在经济角度来说,开发学生学籍管理是可行的。
1.2.3操作可行性
主要是了解高校学籍管理的相关人员对开发信息系统是否支持,现有高校学籍管理制度和方法是否科学,规章制度是否齐全,原始数据是否正确等。
高校学籍管理人员积极支持该系统开发,使新系统能够充分的发挥作用;系统界面友好美观,操作简单易行,易于理解,功能更加齐全。
由于管理人员已经在使用旧系统,对计算机的简单操作已经非常熟悉,所以操作者经过短时间的培训就可以使用高校学籍管理系统。
1.3结论意见
经过认真地全面地可行性研究,系统基本上做到了在技术、经济、运行、法律上的可行。
因此,相信在按照计划上实施的前提下,全系统的设计将会按时、高质量完成。
所以,系统研制和开发是可以马上进行的。
2、需求分析
2.1任务需求分析
经需求分析,所得本系统所实现的基本功能,如图1思维图所示:
图1学生学籍管理系统
上图为本系统所完成功能的一个基本信息图。
用户可通过本软件,对学生的在校情况信息有一个清晰的了解,帮助用户查询和修改学生的相关信息,从而对学生实现信息化的管理。
经分析先给出该系统的系统流程图,如图2所示:
该系统主要包括学生基本信息模块。
系统要实现基本信息录入、修改、删除、保存和查询等功能:
信息的输入,包括学生基本信息。
信息的修改、删除。
根据要求,查询符合条件的各类信息。
2.2数据流图
该系统数据流图如图3所示:
该系统数据流图如图3所示:
2.3实体联系E-R图
根据对数据流图和数据字典的分析,我们可以确定该应用中的实体,属性和实体之间的关系,并画出如下所示的E-R图。
图4学生实体图
3、概要设计
3.1总体结构设计
经需求分析,所得本系统所实现的基本功能,如图5思维图所示
洗
图5总体结构图
上图为本系统所完成功能的一个基本信息图。
用户可通过本软件,对学生的在校情况信息有一个清晰的了解,帮助用户查询和修改学生的相关信息,从而对学生实现信息化的管理。
3.2概要数据模型设计
本系统的实体有:
学生实体和专业实体。
学生实体具体的描述E-R图如图6所示
图6学生实体E-R图
专业实体具体描述如图7所示
图7专业实体E-R图
学生学籍管理系统的整体E-R图如图8所示
图8总体E-R图
4、详细设计
4.1系统的主要功能及实现
根据上面的需求分析,设计好数据库系统,然后开发前台应用程序。
所开发的前台界面要求用户可方便操作,同时很好的完成每一个窗口所实现的功能。
进入系统主页后,用户登录,登录成功选择角色,若是管理员,有学籍管理、课程管理。
学籍管理包括增加和删除以及修改学籍信息,课程管理具体包括增加、删除和修改课程信息。
接下来的操作有修改密码、查看个人信息、查看课程信息。
具体的学生学籍管理系统总体流程图。
如图9所示。
NY
图9总体流程图
用户登录后输入用户名和密码并选择角色,进入学生学籍管理系统。
具体流程图如图10所示
图10用户登录流程图
进入学生学籍管理系统后,若是管理员,则其有学籍管理或课程管理。
管理员权限具体流程图如图11所示。
图11管理员权限流程图
用户进入学生学籍管理系统后,若是学生登录,有修改密码,查看个人信息,查看课程信息等功能
图12学生权限流程图
5.项目编码
#include"stdio.h"
#include"conio.h"
#include"stdlib.h"
#include"string.h"
#defineN1000//N为可输入的学生总人数,可根据需要更改
#defineM2//M为宏定义的(在创建密码函数中)可建立的登陆用户个数,可更改
structstudent//定义学生信息结构体数组
{
charnum[9];//学号
charname[20];//姓名
chardepar[15];//院系
charzhuanye[15];//专业
charclasses[5];//班级
charage[3];//年龄
charsex[4];//性别
charnation[5];//民族
charbirth[9];//出生日期
charadd[10];//籍贯
};
structcode//定义密码结构体数组
{
charname[20];
charcode[7];
}co[M],s0;
//确认是否新创建密码文件模块
intcode()
{
FILE*fp;
if((fp=fopen("学生学籍管理系统__code.txt","rt"))==NULL)
{
printf("密码文件不存在,请输入新的用户名及密码:
\n");
//若不存在此密码文件,则提示用户创建密码
printf("请输入任意键继续!
");
getch();
system("cls");
return1;//无密码文件返回1
}
else
return0;//已有密码文件返回0
}
//新创建初始密码
voidcode_input()
{
FILE*fp;
inti;
if((fp=fopen("学生学籍管理系统__code.txt","wt"))==NULL);//当建立密码文件成功时,进入for循环
for(i=0;i{
printf("请录入第%d个用户名:
",i+1);//创建不同的用户名及密码
scanf("%s",co[i].name);
printf("请录入第%d个密码(最多6位):
",i+1);
scanf("%s",co[i].code);
printf("\n");
fwrite(&co[i],sizeof(structcode),1,fp);//将密码保存进文件中
}
fclose(fp);
getch();
system("cls");
}
//用户登陆验证模块
intenter(charname1[20],charcode1[6])
{
FILE*fp;
intflog=0;
inti;
fp=fopen("学生学籍管理系统__code.txt","rt");//打开存放密码的文件
for(i=0;i{
fread(&co[i],sizeof(structcode),1,fp);//读密码文件
if((strcmp(name1,co[i].name)==0))//如果输入的用户名与已存在用户名相同,再比较密码是否相同,否则进行下一个用户名的比较
{
if((strcmp(code1,co[i].code)==0))//比较此用户名下的密码是否一致
return1;//验证成功后回到主函数
}
}
if(i>=M)//当比较完成后,都没有符合条件的用户名与密码,则直接跳出程序
printf("******您无权进入此管理系统!
!
!
*****");
fclose(fp);
getch();
exit
(1);
}
//从文件读入数据
intread_file(structstudentstu[])
{
FILE*sp;
inti=0;
system("cls");
if((sp=fopen("学生学籍管理系统__学生信息.txt","rt"))==NULL)//读文件,若文件不存在,则需要创建一个新的文件(文件创建在save_file函数中完成)
{
printf("\n学生学籍管理系统__学生信息文件不存在,请创建!
\n");
getch();
system("cls");
return0;
}
while((fread(&stu[i],sizeof(structstudent),1,sp))==1)//判断文件是否处在结束位置
{
if(stu[i].num==0)//若文件内容为空,则跳出循环
break;
else//若文件内容不为空,i自加1。
i++;//i为文件内结构体数组的数量
}
fclose(sp);
returni;//返回i值,代表文件中学生的人数
}
//保存学生信息(保存在文件中)
voidsave_file(structstudentstu[],intsum)
{
FILE*sp;
inti;
if((sp=fopen("学生学籍管理系统__学生信息.txt","wb"))==NULL)//若不存在此TXT文档,则创建;
{
printf("读文件错误!
\n");//创建不成功,返回menu函数;
return;
}
for(i=0;iif(fwrite(&stu[i],sizeof(structstudent),1,sp)!
=1)//保存文件,sum为现有总学生人数,若未保存成功,提示"写文件错误!
";
printf("写文件错误!
\n");
fclose(sp);
return;
}
//创建并录入信息
intfound(structstudentstu[])
{
inti=0,x;
system("cls");
printf("请输入要录入的学生的个数:
\n");
scanf("%d",&x);
if(x==0)
return0;
do//输入信息
{
printf("\n请录入第%d个学生的信息:
\n",i+1);
printf("请录入学号:
");
scanf("%s",stu[i].num);
printf("\n请录入姓名:
");
scanf("%s",stu[i].name);
printf("\n请录入院系:
");
scanf("%s",stu[i].depar);
printf("\n请录入专业:
");
scanf("%s",stu[i].zhuanye);
printf("\n请录入班级:
");
scanf("%s",stu[i].classes);
printf("\n请录入性别:
");
scanf("%s",stu[i].sex);
printf("\n请录入年龄:
");
scanf("%s",stu[i].age);
printf("\n请录入出生日期(yyyymmdd):
");
scanf("%s",stu[i].birth);
printf("\n请录入民族:
");
scanf("%s",stu[i].nation);
printf("\n请录入籍贯:
");
scanf("%s",stu[i].add);
i++;
system("cls");
}while(i=x(用户要求创建学生的人数)时,跳出输入信息的for循环;
save_file(stu,x);//保存学生信息致文件
printf("录入完毕,请按任意键返回");
getch();
returni;//返回创建学生的人数
}
//修改学生信息
voidmodify(structstudentstu[],intsum)
{
inti,item,a=1;//i控制数组下标,item控制子菜单的选择
chars1[8];
FILE*sp;
system("cls");
read_file(stu,sum);//读函数
do
{
printf("\n\n\n请输入你要修改的学号:
\n");
scanf("%s",s1);//要修改的学生学号
for(i=0;i{
if(strcmp(stu[i].num,s1)==0)//若找到该生,输出该生的信息
{
printf("该学生学号:
%s\n",stu[i].num);
printf("该学生姓名:
%s\n",stu[i].name);
printf("该学生院系:
%s\n",stu[i].depar);
printf("该学生专业:
%s\n",stu[i].zhuanye);
printf("该学生班级:
%s\n",stu[i].classes);
printf("该学生性别:
%s\n",stu[i].sex);
printf("该学生年龄:
%s\n",stu[i].age);
printf("该学生出生日期:
%s\n",stu[i].birth);
printf("该学生民族:
%s\n",stu[i].nation);
printf("该学生籍贯:
%s\n",stu[i].add);
a=0;//找到该生,a=0;
break;//出for循环
}
}
if(a==1)//若没有找到该生,a=1,输出提示语句
printf("\n\n该学号不存在!
请重新输入学号:
\n");
}while(a);//当a=0,即没有找到该生,则继续循环重新输入学生学号
printf("\t****************\n");
printf("\t你选择你要修改的选项:
\n");
printf("\t1.*修改姓名\n");
printf("\t2.*修改年龄\n");
printf("\t3.*修改性别\n");
printf("\t4.*修改出生日期\n");
printf("\t5.*修改籍贯\n");
printf("\t6.*修改院系名称\n");
printf("\t7.*修改专业名称\n");
printf("\t8.*修改班级\n");
printf("\t9.*修改民族\n");
printf("\t0.*退出菜单\n");
printf("\t****************\n");
while
(1)
{
printf("\n\t请选择你要进行的操作:
");
scanf("%d",&item);///item控制子菜单的选择
switch(item)
{
case1:
//修改姓名
printf("\t请输入新的姓名:
");
scanf("%s",stu[i].name);
printf("\n\n\n修改成功!
\n");
save_file(stu,sum);
break;
case2:
//修改年龄
printf("\t请输入新的年龄:
");
scanf("%s",stu[i].age);
printf("\n\n\n修改成功!
\n");
save_file(stu,sum);
break;
case3:
//修改性别
printf("\t请输入新的性别:
");
scanf("%s",stu[i].sex);
printf("\n\n\n修改成功!
\n");
save_file(stu,sum);
break;
case4:
//修改出生日期
printf("\t请输入新的出生年月(yyyy.mm):
");
scanf("%s",stu[i].birth);
printf("\n\n\n修改成功!
\n");
save_file(stu,sum);
break;
case5:
//修改籍贯
printf("\t请输入新的籍贯:
");
scanf("%s",stu[i].add);
printf("\n\n\n修改成功!
\n");
save_file(stu,sum);
break;
case6:
//修改院系
printf("\t请输入新的院系:
");
scanf("%s",stu[i].depar);
printf("\n\n\n修改成功!
\n");
save_file(stu,sum);
break;
case7:
//修改专业
printf("\t请输入新的专业名称:
");
scanf("%s",stu[i].zhuanye);
printf("\n\n\n修改成功!
\n");
save_file(stu,sum);
break;
case8:
//修改班级
printf("\t请输入新的班级:
");
scanf("%s",stu[i].classes);
printf("\n\n\n修改成功!
\n");
save_file(stu,sum);
break;
case9:
//修改民族
printf("\t请输入新的民族名称:
");
scanf("%s",stu[i].nation);
printf("\n\n\n修改成功!
\n");
save_file(stu,sum);
break;
case0:
return;//不修改,退出
default:
printf("\t请在0到9之间选择:
");//若输入的值不在0~9,则提示
}
}
}
//查询学生信息
voidseek(structstudentstu[],intsum)
{
inti,item,flag;//i控制数组下标,item控制子菜单的选择,flag为判断条件
chars1[11];
system("cls");
while
(1)
{
system("cls");
printf("\n\n\t\t------------------\n");
printf("\t\t1.按学号查询\n");
printf("\t\t2.按姓名查询\n");
printf("\t\t3.退出本菜单\n");
printf("\t\t------------------\n");
printf("\t\t请选择子菜单编号:
");
scanf("%d",&item);//选择子菜单
flag=0;
switch(item)
{
case1:
//按学号进行查找
printf("\t\t请输入要查询的学生的学号:
");
scanf("%s",s1);
for(