学生成绩信息管理系统 课程设计2.docx

上传人:b****2 文档编号:25918630 上传时间:2023-06-16 格式:DOCX 页数:29 大小:131.08KB
下载 相关 举报
学生成绩信息管理系统 课程设计2.docx_第1页
第1页 / 共29页
学生成绩信息管理系统 课程设计2.docx_第2页
第2页 / 共29页
学生成绩信息管理系统 课程设计2.docx_第3页
第3页 / 共29页
学生成绩信息管理系统 课程设计2.docx_第4页
第4页 / 共29页
学生成绩信息管理系统 课程设计2.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

学生成绩信息管理系统 课程设计2.docx

《学生成绩信息管理系统 课程设计2.docx》由会员分享,可在线阅读,更多相关《学生成绩信息管理系统 课程设计2.docx(29页珍藏版)》请在冰豆网上搜索。

学生成绩信息管理系统 课程设计2.docx

学生成绩信息管理系统课程设计2

软件设计报告

 

题目:

学生成绩信息管理系统

院系名称

 电子信息工程学院

专业名称

 电子信息工程

班   级

 电子0902

班内序号

 

学生姓名

 

指导教师

时间

2010年6月7日至2010年6月18日

一、课程设计目的

1.熟悉C语言程序的编辑、编译链接和运行的过程,至少能够用一种编译器较熟练地编辑、编译及调试程序。

2.掌握C语言数据类型,如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。

3.熟练运用if语句和switch语句以及嵌套应用。

涉及循环调用的,了解并掌握三种控制语句while、do-while和for语句。

4.学习并掌握C语言定义函数的基本方法、声明函数及调用函数的方法和过程。

5.掌握文件和文件指针的概念以及文件的定义方法,认识文件打开、关闭、读、写等文件基本操作函数。

6.掌握结构体类型变量、数组的定义和使用。

7.了解指针和链表的概念,掌握指针的定义和使用指针变量的方法以及链表的正确用法。

灵活使用链表来储存学生信息。

8.掌握数组的定义、引用以及输入输出的方法、通过字符数组存储字符串,进一步使用字符串

二、课程设计内容简介

学生成绩管理主要功能:

(1)能按学期、按班级完成对学生成绩的录入、修改

(2)能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序

(3)能查询学生成绩,不及格科目及学生名单

(4)能按班级输出学生的成绩单

开发工具——VisualC++6.0

运行平台——WindowsXP

三、需求分析

系统功能:

(1)能按学期、按班级完成对学生成绩的录入、修改

(2)能按班级统计学生的成绩,求学生的总分及平均分。

(3)能根据学生的平均成绩进行排序

(4)能查询学生总成绩,平均分

(5)能按学号,姓名输出学生的成绩单

(6)可以保存到文件(附加功能)

(7)可以从文件读入已有的文件(附加功能)

(8)以菜单方式工作

性能描述:

各种功能都可以满足;程序相对较小,因而运行时反应比较迅速,不存在响应不及时地问题。

四、概要设计

1.学生成绩管理系统模块图:

2.程序可以满足以下功能:

1.各模块间通过菜单切换和调用

2.主函数通过调用菜单函数实现对各功能模块的调用,各功能模块间根据需要可相互调用。

3.程序能够保证各模块功能的独立和数据共享。

4.相近功能以级联菜单的形式集成。

五、详细设计

1.主要功能模块的流程图如下:

主函数

 

定义变量

输入

正确输入

密码

错误

进入界面

重新输入

sum=read_message();

Do循环(choice!

=0)

输入数字(0~5)进行选择

Case1

input_message();break;

Case2

output_message();break;

Case3

insert_message();break;

Case4

del_message();break;

Case5

sort_message();break;

Case6

revise_message();break;

Case7

read_message();break;

Case8

inqure_message();break;

Case9

save_messsage();break;

Case10

Count_message();break;

Case0

Break;

Clrscr();

