C语言课程设计报告学生信息管理系统Word格式.docx
《C语言课程设计报告学生信息管理系统Word格式.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告学生信息管理系统Word格式.docx(50页珍藏版)》请在冰豆网上搜索。
(2)学生信息的修改。
(3)学生信息的浏览
B、学生数据处理:
(1)学生考试数据输入并计算平均分及名次
(2)学生测评数据输入并计算综合测评总分及名次
(3)学生数据的修。
(4)学生数据的查询
C、学生综合信息显示
系统的总体结构
(1)程序主界面的设计
主界面
图系统主界面结构图
(2)学生信息处理子界面设计
图系统子界面结构图1
图系统子界面结构图2
1、学生信息处理
(1)录入学生信息、学号、姓名、性别、家庭住址、联系电话,按学号以小到大的顺序存入文件中。
学生信息可先输入到数组中,排序后可写到文件中。
(2)修改同学信息。
2、学生数据处理:
(1)考试成绩录入及处理:
考试成绩=(语文+数学+外语)/3计算考试成绩,并计算考试名次,提示:
先把学生信息读入数组,然后按提示输入每科成绩,计算考试成绩,求出名次,最后把学生记录写入一个文件中。
(2)测评成绩录入及处理:
综合测评总分=(考试成绩)*+(同学互评分)*+品德成绩*+任课老师评分*。
(3)学生数据修改:
输入学号,读出并显示该同学信息,输入新数据,将改后信息写入文件
(4)学生数据查询:
输入学号,即读出所有数据信息,并显示出来。
3、查询学生综合信息
输入学号即读出综合信息,并显示出来
系统软硬件环境
本程序所适用的计算机系统软硬件环境要求为:
硬件环境:
PentiumIII500以上内存:
256M
软件环境:
Windows7
数据结构设计
学生信息数据结构类型如下:
structstudent
{
intnum;
/*学号*/
charname[20];
/*学生姓名*/
charsex[10];
/*性别男/女*/
charhome[200];
/*家庭住址*/
ints1;
/*语文成绩*/
ints2;
/*数学成绩*/
ints3;
/*英语成绩*/
intave;
/*三科平均成绩*/
intTel;
/*联系方式*/
intm1;
/*考试名次*/
inta1;
/*同学互评分*/
inta2;
/*品德成绩*/
inta3;
/*任课教师评分*/
intz;
/*综合测评总分*/
intm2;
/*综合测评名次*/
}stu[N];
4系统的详细设计
根据系统总体结构对问题进行的模块划分,对总的问题可划分为:
学生信息处理、学生数据处理、学生综合信息查询三个大模块,另还设置了用户帮助函数及退出系统。
首先在主函数中调用了voidone()函数来显示主菜单,主菜单中调用子菜单也就是学生信息处理、学生数据处理的菜单。
学生信息处理用voidinfo()来显示子菜单1,子菜单1中调用了voidinfo_1();
voidinfo_2()。
两个函数来实现学生信息的录入和修改。
学生数据处理用voiddata()来显示子菜2,子菜单2中调用了voiddata_2;
voiddata_1;
voiddata_3;
voiddata_4等函数来实现数据的录入修改及查询。
还使用了voidsort_num(structstudenta[],intn);
voidsort_ave(structstudenta[],intn);
voidsort_z(structstudenta[],intn);
三个排序函数来处理学生的数据
在最后的学生综合信息查询中使用的是voidlook()来实现其功能
在用户指南中使用了voidhelp()函数来实现其功能
以上就是此系统中使用的函数来实现其功能。
主菜单voidone()
1.系统流程
该函数主要用来显示主菜单的内容以及进入子菜单实现功能,该函数实现过程中首先定义了一个变量opt1,这是用户选择进入那个模块的选项。
首先判断opt1的值,如果为1则调用voidinfo()进入信息管理模块,如果为2则调用voiddata()进入数据管理模块,如果为3则调用voidlook()进入学生综合信息查询功
,如果为4则调用voidhelp()进入用户指南函数查看,如果为5则退出系统。
如果用户没有输入12345中的选项,则会提示输入错误请重新输入。
2.代码实现
voidone()/*主菜单函数*/
{
intopt1;
/*主菜单选项*/
printf("
欢迎使用学生综合测评系统\n\n"
);
printf("
1:
学生信息处理2:
学生数据处理\n\n3:
学生综合信息"
4:
用户使用指南\n\n"
5:
退出\n\n"
请输入12345中的任意一个选项进行操作:
"
loop:
scanf("
%d"
&
opt1);
switch(opt1)
case1:
info();
break;
case2:
data();
break;
case3:
look();
case4:
help();
case5:
default:
printf("
输入错误,请重新输入12345中的一项"
scanf("
gotoloop;
}
}
子菜单1voidinfo()
该函数主要用来显示子菜单1的内容以及进入功能实现函数,该函数实现过程中首先定义了一个变量opt2,这是用户选择进入那个功能的选项。
首先判断opt2的值,如果为1则调用voidinfo_1()进入学生信息录入功能,如果为2则调用voidinfo_2()进入学生信息修改功能,如果为3则调用voidone()返回到主菜单。
如果用户没有输入123中的选项,则会提示输入错误请重新输入。
voidinfo()/*信息处理函数*/
intopt2;
/*子菜单选项*/
\n\n欢迎进入信息处理\n\n"
1.学生信息录入\n\n2.学生信息的修改\n\n"
3.返回\n\n"
请输入123中的任意一个选项进行操作"
opt2);
switch(opt2)
info_1();
info_2();
one();
{printf("
输入错误,请重新输入123中的一项"
gotoloop;
学生信息录入voidinfo_1()
该函数运行后,首先打开文件,然后判断文件是否为空。
如果为空设置一个变量count来记录录入学生的数目。
如果不为空,则从文件中读取count的值。
然后开始录入学生信息,设置变量输入s,用switch语句来决定是否录入或退出。
输入1录入0退出2返回上一层。
在1中用goto语句实现循环录入到数组中。
在2中调用voidone().最后将学生信息的数组和count写入文件,然后关闭文件。
voidinfo_1()/*信息录入函数*/
FILE*fp;
ints,i,count;
count=0;
i=1;
if((fp=fopen("
stu"
"
rb+"
))==NULL)
if((fp=fopen("
wb"
Con'
topenfile\n"
exit
(1);
stu[0].num=0;
else
fclose(fp);
ab+"
exit
(1);
fread(stu,sizeof(structstudent),N,fp);
fscanf(fp,"
&
stu[0].num);
\n\n您将开始录入学生信息\n输入1将继续\n输入2返回上一层\n输入0将退出\n"
looo:
s);
switch(s)
case0:
case1:
{
count++;
\n\n您将输入第%d学生的信息:
count);
printf("
\n学号:
scanf("
stu[i].num);
姓名:
%s"
stu[i].name);
性别:
stu[i].sex);
家庭住址:
stu[i].home);
联系电话:
stu[i].Tel);
i++;
gotoloop;
break;
case2:
\n输入错误,请重新输入012中的一项"
gotolooo;
sort_num(stu,i);
stu[i+1].num=0;
stu[0].num+=count;
fseek(fp,0,SEEK_SET);
fwrite(stu,sizeof(structstudent),N,fp);
fseek(fp,0,SEEK_SET);
fread(stu,sizeof(structstudent),N,fp);
for(i=1;
i<
=stu[0].num;
i++)
%d\n"
stu[i].num);
system("
pause"
学生信息修改voidinfo_2()
该函数运行后,首先打开文件,读取文件内容到数组中。
设置变量num用户输入一个学号。
然后用一个for循环将num与数组中的学号的值进行比较,如果相同,跳出循环。
找到后将其输出。
询问是否修改。
修改后将其写入文件中。
关闭文件。
voidinfo_2()/*信息修改函数*/
intj;
if((fp=fopen("
"
rb"
Cannotopenfile\n"
exit
(1);
}/*打开文件*/
fread(stu,sizeof(structstudent),1,fp);
for(j=1;
j<
j++)
fread(&
stu[j],sizeof(structstudent),1,fp);
inti,num,xu,a;
llll:
\n\n请输入需要修改信息的学生的学号:
\n"
num);
for(i=1;
i<
i++)
if(stu[i].num==num)
}/*查找需要修改的学生的信息*
if(i>
=stu[0].num)
查无此人"
return;
请问您是否是需要修改此生的信息:
学号%d姓名%s性别%s家庭住址%s联系电话%d"
stu[i].num,stu[i].name,stu[i].sex,stu[i].home,stu[i].Tel);
\n\n如果是请输入1不是请输入2:
xu);
switch(xu)
请输入新的信息\n"
学号:
stu[i].name);
stu[i].sex);
stu[i].home);
完成修改!
\n输入错误,请重新输入01中的一项"
}/*修改学生信息*/
fwrite(stu,sizeof(structstudent),stu[0].num,fp);
/*写入文件中*/
\n是否继续修改学生信息\n是请输入1\n退出请输入2\n返回上一层请输入0"
lllk:
a);
switch(a)
gotollll;
gotolllk;
}/*关闭文件*/
学生数据模块的函数与学生信息模块的函数相似,录入,修改,查询功能。
学生综合信息查询voidlook()
2.该函数运行后,首先打开文件,读取文件内容到数组中。
然后询问是否继续修改,如果是goto语句回到输入学号那里,如果不是,关闭文件退出。
voidlook()/*综合信息显示函数*/
intm;
for(m=1;
m<
m++)
stu[m],sizeof(structstudent),1,fp);
/*读取文件*/
inti,num,a;
\n\n请输入需要查询综合信息的学生的学号:
}/*查找需要修改的学生的信息*/
学生数据显示:
\n\n"
学号%d姓名%s性别%s家庭住址%s联系电话%d\n"
语文%d数学%d英语%d平均分%d考试名次%d\n"
stu[i].s1,stu[i].s2,stu[i].s3,stu[i].ave,stu[i].m1);
同学互评分%d品德成绩%d任课教师评分%d综合测评总分%d综合排名%d"
stu[i].a1,stu[i].a2,stu[i].a3,stu[i].z,stu[i].m2);
\n是否继续查询学生数据是请输入1否请输入2\n"
/*关闭文件*/
用户指南voidhelp()
该函数主要用来提示用户此系统的信息,进入后浏览信息,最后定义一个变量i,请用户输入1返回到主菜单进行操作。
如果用户输入的不是1则提示请输入1。
voidhelp()
inti;
本系统可以存储学生的基本信息和各科成绩,并能计算考试成绩,综合测评成绩和排名。
\n\n"
基本信息包括:
学号、姓名、性别、家庭住址、联系电话;
\n\n各科成绩包括:
语文、数学、英语成绩;
其它包括:
考试名次、同学互评分、品德成绩、任课教师评分等。
说明:
考试成绩排名是按照考试成绩平均分计算的(平均分=(语+数+外)/3)\n\n"
综合测评总分=((考试成绩)*+(同学互评分)*+(品德成绩)*\n+(任课教师评分)*\n\n"
此系统最多可管理5000人信息。
其它请按照提示操作即可。
返回上一层请输入1"
i);
if(i=1)
else
输入错误请重新输入:
5系统测试及调试
系统的测试及调试是为了发现程序中错误,而执行程序的过程。
运行过程:
1)运行该程序,进入一个主菜单函数,出现了选择的菜单:
可输入选项进入子菜单(两个子菜单分别进入):
2)在进入第一个子菜单后可进行学生的信息处理:
在输入1后可进行学生信息的录入:
每录完一个信息后会询问是否继续录入或者返回上一层或者退出
返回上一层,便回到了主菜单可继续进行操作:
在信息处理内选择2来修改学生的信息:
3)在进入第二个子菜单后可进行学生的数据处理:
数据录入:
数据查询:
3)在主菜单选择3进入后可查询综合信息:
4)在主菜单选择4进入后可查看用户指南:
5)输入5便退出系统:
系统调试过程中遇到的问题:
1)录入学生信息后能够写进文件,但是只能查询时只能查询到第一个人的信息
错误原因:
录入信息后储存后。
无法知道信息的条数。
读取的时候只读取了第一条。
解决方案:
在信息录入的时候设置一个变