学生管理系统课程设计5文档格式.docx
《学生管理系统课程设计5文档格式.docx》由会员分享,可在线阅读,更多相关《学生管理系统课程设计5文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
三、需求分析
1、录入信息:
通过输入学号、姓名、高数成绩、英语成绩、C语言成绩、平均成绩、总成绩
实现信息的录入功能,并计算出总分。
2、输出功能:
显示输入的内容。
3、更新功能:
增加、修改、删除、查询一条或多条信息。
4、条件查询功能:
用户可选择不同的查询方式,如按学号、按姓名进行相应信息的查询。
5、统计功能:
统计各科及格人数。
6、排序功能:
按学生平均成绩进行排序。
四、概要设计
1.系统结构图(功能模块图)和数据变量说明
对系统进行分析,给出系统总体结构。
五、详细设计及运行结果
流程图,函数之间相互调用的图示,程序设计及编码,运行结果
真
假
六、调试情况,设计技巧及体会
1、对自己设计进行评价,指出合理和不足之处,提出改进的方案。
本程序基本符合本次实验的基本要求,实现了数据的录入、存储、读写、修改、删除、查询、统计、排序及输出等功能。
本程序的主程序中设有主菜单,主菜单中包括输入信息模块、输出信息模块、修改信息模块、添加信息模块、删除信息模块、信息查询模块及总成绩排行模块,其中查询选项之中可选择按学号查询和按姓名查询两种方式,输出模块能准确快速的将学生信息打印出来本程序运行时简洁明了,恰当的提示语句给程序应运带来了许多便利。
我学会了简单的设置一个密码。
..
不足之处:
使用结构体数组进行编程,不能实现按学号大小进行插入学生成绩信息,这一点会在今后的编写程序过程中加以注意,这一点可以使用链表方法进行插入,不能很好的使用指针和文件,在以后的编程中要逐渐学会使用文件和指针变量,链表。
2、在设计过程中的感受
通过此次实验,我基本掌握了如何对一个大的实际程序进行整体的安排
布局,以及如何将各个函数模块之间联系起来从而实现函数的调用,在此同时也熟悉了C语言的运行环境及程序编辑,编译,链接和运行过程,掌握了C语言的程序书写格式和C语言程序结构语句的使用,特别是if,switch,do-while和for语句,掌握了C语言数据类型,运算符,表达式等的使用方法,掌握了数组,结构体,指针,等的简单应用,培养了独立完成某个大程序的能力以及独立思考解决问题的能力,收获颇丰,还有在刚开始的总体构思完成后,对各个功能实现的过程中可以用小模块进行操作,比如,输入数据,输出数据,保存数据等..在一个个小模块中调试,最后各个小模块都完成后,在将所有的模块都放到一起进行调试,这样可以避免一些错误和弯路,且能快速的完成系统对各功能的要求。
七、参考文献
《C语言程序设计》作者:
王曙燕
八、附录:
源代码
/*学生管理系统*/
#include<
stdio.h>
/*编译预处理-文件包含(标准输入/输出函数)*/
stdlib.h>
/*编译预处理-文件包含(常用函数)*/
string.h>
/*编译预处理-文件包含(字符串处理函数)*/
typedefstructStudent
{charID[10];
/*学生学号*/
charname[20];
/*学生姓名*/
floatscore1;
/*高数成绩*/
floatscore2;
/*英语成绩*/
floatscore3;
/*C语言成绩*/
floataverage;
/*平均成绩*/
floatsum;
/*总成绩*/
inttongji;
}stu;
stustudents[100];
intnum=0;
floatAvg(stustu)/*求平均成绩*/
{
return(stu.score1+stu.score2+stu.score3)/3;
}
floatSum(stustu)/*求总成绩*/
return(stu.score1+stu.score2+stu.score3);
intSearchByIndex(charid[10])/*按学号查询*/
{inti;
for(i=0;
i<
num;
i++)/*从第一个学生信息起查找与输入要查询学号相同的学号*/
{
if(strcmp(students[i].ID,id)==0)/*字符串比较函数*/
{
returni;
}
return-1;
intSearchByname(charname[20])/*按姓名查询*/
{
inti;
i++)
if(strcmp(students[i].name,name)==0)/*字符串比较函数*/
{
returni;
}
voidDisplaySingle(intindex)/*显示单个学生*/
{printf("
%10s%10s%8s%8s%8s%10s%10s\n"
"
学号"
姓名"
数学"
语文"
C语言"
平均成绩"
总分"
);
printf("
---------------------------------------------------------------------------\n"
%10s%10s%8.2f%8.2f%8.2f%10.2f%10.2f\n"
students[index].ID,students[index].name,students[index].score1,students[index].score2,students[index].score3,students[index].average,students[index].sum);
voidInsert()/*插入信息*/
while
(1)
{printf("
请输入学号:
"
scanf("
%s"
&
students[num].ID);
请输入姓名:
students[num].name);
请输入成绩:
%f"
students[num].score1);
students[num].score2);
students[num].score3);
getchar();
students[num].average=Avg(students[num]);
students[num].sum=Sum(students[num]);
num++;
是否继续?
(y/n)"
if(getchar()=='
n'
)
break;
voidCorrect()/*修改学生信息*/
{charid[20];
intindex;
请输入要修改的学生的学号:
id);
index=SearchByIndex(id);
if(index==-1)
printf("
学生不存在!
\n"
else
你要修改的学生信息为:
DisplaySingle(index);
--请输入新值--\n"
students[index].ID);
students[index].name);
students[index].score1);
students[index].score2);
students[index].score3);
students[index].average=Avg(students[index]);
students[index].sum=Sum(students[index]);
{break;
voidDelete()/*删除学生信息*/
{inti;
while
(1)
请输入要删除的学生的学号:
你要删除的学生信息为:
是否真的要删除?
y'
for(i=index;
num-1;
{
students[i]=students[i+1];
num--;
voidSelectByName()/*按姓名查询*/
{charname[20];
请输入要查询的学生的姓名:
name);
index=SearchByname(name);
你要查询的学生信息为:
DisplaySingle(index);
SelectByIndex()/*按学号查询*/
请输入要查询的学生的学号:
id);
if(index==-1)
\n按任意键进入主菜单!
return0;
voidshuru()/*输入信息*/
voidSort()/*按平均成绩排序(冒泡法)*/
{inti,j;
stut;
for(i=1;
for(j=1;
j<
=num-i;
j++)
if(students[i].average>
students[j].average)
{t=students[i];
students[i]=students[j];
students[j]=t;
voidDisplay()
-------------------------------------------------------------\n"
students[i].ID,students[i].name,students[i].score1,students[i].score2,students[i].score3,students[i].average,students[i].sum);
voidRead()/*读取信息*/
FILE*fp;
/*定义文件指针*/
inti=0;
if((fp=fopen("
e:
\\xueshengguanli.txt"
rb"
))==NULL)
不能打开文件!
return;
while((fread(&
students[i],sizeof(stu),1,fp))==1)
i++;
}
fclose(fp);
voidWrite()/*写入信息*/
wb"
if(fwrite(&
students[i],sizeof(stu),1,fp)!
=1)
写入文件错误!
return;
voidtongji()
inti,k=0,q=0,j=0;
for(i=0;
i++)
{if(students[i].score1>
60)
k++;
高数及格人数为%d"
k);
{if(students[i].score2>
j++;
英语及格人数为%d"
j);
{if(students[i].score3>
q++;
c语言及格人数为%d"
q);
}
voidmain()
{intchoice,i,m,n;
m=1216;
for(i=1;
3;
\n请输入密码:
%d"
n);
if(m==n)
请进入系统"
{printf("
不能进入系统"
}
Read();
do
\n------学生成绩管理系统------\n"
1.显示全部记录\n"
2.增加学生记录\n"
3.修改学生记录\n"
4.删除学生记录\n"
5.按姓名查询学生记录\n"
6.按学号查询学生记录\n"
7.按平均成绩排序\n"
8.输入成绩\n"
9.统计\n"
10.退出\n"
请选择(1-10):
choice);
//getchar();
switch(choice)
{case1:
Display();
break;
case2:
Insert();
case3:
Correct();
case4:
Delete();
case5:
SelectByName();
case6:
SelectByIndex();
case7:
Sort();
case8:
shuru();
case9:
tongji();
case10:
break;
}while(choice!
=10);
Write();