save_message(sum);

添加信息:

定义变量

Clrscr();

Do循环(flag==1)

输入信息

choice=

'Y'||‘y’

getch();

else

Flag==1;

Flag==0;

查询模块:

定义变量

Clrscr();

循环(choice!

=0)

请选择要查询的序号:

1姓名;2学号

Case1

按姓名查询

Case2

按学号查询

输入

Choice==1||2

数字

Choice==0

继续循环

退出循环

输出模块:

 

定义变量

clrscr();

Do循环(s[i].num!

=0)

输出信息

i++;

修改模块:

 

定义变量

Do循环(flag==1)

clrscr();

输入数字(0~8)进行

Case1:

姓名

Case2:

英语

Case3:

数学

Case4:

计算机

Case0:

返回主菜单

重新求总成绩和平均分

choice=

'Y'||‘y’

getch();

else

flag=1;

flag=0;

排序模块:

 

定义变量

Do循环(choice!

=0)

clrscr();

输入数字(0~6)进行

Case1:

sort_math();break;

case2:

sort_english();break;

Case3:

_computer();break;

Case0:

break;

 

保存模块

 

定义变量

(fp=fopen(“student_list.txt”

“wb”))==NULL

输出文件错误;

return0;

For循环

 

if(fwrite(&s[i],sizeof

(structs_type),1,fp)!

=1)

写文件错误

 

读取模块

 

定义变量

if((fp=fopen("student_list.txt"

"rb"))==NULL)

输出文件错误;return

while循环while(feof(fp)!

=1)

if(s[i].num==0)

break;

elsei++;

fclose(fp);

2.主要函数说明:

mangercode_message()

类型void

密码模块只有密码正确才可打开,以便使用者保护所存储的信息。

read_message()

类型void

读取模块可以将所处出的信息读取出来,方便使用。

save_message()

类型void

保存模块可将所输入的信息以文件形式保存起来,具体输入信息会以txt格式保存。

input_message()

类型void

录入模块以键盘形式输入学生的成绩信息。

output_message()

类型void

浏览模块将所输入的学生信息打印输出,出现在显示器上。

inqure_message()

类型void

查询模块可按学生学号和学生姓名查询学生成绩

insert_message()

类型void

添加模块可随时添加一名学生信息。

del_message()

类型void

删除模块可按学号删除其中一名学生的所有成绩信息。

sort_message()

类型void

排序模块可将录入的学生成绩信息按平均分由大到小排序。

revise_message()

类型void

修改模块可读学生的姓名学号及各科成绩进行修改。

count_message()

类型void

统计模块将学生的所有成绩相加,并按总成绩排名。

manger_message()

类型void

管理模块显示该程序的主菜单。

六、调试与测试

1总体过程

编译和调试工具:

选择VisualC++6.0,该工具稳定,其中有一个强大的调试工具,我比较熟悉。

2遇到的问题

在两周的时间里,不断地对程序及各模块进行修改、编译、调试,其间遇到很多问题,这里只选几个有代表性的具体讨论。

(1)调试“创建”模块时,遇到如下的一段程序:

运行中,当输入错误的成绩时,程序可能会进入死循环。

据分析,程序本身并没有错误,但由于涉及指针的操作,所以在运行中出现了未知的错误。

开始时怀疑是程序代码的缺陷,但经过反反复复的分析和调试后确定了原因,……。

通过这一问题的深入研究,使我对C语言的特性有了进一步的了解。

(2)借用了老师所给例子中的一个创建链表函数,与习惯不同的是,该函数是从尾到头来建立的。

与顺序建立的链表相比,在实际运行中并没有多大区别,但不失为一种创新的思路,值得我们学习。

(3)测试用例具有一定的广泛性。

创建链表时输入了不同班级、学期的成绩,而且及格与不及格交叉输入,经过多番调试,运行结果也符合预期。

说明程序具有一定的可靠性和稳定性。

七、出现错误

