安徽工业大学计算机学院程序设计综合实习报告.docx
《安徽工业大学计算机学院程序设计综合实习报告.docx》由会员分享,可在线阅读,更多相关《安徽工业大学计算机学院程序设计综合实习报告.docx(28页珍藏版)》请在冰豆网上搜索。
安徽工业大学计算机学院程序设计综合实习报告
安徽工业大学计算机学院程序设计综合实习报告
题目:
现代教学管理系统
姓名:
刘忻
学号:
8
学院:
计算机学院
班级:
软件123班
指导老师:
王森玉
完成日期:
2013/5/22
题目:
现代化成绩管理系统
课程设计内容简介:
高校中对于学生的考核主要通过考试来进行,传统不通过计算机网络发放考试的成绩容易出现发错,漏发等问题,使用计算机来解决这个问题是十分必要的。
程序可以在登陆时选择登陆身份,并给予不同权限对成绩系统进行访问,以达到教师可修改,可查询,可记录;学生可查询的目的。
设计者名称:
刘忻
指导教师意见:
指导教师签名:
一、
问题定义:
现代化的校园对学生进行考核的主要方式是通过考试,而传统的发布成绩方式存在着不同的问题,通过计算机网络可对这些问题进行解决,包括登陆时选择登陆身份,并给予不同权限对成绩系统进行访问,以达到教师可修改,可查询,可记录;学生可查询的目的。
二、可行性研究:
I、项目的由来:
某高校教师需要对学生的成绩进行管理,包括学生信息的录入,学生成绩的录入,成绩的修改以及学生的成绩查询并保存。
学生需要对成绩进行查询。
II、可选方案:
一、可选用人工进行学生的基本信息的管理,进行平时成绩,期末成绩以及总评成绩的计算,再人工将成绩发放到学生的手中。
二、可选用直接从文件进行成绩的导入,直接得到学生的基本信息及考试成绩、总评成绩,或者通过人手工录入学生的基本信息及考试成绩、总评成绩。
学生也可对其进行查找。
III、可行性:
1、技术可行性:
学校每一门学科的考试人数都很多,若每场考试的成绩都需要老师人工计算并发布成绩,任务量大且出错率高。
使用计算机自动计算学生考试成绩的方式大大降低了出错率,而且使用计算机省时省力,方便进行成绩的管理及查询。
2、经济可行性:
利用计算机技术,开发学生成绩管理系统,可以重复使用,对学生的管理很有用,有必要开发。
3、操作可行性:
操作计算机简单易行,并且不需要花费太多的人力。
4、法律可行性:
开发学生成绩管理系统有利于学校对学生的管理,不违反法律及相关法规。
IV、结论:
面对高校学生成绩管理的巨大工作量,采用计算机的管理是极其必要的,若采用方案2的方法不单单可以减少很多的人力使用,使教师的工作量得到大量减少,而且出现错误的机率更低,更能够直接对学生的成绩进行管理,方便教师和学生的成绩的查询。
三、需求规格说明
I、目标:
II、数据需求:
1、数据量:
教师的登陆账户及密码,学生学号,姓名,平时成绩,期末成绩,总评成绩。
2、数据定义和结构
:
教师的登陆用=teacher,密码=0000;
:
学号=学生在校自动分配的学号;
平时成绩=教师给学生所打的平时分数;
期末成绩=学生期末考试的成绩;
总评成绩=平时成绩×平时成绩所占的比例+期末成绩×期末成绩所占的比例;
III、功能需求:
性能:
能快速响应,界面颜色多元化,清晰,数据对应整齐。
在使用过程中容易操作,错误操作的次数少。
功能:
(IPO)
四、总体设计:
I、软件的结构(HIPO图):
五、各模块详细设计
I、编译预处理模块
II、主函数模块
III、browse()函数模块
IV、insert()函数模块
V、deletel()函数模块
VI、scorein()函数模块
VII、change()函数模块
VIII、load()函数模块
IX、save()函数模块
X、mima()函数模块
六、程序源代码
#include<>
#include<>
#include<>
#include<>
#include<>
typedefstructst
{
charnum[10],name[9],bclass[11];....!
");
getchar();
}
}
if(choice1==2)....!
");
getchar();
}
}
if(choice1==3)
printf("Goodbay!
");
exit(0);
}
师入口\n2.学生入口\n3.退出系统\n请选择:
");
scanf("%d",&choice);
fflush(stdin);
returnchoice;
}
charmenu1()览成绩情况\n");
printf("2.插入成绩学生\n");
printf("3.查询成绩学生\n");
printf("4.删除学生记录\n");
printf("5.学生成绩录入\n");
printf("6.修改学生记录\n");
printf("7.将文件中成绩情况导入到链表\n");
printf("8.将链表中成绩情况导出到文件\n");
printf("9.系统初始化\n");
printf("0.返回上一级\n");
printf("\n\n请选择。
。
。
。
。
。
。
\n\n\n\n");
c=getchar();getchar();
returnc;
}
charmenu2()览成绩情况\n");
printf("2.查询学生成绩\n");
printf("3.返回上一级\n");
printf("\n\n请选择。
。
。
。
。
。
。
\n\n\n\n");
c=getchar();getchar();
returnc;
}
voidbrowse(stud*head)
{
姓名查找0.按学号查找\n");
scanf("%d",&xz);
getchar();
if(xz)
{
printf("请输入学生姓名:
\n");
gets(xm);学号删除2.按姓名删除3.按序号删除\n");
scanf("%d",&xz);
switch(xz)
{
case1:
printf("请输入学生学号:
\n");
getchar();
gets(xh);改学号\n");
printf("2.修改姓名\n");
printf("3.修改班级\n");
printf("4.修改平时成绩\n");
printf("5.修改期末成绩\n");
printf("0.不修改\n");
scanf("%d",&xz);getchar();
switch(xz)
{
case1:
printf("请重新输入学号:
");gets(p->num);break;
case2:
printf("请重新输入姓名:
");gets(p->name);break;
case3:
printf("请重新输入班级:
");gets(p->bclass);break;
case4:
x=p->score1/p->score;y=1-x;//计算平时和期末在总评成绩中所占比例
printf("请重新输入平时成绩:
");
p->score=x*p->score1+y*p->score2;//重新计算总评成绩
break;
}
printf("%2d%10s%8s%10s",i,p->num,p->name,p->bclass);
printf("%%%",p->score1,p->score2,p->score);
}
//****************************************
stud*load()//从文件中将成绩情况导入到链表
{
FILE*fp;
charfn[12];
stud*head,*p,*q;
puts("从哪个文件中将成绩情况导入:
");gets(fn);
if((fp=fopen(fn,"rb"))==NULL)
{
printf("can'topenfile");exit(0);
}
q=head=(stud*)malloc(sizeof(stud));
q->next=NULL;
while(!
feof(fp))
{
p=(stud*)malloc(sizeof(stud));
if(fread(p,sizeof(stud),1,fp)==1)
{
p->next=q->next;
q->next=p;q=p;
}
}
fclose(fp);
returnhead;
}
//********************************
voidsave(stud*head)//将链表中成绩情况保存到文件
{
FILE*fp;
charfn[12];
stud*p;
puts("将成绩情况导出到哪个文件中:
");gets(fn);
p=head->next;
if((fp=fopen(fn,"wb"))==NULL)
{
printf("can'topenfile");exit(0);
}
while(p!
=NULL)
{
if(fwrite(p,sizeof(stud),1,fp)!
=1)
{
printf("filewriteerror!
\n");break;
}
p=p->next;
}
fclose(fp);
}
voidmima()
{//密码函数
registerinti,n;
charname[8]="teacher",password[5]="0000";//设定初始密码为teacher密码是0000
charname1[21],password1[21];
intflag1,flag2;
system("cls");
printf("********************************************************\n");
printf("*******************欢迎进入登录系统*********************\n");
printf("********************************************************\n");
for(n=0;n!
=5;)
{
printf("请输入用户名:
\n");
gets(name1);
flag1=strcmp(name1,name);
printf("请输入密码:
\n");
for(i=0;i<20;)
{
*(password1+i)=getch();
if(*(password1+i)=='\b')
{
if(i>0)
{
i--;
printf("\b");
printf("\b");
}
continue;
}
if(*(password1+i)=='\r')
break;
i++;
printf("*");//输出*号
}
*(password1+i)='\0';
flag2=strcmp(password,password1);
if(flag1==0&&flag2==0)
{
printf("\n登录成功!
");
break;
}
else
{
n++;
printf("\n用户名或密码错误!
你还有%d次机会\n",5-n);
}
if(n==5)
{
printf("您被强制退出\n");//若输入错误5次,被强制退出
exit
(1);
}
}
}
七、程序测试
I、测试抓图:
II、测试内容:
八、总结
I、项目评价:
本项目主要对学生的考试成绩进行了简单的管理,能够很好的运用于高等学校的管理成绩中。
从项目的内容来讲内容较为简单,项目基本上没有涉及到较复杂的算法运算,仅仅使用链表进行数据的存取,所以采用普通技术工程师即可以完成任务,由测试人员测试并进行分析即可完成使用,质量上也能得到保证,使得高等学校教师能够更好的使用。
操作上简单明了,根据提示输入即可,然后进行计算机操作。
II、不足之处:
项目仅仅能够实现对一门成绩进行管理,不能实现多门成绩的管理。
由于知识积累程度的问题,仅仅能够将数据保存于链表及文件中,但是对于大量数据,若内存不够就会造成数据溢出,使用数据库能够有效解决。
成绩的上下限制没有,可能有成绩输入错误(超过100或为负数)。
III、心得体会
通过此次项目中深刻了解到软件的开发是一项工程性质的工作,软件的开发并不是简单的编写代码,而是融入了工程的思想。
也让我认识到了代码的编写并不是软件开发过程中最重要的部分,前期的规划则起着至关重要的作用。
软件的测试也是极为重要的。
在2000左右的时候,通过一个调查,即使是在软件工程最发达的美国,程序中的错误仍然是无法避免的,平均每1000行代码就有处错误,所以软件的测试也在程序的开发中占有极其重要的地位。
错误越少,后期交付使用造成的损失也就越少,开发的软件效益就越高。
一款好的软件都是通过不断的修改才能得到,细细的修改,软件的开发过程每一个都十分重要。