C:

\DocumentsandSettings\XY\桌面\myprj\3.c(24):

errorC2065:

'student':

undeclaredidentifier

Errorexecutingcl.exe.未声明的标志

c:

\documentsandsettings\xy\桌面\myprj\15.c(36):

warningC4013:

'getch'undefined;assumingexternreturningint‘getch’未定义,假定一个虚伪指令返回整型

c:

\documentsandsettings\xy\桌面\myprj\15.c(50):

fatalerrorC1004:

unexpectedendoffilefound期待的结尾未建立

c:

\documentsandsettings\xy\桌面\myprj\2.c(32):

errorC2143:

syntaxerror:

missing';'before'}'

errorC2447:

missingfunctionheader(old-styleformallist?

)‘}’前缺少‘;’

warningC4060:

switchstatementcontainsno'case'or'default'labelsswitch指令没有包含case和default符号

errorC2043:

illegalbreak非法的‘break’

expectedconstantexpression预期的常量表达式

cannotallocateanarrayofconstantsize0不能分配一个数组的常量0的大小

八、参考文献:

1.王曙燕主编,C语言程序设计,科学出版社,2005年

2.谭浩强,《C程序设计》,清华大学出版社2002年

#include

#include

#include

#include

#defineN10

#defineCODE321

intsum;

voidmangercode_message()/*密码模块*/

{intm;

voidmanger_message();

printf("\n*****请输入一个密码*****\n");

scanf("%d",&m);

switch(m)

{

case321:

printf("\n进入下一菜单\n\n");

manger_message();

default:

printf("\n你不能进入\n");break;

}

printf("\n按任意键返回主菜单\n");

}

structstu_type

{

intnumber;

charname[20];

intmath;

intenglish;

intcomputer;

intscore;

intaverage;

}stu[N];

intread_message()

{

FILE*fp;

inti;

fp=fopen("d:

\\studentscore.txt","rt");

if(fp==NULL)

{

printf("无学生信息,不能读\n");

}

else

{

i=0;

for(;;)

{

if((fread(&stu[i],sizeof(structstu_type),1,fp))!

=1)break;

i++;

}

returni;

fclose(fp);

}

}

voidsave_message()/*保存模块*/

{FILE*fp;

inti;

fp=fopen("d:

\\studentscore.txt","wt+");

if(fp==NULL)

{

printf("不能读\n");

}

for(i=0;i<=sum;i++)

{

fwrite(&stu[i],sizeof(structstu_type),1,fp);

}

fclose(fp);

}

intinput_message()/*录入模块*/

{

inti=0,choice;

do

{

printf("\n\n第%d个学生",i+1);

printf("\n\n学号:

");

scanf("%d",&stu[i].number);

printf("\n\n姓名:

");

getchar();

scanf("%s",stu[i].name);

printf("\n\n数学");

scanf("%d",&stu[i].math);

printf("\n\n英语");

scanf("%d",&stu[i].english);

printf("\n\n计算机");

scanf("%d",&stu[i].computer);

stu[i].score=stu[i].math+stu[i].english+stu[i].computer;

stu[i].average=stu[i].score/3;

printf("\n\n总成绩为:

%d",stu[i].score);

printf("\n\n平均分为:

%d",stu[i].average);

i++;

sum=i;

printf("\n\n是否继续?

(1.是2.否)");

scanf("%d",&choice);

if(choice==1)

printf("\n继续!

");

elsebreak;

}while(choice==1);

printf("\n学生成绩完毕");

printf("\n\n按任意键返回主菜单!

");

getch();

return(--i);

system("cls");

}

voidoutput_message(inti)/*浏览模块*/

{

intj;

printf("\n\n学生成绩表\n");

printf("\n*****************************************************************");

printf("\n\n学号姓名数学英语计算机总成绩平均分");

printf("\n\n-----------------------------------------------------------------");

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

{

printf("\n\n%d%s%d%d%d%d%d",stu[j].number,stu[j].name,stu[j].math,stu[j].english,stu[j].computer,stu[j].score,stu[j].average);

printf("\n\n");

}

printf("\n*****************************************************************\n");

printf("按任意键返回主菜单!

");

getch();

system("cls");

}

voidinqure_num()/*查询模块*/

{

inti,j=0,inqure_num;

printf("\n输入学生学号:

");

scanf("%d",&inqure_num);

for(i=0;i

{

if(stu[i].number==inqure_num)

{

printf("\n该学生信息\n");

printf("\n\n-------------------------------------------------------------------------\n");

printf("\n\n学号--姓名--数学--英语--计算机--总成绩--平均分\n\n");

printf("%3d%8s%5d%7d%8d%10d%14d",stu[i].number,stu[i].name,stu[i].math,stu[i].english,stu[i].computer,stu[i].score,stu[i].average);

printf("\n\n--------------------------------------------------------------------------\n");

}

elsej++;

if(j==N)

printf("\n这个学生不存在!

");

}

printf("\n\n按任意键返回主菜单!

");

getch();

system("cls");

}

voidinqure_name()

{

inti,j=0;

charinqure_name[20];

printf("\n输入学生姓名:

");

scanf("%s",inqure_name);

for(i=0;i

{

if(strcmp(stu[i].name,inqure_name)==0)

{

printf("\n该学生信息\n");

printf("\n\n-------------------------------------------------------------------------\n");

printf("\n\n学号--姓名--数学--英语--计算机--总成绩--平均分\n\n");

printf("%3d%8s%5d%7d%8d%10d%14d",stu[i].number,stu[i].name,stu[i].math,stu[i].english,stu[i].computer,stu[i].score,stu[i].average);

printf("\n\n--------------------------------------------------------------------------\n");

}

elsej++;

if(j==N)

printf("\n这个学生不存在!

");

}

printf("\n\n按任意键返回主菜单!

");

getch();

system("cls");

}

voidinqure_message()

{intchoice;

do

{printf("1.按学号查询\n\n");

printf("2.按姓名查询\n\n");

printf("0.退出\n\n");

scanf("%d",&choice);

switch(choice)

{

case1:

inqure_num();break;

case2:

inqure_name();break;

case0:

break;

}

}while(choice!

=0);

}

intinsert_message(inti)/*添加模块*/

{

intchoice;

charflag;

printf("\n\n增加一个学生信息!

");

printf("\n**********************************************************");

do

{i++;

stu[i].number=sum+1;

printf("\n\n新学生的学号");

scanf("%d",&stu[i].number);

printf("\n\n新学生的姓名");

getchar();

scanf("%s",&stu[i].name);

printf("\n\n数学成绩");

scanf("%d",&stu[i].math);

printf("\n\n英语成绩");

scanf("%d",&stu[i].english);

printf("\n\n计算机成绩");

scanf("%d",&stu[i].computer);

stu[i].score=stu[i].math+stu[i].computer+stu[i].english;

stu[i].average=stu[i].score/3;

printf("\n\n总成绩%d",stu[i].score);

printf("\n\n平均分%d",stu[i].average);

sum=i;

printf("\n\n是否继续?

(1.是2.否)");

scanf("%d",&choice);

if(choice==1)

{

printf("\n继续");

flag=1;

}

elseflag=0;

}while(flag==1);

printf("\n按任意键返回主菜单!

");

returni;

system("cls");

}

voiddel_message()/*删除模块*/

{

inti=0,j,choice,del_num;

do

{

printf("\n输入要删除的学号");

scanf("%d",&del_num);

for(i=0;i

{if(stu[i].number==del_num)

{

printf("\n\n删除他的信息");

for(j=i;j

{stu[j]=stu[j+1];

}

printf("\n\n删除他的信息:

\n");

printf("\n\n学号姓名数学英语计算机总成绩平均分");

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 书信模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1